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

        Let the UI process do memory kills and replace crashes with diagnostic logging.
        <https://webkit.org/b/170016>
        <rdar://problem/31091292>

        Reviewed by Chris Dumez.

        Remove the memory kill code from WebCore that just crashes in favor of controlled
        teardown from UI process side in WebKit2.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::simulatedProcessCrashKey):
        (WebCore::DiagnosticLoggingKeys::exceededActiveMemoryLimitKey):
        (WebCore::DiagnosticLoggingKeys::exceededInactiveMemoryLimitKey):
        (WebCore::DiagnosticLoggingKeys::exceededBackgroundCPULimitKey):
        * page/DiagnosticLoggingKeys.h:
        * page/MemoryRelease.cpp:
        (WebCore::didExceedMemoryLimitAndFailedToRecover): Deleted.
        * page/MemoryRelease.h:

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

        Clean RTCPeerConnection.idl after bug 169978
        https://bugs.webkit.org/show_bug.cgi?id=169989

        Reviewed by Eric Carlson.

        No change of behavior.
        Moving addTransceiver to overloaded method to union type to match spec.
        Refactoring RTCRtpSender to take a String&&.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::RTCPeerConnection::completeAddTransceiver):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl: Cosmetic changes except for addTransceiver.
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpSender.h:

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

        Add logging in case libwebrtc.dylib cannot be opened
        https://bugs.webkit.org/show_bug.cgi?id=170017

        Reviewed by Geoffrey Garen.

        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2017-03-23  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a speculative build fix
        <rdar://problem/31225378>

        * crypto/CommonCryptoUtilities.h:

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

        WebSQL databases should not openable in private browsing.
        <rdar://problem/30383335> and https://bugs.webkit.org/show_bug.cgi?id=170013

        Reviewed by Alex Christensen.

        Test: storage/websql/private-browsing-open-disabled.html

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::tryToOpenDatabaseBackend): Throw an exception if in private browsing.
        * Modules/webdatabase/DatabaseManager.h:

2017-03-22  Dean Jackson  <dino@apple.com>

        NeverDestroyed<MediaQueryEvaluator> must explicitly construct with a String
        https://bugs.webkit.org/show_bug.cgi?id=169987
        <rdar://problem/31211087>

        Reviewed by Alex Christensen.

        CSSDefaultStyleSheets creates a static MediaQueryEvaluator, but thanks
        to the template magic of NeverDestroyed, it was converting the char*
        argument into a bool, and calling the wrong constructor.

        Unfortunately this is difficult to test because it only affects
        the default UA style sheets, and they currently don't have
        and @media rules (which would always evaluate to true given
        the bug). I don't want to put in a useless rule just to check
        if the bug is fixed. When one is added for bug 168447, this change
        will be exercised.

        * css/CSSDefaultStyleSheets.cpp: Explicitly construct with a String
        rather than a char*.
        (WebCore::screenEval):
        (WebCore::printEval):

2017-03-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Make mock video source work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=169923

        Reviewed by Youenn Fablet.
        
        Generate IOSurface-backed CVPixelBuffers. Allocate them from a 
        CVPixelBufferPool for efficiency.

        No new tests, no functional change.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::pixelBufferFromCGImage):
        (WebCore::MockRealtimeVideoSourceMac::applySize):
        * platform/mock/MockRealtimeVideoSource.h:

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

        Let MemoryPressureHandler track whether the process is active or inactive.
        <https://webkit.org/b/169990>

        Reviewed by Antti Koivisto.

        Have PerformanceMonitor inform MemoryPressureHandler about relevant
        changes to the page activity states.

        Also change the "1 hour after last page load" policy to "1 hour after
        last being visible in an active window."

        * page/MainFrame.cpp:
        (WebCore::MainFrame::didCompleteLoad):
        * page/MainFrame.h:
        * page/MemoryRelease.cpp:
        (WebCore::processIsEligibleForMemoryKill): Deleted.
        * page/MemoryRelease.h:
        * page/Page.h:
        (WebCore::Page::performanceMonitor):
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::PerformanceMonitor):
        (WebCore::PerformanceMonitor::activityStateChanged):
        (WebCore::PerformanceMonitor::processMayBecomeInactiveTimerFired):
        (WebCore::PerformanceMonitor::updateProcessStateForMemoryPressure):
        * page/PerformanceMonitor.h:

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

        Support RTCPeerConnectionState
        https://bugs.webkit.org/show_bug.cgi?id=169978

        Reviewed by Jon Lee.

        Test: webrtc/connection-state.html

        Implementing https://www.w3.org/TR/webrtc/#rtcpeerconnectionstate-enum.
        Its state and event is based on changes made to ice gathering state and ice connection state.

        * CMakeLists.txt: Adding RTCPeerConnectionState idl.
        * DerivedSources.make: Ditto.
        * Modules/mediastream/RTCPeerConnection.cpp: Splitting close in doClose/doStop so that we can send closed event
        in case close is called, but not if stopped.
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::doStop):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl: Fixing IDL and minor cosmetic changes
        * Modules/mediastream/RTCPeerConnection.js:
        (setLocalDescription): Cosmetic change.
        (setRemoteDescription):
        * Modules/mediastream/RTCPeerConnectionState.idl: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnIceGatheringChange): Adding 'gathering' state
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * platform/mediastream/RTCPeerConnectionState.h: Added.

2017-03-22  Jiewen Tan  <jiewen_tan@apple.com>

        ASSERT_WITH_SECURITY_IMPLICATION hit when removing an <input type="range"> while dragging on iOS
        https://bugs.webkit.org/show_bug.cgi?id=165535
        <rdar://problem/29559749>

        Reviewed by Ryosuke Niwa.

        Utimately we should prevent SliderThumbElement::unregisterForTouchEvents() being called while
        updating render tree. A quick fix for this is to move dispatchFormControlChangeEvent for input
        from stopDragging up to the callers which really needs to dispatch this event, i.e., finishing
        dragging the slider. It is clear that not every caller of stopDragging wants to
        dispatchFormControlChangeEvent.

        Test: fast/forms/range/range-remove-on-drag.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::stopDragging):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::handleTouchEndAndCancel):

2017-03-22  Antti Koivisto  <antti@apple.com>

        Dynamically applied :empty pseudo class with display:none does not get unapplied
        https://bugs.webkit.org/show_bug.cgi?id=169907

        Reviewed by Ryosuke Niwa.

        We improperly reset the styleAffectedByEmpty bit when removing the renderer when :empty starts
        applying. We then fail to invalidate the style when the element becomes non-empty again.

        Fix by resetting the style relation bits only when computing the style.

        Test: fast/css/empty-display-none-invalidation.html

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

            Expose this separately.

        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):

            Don't reset style relation bits when removing renderers.

        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::resetComputedStyle):
        (WebCore::ElementRareData::resetStyleRelations):

            Reset all these bits in one function.

        (WebCore::ElementRareData::resetDynamicRestyleObservations): Deleted.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::TreeResolver::resolveComposedTree):

            Call the explicit style relation reset function when recomputing style.

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

        [GTK] Honor GTK+ font settings
        https://bugs.webkit.org/show_bug.cgi?id=82889

        Reviewed by Carlos Garcia Campos.

        After much discussion with Behdad and Martin (who is still not completely convinced I think
        :) I want to merge cairo font options into the Fontconfig pattern used for rendering using
        cairo_ft_font_options_substitute(). This is how the API was designed to be used anyway.
        Fontconfig will still have final say over whether to actually respect the desktop settings
        or not, so it can still choose to ignore the desktop's settings, but I don't think it makes
        sense to have desktop-wide font settings and not tell Fontconfig about them, especially when
        the whole point of WebKitGTK+ is desktop integration. This should also reduce complaints
        that we're not following desktop settings and that we're drawing fonts differently than
        Firefox.

        * PlatformGTK.cmake:
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::getDefaultCairoFontOptions):
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters):
        (WebCore::strongAliasesForFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultFontconfigOptions):
        (WebCore::getDefaultCairoFontOptions): Deleted.
        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        (getDefaultCairoFontOptions):

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

        [Modern Media Controls] Controls size lags behind media size
        https://bugs.webkit.org/show_bug.cgi?id=169962
        <rdar://problem/30340293>

        Reviewed by Dean Jackson.

        We used to dispatch the "resize" event to the shadow root on a timer and commit changes to the DOM
        when handling it inside of a requestAnimationFrame() callback. We now dispatch the "resize" event
        as a post-layout task and commit to the DOM right away which ensures immediate size changes of the
        controls.

        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        Making some layout() safer by returning early in case they're called during the object construction
        phase, due to the LayoutNode "width" setter now calling that method.

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get width):
        (MediaControls.prototype.set width):
        Calling layout() in the "width" setter to ensure that the inline controls layout is invalidated as
        soon as the controls width changes instead of waiting on the next rAF to update the layout.

        * Modules/modern-media-controls/controls/scheduler.js:
        (const.scheduler.new.prototype.flushScheduledLayoutCallbacks):
        Add a new method to immediately call queued layouts.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.handleEvent):
        Flush all queued layouts when handling a "resize" event.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        Queue the "resize" event as a post-layout task.

        (WebCore::HTMLMediaElement::contextDestroyed):
        * html/HTMLMediaElement.h:
        Remove the queue we no longer use.

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

        Try to fix the Mac CMake build after r214266.

        * PlatformMac.cmake:

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

        WebKit should disallow beforeunload alerts from web pages users have never interacted with
        https://bugs.webkit.org/show_bug.cgi?id=169936
        <rdar://problem/23798897>

        Reviewed by Brent Fulgham.

        WebKit should disallow beforeunload alerts from web pages users have never interacted with.
        This reduces the risk of annoyance to the user and is allowed by the specification:
        - https://html.spec.whatwg.org/multipage/browsers.html#prompt-to-unload-a-document (Step 8):
        which says:
        """
        The user agent is encouraged to avoid asking the user for confirmation if it judges that doing
        so would be annoying, deceptive, or pointless. A simple heuristic might be that if the user
        has not interacted with the document, the user agent would not ask for confirmation before
        unloading it.
        """

        Firefox already implements this, Chrome does not.

        Tests: fast/events/beforeunload-alert-no-user-interaction.html
               fast/events/beforeunload-alert-user-interaction.html
               fast/events/beforeunload-alert-user-interaction2.html

        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):

2017-03-22  Brent Fulgham  <bfulgham@apple.com>

        ASan violation in IconLoader::stopLoading
        https://bugs.webkit.org/show_bug.cgi?id=169960
        <rdar://problem/30577691>

        Reviewed by David Kilzer.

        DocumentLoader::finishLoadingIcon handles the life cycle of the IconLoader. Once this method is called,
        we should return immediately rather than attempt to make further modifications to the IconLoader.

        No new tests due to lack of test features (see https://bugs.webkit.org/show_bug.cgi?id=164895). Easily
        tested in MiniBrowser under ASan visiting websites with icons.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished):

2017-03-22  Nan Wang  <n_wang@apple.com>

        AX: WebKit is returning the wrong rangeForLine
        https://bugs.webkit.org/show_bug.cgi?id=169940

        Reviewed by Chris Fleizach.

        The AXRangeForLine is being calculated using VisiblePostition, so 
        when we try to use the index we should validate it using VisiblePosition.

        Changes are covered in the modified test.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange):
        (WebCore::AXObjectCache::characterOffsetForIndex):

2017-03-22  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Fix partitioning bug for client-side cookie access
        https://bugs.webkit.org/show_bug.cgi?id=169906
        <rdar://problem/31164456>

        Reviewed by Alex Christensen.

        The existing test case was expanded to cover this change.

        * platform/network/NetworkStorageSession.h:
            Moved the two cookieStoragePartition() functions into the class.
            Also declared them const.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStoragePartition):
            Now checks whether it should partition or not.
        (WebCore::getPartitioningDomain):
            Inline convenience function.
        (WebCore::NetworkStorageSession::shouldPartitionCookies):
            Renamed since it now receives a top privately controlled domain
            instead of a host.
        (WebCore::cookieStoragePartition): Deleted.
            This moved into NetworkStorageSession.
        (WebCore::hostIsInDomain): Deleted.
            No longer needed since we generate the top privately controlled
            domain for both the resource and the partition.
        (WebCore::NetworkStorageSession::shouldPartitionCookiesForHost): Deleted.
            Renamed WebCore::NetworkStorageSession::shouldPartitionCookies().
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesInPartitionForURL):
            Now calls WebCore::NetworkStorageSession::cookieStoragePartition().
        (WebCore::setCookiesFromDOM):
            Now calls WebCore::NetworkStorageSession::cookieStoragePartition().
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
            Now calls WebCore::NetworkStorageSession::cookieStoragePartition().

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

        Media files served without an extension will not load in <video> tag.
        https://bugs.webkit.org/show_bug.cgi?id=169895

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-served-as-text-with-type.html

        Media files served without an extension will commonly have no MIME type (or incorrect MIME type) information
        delivered in the HTTP header. In situations like these, if media referenced by a <source> tag with a type=
        attribute containing MIME type (and optionally, codec) information, that type should be used preferentially.

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::contentMIMEType):
        (WebCore::MediaPlayer::contentTypeCodecs):
        (WebCore::MediaPlayer::contentMIMETypeWasInferredFromExtension):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):

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

        [QuickLook] Move QuickLook.{h,mm} to platform/ios/
        https://bugs.webkit.org/show_bug.cgi?id=169963

        Reviewed by Andreas Kling.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/QuickLook.h: Renamed from Source/WebCore/loader/ios/QuickLook.h.
        * platform/ios/QuickLook.mm: Renamed from Source/WebCore/loader/ios/QuickLook.mm.

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

        [QuickLook] Rename QuickLookHandle to PreviewLoader
        https://bugs.webkit.org/show_bug.cgi?id=169961

        Reviewed by Andreas Kling.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::isQuickLookResource):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::shouldCreatePreviewLoaderForResponse):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didReceiveBuffer):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::shouldCreateQuickLookHandleForResponse): Deleted.
        * loader/SubresourceLoader.h:
        * loader/ios/PreviewLoader.h: Copied from Source/WebCore/loader/ios/QuickLook.h.
        * loader/ios/PreviewLoader.mm: Added.
        (testingClient):
        (emptyClient):
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:]):
        (-[WebPreviewLoader appendDataArray:]):
        (-[WebPreviewLoader finishedAppending]):
        (-[WebPreviewLoader failed]):
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]):
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]):
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        (isQuickLookPasswordError):
        (-[WebPreviewLoader connection:didFailWithError:]):
        (WebCore::PreviewLoader::PreviewLoader):
        (WebCore::PreviewLoader::~PreviewLoader):
        (WebCore::PreviewLoader::shouldCreateForMIMEType):
        (WebCore::PreviewLoader::create):
        (WebCore::PreviewLoader::didReceiveData):
        (WebCore::PreviewLoader::didReceiveBuffer):
        (WebCore::PreviewLoader::didFinishLoading):
        (WebCore::PreviewLoader::didFail):
        (WebCore::PreviewLoader::setClientForTesting):
        * loader/ios/QuickLook.h:
        (): Deleted.
        * loader/ios/QuickLook.mm:
        (WebCore::QLPreviewGetSupportedMIMETypesSet):
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::registerQLPreviewConverterIfNeeded):
        (WebCore::QLPreviewProtocol):
        (WebCore::isQuickLookPreviewURL):
        (qlPreviewConverterDictionaryMutex): Deleted.
        (QLPreviewConverterDictionary): Deleted.
        (QLContentDictionary): Deleted.
        (addQLPreviewConverterWithFileForURL): Deleted.
        (createQLPreviewProtocol): Deleted.
        (testingClient): Deleted.
        (emptyClient): Deleted.
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:quickLookHandle:]): Deleted.
        (-[WebPreviewLoader appendDataArray:]): Deleted.
        (-[WebPreviewLoader finishedAppending]): Deleted.
        (-[WebPreviewLoader failed]): Deleted.
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]): Deleted.
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]): Deleted.
        (-[WebPreviewLoader connectionDidFinishLoading:]): Deleted.
        (isQuickLookPasswordError): Deleted.
        (-[WebPreviewLoader connection:didFailWithError:]): Deleted.
        (WebCore::QuickLookHandle::QuickLookHandle): Deleted.
        (WebCore::QuickLookHandle::~QuickLookHandle): Deleted.
        (WebCore::QuickLookHandle::shouldCreateForMIMEType): Deleted.
        (WebCore::QuickLookHandle::create): Deleted.
        (WebCore::QuickLookHandle::didReceiveData): Deleted.
        (WebCore::QuickLookHandle::didReceiveBuffer): Deleted.
        (WebCore::QuickLookHandle::didFinishLoading): Deleted.
        (WebCore::QuickLookHandle::didFail): Deleted.
        (WebCore::QuickLookHandle::setClientForTesting): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ios/PreviewLoaderClient.h: Renamed from Source/WebCore/platform/network/ios/QuickLookHandleClient.h.
        (WebCore::PreviewLoaderClient::~PreviewLoaderClient):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setQuickLookPassword):
        * testing/MockPreviewLoaderClient.cpp: Renamed from Source/WebCore/testing/MockQuickLookHandleClient.cpp.
        (WebCore::MockPreviewLoaderClient::singleton):
        (WebCore::MockPreviewLoaderClient::didRequestPassword):
        * testing/MockPreviewLoaderClient.h: Renamed from Source/WebCore/testing/MockQuickLookHandleClient.h.

2017-03-22  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableStreamBYOBRequest respond() (readable stream state)
        https://bugs.webkit.org/show_bug.cgi?id=169759

        Reviewed by Youenn Fablet.

        Implemented readable state part of respond() function. Parts of code cannot
        currently be reached as they require ReadableStreamBYOBReader to be implemented.

        Added new tests and updated expectations.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerEnqueue): Name shortened.
        (readableByteStreamControllerRespondInternal): Updated with readable state case.
        (cloneArrayBuffer): Added.
        (readableByteStreamControllerRespondInReadableState): Added.
        (readableByteStreamControllerRespondInClosedState): Updated.
        (readableByteStreamControllerProcessPullDescriptors): Added.
        (readableByteStreamControllerFillDescriptorFromQueue): Added.
        (readableByteStreamControllerShiftPendingDescriptor): Name shortened.
        (readableByteStreamControllerCommitDescriptor): Name shortened.
        (readableByteStreamControllerConvertDescriptor): Name shortened.

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

        RTCPeerConnection is crashing if no backend is created
        https://bugs.webkit.org/show_bug.cgi?id=169938

        Reviewed by Geoffrey Garen.

        RTCPeerConnection should not be visible if it is not able to create a backend.
        In case when this happens anyway, it should be able to be stopped and destroyed without crashing.
        To do so, we need to set its state to closed.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::close): Cosmetic change, just in case stop becomes reentrant at some point.

2017-03-22  Antoine Quint  <graouts@webkit.org>

        [Modern Media Controls] Rendering glitches for fullscreen controls while dragging
        https://bugs.webkit.org/show_bug.cgi?id=169949
        <rdar://problem/30687803>

        Reviewed by Eric Carlson.

        Clipping the controls bar has some unwelcome side effects and isn't necessary, so
        we simply remove it. An existing test was amended to check that there is no clipping
        applied to the controls bar.

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen > .controls-bar):

2017-03-22  John Wilander  <wilander@apple.com>

        Add back the null check in TextureCacheCV::textureFromImage()
        https://bugs.webkit.org/show_bug.cgi?id=169931
        <rdar://problem/27139820>

        Reviewed by Alex Christensen.

        No new tests. Just adding back a check that was previously there.

        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::textureFromImage):

2017-03-21  Antti Koivisto  <antti@apple.com>

        Use AtomicString in RuleSet and RuleFeature
        https://bugs.webkit.org/show_bug.cgi?id=119310
        <rdar://problem/28214658>

        Reviewed by Andreas Kling.

        ..instead of the plain AtomicStringImpl*. This introduces some ref churn but not too much.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::ancestorClassRules):
        (WebCore::DocumentRuleSets::ancestorAttributeRulesForHTML):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):
        (WebCore::makeAttributeSelectorKey):
        (WebCore::RuleFeatureSet::collectFeatures):
        * css/RuleFeature.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::rulesCountForName):
        (WebCore::RuleSet::addRule):
        * css/RuleSet.h:
        (WebCore::RuleSet::idRules):
        (WebCore::RuleSet::classRules):
        (WebCore::RuleSet::shadowPseudoElementRules):
        (WebCore::RuleSet::tagRules):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasSelectorForAttribute):
        (WebCore::StyleResolver::hasSelectorForClass):
        (WebCore::StyleResolver::hasSelectorForId):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByAttributeChange):
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::mayBeAffectedBySlottedRules):
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::resolve):
        (WebCore::Style::SharingResolver::canShareStyleWithElement):
        (WebCore::Style::SharingResolver::classNamesAffectedByRules):

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

        Safari sends empty "Access-Control-Request-Headers" in preflight request
        https://bugs.webkit.org/show_bug.cgi?id=169851

        Reviewed by Chris Dumez.

        Covered by updated test.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest): Not adding "Access-Control-Request-Headers" to
        request header if value is empty.

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

        XMLHttpRequest: getAllResponseHeaders() should lowercase header names before sorting
        https://bugs.webkit.org/show_bug.cgi?id=169286

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method now mandates to lowercase the header names and
        sort them before appending them. This ensures that differences in the way headers are processed by browsers are
        not visible to web pages. This also moves towards lowercased/case-insensitive header processing which should be
        the norm.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders): Lower-casing, then sorting, then serializing headers.
        * xml/XMLHttpRequest.h: Storing getAllResponseHeaders result if case needed again.

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

        Implement the "noopener" feature for window.open()
        https://bugs.webkit.org/show_bug.cgi?id=163960
        <rdar://problem/28941679>

        Reviewed by Sam Weinig.

        Implement the "noopener" feature for window.open(). If 'noopener' is passed to window.open()
        then the new Window's opener property will be null.

        Tests: imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-closed.html
               imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-multiple.html
               imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-noopener.html
               imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener-noreferrer.html
               imported/w3c/web-platform-tests/html/browsers/windows/auxiliary-browsing-contexts/opener.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/WindowFeatures.cpp:
        (WebCore::parseWindowFeatures):
        (WebCore::setWindowFeature):
        * page/WindowFeatures.h:

2017-03-21  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] "Only from websites I visit" cookie policy is broken
        https://bugs.webkit.org/show_bug.cgi?id=168912

        Reviewed by Carlos Garcia Campos.

        Do not reset the first party for cookies on redirects. That's properly done for the main
        resource in DocumentLoader::willSendRequest and, in the case of subresources, is absolutely
        wrong (which is what we were doing since r143931).

        The most notable effect was that subresources loaded via redirects were effectively
        bypassing the "no third party" policy for cookies.

        Test: http/tests/security/cookies/third-party-cookie-blocking-redirect.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect):

2017-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Make it possible to use WEB_UI_STRING macros to mark translatable strings in glib based ports
        https://bugs.webkit.org/show_bug.cgi?id=169672

        Reviewed by Michael Catanzaro.

        WEB_UI_STRING macros are currently used by Cocoa based ports and Windows port. For other ports it simply returns
        the given string, but it's not translated. In the GTK+ port we have all translatable strings from
        LocalizedStrings.cpp copied in LocalizedStringsGtk.cpp to use the glib macros to mark them as translatable. In
        most of the cases the strings are exactly in the same, in some others (the context menu ones) the string only
        differs in the mnemonics used by GTK, and only in a few cases the strings are different. We could remove most of
        that duplication if strings used by WEB_UI_STRING were marked as translatable in glib based ports too.

        This patch makes that possible with the following changes:

          - Add WEB_UI_STRING_WITH_MNEMONIC() to handle the cases where the strings only differ in the mnemonics. It
            receives the string with mnemonics that is ignored in all ports except GTK+.
          - All platform specific strings have been moved to the platform files, to ensure scanners don't include
            strings from other ports.
          - For the same reason a new macro WEB_UI_CFSTRING has been also added, just to make sure that CF strings are
            only used by CF based ports. The implementation is the same as WEB_UI_STRING, it only changes the name to
            not confuse the scanners.
          - And again for the same reason, for non-CF and non-Glib cases WEB_UI_STRING is not used, since in those cases
            strings are not really translated and String::fromUTF8() is actually used. So, now we use String::fromUTF8()
            directly instead of WEB_UI_STRING to not confuse the scanners.

        * CMakeLists.txt: Add LocalizedStrings.cpp to the compilation.
        * PlatformGTK.cmake: Move LocalizedStringsGtk.cpp to the list of sources not depending on GTK+, since it no
        longer uses GTK+.
        * extract-localizable-strings.pl: Update it to handle the new macros.
        * platform/LocalizedStrings.cpp:
        (WebCore::formatLocalizedString):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagDownloadVideoToDisk):
        (WebCore::contextMenuItemTagDownloadAudioToDisk):
        (WebCore::contextMenuItemTagExitVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::AXAutoFillContactsLabel):
        (WebCore::imageTitle):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::textTrackCountryAndLanguageMenuItemText):
        (WebCore::textTrackLanguageMenuItemText):
        (WebCore::closedCaptionTrackMenuItemText):
        (WebCore::sdhTrackMenuItemText):
        (WebCore::easyReaderTrackMenuItemText):
        (WebCore::forcedTrackMenuItemText):
        (WebCore::audioDescriptionTrackSuffixText):
        (WebCore::webCryptoMasterKeyKeychainLabel):
        * platform/LocalizedStrings.h:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::copyImageUnknownFileLabel):
        (WebCore::contextMenuItemTagSearchInSpotlight):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagShowFonts):
        (WebCore::contextMenuItemTagStyles):
        (WebCore::contextMenuItemTagShowColors):
        (WebCore::contextMenuItemTagSpeechMenu):
        (WebCore::contextMenuItemTagStartSpeaking):
        (WebCore::contextMenuItemTagStopSpeaking):
        (WebCore::contextMenuItemTagCorrectSpellingAutomatically):
        (WebCore::contextMenuItemTagSubstitutionsMenu):
        (WebCore::contextMenuItemTagShowSubstitutions):
        (WebCore::contextMenuItemTagSmartCopyPaste):
        (WebCore::contextMenuItemTagSmartQuotes):
        (WebCore::contextMenuItemTagSmartDashes):
        (WebCore::contextMenuItemTagSmartLinks):
        (WebCore::contextMenuItemTagTextReplacement):
        (WebCore::contextMenuItemTagTransformationsMenu):
        (WebCore::contextMenuItemTagMakeUpperCase):
        (WebCore::contextMenuItemTagMakeLowerCase):
        (WebCore::contextMenuItemTagCapitalize):
        (WebCore::contextMenuItemTagChangeBack):
        (WebCore::contextMenuItemTagEnterVideoEnhancedFullscreen):
        (WebCore::contextMenuItemTagExitVideoEnhancedFullscreen):
        (WebCore::AXARIAContentGroupText):
        (WebCore::AXHorizontalRuleDescriptionText):
        (WebCore::AXMarkText):
        (WebCore::AXMeterGaugeRegionOptimumText):
        (WebCore::AXMeterGaugeRegionSuboptimalText):
        (WebCore::AXMeterGaugeRegionLessGoodText):
        (WebCore::builtInPDFPluginName):
        (WebCore::pdfDocumentTypeDescription):
        (WebCore::postScriptDocumentTypeDescription):
        (WebCore::keygenMenuItem2048):
        (WebCore::keygenKeychainItemName):
        (WebCore::htmlSelectMultipleItems):
        (WebCore::fileButtonChooseMediaFileLabel):
        (WebCore::fileButtonChooseMultipleMediaFilesLabel):
        (WebCore::fileButtonNoMediaFileSelectedLabel):
        (WebCore::fileButtonNoMediaFilesSelectedLabel):
        (WebCore::insertListTypeNone):
        (WebCore::insertListTypeBulleted):
        (WebCore::insertListTypeBulletedAccessibilityTitle):
        (WebCore::insertListTypeNumbered):
        (WebCore::insertListTypeNumberedAccessibilityTitle):
        (WebCore::exitFullScreenButtonAccessibilityTitle):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::uploadFileText):
        (WebCore::allFilesText):

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

        [iOS] Migrate off of CTFontCreateForCSS
        https://bugs.webkit.org/show_bug.cgi?id=168894

        Reviewed by Antti Koivisto.

        Use the new font selection algorithm introduced in r213163 on iOS.

        Test: fast/text/font-weights.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/graphics/cocoa/FontCocoa.mm: On iOS only, CTFontCreateForCSS()
        will return a 0-sized font if the passed size parameter is 0. However, all
        other CT APIs will create a 12-px-sized font if the passed size parameter is
        0. Most of our code knows and understands this (because this is how it works
        on the Mac). However, this one place needs to be updated to understand this.

2017-03-21  Simon Fraser  <simon.fraser@apple.com>

        Make non-decoded image flashing less intrusive
        https://bugs.webkit.org/show_bug.cgi?id=169942

        Reviewed by Said Abou-Hallawa.

        When compositing borders are enabled, we paint yellow for images that paint but don't yet have a decoded
        frame. Give this yellow 50% alpha to make it less intrusive

        Also log to the images log channel when we destroy decoded data.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::draw):

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

        Loosen audio playback restrictions when the volume is 0.
        https://bugs.webkit.org/show_bug.cgi?id=169897

        Reviewed by Eric Carlson.

        Added API tests.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):

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

        Disable all virtual tables.
        <rdar://problem/31081972> and https://bugs.webkit.org/show_bug.cgi?id=169928
        
        Reviewed by Jer Noble.

        No new tests (Covered by changes to existing test).

        * Modules/webdatabase/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):

2017-03-21  Anders Carlsson  <andersca@apple.com>

        Remove bogus availability annotations from DOM SPI headers.
        rdar://problem/31015675

        Rubber-stamped by Dan Bernstein.

        * platform/cocoa/WebKitAvailability.h:
        Remove __NSi_9876_5 #define.

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

        Tear down descendant renderers when <slot>'s display value is set to no "contents".
        https://bugs.webkit.org/show_bug.cgi?id=169921
        <rdar://problem/30336417>

        Reviewed by Antti Koivisto.

        Since "display: contents" does not generate a renderer, when an element's display value is
        changed to something other than "contents", we not only create a renderer but also reparent its descendant
        subtree (e.g from slot's parent to the newly constructed slot renderer). During this reparenting, we
        need to tear down the descendant subtree tree and build it up again to reflect the new rendering context.

        Test: fast/shadow-dom/slot-with-continuation-descendants.html

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

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

        Teach TextIndicator to estimate the background color of the given Range
        https://bugs.webkit.org/show_bug.cgi?id=169869
        <rdar://problem/31127272>

        Reviewed by Anders Carlsson and Simon Fraser.

        Introduces a simple heuristic to compute a background color that is appropriate to use as a border surrounding
        the snapshot of the given Range. This work is only carried out if TextIndicatorOptionComputeEstimatedBackgroundColor
        is specified. The details of how this background color is estimated (as well as when to fall back) can be improved
        in several ways (one idea is to sample colors along the edge of the snapshot). For the time being, this patch
        naively walks up the render tree in search of enclosing parent renderers that have background colors. If any
        renderers have a style that is deemed too complex to capture in a single background color, then fall back to the
        base document background color; otherwise, the estimated background color is the result of blending these
        background colors together.

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

        Bail out of the background color codepath if the renderer has backdrop filters, has a background image, or uses
        a non-normal blend mode.

        (WebCore::fallbackBackgroundColorForTextSelection):
        (WebCore::estimatedBackgroundColorForRange):
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:

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

        Crash in WebCore: WebCore::CARingBuffer::getCurrentFrameBounds + 28
        https://bugs.webkit.org/show_bug.cgi?id=169887
        <rdar://problem/23648082>

        Reviewed by Eric Carlson.

        Because AudioSourceProviderAVFObjC::prepareCallback() can concievably be called after the AudioSourceProviderAVFObjC
        it refers to has been destroyed, add an extra layer of indirection between the tap and the provider, and invalidate
        that level of indirection before the AudioSourceProviderAVFObjC is destroyed.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::initCallback):
        (WebCore::AudioSourceProviderAVFObjC::finalizeCallback):
        (WebCore::AudioSourceProviderAVFObjC::prepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::unprepareCallback):
        (WebCore::AudioSourceProviderAVFObjC::processCallback):

2017-03-21  Simon Fraser  <simon.fraser@apple.com>

        Remove logging left in by mistake.

        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::willBeDestroyed):

2017-03-21  Jon Lee  <jonlee@apple.com>

        Clean up RTCSdpType, RTC enums and headers
        https://bugs.webkit.org/show_bug.cgi?id=169741

        Reviewed by Youenn Fablet.

        Convert to RTCSdpType.
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/MediaEndpointSessionDescription.cpp:
        * Modules/mediastream/MediaEndpointSessionDescription.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:

        Convert SDP argument to lvalue.
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/RTCSessionDescription.h:
        * Modules/mediastream/RTCSessionDescription.idl:

        Keep RTC enum IDLs above platform. Move the C++ enum headers into platform.
        * Modules/mediastream/RTCEnums.h: Removed.
        * Modules/mediastream/RTCIceConnectionState.h: Removed.
        * Modules/mediastream/RTCIceGatheringState.h: Removed.
        * Modules/mediastream/RTCIceTransportState.h: Removed.
        * Modules/mediastream/RTCSignalingState.h: Removed.
        * platform/mediastream/PeerConnectionStates.h: Remove from .xcodeproj. Move enums to separate headers.
        * platform/mediastream/RTCBundlePolicy.h:
        * platform/mediastream/RTCIceConnectionState.h:
        * platform/mediastream/RTCIceGatheringState.h:
        * platform/mediastream/RTCIceTransportPolicy.h:
        * platform/mediastream/RTCIceTransportState.h:
        * platform/mediastream/RTCRtpTransceiverDirection.h: Renamed from Source/WebCore/Modules/mediastream/RTCRtpTransceiverDirection.h.
        * platform/mediastream/RTCSdpType.h:
        * platform/mediastream/RTCSignalingState.h:

        Move RtpTransceiverDirection out to a separate IDL.
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        * Modules/mediastream/RTCRtpTransceiver.h:
        * WebCore.xcodeproj/project.pbxproj:

        Replace RTCEnums include with specific headers per enum.
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCConfiguration.h:
        * Modules/mediastream/RTCIceTransport.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::completeAddTransceiver): Remove unneeded static_cast.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransceiver.h:
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/MediaEndpointConfiguration.h:
        * platform/mock/MockMediaEndpoint.h:

        Clean up license.
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

        Modernize header to use #pragma once.
        * platform/mediastream/RTCDTMFSenderHandler.h:
        * platform/mediastream/RTCDTMFSenderHandlerClient.h:
        * platform/mediastream/RTCIceCandidateDescriptor.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mediastream/RTCSessionDescriptionDescriptor.h:
        * platform/mediastream/RTCSessionDescriptionRequest.h:
        * platform/mediastream/RTCVoidRequest.h:
        * platform/mock/RTCNotifiersMock.h:

2017-03-20  Jon Lee  <jonlee@apple.com>

        Add iceCandidatePoolSize to RTCConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=169866

        Reviewed by Youenn Fablet.

        Test: webrtc/rtcconfiguration-icecandidatepoolsize.html

        * Modules/mediastream/RTCConfiguration.h:
        * Modules/mediastream/RTCConfiguration.idl: Add iceCandidatePoolSize.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration): Set the size in libwebrtc.
        * platform/mediastream/MediaEndpointConfiguration.cpp:
        (WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
        * platform/mediastream/MediaEndpointConfiguration.h:

2017-03-20  Jon Lee  <jonlee@apple.com>

        Follow-up on comments for bug 169664
        https://bugs.webkit.org/show_bug.cgi?id=169709

        Reviewed by Youenn Fablet.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::deriveAggregatedIceConnectionState): Update deriveAggregatedIceConnectionState.
        (WebCore::MediaEndpointPeerConnection::iceTransportStateChanged): Set a capacity and used
        uncheckedAppend.

2017-03-20  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace point for memory warning handling
        https://bugs.webkit.org/show_bug.cgi?id=169893

        Reviewed by Zalan Bujtas.

        Add a TraceScope for low memory handling, which logs 'critical' and 'synchronous'.

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

2017-03-20  Simon Fraser  <simon.fraser@apple.com>

        Optimize packing of Document and superclass data members
        https://bugs.webkit.org/show_bug.cgi?id=169880

        Reviewed by Antti Koivisto.

        Move data members around to optimize packing in SecurityContext, SuspendableTimer and Document.
        This saves as few hundred bytes on Document.
        
        Padding detected via Tools/Scripts/dump-class-layout

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        * dom/SecurityContext.h:
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * page/SuspendableTimer.h:

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

        Suspend media playback in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=169883
        <rdar://problem/28056151>

        Reviewed by Eric Carlson.

        Suspend media playback in background tabs to save battery
        except in cases where we cannot (e.g. PiP, AirPlay).

        Test: media/media-playback-page-visibility.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        When page visibility state changes, begin / end media session
        interruption with reason PlatformMediaSession::EnteringBackground.
        This reason was already used on iOS when the application enters
        or exist background. HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction()
        takes care of preventing interruption in case of AirPlay or PiP.

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

        Prevent new navigations from onbeforeunload handler
        https://bugs.webkit.org/show_bug.cgi?id=169891
        <rdar://problem/31155736>

        Reviewed by Ryosuke Niwa.

        Ensure that all navigations initiated from an onbeforeunload handler are disallowed
        regardless of how they were scheduled. Such navigations go against the expectation
        of a user.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isNavigationAllowed): Added.
        (WebCore::FrameLoader::loadURL): Modified code to call FrameLoader::isNavigationAllowed().
        (WebCore::FrameLoader::loadWithDocumentLoader): Ditto.
        (WebCore::FrameLoader::stopAllLoaders): Ditto.
        * loader/FrameLoader.h:

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

        Prepare SocketStreamHandle for being created from WK2
        https://bugs.webkit.org/show_bug.cgi?id=169885

        Reviewed by Andy Estes.

        No change in behavior.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::sendFrame):
        Rename send to sendData to prevent name collisions with IPC::MessageSender::send.
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::sendData):
        (WebCore::SocketStreamHandle::send): Deleted.
        * platform/network/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImpl.h:
        Make platformSend and platformClose public so I can call them from IPC proxies.

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

        [QuickLook] Subresources should be in the same origin as the main document
        https://bugs.webkit.org/show_bug.cgi?id=169868
        <rdar://problem/29898214>

        Reviewed by Daniel Bates.

        Prior to this change, QuickLook documents were placed in a unique origin, which meant all
        subresources were loaded as cross-origin requests. This prevented XMLHttpRequests to the
        QuickLook custom protocol, since cross-origin XHRs must be made to a protocol that
        understands CORS.

        Instead of a unique origin, we now create an origin for QuickLook documents from the preview
        response URL (an x-apple-ql-id: URL), which will allow QuickLook to make same-origin XHRs by
        using a URL with the same scheme and host as the preview response URL.

        Test: http/tests/quicklook/same-origin-xmlhttprequest-allowed.html

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

2017-03-17  Jiewen Tan  <jiewen_tan@apple.com>

        window.crypto.getRandomValues() uses the insecure RC4 RNG
        https://bugs.webkit.org/show_bug.cgi?id=169623
        <rdar://problem/31044229>

        Reviewed by Brent Fulgham.

        This patch replaces the RC4 RNG with one based on AES-CTR.

        No change of behavior.

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

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

        [MediaStream] Respect constraints passed to getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=169870
        <rdar://problem/31138936>

        Reviewed by Youenn Fablet and Jer Noble.
        
        Remember the fitness score calculated when evaluating constraints passed to getUserMedia, so
        the best device is chosen when more than one device supports the constraints. Register two
        mock video and two mock audio devices with different capabilities so these changes can 
        be tested.

        No new tests, existing tests updated.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::selectSettings): Store fitness score in m_fitnessScore.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSource::create): Don't assume sampleRate is 44.1K
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers): Use sampleRate() instead of m_sampleRate.
        (WebCore::MockRealtimeAudioSourceMac::reconfigure): Ditto.
        (WebCore::MockRealtimeAudioSourceMac::render): Ditto.
        (WebCore::MockRealtimeAudioSourceMac::applySampleRate): Ditto.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::updateSettings): Don't assume sampleRate is 44.1K
        (WebCore::MockRealtimeAudioSource::initializeCapabilities): Support a range of sample rates.
        (WebCore::MockRealtimeAudioSource::startProducingData): Initialize sampleRate if it hasn't
        already been set.

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::audioDevices): Return an array of devices.
        (WebCore::MockRealtimeMediaSource::videoDevices): Ditto.
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        (WebCore::MockRealtimeMediaSource::mockAudioSourcePersistentID): Deleted.
        (WebCore::MockRealtimeMediaSource::mockVideoSourcePersistentID): Deleted.
        (WebCore::MockRealtimeMediaSource::mockAudioSourceName): Deleted.
        (WebCore::MockRealtimeMediaSource::mockVideoSourceName): Deleted.
        (WebCore::MockRealtimeMediaSource::audioDeviceInfo): Deleted.
        (WebCore::MockRealtimeMediaSource::videoDeviceInfo): Deleted.
        * platform/mock/MockRealtimeMediaSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamDevices):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):

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

        TextIndicator should support a mode where selection rects are used to size the snapshot
        https://bugs.webkit.org/show_bug.cgi?id=169845
        <rdar://problem/31127818>

        Reviewed by Beth Dakin.

        Adds TextIndicator support in iOS for using the would-be selection rects of a given range to determine
        snapshotting bounds. See below changes for more details.

        * dom/Range.cpp:
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines):
        (WebCore::Range::collectSelectionRects):

        Mark these helper methods as const.

        * dom/Range.h:
        * page/TextIndicator.cpp:
        (WebCore::getSelectionRectsForRange):
        (WebCore::initializeIndicator):

        If TextIndicatorOptionUseSelectionRectForSizing is enabled, then compute selection rects and set the text rects
        to be the resulting selection rects. These are in document coordinates.

        * page/TextIndicator.h:

2017-03-20  Simon Fraser  <simon.fraser@apple.com>

        Move code out of renderer destructors into willBeDestroyed()
        https://bugs.webkit.org/show_bug.cgi?id=169650

        Reviewed by Antti Koivisto.

        This is done for four reasons. First, code in willBeDestroyed() is able to call
        virtual functions on derived classes. Second, this code will run before we've destroyed
        the renderer's rareData, so can safely access it. Third, RenderWidget is special, and can have
        its lifetime extended via manual ref-counting, and we want all cleanup to complete
        before it goes into this weird zombie state. Fourth, in a shiny future where we have
        ref-counted RenderObjects, we want cleanup code to be run explicitly and not tied
        to object lifetime, and this is a step in that direction.

        For all classes that derive from RenderObject, move code from the destructor into
        willBeDestroyed(). New willBeDestroyed() implementations must call the base class.

        RenderBlock and RenderBlockFlow are special; RenderBlockFlow::willBeDestroyed()
        skips over RenderBlock::willBeDestroyed(), but they both need to run some code, which
        I moved into RenderBlock::blockWillBeDestroyed().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::blockWillBeDestroyed):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::~RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::willBeDestroyed):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::~RenderCounter):
        (WebCore::RenderCounter::willBeDestroyed):
        * rendering/RenderCounter.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::~RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::willBeDestroyed):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::willBeDestroyed):
        * rendering/RenderImage.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::~RenderLayerModelObject):
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::~RenderLineBreak):
        (WebCore::RenderLineBreak::willBeDestroyed):
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::~RenderListBox):
        (WebCore::RenderListBox::willBeDestroyed):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::~RenderListItem):
        (WebCore::RenderListItem::willBeDestroyed):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::~RenderListMarker):
        (WebCore::RenderListMarker::willBeDestroyed):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::~RenderMenuList):
        (WebCore::RenderMenuList::willBeDestroyed):
        * rendering/RenderMenuList.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::~RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::willBeDestroyed):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::willBeDestroyed):
        * rendering/RenderQuote.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::~RenderSearchField):
        (WebCore::RenderSearchField::willBeDestroyed):
        * rendering/RenderSearchField.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::willBeDestroyed):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::~RenderText):
        (WebCore::RenderText::willBeDestroyed):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::~RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::willBeDestroyed):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::~RenderVideo):
        (WebCore::RenderVideo::willBeDestroyed):
        * rendering/RenderVideo.h:
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::~RenderSVGImage):
        (WebCore::RenderSVGImage::willBeDestroyed):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::~RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::willBeDestroyed):

2017-03-20  Jon Lee  <jonlee@apple.com>

        Mark differences in media stream implementation
        https://bugs.webkit.org/show_bug.cgi?id=169873

        Reviewed by Eric Carlson.

        Rearrange IDL and add comments based on 05 February 2017 Editor's Draft of Media
        Capture and Streams spec.
        * Modules/mediastream/DOMURLMediaStream.idl:
        * Modules/mediastream/MediaDeviceInfo.idl:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/MediaTrackConstraints.idl:
        * Modules/mediastream/MediaTrackSupportedConstraints.idl:
        * Modules/mediastream/NavigatorMediaDevices.idl:
        * Modules/mediastream/NavigatorUserMedia.idl:

2017-03-20  Per Arne Vollan  <pvollan@apple.com>

        Use CopyFontDescriptorWithStrokeForStyle to get correct stroke width for captions.
        https://bugs.webkit.org/show_bug.cgi?id=169674

        Reviewed by Eric Carlson.

        Use the MediaAccessibility function MACopyFontDescriptorWithStrokeForStyle to get
        correct video captions stroke width from a given font size.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::captionStrokeWidth):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionStrokeWidth):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):
        (WebCore::CaptionUserPreferencesMediaAF::strokeWidth): Deleted.
        * page/CaptionUserPreferencesMediaAF.h:
        * platform/cf/MediaAccessibilitySoftLink.cpp:
        * platform/cf/MediaAccessibilitySoftLink.h:

2017-03-20  Emanuele Aina  <emanuele.aina@collabora.com>

        [Cairo] Ensure depth and stencil renderbuffers are created on GLESv2
        https://bugs.webkit.org/show_bug.cgi?id=166643

        Reviewed by Darin Adler.

        If the gfx device doesn't support GL_OES_packed_depth_stencil, the
        separate depth and stencil buffers are not generated.

        Copy what GraphicsContext3DEfl used to do and apply it in
        GraphicsContext3DCairo.

        The Intel gfx driver seem to tolerate unbound renderbuffers, but
        enabling debugging in Mesa yields an error:

        $ MESA_DEBUG=1 \
          MESA_EXTENSION_OVERRIDE=-GL_OES_packed_depth_stencil
          ./bin/MiniBrowser http://webglsamples.org/aquarium/aquarium.html
        Mesa: User error: GL_INVALID_OPERATION in glRenderbufferStorage(no renderbuffer bound)

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        Ensure separate depth and stencil renderbuffers are created.
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        Ensure separate depth and stencil renderbuffers are released.

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

        Implement self.origin
        https://bugs.webkit.org/show_bug.cgi?id=168023

        Reviewed by Sam Weinig.

        Implement self.origin:
        - https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope

        Firefox and Chrome already support this.

        Test: imported/w3c/web-platform-tests/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::origin):
        * page/DOMWindow.h:
        * page/WindowOrWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::origin):
        * workers/WorkerGlobalScope.h:

2017-03-18  Jon Lee  <jonlee@apple.com>

        Add support for ImplementedAs, Clamp, EnforceRange, TreatNullAs for dictionary members
        https://bugs.webkit.org/show_bug.cgi?id=169731

        Reviewed by Alex Christensen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent): Create a new $implementationAsKey. Look for
        ImplementedAs, and if it exists, override the value with the alias. Set the parameters of
        convert<>() using JSValueToNative.
        (IsValidContextForJSValueToNative): Update to include IDLDictionaryMembers.
        (JSValueToNative): Bypass parseEnumeration serialization for enums if the context is an
        IDLDictionaryMember. Dictionary members need convert<IDLEnumeration> which throw a TypeError
        or return the enum (and utilizes parseEnumeration). parseEnumeration, in contrast, returns
        an optional.

        * bindings/scripts/test/TestObj.idl: Add test cases in TestDictionary.

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

2017-03-18  Simon Fraser  <simon.fraser@apple.com>

        Use initializers for Document member variables
        https://bugs.webkit.org/show_bug.cgi?id=169848

        Reviewed by Chris Dumez.

        Move Document to use C++11 brace initializers.

        No behavior change.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::xmlStandaloneStatus):
        (WebCore::Document::setHasXMLDeclaration):

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

        innerText setter inserts empty text node if value starts with newline
        https://bugs.webkit.org/show_bug.cgi?id=169600

        Reviewed by Ryosuke Niwa.

        innerText setter should not create empty text nodes as per:
        - https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute (step 6.2)

        No new tests, updated existing test.

        * html/HTMLElement.cpp:
        (WebCore::textToFragment):

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

        Allow setting the prototype of cross-origin objects, as long as they don't change
        https://bugs.webkit.org/show_bug.cgi?id=169787

        Reviewed by Mark Lam.

        Allow setting the prototype of cross-origin objects, as long as they don't change:
        - https://html.spec.whatwg.org/multipage/browsers.html#windowproxy-setprototypeof
        - https://html.spec.whatwg.org/multipage/browsers.html#location-setprototypeof
        - https://tc39.github.io/ecma262/#sec-set-immutable-prototype

        Tests: imported/w3c/web-platform-tests/common/domain-setter.sub.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting-cross-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting-goes-cross-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-prototype-setting-same-origin.html
               imported/w3c/web-platform-tests/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-same-origin-domain.sub.html
               imported/w3c/web-platform-tests/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-same-origin.html

        * bindings/js/JSLocationCustom.cpp:
        * page/Location.idl:
        Drop custom setPrototype() implementation for Location and mark Location as an immutable
        prototype exotic object now that JSC does the right thing for those.

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

        Stop sending media data as soon as peer connection is closed
        https://bugs.webkit.org/show_bug.cgi?id=169813

        Reviewed by Eric Carlson.

        Stopping sending of media data as soon as the peer connection is closed.
        By stopping sending at source level, this may stop by a few frames/chunks earlier than before.
        Making sure RealtimeOutgoingVideoSource is stopping observing the media source when being stopped and deleted.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::stop):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::stop):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

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

        Implement incoming webrtc data based on tracksCurr
        https://bugs.webkit.org/show_bug.cgi?id=169836

        Reviewed by Eric Carlson.

        Test: webrtc/video-with-receiver.html

        Constructing incoming tracks based on libwebrtc OnAddTrack.
        Constructing incoming media streams based on libwebrtc OnAddStream.
        Firing only addstream if legacy API flag is on.

        Ensuring that media stream and media stream tracks relationship is still correctly implemented.
        For that, we keep a map that relates libwebrtc media streams with WebCore media streams.
        Adding the ability to get a receiver related to the track on the track event.

        Implementing the possibility to create a transceiver ahead of track arrival time.
        Created transceivers that are not related to any real source are kept in the peer connection back end.
        When a libwebrtc track is appearing, it is associated with the track source of the corresponding transceiver based on track type.

        Added the ability to create empty real time sources and set their data libwebrtc track when being available.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrackFromPlatform):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::OnAddStream):
        (WebCore::LibWebRTCMediaEndpoint::OnRemoveStream):
        (WebCore::LibWebRTCMediaEndpoint::OnAddTrack):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        (WebCore::createMediaStreamTrack): Deleted.
        (WebCore::LibWebRTCMediaEndpoint::addStream): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        (WebCore::createReceiverForSource):
        (WebCore::createEmptySource):
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::removeRemoteStream):
        (WebCore::LibWebRTCPeerConnectionBackend::addRemoteStream):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::setSourceTrack):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::setSourceTrack):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:

2017-03-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Compensate for video capture orientation
        https://bugs.webkit.org/show_bug.cgi?id=169313
        <rdar://problem/30994785>

        Unreviewed, fix a crash in r214120 found by the bots.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener invalidate]): Drive-by removal of unnecessary code.
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        Actually retain self before callOnMainThread.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): 
        Invalidate the change listener first.

2017-03-17  Dean Jackson  <dino@apple.com>

        MediaQueryList instances do not update for `prefers-reduced-motion`
        https://bugs.webkit.org/show_bug.cgi?id=169835
        <rdar://problem/30339378>

        Reviewed by Anders Carlsson.

        Tell the document it needs to evaluate the MediaQueryLists
        if accessibility settings change.

        Test: fast/media/mq-prefers-reduced-motion-matchMedia.html

        * page/Page.cpp:
        (WebCore::Page::accessibilitySettingsDidChange):

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

        Make HTTPCookieStorage operate in the UIProcess in absence of a WebProcessPool.
        <rdar://problem/31102330> and https://bugs.webkit.org/show_bug.cgi?id=169797

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::flushCookieStore):

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

2017-03-17  Dave Hyatt  <hyatt@apple.com>

        Disable per-region boxes for multicolumn
        https://bugs.webkit.org/show_bug.cgi?id=169830

        Reviewed by Zalan Bujtas.

        Test: fast/multicol/float-adjacent-to-overflow-block.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::renderBoxRegionInfo):
        Limit all of the per-region box code to RenderNamedFlowThreads.
        This code should never be used by multicolumn layout.

2017-03-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Time channel attack on SVG Filters
        https://bugs.webkit.org/show_bug.cgi?id=118689

        Reviewed by Simon Fraser.

        The time channel attack can happen if the attacker applies FEColorMatrix
        or FEConvolveMatrix and provides a matrix which is filled with subnormal
        floating point values. Performing floating-point operations on subnormals
        is very expensive unless the pixel in the source graphics is black (or
        zero). By measuring the time a filter takes to be applied, the attacker
        can know whether the pixel he wants to steal from  an iframe is black or
        white. By repeating the same process on all the pixels in the iframe, the
        attacker can reconstruct the whole page of the iframe.

        To fix this issue, the values in the matrices of these filters will clamped
        to FLT_MIN. We do not want to consume too much time calculating filtered
        pixels because of such tiny values. The difference between applying FLT_MIN
        and applying a subnormal should not be even noticeable. Normalizing the
        floating-point matrices should happen only at the beginning of the filter
        platformApplySoftware().

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::fastSetOuterPixels):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::normalizedFloats):

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

        Explicitly resize the audio buffer in RealtimeOutgoingAudioSource.
        https://bugs.webkit.org/show_bug.cgi?id=169814
        <rdar://problem/30975496>

        Reviewed by Eric Carlson.

        Rather than just reserving sufficient capacity, actually change the buffer's underlying size to match.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):

2017-03-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Make sure all CryptoKey classes are structured clonable
        https://bugs.webkit.org/show_bug.cgi?id=169232
        <rdar://problem/31106660>

        Reviewed by Brent Fulgham.

        This patch does the following few things: 1) It makes CryptoKeyEC and CryptoKeyRaw
        structured clonable; 2) It makes CryptoKeyAES and CryptoKeyHMAC to use a move importer
        during deserialization; 3) It adds some tests to make sure CryptoKeyAES, CryptoKeyHMAC
        and CryptoKeyRSA won't lose their internal data during serialization/deserialization.

        Tests: crypto/workers/subtle/ec-postMessage-worker.html
               crypto/workers/subtle/raw-postMessage-worker.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readHMACKey):
        (WebCore::CloneDeserializer::readAESKey):
        (WebCore::CloneDeserializer::readECKey):
        (WebCore::CloneDeserializer::readRawKey):
        (WebCore::CloneDeserializer::readCryptoKey):
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::namedCurveString):
        (WebCore::CryptoKeyEC::isValidECAlgorithm):
        * crypto/keys/CryptoKeyEC.h:

2017-03-17  Michael Saboff  <msaboff@apple.com>

        Use USE_INTERNAL_SDK to compute ENABLE_FAST_JIT_PERMISSIONS instead of HAVE_INTERNAL_SDK
        https://bugs.webkit.org/show_bug.cgi?id=169817

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2017-03-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Compensate for video capture orientation
        https://bugs.webkit.org/show_bug.cgi?id=169313
        <rdar://problem/30994785>

        Reviewed by Jer Noble.

        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.

        Add 'orientation' and 'mirrored' attributes to MediaSample
        * platform/MediaSample.h:
        (WebCore::MediaSample::videoOrientation):
        (WebCore::MediaSample::videoMirrored):
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:

        A video sample can be rotated and/or mirrored, so the video layer may need to be rotated
        and resized for display. We don't want expose this information to the renderer, so allocate
        return a generic CALayer as the player's platforLayer, and add the video layer as a sublayer
        so we can adjust it to display correctly. Add an enum for playback state as well as display
        mode so we correctly display a black frame when video frames are available but playback has
        not yet started.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener initWithParent:]):
        (-[WebAVSampleBufferStatusChangeListener invalidate]):
        (-[WebAVSampleBufferStatusChangeListener beginObservingLayers]):
        (-[WebAVSampleBufferStatusChangeListener stopObservingLayers]): Ditto.
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix):
        (WebCore::runWithoutAnimations):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerErrorDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::displayLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::backgroundLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentMediaTime):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setShouldBufferData):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::backgroundLayerBoundsChanged):
        (-[WebAVSampleBufferStatusChangeListener beginObservingLayer:]): Deleted.
        (-[WebAVSampleBufferStatusChangeListener stopObservingLayer:]): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paused): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldBePlaying): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame): Add connection parameter so we can get the
        video orientation.
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):

        Pass sample orientation to libwebrtc.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-03-17  Zalan Bujtas  <zalan@apple.com>

        Fix the flow thread state on the descendants of out of flow positioned replaced elements.
        https://bugs.webkit.org/show_bug.cgi?id=169821
        <rdar://problem/30964017>

        Reviewed by Simon Fraser.

        Descendants of a replaced out of flow elmement should inherit the flowthread state
        from the replaced element and not from the replaced element's parent.

        Test: fast/multicol/fix-inherit-when-container-is-replaced.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computedFlowThreadState):

2017-03-17  Jon Davis  <jond@apple.com>

        Update feature status for outdated entries: CSS Shapes, Force Click Events
        https://bugs.webkit.org/show_bug.cgi?id=169829

        Reviewed by Matt Baker.

        * features.json:

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

        Make SocketStreamError a private header.
        https://bugs.webkit.org/show_bug.cgi?id=169831

        * WebCore.xcodeproj/project.pbxproj:
        I'll need this from WebKit2.

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

        Add encoder for SocketStreamError
        https://bugs.webkit.org/show_bug.cgi?id=169831

        Reviewed by Andy Estes.

        This isn't used yet, but we'll soon need to send these across IPC.

        * platform/network/SocketStreamError.h:
        (WebCore::SocketStreamError::encode):
        (WebCore::SocketStreamError::decode):

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

        Make SocketStreamHandle virtual functions asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=169818

        Reviewed by Andy Estes.

        No change in behavior.  Instead of returning immediately, call a completion handler.
        This is in preparation for making them truly asynchronous.

        I still need to be able to synchronously get the number of buffered bytes, but the
        buffer itself will soon be in the NetworkProcess with a new subclass of SocketStreamHandle
        that messages across IPC.  The number of buffered bytes will still be stored in the WebProcess,
        and when it updates, the message from SocketStreamHandleClient::didUpdateBufferedAmount will update it.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::send):
        (WebCore::SocketStreamHandle::close):
        (WebCore::SocketStreamHandle::sendPendingData): Deleted.
        * platform/network/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::bufferedAmount): Deleted.
        * platform/network/SocketStreamHandleImpl.cpp: Added.
        (WebCore::SocketStreamHandleImpl::platformSend):
        (WebCore::SocketStreamHandleImpl::sendPendingData):
        (WebCore::SocketStreamHandleImpl::bufferedAmount):
        m_buffer was moved from SocketStreamHandle to SocketStreamHandleImpl, so some of the logic must move with it.
        I moved as much logic that was shared in the superclass to a new shared location for code shared among the subclass implementations.
        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        (WebCore::SocketStreamHandleImpl::platformSend): Deleted.
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        (WebCore::SocketStreamHandleImpl::platformSend): Deleted.
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        (WebCore::SocketStreamHandleImpl::platformSend): Deleted.

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

        Add a reload policy where only expired subresources are revalidated
        https://bugs.webkit.org/show_bug.cgi?id=169756

        Reviewed by Andreas Kling.

        Test: http/tests/cache/reload-expired-only.html

        The default reload behavior revalidates all resources on the page. This patch adds
        a new policy that revalidates expired (and uncacheable) resources only. Using this
        policy can speed up reloads significantly and also reduce network traffic and server
        load.

        * history/PageCache.cpp:
        (WebCore::canCachePage):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::isReload):

            Add a helper function.

        (WebCore::FrameLoader::loadURL):
        (WebCore::logNavigation):
        (WebCore::FrameLoader::reload):

            Replace bool arguments with OptionSet<ReloadOption>. Most of the patch is about adapting to this.

        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::subresourceCachePolicy):

            Return CachePolicyVerify for 'ReloadExpiredOnly' frame load type. This is the substantive
            change that causes the behavior difference.

        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::defaultRequestCachingPolicy):

            Flip the isMainResource condition for better readability.

        (WebCore::FrameLoader::shouldPerformFragmentNavigation):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::reload):
        * loader/FrameLoaderTypes.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreDocumentState):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::reloadRevalidatingExpiredKey):
        * page/DiagnosticLoggingKeys.h:
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::reloadFrame):
        * replay/UserInputBridge.h:
        * testing/Internals.cpp:
        (WebCore::Internals::forceReload):
        (WebCore::Internals::reloadExpiredOnly):

            Testing support.

        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-17  Nan Wang  <n_wang@apple.com>

        AX: VoiceOver no longer works corectly with editable text in the web
        https://bugs.webkit.org/show_bug.cgi?id=169801

        Reviewed by Chris Fleizach.

        The issue is that since we are entering text controls when getting the text marker,
        the end text marker of the input tag might associate to the placeholder div instead of 
        the input tag itself. 
        Fixed the issue by checking the shadow elements using shadowHost() instead of isShadowRoot().
        Also, only enter text controls when navigating by characters/indexes, so that both Mac and
        iOS will get the correct text marker ranges for shadow host elements.

        Tests: accessibility/ios-simulator/element-text-range-for-text-control.html
               accessibility/mac/text-markers-for-input-with-placeholder.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange):
        (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange):
        (WebCore::AXObjectCache::characterOffsetForIndex):
        * accessibility/AXObjectCache.h:

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

        [WK1] Support animated transitions when performing a data interaction operation
        https://bugs.webkit.org/show_bug.cgi?id=169805
        <rdar://problem/31045767>

        Reviewed by Beth Dakin and Megan Gardner.

        When performing a snapshot excluding the current selection, use ScrollableArea::visibleContentRect to compute
        the visible content rect rather than FrameView::visualViewportRect. In WebKit1, the latter will return the
        entire content view's bounds.

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

2017-03-17  Dave Hyatt  <hyatt@apple.com>

        Initial letter does not paginate properly.
        https://bugs.webkit.org/show_bug.cgi?id=169795
        <rdar://problem/23715770>

        Reviewed by Zalan Bujtas.

        Tests: fast/css-generated-content/initial-letter-pagination-raised.html
               fast/css-generated-content/initial-letter-pagination-raised-rl.html
               fast/css-generated-content/initial-letter-pagination-sunken.html
               fast/css-generated-content/initial-letter-pagination-sunken-rl.html

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::FloatingObject):
        (WebCore::FloatingObject::copyToNewContainer):
        (WebCore::FloatingObject::cloneForNewParent):
        (WebCore::FloatingObject::translationOffsetToAncestor):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::setMarginOffset):
        (WebCore::FloatingObject::locationOffsetOfBorderBox):
        (WebCore::FloatingObject::marginOffset):
        Add the margin offset to the FloatingObject so that we can control the
        placement of the border box relative to the margin box without relying
        on only the CSS-specified margins. This allows for sunken initial letter
        FloatingObjects to be created and propagated out to ancestor blocks for painting
        without altering the CSS margins of the sunken letter.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):
        Update the logical height for initial letter containers after the initial
        letter shifts to the next page, since the lines that follow need to lay out
        relative to the initial letter, i.e., they shift down if it shifts down.

        (WebCore::RenderBlockFlow::addOverflowFromFloats):
        (WebCore::RenderBlockFlow::paintFloats):
        (WebCore::RenderBlockFlow::clipOutFloatingObjects):
        Patched to use the new helpers on FloatingObject rather than
        xPositionForFloatIncludingMargins and yPositionForFloatIncludingMargins.

        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        Updated to set the placement and margins of the floating object before
        returning. The initial letter adjustments have been factored out into their
        own function.

        (WebCore::RenderBlockFlow::adjustInitialLetterPosition):
        A helper function called by computeLogicalLocationForFloat that handles
        the placement and margin adjustments for initial letters. Note that sunken
        letters no longer "hack" the top margin of the child but instead rely on
        the fact that the FloatingObject has its own independent margin offset now
        that can be set to a value that is distinct from the CSS supplied margin.

        (WebCore::RenderBlockFlow::positionNewFloats):
        Revised to no longer do the placement, but to let computeLogicalLocationForFloat
        do it. The height is still set here however, since we don't know that until after
        the child has received a layout.

        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::flipFloatForWritingModeForChild):
        (WebCore::RenderBlockFlow::hitTestFloats):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        Patched to use the new FloatingObject helpers rather than
        xPositionForFloatIncludingMargins and yPositionForFloatIncludingMargins.

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::setLogicalMarginsForFloat):
        New helper function for setting the margin offsets on a FloatingObject.

        (WebCore::RenderBlockFlow::xPositionForFloatIncludingMargin): Deleted.
        (WebCore::RenderBlockFlow::yPositionForFloatIncludingMargin): Deleted.
        Deleted in favor of new FloatingObject helpers.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isUnsplittableForPagination):
        Make initial letter unsplittable as far as pagination is concerned.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        (WebCore::RootInlineBox::includeFontForBox):
        (WebCore::RootInlineBox::includeGlyphsForBox):
        (WebCore::RootInlineBox::fitsToGlyphs):
        Turn off the restriction that you can't fit to vertical glyphs. The numbers returned
        are fine now. This allows vertical initial letters to work.

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

        RealtimeIncomingAudioSource is not stopping properly
        https://bugs.webkit.org/show_bug.cgi?id=169807

        Reviewed by Eric Carlson.

        Test: webrtc/release-after-getting-track.html

        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::stopProducingData):

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

        Use completion handlers instead of return values for sending websocket data
        https://bugs.webkit.org/show_bug.cgi?id=169802

        Reviewed by Carlos Garcia Campos.

        No change in behavior, but this is a baby step towards making things more asynchronous.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::send):
        * platform/network/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleImpl.h:

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

        WebGPU: build fixes for non-Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=169781

        Reviewed by Alex Christensen.

        Enable building WebGPU code for other ports and fix various build
        failures. This still leaves the GPUDevice::platformLayer() method
        missing for other ports, as well as the general implementation of
        the WebGPU platform abstractions under platform/graphics/gpu/.

        * CMakeLists.txt: Move the WebGPU build targets here.
        * PlatformMac.cmake:
        * html/canvas/WebGPULibrary.h: Explicitly include the WTFString.h
        header to suppress missing WTF::String definition errors.
        * platform/graphics/gpu/GPUBuffer.cpp:
        (WebCore::GPUBuffer::contents): Avoid ambiguous calls to
        ArrayBuffer::create() by passing nullptr as the first argument.
        * platform/graphics/gpu/GPUDevice.h: Include the Forward.h header
        to forward-declare the WTF::String class. Also remove the unused
        PlatformGPUDevice typedef for non-Cocoa platforms.
        (WebCore::GPUDevice::layer): Move this and the related m_layer
        member variable under the PLATFORM(COCOA) guard.
        * platform/graphics/gpu/GPUFunction.cpp:
        (WebCore::GPUFunction::GPUFunction): Remove the GPULibrary
        parameter checks in this no-op constructor that's used on
        non-Cocoa platforms.

2017-03-17  Miguel Gomez  <magomez@igalia.com>

        Follow-up (r213833): write a layout test for 169199
        https://bugs.webkit.org/show_bug.cgi?id=169576
        <rdar://problem/31024766>

        Reviewed by Said Abou-Hallawa.

        Add a function to Internals to force the deletion of the ImageDecoder just after
        requesting the async decoding of a frame, and implement that behaviour in BitmapImage.

        Test: fast/images/clear-animation-decoder.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalStartAnimation):
        * platform/graphics/BitmapImage.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setClearDecoderAfterAsyncFrameRequestForTesting):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Handle the blend mode in GraphicsContext::drawPattern
        https://bugs.webkit.org/show_bug.cgi?id=169746

        Reviewed by Žan Doberšek.

        We are not taking into account the blend mode when passing the cairo operator to drawPatternToCairoContext().
        This is based on patch by Žan Doberšek, just adding the toCairoOperator changes to make it easier to handle
        it. Instead of checking everywhere if blend mode is Normal to decide whether to use toCairoOperator with
        CompositeOperator or BlendMode, there's no a single toCairoOperator that receives both parameters, but BlendMode
        is optional and defaults to Normal.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::toCairoCompositeOperator):
        (WebCore::toCairoOperator):
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::drawPattern):

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

        Fix GTK build.

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::readBytes):
        Changing RefPtr to Ref broke something.
        For the record, EWS was orange so I couldn't see these build failures.

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

        Fix GTK build.

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::readBytes):
        didFailToReceiveSocketStreamData needs a parameter.

2017-03-16  Dean Jackson  <dino@apple.com>

        WebGL: Improve index validation when using uint index values
        https://bugs.webkit.org/show_bug.cgi?id=169798

        Reviewed by Simon Fraser.

        Make sure that we test index validation with the correct type.
        Also stop using -1 in WebGLBuffer to indicate non-existant values.

        Test: fast/canvas/webgl/draw-elements-out-of-bounds-uint-index.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative): Use optional<> and
        unsigned values.
        * html/canvas/WebGLBuffer.cpp: Use unsigned for maxIndex (they can't be negative)
        and optional<> to indicate unknown value.
        (WebCore::WebGLBuffer::getCachedMaxIndex):
        (WebCore::WebGLBuffer::setCachedMaxIndex):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Use optional<> and
        unsigned values.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes): No need to check if
        an unsigned value is less than zero.

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        Improve the system tracing points
        https://bugs.webkit.org/show_bug.cgi?id=169790

        Reviewed by Zalan Bujtas.

        Use a more cohesive set of system trace points that give a good overview of what
        WebKit is doing. Added points for resource loading, render tree building, sync messages
        to the web process, async image decode, WASM and fetching cookies.

        * loader/CookieJar.cpp:
        (WebCore::cookies):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::logResourceLoaded):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (WebCore::DisplayRefreshMonitorIOS::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorIOS::displayLinkFired):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::commit):

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        RenderView::documentBeingDestroyed() needs a new name.
        https://bugs.webkit.org/show_bug.cgi?id=166727

        Reviewed by Andreas Kling.

        Now that we destroy the render tree for documents going into the page cache, RenderView::documentBeingDestroyed()
        is misleadingly named. Rename it to renderTreeBeingDestroyed() and fix all callers.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame):
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::resetRenderers):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::removeChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        (WebCore::RenderBox::deleteLineBoxWrapper):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::removeChildInternal):
        (WebCore::RenderElement::clearLayoutRootIfNeeded):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyFlushRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::deleteInlineBoxWrapper):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::attachRegion):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::resetFlowThreadStateOnRemoval):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::renderTreeBeingDestroyed):
        (WebCore::RenderObject::documentBeingDestroyed): Deleted.
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::detachQuote):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::setNeedsSectionRecalc):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):
        (WebCore::RenderSVGText::subtreeChildWasRemoved):
        (WebCore::RenderSVGText::subtreeStyleDidChange):

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

        Wrap legacy WebRTC API in runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=169646

        Reviewed by Alex Christensen.

        Test: webrtc/legacy-api.html

        Adding a runtime flag for legacy API.
        Making some WebIDL peer connection members runtime-enabled.
        Adding a JS private getter on this flag so that overloaded operations behave as promise-based only if flag is turned off.

        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::isWebRTCLegacyAPIEnabled):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCLegacyAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebRTCLegacyAPIEnabled):

2017-03-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Support SPKI/PKCS8 for Elliptic Curve
        https://bugs.webkit.org/show_bug.cgi?id=169318
        <rdar://problem/31081956>

        Reviewed by Brent Fulgham.

        This patch adds SPKI/PKCS8 support for Elliptic Curve cryptos. We can now import/export
        SPKI/PKCS8 Elliptic Curve keys after this change. Few things to note: 1) This patch
        implements a loose DER encoder/decoder for hacking the underlying CommonCrypto library.
        2) It only permits id-ecPublicKey as the AlgorithmIdentifier following OpenSSL/Chrome(BoringSSL).
        3) It follows OpenSSL/Chrome(BoringSSL) to replace ECParameters in ECPrivateKey with custom
        tags. Hence, we should fully comply with OpenSSL/Chrome(BoringSSL).

        Tests: crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html
               crypto/subtle/ec-import-jwk-key-export-spki-key.html
               crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html
               crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html
               crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html
               crypto/subtle/ec-import-raw-key-export-spki-key.html
               crypto/subtle/ec-import-spki-key-export-jwk-key.html
               crypto/subtle/ec-import-spki-key-export-raw-key.html
               crypto/subtle/ec-import-spki-key-export-spki-key-p256.html
               crypto/subtle/ec-import-spki-key-export-spki-key-p384.html
               crypto/subtle/ecdh-generate-export-key-spki-p256.html
               crypto/subtle/ecdh-generate-export-key-spki-p384.html
               crypto/subtle/ecdh-generate-export-pkcs8-p256.html
               crypto/subtle/ecdh-generate-export-pkcs8-p384.html
               crypto/subtle/ecdh-import-pkcs8-key-p256.html
               crypto/subtle/ecdh-import-pkcs8-key-p384.html
               crypto/subtle/ecdh-import-spki-key-p256.html
               crypto/subtle/ecdh-import-spki-key-p384.html
               crypto/workers/subtle/ec-generate-export-pkcs8-key.html
               crypto/workers/subtle/ec-generate-export-spki-key.html
               crypto/workers/subtle/ec-import-pkcs8-key.html
               crypto/workers/subtle/ec-import-spki-key.html

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::importKey):
        (WebCore::CryptoAlgorithmECDH::exportKey):
        * crypto/gnutls/CryptoKeyECGnuTLS.cpp:
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformExportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportPkcs8):
        (WebCore::CryptoKeyEC::exportRaw): Deleted.
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::importSpki):
        (WebCore::CryptoKeyEC::importPkcs8):
        (WebCore::CryptoKeyEC::exportRaw):
        (WebCore::CryptoKeyEC::exportSpki):
        (WebCore::CryptoKeyEC::exportPkcs8):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/mac/CommonCryptoDERUtilities.h: Added.
        (WebCore::bytesUsedToEncodedLength):
        (WebCore::extraBytesNeededForEncodedLength):
        (WebCore::addEncodedASN1Length):
        (WebCore::bytesNeededForEncodedLength):
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::compareBytes):
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::getOID):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformExportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportPkcs8):
        (WebCore::CryptoKeyEC::exportRaw): Deleted.
        Enlarge the robust of exportRaw.
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::exportSpki):
        (WebCore::CryptoKeyRSA::exportPkcs8):
        Enhance the implementation.
        (WebCore::bytesUsedToEncodedLength): Deleted.
        (WebCore::bytesNeededForEncodedLength): Deleted.
        (WebCore::addEncodedASN1Length): Deleted.
        Moved to CommonCryptoDERUtilities.h.

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

        Don't use an optional for didReceiveSocketStreamData's length
        https://bugs.webkit.org/show_bug.cgi?id=169699

        Reviewed by Brady Eidson.

        Rather than sending a message with an optional length, send a message with a length
        and send a different message if the receiving of bytes failed.

        No new tests (no behavior change).

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveSocketStreamData):
        * Modules/websockets/WebSocketChannel.h:
        * platform/network/SocketStreamHandleClient.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::readStreamCallback):
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::readBytes):

2017-03-16  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Extend webkit-hyphenate-limit-lines to cover subsequent words.
        https://bugs.webkit.org/show_bug.cgi?id=169631

        Reviewed by Antti Koivisto.

        This patch extends webkit-hyphenate-limit-lines to cover separate words across multiple lines.
        Example:
          webkit-hyphenate-limit-lines: 1;
          "if this line wraps at foo-
          bar, the next line should
          not hyphenate at all. How-
          ever the line after that
          could."

        Test: fast/text/simple-line-layout-hyphenation-limit-lines-accross-words.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::setHyphenationDisabled):
        (WebCore::SimpleLineLayout::LineState::isHyphenationDisabled):
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::hyphenPositionForFragment):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::hasHyphen):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::splitWithHyphen):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::wrappingWithHyphenCounter): Deleted.

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

        [GLib] Add SSLKeyGeneratorGLib.cpp
        https://bugs.webkit.org/show_bug.cgi?id=169740

        Reviewed by Sergio Villar Senin.

        Move the getSupportedKeySizes() and signedPublicKeyAndChallengeString()
        functions from TemporaryLinkStubs.cpp to SSLKeyGeneratorGLib.cpp. The
        userIdleTime() function can be removed in this process since it's not
        used anywhere anymore.

        * PlatformGTK.cmake:
        * platform/glib/SSLKeyGeneratorGLib.cpp: Renamed from Source/WebCore/platform/gtk/TemporaryLinkStubs.cpp.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):

2017-03-16  Zalan Bujtas  <zalan@apple.com>

        Stay inside the continuation while searching for a candidate ancestor for insertion.
        https://bugs.webkit.org/show_bug.cgi?id=169768
        <rdar://problem/30959936>

        Reviewed by David Hyatt.

        Test: fast/inline/continuation-crash-with-anon-ancestors.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToContinuation):

2017-03-16  Jon Lee  <jonlee@apple.com>

        Add FIXMEs to update WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169735

        Reviewed by Youenn Fablet.

        Rearrange order of methods and properties based on the 13 March 2017
        version of the WebRTC spec.

        * CMakeLists.txt: Add RTCIceTransport and RTCIceTransportState.
        * DerivedSources.make:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateEvent.idl:
        * Modules/mediastream/RTCIceServer.idl:
        * Modules/mediastream/RTCIceTransport.cpp: Added.
        * Modules/mediastream/RTCIceTransport.idl: Added.
        * Modules/mediastream/RTCIceTransport.h: Minor update to rename state to transportState.
        (WebCore::RTCIceTransport::state):
        (WebCore::RTCIceTransport::setState):
        (WebCore::RTCIceTransport::transportState): Deleted.
        (WebCore::RTCIceTransport::setTransportState): Deleted.
        * Modules/mediastream/RTCIceTransportState.h: Added.
        * Modules/mediastream/RTCIceTransportState.idl: Added.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::iceTransportStateChanged): Refactor.

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

        Improve WebRTC track enabled support
        https://bugs.webkit.org/show_bug.cgi?id=169727

        Reviewed by Alex Christensen.

        Tests: webrtc/peer-connection-audio-mute2.html
               webrtc/peer-connection-remote-audio-mute.html
               webrtc/video-remote-mute.html

        Making sure muted/disabled sources produce silence/black frames.
        For outgoing audio/video sources, this should be done by the actual a/v providers.
        We keep this filtering here until we are sure they implement that.

        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks): Ensuring disabled audio tracks send silence.
        Used for outgoing webrtc tracks.
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::render): Ditto.
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData): Ditto.
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame): Generating black frames if muted.
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable): Ensuring we quit after sending black frame.

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

        LibWebRTC outgoing source should be thread safe refcounted
        https://bugs.webkit.org/show_bug.cgi?id=169726

        Reviewed by Alex Christensen.

        Preventive fix.
        Also fixing the size of the buffer for the audio source as its reserved size is byte count.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

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

        MediaStreamTrack remote() no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=169734

        Reviewed by Alex Christensen.

        Removing MediaStreamTrack remote.
        Removing RealtimeMediaSource::remote as isCaptureSource which is closer to its use in MediaStreamPrivate to
        detect whether sources are capture sources or not.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::hasCaptureVideoSource):
        (WebCore::MediaStreamPrivate::hasCaptureAudioSource):
        (WebCore::MediaStreamPrivate::hasLocalVideoSource): Deleted.
        (WebCore::MediaStreamPrivate::hasLocalAudioSource): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::remote): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/webaudio/MediaStreamAudioSource.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::hasLocalVideoSource):
        (WebCore::MediaStreamPrivate::hasLocalAudioSource):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::isCaptureTrack):
        (WebCore::MediaStreamTrackPrivate::remote): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::reset):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::isCaptureSource):
        (WebCore::RealtimeMediaSource::remote): Deleted.
        (WebCore::RealtimeMediaSource::setRemote): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeVideoSource.h:

2017-03-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Crash on debug removing a positioned child
        https://bugs.webkit.org/show_bug.cgi?id=169739

        Reviewed by Sergio Villar Senin.

        When we add or remove a positioned item we don't need to mark
        the grid as dirty, because positioned items do not affect the layout
        of the grid at all.

        This was causing a crash when a positioned item was removed
        after a layout. As after the positioned item was removed,
        the method RenderGrid::layoutBlock() was not called,
        so when the grid was repainted we got a crash.

        Test: fast/css-grid-layout/grid-crash-remove-positioned-item.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild): Add early return to avoid marking
        the grid as dirty for positioned grid items.
        (WebCore::RenderGrid::removeChild): Ditto.

2017-03-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WebRTC] SDP sess-id in the "o=" line should be a value between 0 and LLONG_MAX.
        https://bugs.webkit.org/show_bug.cgi?id=169681

        Reviewed by Alejandro G. Castro.

        Use an int64_t type for storing sess-id and ensure that the value generated is always between 0 and LLONG_MAX (2^63-1).
        To the JS world (sdp.js) we pass and read this value as a string type.

        The JS world (sdp.js) was already using a string type for sess-id.
        This caused a bug when reading the sess-id value at configurationFromJSON(): no value was obtained because a numeric type was expected.

        So, after this patch, sess-id is passed and read as a string from sdp.js, and converted to an int64_t type for internal use.
        This way we also avoid a rounding problem that happens with values near LLONG_MAX when converting from int64_t to double when passed to the JS world,
        and that could cause that we end passing a number bigger than LLONG_MAX to sdp.js.

        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::configurationFromJSON):
        (WebCore::configurationToJSON):
        * platform/mediastream/MediaEndpointSessionConfiguration.h:
        (WebCore::MediaEndpointSessionConfiguration::sessionId):
        (WebCore::MediaEndpointSessionConfiguration::setSessionId):
        (WebCore::MediaEndpointSessionConfiguration::MediaEndpointSessionConfiguration):

2017-03-15  Jon Lee  <jonlee@apple.com>

        Flatten RTC enum naming
        https://bugs.webkit.org/show_bug.cgi?id=169664

        Reviewed by Youenn Fablet.

        Use consistent names of RTC enums throughout WebCore. This means surfacing
        ICE enums out of PeerConnectionState. Keep the old names around for other
        ports.

        Add RTCIceConnectionState, RTCIceGatheringState, and RTCSignalingState enums.
        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/RTCIceConnectionState.h: Added. The enum is defined in
        PeerConnectionStates.h, so just include that file.
        * Modules/mediastream/RTCIceConnectionState.idl: Added.
        * Modules/mediastream/RTCIceGatheringState.h: Added.
        * Modules/mediastream/RTCIceGatheringState.idl: Added.
        * Modules/mediastream/RTCSignalingState.h: Added.
        * Modules/mediastream/RTCSignalingState.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:

        * platform/mediastream/PeerConnectionStates.h: Move the existing enums into
        WebCore, but keep aliases to the old names within the PeerConnectionStates
        namespace.

        Refactor to use the new enum names.
        * Modules/mediastream/MediaEndpointPeerConnection.cpp: Refactor.
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCConfiguration.h:
        * Modules/mediastream/RTCConfiguration.idl: Add FIXMEs for bringing this up
        to spec.
        * Modules/mediastream/RTCIceTransport.h:
        * Modules/mediastream/RTCPeerConnection.cpp: Refactor the three functions
        below to using the enum instead of returning strings. This allows remove of
        the internal* versions of these functions.
        (WebCore::RTCPeerConnection::signalingState): Deleted.
        (WebCore::RTCPeerConnection::iceGatheringState): Deleted.
        (WebCore::RTCPeerConnection::iceConnectionState): Deleted.
        * Modules/mediastream/RTCPeerConnection.h: Replace internalSignalingState,
        internalIceGatheringState, and internalIceConnectionState.
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/MediaEndpointConfiguration.cpp:
        * platform/mediastream/MediaEndpointConfiguration.h:
        * platform/mock/MockMediaEndpoint.cpp:
        * platform/mock/MockMediaEndpoint.h:
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::processIceTransportStateChange):

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

        Optionally capture audio in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=169609

        Reviewed by Alex Christensen.

        Export some previously un-exported symbols from WebCore for use in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/WebAudioBufferList.h:
        * platform/mediastream/RealtimeMediaSource.h:

2017-03-15  Zalan Bujtas  <zalan@apple.com>

        Do not reparent floating object until after intruding/overhanging dependency is cleared.
        https://bugs.webkit.org/show_bug.cgi?id=169711
        <rdar://problem/30959743>

        Reviewed by Simon Fraser.

        This patch ensures that we cleanup the m_floatingObjects for siblings before reparenting the fresh float.  

        Test: fast/block/float/inline-becomes-float-and-moves-around.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::noLongerAffectsParentBlock):

2017-03-15  Dean Jackson  <dino@apple.com>

        Make a base class for WebGL and WebGPU contexts
        https://bugs.webkit.org/show_bug.cgi?id=169651
        <rdar://problem/31053489>

        Reviewed by Simon Fraser.

        Add a new pure virtual base class, GPUBasedCanvasRenderingContext, that
        will be used by WebGL and WebGPU rendering contexts. This allows us
        to avoid some code duplication, since many places treat the two
        as the same.

        Also rename is3d() -> isWebGL() and isGPU() -> isWebGPU().

        * WebCore.xcodeproj/project.pbxproj: New file.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContextWebGL):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::isGPUBased):
        (WebCore::HTMLCanvasElement::getImageData):
        (WebCore::HTMLCanvasElement::isGPU): Deleted.
        (WebCore::HTMLCanvasElement::is3D): Deleted.
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGL):
        (WebCore::CanvasRenderingContext::isWebGPU):
        (WebCore::CanvasRenderingContext::isGPUBased):
        (WebCore::CanvasRenderingContext::is3d): Deleted.
        (WebCore::CanvasRenderingContext::isGPU): Deleted.
        * html/canvas/GPUBasedCanvasRenderingContext.h: Added.
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        * html/canvas/WebGPURenderingContext.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):

2017-03-15  Daniel Bates  <dabates@apple.com>

        Iteratively dispatch DOM events after restoring a cached page
        https://bugs.webkit.org/show_bug.cgi?id=169703
        <rdar://problem/31075903>

        Reviewed by Brady Eidson.

        Make dispatching of DOM events when restoring a page from the page cache symmetric with
        dispatching of events when saving a page to the page cache.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Move code to dispatch events from here to FrameLoader::didRestoreFromCachedPage().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Ensure that no DOM events are dispatched during
        restoration of a cached page. Call didRestoreFromCachedPage() after restoring the page to
        dispatch DOM events on the restored frames.
        (WebCore::FrameLoader::willRestoreFromCachedPage): Renamed; formerly named prepareForCachedPageRestore().
        (WebCore::FrameLoader::didRestoreFromCachedPage): Added.
        (WebCore::FrameLoader::prepareForCachedPageRestore): Renamed to willRestoreFromCachedPage().
        * loader/FrameLoader.h:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::traverseNextInPostOrderWithWrap): Returns the next Frame* in a post-order
        traversal of the frame tree optionally wrapping around to the deepest first child in the tree.
        (WebCore::FrameTree::deepFirstChild): Added.
        * page/FrameTree.h:

2017-03-15  Dave Hyatt  <hyatt@apple.com>

        Positioned SVG not sized correctly
        https://bugs.webkit.org/show_bug.cgi?id=169693
        <rdar://problem/30996893>

        Reviewed by Zalan Bujtas.

        Test: svg/in-html/rect-positioned.html

        Change computeReplacedLogicalHeight to take an estimatedUsedWidth. This
        value is used instead of the available logical width to resolve replaced
        elements without intrinsic sizes but with aspect ratios set.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        * rendering/RenderBox.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeConstrainedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderReplaced.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::computeReplacedLogicalHeight): Deleted.
        * rendering/RenderVideo.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        * rendering/svg/RenderSVGRoot.h:

2017-03-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Using the arrow keys to navigate in the tracks menu also scrolls the page
        https://bugs.webkit.org/show_bug.cgi?id=169671
        <rdar://problem/31060091>

        Reviewed by Eric Carlson.

        We need to call preventDefault() when handling a "keydown" event that we recognize.

        Test: media/modern-media-controls/tracks-panel/tracks-panel-prevent-default-on-keydown.html

        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype._handleKeydown):

2017-03-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Tracks menu overlaps controls bar in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=169670
        <rdar://problem/31060086>
        
        Reviewed by Eric Carlson.

        It used to be that the top of the tracks button was the same as the top of the controls
        bar, but that changed when we fixed https://bugs.webkit.org/show_bug.cgi?id=169412. We
        now use the top of the controls bar to computed the y-position for the tracks panel.

        We are not adding a new test, instead we're unflaking a test that started failing
        reliably once we fixed https://bugs.webkit.org/show_bug.cgi?id=169412.

        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.showTracksPanel):

2017-03-14  Jon Lee  <jonlee@apple.com>

        Clean up RTCPeerConnection IDL
        https://bugs.webkit.org/show_bug.cgi?id=169660

        Reviewed by Youenn Fablet.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTransceiver): Refactor to use RTCRtpTransceiverInit.
        (WebCore::RTCPeerConnection::completeAddTransceiver):
        * Modules/mediastream/RTCPeerConnection.h: Remove redundant definitions.
        * Modules/mediastream/RTCPeerConnection.idl: Using 13 March 2017 Editor's Draft of
        WebRTC spec. Move RTCOfferAnswerOptions out to separate IDLs. Keep RTCDataChannelInit and
        RTCRtpTransceiverInit since they appear to be used only in RTCPeerConnection.
            Reorder the properties, functions, and events based on their appearance in the spec.
        Legacy MediaStream calls are placed at the end. I tried to use "partial interface" in the
        same file, but in the end nothing was generated, so everything is contained in one interface
        block.

        * Modules/mediastream/RTCEnums.h: Added. This will be an all-in-one header to hold the
        enums.

        Move RTCAnswerOptions, RTCOfferAnswerOptions, RTCOfferOptions, RTCRtpTransceiverDirection
        out to their own IDL's.
        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/RTCAnswerOptions.h: Added.
        * Modules/mediastream/RTCAnswerOptions.idl: Added.
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        * Modules/mediastream/RTCOfferAnswerOptions.idl: Added.
        * Modules/mediastream/RTCOfferOptions.h: Added. Remove |offerToReceiveVideo| and
        |offerToReceiveAudio|, which are not used.
        * Modules/mediastream/RTCOfferOptions.idl: Added.
        * Modules/mediastream/RTCRtpTransceiverDirection.h: Added.
        * Modules/mediastream/RTCRtpTransceiverDirection.idl: Added. Use a typedef for
        RTCRtpTransceiverDirection to prevent the code generator from prefixing RTCRtpTransceiver.
        * Modules/mediastream/RTCRtpTransceiver.idl: Move RTCRtpTransceiverDirection.
        * WebCore.xcodeproj/project.pbxproj: Add IDLs and derived sources. Remove unused
        HTMLMediaElementMediaStream.h. Reorder.

        Refactor.
        * Modules/mediastream/RTCRtpTransceiver.h: Use RTCRtpTransceiverDirection.
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:

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

        [GTK] Initialize m_button, m_clickCount members in PlatformMouseEvent constructors
        https://bugs.webkit.org/show_bug.cgi?id=169666

        Reviewed by Michael Catanzaro.

        Initialize the m_button and m_clickCount class members in the GTK+-specific
        implementation of PlatformMouseEvent constructors to NoButton and 0,
        respectively. The constructors expect to operate on passed-in GTK+ events
        that will be able to initialize those two members to some valid values, but
        this is not guaranteed.

        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

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

        [TexMap] Add missing class member initializations
        https://bugs.webkit.org/show_bug.cgi?id=169665

        Reviewed by Michael Catanzaro.

        Zero-initialize the members in various TextureMapper classes
        that are missing the proper initialization, as reported by
        the Coverity tool.

        * platform/graphics/texmap/BitmapTexturePool.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        * platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h:

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

        Compiled content extensions should include the JSON source
        https://bugs.webkit.org/show_bug.cgi?id=169643

        Reviewed by Geoffrey Garen.

        Serializing the JSON string from which a content extension was compiled
        to disk with the compiled content extension will allow us to validate content
        extensions and automatically migrate older content extensions to new versions.
        It less than doubles the size of the compiled content extension on disk, and when
        interpreting the bytecode that memory is never read, so it doesn't increase our
        dirty memory usage.

        Covered by new API tests.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:

2017-03-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Captions do not default to Auto when language is changed
        https://bugs.webkit.org/show_bug.cgi?id=169675
        <rdar://problem/30423369>

        Reviewed by Eric Carlson.

        Ensure we correctly mark the Off and Auto items as selected when we are using the
        Off and Auto tracks.

        Tests: media/modern-media-controls/tracks-support/tracks-support-auto-text-track.html
               media/modern-media-controls/tracks-support/tracks-support-off-text-track.html

        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.tracksPanelIsTrackInSectionSelected):
        (TracksSupport.prototype.tracksPanelSelectionDidChange):

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

        Unreviewed, rolling out r213977.

        This change broke the Windows build.

        Reverted changeset:

        "Make a base class for WebGL and WebGPU contexts"
        https://bugs.webkit.org/show_bug.cgi?id=169651
        http://trac.webkit.org/changeset/213977

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

        run-webkit-tests is always creating mock libwebrtc tracks
        https://bugs.webkit.org/show_bug.cgi?id=169658

        Reviewed by Alex Christensen.

        Tests: webrtc/peer-connection-audio-mute.html
               webrtc/video-mute.html

        Creating real libwebrtc av tracks in case of RealTwoPeerConnections mock factory.

        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateVideoTrack):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateAudioTrack):
        * testing/MockLibWebRTCPeerConnection.h:

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

        Preventive clean-up: ensure RTCPeerConnection stays valid when calling postTask
        https://bugs.webkit.org/show_bug.cgi?id=169661

        Reviewed by Alex Christensen.

        Protecting the RTCPeerConnection object when calling postTask since it might get collected between the task post
        and task run. Also do not send negotiationNeeded event if RTCPeerConnection is closed (covered by added test).

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::scheduleNegotiationNeededEvent):

2017-03-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Always use six digits to display time when overall media duration is an hour or more
        https://bugs.webkit.org/show_bug.cgi?id=169668
        <rdar://problem/31059699>

        Reviewed by Dean Jackson.

        Always use six digits to display times when the overall media duration is an hour or more. This
        ensures that we don't display too much white space around labels when we know we will eventually
        need six digits to display the full time, but the current time to display is under an hour.

        Test: media/modern-media-controls/time-control/time-control-use-six-digits-for-time-labels.html

        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.get useSixDigitsForTimeLabels):
        (TimeControl.prototype.set useSixDigitsForTimeLabels):
        (TimeControl.prototype.set width):
        (TimeControl.prototype.get isSufficientlyWide):
        (TimeControl.prototype._availableWidthHasChanged):
        (TimeControl.prototype.get labelsMayDisplayTimesOverAnHour): Deleted.
        (TimeControl.prototype.set labelsMayDisplayTimesOverAnHour): Deleted.
        * Modules/modern-media-controls/controls/time-label.js:
        (TimeLabel.prototype._formattedTime):
        * Modules/modern-media-controls/media/time-labels-support.js:
        (TimeLabelsSupport.prototype.syncControl):
        (TimeLabelsSupport):

2017-03-15  Dean Jackson  <dino@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=169669

        Reviewed by Antoine Quint.

        * WebCore.xcodeproj/project.pbxproj:

2017-03-14  Dean Jackson  <dino@apple.com>

        Make a base class for WebGL and WebGPU contexts
        https://bugs.webkit.org/show_bug.cgi?id=169651
        <rdar://problem/31053489>

        Reviewed by Simon Fraser.

        Add a new pure virtual base class, GPUBasedCanvasRenderingContext, that
        will be used by WebGL and WebGPU rendering contexts. This allows us
        to avoid some code duplication, since many places treat the two
        as the same.

        Also rename is3d() -> isWebGL() and isGPU() -> isWebGPU().

        * WebCore.xcodeproj/project.pbxproj: New file.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContextWebGL):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::isGPUBased):
        (WebCore::HTMLCanvasElement::getImageData):
        (WebCore::HTMLCanvasElement::isGPU): Deleted.
        (WebCore::HTMLCanvasElement::is3D): Deleted.
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGL):
        (WebCore::CanvasRenderingContext::isWebGPU):
        (WebCore::CanvasRenderingContext::isGPUBased):
        (WebCore::CanvasRenderingContext::is3d): Deleted.
        (WebCore::CanvasRenderingContext::isGPU): Deleted.
        * html/canvas/GPUBasedCanvasRenderingContext.h: Added.
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        * html/canvas/WebGPURenderingContext.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):

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

        Unreviewed GTK+ build fix. Sprinkle ENABLE(MEDIA_STREAM) build guards
        in the Internals class to avoid compilation failures when building
        with this feature disabled.

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

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

        CanvasCapture should not generate a frame per each canvas draw command
        https://bugs.webkit.org/show_bug.cgi?id=169498

        Reviewed by Simon Fraser & Eric Carlson.

        Test: fast/mediastream/captureStream/canvas2d-heavy-drawing.html

        Making Canvas capture be asynchronous.
        This ensures that one frame will be created for a set of synchronous draw commands.
        In the future, we should find a better approach, like aligning with requestAnimationFrame.
        Adding internals observer API for media stream tracks.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * platform/mediastream/RealtimeMediaSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::~Internals):
        (WebCore::Internals::observeMediaStreamTrack):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        RenderElements should unregister for viewport visibility callbacks when they are destroyed
        https://bugs.webkit.org/show_bug.cgi?id=169521
        <rdar://problem/30959545>

        Reviewed by Simon Fraser.

        When registering a RenderElement for viewport visibility callbacks, we always need to make sure that it is unregistered
        before it is destroyed. While we account for this in the destructor of RenderElement, we only unregister in the destructor
        if we are already registered for visibility callbacks. In the call to RenderObject::willBeDestroyed(), we clear out rare
        data, which holds RenderElement's viewport callback registration state, so upon entering the destructor of RenderElement,
        we skip unregistration because RenderElement thinks that it is not registered.

        We can mitigate this by unregistering the RenderElement earlier, in RenderElement::willBeDestroyed, prior to clearing out
        the rare data. However, we'd ideally want to move the cleanup logic out of the destructor altogether and into willBeDestroyed
        (see https://bugs.webkit.org/show_bug.cgi?id=169650).

        Test: fast/media/video-element-in-details-collapse.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):

2017-03-14  Dean Jackson  <dino@apple.com>

        Rename LayerTypeWebGLLayer and use it for both WebGL and WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=169628
        <rdar://problems/31047025>

        Fix Windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printLayer):

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

        REGRESSION (r209760): Apple Pay doesn't work on sites that specify empty contact fields
        https://bugs.webkit.org/show_bug.cgi?id=169639
        <rdar://problem/30957789>

        Reviewed by Anders Carlsson.

        Shipping and billing contact fields are allowed to be empty.

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

2017-03-14  Anders Carlsson  <andersca@apple.com>

        Propagate PassKit errors
        https://bugs.webkit.org/show_bug.cgi?id=169633
        rdar://problem/31043392

        Reviewed by Dean Jackson.

        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convert):
        (WebCore::convertAndValidate):
        * Modules/applepay/PaymentRequest.h:

2017-03-14  Alan Kinsley  <zalan@apple.com>

        Simple line layout: Adjust hyphenation constrains based on the normal line layout line-breaking logic.
        https://bugs.webkit.org/show_bug.cgi?id=169617

        Reviewed by Antti Koivisto.

        This patch ensures that simple line layout ends up with the same hyphenation context as normal line layout. 

        Test: fast/text/simple-line-layout-hyphenation-constrains.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::hyphenPositionForFragment): see webkit.org/b/169613
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        * rendering/line/BreakingContext.h: Integral -> fractional.
        (WebCore::tryHyphenating):

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

        Refactor: Allow WebKit2 to override the creation of RealtimeMediaSources
        https://bugs.webkit.org/show_bug.cgi?id=169227

        Reviewed by Eric Carlson.

        Allow clients of RealtimeMediaSourceCenter to specify a factory for creating
        RealtimeMediaSources, to be used by subclasess of RealtimeMediaSourceCenter. Add virtual
        methods to retrieve the "default" factories for the RealtimeMediaSourceCenter subclass. The
        requires moving the creation of sources up from CaptureDeviceManager into
        RealtimeMediaSourceCenterMac, and the addition of factory methods to AVAudioCaptureSource
        and AVVideoCaptureSource.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::deviceWithUID):
        (CaptureDeviceManager::bestSourcesForTypeAndConstraints): Deleted.
        (CaptureDeviceManager::sourceWithUID): Deleted.
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::setVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::audioFactory):
        (WebCore::RealtimeMediaSourceCenter::videoFactory):
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::factory):
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::createMediaSourceForCaptureDeviceWithConstraints): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::factory):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac):
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoFactory):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::factory):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::defaultAudioFactory):
        (WebCore::MockRealtimeMediaSourceCenter::defaultVideoFactory):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::factory):
        * platform/mock/MockRealtimeVideoSource.h:

2017-03-14  Dean Jackson  <dino@apple.com>

        Rename LayerTypeWebGLLayer and use it for both WebGL and WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=169628
        <rdar://problems/31047025>

        Reviewed by Simon Fraser.

        Rename LayerTypeWebGLLayer to LayerTypeContentsProvidedLayer
        and use it for both WebGLLayer and WebGPULayer, to avoid
        code duplication.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (PlatformCALayerCocoa::PlatformCALayerCocoa):
        (PlatformCALayerCocoa::commonInit):

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

        Make classes used by Media Stream encode/decode friendly
        https://bugs.webkit.org/show_bug.cgi?id=169567

        Reviewed by Eric Carlson.

        Add encode() and decode() methods and implementations to a variety of media stream related classes.

        * platform/audio/mac/CAAudioStreamDescription.h:
        (WebCore::CAAudioStreamDescription::encode):
        (WebCore::CAAudioStreamDescription::decode):
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::width):
        (WebCore::RealtimeMediaSourceSettings::setWidth):
        (WebCore::RealtimeMediaSourceSettings::height):
        (WebCore::RealtimeMediaSourceSettings::setHeight):
        (WebCore::RealtimeMediaSourceSettings::sampleRate):
        (WebCore::RealtimeMediaSourceSettings::setSampleRate):
        (WebCore::RealtimeMediaSourceSettings::sampleSize):
        (WebCore::RealtimeMediaSourceSettings::setSampleSize):
        (WebCore::RealtimeMediaSourceSettings::encode):
        (WebCore::RealtimeMediaSourceSettings::decode):
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:
        (WebCore::RealtimeMediaSourceSupportedConstraints::encode):
        (WebCore::RealtimeMediaSourceSupportedConstraints::decode):

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

        Adapt CARingBuffer to be usable across processes
        https://bugs.webkit.org/show_bug.cgi?id=169591

        Reviewed by Alex Christensen.

        When used with a SharedMemory backing store, storing the pointers to channel data at the beginning
        of the channel data itself is problematic: when the SharedMemory is mapped on the far side of the
        process boundary, it will not exist at the same memory location as it did on the near side. Instead
        of storing these pointers inside the channel data, store them in a small (usually 1 or 2 entry) vector
        recreated when the backing store is (re-)allocated.

        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::CARingBuffer):
        (WebCore::CARingBuffer::allocate):
        (WebCore::CARingBuffer::deallocate):
        (WebCore::ZeroRange):
        (WebCore::StoreABL):
        (WebCore::FetchABL):
        (WebCore::CARingBuffer::store):
        (WebCore::CARingBuffer::getCurrentFrameBounds):
        (WebCore::CARingBuffer::fetch):
        * platform/audio/mac/CARingBuffer.h:

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

        Pulling more frames from AudioSampleDataSource than the last push added will always fail.
        https://bugs.webkit.org/show_bug.cgi?id=168644

        Reviewed by Eric Carlson.

        Rather than use the delta between the ring buffer's end time and the last pushed timestamp
        (or what is effectively the number of samples in the last push operation) to determine if
        there is enough buffered data to satisfy a pull operation, use the ring buffer's actual
        buffered duration.

        Then, instead of saving the last pushed timestamp, explicitly save the last push count, and
        use that data to inform how much to offset the output timestamps (or what is effectively how
        much to allow the source to pre-buffer).

        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        * platform/audio/mac/AudioSampleDataSource.h:

2017-03-14  Megan Gardner  <megan_gardner@apple.com>

        Correctly export WebItemProviderPasteboard
        https://bugs.webkit.org/show_bug.cgi?id=169578

        Reviewed by Tim Horton.

        * platform/ios/WebItemProviderPasteboard.h:

2017-03-14  Adrian Perez de Castro  <aperez@igalia.com>

        Remove redundant check for "firstLine" in RenderBlock::lineHeight()
        https://bugs.webkit.org/show_bug.cgi?id=169610

        Reviewed by Michael Catanzaro.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight): Remove test of "firstLine" that
        was already checked in the condition for the enclosing if-clause.

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

        [Modern Media Controls] Fullscreen controls during Live Broadcast is completely broken
        https://bugs.webkit.org/show_bug.cgi?id=169354
        <rdar://problem/30636370>

        Reviewed by Dean Jackson.

        When playing a Live Broadcast video in fullscreen, we should not show any scrubbing-related
        piece of UI and ensure that we show the status label.

        Test: http/tests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-live-broadcast.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen > .controls-bar .status-label):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/media/seek-support.js:
        (SeekSupport.prototype.get mediaEvents):
        (SeekSupport.prototype.syncControl):

2017-03-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: More accurate Resource Timing data in Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=169577

        Reviewed by Youenn Fablet.

        * inspector/InspectorNetworkAgent.h:
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        Use the ResourceLoader to get the start time that responseEnd is relative to
        so we can send the more accurate responseEnd when available.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishLoading):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        Pass ResourceLoader through to Web Inspector in didFinishLoading.

        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::copyTimingData):
        The differences from the reference start are in Seconds, not milliseconds.

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

        [WK2] Data interaction tests occasionally hit assertions in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=169002
        <rdar://problem/30994806>

        Reviewed by Tim Horton.

        Data interaction unit tests occasionally fail due to the UI process expecting the latest received EditorState to
        contain post layout data, but finding that it does not in -[WKContentView selectedTextRange]. The incomplete
        EditorStates in question are sent while performing a data interaction operation, due to transient changes in the
        frame selection. The UI process does not need to (and should not) be informed of these selection changes at all.

        We can fix this by preventing the editor client from responding to selection changes during data interaction
        operation. This patch also renames setIgnoreCompositionSelectionChange to setIgnoreSelectionChanges to better
        reflect the fact that it is used outside of the context of holding selection change updates during IME. We
        already use this affordance in various places, such as TextIndicator (while taking a snapshot on iOS), in
        FindController on iOS, and when replacing selected or dictated text. Additionally, there is no logic in
        setIgnoreCompositionSelectionChange that limits its use to composition.

        * editing/Editor.cpp:
        (WebCore::Editor::cancelCompositionIfSelectionIsInvalid):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        (WebCore::Editor::setIgnoreSelectionChanges):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::setIgnoreCompositionSelectionChange): Deleted.
        * editing/Editor.h:
        (WebCore::Editor::ignoreSelectionChanges):
        (WebCore::Editor::ignoreCompositionSelectionChange): Deleted.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::selectionWillChange):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):

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

        [Modern Media Controls] iOS may attempt to load fullscreen icon variants
        https://bugs.webkit.org/show_bug.cgi?id=169608
        <rdar://problem/31037369>

        Reviewed by Eric Carlson.

        Only return fullscreen or compact variants for macOS.

        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconNameAndLayoutTraits):
        (const.iconService.new.IconService):

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

        [Modern Media Controls] Controls are laid out incorrectly with RTL languages
        https://bugs.webkit.org/show_bug.cgi?id=169605
        <rdar://problem/30975709>

        Reviewed by Eric Carlson.

        Encorce "direction: ltr" on the controls since the controls layout should not be changed
        by the host page's direction.

        Test: media/modern-media-controls/media-controls/media-controls-controls-bar-always-ltr.html

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

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

        Make RepaintRegionAccumulator hold a WeakPtr to its root RenderView
        https://bugs.webkit.org/show_bug.cgi?id=168480
        <rdar://problem/30566976>

        Reviewed by Antti Koivisto.

        Implements two mitigations to prevent the symptoms of the bug from occurring (see the bugzilla for more details).

        Test: editing/execCommand/show-modal-dialog-during-execCommand.html

        * editing/EditorCommand.cpp:
        (WebCore::Editor::Command::execute):

        Do not allow edit commands to execute if the frame's document before and after layout differ (that is, edit commands
        triggered by a certain document should not run on a different document).

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

        Turns RepaintRegionAccumulator's reference to its root RenderView into a WeakPtr to gracefully handle the case
        where its RenderView is destroyed before RepaintRegionAccumulator's destructor gets a chance to flush the
        RenderView's repaint regions.

        * rendering/RenderView.h:

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

        [GLib] Use USE(GLIB) guards in WebCore/workers/
        https://bugs.webkit.org/show_bug.cgi?id=169595

        Reviewed by Carlos Garcia Campos.

        Utilize the USE(GLIB) build guards in the WorkerRunLoop and WorkerThread
        class implementations to guard GLib-specific header inclusions and GLib
        API invocations, instead of the more specific PLATFORM(GTK) guards.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

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

        [Soup] Suppress compiler warnings in NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=169593

        Reviewed by Carlos Garcia Campos.

        Return default-constructed Vector objects in the NetworkStorageSession's
        getAllCookies() and getCookies() methods, avoiding compiler warnings.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getAllCookies):
        (WebCore::NetworkStorageSession::getCookies):

2017-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused methods of ResourceRequestBase
        https://bugs.webkit.org/show_bug.cgi?id=169579

        Reviewed by Youenn Fablet.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::reportUploadProgress): Deleted.
        (WebCore::ResourceRequestBase::setReportUploadProgress): Deleted.
        (WebCore::ResourceRequestBase::reportLoadTiming): Deleted.
        (WebCore::ResourceRequestBase::setReportLoadTiming): Deleted.
        (WebCore::ResourceRequestBase::reportRawHeaders): Deleted.
        (WebCore::ResourceRequestBase::setReportRawHeaders): Deleted.
        Remove unused code.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        Remove callers of setters that did nothing.

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

        Make RealtimeMediaSource::type an enum class
        https://bugs.webkit.org/show_bug.cgi?id=169491

        Reviewed by Sam Weinig.

        No change of behavior.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::getAudioTracks):
        (WebCore::MediaStream::getVideoTracks):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::kind):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::MediaStreamAudioSource):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::bestSourcesForTypeAndConstraints):
        (CaptureDeviceManager::sourceWithUID):
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::AVAudioCaptureSource):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::createMutedRemoteSource):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):

2017-03-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=169474
        <rdar://problem/30976747>

        Reviewed by Youenn Fablet.

        Every video capture source has extremely similar code to render the current frame to
        a graphics context. Because the media player gets every video sample buffer, have it
        hang onto the most recent frame so it can implement paintCurrentFrameInContext directly.
        Fix an existing race condition that occasionally caused the readyState to advance to 
        "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate
        readyState and observing that.

        No new tests, covered by existing tests. These changes uncovered a bug in 
        fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which 
        was updated.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted.
        (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted.
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        Drive-by change - don't pass status to parent callback, it is a property of the layer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't
        use AVSampleBufferRenderSynchronizer so don't fail if it isn't available.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame,
        invalidate cached image, update readyState.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage".
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early
         return if there is no need for a layer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged,
        add a bool return to signal when the mode changes.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display
        mode immediately.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata,
        or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never
        drop back to HaveMetadata.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic
        size directly.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter
        when active video track changes.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current
        frame image.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted.
        (WebCore::MediaStreamPrivate::currentFrameImage): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState.
        (WebCore::MediaStreamTrackPrivate::clone): Clone readyState.
        (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState.
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto.
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto.
        (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers.
        (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::currentFrameImage): Deleted.
        (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback
        after calling removeNotificationObservers.
        (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove 
        the correct listener.
        (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]):

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted.
        (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted.
        (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted.

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::drawImage): Deleted.
        (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted.
        (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted.
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted.
        (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:

2017-03-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][SOUP] Fix build after r213877
        https://bugs.webkit.org/show_bug.cgi?id=140191

        Unreviewed build fix.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookie): Add missing setCookie() declaration.

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

        WKWebView provides no access to cookies.
        https://bugs.webkit.org/show_bug.cgi?id=140191

        Reviewed by Tim Horton.

        Covered by API tests.

        * platform/Cookie.h:

        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookie):
        (WebCore::NetworkStorageSession::deleteCookie):
        (WebCore::nsCookiesToCookieVector):
        (WebCore::NetworkStorageSession::getAllCookies):
        (WebCore::NetworkStorageSession::getCookies):

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::deleteCookie):
        (WebCore::NetworkStorageSession::getAllCookies):
        (WebCore::NetworkStorageSession::getCookies):

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

        Web Inspector: Event Listeners section is missing 'once', 'passive' event listener flags
        https://bugs.webkit.org/show_bug.cgi?id=167080

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/getEventListenersForNode.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        Add "passive" and "once" values to the EventListener protocol object when applicable.

2017-03-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: More efficient network process messaging + Fix bug in user interaction reporting
        https://bugs.webkit.org/show_bug.cgi?id=169506

        Reviewed by Alex Christensen.

        Covered by previous test which now follows the code path more closely to when reporting
        happens in the web process.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            No longer explicitly calls ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
            Instead just calls ResourceLoadStatisticsStore::fireDataModificationHandler().
        (WebCore::ResourceLoadObserver::logUserInteraction):
            Updated to call the new ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler):
            Now takes two vectors – domainsToRemove and domainsToAdd.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString):
            Added boolean field isMarkedForCookiePartitioning.
        (WebCore::ResourceLoadStatistics::merge):
            Added boolean field isMarkedForCookiePartitioning.
        * loader/ResourceLoadStatistics.h:
            Added boolean field isMarkedForCookiePartitioning.
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now marks statistics with isMarkedForCookiePartitioning before sending them off to
            ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebCore::ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback):
            Now accepts a handler with two vectors.
        (WebCore::ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler):
            Now the only exported version of this function is the one without arguments.
            The one internal to WebCore accepts two vectors – domainsToRemove and domainsToAdd.
            The exported one generates the two vectors and then calls the internal one.
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction):
            No longer explicitly calls ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        * loader/ResourceLoadStatisticsStore.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setShouldPartitionCookiesForHosts):
            Now takes two vectors – domainsToRemove and domainsToAdd.

2017-03-13  Dean Jackson  <dino@apple.com>

        Respect the runtime flag for WebGPU, default feature to off.
        https://bugs.webkit.org/show_bug.cgi?id=169564
        <rdar://problems/31018864>

        Reviewed by Tim Horton.

        Make sure WebGPU respects its runtime feature flag. Also, since
        this implementation doesn't validate content, it should default
        to being disabled.

        Test: fast/canvas/webgpu/webgpu-runtime-flag.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::getContextWebGPU):

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

        Fix CMake build.

        * PlatformMac.cmake:
        Add new files.

2017-03-13  Chris Dumez  <cdumez@apple.com>

        Allow termination of background WebProcesses that go over a given CPU usage threshold
        https://bugs.webkit.org/show_bug.cgi?id=169456
        <rdar://problem/30960968>

        Reviewed by Andreas Kling.

        Add CPUMonitor utility class to monitor CPU usage and call a provided lambda
        whenever the process exceeds the provided CPU limit over a given period of
        time.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/CPUMonitor.cpp: Added.
        (WebCore::CPUMonitor::CPUMonitor):
        (WebCore::CPUMonitor::setCPULimit):
        (WebCore::CPUMonitor::timerFired):
        * platform/CPUMonitor.h: Added.

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

        [Modern Media Controls] Volume icon doesn't turn to mute when the knob is set to 0
        https://bugs.webkit.org/show_bug.cgi?id=169553
        <rdar://problem/30754543>

        Reviewed by Eric Carlson.

        When we start changing the volume using the mouse, we record the volume at that point
        and as we drag the volume slider, we set the mute button to show that the media is
        muted if the volume is 0, and set the actual media volume to be the initial volume
        prior to dragging. This way, when we toggle the "muted" property by pressing the
        mute button, the original volume is restored.

        To function correctly, this required some changed to Slider. The volume slider would
        fail to update if the value set was the same as the initial value since we would use
        only the "change" event to identify the end of a slider drag interaction. This was
        incorrect since if the initial value and the final value while dragging the slider
        were the same, no "change" event would be fired. So we now use mouse events to
        identify when the slider is being dragged.

        Test: media/modern-media-controls/volume-support/volume-support-drag-to-mute.html

        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.set value):
        (Slider.prototype.handleEvent):
        (Slider.prototype._handleMousedownEvent):
        (Slider.prototype._handleInputEvent):
        (Slider.prototype._handleMouseupEvent):
        (Slider.prototype._handleChangeEvent): Deleted.
        * Modules/modern-media-controls/controls/volume-slider.js:
        (VolumeSlider):
        (VolumeSlider.prototype.draw):
        (VolumeSlider.prototype.handleEvent): Deleted.
        * Modules/modern-media-controls/media/volume-support.js:
        (VolumeSupport.prototype.controlValueWillStartChanging):
        (VolumeSupport.prototype.controlValueDidChange):

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

        [Win] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=169546

        Reviewed by Brent Fulgham.

        There is no matching constructor in the Cookie class.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getRawCookies):

2017-03-13  Miguel Gomez  <magomez@igalia.com>

        ImageDecoder can be deleted while the async decoder thread is still using it
        https://bugs.webkit.org/show_bug.cgi?id=169199

        Reviewed by Carlos Garcia Campos.

        Make the image decoder used by ImageSource and ImageFrameCache into a RefPtr instead of
        and unique_ptr, and pass a reference to the decoder thread. This ensures that the decoder
        will stay alive as long as the decoding thread is processing frames. Also, stop the async
        decoding queue if a new decoder is set to ImageFrameCache.

        No new tests.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setDecoder):
        (WebCore::ImageFrameCache::decoder):
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        (WebCore::ImageFrameCache::metadata):
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::setDecoder): Deleted.
        Moved to source file so we can keep the ImageDecoder forward declaration.
        (WebCore::ImageFrameCache::decoder): Deleted.
        Moved to source file so we can keep the ImageDecoder forward declaration.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageDecoderCG.h:
        (WebCore::ImageDecoder::create):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/ImageDecoder.h:

2017-03-13  Manuel Rego Casasnovas  <rego@igalia.com>

        Unprefix -webkit-min-content, -webkit-max-content and -webkit-fit-content
        https://bugs.webkit.org/show_bug.cgi?id=169195

        Reviewed by Sergio Villar Senin.

        Based on Blink r200846 by <cbiesinger@chromium.org>.
        https://src.chromium.org/viewvc/blink?revision=200846&view=revision

        This patch adds support for the unprefixed version of these properties,
        while it keeps the prefixed ones working too.
        -webkit-fill-available is left out of this change, as the CSS WG
        is still defining the final keyword and behavior.

        With this patch WebKit will be in the same situation than Blink
        regarding these intrinsic sizing keywords (see http://crbug.com/245157).

        Test: fast/css-intrinsic-dimensions/height-property-value.html
              fast/css-intrinsic-dimensions/width-property-value.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::init):
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLengthSizing):
        (WebCore::StyleBuilderConverter::createGridTrackBreadth):
        * css/html.css:
        (fieldset):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::validWidthOrHeightKeyword):
        (WebCore::isGridTrackFixedSized):
        (WebCore::consumeGridBreadth):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2017-03-13  Dean Jackson  <dino@apple.com>

        WebGPU remote layer hosting
        https://bugs.webkit.org/show_bug.cgi?id=169539
        <rdar://problem/31005380>

        Reviewed by Jon Lee.

        Implement the WebProcess side of WebGPULayer hosting,
        via LayerTypeWebGPULayer.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<): Provide nice pretty printing.
        * platform/graphics/ca/PlatformCALayer.h: Add LayerTypeWebGPULayer.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: Support LayerTypeWebGPULayer.
        (PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (PlatformCALayerCocoa::PlatformCALayerCocoa):
        (PlatformCALayerCocoa::commonInit):

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

        Unreviewed GTK+ build fix. Adjust the Cookie constructor
        invocation in CookieJarSoup, using empty values for the
        newly-added parameters. This should probably be revised
        to determine whether meaningful values can be passed in.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):

2017-03-13  Jon Lee  <jonlee@apple.com>

        WebGPU: Backend - hosting WebGPU layers
        https://bugs.webkit.org/show_bug.cgi?id=169366
        <rdar://problem/30928735>

        Reviewed by Dean Jackson.

        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create): Create the device and the
        rendering context.
        * platform/graphics/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::commit):
        * platform/graphics/cocoa/GPUDrawableMetal.mm:
        (WebCore::GPUDrawable::release): Fix a log message
        * platform/graphics/gpu/GPUCommandBuffer.cpp:
        (WebCore::GPUCommandBuffer::commit): Deleted. Moved to GPUCommandBufferMetal.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy): WebGPU canvas should return CanvasAsLayerContents.

2017-03-12  Jon Lee  <jonlee@apple.com>

        Remove stubs from WebGPU front end
        https://bugs.webkit.org/show_bug.cgi?id=169375

        Reviewed by Dean Jackson.

        Remove stubs and use the back end.
        * html/canvas/WebGPUCommandBuffer.cpp:
        * html/canvas/WebGPUCommandBuffer.h:
        * html/canvas/WebGPUCommandQueue.cpp:
        * html/canvas/WebGPUCommandQueue.h:
        * html/canvas/WebGPUDepthStencilDescriptor.cpp:
        (WebCore::WebGPUDepthStencilDescriptor::setDepthCompareFunction): Remove redundant clause.
        * html/canvas/WebGPUDepthStencilDescriptor.h:
        * html/canvas/WebGPUDepthStencilDescriptor.idl: Remove label property. Not needed yet.
        * html/canvas/WebGPUDepthStencilState.cpp:
        * html/canvas/WebGPUDepthStencilState.h:
        * html/canvas/WebGPUEnums.cpp:
        * html/canvas/WebGPUEnums.h:
        * html/canvas/WebGPURenderCommandEncoder.cpp:
        * html/canvas/WebGPURenderCommandEncoder.h:
        * html/canvas/WebGPURenderPassAttachmentDescriptor.cpp:
        * html/canvas/WebGPURenderPassAttachmentDescriptor.h:
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.cpp:
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.h:
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.cpp:
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.h:
        * html/canvas/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::colorAttachments): Uncomment code with GPURenderPassColorAttachmentDescriptor available.
        * html/canvas/WebGPURenderPassDescriptor.h:
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.cpp:
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.h:
        * html/canvas/WebGPURenderPipelineDescriptor.cpp:
        * html/canvas/WebGPURenderPipelineDescriptor.h:
        * html/canvas/WebGPURenderPipelineDescriptor.idl: Remove label property. Not needed yet.
        * html/canvas/WebGPURenderPipelineState.cpp:
        * html/canvas/WebGPURenderPipelineState.h:

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

        WebGPU Backend
        https://bugs.webkit.org/show_bug.cgi?id=169535
        <rdar://problem/31002364>

        Reviewed by Jon Lee.

        Fill in the remainder of the WebGPU backend. This is effectively
        a C++ representation of the Metal API.

        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGPUDrawable.cpp:
        (WebCore::WebGPUDrawable::WebGPUDrawable):
        * html/canvas/WebGPUDrawable.h:
        (WebCore::GPUDrawable::texture): Deleted.
        * platform/graphics/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::platformBuffer):
        * platform/graphics/cocoa/GPUCommandBufferMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm.
        (WebCore::GPUCommandBuffer::GPUCommandBuffer):
        (WebCore::GPUCommandBuffer::platformCommandBuffer):
        (WebCore::GPUCommandBuffer::presentDrawable):
        * platform/graphics/cocoa/GPUCommandQueueMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm.
        (WebCore::GPUCommandQueue::GPUCommandQueue):
        (WebCore::GPUCommandQueue::label):
        (WebCore::GPUCommandQueue::setLabel):
        (WebCore::GPUCommandQueue::platformCommandQueue):
        * platform/graphics/cocoa/GPUDepthStencilDescriptorMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUTextureMetal.mm.
        (WebCore::GPUDepthStencilDescriptor::GPUDepthStencilDescriptor):
        (WebCore::GPUDepthStencilDescriptor::depthWriteEnabled):
        (WebCore::GPUDepthStencilDescriptor::setDepthWriteEnabled):
        (WebCore::GPUDepthStencilDescriptor::depthCompareFunction):
        (WebCore::GPUDepthStencilDescriptor::setDepthCompareFunction):
        (WebCore::GPUDepthStencilDescriptor::platformDepthStencilDescriptor):
        * platform/graphics/cocoa/GPUDepthStencilStateMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm.
        (WebCore::GPUDepthStencilState::GPUDepthStencilState):
        (WebCore::GPUDepthStencilState::label):
        (WebCore::GPUDepthStencilState::setLabel):
        (WebCore::GPUDepthStencilState::platformDepthStencilState):
        * platform/graphics/cocoa/GPUDrawableMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm.
        (WebCore::GPUDrawable::GPUDrawable):
        (WebCore::GPUDrawable::release):
        (WebCore::GPUDrawable::platformDrawable):
        (WebCore::GPUDrawable::platformTexture):
        * platform/graphics/cocoa/GPUFunctionMetal.mm:
        (WebCore::GPUFunction::GPUFunction):
        (WebCore::GPUFunction::platformFunction):
        * platform/graphics/cocoa/GPULibraryMetal.mm:
        (WebCore::GPULibrary::GPULibrary):
        (WebCore::GPULibrary::setLabel):
        (WebCore::GPULibrary::platformLibrary):
        * platform/graphics/cocoa/GPURenderCommandEncoderMetal.mm: Added.
        (WebCore::GPURenderCommandEncoder::GPURenderCommandEncoder):
        (WebCore::GPURenderCommandEncoder::setRenderPipelineState):
        (WebCore::GPURenderCommandEncoder::setDepthStencilState):
        (WebCore::GPURenderCommandEncoder::setVertexBuffer):
        (WebCore::GPURenderCommandEncoder::setFragmentBuffer):
        (WebCore::GPURenderCommandEncoder::drawPrimitives):
        (WebCore::GPURenderCommandEncoder::endEncoding):
        (WebCore::GPURenderCommandEncoder::platformRenderCommandEncoder):
        * platform/graphics/cocoa/GPURenderPassAttachmentDescriptorMetal.mm: Added.
        (WebCore::GPURenderPassAttachmentDescriptor::GPURenderPassAttachmentDescriptor):
        (WebCore::GPURenderPassAttachmentDescriptor::loadAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setLoadAction):
        (WebCore::GPURenderPassAttachmentDescriptor::storeAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setStoreAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setTexture):
        (WebCore::GPURenderPassAttachmentDescriptor::platformRenderPassAttachmentDescriptor):
        * platform/graphics/cocoa/GPURenderPassColorAttachmentDescriptorMetal.mm: Added.
        (WebCore::GPURenderPassColorAttachmentDescriptor::create):
        (WebCore::GPURenderPassColorAttachmentDescriptor::GPURenderPassColorAttachmentDescriptor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::clearColor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::setClearColor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::platformRenderPassColorAttachmentDescriptor):
        * platform/graphics/cocoa/GPURenderPassDepthAttachmentDescriptorMetal.mm: Added.
        (WebCore::GPURenderPassDepthAttachmentDescriptor::create):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::GPURenderPassDepthAttachmentDescriptor):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::clearDepth):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::setClearDepth):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::platformRenderPassDepthAttachmentDescriptor):
        * platform/graphics/cocoa/GPURenderPassDescriptorMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUBufferMetal.mm.
        (WebCore::GPURenderPassDescriptor::GPURenderPassDescriptor):
        (WebCore::GPURenderPassDescriptor::colorAttachments):
        (WebCore::GPURenderPassDescriptor::depthAttachment):
        (WebCore::GPURenderPassDescriptor::platformRenderPassDescriptor):
        * platform/graphics/cocoa/GPURenderPipelineColorAttachmentDescriptorMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPULibraryMetal.mm.
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::create):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::GPURenderPipelineColorAttachmentDescriptor):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::pixelFormat):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::setPixelFormat):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::platformRenderPipelineColorAttachmentDescriptor):
        * platform/graphics/cocoa/GPURenderPipelineDescriptorMetal.mm: Added.
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        (WebCore::GPURenderPipelineDescriptor::depthAttachmentPixelFormat):
        (WebCore::GPURenderPipelineDescriptor::setDepthAttachmentPixelFormat):
        (WebCore::GPURenderPipelineDescriptor::setVertexFunction):
        (WebCore::GPURenderPipelineDescriptor::setFragmentFunction):
        (WebCore::GPURenderPipelineDescriptor::colorAttachments):
        (WebCore::GPURenderPipelineDescriptor::reset):
        (WebCore::GPURenderPipelineDescriptor::platformRenderPipelineDescriptor):
        * platform/graphics/cocoa/GPURenderPipelineStateMetal.mm: Copied from Source/WebCore/platform/graphics/cocoa/GPUTextureMetal.mm.
        (WebCore::GPURenderPipelineState::GPURenderPipelineState):
        (WebCore::GPURenderPipelineState::label):
        (WebCore::GPURenderPipelineState::setLabel):
        (WebCore::GPURenderPipelineState::platformRenderPipelineState):
        * platform/graphics/cocoa/GPUTextureDescriptorMetal.mm:
        (WebCore::GPUTextureDescriptor::GPUTextureDescriptor):
        (WebCore::GPUTextureDescriptor::platformTextureDescriptor):
        * platform/graphics/cocoa/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture):
        (WebCore::GPUTexture::platformTexture):
        * platform/graphics/gpu/GPUBuffer.cpp:
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUCommandBuffer.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUBuffer.cpp.
        (WebCore::GPUCommandBuffer::create):
        (WebCore::GPUCommandBuffer::~GPUCommandBuffer):
        (WebCore::GPUCommandBuffer::commit):
        (WebCore::GPUCommandBuffer::createRenderCommandEncoder):
        (WebCore::GPUCommandBuffer::presentDrawable):
        * platform/graphics/gpu/GPUCommandBuffer.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPUCommandQueue.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUBuffer.cpp.
        (WebCore::GPUCommandQueue::create):
        (WebCore::GPUCommandQueue::~GPUCommandQueue):
        (WebCore::GPUCommandQueue::createCommandBuffer):
        (WebCore::GPUCommandQueue::label):
        (WebCore::GPUCommandQueue::setLabel):
        * platform/graphics/gpu/GPUCommandQueue.h: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.h.
        * platform/graphics/gpu/GPUDepthStencilDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.cpp.
        (WebCore::GPUDepthStencilDescriptor::create):
        (WebCore::GPUDepthStencilDescriptor::~GPUDepthStencilDescriptor):
        (WebCore::GPUDepthStencilDescriptor::depthWriteEnabled):
        (WebCore::GPUDepthStencilDescriptor::setDepthWriteEnabled):
        (WebCore::GPUDepthStencilDescriptor::depthCompareFunction):
        (WebCore::GPUDepthStencilDescriptor::setDepthCompareFunction):
        * platform/graphics/gpu/GPUDepthStencilDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPUDepthStencilState.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUBuffer.cpp.
        (WebCore::GPUDepthStencilState::create):
        (WebCore::GPUDepthStencilState::~GPUDepthStencilState):
        (WebCore::GPUDepthStencilState::label):
        (WebCore::GPUDepthStencilState::setLabel):
        * platform/graphics/gpu/GPUDepthStencilState.h: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.h.
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createCommandQueue):
        (WebCore::GPUDevice::getFramebuffer):
        * platform/graphics/gpu/GPUDevice.h:
        (WebCore::GPUDevice::markLayerComposited):
        (WebCore::GPUDevice::createCommandQueue): Deleted.
        (WebCore::GPUDevice::getFramebuffer): Deleted.
        * platform/graphics/gpu/GPUDrawable.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUBuffer.cpp.
        (WebCore::GPUDrawable::create):
        (WebCore::GPUDrawable::~GPUDrawable):
        (WebCore::GPUDrawable::release):
        * platform/graphics/gpu/GPUDrawable.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPUEnums.h: Copied from Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm.
        * platform/graphics/gpu/GPUFunction.h:
        * platform/graphics/gpu/GPULibrary.cpp:
        * platform/graphics/gpu/GPULibrary.h:
        * platform/graphics/gpu/GPURenderCommandEncoder.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.cpp.
        (WebCore::GPURenderCommandEncoder::create):
        (WebCore::GPURenderCommandEncoder::~GPURenderCommandEncoder):
        (WebCore::GPURenderCommandEncoder::setRenderPipelineState):
        (WebCore::GPURenderCommandEncoder::setDepthStencilState):
        (WebCore::GPURenderCommandEncoder::setVertexBuffer):
        (WebCore::GPURenderCommandEncoder::setFragmentBuffer):
        (WebCore::GPURenderCommandEncoder::drawPrimitives):
        (WebCore::GPURenderCommandEncoder::endEncoding):
        * platform/graphics/gpu/GPURenderCommandEncoder.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.cpp.
        (WebCore::GPURenderPassAttachmentDescriptor::~GPURenderPassAttachmentDescriptor):
        (WebCore::GPURenderPassAttachmentDescriptor::GPURenderPassAttachmentDescriptor):
        (WebCore::GPURenderPassAttachmentDescriptor::loadAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setLoadAction):
        (WebCore::GPURenderPassAttachmentDescriptor::storeAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setStoreAction):
        (WebCore::GPURenderPassAttachmentDescriptor::setTexture):
        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUDevice.cpp.
        (WebCore::GPURenderPassColorAttachmentDescriptor::create):
        (WebCore::GPURenderPassColorAttachmentDescriptor::GPURenderPassColorAttachmentDescriptor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::~GPURenderPassColorAttachmentDescriptor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::clearColor):
        (WebCore::GPURenderPassColorAttachmentDescriptor::setClearColor):
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.cpp.
        (WebCore::GPURenderPassDepthAttachmentDescriptor::create):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::GPURenderPassDepthAttachmentDescriptor):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::~GPURenderPassDepthAttachmentDescriptor):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::clearDepth):
        (WebCore::GPURenderPassDepthAttachmentDescriptor::setClearDepth):
        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPassDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUBuffer.cpp.
        (WebCore::GPURenderPassDescriptor::create):
        (WebCore::GPURenderPassDescriptor::~GPURenderPassDescriptor):
        (WebCore::GPURenderPassDescriptor::depthAttachment):
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.cpp.
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::~GPURenderPipelineColorAttachmentDescriptor):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::GPURenderPipelineColorAttachmentDescriptor):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::pixelFormat):
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::setPixelFormat):
        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPUTexture.h.
        * platform/graphics/gpu/GPURenderPipelineDescriptor.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUDevice.cpp.
        (WebCore::GPURenderPipelineDescriptor::create):
        (WebCore::GPURenderPipelineDescriptor::~GPURenderPipelineDescriptor):
        (WebCore::GPURenderPipelineDescriptor::depthAttachmentPixelFormat):
        (WebCore::GPURenderPipelineDescriptor::setDepthAttachmentPixelFormat):
        (WebCore::GPURenderPipelineDescriptor::setVertexFunction):
        (WebCore::GPURenderPipelineDescriptor::setFragmentFunction):
        (WebCore::GPURenderPipelineDescriptor::colorAttachments):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.h.
        * platform/graphics/gpu/GPURenderPipelineState.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.cpp.
        (WebCore::GPURenderPipelineState::create):
        (WebCore::GPURenderPipelineState::~GPURenderPipelineState):
        (WebCore::GPURenderPipelineState::label):
        (WebCore::GPURenderPipelineState::setLabel):
        * platform/graphics/gpu/GPURenderPipelineState.h: Copied from Source/WebCore/platform/graphics/gpu/GPULibrary.h.
        * platform/graphics/gpu/GPUTexture.cpp:
        (WebCore::GPUTexture::createFromDrawable):
        (WebCore::GPUTexture::createFromExistingTexture): Deleted.
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/GPUTextureDescriptor.cpp:
        * platform/graphics/gpu/GPUTextureDescriptor.h:

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

        Simple line layout: Paginated content is not painted properly when font overflows line height.
        https://bugs.webkit.org/show_bug.cgi?id=169516

        Reviewed by Antti Koivisto.

        adjustLineIndexForStruts should take the IndexType::First/Last into account
        when searching for the line index in a paginated context.
        This also changes the the computed offset height from m_lineHeight to m_ascent + m_descent
        so that we can find lines with large fonts (but small line height).

        Test: fast/multicol/simple-line-layout-line-index-after-strut.html

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

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

        Add full NSHTTPCookie fidelity to WebCore::Cookie.
        https://bugs.webkit.org/show_bug.cgi?id=169514

        Reviewed by Dean Jackson.

        No new tests (Refactor, no testable behavior change for now).

        * platform/Cookie.h:
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::encode):
        (WebCore::Cookie::decode):
        
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::portVectorFromList):
        (WebCore::portStringFromVector):
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::operator NSHTTPCookie *):
        
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::getRawCookies):

2017-03-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r213764): Async image decoding is disabled for animated images
        https://bugs.webkit.org/show_bug.cgi?id=169529

        Reviewed by Jon Lee.
        
        The change r213764 causes the animated images to be decoded synchronously
        because we were calling frameImageAtIndex() with an empty sizeForDrawing
        but with a valid subsamplingLevel. This call is translated to be synchronous
        image decoding. The fix is get the current image frame without any decoding.
        This is because are sure that in the case of animated image, the current
        image frame can not be deleted.

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

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

        [Readable Streams API] Implement ReadableStreamBYOBRequest respond() (closed stream state)
        https://bugs.webkit.org/show_bug.cgi?id=168781

        Reviewed by Youenn Fablet.

        Implemented ReadableStreamBYOBRequest respond() method in the case of a closed stream.

        Added tests related to respond() method and updated WPT imported tests expectations.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerRespond): Added.
        (readableByteStreamControllerRespondInternal): Added.
        (readableByteStreamControllerRespondInClosedState): Added.
        (readableByteStreamControllerShiftPendingPullInto): Added.
        (readableByteStreamControllerInvalidateBYOBRequest): Added.
        (readableByteStreamControllerCommitPullIntoDescriptor): Added.
        (readableByteStreamControllerConvertPullIntoDescriptor): Added.
        (readableStreamFulfillReadIntoRequest): Added.
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (respond): Implemented.

2017-03-11  Simon Fraser  <simon.fraser@apple.com>

        Fix memory estimate for layers supporting subpixel-antialised text
        https://bugs.webkit.org/show_bug.cgi?id=169507
        rdar://problem/30979337

        Reviewed by Alexey Proskuryakov.

        Deep color layers on iOS use 5 bytes per pixel, layers supporting subpixel-antialiaed 
        text on Mac use 8 bytes per pixel.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::backingStoreBytesPerPixel):

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

        XMLHttpRequest: make setRequestHeader() use `, ` as separator (including a space)
        https://bugs.webkit.org/show_bug.cgi?id=169285

        Reviewed by Sam Weinig.

        Covered by updated tests.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::add): Reverting back to ', '.

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

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        When BitmapImage::draw() is called for a large image, we are going to request async
        image decoding for the native image instead of drawing it. If a lower resolution 
        native image is available for this, it is going to be drawn. Otherwise nothing will
        be drawn. In both cases, a repaint will be scheduled for the image observer. This
        should improve the image first time paint and the scrolling scenarios. It also makes
        the scrolling more responsive by removing the decoding step from the main thread. 
        
        For now we are going to disable the asynchronous image decoding for the webkit test
        runner because drawing the image does not block the page rendering anymore. An image
        can be repainted later when its frame is ready for painting. This can cause a test
        to fail because the webkit test runner may capture an image for the page before painting
        all the images. The asynchronous image decoding can to be explicitly enabled from
        the test page. Once the specs of the image 'async' attribute and 'ready' event is
        approved, this should be revisited. It is important to test what we ship and eventually
        async image decoding should be enabled in the webkit test runner.

        * loader/cache/CachedImage.h: Change the default of LargeImageAsyncDecoding and AnimatedImageAsyncDecoding
        to be false. This change fixes a layout test which creates an CachedImage inside an ImageDocument. The
        CachedImage in this case does not have a loader so getting the values of these options from the settings
        which is false for the DRT/WTR did not happen.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData): ImageSource::hasDecodingQueue() is renamed to ImageSource::hasAsyncDecodingQueue().
        (WebCore::BitmapImage::frameImageAtIndex): Use String::utf8().data() instead of String::characters8().
        (WebCore::BitmapImage::draw): If drawing the current frame is called while it is being
        decoded, draw the current native image if the current frame was decoded but for a 
        different size  and and will not invoke decoding while painting. If the frame is being
        decoded and there isn't a decoded frame, return without drawing but set a flag that
        that this image needs a repaint.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImage): Renaming a function.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImage): Ditto.
        (WebCore::BitmapImage::internalStartAnimation): Use String::utf8().data() instead of String::characters8().
        (WebCore::BitmapImage::advanceAnimation): Ditto.
        (WebCore::BitmapImage::internalAdvanceAnimation): Ditto.
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Now this callback can be
        called form the ImageFrameCache when finishing a frame of an animated image or the
        frame of a large image. For large images, we need to call CachedImage::changedInRect()
        if this image needs a repaint. If the decoding queue is idle, we should close it.
        (WebCore::BitmapImage::isLargeImageAsyncDecodingRequired): Deleted. Function was renamed.
        (WebCore::BitmapImage::isAnimatedImageAsyncDecodingRequired): Deleted. Ditto.
        * platform/graphics/BitmapImage.h:

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::~ImageFrameCache): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageFrameCache::decodingQueue): Change the QNS of the decoding thread to be WorkQueue::QOS::Default.
        WorkQueue::QOS::UserInteractive causes the scrolling thread to preempted  which can make the scrolling choppy.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Ditto.
        (WebCore::ImageFrameCache::isAsyncDecodingQueueIdle): A helper function to tell whether the decoding thread is idle.
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::hasAsyncDecodingQueue): Rename this function to be consistent with the rest of the functions.
        (WebCore::ImageFrameCache::hasDecodingQueue): Deleted.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::shouldUseAsyncDecoding): Renaming a function. Change the heuristic for large images be
        a little bigger than the heuristic for animated images.
        (WebCore::ImageSource::isAsyncDecodingRequired): Deleted.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::hasAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageSource::isAsyncDecodingQueueIdle): A wrapper for ImageFrameCache::isAsyncDecodingQueueIdle().
        (WebCore::ImageSource::hasDecodingQueue): Deleted.
        
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex): CGImageSourceCreateThumbnailAtIndex() returns a CGImage with
        the image native size regardless of the subsamplingLevel unless kCGImageSourceSubsampleFactor is passed. Here
        we are trying to see which size is smaller: the image native size or the sizeForDrawing. If we want a CGImage
        with the image native size, sizeForDrawing will not passed. So we need to get the image native size with the
        default subsampling and then compare it with sizeForDrawing.

2017-03-11  Jon Lee  <jonlee@apple.com>

        WebGPU prototype - Front-End
        https://bugs.webkit.org/show_bug.cgi?id=167952

        Reviewed by Dean Jackson.

        This patch adds all of the relevant front-end files, and builds successfully when
        ENABLE(WEBGPU) is off. For the back-end components that are not yet
        implemented, a stub was added with a FIXME.

        * DerivedSources.make: Add all the new IDL files.
        * WebCore.xcodeproj/project.pbxproj: New IDL, front-end and generated files.

        JS custom bindings.
        * bindings/js/JSDocumentCustom.cpp: Add WebGPU clause for getCSSCanvasContext.
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSWebGPURenderPassAttachmentDescriptorCustom.cpp: Added.
        * bindings/js/JSWebGPURenderingContextCustom.cpp: Added.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::isWebGPUType):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::isGPU):
        (WebCore::HTMLCanvasElement::getContextWebGPU): For release builds, switch to ASSERT_UNUSED.
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isGPU):

        .cpp, .h, .idl files, wrapped in WEBGPU conditional, and enabled at runtime.
        * html/canvas/WebGPUBuffer:
        * html/canvas/WebGPUCommandBuffer:
        * html/canvas/WebGPUCommandQueue:
        * html/canvas/WebGPUDepthStencilDescriptor:
        * html/canvas/WebGPUDepthStencilState:
        * html/canvas/WebGPUDrawable:
        * html/canvas/WebGPUEnums:
        * html/canvas/WebGPUFunction:
        * html/canvas/WebGPULibrary:
        * html/canvas/WebGPUObject (no IDL):
        * html/canvas/WebGPURenderCommandEncoder:
        * html/canvas/WebGPURenderPassAttachmentDescriptor:
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor:
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor:
        * html/canvas/WebGPURenderPassDescriptor:
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor:
        * html/canvas/WebGPURenderPipelineDescriptor:
        * html/canvas/WebGPURenderPipelineState:
        * html/canvas/WebGPURenderingContext:
        * html/canvas/WebGPUTexture:
        * html/canvas/WebGPUTextureDescriptor:  Add stubs.

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

        Cleanup "addCookie" and its sole user.
        https://bugs.webkit.org/show_bug.cgi?id=169486

        Reviewed by Brian Burg.

        No new tests (Refactor, no behavior change)

        * WebCore.xcodeproj/project.pbxproj:

        * loader/CookieJar.cpp:
        (WebCore::addCookie): Deleted.
        * loader/CookieJar.h:

        * platform/Cookie.h:
        (WebCore::Cookie::Cookie):
        (WebCore::CookieHash::hash):
        (WebCore::CookieHash::equal):
        (WebCore::Cookie::encode):
        (WebCore::Cookie::decode):

        * platform/CookiesStrategy.h:

        * platform/network/NetworkStorageSession.h:

        * platform/network/PlatformCookieJar.h:

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::addCookie): Deleted.

        * platform/network/cocoa/CookieCocoa.mm: Copied from Source/WebCore/loader/CookieJar.h.
        (WebCore::Cookie::operator NSHTTPCookie *):

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm: Copied from Source/WebCore/loader/CookieJar.h.
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::nsCookieStorage):

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::addCookie): Deleted.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteAllCookiesModifiedSince):
        (WebCore::addCookie): Deleted.
        (WebCore::cookieStorage): Deleted.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::toSoupCookie): Deleted.
        (WebCore::addCookie): Deleted.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::toSoupCookie):
        (WebCore::NetworkStorageSession::setCookies):

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

        Fix watch and tv builds after r213294
        https://bugs.webkit.org/show_bug.cgi?id=169508

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2017-03-10  Dave Hyatt  <hyatt@apple.com>

        Percentage constrained images shrinking inside blocks inside nested flex boxes
        https://bugs.webkit.org/show_bug.cgi?id=169438

        Reviewed by Dean Jackson.

        Added new test in fast/hidpi.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeChildPreferredLogicalWidths):
        Make sure to clear out flexbox override sizes when computing preferred logical widths,
        since they should not ever influence the preferred size.

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

        Move libwebrtc backend to using tracks
        https://bugs.webkit.org/show_bug.cgi?id=169472

        Reviewed by Alex Christensen.

        Covered by current test sets.

        This change allows to move away from streams and use more tracks.
        This allows future better alignment with the spec and better implementation of sender/receover/transceiver.

        Small refactoring to use more Ref<> in WebRTC track-based code.
        Added a notifyAddedTrack to notify the backend that a track was added.
        For libwebrtc, this allows calling AddTrack before making the offer.
        Updated mock libwebrtc backend accordingly.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::replaceTrack):
        (WebCore::MediaEndpointPeerConnection::replaceTrackTask):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::notifyAddedTrack):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::replaceTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::RTCRtpSender):
        (WebCore::RTCRtpSender::setTrack):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        (WebCore::LibWebRTCPeerConnectionBackend::notifyAddedTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::AddTrack):
        (WebCore::MockLibWebRTCPeerConnection::RemoveTrack):
        (WebCore::MockLibWebRTCPeerConnection::CreateOffer):
        (WebCore::MockLibWebRTCPeerConnection::CreateAnswer):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockRtpSender::MockRtpSender):
        (WebCore::MockRtpSender::ssrc):
        (WebCore::MockRtpSender::media_type):
        (WebCore::MockRtpSender::id):
        (WebCore::MockRtpSender::stream_ids):
        (WebCore::MockRtpSender::GetParameters):
        (WebCore::MockRtpSender::SetParameters):
        (WebCore::MockRtpSender::GetDtmfSender):

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

        Simple line layout: Check how many orphans needed on the current page before breaking.
        https://bugs.webkit.org/show_bug.cgi?id=169477

        Reviewed by Antti Koivisto.

        Before breaking for the widows we actually need to check for orphans first.

        Test: fast/multicol/simple-line-layout-orphans-and-widows.html

        * rendering/SimpleLineLayoutPagination.cpp:
        (WebCore::SimpleLineLayout::computeLineBreakIndex):
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination):

2017-03-10  Dean Jackson  <dino@apple.com>

        WebGPU: Backend - Textures and TextureDescriptors
        https://bugs.webkit.org/show_bug.cgi?id=169365
        <rdar://problem/30928716>

        Reviewed by Jon Lee with help from Anders Carlsson.

        Backend implementation of textures for WebGPU, which adds
        the GPUTexture and GPUTextureDescriptor classes, as well
        as a creation method on GPUDevice.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/GPUTextureDescriptorMetal.mm: Added.
        (WebCore::GPUTextureDescriptor::GPUTextureDescriptor):
        (WebCore::GPUTextureDescriptor::width):
        (WebCore::GPUTextureDescriptor::setWidth):
        (WebCore::GPUTextureDescriptor::height):
        (WebCore::GPUTextureDescriptor::setHeight):
        (WebCore::GPUTextureDescriptor::sampleCount):
        (WebCore::GPUTextureDescriptor::setSampleCount):
        (WebCore::GPUTextureDescriptor::textureType):
        (WebCore::GPUTextureDescriptor::setTextureType):
        (WebCore::GPUTextureDescriptor::storageMode):
        (WebCore::GPUTextureDescriptor::setStorageMode):
        (WebCore::GPUTextureDescriptor::usage):
        (WebCore::GPUTextureDescriptor::setUsage):
        (WebCore::GPUTextureDescriptor::platformTextureDescriptor):
        * platform/graphics/cocoa/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture):
        (WebCore::GPUTexture::width):
        (WebCore::GPUTexture::height):
        (WebCore::GPUTexture::platformTexture):
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createTexture):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUTexture.cpp:
        (WebCore::GPUTexture::create):
        (WebCore::GPUTexture::createFromExistingTexture):
        (WebCore::GPUTexture::~GPUTexture):
        (WebCore::GPUTexture::width):
        (WebCore::GPUTexture::height):
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/GPUTextureDescriptor.cpp:
        (WebCore::GPUTextureDescriptor::create):
        (WebCore::GPUTextureDescriptor::~GPUTextureDescriptor):
        (WebCore::GPUTextureDescriptor::width):
        (WebCore::GPUTextureDescriptor::setWidth):
        (WebCore::GPUTextureDescriptor::height):
        (WebCore::GPUTextureDescriptor::setHeight):
        (WebCore::GPUTextureDescriptor::sampleCount):
        (WebCore::GPUTextureDescriptor::setSampleCount):
        (WebCore::GPUTextureDescriptor::textureType):
        (WebCore::GPUTextureDescriptor::setTextureType):
        (WebCore::GPUTextureDescriptor::storageMode):
        (WebCore::GPUTextureDescriptor::setStorageMode):
        (WebCore::GPUTextureDescriptor::usage):
        (WebCore::GPUTextureDescriptor::setUsage):
        * platform/graphics/gpu/GPUTextureDescriptor.h:

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

        [Win] Scrollbars buttons have incorrect size in HiDPI.
        https://bugs.webkit.org/show_bug.cgi?id=169463

        Reviewed by Alex Christensen.

        There seems to be a bug in DrawThemeBackground when the device context is scaled.
        We can work around this by scaling the drawing rectangle instead.
 
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintButton):

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

        Simple line layout: Oprhan lines with visual overflow does not work properly.
        https://bugs.webkit.org/show_bug.cgi?id=169409

        Reviewed by Antti Koivisto.

        Add visual overflow checking for block strut. This logic is copied from RenderBlockFlow::adjustLinePositionForPagination.

        Covered by existing test.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeOverflow):
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutPagination.cpp:
        (WebCore::SimpleLineLayout::setPageBreakForLine):

2017-03-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Layer content blurry with nested perspective and transforms
        https://bugs.webkit.org/show_bug.cgi?id=169457
        rdar://problem/29879484

        Reviewed by Tim Horton.

        We set rasterizationScale on CALayers to the same values as contentsScale, to
        avoid blurry layers when CA rasterizes, which often happens with nested perspective
        transforms.
        
        However, in UI-side compositing, if the page is not zoomed, we never applied the
        rasterizationScale in the UI process. This happened because the PlatformCALayerRemote
        constructor set m_properties.contentsScale, but did not set the dirty bit that
        triggers the application of contentsScale and rasterizationScale in RemoteLayerTreePropertyApplier.
        The fix is to set this dirty bit.
        
        The rest of the changes are for testing. Internals now exposes layerIDForElement()
        for returns an internal (non-stable-across-loads) layerID, which can be passed
        to UIScriptController.propertiesOfLayerWithID() in the UI process, which inspects
        the built layer (UIView) hierarchy. propertiesOfLayerWithID() returns a dictionary
        which the test can dump as JSON, or pull values out of.

        A few #pragma once cleanups also.

        Tests: compositing/ios/basic-layer-properties.html
               compositing/ios/rasterization-scale.html

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

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

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

        Suspect this is the cause of a large memory regression
        (Requested by jonlee_ on #webkit).

        Reverted changeset:

        "Enable async image decoding for large images"
        https://bugs.webkit.org/show_bug.cgi?id=165039
        http://trac.webkit.org/changeset/213618

2017-03-10  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-10  Antti Koivisto  <antti@apple.com>

        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html is unreliable
        https://bugs.webkit.org/show_bug.cgi?id=169465

        Reviewed by Zalan Bujtas.

        It shows all subtests passing but that is a bug. We don't even support all the unit types.
        The test occasionally fails when reloading, that failing results are actually the correct ones.

        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::SizesAttributeParser):

            Ensure we have correct size for the iframe before parsing 'sizes' attribute values. The interpretation of
            these may depend on the iframe dimensions.

2017-03-10  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.

        Add some debugging in the hope of understanding why airplay-button.html fails once a day on bots.

        * 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-03-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213633.

        This change caused LayoutTest imported/w3c/web-platform-
        tests/html/semantics/embedded-content/the-img-
        element/sizes/parse-a-sizes-attribute.html to become a flaky
        failure.

        Reverted changeset:

        "Loading in-body stylesheets should not block rendering of
        elements before them"
        https://bugs.webkit.org/show_bug.cgi?id=169345
        http://trac.webkit.org/changeset/213633

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

        Fix CMake build

        * PlatformMac.cmake:

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

        Fix GTK build after r213696

        * PlatformMac.cmake:

2017-03-09  Brian Nicholson  <bnicholson@mozilla.com> and Alex Christensen  <achristensen@webkit.org>

        Expose public APIs for content filters
        https://bugs.webkit.org/show_bug.cgi?id=150479

        Reviewed by Brady Eidson and Geoff Garen.

        * English.lproj/Localizable.strings:

2017-03-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Add XHR breakpoints UI
        https://bugs.webkit.org/show_bug.cgi?id=168763
        <rdar://problem/30952439>

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom-debugger/xhr-breakpoints.html

        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::discardBindings):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        Don't break for XHRs when breakpoints are disabled.

2017-03-09  Michael Saboff  <msaboff@apple.com>

        Add plumbing to WebProcess to enable JavaScriptCore configuration and logging
        https://bugs.webkit.org/show_bug.cgi?id=169387

        Reviewed by Filip Pizlo.

        Added a forwarding header file for JavScriptCore/runtime/ConfigFile.h.

        * ForwardingHeaders/runtime/ConfigFile.h: Added.

2017-03-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove statistics data as part of full website data removal
        https://bugs.webkit.org/show_bug.cgi?id=169448

        Reviewed by Alex Christensen.

        Test: http/tests/loading/resourceLoadStatistics/clear-in-memory-and-persistent-store.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::clearInMemoryAndPersistentStore):
            The version of this function that takes a modifiedSince parameter
            checks if it is equal to or less than the start of the Unix epoch.
            If so, it clears the store. This is to support clear all website
            data.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent):
        (WebCore::ResourceLoadStatisticsStore::setWritePersistentStoreCallback):
        * loader/ResourceLoadStatisticsStore.h:
            Added m_writePersistentStoreHandler, a setter for it, and
            ResourceLoadStatisticsStore::clearInMemoryAndPersistent().

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

        Only consider autoplay interference in the first 10 seconds of playback.
        https://bugs.webkit.org/show_bug.cgi?id=169455

        Reviewed by Alex Christensen.

        If the media duration is relatively long, say, 10 minutes, and you pause 5 minutes in, that's
        probably not a strong indication users may not want auto-play. This patch limits interference
        events to the first 10 seconds of automatic playback.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::userDidInterfereWithAutoplay):
        (WebCore::HTMLMediaElement::setPlaybackWithoutUserGesture):
        (WebCore::HTMLMediaElement::pageMutedStateDidChange):
        * html/HTMLMediaElement.h:

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

        Add WKURLSchemeHandler API for handling custom protocols.
        https://bugs.webkit.org/show_bug.cgi?id=169422

        Reviewed by Tim Horton.

        * platform/URLParser.cpp:
        (WebCore::URLParser::maybeCanonicalizeScheme):
        (WebCore::URLParser::isSpecialScheme):
        * platform/URLParser.h:

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

        WebGPU: Backend - Buffers
        https://bugs.webkit.org/show_bug.cgi?id=169451
        <rdar://problem/30959168>

        Reviewed by Tim Horton.

        Implement the backend for GPUBuffer, which
        represents a chunk of memory that can be used
        by the GPU. You create one using an ArrayBufferView.

        WebKit API Test: GPUBuffer.mm

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::length):
        (WebCore::GPUBuffer::contents):
        (WebCore::GPUBuffer::platformBuffer):
        * platform/graphics/gpu/GPUBuffer.cpp:
        (WebCore::GPUBuffer::create):
        (WebCore::GPUBuffer::~GPUBuffer):
        (WebCore::GPUBuffer::length):
        (WebCore::GPUBuffer::contents):
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createBufferFromData):
        * platform/graphics/gpu/GPUDevice.h:

2017-03-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show HTTP protocol version and other Network Load Metrics (IP Address, Priority, Connection ID)
        https://bugs.webkit.org/show_bug.cgi?id=29687
        <rdar://problem/19281586>

        Reviewed by Matt Baker and Brian Burg.

        Test: http/tests/inspector/network/resource-metrics.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::toProtocol):
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        Send metrics at didFinishLoading time, we do not have all of
        these at didReceiveResponse time.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishLoading):
        * inspector/InspectorNetworkAgent.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        Include or pass on NetworkLoadMetrics to Web Inspector.

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::operator==):
        (WebCore::NetworkLoadMetrics::encode):
        (WebCore::NetworkLoadMetrics::decode):
        Add new optional metrics properties.

        (WTF::Persistence::Coder<std::optional<WebCore::NetworkLoadPriority>>::encode):
        (WTF::Persistence::Coder<std::optional<WebCore::NetworkLoadPriority>>::decode):
        We never encode this but this is needed for the compiler.

        * platform/spi/cocoa/NSURLConnectionSPI.h:
        New SPI for NSURLSessionTaskTransactionMetrics details.

2017-03-09  Anders Carlsson  <andersca@apple.com>

        Use the right conditional.

        * Modules/applepay/ApplePayError.idl:

2017-03-09  Daniel Bates  <dabates@apple.com>

        Guard Credential Management implementation behind a runtime enabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169364
        <rdar://problem/30957425>

        Reviewed by Brent Fulgham.

        Add a runtime enabled feature flag for Credential Management (disabled by default).
        Once we are happy with this feature we can enable the feature by default or remove the
        the runtime enabled feature flag so as to enable it by default.

        * Modules/credentials/BasicCredential.idl: Enable only if the runtime enabled feature flag is
         enabled.
        * Modules/credentials/PasswordCredential.idl: Ditto.
        * Modules/credentials/SiteBoundCredential.idl: Ditto.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCredentialManagementEnabled): Added.
        (WebCore::RuntimeEnabledFeatures::credentialManagementEnabled): Added.

2017-03-09  Anders Carlsson  <andersca@apple.com>

        Add delegate support to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169427
        Part of rdar://problem/28880714.

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:
        Add feature define.

        * DerivedSources.make:
        Add idl files.

        * Modules/applepay/ApplePayError.cpp:
        (WebCore::ApplePayError::create):
        (WebCore::ApplePayError::ApplePayError):
        (WebCore::ApplePayError::~ApplePayError):
        * Modules/applepay/ApplePayError.h:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.h:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.h:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayShippingContactUpdate.h:
        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.h:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        Add new files.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::toPaymentAuthorizationStatus):
        Move this function to the top.

        (WebCore::convertAndValidate):
        Add new convertAndValidate functions.

        (WebCore::ApplePaySession::completeShippingMethodSelection):
        (WebCore::ApplePaySession::completeShippingContactSelection):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        (WebCore::ApplePaySession::completePayment):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePaySession.idl:
        Implement the old functions in terms of the new functions.

        * Modules/applepay/PaymentCoordinator.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

2017-03-09  Yoav Weiss  <yoav@yoav.ws>

        [link preload] Double downloads of preloaded CSS
        https://bugs.webkit.org/show_bug.cgi?id=169274

        Reviewed by Antti Koivisto.

        Avoid reloading link preloads in case of a charset mismatch.

        Charset mismatch can happen for header based preloads, as they are requested before
        the HTML's `<meta charset>` tag is processed. This change makes sure that in those
        cases, we modify the resource's encoding setting instead of reloading it.

        Test: http/tests/preload/single_download_preload_headers.php

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Initialize m_unknownCharset to be the same as the preload flag.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasUnknownEncoding):
        (WebCore::CachedResource::setHasUnknownEncoding):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): In case of a charset
        mismatch, set the encoding of the Resource instead of reloading it if the charset is unknown.

2017-03-09  Jiewen Tan  <jiewen_tan@apple.com>

        Implement PBKDF2 in WebCrypto
        https://bugs.webkit.org/show_bug.cgi?id=143458
        <rdar://problem/27311703>

        Reviewed by Brent Fulgham.

        This patch implements PBKDF2 according to the spec:
        https://www.w3.org/TR/WebCryptoAPI/#pbkdf2. Supported
        operations include deriveKey, deriveBits, importKey and
        getKeyLength.

        Tests: crypto/subtle/ecdh-import-key-derive-pbkdf2-key.html
               crypto/subtle/pbkdf2-derive-bits-malformed-parametrs.html
               crypto/subtle/pbkdf2-import-key-derive-bits.html
               crypto/subtle/pbkdf2-import-key-derive-hmac-key.html
               crypto/subtle/pbkdf2-import-key-malformed-parameters.html
               crypto/subtle/pbkdf2-import-key.html
               crypto/workers/subtle/pbkdf2-import-key-derive-bits.html
               crypto/workers/subtle/pbkdf2-import-key-derive-hmac-key.html
               crypto/workers/subtle/pbkdf2-import-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoKeyCustom.cpp:
        (WebCore::JSCryptoKey::algorithm):
        Added RawKeyAlgorithm.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        A bit of reordering.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        Faked implementation.
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp: Added.
        (WebCore::CryptoAlgorithmPBKDF2::create):
        (WebCore::CryptoAlgorithmPBKDF2::identifier):
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        (WebCore::CryptoAlgorithmPBKDF2::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h: Added.
        * crypto/gnutls/CryptoAlgorithmPBKDF2GnuTLS.cpp: Added.
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/keys/CryptoKeyRaw.cpp: Added.
        (WebCore::CryptoKeyRaw::CryptoKeyRaw):
        (WebCore::CryptoKeyRaw::buildAlgorithm):
        (WebCore::CryptoKeyRaw::exportData):
        * crypto/keys/CryptoKeyRaw.h: Added.
        (WebCore::RawKeyAlgorithm::RawKeyAlgorithm):
        The CryptoKey class for PBKDF2 and later on HKDF.
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp: Added.
        (WebCore::commonCryptoHMACAlgorithm):
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h: Added.
        * crypto/parameters/Pbkdf2Params.idl: Added.

2017-03-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] iOS: long press on play button shows the Copy menu
        https://bugs.webkit.org/show_bug.cgi?id=169355
        <rdar://problem/30928998>

        Reviewed by Dean Jackson.

        Disable built-in UI behavior that shows a magnifier or a copy callout when pressing
        on an element for a long time. These do not make sense for media controls.

        Test: media/modern-media-controls/audio/audio-controls-styles.html

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

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

        [Content Extensions] Introduce if-top-url and unless-top-url
        https://bugs.webkit.org/show_bug.cgi?id=169433

        Reviewed by Brady Eidson.

        In r184116 I added if-domain and unless-domain to control whether a rule applies
        based on the domain of the main document URL.  I'm expanding this by adding if-top-url
        and unless-top-url that run regular expressions on the entire main document URL so that
        example.com/user1content can be distinguished from example.com/user2content.
        To not add to the number of passes we make on the URLs for each load and to maintain JSON
        backwards compatibility, I've made it so that if-top-url and unless-top-url can be used
        instead of if-domain and unless-domain (which continue to work) but the two condition types
        cannot be used together since running regular expressions on the entire main document URL
        is strictly more powerful than checking the domain and subdomains.
        As a minor detail, content extension regexes are by default ASCII-case-insensitive, so I've
        done the same with top URL regexes, adding top-url-filter-is-case-sensitive to mirror the existing
        url-filter-is-case-sensitive if the JSON author decides to make regexes case sensitive.

        Covered by new API tests.

        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        (WebCore::ContentExtensions::ContentExtension::topURLActions):
        (WebCore::ContentExtensions::ContentExtension::cachedConditionedActions): Deleted.
        * contentextensions/ContentExtension.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::addUniversalActionsToDFA):
        (WebCore::ContentExtensions::compileToBytecode):
        We had three copies of compiling to bytecode that were almost the same and would've been made into three copies of the same code.
        I moved them to one helper function that is called three times.
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        Add the new error type for JSON that tries to use if-top-url and unless-top-url with if-domain and unless-domain.
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        Parse the new values if-top-url, unless-top-url, and top-url-filter-is-case-sensitive.
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::~Trigger):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithConditions):
        * contentextensions/DFABytecodeInterpreter.h:

2017-03-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Show individual messages in the content pane for a WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=169011

        Reviewed by Joseph Pecoraro.

        Add walltime parameter.

        No new tests. Tests will be added in a follow up patch.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendWebSocketHandshakeRequest):

2017-03-09  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r213628.

        Use 'size_t' for the function definition to match the header file. If you do not,
        the 32-bit build fails..

        * crypto/gnutls/CryptoAlgorithmECDHGnuTLS.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):

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

        [WK2] Add a UI delegate hook for custom handling of data interaction operations
        https://bugs.webkit.org/show_bug.cgi?id=169430
        <rdar://problem/30954654>

        Reviewed by Tim Horton.

        Ensure that m_documentUnderMouse is properly cleaned up even in the case where no drag operation was performed
        due to the drop bailing at the client layer.

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

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

        Let clients control autoplay quirks with website policies.
        https://bugs.webkit.org/show_bug.cgi?id=169390

        Reviewed by Wenson Hsieh.

        Added API tests.

        Many sites incorrectly assume media will start off playing and display a pause button from the
        start. We can trick many of these sites into updating their controls by sending a "pause"
        event when we prevent a media element from playing.

        We don't want this to become standard web behavior, however, since ultimately sites should adapt
        to the new behavior. This patch lets clients decide which limited set of sites gets to use auto-play
        quirks.

        * html/HTMLMediaElement.cpp:
        (WebCore::needsAutoplayPlayPauseEventsQuirk):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::allowsAutoplayQuirks):
        (WebCore::DocumentLoader::setAllowsAutoplayQuirks):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Make the VM Traps mechanism non-polling for the DFG and FTL.
        https://bugs.webkit.org/show_bug.cgi?id=168920
        <rdar://problem/30738588>

        Reviewed by Filip Pizlo.

        No new tests needed.  This is covered by existing tests.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):

2017-03-08  Dean Jackson  <dino@apple.com>

        WebGPU: Backend - Library and Functions
        https://bugs.webkit.org/show_bug.cgi?id=169371
        <rdar://problem/30928792>

        Reviewed by Tim Horton.

        Implement the backends for GPULibrary and GPUFunction.
        A GPULibrary is created from a GPUDevice, given some
        shader source code. You can then extract the GPUFunctions
        from the library.

        WebKitAPITests: GPULibrary and GPUFunction.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/GPUFunctionMetal.mm:
        (WebCore::GPUFunction::GPUFunction):
        (WebCore::GPUFunction::name):
        (WebCore::GPUFunction::platformFunction):
        * platform/graphics/cocoa/GPULibraryMetal.mm:
        (WebCore::GPULibrary::GPULibrary):
        (WebCore::GPULibrary::label):
        (WebCore::GPULibrary::setLabel):
        (WebCore::GPULibrary::functionNames):
        (WebCore::GPULibrary::platformLibrary):
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::createLibrary):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUFunction.cpp:
        (WebCore::GPUFunction::create):
        (WebCore::GPUFunction::~GPUFunction):
        (WebCore::GPUFunction::GPUFunction):
        (WebCore::GPUFunction::name):
        * platform/graphics/gpu/GPUFunction.h:
        * platform/graphics/gpu/GPULibrary.cpp:
        (WebCore::GPULibrary::create):
        (WebCore::GPULibrary::~GPULibrary):
        (WebCore::GPULibrary::label):
        (WebCore::GPULibrary::setLabel):
        (WebCore::GPULibrary::functionNames):
        (WebCore::GPULibrary::functionWithName):
        * platform/graphics/gpu/GPULibrary.h:

2017-03-09  Chris Dumez  <cdumez@apple.com>

        Align Document.elementFromPoint() with the CSSOM specification
        https://bugs.webkit.org/show_bug.cgi?id=169403

        Reviewed by Sam Weinig.

        Align Document.elementFromPoint() with the CSSOM specification:
        - https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface

        In particular, the parameters should be mandatory and of type double.

        The parameters are mandatory in both Firefox and Chrome already. Parameters
        are finite floating point in Firefox and integers in Chrome.

        Test: fast/dom/elementFromPoint-parameters.html

        * dom/DocumentOrShadowRoot.idl:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::elementFromPoint):
        * dom/TreeScope.h:

2017-03-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Fullscreen controls are difficult to drag around
        https://bugs.webkit.org/show_bug.cgi?id=169412
        <rdar://problem/30931892>

        Reviewed by Eric Carlson.

        Up until now, we would simply check that the event target when attempting to
        initiate a drag would be the controls bar and not any of its children. This
        was not so great as this would encompass also a large margin around the left,
        center and right button containers as well as the time labels. We now check
        that the event target is anything but an interactive element (<button> or <input>).

        The existing test at media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-drag.html
        has been updated to initiate dragging right between the rewind and play/pause button,
        which would fail prior to this patch since this would have hit-tested within the center
        button container and thus prevent dragging.

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen button.volume-down):
        (.media-controls.mac.fullscreen button.volume-up):
        (.media-controls.mac.fullscreen button.rewind):
        (.media-controls.mac.fullscreen button.play-pause):
        (.media-controls.mac.fullscreen button.forward):
        (.media-controls.mac.fullscreen .buttons-container.right button):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype._handleMousedown):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline > .controls-bar button):
        * Modules/modern-media-controls/controls/macos-media-controls.css:
        (.media-controls.mac > .controls-bar button):

2017-03-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls are not visible in fullscreen without the controls attribute
        https://bugs.webkit.org/show_bug.cgi?id=169411
        <rdar://problem/30931724>

        Reviewed by Eric Carlson.

        Ensure we show controls in fullscreen in the absence of the controls attribute.

        Tests: media/modern-media-controls/controls-visibility-support/controls-visibility-support-fullscreen-on-parent-element.html
               media/modern-media-controls/controls-visibility-support/controls-visibility-support-fullscreen-on-video.html

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get mediaEvents):
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):

2017-03-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add top level pagination support.
        https://bugs.webkit.org/show_bug.cgi?id=169410
        <rdar://problem/28536227>

        Reviewed by Antti Koivisto.

        This patch enables top level pagination for simple line layout.

        Covered by existing tests.

        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutStateForPagination): Pagination flag needs to be set before calling pushLayoutStateForCurrentFlowThread.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutCoverage.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/SimpleLineLayoutPagination.cpp:
        (WebCore::SimpleLineLayout::computeLineTopAndBottomWithOverflow): Matching normal line layout values.
        (WebCore::SimpleLineLayout::setPageBreakForLine): Logic here matches RenderBlockFlow::adjustLinePositionForPagination

2017-03-09  Tomas Popela  <tpopela@redhat.com>

        [GStreamer][MSE] Fix 'comparison between signed and unsigned integer
        expressions' warning

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::flush):

2017-03-08  Per Arne Vollan  <pvollan@apple.com>

        Implement stroke-width CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=169273

        Reviewed by Simon Fraser.

        Support setting text stroke width using the CSS property stroke-width, see https://drafts.fxtf.org/paint/.
        Text stroke width can currently be set with the -webkit-text-stroke-width property. To make sure this still
        works, I added a check to determine if the stroke-width property has been explicitly set. If it has not been
        set, we fall back to the value of the -webkit-text-stroke-width property.

        Tests: fast/css/stroke-width-percent.html
               fast/css/stroke-width.html

        * css/CSSProperties.json:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueStrokeWidth):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextStrokeWidth):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeOverflow):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::decorationColor):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        (WebCore::computeTextSelectionPaintStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::computedTextStrokeWidth):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setHasExplicitlySetStrokeWidth):
        (WebCore::RenderStyle::hasExplicitlySetStrokeWidth):
        (WebCore::RenderStyle::setHasExplicitlySetWebKitTextStrokeWidth):
        (WebCore::RenderStyle::hasExplicitlySetWebKitTextStrokeWidth):
        (WebCore::RenderStyle::InheritedFlags::operator==):

2017-03-09  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-08  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] iOS: Live Broadcast video shows scrubber with 00:00 duration until paused
        https://bugs.webkit.org/show_bug.cgi?id=169374
        <rdar://problem/30063273>

        Reviewed by Dean Jackson.

        We need to make sure we update the controls layout when they come back from being hidden, so promote
        that functionality from MacOSInlineMediaControls to MediaControls so that iOS can pick that behavior
        up.

        Test: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-status-label-enabled-hidden-controls-bar.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.controlsBarVisibilityDidChange): Deleted.
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.controlsBarVisibilityDidChange):

2017-03-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Implement SubtleCrypto::DeriveKey method
        https://bugs.webkit.org/show_bug.cgi?id=169386
        <rdar://problem/23789585>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It implements SubtleCrypto::DeriveKey method according to the spec:
        https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-deriveKey.
        2. It implements getKeyLength operations for AES-CBC, AES-KW, AES-CFB,
        AES-GCM, and HMAC, which is needed by the SubtleCrypto::DeriveKey method.
        3. It enables ECDH DeriveKey operation.
        4. It replaces unigned long with size_t in all the crypto codes.

        Tests: crypto/subtle/derive-key-malformed-parameters.html
               crypto/subtle/ecdh-import-key-derive-aes-key.html
               crypto/subtle/ecdh-import-key-derive-hmac-key-custom-length.html
               crypto/subtle/unwrap-key-malformed-parameters.html
               crypto/subtle/wrap-key-malformed-parameters.html
               crypto/workers/subtle/ecdh-import-key-derive-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        (WebCore::jsSubtleCryptoFunctionSignPromise):
        (WebCore::jsSubtleCryptoFunctionVerifyPromise):
        (WebCore::jsSubtleCryptoFunctionDigestPromise):
        (WebCore::jsSubtleCryptoFunctionDeriveKeyPromise):
        (WebCore::jsSubtleCryptoFunctionDeriveBitsPromise):
        Remove unnecessary return statement from callbacks.
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::getKeyLength):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::generateKey):
        (WebCore::CryptoAlgorithmAES_CFB::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::generateKey):
        (WebCore::CryptoAlgorithmAES_GCM::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        (WebCore::CryptoAlgorithmAES_KW::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::getKeyLength):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::getKeyLengthFromHash):
        (WebCore::CryptoKeyHMAC::generate):
        (WebCore::CryptoKeyHMAC::getKeyLength):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/mac/CryptoAlgorithmECDHMac.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/parameters/AesKeyParams.idl: Renamed from Source/WebCore/crypto/parameters/AesKeyGenParams.idl.
        * crypto/parameters/CryptoAlgorithmAesKeyParams.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmAesKeyGenParams.h.
        Rename AesKeyGenParams to AesKeyParams to represent a unified dictionary for AesKeyGenParams and AesDerivedKeyParams.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:

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

        Add plumbing for WebCore to notify WebKit2 when an edit drag has concluded
        https://bugs.webkit.org/show_bug.cgi?id=169392
        <rdar://problem/30882974>

        Reviewed by Tim Horton.

        Add DragClient::didConcludeEditDrag and invoke it after performing an edit drag in
        DragController::performDragOperation.

        * page/DragClient.h:
        (WebCore::DragClient::didConcludeEditDrag):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):

2017-03-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Add DOM breakpoints UI for node/subtree modification events
        https://bugs.webkit.org/show_bug.cgi?id=168101

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom-debugger/dom-breakpoints.html

        * inspector/InspectorDOMAgent.h:
        Removed declarations for undefined member functions.

        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::mainFrameDOMContentLoaded):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        Check that DebuggerAgent breakpoints are active before breaking.
        (WebCore::InspectorDOMDebuggerAgent::clear): Deleted.
        Replaced by call to discardBindings.
        * inspector/InspectorDOMDebuggerAgent.h:

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        DOMDebugger agent needs to discard bindings when the main frame navigates.

2017-03-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Implement ECDH DeriveBits operation
        https://bugs.webkit.org/show_bug.cgi?id=169319
        <rdar://problem/23789585>

        Reviewed by Brent Fulgham.

        This patch implements DeriveBits operation of ECDH according to the spec:
        https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations.

        Tests: crypto/subtle/derive-bits-malformed-parameters.html
               crypto/subtle/ecdh-derive-bits-malformed-parametrs.html
               crypto/subtle/ecdh-generate-key-derive-bits.html
               crypto/subtle/ecdh-import-key-derive-bits-custom-length.html
               crypto/subtle/ecdh-import-key-derive-bits-null-length.html
               crypto/workers/subtle/ecdh-import-key-derive-bits.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionDeriveKeyPromise):
        (WebCore::jsSubtleCryptoFunctionDeriveBitsPromise):
        (WebCore::JSSubtleCrypto::generateKey):
        Reorder a bit of the functions.
        * crypto/CommonCryptoUtilities.h:
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::deriveBits):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/gnutls/CryptoAlgorithmECDHGnuTLS.cpp: Added.
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/mac/CryptoAlgorithmECDHMac.cpp: Added.
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/parameters/CryptoAlgorithmEcdhKeyDeriveParams.h: Added.
        * crypto/parameters/EcdhKeyDeriveParams.idl: Added.

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

        Resource Load Statistics: Communicate to the network process which domains to partition
        https://bugs.webkit.org/show_bug.cgi?id=169322
        <rdar://problem/30768921>

        Reviewed by Alex Christensen.

        Test: http/tests/loading/resourceLoadStatistics/partitioned-cookies-with-and-without-user-interaction.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now calls ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler()
            to tell the network process the domain has got user interaction.
        (WebCore::ResourceLoadObserver::logUserInteraction):
            Now calls ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler()
            to tell the network process the domain has got user interaction.
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler):
            To allow TestRunner to set a domain for which
            partitioning should be applied.
        (WebCore::ResourceLoadObserver::primaryDomain):
            New overloaded convenience function.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now bootstraps the network process' set of known domains to
            partition cookies for.
        (WebCore::ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback):
        (WebCore::ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler):
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction):
            Now tells the network process to start partitioning again
            when user interaction ages out.
        * loader/ResourceLoadStatisticsStore.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::shouldPartitionCookiesForHost):
        (WebCore::NetworkStorageSession::setShouldPartitionCookiesForHosts):

2017-03-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should be able to see where Resources came from (Memory Cache, Disk Cache)
        https://bugs.webkit.org/show_bug.cgi?id=164892
        <rdar://problem/29320562>

        Reviewed by Brian Burg.

        Test: http/tests/inspector/network/resource-response-source-disk-cache.html
              http/tests/inspector/network/resource-response-source-memory-cache.html
              http/tests/inspector/network/resource-response-source-network.html

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setSource): Deleted.
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::setSource):
        Make Source mutable to allow it to be set in const methods.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        Set the Response source after a successful memory cache validation
        as early as possible so that future copies have up to date info.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::responseSource):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorNetworkAgent::markResourceAsCached): Deleted.
        Eliminate this "markResourceAsCached" path.
        Update Response to include required source parameter instead of
        optional fromDiskCache parameter.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::markResourceAsCached): Deleted.
        * inspector/InspectorNetworkAgent.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        Eliminate this "markResourceAsCached" call because the later delegate
        messages will include this information.

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

        Drop support for non-standard document.all.tags()
        https://bugs.webkit.org/show_bug.cgi?id=169337

        Reviewed by Sam Weinig.

        Drop support for non-standard document.all.tags(). It is not part of the specification:
        - https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlallcollection-interface

        It is not supported by Firefox and its support was dropped from Chrome back in early 2014:
        - https://src.chromium.org/viewvc/blink?view=revision&revision=166870

        No new tests, updated existing test.

        * html/HTMLAllCollection.cpp:
        * html/HTMLAllCollection.h:
        * html/HTMLAllCollection.idl:

2017-03-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Enable async image decoding for large images
        https://bugs.webkit.org/show_bug.cgi?id=165039

        Reviewed by Simon Fraser.

        Once FrameView finishes flushing compositing, it will request all its
        images, which intersect with the tileCoverageRect (aka the futureRect)
        of the  TileController, to start asynchronously decoding their image frames.
        This should improve the image first time paint and the scrolling scenarios.
        It also makes the scrolling more responsive by removing the decoding step
        from the main thread. 
        
        For now we are going to disable the asynchronous image decoding for the
        webkit test runner because drawing the image does not block the page rendering
        anymore. An image can be repainted later when its frame is ready for painting.
        This can cause a test to fail because the webkit test runner may capture
        an image for the page before painting all the images. The asynchronous image
        decoding can to be explicitly enabled from the test page. Once the specs
        of the image 'async' attribute and 'ready' event is approved, this should
        be revisited. It is important to test what we ship and eventually async
        image decoding should be enabled in the webkit test runner.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didAttachRenderers):
        (WebCore::HTMLImageElement::willDetachRenderers):
        Register/unregister the renderer of the HTMLImageElement for async image decoding
        from the RenderView. I followed what HTMLMediaElement to registerForVisibleInViewportCallback().
        * html/HTMLImageElement.h:
        
        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateForThisFrame): For all the images inside
        the  tileCoverageRect of the TileController, request async image decoding.
        (WebCore::FrameView::applyRecursivelyWithAbsoluteRect): Request the async image decoding for the
        the images inside this FrameView and then recursively do the same thing for all sub FrameViews.
        (WebCore::FrameView::requestAsyncDecodingForImagesInAbsoluteRect): Calls the RenderView to
        make the request.
        (WebCore::FrameView::requestAsyncDecodingForImagesInAbsoluteRectIncludingSubframes): Calls
        applyRecursivelyWithAbsoluteRect giving an apply lambda which calls requestAsyncDecodingForImagesInAbsoluteRect.
        * page/FrameView.h:

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData): ImageSource::hasDecodingQueue() is renamed to ImageSource::hasAsyncDecodingQueue().
        (WebCore::BitmapImage::dataChanged): Use String::utf8().data() instead of String::characters8().
        (WebCore::BitmapImage::draw): If drawing the current frame is called while it is being
        decoded, draw the the image if the current frame was decoded but for a different size 
        and and will not invoke decoding while painting. If the frame is being decoded and there
        isn't a decoded frame, return without drawing but set a flag that that this image needs
        a repaint.
        (WebCore::BitmapImage::internalStartAnimation): Use String::utf8().data() instead of String::characters8().
        (WebCore::BitmapImage::advanceAnimation): Ditto.
        (WebCore::BitmapImage::internalAdvanceAnimation): Ditto.
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Now this callback can be
        called form the ImageFrameCache when finishing a frame of an animated image or the
        frame of a large image. For large images, we need to call CachedImage::changedInRect()
        if this image needs a repaint. If the decoding queue is idle, we should close it.
        (WebCore::BitmapImage::requestAsyncDecoding): This is called form 
        RenderView::requestAsyncDecodingForImagesInRect().
        * platform/graphics/BitmapImage.h:

        * platform/graphics/Image.h:
        (WebCore::Image::requestAsyncDecoding): Add the default implementation of a virtual function.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::~ImageFrameCache): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageFrameCache::decodingQueue): Change the QNS of the decoding thread to be WorkQueue::QOS::Default.
        WorkQueue::QOS::UserInteractive causes the scrolling thread to preempted  which can make the scrolling choppy.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Ditto.
        (WebCore::ImageFrameCache::isAsyncDecodingQueueIdle): A helper function to tell whether the decoding thread is idle.
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::hasAsyncDecodingQueue): Rename this function to be consistent with the rest of the functions.
        (WebCore::ImageFrameCache::hasDecodingQueue): Deleted.

        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::hasAsyncDecodingQueue): hasDecodingQueue() was renamed to hasAsyncDecodingQueue().
        (WebCore::ImageSource::isAsyncDecodingQueueIdle): A wrapper for ImageFrameCache::isAsyncDecodingQueueIdle().
        (WebCore::ImageSource::hasDecodingQueue): Deleted.
        
        * platform/graphics/TiledBacking.h: Fix a comment. tileGridExtent() is the only one that is used for testing.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::intersectsAbsoluteRect): Make this function does what shouldRepaintForImageAnimation()
        was doing expect the check for document.activeDOMObjectsAreSuspended().
        (WebCore::RenderElement::newImageAnimationFrameAvailable): Replace the call to
        shouldRepaintForImageAnimation() by checking document().activeDOMObjectsAreSuspended() then a call to
        RenderElement::intersectsAbsoluteRect().
        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded): Ditto.
        (WebCore::RenderElement::registerForAsyncImageDecodingCallback): Call the RenderView to register the renderer..
        (WebCore::RenderElement::unregisterForAsyncImageDecodingCallback): Call the RenderView to unregister the renderer..
        (WebCore::shouldRepaintForImageAnimation): Deleted.
        * rendering/RenderElement.h:

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setIsRegisteredForAsyncImageDecodingCallback):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRegisteredForAsyncImageDecodingCallback):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        Mark/unmark the renderer for being RegisteredForAsyncImageDecodingCallback.

        * rendering/RenderReplaced.h: Make intrinsicSize() be a public function.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::registerForAsyncImageDecodingCallback): Register a renderer for async image decoding.
        (WebCore::RenderView::unregisterForAsyncImageDecodingCallback): Remove a renderer from the list of async image decoding.
        (WebCore::RenderView::requestAsyncDecodingForImagesInAbsoluteRect):This loops through all the registered RenderImages
        inside this RenderView and if any of them intersects with the rectangle, requestAsyncDecoding for it.
        * rendering/RenderView.h:

2017-03-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix missing return value after r213499
        https://bugs.webkit.org/show_bug.cgi?id=168198

        Reviewed by Myles C. Maxfield.

        * platform/text/CharacterProperties.h:
        (WebCore::isEmojiGroupCandidate):

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

        Add TextIndicator support for providing a snapshot excluding selected content
        https://bugs.webkit.org/show_bug.cgi?id=169309
        <rdar://problem/30883525>

        Reviewed by Tim Horton.

        Work towards <rdar://problem/30882974>. Adds support in TextIndicator to include a snapshot of all visible
        content, excluding nodes captured in the current selection. This comes in the form of the new
        TextIndicatorOptionIncludeSnapshotOfAllVisibleContentWithoutSelection flag -- see per-method changes for more details.

        No new tests, since there is no change in behavior yet.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/FrameSnapshotting.h:

        Introduce a new snapshot option flag, SnapshotOptionsPaintEverythingExcludingSelection.

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

        If TextIndicatorOptionIncludeSnapshotOfAllVisibleContentWithoutSelection is turned on, capture and include a
        snapshot of the visible bounds of the frame.

        (WebCore::takeSnapshot):
        (WebCore::takeSnapshots):
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:

        Introduce TextIndicatorOptionIncludeSnapshotOfAllVisibleContentWithoutSelection.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange):
        * platform/graphics/FontCascade.h:

        Teach FontCascade to retrieve the width of a range in a TextRun, and also compute the widths of the TextRun
        before and after the range. This is used by InlineTextBox to compute the painting rect to clip out when skipping
        text decorations for the selected region of the TextRun.

        * rendering/InlineTextBox.cpp:

        Teach InlineTextBox to respect PaintBehaviorExcludeSelection. When painting text, if this paint behavior is
        used, we will not paint the portion of the text run that lies inside the range determined by selectionStartEnd().
        Similarly, when painting text decorations, we exclude the rect surrounding the selected content.

        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/InlineTextBox.h:
        * rendering/PaintPhase.h:

        Introduce PaintBehaviorExcludeSelection, used to inform members of the render tree not to paint portions that
        lie within the current selection range.

        * rendering/RenderLayer.cpp:

        Propagate the PaintBehaviorExcludeSelection flag to children when painting.

        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):

        Teach RenderReplaced to respect PaintBehaviorExcludeSelection by bailing from painting if it is selected and the
        paint behavior is enabled.

        * rendering/TextDecorationPainter.h:
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle):
        * rendering/TextPaintStyle.h:
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):
        * rendering/TextPainter.h:

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

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

        Reviewed by Eric Carlson.

        Temporary fix to support appr.tc web site.
        A future patch should allow to set MaxBundle.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration):

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

        Drop select.remove() / options.remove() overloads taking an option element in parameter
        https://bugs.webkit.org/show_bug.cgi?id=169339

        Reviewed by Sam Weinig.

        Drop select.remove() / options.remove() overloads taking an option element in parameter.
        It is non-standard:
        - https://html.spec.whatwg.org/multipage/forms.html#the-select-element
        - https://html.spec.whatwg.org/multipage/infrastructure.html#htmloptionscollection

        It is not supported by Firefox and was removed from Chrome:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=345697
        - https://bugs.chromium.org/p/chromium/issues/detail?id=398627

        Chrome UseCounter data shows consistent 0% usage:
        - https://www.chromestatus.com/metrics/feature/timeline/popularity/398

        Test: fast/dom/HTMLSelectElement/remove-option-element.html

        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:

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

        Parameter to input.setCustomValidity() should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=169332

        Reviewed by Sam Weinig.

        Parameter to input.setCustomValidity() should not be nullable:
        - https://html.spec.whatwg.org/#htmlinputelement

        Firefox and Chrome agree with the specification so the change
        should be safe.

        Test: fast/forms/setCustomValidity-null-parameter.html

        * html/HTMLButtonElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:

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

        Support transitions/animations of background-position with right/bottom-relative values
        https://bugs.webkit.org/show_bug.cgi?id=162048

        Reviewed by Dean Jackson.
        
        Re-landing r206713.
        
        Make transitions between "background-position: 10px 20px" and "background-position: right 10px bottom 20px"
        work. We do this by by converting "right 10px" to "calc(100% - 10px)" when blending.
        
        Also improve logging of calculated lengths, and better animation logging for FillLayer properties.

        Test: transitions/background-position-transitions.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::FillLayerAnimationPropertyWrapperBase::FillLayerAnimationPropertyWrapperBase): Keep the propertyID
        around so logging can use it.
        (WebCore::FillLayerAnimationPropertyWrapperBase::property):
        (WebCore::FillLayerPropertyWrapperGetter::FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::value):
        (WebCore::FillLayerPropertyWrapper::FillLayerPropertyWrapper):
        (WebCore::createCalculatedLength):
        (WebCore::FillLayerPositionPropertyWrapper::FillLayerPositionPropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::FillLayerStyleImagePropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::CSSPropertyAnimation::blendProperties): Blend then log, so that the logging
        can show the result.
        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionNumber::dump):
        (WebCore::CalcExpressionBinaryOperation::dump):
        (WebCore::CalcExpressionLength::dump):
        (WebCore::CalcExpressionBlendLength::dump):
        (WebCore::operator<<):
        * platform/CalculationValue.h:
        * platform/Length.cpp:
        (WebCore::operator<<):

2017-03-08  Anders Carlsson  <andersca@apple.com>

        Simplify the PaymentCoordinator interface
        https://bugs.webkit.org/show_bug.cgi?id=169382
        Part of rdar://problem/28880714.

        Reviewed by Tim Horton.

        Add four new structs: PaymentAuthorizationResult, PaymentMethodUpdate, ShippingContactUpdate and ShippingMethodUpdate.
        Change the various PaymentCoordinator and PaymentCoordinatorClient functions to take these new objects instead of multiple parameters.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completeShippingMethodSelection):
        (WebCore::ApplePaySession::completeShippingContactSelection):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        (WebCore::ApplePaySession::completePayment):
        (WebCore::ApplePaySession::didSelectShippingMethod):
        (WebCore::ApplePaySession::didSelectShippingContact):
        * Modules/applepay/PaymentAuthorizationStatus.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::completeShippingMethodSelection):
        (WebCore::PaymentCoordinator::completeShippingContactSelection):
        (WebCore::PaymentCoordinator::completePaymentMethodSelection):
        (WebCore::PaymentCoordinator::completePaymentSession):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/PaymentRequest.h:
        * loader/EmptyClients.cpp:

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

        Change determineNonLayerDescendantsPaintedContent to max out based on renderers traversed
        https://bugs.webkit.org/show_bug.cgi?id=169384

        Reviewed by Zalan Bujtas.

        determineNonLayerDescendantsPaintedContent() would bail after depth 3, sibling count 20. However,
        empirical testing shows that it would run to completion more often if the limit was based on the
        number of nodes traversed (in particular, it's common to see fairly deep subtrees with few siblings).
        Running to completion has huge memory advantages, because we can then be sure to have checked all the
        renderers for smoothed text, allowing us, on some pages, to avoid the extra memory cost of using
        layers that support subpixel-antialiased text.

        Performance measurement shows that mean runtime of this function goes up from 0.30us to 0.34us
        with a 200 renderer limit, which seems worthwhile.

        Test: compositing/contents-format/subpixel-antialiased-text-traversal.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

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

        Support canvas captureStream
        https://bugs.webkit.org/show_bug.cgi?id=169192

        Reviewed by Dean Jackson.

        Tests: fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-creation.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-exceptions.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-request-frame-events.html
               fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html

        Adding canvas captureStream as defined in https://w3c.github.io/mediacapture-fromelement/#html-canvas-element-media-capture-extensions
        This allows creating a video MediaStreamTrack fed by canvas taken frames.
        Frames are produced when canvas get changed.

        Tests taken from Chromium.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: Added.
        (WebCore::CanvasCaptureMediaStreamTrack::create):
        (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::create):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::stopProducingData):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::requestFrameTimerFired):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDestroyed):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: Added.
        (isType):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.idl: Added.
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::isCanvas):
        * Modules/mediastream/MediaStreamTrack.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMediaStreamTrackCustom.cpp:
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        (WebCore::HTMLCanvasElement::captureStream):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::clear):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::markContextChangedAndNotifyCanvasObserver):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        (WebCore::WebGLRenderingContextBase::drawArraysInstanced):
        (WebCore::WebGLRenderingContextBase::drawElementsInstanced):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::toBGRAData):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::releaseUint8Vector):
        (WebCore::MediaSampleAVFObjC::createImageSample):
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::transferData):
        (WebCore::ImageBufferData::toBGRAData):
        * platform/graphics/cg/ImageBufferDataCG.h:

2017-03-07  Anders Carlsson  <andersca@apple.com>

        Use the new code path when dragging web contents
        https://bugs.webkit.org/show_bug.cgi?id=169298

        Reviewed by Beth Dakin.

        * editing/Editor.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::writeSelection):
        Add a new function that writes the selection to a writer object.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Use the new writeSelection if mustUseLegacyDragClient is false.

        * platform/PasteboardWriterData.cpp:
        (WebCore::PasteboardWriterData::WebContent::WebContent):
        (WebCore::PasteboardWriterData::WebContent::~WebContent):
        (WebCore::PasteboardWriterData::setWebContent):
        * platform/PasteboardWriterData.h:
        Add getters and setters.

        * platform/mac/PasteboardWriter.mm:
        (WebCore::toUTIUnlessAlreadyUTI):
        Add a helper.

        (WebCore::createPasteboardWriter):
        Convert web content to pasteboard types.

2017-03-08  Dave Hyatt  <hyatt@apple.com>

        CSS Multicolumn should not clip columns horizontally
        https://bugs.webkit.org/show_bug.cgi?id=169363

        Reviewed by Sam Weinig.

        Revised multiple tests in fast/multicol.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        Stop clipping horizontally. Section 8.1 of the spec changed from "clip" to "don't clip",
        so we're changing to match the latest draft. Keep iBooks-based pagination clipping though.

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

        Add support for history.scrollRestoration
        https://bugs.webkit.org/show_bug.cgi?id=147782
        rdar://problem/22614568

        Reviewed by Sam Weinig.

        Add support for history.scrollRestoration, per spec:
        <https://html.spec.whatwg.org/multipage/browsers.html#dom-history-scroll-restoration>

        This is a new attribute on the History interface. On setting, sets the "shouldRestoreScrollPosition"
        state on the current history item, and the getter returns that state. pushState() inherits the
        state from the current item.

        HistoryController::restoreScrollPositionAndViewState() consults this state, and if set to "manual"
        ("don't restore) it just uses the current scroll position (we need something to pass to
        setPageScaleFactor() so can't just avoid the restoration).

        FrameLoader::scrollToFragmentWithParentBoundary() also needs to consult the historyItem
        to know if it's OK to scroll to a fragment, on back/forward same-document loads.

        Tests: fast/history/history-scroll-restoration-attribute.html
               fast/history/history-scroll-restoration.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::shouldRestoreScrollPosition):
        (WebCore::HistoryItem::setShouldRestoreScrollPosition):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::itemAllowsScrollRestoration):
        (WebCore::isSameDocumentReload):
        (WebCore::FrameLoader::scrollToFragmentWithParentBoundary):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * page/History.cpp:
        (WebCore::History::scrollRestoration):
        (WebCore::History::setScrollRestoration):
        * page/History.h:
        * page/History.idl:

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

        [iOS] Throttle DOM timers to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=169213
        <rdar://problem/30876965>

        Reviewed by Simon Fraser.

        Throttle and align DOM timers to ~30fps in low power mode on iOS
        to save battery.

        Test: fast/dom/timer-throttling-lowPowerMode.html

        * page/DOMTimer.h:
        * page/Page.cpp:
        (WebCore::Page::handleLowModePowerChange):
        (WebCore::Page::updateDOMTimerAlignmentInterval):

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

        Update outdated comment about HTMLElement.dropzone
        https://bugs.webkit.org/show_bug.cgi?id=169338

        Reviewed by Sam Weinig.

        Update outdated comment about HTMLElement.dropzone since it was dropped
        from the HTML specification:
        - https://github.com/whatwg/html/commit/3044a7e8517a4488cea811789d19974a8d5a56ae

        Also add comment about HTMLElement.webkitdropzone since Blink dropped
        it in:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=688943

        * html/HTMLElement.idl:

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

        Add support for an autoplay play-pause events quirk.
        https://bugs.webkit.org/show_bug.cgi?id=169235

        Reviewed by Jer Noble.

        For sites that assume media starts off playing, send a playing and pause event to trigger
        custom media controls to update.

        * html/HTMLMediaElement.cpp:
        (WebCore::needsAutoplayPlayPauseEventsQuirk):
        (WebCore::HTMLMediaElement::dispatchPlayPauseEventsIfNeedsQuirks):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        * html/HTMLMediaElement.h:

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

        MediaPlayerPrivateGStreamerBase::volume() should override the MediaPlayerPrivate method
        https://bugs.webkit.org/show_bug.cgi?id=169347

        Reviewed by Carlos Garcia Campos.

        Enable the MediaPlayerPrivate::volume() method for the USE(GSTREAMER) configuration
        and override it in the MediaPlayerPrivateGStreamerBase class.

        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2017-03-08  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Actually implement flush() on playback pipeline
        https://bugs.webkit.org/show_bug.cgi?id=169202

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Added GRefPtr support for GstQuery.
        (WTF::adoptGRef):
        (WTF::refGPtr<GstQuery>):
        (WTF::derefGPtr<GstQuery>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Ditto.
        * platform/graphics/gstreamer/GUniquePtrGStreamer.h: Added GUniquePtr support for GstSegment.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::flush): Only actually flush in the non-seek case. For the seek case,
        GStreamer seek will already do the flush.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::addSourceBuffer): Configure appsrc to be time-based instead of bytes-based to ensure
        that the segments it produces are time-based.
        (WebCore::segmentFixerProbe): This captures the next segment in the stream and "fixes" its base time by setting
        it to the start time. This prevent audio/video desynchronizations.
        (WebCore::PlaybackPipeline::flush): Really implement flushing by sending flush start/stop events, reconfiguring
        appsrc with a new (seamless) segment (so it reconfigures the rest of the elements in that stream), and attached
        a segmentFixerProbe to fix the segment emitted by basesrc (appsrc). The current pipeline position is used as
        start time used for the new segment. This prevents displaying samples already displayed before flushing, while
        allowing the decoder to decode them as a base for future (dependent) p-frame and b-frame samples.

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

        Remove never-implemented CSS3 text decoration-related properties
        https://bugs.webkit.org/show_bug.cgi?id=169009

        Reviewed by Zalan Bujtas.

        The following CSS properties were added many years ago based on an old CSS3 Text
        draft (https://www.w3.org/TR/2003/CR-css3-text-20030514/), but never had any implementations.
        Remove them.

            text-line-through
            text-line-through-color
            text-line-through-mode
            text-line-through-style
            text-line-through-width
            text-overline
            text-overline-color
            text-overline-mode
            text-overline-style
            text-overline-width
            text-underline
            text-underline-color
            text-underline-mode
            text-underline-style
            text-underline-width

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

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

        Have fixedPositionCreatesStackingContext be on by default everywhere
        https://bugs.webkit.org/show_bug.cgi?id=169334

        Reviewed by Zalan Bujtas.

        It makes no sense to have web-exposed CSS functionality be different based on setting,
        and other browser are now aligned with having position:fixed create stacking context.

        So remove the fixedPositionCreatesStackingContext setting and have StyleResolver::adjustRenderStyle()
        always force stacking context for position:fixed.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * page/Settings.cpp:
        * page/Settings.in:

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

        Asynchronous image decoding should consider the drawing size if it is smaller than the size of the image
        https://bugs.webkit.org/show_bug.cgi?id=168814

        Reviewed by Simon Fraser.

        If the image destinationRect.size() is smaller than the imageSourceSize
        (e.g. 3000x3000 pixels), CGImageSourceCreateThumbnailAtIndex() is slower
        than CGImageSourceCreateImageAtIndex() in decoding this image. To overcome
        this problem, the entry (kCGImageSourceThumbnailMaxPixelSize,
        max(destinationRect.width, destinationRect.height)) is added to the options
        dictionary when calling CGImageSourceCreateThumbnailAtIndex(). This will
        avoid copying a large block of memory for the unscaled bitmap image.

        An argument named 'sizeForDrawing' of type std::optional<IntSize> will be passed
        all the way from BitmapImage to ImageDecoder. If bool(sizeForDrawing) equals
        true that means we want async image decoding. Otherwise the image will be decoded
        synchronously.

        The subsamplingLevel argument will be passed as std::optional<SubsamplingLevel>.
        to ImageFrame query functions. When combined with sizeForDrawing, the meaning of
        these two arguments will be the following:
        -- !bool(subsamplingLevel): No caching is required. return what is stored in ImageFrameCache.
        -- bool(subsamplingLevel) && !bool(sizeForDrawing): Match subsamplingLevel only. Recache if it's different.
        -- bool(subsamplingLevel) && bool(sizeForDrawing): Match both both. . Recache if one of them is different.

        We are going to allow decoding the same ImageFrame for different sizeForDrawings.
        The rule is a new decoding is allowed only if the maxPixelSize(sizeForDrawing) of
        the last requested image decoding is less than the new request sizeForDrawing.

        * loader/cache/CachedImage.h: Add a helper function which returns the URL of a CachedImage.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameImageAtIndex): Add a new argument for sizeForDrawing.
        (WebCore::BitmapImage::nativeImage): Pass an empty sizeForDrawing to frameImageAtIndex(). We an image with the native size.
        (WebCore::BitmapImage::nativeImageForCurrentFrame): Ditto.
        (WebCore::BitmapImage::nativeImageOfSize): Ditto.
        (WebCore::BitmapImage::draw): Pass the destRect.size() to internalStartAnimation().
        (WebCore::BitmapImage::isAsyncDecodingRequired): A helper function to answer the question
        whether the async image decoding is required. It takes into account the animated images, the
        large image, and the image size.
        (WebCore::BitmapImage::internalStartAnimation):  If async image decoding is requested for this frame m_sizeForDraw
        will be set. If internalStartAnimation() is called from startAnimation(), sizeForDraw will be empty. In this
        case no async image decoding will be requested. This happens only when startAnimation() is called from outside
        BitmapImage::draw().
        (WebCore::BitmapImage::advanceAnimation): Change the log message.
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Ditto.
        * platform/graphics/BitmapImage.h:

        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::operator=):  Include m_sizeForDraw in the properties of ImageFrame.
        (WebCore::maxPixelSize): Returns the maximum of the width() and the height of an IntSize.
        (WebCore::ImageFrame::isBeingDecoded): Returns true if the ImageFrame is currently being decoded for a specific sizeForDrawing.
        (WebCore::ImageFrame::hasValidNativeImage): Ditto.
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::enqueueSizeForDecoding): Adds a new sizeForDrawing; this sets the ImageFrame is being decoded for this sizeForDrawing.
        (WebCore::ImageFrame::dequeueSizeForDecoding): Removes the first sizeForDrawing was enqueued; this marks this ImageFrame has finished decoding for this sizeForDrawing.
        (WebCore::ImageFrame::clearSizeForDecoding): Clears the sizeForDecoding queue. Marks the ImageFrame for not being decoded.
        (WebCore::ImageFrame::isEmpty): Replace Decoding::Empty by Decoding::None.
        (WebCore::ImageFrame::sizeForDrawing): Returns the ImageFrame sizeForDraw.
        (WebCore::ImageFrame::hasDecodedNativeImage): Returns true if the ImageFrame doesn't need decoding before drawing.
        (WebCore::ImageFrame::hasValidNativeImage): Deleted. Moved to the source file.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setFrameNativeImageAtIndex): Take a new argument for sizeForDraw.
        (WebCore::ImageFrameCache::setFrameMetadataAtIndex):  When sizeForDraw is set, use the decoder to get the image
        frame size. Otherwise, get the size of the nativeImage.
        (WebCore::ImageFrameCache::replaceFrameNativeImageAtIndex): Take a new argument for sizeForDraw.
        (WebCore::ImageFrameCache::cacheFrameNativeImageAtIndex): Ditto.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Pass the sizeForDraw as a new property of the ImageFrame.
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Store sizeForDraw in ImageFrameRequest. Delete unneeded check.
        This function always receives a valid subsamplingLevel. 
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): Marks all the queued ImageFrames for not being decoded.
        (WebCore::ImageFrameCache::frameAtIndexCacheIfNeeded): Take a new argument for sizeForDraw. If this function fixes the
        properties of ImageFrame properties, keep the old sizeForDraw and/or subsamplingLevel. If a new frame is 
        decoded, no async image decoding will be done in this code path. So pass an empty std::optional<IntSize> to 
        ImageDecoder::createFrameImageAtIndex() and store std::optional<IntSize> in ImageFrame.
        (WebCore::ImageFrameCache::frameMetadataAtIndex): A new helper function which takes a variable number of arguments which
        will be passed to the (ImageFrame::*functor).
        (WebCore::ImageFrameCache::frameMetadataAtIndexCacheIfNeeded): Make this function takes a variable number of arguments which
        will be passed to the frameAtIndexCacheIfNeeded().
        (WebCore::ImageFrameCache::size): Pass an Metadata, valid SubsamplingLevel and empty sizeForDraw to frameMetadataAtIndexCacheIfNeeded().
        (WebCore::ImageFrameCache::sizeRespectingOrientation): Ditto.
        (WebCore::ImageFrameCache::singlePixelSolidColor): Pass MetadataAndImage, empty SubsamplingLevel and empty sizeForDraw to
        frameMetadataAtIndexCacheIfNeeded(); we can use the current frame image regardless of its size.
        (WebCore::ImageFrameCache::frameIsBeingDecodedAtIndex): Pass the ImageFrame method as a function argument instead of 
        passing it as a template argument.
        (WebCore::ImageFrameCache::frameIsCompleteAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameHasAlphaAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameHasImageAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameHasValidNativeImageAtIndex): Pass subsamplingLevel and sizeForDrawing to frameMetadataAtIndex().
        (WebCore::ImageFrameCache::frameHasDecodedNativeImage): New helper function to answer the question whether an ImageFrame will need
        decoding when drawing or not.
        (WebCore::ImageFrameCache::frameSubsamplingLevelAtIndex):  Pass the ImageFrame method as a function argument instead of 
        passing it as a template argument.
        (WebCore::ImageFrameCache::frameSizeAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameBytesAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameDurationAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameOrientationAtIndex):
        (WebCore::ImageFrameCache::frameImageAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameAtIndex): Deleted. Renamed to frameAtIndexCacheIfNeeded().
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::frameAtIndexCacheIfNeeded):

        * platform/graphics/ImageObserver.h: Define a virtual function for image sourceUrl().

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameImageAtIndex): Take a new argument for sizeForDrawing.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex): Take a new argument for sizeForDrawing.
        (WebCore::ImageSource::frameHasValidNativeImageAtIndex): Ditto.
        (WebCore::ImageSource::frameHasDecodedNativeImage): New helper function.
        (WebCore::ImageSource::frameImageAtIndex): Ditto.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::createImageSourceOptions): Create a dictionary with the basic image decoding options.
        (WebCore::createImageSourceAsyncOptions): Create a dictionary with the basic asynchronous image decoding options.
        (WebCore::appendImageSourceOption): Append the SubsamplingLevel or the MaxPixelSize option to an CGImageSource options dictionary.
        (WebCore::appendImageSourceOptions): Append the SubsamplingLevel and the MaxPixelSize option to an CGImageSource options dictionary.
        (WebCore::imageSourceOptions): Creates a dictionary for the synchronous image decoding options.
        (WebCore::imageSourceAsyncOptions): Creates a dictionary for the asynchronous image decoding options.
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the DecodingMode argument by an std::optional<IntSize>.
        * platform/graphics/cg/ImageDecoderCG.h: Change a prototype.

        * platform/graphics/win/ImageDecoderDirect2D.cpp: 
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the DecodingMode argument by an std::optional<IntSize>.
        * platform/graphics/win/ImageDecoderDirect2D.h: Change a prototype.

        * platform/image-decoders/ImageDecoder.cpp: 
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the DecodingMode argument by an std::optional<IntSize>.
        * platform/image-decoders/ImageDecoder.h: Change a prototype.

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

        Parsing -webkit-hyphenate-character uses confusingly named consumeLocale()
        https://bugs.webkit.org/show_bug.cgi?id=168638

        Reviewed by Zalan Bujtas.

        Parsing CSSPropertyWebkitHyphenateCharacter very confusingly called consumeLocale(),
        which is really just "consume the 'auto' ident or a string", so rename that function.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAutoOrString):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeLocale): Deleted.

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

        [WebCrypto] Implement ECDH ImportKey/ExportKey operations
        https://bugs.webkit.org/show_bug.cgi?id=169257
        <rdar://problem/23789585>

        Reviewed by Brent Fulgham.

        This patch implements ECDH ImportKey/ExportKey operations according to:
        https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't
        support SPKI/PKCS8 formats at this moment due to lack of necessary
        support in the underlying crypto library. Bug 169318 is tracking the
        issue. Also, this patch fixes minor bugs while importing JWK keys for
        HMAC/RSA.

        Tests: crypto/subtle/ec-export-key-malformed-parameters.html
               crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html
               crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html
               crypto/subtle/ec-import-jwk-key-export-raw-key.html
               crypto/subtle/ec-import-key-malformed-parameters.html
               crypto/subtle/ec-import-raw-key-export-jwk-key.html
               crypto/subtle/ec-import-raw-key-export-raw-key.html
               crypto/subtle/ecdh-generate-export-jwk-key-p256.html
               crypto/subtle/ecdh-generate-export-jwk-key-p384.html
               crypto/subtle/ecdh-generate-export-key-raw-p256.html
               crypto/subtle/ecdh-generate-export-key-raw-p384.html
               crypto/subtle/ecdh-import-jwk-key-minimum.html
               crypto/subtle/ecdh-import-jwk-private-key-p256.html
               crypto/subtle/ecdh-import-jwk-private-key-p384.html
               crypto/subtle/ecdh-import-jwk-public-key-p256.html
               crypto/subtle/ecdh-import-jwk-public-key-p384.html
               crypto/subtle/ecdh-import-raw-key-p256.html
               crypto/subtle/ecdh-import-raw-key-p384.html
               crypto/workers/subtle/ec-generate-export-jwk-key.html
               crypto/workers/subtle/ec-generate-export-raw-key.html
               crypto/workers/subtle/ec-import-jwk-key-private.html
               crypto/workers/subtle/ec-import-jwk-key-public.html
               crypto/workers/subtle/ec-import-raw-key.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::supportExportKeyThrow):
        Added EC family support.
        * crypto/CommonCryptoUtilities.h:
        Added needed CommonCrypto SPIs.
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::importKey):
        (WebCore::CryptoAlgorithmECDH::exportKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/gnutls/CryptoKeyECGnuTLS.cpp:
        (WebCore::CryptoKeyEC::keySizeInBits):
        (WebCore::CryptoKeyEC::exportRaw):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformAddFieldElements):
        Faked implementations for GTK+.
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::toNamedCurve):
        (WebCore::CryptoKeyEC::generatePair):
        (WebCore::CryptoKeyEC::importRaw):
        (WebCore::CryptoKeyEC::importJwk):
        (WebCore::CryptoKeyEC::exportJwk):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::importJwk):
        Fixed a bug.
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        Fixed a bug.
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::doesUncompressedPointMatchNamedCurve):
        (WebCore::doesFieldElementMatchNamedCurve):
        (WebCore::getKeySizeFromNamedCurve):
        (WebCore::CryptoKeyEC::~CryptoKeyEC):
        (WebCore::CryptoKeyEC::keySizeInBits):
        (WebCore::CryptoKeyEC::exportRaw):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformAddFieldElements):

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

        WebRTC can be used even if getUserMedia is off
        https://bugs.webkit.org/show_bug.cgi?id=169303

        Reviewed by Alex Christensen.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::peerConnectionEnabled): No longer tieing peerConnectionEnabled to
        mediaStreamEnabled.

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

        Make platformDevice() not inline, to avoid a
        weak external symbol issue on newer compilers/linkers

        * platform/graphics/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::platformDevice):
        * platform/graphics/gpu/GPUDevice.h:
        (WebCore::GPUDevice::platformDevice): Deleted.

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

        Some platforms won't be able to create a GPUDevice
        https://bugs.webkit.org/show_bug.cgi?id=169314
        <rdar://problems/30907521>

        Reviewed by Jon Lee.

        Protect for the case where the hardware doesn't support Metal. And
        we might as well disable WebGPU completely in the iOS simulator
        for now.

        * Configurations/FeatureDefines.xcconfig:
        * platform/graphics/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::GPUDevice):
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::create):

2017-03-07  Maureen Daum  <mdaum@apple.com>

        Correctly check for an empty database file.
        <rdar://problem/30542242> Removing Website Data not working (WebSQL directories being left behind)
        https://bugs.webkit.org/show_bug.cgi?id=169256

        Reviewed by Brady Eidson.

        Tests: DatabaseTrackerTest.DeleteDatabaseFileIfEmpty verifies that we actually delete an empty file.

        Instead of checking that a database file's size is zero bytes, we should check if it contains
        any tables. Once we open an empty database file and set its journal mode to WAL, it will have a
        valid SQLite header and therefore will no longer be empty. We can know that the database was empty
        if it does not contain any tables.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        Use BEGIN EXCLUSIVE TRANSACTION in order to obtain the exclusive lock. If the database doesn't contain
        any tables, it is empty and can be deleted.

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

        [URLParser] Fix file URLs that are just file:// and a Windows drive letter
        https://bugs.webkit.org/show_bug.cgi?id=169242

        Reviewed by Tim Horton.

        This is specified in https://url.spec.whatwg.org/#file-host-state and tested by a newly-passing
        web platform test.  I added the check for the windows drive quirk in the FileHost state of the
        parser but I forgot it when FileHost is the terminal state.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

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

        Drop non-standard MessageEvent.webkitInitMessageEvent()
        https://bugs.webkit.org/show_bug.cgi?id=169295

        Reviewed by Joseph Pecoraro.

        Drop non-standard MessageEvent.webkitInitMessageEvent().

        Chrome dropped it almost 3 years ago. They had UseCounter data showing
        consistent 0% usage:
        - https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/H6lsGFqdy3Y
        - https://www.chromestatus.com/metrics/feature/timeline/popularity/223
        - https://src.chromium.org/viewvc/blink?revision=174967&view=revision

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent): Deleted.
        (WebCore::JSMessageEvent::webkitInitMessageEvent): Deleted.
        * dom/MessageEvent.idl:

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

        Label of an <option> element should not be displayed in quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=169296
        <rdar://problem/30900751>

        Reviewed by Simon Fraser.

        Label of an <option> element should not be displayed in quirks mode, to
        match Chrome and Firefox. However, we should still display the label in
        strict mode, as per the HTML specification:
        - https://html.spec.whatwg.org/multipage/rendering.html#the-select-element-2

        Chrome renders the label in strict mode, same as us. Firefox does not:
        - https://bugzilla.mozilla.org/show_bug.cgi?id=1345242

        Tests: fast/dom/HTMLOptionElement/option-label-quirksmode.html
               fast/dom/HTMLOptionElement/option-label-quirksmode2.html
               fast/dom/HTMLOptionElement/option-label-strictmode.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::displayLabel):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):
        * html/HTMLOptionElement.h:

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

        Add GPUDevice implementation and WebGPULayer
        https://bugs.webkit.org/show_bug.cgi?id=169219
        <rdar://problem/30879048>

        Reviewed by Sam Weinig.

        Add a basic implementation of a GPUDevice object,
        which references a MTLDevice. Also add a WebGPULayer
        that will ultimately be used to host WebGPU content.

        WebKit API Test: WebCore/mac/GPUDevice.mm

        * Configurations/WebCore.xcconfig: Link to Metal.

        * PlatformMac.cmake: New files.
        * WebCore.xcodeproj/project.pbxproj:

        * platform/Logging.h: Add a WebGPU logging channel.

        * platform/graphics/cocoa/GPUDeviceMetal.mm: Added.
        (WebCore::GPUDevice::GPUDevice): Cocoa implementation.
        (WebCore::GPUDevice::reshape):
        * platform/graphics/cocoa/WebGPULayer.h: Added.
        * platform/graphics/cocoa/WebGPULayer.mm: Added.
        (-[WebGPULayer initWithGPUDevice:]):
        (-[WebGPULayer copyImageSnapshotWithColorSpace:]):
        (-[WebGPULayer display]):
        * platform/graphics/gpu/GPUDevice.cpp: Added.
        (WebCore::GPUDevice::create):
        (WebCore::GPUDevice::~GPUDevice):
        (WebCore::GPUDevice::GPUDevice): Implementation for platforms
        other than Mac and iOS hardware.
        (WebCore::GPUDevice::reshape):
        * platform/graphics/gpu/GPUDevice.h: Added.
        (WebCore::GPUDevice::platformLayer):
        (WebCore::GPUDevice::platformDevice):
        (WebCore::GPUDevice::layer):

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

        [Modern Media Controls] Log an error to the console when an image fails to load
        https://bugs.webkit.org/show_bug.cgi?id=169292

        Reviewed by Dean Jackson.

        In order to help debug flaky tests we now log the image source when an image fails to load.

        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype.handleEvent):
        (IconButton.prototype._loadImage):

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

        Simple line layout: Do not use invalid m_lastNonWhitespaceFragment while removing trailing whitespace.
        https://bugs.webkit.org/show_bug.cgi?id=169288
        rdar://problem/30576976

        Reviewed by Antti Koivisto.

        When the current line has nothing but whitespace, m_lastNonWhitespaceFragment is invalid so
        we should not use the start/end values to decide how many characters we need to revert.
        This patch makes m_lastNonWhitespaceFragment optional. When it's invalid we just remove
        all the runs from the current line since they are all considered whitespace runs.

        Test: fast/text/simple-line-layout-line-is-all-whitespace.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::revertAllRunsOnCurrentLine):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):

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

        [Content Extensions] Rename "Domain" to "Condition" where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=169297

        Reviewed by Brady Eidson.

        In r184116 I added the ability for a content blocker author to add conditions to the triggers,
        if-domain and unless-domain which look at the domain of the main document URL.
        I plan to add more conditions soon to run regexes on the entire URL, but to make that patch more
        manageable, I took the non-behavior-changing parts and put them in this patch.

        No change in behavior except some error messages were made more generic.

        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        Pass the main document URL instead of just the domain.  No change in behavior yet.
        (WebCore::ContentExtensions::ContentExtension::cachedConditionedActions):
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithConditions):
        (WebCore::ContentExtensions::ContentExtension::populateDomainCacheIfNeeded): Deleted.
        (WebCore::ContentExtensions::ContentExtension::cachedDomainActions): Deleted.
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithDomains): Deleted.
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithoutConditions):
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithoutDomains): Deleted.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getStringList):
        Don't pass the error type as a parameter.  It's always JSONInvalidConditionList.
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::loadTrigger):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::~Trigger):
        (WebCore::ContentExtensions::Trigger::isEmpty):
        (WebCore::ContentExtensions::Trigger::operator==):
        (WebCore::ContentExtensions::TriggerHash::hash):
        Use bitwise xor instead of bitwise or to have fewer hash collisions.
        Also, before we were accidentally doing the same hash operation here for IfDomain and UnlessDomain.
        This caused unnecessary hash collisions.  This is fixed, but should not change any behavior.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::matchesCondition):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsMatchingEverything):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithConditions):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        (WebCore::ContentExtensions::matchesDomain): Deleted.
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithDomains): Deleted.
        * contentextensions/DFABytecodeInterpreter.h:
        * loader/ResourceLoadInfo.h:

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

        [FreeType] FontPlatformData::fallbacks() returns unprepared FcPatterns
        https://bugs.webkit.org/show_bug.cgi?id=164689

        Reviewed by Carlos Garcia Campos.

        From the documentation of FcFontSort():

        """The returned FcFontSet references FcPattern structures which may be shared by the
        return value from multiple FcFontSort calls, applications must not modify these patterns.
        Instead, they should be passed, along with p to FcFontRenderPrepare which combines them into
        a complete pattern."""

        That means each call to FcFontSort() must be followed up by a call to FcFontRenderPrepare(),
        else the patterns will lack information about how to draw the font properly.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::fallbacks):

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

        Parsing font descriptors inside @font-face needs to accept ranges
        https://bugs.webkit.org/show_bug.cgi?id=168893

        Reviewed by Dean Jackson.

        Parse font-weight, font-stretch, and font-style ranges according to
        https://drafts.csswg.org/css-fonts-4/#font-prop-desc. There is one difference, though:
        as documented in https://github.com/w3c/csswg-drafts/issues/783, slashes are a better
        delimiters than hyphens, so this patch implements that instead. I'll update the spec to
        include slashes as soon as possible.

        Because this patch is all about creating FontSelectionValues from fonts, it doesn't
        actually modify the font selection algorithm, and therefore only tests the creation of
        these new values. The font selection algorithm itself is already tested elsewhere.

        This new work is behind the ENABLE(VARIATION_FONTS) flag.

        Test: fast/text/font-selection-font-face-parse.html

        * css/CSSFontFace.cpp:
        (WebCore::calculateWeightRange):
        (WebCore::calculateStretchRange):
        (WebCore::calculateItalicRange):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeightRange):
        (WebCore::consumeFontStretchRange):
        (WebCore::consumeFontStyleRange):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::extractVariationBounds):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::capabilitiesForFontDescriptor):

2017-03-07  Dave Hyatt  <hyatt@apple.com>

        Animated GIFs fail to play in multi-column layout
        https://bugs.webkit.org/show_bug.cgi?id=167901
        <rdar://problem/30382262>

        Reviewed by Zalan Bujtas.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        Make sure to handle the case where we pass in a null repaintContainer and need
        to cross a multicolumn flow thread -> region boundary as a result.

2017-03-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        ShadowBlur::calculateLayerBoundingRect doesn't need to return the enclosingIntRect of layerRect
        https://bugs.webkit.org/show_bug.cgi?id=168650

        Reviewed by Simon Fraser.

        No new tests, no behavior change.

        * platform/graphics/ShadowBlur.h: Change the type of return value
        from IntRect to IntSize.
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::calculateLayerBoundingRect): Ditto.
        (WebCore::ShadowBlur::drawRectShadow): Rename a variable layerRect layerSize.
        (WebCore::ShadowBlur::drawInsetShadow): Ditto.
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling): Ditto.
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling): Ditto.
        (WebCore::ShadowBlur::beginShadowLayer): Ditto.

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

        Replace debug assertion with release one in Frame::setView()
        https://bugs.webkit.org/show_bug.cgi?id=169189

        Reviewed by Ryosuke Niwa.

        Replace debug assertion with release one in Frame::setView() to make make sure the
        document does not have a living render tree. This will help identify possible
        remaining cases where this can happen.

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInView): Deleted.
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::setView):

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

        Expose WebRTC current/pending description getters
        https://bugs.webkit.org/show_bug.cgi?id=169216

        Reviewed by Alex Christensen.

        Test: webrtc/descriptionGetters.html

        Implement pending and current description getters through libwebrtc.
        These getters do not yet match the spec as can be seen from the test, which is written to match the implemented behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::currentLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::currentRemoteDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::pendingLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::pendingRemoteDescription):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

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

        Port DOMTimer from std::chrono::milliseconds to WTF::Seconds type
        https://bugs.webkit.org/show_bug.cgi?id=169236

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::minimumDOMTimerInterval):
        (WebCore::Document::timerAlignmentInterval):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::adjustMinimumDOMTimerInterval):
        (WebCore::ScriptExecutionContext::minimumDOMTimerInterval):
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):
        * dom/ScriptExecutionContext.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didInstallTimer):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        * inspector/TimelineRecordFactory.h:
        * page/DOMTimer.cpp:
        (WebCore::shouldForwardUserGesture):
        (WebCore::userGestureTokenToForward):
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::intervalClampedToMinimum):
        (WebCore::DOMTimer::alignedFireTime):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/Page.cpp:
        (WebCore::Page::setTimerThrottlingState):
        (WebCore::Page::setDOMTimerAlignmentIntervalIncreaseLimit):
        (WebCore::Page::updateDOMTimerAlignmentInterval):
        * page/Page.h:
        (WebCore::Page::domTimerAlignmentInterval):
        * page/Settings.cpp:
        (WebCore::Settings::setMinimumDOMTimerInterval):
        * page/Settings.h:
        (WebCore::Settings::minimumDOMTimerInterval):
        * page/SuspendableTimer.h:
        (WebCore::SuspendableTimer::startRepeating):
        (WebCore::SuspendableTimer::startOneShot):
        (WebCore::SuspendableTimer::augmentFireInterval):
        (WebCore::SuspendableTimer::augmentRepeatInterval):
        * platform/Timer.cpp:
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::alignedFireTime):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setMinimumTimerInterval):
        * testing/InternalSettings.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isTimerThrottled):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):

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

        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=169176

        Reviewed by Alex Christensen.

        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
        after:
        - https://github.com/whatwg/dom/pull/417
        - https://github.com/whatwg/html/pull/2410

        In particular, the following changes were made:
        - initEvent: The length property now properly returns 1 instead of 3 as only the
          first parameter is mandatory. We were already behaving correcting the the length
          property value was wrong because we forgot to drop a hack from the bindings
          generator.
        - initCustomEvent: Make all parameters except the first optional. Previously, all
          parameters were mandatory so this is safe.
        - initMessageEvent: Drop the custom code and mark the first parameter as mandatory.
          A side effect of dropping the custom code is that null is no longer considered as
          valid input for the last parameter. The parameter is of type sequence<> and the
          new behavior is consistent with the specification and Firefox. If it turns out to
          break existing content, I'll make the parameter nullable in a follow-up.

        No new tests, updated existing tests.

        * bindings/js/JSMessageEventCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePropertiesHashTable):
        * dom/CustomEvent.idl:
        * dom/MessageEvent.idl:

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

        Differentiate between pending head and body stylesheets in Style::Scope
        https://bugs.webkit.org/show_bug.cgi?id=169277

        Reviewed by Andreas Kling.

        Split pending stylesheet node set into separate sets for head and body elements and processing instructions.

        This tightens typing and will also be useful later.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::~Scope):
        (WebCore::Style::Scope::addPendingSheet):
        (WebCore::Style::Scope::removePendingSheet):
        (WebCore::Style::Scope::didRemovePendingStylesheet):
        (WebCore::Style::Scope::hasPendingSheet):
        (WebCore::Style::Scope::hasPendingSheetInBody):
        (WebCore::Style::Scope::hasProcessingInstructionWithPendingSheet): Deleted.
        * style/StyleScope.h:
        (WebCore::Style::Scope::hasPendingSheet): Deleted.
        (WebCore::Style::Scope::hasPendingSheets): Deleted.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::hasLoadingStylesheet):

            Just test for body stylesheets.

        (WebCore::Style::TreeResolver::resolve):

            Treat all before-body stylesheets uniformly.

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

        [Modern Media Controls] Setting a valid source after an invalid one retains the invalid placard
        https://bugs.webkit.org/show_bug.cgi?id=169280
        <rdar://problem/30876078>

        Reviewed by Jon Lee.

        We need to track when a new load start to see if we might have recovered from an error
        and hide the "invalid" placard.

        Test: media/modern-media-controls/placard-support/placard-support-error-recover.html

        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype.get mediaEvents):

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

        REGRESSION (r213412): JPEG premultiplication tests fail under GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=169266

        Reviewed by Tim Horton.

        r213412 added functions to create a CGImageRef from a canvas image buffer, which were used
        to create data: URLs and blobs. If JPEG premultiplication is applied, though,
        WebCore::cgImage() would return an image with a data provider pointing to stack memory.

        I fixed a similar issue in ImageBuffer::toCGImage() by leaking the reference to a
        Uint8ClampedArray then creating a CGDataProviderRef with a releaseData function that adopts
        the leaked reference.

        We could take that approach in cgImage() too by allocating the premultiplied data buffer on
        the heap then freeing it with a releaseData function, but it's simpler to refactor
        toCGImage()/cgImage() to return an encoded image as a CFDataRef instead of a CFImageRef.
        This ensures that a CGDataProviderRef never outlives the data it points to.

        Covered by existing tests.

        * platform/graphics/ImageBuffer.h: Renamed toCGImage() to toCFData().
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::dataURL): Changed to take a CFDataRef.
        (WebCore::dataVector): Renamed from data(). Changed to take a CFDataRef.
        (WebCore::ImageBuffer::toDataURL): Changed to call toCFData().
        (WebCore::ImageBuffer::toData): Ditto.
        (WebCore::ImageBuffer::toCFData): Changed to return a CFDataRef after encoding the
        CGImageRef that was previously returned.
        (WebCore::cfData): Ditto.
        (WebCore::dataURL): Changed to call cfData().
        (WebCore::data): Ditto.
        (WebCore::ImageBuffer::toCGImage): Renamed to ImageBuffer::toCFData().
        (WebCore::cgImage): Renamed to WebCore::cfData().

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

        Test fix after r213505
        https://bugs.webkit.org/show_bug.cgi?id=169267

        Unreviewed.

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

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

        Apply well-known-axis variation values at the right time in preparePlatformFont()
        https://bugs.webkit.org/show_bug.cgi?id=168896

        Reviewed by Jon Lee.

        Simply plumb the FontSelectionRequest to the place where font variations are implemented.

        Test: fast/text/variations/font-selection-properties.html

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

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

        Unreviewed post-review fixup after r213464
        https://bugs.webkit.org/show_bug.cgi?id=169255

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::computeHash):
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::computeNecessarySynthesis):

2017-03-06  Brent Fulgham  <bfulgham@apple.com>

        Validate DOM after potentially destructive actions during parser insert operations
        https://bugs.webkit.org/show_bug.cgi?id=169222
        <rdar://problem/30689729>

        Reviewed by Ryosuke Niwa.

        Do not perform an insert operation if the next child's parent is no longer
        part of the tree. This can happen if JavaScript runs during node removal
        events and modifies the contents of the document.

        This patch was inspired by a similar Blink change by Marius Mlynski:
        <https://src.chromium.org/viewvc/blink?view=revision&revision=200690>        

        Tests: fast/parser/scriptexec-during-parserInsertBefore.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeReparentTask):
        (WebCore::executeInsertAlreadyParsedChildTask):

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

        Update isEmojiGroupCandidate() to the latest version of Unicode
        https://bugs.webkit.org/show_bug.cgi?id=168198

        Reviewed by Jon Lee.

        In the latest version of Unicode, many more code points are candidates for emoji groups.
        Therefore, isEmojiGroupCandidate() should be made more permissive. This way, the function
        is more future-proof.

        Test: editing/deleting/delete-emoji.html

        * platform/text/CharacterProperties.h:
        (WebCore::icuLibraryUnderstandsSupplementalSymbolsAndPictographs):
        (WebCore::isEmojiGroupCandidate):

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

        Use default configuration for libwebrtc peerconnection
        https://bugs.webkit.org/show_bug.cgi?id=169239

        Reviewed by Alex Christensen.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration): Using the default configuration instead of the aggressive one.

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

        [CMake] SN-DBS fails to build: Cannot open include file: 'WebCoreTestSupportPrefix.h'
        https://bugs.webkit.org/show_bug.cgi?id=169244

        Reviewed by Alex Christensen.

        A distributed build system SN-DBS can not find
        WebCoreTestSupportPrefix.h without an include path to it.

        * CMakeLists.txt: Add 'WebCore/testing/js' to include paths.

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

        [cairo] error C2065: 'quality': undeclared identifier since r213412
        https://bugs.webkit.org/show_bug.cgi?id=169240

        Reviewed by Ryosuke Niwa.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::toDataURL): Name the unnamed second argument 'quality'.

2017-03-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Implement ECDH GenerateKey operation
        https://bugs.webkit.org/show_bug.cgi?id=169093
        <rdar://problem/23789585>

        Reviewed by Brent Fulgham.

        This patch implements GenerateKey operation of ECDH according to:
        https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations.
        Note: Sad that we are not able to support P-521 at this moment due
        to lack of necessary support in the underlying crypto library.

        Tests: crypto/subtle/ec-generate-key-malformed-parameters.html
               crypto/subtle/ecdh-generate-key-extractable.html
               crypto/subtle/ecdh-generate-key-p256.html
               crypto/subtle/ecdh-generate-key-p384.html
               crypto/subtle/ecdh-generate-key-single-usage.html
               crypto/workers/subtle/ec-generate-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoKeyCustom.cpp:
        (WebCore::JSCryptoKey::algorithm):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        Add support for ECDH.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        Structured clonable will be added later on.
        * crypto/CommonCryptoUtilities.h:
        Add SPI for EC.
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp: Added.
        (WebCore::CryptoAlgorithmECDH::create):
        (WebCore::CryptoAlgorithmECDH::identifier):
        (WebCore::CryptoAlgorithmECDH::generateKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h: Added.
        * crypto/gnutls/CryptoKeyECGnuTLS.cpp: Added.
        (WebCore::CryptoKeyEC::~CryptoKeyEC):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        * crypto/keys/CryptoKeyEC.cpp: Added.
        (WebCore::CryptoKeyEC::CryptoKeyEC):
        (WebCore::CryptoKeyEC::generatePair):
        (WebCore::CryptoKeyEC::buildAlgorithm):
        (WebCore::CryptoKeyEC::exportData):
        * crypto/keys/CryptoKeyEC.h: Added.
        (WebCore::EcKeyAlgorithm::EcKeyAlgorithm):
        (WebCore::EcKeyAlgorithm::namedCurve):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Add support for ECDH.
        * crypto/mac/CryptoKeyECMac.cpp: Added.
        (WebCore::CryptoKeyEC::~CryptoKeyEC):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h: Added.
        * crypto/parameters/EcKeyParams.idl: Added.

2017-03-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused parameter warning after r213464

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Take advantage of fast permissions switching of JIT memory for devices that support it
        https://bugs.webkit.org/show_bug.cgi?id=169155

        Reviewed by Saam Barati.

        Updated the Xcode config files to match what is in the JavaScriptCore ones.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebCore.xcconfig:

2017-03-06  Aakash Jain  <aakash_jain@apple.com>

        Make WKMenuItemIdentifiersPrivate.h private header
        https://bugs.webkit.org/show_bug.cgi?id=168981

        Reviewed by Tim Horton.

        * platform/spi/mac/NSMenuSPI.h: NSUserInterfaceItemIdentification is in the public header in recent SDKs.

2017-03-06  Dave Hyatt  <hyatt@apple.com>

        REGRESSION: Block no longer shrinks to preferred width in this flex box layout
        https://bugs.webkit.org/show_bug.cgi?id=169203
        <rdar://problem/30873895>

        Reviewed by Simon Fraser.

        Added new test in css3/flexbox.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustStyleForAlignment):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        Resolve auto alignment values by adjusting the render style as needed. Make a helper
        function for adjusting only alignment that can be called from the inner text control
        custom style creation.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild):
        Replaced items in grids should not stretch by default.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasStretchedLogicalWidth):
        Patched to properly check the default alignment for the child, making sure
        that if it's a replacd item inside a grid, that the default is start and not
        stretch.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::selfAlignmentNormalBehavior):
        Self-alignment function now takes an optional child argument, since the behavior
        varies in grids depending on the child being replaced or not.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignmentForChild):
        Fixed to do the right thing when the child is anonymous.

        (WebCore::RenderFlexibleBox::styleDidChange): Deleted.
        * rendering/RenderFlexibleBox.h:
        Deleted, since alignment changes are handled at the style diff level now.

        * rendering/RenderFullScreen.h:
        Patched the selfAlignmentNormalBehavior method to take an optional child argument.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::styleDidChange):
        (WebCore::RenderGrid::alignSelfForChild):
        (WebCore::RenderGrid::justifySelfForChild):
        (WebCore::RenderGrid::columnAxisPositionForChild):
        (WebCore::RenderGrid::rowAxisPositionForChild):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::defaultAlignmentIsStretch): Deleted.
        (WebCore::defaultAlignmentChangedToStretchInRowAxis): Deleted.
        (WebCore::defaultAlignmentChangedFromStretchInRowAxis): Deleted.
        (WebCore::defaultAlignmentChangedFromStretchInColumnAxis): Deleted.
        (WebCore::selfAlignmentChangedToStretchInRowAxis): Deleted.
        (WebCore::selfAlignmentChangedFromStretchInRowAxis): Deleted.
        (WebCore::selfAlignmentChangedFromStretchInColumnAxis): Deleted.
        * rendering/RenderGrid.h:
        Removed the alignment change logic in styleDidChange for grids, since style diffing handles
        it now. Updated all selfAlignmentForNormalBehavior queries to pass in the child so that
        replaced elements are handled properly.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::overflowInlineDirection):
        (WebCore::RenderStyle::overflowBlockDirection):
        (WebCore::RenderStyle::setJustifySelfPosition):
        New helpers used by grid and by adjustRenderStyle.

        * style/StyleChange.cpp:
        (WebCore::Style::determineChange):
        If alignment or justification changes occur on a parent that could affect the child (e.g., align-items)
        return Inherit so the child render styles get adjusted properly.

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

        ASSERTION FAILED: numberOfChannels == 2 in WebCore::RealtimeIncomingAudioSource::OnData
        https://bugs.webkit.org/show_bug.cgi?id=169224
        <rdar://problem/30856811>

        Reviewed by Alex Christensen.

        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData): Updated assertion to allow 1 channel since we can handle it as well.

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

        [iOS] Throttle CSS animations to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=169138
        <rdar://problem/30837805>

        Reviewed by Said Abou-Hallawa.

        Throttle software CSS animations to 30fps in low power mode on iOS
        to save battery.

        Test: fast/animation/css-animation-throttling-lowPowerMode.html

        * page/Page.cpp:
        (WebCore::Page::handleLowModePowerChange):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::CSSAnimationControllerPrivate):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimer):
        (WebCore::CSSAnimationControllerPrivate::updateThrottlingState):
        (WebCore::CSSAnimationControllerPrivate::animationInterval):
        (WebCore::CSSAnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::CSSAnimationControllerPrivate::beginAnimationUpdate):
        (WebCore::CSSAnimationController::updateThrottlingState):
        (WebCore::CSSAnimationController::animationInterval):
        * page/animation/CSSAnimationController.h:
        * page/animation/CSSAnimationControllerPrivate.h:
        * testing/Internals.cpp:
        (WebCore::Internals::animationsInterval):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Media: notify clients when the user never plays a media element that was prevented from auto-playing
        https://bugs.webkit.org/show_bug.cgi?id=169150

        Reviewed by Alex Christensen.

        Added API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        * page/AutoplayEvent.h:

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

        Refactor ContentExtensionParser
        https://bugs.webkit.org/show_bug.cgi?id=169214

        Reviewed by Brady Eidson.

        No change in behavior, as verified by existing API tests.
        This will make it easier to use getStringList for other things in coming patches.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getStringList):
        (WebCore::ContentExtensions::getDomainList):

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

        Fix URLs relative to file URLs with paths beginning with Windows drive letters
        https://bugs.webkit.org/show_bug.cgi?id=169178

        Reviewed by Tim Horton.

        Windows drives in file URLs can begin with windows drive letters, such as file:///C:/
        which should not be removed when making other URLs relative to them.
        See https://url.spec.whatwg.org/#file-slash-state

        Covered by new API tests and newly passing web-platform-tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::copyBaseWindowsDriveLetter):
        (WebCore::URLParser::copyASCIIStringUntil):
        (WebCore::URLParser::parse):
        * platform/URLParser.h:

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

        Only use layer backing store which supports subpixel antialiased text if we know subpixel antialiased will be painted into it
        https://bugs.webkit.org/show_bug.cgi?id=169191

        Reviewed by Zalan Bujtas.

        Instead of unconditionally calling setSupportsSubpixelAntialiasedText() on GraphicsLayers created
        by RenderLayerBacking, only do so when we know (or suspect) that a layer contains smoothed text.
        
        This is done by enhancing RenderLayer::isVisuallyNonEmpty() and RenderLayer::hasNonEmptyChildRenderers()
        to take a PaintedContentRequest parameter, which allows the caller to specify what qualities of
        the layer contents it is interested in. Most of the time, this is just any painted content, but on
        platforms where GraphicsLayer::supportsSubpixelAntialiasedLayerText() returns true, the query also
        asks about whether the layer will contain subpixel-antialiased text. In this case, it can't early
        return as soon as painted content is found; it must keep iterating renderers while all the query 
        requests are unsatisfied, or until it hits depth or sibling limits. If a limit is hit, we take the
        same path of assuming there is subpixel-antialiased text (via the "Undetermined" state).

        RenderLayerBacking also makes use of PaintedContentRequest during its non-composited child layer walk.

        To offset the additional cost of this tree walking, RenderLayerBacking now caches information about its
        painted content for the duration of a single update via PaintedContentsInfo, so we no longer call
        isDirectlyCompositedImage() and isSimpleContainerCompositingLayer() multiple times per backing per update.
        The traversal code here too now has to continue until all necessary states in the request have been computed.
        
        Add some functions to RenderImage so that we know if it's showing the alt text or has a non-bitmap image
        (which may contain text).
        
        Subpixel-antialiased ("smoothed") text is disabled by DRT and WTR by default, so we need Internals API to enable it.
        
        Platforms now express their support for subpixel-antialiased text via GraphicsLayer::supportsSubpixelAntialiasedLayerText()
        which only returns true on Mac.

        Tests: compositing/contents-format/subpixel-antialiased-text-configs-antialiasing-style.html
               compositing/contents-format/subpixel-antialiased-text-configs.html
               compositing/contents-format/subpixel-antialiased-text-images.html
               compositing/contents-format/subpixel-antialiased-text-visibility.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::supportsSubpixelAntialiasedLayerText):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::supportsSubpixelAntialiasedLayerText):
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isShowingMissingOrImageError):
        (WebCore::RenderImage::isShowingAltText):
        (WebCore::RenderImage::hasNonBitmapImage):
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::PaintedContentsInfo::PaintedContentsInfo):
        (WebCore::PaintedContentsInfo::setWantsSubpixelAntialiasedTextState):
        (WebCore::PaintedContentsInfo::paintsBoxDecorations):
        (WebCore::PaintedContentsInfo::paintsContent):
        (WebCore::PaintedContentsInfo::paintsSubpixelAntialiasedText):
        (WebCore::PaintedContentsInfo::isSimpleContainer):
        (WebCore::PaintedContentsInfo::isDirectlyCompositedImage):
        (WebCore::PaintedContentsInfo::paintsBoxDecorationsDetermination):
        (WebCore::PaintedContentsInfo::paintsContentDetermination):
        (WebCore::PaintedContentsInfo::paintsSubpixelAntialiasedTextDetermination):
        (WebCore::PaintedContentsInfo::contentsTypeDetermination):
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBoxDecorations):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::RenderLayerBacking::paintsContent):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendantLayers):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositedDescendants):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::RenderLayerBacking::paintsChildRenderers): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * testing/Internals.cpp:
        (WebCore::Internals::setFontSmoothingEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Expand font-weight and font-stretch to take any number
        https://bugs.webkit.org/show_bug.cgi?id=168889

        Reviewed by Simon Fraser.

        This patch expands parsing support for font-weight and font-stretch so that they can accept
        numbers in addition to the keyword values they accepted previously. Eventually, these numbers
        will be used as inputs to select variation fonts; however, in this patch, the values are just
        parsed and held in our internal data model. This means that this patch doesn't actually change
        the general behavior of WebKit; instead, it parses new values, outputs them (via
        getComputedStyle() and similar functions), and provides them as input to our preexisting font
        selection algorithm. 

        This patch doesn't actually modify anything algorithmically, and therefore, it doesn't include
        any additional tests for the font selection algorithm. Instead, it tests the parsing of the
        newly accepted values (both input and output).

        Because our internal data model needs to hold numbers now, this patch also completely eliminates
        the FontWidth, FontItalic, and FontTraitsMask enum values in favor of FontSelectionValues (which
        can hold numbers instead of individual enum values). Therefore, every place which we were using
        these enum values is migrated in this patch to using FontSelectionValues instead.

        Tests: fast/text/font-selection-font-face-parse.html
               fast/text/font-selection-font-loading-api-parse.html
               fast/text/font-style-parse.html
               fast/text/font-weight-parse.html

        * accessibility/AccessibilityRenderObject.cpp: Migrate off of old enum types.
        (WebCore::AccessibilityRenderObject::hasBoldFont):
        (WebCore::AccessibilityRenderObject::hasItalicFont):
        (WebCore::AccessibilityRenderObject::hasPlainText):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: Ditto.
        (getAttributeSetForAccessibilityObject):
        * css/CSSComputedStyleDeclaration.cpp: Output newly parsed values.
        (WebCore::fontWeightFromStyle):
        (WebCore::fontStretchFromStyle):
        (WebCore::fontStyleFromStyle):
        (WebCore::fontShorthandValueForSelectionProperties):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontFace.cpp: Migrate off old enum types.
        (WebCore::calculateWeightRange):
        (WebCore::CSSFontFace::setWeight):
        (WebCore::calculateStretchRange):
        (WebCore::CSSFontFace::setStretch):
        (WebCore::calculateStyleRange):
        (WebCore::CSSFontFace::setStyle):
        (WebCore::CSSFontFace::calculateStyleMask): Deleted.
        (WebCore::CSSFontFace::calculateWeightMask): Deleted.
        (WebCore::CSSFontFace::calculateStretch): Deleted.
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp: Migrate off old enum types.
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        (WebCore::calculateWeightValue):
        (WebCore::calculateStretchValue):
        (WebCore::calculateStyleValue):
        (WebCore::computeFontSelectionRequest):
        (WebCore::CSSFontFaceSet::matchingFaces):
        (WebCore::CSSFontFaceSet::fontFace):
        (WebCore::computeFontTraitsMask): Deleted.
        (WebCore::computeFontStretch): Deleted.
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp: Migrate off old enum types.
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSPrimitiveValueMappings.h: font-weight and font-style are no longer
        keyword properties.
        (WebCore::CSSPrimitiveValue::operator FontWeight): Deleted.
        (WebCore::CSSPrimitiveValue::operator FontItalic): Deleted.
        * css/CSSProperties.json: Use the same infrastructure for all three of the
        font selection properties.
        * css/CSSSegmentedFontFace.cpp: Migrate off old enum types.
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * css/CSSValueKeywords.in: The 100-based font-weight values are now represented
        as real numbers.
        * css/FontFace.cpp: Update the string output functions for the new values.
        (WebCore::rangeIsSingleValue):
        (WebCore::FontFace::style):
        (WebCore::FontFace::weight):
        (WebCore::FontFace::stretch):
        * css/StyleBuilderConverter.h: Use CSSValue conversion functions to convert
        to our new data model.
        (WebCore::StyleBuilderConverter::convertFontWeight):
        (WebCore::StyleBuilderConverter::convertFontStretch):
        (WebCore::StyleBuilderConverter::convertFontStyle):
        * css/StyleBuilderCustom.h: font-weight is no longer a completely custom
        property.
        (WebCore::StyleBuilderCustom::applyInitialFontWeight): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritFontWeight): Deleted.
        (WebCore::StyleBuilderCustom::applyValueFontWeight): Deleted.
        * css/parser/CSSParserFastPaths.cpp: font-style is no longer a keyword property.
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp: Parse the new values in the font selection
        properties.
        (WebCore::consumeFontWeightKeywordValue):
        (WebCore::consumeFontWeightCSS21):
        (WebCore::consumeFontWeight):
        (WebCore::consumeFontStyleKeywordValue):
        (WebCore::consumeFontStyle):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeSystemFont):
        (WebCore::CSSPropertyParser::consumeFont):
        * editing/EditingStyle.cpp: Migrate off old enum types.
        (WebCore::fontWeightIsBold):
        * editing/mac/EditorMac.mm: Ditto.
        (WebCore::Editor::applyFontStyles):
        * platform/graphics/FontCache.h: Unify our font selection values into
        their enclosing struct, FontSelectionCapabilities. Also, clean up utility
        functions.
        * platform/graphics/FontCascade.cpp: Migrate off old enum types.
        (WebCore::FontCascade::FontCascade):
        * platform/graphics/FontCascade.h: Ditto.
        (WebCore::FontCascade::italic):
        (WebCore::FontCascade::weight):
        * platform/graphics/FontDescription.cpp: Ditto.
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontCascadeDescription::lighterWeight):
        (WebCore::FontCascadeDescription::bolderWeight):
        (WebCore::FontDescription::traitsMask): Deleted.
        * platform/graphics/FontDescription.h: Migrate off old enum types.
        (WebCore::FontDescription::italic):
        (WebCore::FontDescription::stretch):
        (WebCore::FontDescription::weight):
        (WebCore::FontDescription::fontSelectionRequest):
        (WebCore::FontDescription::computedPixelSize):
        (WebCore::FontDescription::setItalic):
        (WebCore::FontDescription::setStretch):
        (WebCore::FontDescription::setIsItalic):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::lighterWeight):
        (WebCore::FontCascadeDescription::bolderWeight):
        (WebCore::FontCascadeDescription::initialItalic):
        (WebCore::FontCascadeDescription::initialWeight):
        (WebCore::FontCascadeDescription::initialStretch):
        * platform/graphics/FontSelectionAlgorithm.cpp: Delete code which was only
        present to convert from the old enum types to the new FontSelectionRequest
        type.
        (WebCore::fontSelectionRequestForTraitsMask): Deleted.
        (WebCore::initialFontSelectionCapabilitiesForTraitsMask): Deleted.
        (WebCore::fontSelectionCapabilitiesForTraitsMask): Deleted.
        * platform/graphics/FontSelectionAlgorithm.h: Migrate to new named functions
        for special values.
        (WebCore::isItalic):
        (WebCore::boldWeightValue):
        (WebCore::normalWeightValue):
        (WebCore::isFontWeightBold):
        (WebCore::normalStretchValue):
        (WebCore::FontSelectionRequest::FontSelectionRequest):
        * platform/graphics/cocoa/FontCacheCoreText.cpp: Migrate all platforms which
        compile this file to know about FontDatabase. This simplifies the interaction
        between @font-face fonts and installed fonts. Also, migrate off old enum types.
        (WebCore::stretchFromCoreTextTraits):
        (WebCore::fontWeightFromCoreText):
        (WebCore::capabilitiesForFontDescriptor):
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::invalidateFontCache):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::lookupFallbackFont):
        (WebCore::toTraitsMask): Deleted.
        (WebCore::isFontWeightBold): Deleted.
        (WebCore::toCoreTextFontWeight): Deleted.
        (): Deleted.
        (WebCore::FontDatabase::capabilitiesForFontDescriptor): Deleted.
        (WebCore::calculateFontSelectionRequest): Deleted.
        * platform/graphics/freetype/FontCacheFreeType.cpp: Migrate off old enum types.
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
        (WebCore::fontWeightToFontconfigWeight):
        (): Deleted.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Ditto.
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/ios/FontCacheIOS.mm: Ditto.
        (WebCore::baseSystemFontDescriptor):
        (WebCore::systemFontModificationAttributes):
        (WebCore::systemFontDescriptor):
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::FontCache::weightOfCTFont): Deleted.
        * platform/graphics/mac/FontCacheMac.mm: Ditto.
        (WebCore::toNSFontWeight):
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/win/FontCacheWin.cpp: Ditto.
        (WebCore::toGDIFontWeight):
        (WebCore::traitsInFamilyEnumProc):
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
        (): Deleted.
        * platform/mock/MockRealtimeVideoSource.cpp: Ditto.
        (WebCore::MockRealtimeVideoSource::applySize):
        * platform/text/TextFlags.h: Delete old enum types.
        * platform/win/DragImageWin.cpp: Migrate off old enum types.
        (WebCore::dragLabelFont):
        * rendering/RenderEmbeddedObject.cpp: Ditto.
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderThemeGtk.cpp: Ditto.
        (WebCore::RenderThemeGtk::updateCachedSystemFontDescription):
        * rendering/RenderThemeIOS.mm: Ditto.
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        * rendering/RenderThemeMac.mm: Ditto.
        (WebCore::toFontWeight):
        * rendering/RenderThemeWin.cpp: Ditto.
        (WebCore::fillFontDescription):

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

        [iOS] Disable autoplay of silent videos in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168985
        <rdar://problem/30739051>

        Reviewed by Jer Noble.

        Disable autoplay of silent videos in low power mode on iOS to save battery.
        We force the display of the start button when denying autoplay in low power
        mode to allow the user to start playback.

        Test: media/modern-media-controls/start-support/start-support-lowPowerMode.html

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::shouldForceControlsDisplay):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        Add shouldForceControlsDisplay property on MediaControlsHost. This property
        is set to true when we want to force the display for media controls. Currently,
        this only returns true for autoplay videos, while in low power mode.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype._updateControls):
        Take into consideration MediaControlsHost.shouldForceControlsDisplay when
        initializing shouldShowControls variable.

        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport.prototype._shouldShowStartButton):
        Show the start button when MediaControlsHost.shouldForceControlsDisplay
        returns true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        Add MediaElementSession::RequireUserGestureForVideoDueToLowPowerMode restriction
        to the session when low power mode is enabled so we know we need to force a
        gesture to start playback of autoplay videos.

        (WebCore::HTMLMediaElement::shouldForceControlsDisplay):
        Add convenience function to decide if we should force display of media controls.
        This returns true if the media element is a video with autoplay attribute and
        its session has the MediaElementSession::RequireUserGestureForVideoDueToLowPowerMode
        restriction (i.e. we are in low power mode).

        (WebCore::HTMLMediaElement::configureMediaControls):
        Force requireControls variable to true if shouldForceControlsDisplay() returns
        true. We do this here instead of inside HTMLMediaElement::controls() because
        we do not want to change the value of media.controls exposed to JavaScript.

        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture):
        Add MediaElementSession::RequireUserGestureForVideoDueToLowPowerMode to the list
        of restrictions that get removed on user gesture.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        Deny playback for videos that have the RequireUserGestureForVideoDueToLowPowerMode
        restriction unless there is a user gesture.

        * html/MediaElementSession.h:
        Add new MediaElementSession::RequireUserGestureForVideoDueToLowPowerMode
        restriction.

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

        LayoutTest fast/dom/timer-throttling-hidden-page.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=168927

        Reviewed by Simon Fraser.

        Update internals.isTimerThrottled() to return true for any kind of throttling.
        It used to only account only for specific timers that do not cause changes
        inside the viewport. It now accounts for all kind of throttling, such as
        timer alignment due to the page being hidden.

        * page/DOMTimer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isTimerThrottled):

2017-03-06  Dave Hyatt  <hyatt@apple.com>

        Enable fieldsets to be flexboxes, grids and multicolumn.
        https://bugs.webkit.org/show_bug.cgi?id=169082

        Reviewed by Simon Fraser .

        Added new tests in fast/forms/fieldset.

        This patch eliminates RenderFieldset and moves the functionality into RenderBlock so that
        derived classes can also be fieldsets.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove RenderFieldset from the project.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::titleUIElement):
        Call in to RenderBlock now instead of RenderFieldset.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::createElementRenderer):
        * html/HTMLFieldSetElement.h:
        The fieldset DOM element now uses RenderElement::createFor to make renderers so that multiple display types
        can be supported. A special flag has been added that indicates only to make flexbox and block-related
        renderers (not table display types).

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::shouldSkipChild):
        (WebCore::OrderIteratorPopulator::collectChild):
        * rendering/OrderIterator.h:
        Streamline child collection for flexboxes and grids to indicate whether the child should be skipped as a return
        value from collectChild. Add a shouldSkipChild method that skips both out of flow positioned objects and
        excluded children like the legends of fieldsets.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        When the legend is taller than the fieldset's borderBefore(), intrinsic border is added to the CSS border width.
        This intrinsic border being factored in ensures that the padding and content boxes of fieldsets are correct
        across any layout system, since the legend is now just treated as part of the border.

        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        Call the new computePreferredWidthsForExcludedChildren to ensure that excluded children contribute to
        preferred width in their own way and not as part of a specific layout system.

        (WebCore::RenderBlock::renderName):
        Hacked to still return RenderFieldSet for RenderBlockFlow-backed fieldsets for layout test compatibility.

        (WebCore::RenderBlock::layoutExcludedChildren):
        Renamed from layoutSpecialExcludedChild to more accurately reflect the fact that multiple excluded children
        can be included here (e.g., both a multicolumn flow thread and a legend). The RenderBlock base class handles
        the layout of legends by both placing them and setting the correct intrinsic border before amount on the
        block.

        (WebCore::RenderBlock::findFieldsetLegend):
        Moved from RenderFieldset.

        (WebCore::RenderBlock::adjustBorderBoxRectForPainting):
        (WebCore::RenderBlock::paintRectToClipOutFromBorder):
        These methods are used when painting to shrink the border box as needed to account for the legend and to
        provide the portion of the border that needs to be clipped out. These methods have been enhanced to
        properly support all writing modes.

        (WebCore::RenderBlock::intrinsicBorderForFieldset):
        (WebCore::RenderBlock::setIntrinsicBorderForFieldset):
        (WebCore::RenderBlock::borderTop):
        (WebCore::RenderBlock::borderLeft):
        (WebCore::RenderBlock::borderBottom):
        (WebCore::RenderBlock::borderRight):
        (WebCore::RenderBlock::borderBefore):
        These methods are overridden for border to ensure that the intrinsic border added by a tall legend is
        properly factored in.

        (WebCore::RenderBlock::computePreferredWidthsForExcludedChildren):
        * rendering/RenderBlock.h:
        This method computes the preferred widths for legend children in order to ensure that the legend properly
        grows the width of the fieldset when it is the widest item.

        (WebCore::RenderBlock::adjustBorderBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBlock::adjustContentBoxLogicalHeightForBoxSizing):
        Preserve the behavior of fieldsets in that the available content size includes the space lost accounting
        for the legend. I don't think this makes much sense, but it matches the behavior of other browsers
        (and our old behavior).

        (WebCore::RenderBlock::paintExcludedChildrenInBorder):
        Method for painting the excluded children that might be present in our border. We only do this if the
        paint phase is a box decoration painting phase and if the legend isn't self-painting.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns):
        Allow fieldsets to create columns now.

        (WebCore::RenderBlockFlow::layoutBlockChildren):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        Renamed this method and change it to call the base class to ensure that legends in multicolumn fieldsets
        get handled properly.

        (WebCore::RenderBlockFlow::addChild):
        Patched to make sure legends don't get put into the multicolumn flow thread, as they need to
        remain outside of it.

        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild): Deleted.
        Renamed to layoutExcludedChildren.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        Patched to call the new adjustBorderBoxRectForPainting and paintRectToClipOutFromBorder methods in
        order to properly shrink the border box rect for painting and to clip out the portion of the border
        covered by the legend.

        (WebCore::RenderBox::avoidsFloats):
        Add fieldsets as avoiding floats. RenderFieldset used to subclass this method to return true, but with
        its removal, we need to put this in the base class along with legends.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem):
        (WebCore::RenderBox::isFlexItem):
        Patched to exclude legends so that they don't try to size like they are really in the grid or flexbox.

        (WebCore::RenderBox::adjustBorderBoxRectForPainting):
        This method is overridden by RenderBLock to handle adjusting fieldset border rects for painting.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::paintRectToClipOutFromBorder):
        Patched to properly paint fieldsets using the new helpers.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        Make sure deprecated flexible boxes lay out their legends properly by calling layoutExcludedChildren.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        Patched to take a flag that limits what renderers can be created so that fieldsets don't make table
        display types.

        * rendering/RenderFieldset.cpp: Removed.
        * rendering/RenderFieldset.h: Removed.
        Remove RenderFieldset files from the tree.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderFlexibleBox::firstLineBaseline):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins):
        Make sure flexible boxes lay out their legends properly by calling layoutExcludedChildren.
        Patch methods to use the OrderIterator's new shouldSkipChild method to ensure legends aren't
        part of the flexible box layout.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::layoutGridItems):
        Make sure grids lay out their legends properly by calling layoutExcludedChildren.
        Patch methods to use the OrderIterator's new shouldSkipChild method to ensure legends aren't
        part of the grid's layout.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::populate):
        Pull legends back up into the block and don't let them be part of the flow thread.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::requiresBalancing):
        Fix an assert to allow legends to exist as siblings of multicolumn sets.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isFieldset):
        Changed to examine the HTML element rather than RenderFieldset.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isExcludedFromNormalLayout):
        (WebCore::RenderObject::setIsExcludedFromNormalLayout):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        RenderObjects now have a new bit that is set for excluded objects like legends, flow threads,
        placeholders, and ruby text. This bit lets code easily detect that an object is excluded from
        the layout system and can be skipped.

        (WebCore::RenderObject::isExcludedAndPlacedInBorder):
        Helper method for asking if an object is painting inside the border. Used to know we
        need to factor it into preferred width calculations outside of any one layout system
        and also to know that we need to paint it when we paint the fieldset's border instead of
        later (after we might have scrolled or clipped the child painting area).

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutExcludedChildren):
        (WebCore::RenderRubyRun::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderRubyRun.h:
        Rename layoutSpecialExcludedChild to layoutExcludedChildren.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::adjustBorderBoxRectForPainting):
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::paintMask):
        (WebCore::RenderTable::subtractCaptionRect): Deleted.
        * rendering/RenderTable.h:
        Patched tables to share the same border box rect adjustment used by fieldsets when subtracting
        out captions. This is prep work to allow tables to be fieldsets, but for now I didn't go all the
        way.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        Make sure table cells adjust their border box rects for painting. Again this is prep work for
        cells potentially being fieldsets, but not supported yet.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::layoutExcludedChildren):
        (WebCore::RenderTextControl::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::layoutExcludedChildren):
        (WebCore::RenderTextControlMultiLine::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderTextControlMultiLine.h:
        Renamed the methods for doing the excluded child layout.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        Make sure to dump the original fieldset border and not the border with the extra legend stuff in it.

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

        [Modern Media Controls] Tracks panel should clip and scroll content when numerous tracks are available
        https://bugs.webkit.org/show_bug.cgi?id=169201
        <rdar://problem/30867979>

        Reviewed by Eric Carlson.

        We now position and size the tracks panel dynamically and ensure a max-height is applied
        to the panel so that it allows a margin of 10px above it within the media controls. We also
        apply that same max-height to a new intermediary scrollable container for the track lists,
        so that it scrolls independently of the container and the background tint.

        Test: media/modern-media-controls/tracks-panel/tracks-panel-position-and-size.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.showTracksPanel): Deleted.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline .volume.slider):
        (.media-controls.mac.inline .tracks-panel): Deleted.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.showTracksPanel): Deleted.
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.showTracksPanel):
        * Modules/modern-media-controls/controls/tracks-panel.css:
        (.tracks-panel > .background-tint > div,):
        (.tracks-panel > .scrollable-container):
        (.tracks-panel section):
        (.tracks-panel section:first-of-type):
        (.tracks-panel section > h3):
        (.tracks-panel section > ul):
        (.tracks-panel section > ul > li):
        (.tracks-panel section > ul > li:focus):
        (.tracks-panel section > ul > li.selected:before):
        (.tracks-panel section > ul > li.animated):
        (.tracks-panel > .background-tint > div): Deleted.
        (.tracks-panel > section): Deleted.
        (.tracks-panel > section:first-of-type): Deleted.
        (.tracks-panel > section > h3): Deleted.
        (.tracks-panel > section > ul): Deleted.
        (.tracks-panel > section > ul > li): Deleted.
        (.tracks-panel > section > ul > li:focus): Deleted.
        (.tracks-panel > section > ul > li.selected:before): Deleted.
        (.tracks-panel > section > ul > li.animated): Deleted.
        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype.presentInParent):
        (TracksPanel.prototype.get maxHeight):
        (TracksPanel.prototype.set maxHeight):
        (TracksPanel.prototype.commitProperty):
        (TracksPanel.prototype._childrenFromDataSource):

2017-03-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Stretch should grow and shrink items to fit its grid area
        https://bugs.webkit.org/show_bug.cgi?id=163200

        Reviewed by Darin Adler.

        After some discussions the CSS WG agreed that stretch should not only
        grow items, but also shrink them to fit its grid area.
        That way the "min-width|height: auto" is somehow ignored for grid items.
        More info at: https://github.com/w3c/csswg-drafts/issues/283

        The good part is that this allows us to remove some ugly code we've
        in RenderBox that was only used by Grid Layout.

        For images, we'll be stretching on both axis right now, so the aspect
        ratio won't be preserved. The default behavior might change in those
        cases, but that should be implemented in a different patch.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalHeight):

2017-03-06  Miguel Gomez  <magomez@igalia.com>

        [GTK] WebProcess from WebKitGtk+ 2.15.x SIGSEVs in GIFLZWContext::doLZW(unsigned char const*, unsigned long) at Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:303
        https://bugs.webkit.org/show_bug.cgi?id=167304

        Reviewed by Carlos Garcia Campos.

        Add a lock to ensure that the GIFImageReader that we are using for decoding is not deleted while
        the decoding thread is using it.

        No new tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):

2017-03-06  Antti Koivisto  <antti@apple.com>

        Allow render tree building before loading stylesheet elements
        https://bugs.webkit.org/show_bug.cgi?id=169079
        <rdar://problem/30865709>

        Reviewed by Andreas Kling.

        Currently we don't resolve style or construct renderers if there are any pending
        stylesheet loads. This patch enables style and renderer constuction up to the
        first encountered loading style element.

        This is a step toward allowing incremental rendering for in-body stylesheets.

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

            Ensure scrolling to anchor eventually happens.

        * dom/Document.h:
        (WebCore::Document::isIgnoringPendingStylesheets):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::sheetLoaded):
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::removedFrom):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::addPendingSheet):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::addPendingSheet):
        (WebCore::Style::Scope::removePendingSheet):

            Track pending sheet nodes in a map so we can test if a given node has a pending sheet.
            This is also more robust in general.

        (WebCore::Style::Scope::hasProcessingInstructionWithPendingSheet):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * style/StyleScope.h:
        (WebCore::Style::Scope::hasPendingSheet):
        (WebCore::Style::Scope::hasPendingSheets):
        (WebCore::Style::Scope::addPendingSheet): Deleted.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::styleForElement):

            Instead of global test for placeholder construction check the status of the pending sheet flag.

        (WebCore::Style::hasLoadingStylesheet):
        (WebCore::Style::TreeResolver::resolveComposedTree):

            Set a flag when encountering a pending top level sheet during DOM traversal.

        (WebCore::Style::TreeResolver::resolve):
        * style/StyleTreeResolver.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

            Ensure SVG images have layout before getting the size.

2017-03-06  Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        [GStreamer] Adopt nullptr
        https://bugs.webkit.org/show_bug.cgi?id=123438

        Reviewed by Xabier Rodriguez-Calvar.

        To adapt the code to the C++11 standard, all NULL or 0 pointers have been changed to nullptr.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        (WebCore::AudioFileReader::plugDeinterleave):
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        (WebCore::AudioSourceProviderGStreamer::configureAudioBin):
        (WebCore::AudioSourceProviderGStreamer::setClient):
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad):
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcLoop):
        (webKitWebAudioSrcChangeState):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::setEnabled):
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        Removed the unused second argument on processTableOfContentsEntry function.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):
        Removed the unused second argument on this function.
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Removed the unused second argument on processTableOfContentsEntry function.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::setMuted):
        (WebCore::MediaPlayerPrivateGStreamerBase::muted):
        (WebCore::MediaPlayerPrivateGStreamerBase::notifyPlayerOfMute):
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        (WebCore::MediaPlayerPrivateGStreamerBase::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::registerMediaEngine):
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkit_text_combiner_init):
        (webkitTextCombinerPadEvent):
        (webkitTextCombinerRequestNewPad):
        (webkitTextCombinerNew):
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        (webkitTextSinkNew):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_init):
        (webkitVideoSinkProposeAllocation):
        (webkitVideoSinkNew):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::setSelected):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcDispose):
        (webKitWebSrcSetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcChangeState):
        (webKitWebSrcQueryWithParent):
        (webKitWebSrcGetProtocols):
        (StreamingClient::handleResponseReceived):
        (StreamingClient::handleDataReceived):
        (ResourceHandleStreamingClient::didFail):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcGetProtocols):

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

        [iOS] Report domains crashing under memory pressure via enhanced privacy logging.
        <https://webkit.org/b/169133>
        <rdar://problem/29964017>

        Reviewed by Antti Koivisto.

        * page/DiagnosticLoggingKeys.h:

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

        Avoid backing store for layers with empty text nodes in a few more cases
        https://bugs.webkit.org/show_bug.cgi?id=169185

        Reviewed by Dan Bernstein.

        In hasPaintingNonLayerDescendants() we can check whether the RenderText's linesBoundingBox()
        is empty to avoid backing store in a few more cases. Also use containsOnlyWhitespace() rather
        than isAllCollapsibleWhitespace(), because there's no need for backing store for non-selectable
        whitespace text.

        Covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

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

        Drop unnecessary backslash in ResourceResponse::sanitizeSuggestedFilename()
        https://bugs.webkit.org/show_bug.cgi?id=169066

        Reviewed by Sam Weinig.

        Drop unnecessary backslash in ResourceResponse::sanitizeSuggestedFilename().

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename):

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

        Using <form> in <template> causes following <form> to get swallowed
        https://bugs.webkit.org/show_bug.cgi?id=163552

        Reviewed by Sam Weinig.

        As per the HTML specification [1], when finding a "form" tag in the "in body"
        insertion mode, we should insert an HTML element for the token, and, if there
        is no template element on the stack of open elements, set the form element
        pointer to point to the element created.

        We were missing the "if there is no template element on the stack of open
        elements" check and setting the form element pointer unconditionally.
        This patch fixes the issue.

        [1] https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody:form-element-pointer-2

        Test: fast/parser/form-after-template.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):

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

        Update CSSFontSelector's matching algorithm to understand ranges
        https://bugs.webkit.org/show_bug.cgi?id=168892

        Reviewed by Jon Lee.

        This patch migrates the font selection algorithm out of FontCacheCoreText and into its own file which can be shared
        among all ports. It then migrates our web font selection algorithm to use it.

        This patch doesn't actually change the parsing rules; it just changes the internal machinery for how fonts get
        selected. Therefore, this patch simply makes zero-length ranges from the discrete values the parser emits, and passes
        those zero-length ranges to the range-based font selection routine. This means that this patch doesn't actually
        change the results of the font selection algorithm.

        One of the inputs to the new font selection algorithm is font-stretch, which previously was not parsed inside
        @font-face blocks or the CSS Font Loading API. This patch therefore adds parsing support and modifies the existing
        tests for these pieces to expect parsing to work. Because the font selection algorithm itself is shared between
        installed fonts and webfonts, this patch doesn't add any additional tests for it (because it is already covered under
        existing tests).

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj: Add new file for the font selection algorithm.
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::calculateStretch): Used on @font-face blocks and the CSS Font Loading API.
        (WebCore::CSSFontFace::setStretch): Fill out the previously stubbed function.
        * css/CSSFontFace.h: Add the range member variable to CSSFontFaces.
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered): Now that we care about font-stretch, we need to
        look it up for local fonts too. This current approach of an extra FontSelectionValue hanging around with a
        FontTraitsMask is very ugly and will be removed soon (https://bugs.webkit.org/show_bug.cgi?id=168889 and
        https://bugs.webkit.org/show_bug.cgi?id=168890).
        (WebCore::computeFontStretch): Used on @font-face blocks and the CSS Font Loading API.
        (WebCore::CSSFontFaceSet::matchingFaces): Educate about font-stretch.
        (WebCore::CSSFontFaceSet::fontFace): Migrate to the new font-selection algorithm.
        (WebCore::fontFaceComparator): Deleted.
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Educate about font-stretch.
        (WebCore::CSSFontSelector::fontRangesForFamily): Ditto.
        * css/FontFace.cpp:
        (WebCore::FontFace::setStretch): Ditto.
        (WebCore::FontFace::stretch): Ditto.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor): Ditto.
        * platform/graphics/FontCache.h: Ditto.
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontSelectionAlgorithm.cpp: Added.
        (WebCore::FontSelectionAlgorithm::filterCapability):
        (WebCore::FontSelectionAlgorithm::indexOfBestCapabilities):
        (WebCore::fontSelectionRequestForTraitsMask):
        (WebCore::initialFontSelectionCapabilitiesForTraitsMask):
        (WebCore::fontSelectionCapabilitiesForTraitsMask):
        * platform/graphics/FontSelectionAlgorithm.h: Added. Taken from FontCacheCoreText.cpp.
        (WebCore::FontSelectionValue::FontSelectionValue):
        (WebCore::FontSelectionValue::operator float):
        (WebCore::FontSelectionValue::rawValue):
        (WebCore::FontSelectionValue::maximumValue):
        (WebCore::FontSelectionValue::minimumValue):
        (WebCore::FontSelectionValue::operator+):
        (WebCore::FontSelectionValue::operator-):
        (WebCore::FontSelectionValue::operator*):
        (WebCore::FontSelectionValue::operator/):
        (WebCore::FontSelectionValue::operator==):
        (WebCore::FontSelectionValue::operator!=):
        (WebCore::FontSelectionValue::operator<):
        (WebCore::FontSelectionValue::operator<=):
        (WebCore::FontSelectionValue::operator>):
        (WebCore::FontSelectionValue::operator>=):
        (WebCore::FontSelectionRange::isValid):
        (WebCore::FontSelectionRange::expand):
        (WebCore::FontSelectionRange::includes):
        (WebCore::FontSelectionRequest::operator==):
        (WebCore::FontSelectionRequest::operator!=):
        (WebCore::FontSelectionRequestKey::FontSelectionRequestKey):
        (WebCore::FontSelectionRequestKey::isHashTableDeletedValue):
        (WebCore::FontSelectionRequestKey::operator==):
        (WebCore::FontSelectionRequestKeyHash::hash):
        (WebCore::FontSelectionRequestKeyHash::equal):
        (WebCore::FontSelectionCapabilities::expand):
        (WebCore::FontSelectionAlgorithm::FontSelectionAlgorithm):
        (WebCore::FontSelectionAlgorithm::iterateActiveCapabilitiesWithReturn):
        (WebCore::FontSelectionAlgorithm::iterateActiveCapabilities):
        * platform/graphics/cocoa/FontCacheCoreText.cpp: Moved to FontSelectionAlgorithm.
        (WebCore::stretchFromCoreTextTraits):
        (WebCore::FontDatabase::capabilitiesForFontDescriptor):
        (WebCore::findClosestFont):
        (WebCore::calculateFontSelectionRequest):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::FontCache::getTraitsInFamily): Deleted.
        (WebCore::iterateActiveFontsWithReturn): Deleted.
        (WebCore::iterateActiveFonts): Deleted.
        (WebCore::findClosestStretch): Deleted.
        (WebCore::filterStretch): Deleted.
        (WebCore::findClosestStyle): Deleted.
        (WebCore::filterStyle): Deleted.
        (WebCore::findClosestWeight): Deleted.
        (WebCore::filterWeight): Deleted.
        (WebCore::computeTargetWeight): Deleted.
        * platform/text/TextFlags.h: Moved to FontSelectionAlgorithm.
        (WebCore::FontSelectionValue::FontSelectionValue): Deleted.
        (WebCore::FontSelectionValue::operator float): Deleted.
        (WebCore::FontSelectionValue::operator+): Deleted.
        (WebCore::FontSelectionValue::operator-): Deleted.
        (WebCore::FontSelectionValue::operator*): Deleted.
        (WebCore::FontSelectionValue::operator/): Deleted.
        (WebCore::FontSelectionValue::operator==): Deleted.
        (WebCore::FontSelectionValue::operator!=): Deleted.
        (WebCore::FontSelectionValue::operator<): Deleted.
        (WebCore::FontSelectionValue::operator<=): Deleted.
        (WebCore::FontSelectionValue::operator>): Deleted.
        (WebCore::FontSelectionValue::operator>=): Deleted.
        (WebCore::FontSelectionValue::rawValue): Deleted.
        (WebCore::FontSelectionValue::maximumValue): Deleted.
        (WebCore::FontSelectionValue::minimumValue): Deleted.
        (WebCore::FontSelectionRange::isValid): Deleted.
        (WebCore::FontSelectionRange::expand): Deleted.
        (WebCore::FontSelectionRange::includes): Deleted.
        (WebCore::FontSelectionCapabilities::expand): Deleted.

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

        Make some RenderLayer tree traversal in RenderLayerBacking more generic
        https://bugs.webkit.org/show_bug.cgi?id=169177

        Reviewed by Zalan Bujtas.

        The real goal of this patch is reduce the number of callers of
        RenderLayerBacking::isPaintDestinationForDescendantLayers() to one. To achieve that,
        have the setContentsVisible() logic (which is really just about the CSS 'visibility' property)
        do its own tree traversal which just consults layer.hasVisibleContent(). So
        make descendantLayerPaintsIntoAncestor() a generic traversal function which walks
        descendant layers which may paint into the target layer. The "Visible" in the name
        reflects the fact that it can bypass a subtree for a layer with !hasVisibleDescendant().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendantLayers):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositedDescendants):
        (WebCore::descendantLayerPaintsIntoAncestor): Deleted.
        * rendering/RenderLayerBacking.h:

2017-03-04  Simon Fraser  <simon.fraser@apple.com>

        Clarify some terminology in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=169174

        Reviewed by Zalan Bujtas.

        Rename some functions related to directly-composited background images and
        box decorations for clarify.

        Only behavior change is for canDirectlyCompositeBackgroundBackgroundImage() to check
        GraphicsLayer::supportsContentsTiling(), which means that RenderLayerBacking::contentChanged()
        will no longer trigger a updateGeometry() when it gets BackgroundImageChanged on non-
        CoordinateGraphics platforms.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBoxDecorations):
        (WebCore::canDirectlyCompositeBackgroundBackgroundImage):
        (WebCore::hasPaintedBoxDecorationsOrBackgroundImage):
        (WebCore::supportsDirectlyCompositedBoxDecorations):
        (WebCore::RenderLayerBacking::paintsBoxDecorations):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedContents): Deleted.
        (WebCore::canCreateTiledImage): Deleted.
        (WebCore::hasVisibleBoxDecorationsOrBackgroundImage): Deleted.
        (WebCore::supportsDirectBoxDecorationsComposition): Deleted.
        * rendering/RenderLayerBacking.h:

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

        Cleanup after r213418
        https://bugs.webkit.org/show_bug.cgi?id=169165

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData):
        Restore the assertion I removed.

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

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

        broke GTK+ and Windows builds (Requested by mcatanzaro on
        #webkit).

        Reverted changeset:

        "Enable fieldsets to be flexboxes, grids and multicolumn."
        https://bugs.webkit.org/show_bug.cgi?id=169082
        http://trac.webkit.org/changeset/213379

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

        [WebRTC] Update libwebrtc source code
        https://bugs.webkit.org/show_bug.cgi?id=168599

        Reviewed by Alex Christensen.

        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsReport.idl:
        Update to match the latest spec, which matches the new structures in libwebrtc.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillRTCRTPStreamStats):
        (WebCore::fillOutboundRTPStreamStats):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData):
        Comment out an assertion that was failing.  We should revisit this.
        * testing/MockLibWebRTCPeerConnection.h:

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

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

        Caused frequent assertion failures (Requested by ap on
        #webkit).

        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/213400

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

        Add support for canvas.toBlob
        https://bugs.webkit.org/show_bug.cgi?id=148878

        Reviewed by Tim Horton.

        Address additional review feedback received after r213412 landed.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toBlob): Passed null to the blob callback if blob conversion
        fails for any reason.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::cgImage): Removed an unnecessary local variable.

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

        Add support for canvas.toBlob
        https://bugs.webkit.org/show_bug.cgi?id=148878
        <rdar://problem/22590406>

        Reviewed by Tim Horton.

        These tests now pass:
        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/toBlob.jpeg.html
        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/toBlob.png.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobCallback.cpp: Added.
        (WebCore::BlobCallback::scheduleCallback):
        * fileapi/BlobCallback.h: Added.
        (WebCore::BlobCallback::~BlobCallback):
        * fileapi/BlobCallback.idl: Added.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toBlob):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::writeFunction):
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::data):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        (WebCore::ImageBuffer::toCGImage):
        (WebCore::cgImage):
        (WebCore::dataURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::toData):

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

        Add WebGPU compile flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169161
        <rdar://problem/30846689>

        Reviewed by Tim Horton.

        Add ENABLE_WEBGPU, an experimental feature flag, a RuntimeEnabledFeature,
        and an InternalSetting.

        * Configurations/FeatureDefines.xcconfig:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGPUEnabled):
        (WebCore::RuntimeEnabledFeatures::webGPUEnabled):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setWebGPUEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Clean up some RenderLayerBacking code
        https://bugs.webkit.org/show_bug.cgi?id=169160

        Reviewed by Dean Jackson.

        Modern loops in descendantLayerPaintsIntoAncestor().

        Rename RenderLayerBacking::paintsChildren() to RenderLayerBacking::paintsChildRenderers() to clarify that
        it refers to renderers, not RenderLayers.

        Rename RenderLayerBacking::paintsNonDirectCompositedBoxDecoration() to RenderLayerBacking::paintsBoxDecorations().
        "Paints" already implies non-composited.

        No behavior change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::paintsBoxDecorations):
        (WebCore::RenderLayerBacking::paintsChildRenderers):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::descendantLayerPaintsIntoAncestor):
        (WebCore::RenderLayerBacking::paintsNonDirectCompositedBoxDecoration): Deleted.
        (WebCore::RenderLayerBacking::paintsChildren): Deleted.
        * rendering/RenderLayerBacking.h:

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

        Clean up RenderImage and a RenderImageResource function
        https://bugs.webkit.org/show_bug.cgi?id=169153

        Reviewed by Zalan Bujtas.
        
        Change all calls to imageResource().cachedImage() in RenderImage to use the inline
        cachedImage() function.

        In RenderImage::paintReplaced(), early return after the broken image block (and no need
        to test imageResource().hasImage() again in the second condition). Convert height/width to size,
        which also forces us to be explicit about using flooredIntSize() when fetching the image
        (perhaps this should be a roundedIntSize, but I didn't want to change behavior).

        Change RenderImageResource::image() to take an IntSize, rather than int height and width.

        No behavior change.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::image):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::image):
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::image):
        * rendering/RenderImageResourceStyleImage.h:

2017-03-03  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-03  Chris Dumez  <cdumez@apple.com>

        [iOS] Throttle SVG SMIL animations to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=169137
        <rdar://problem/30833754>

        Reviewed by Simon Fraser.

        Throttle SVG SMIL animations to 30fps in low power mode on iOS to save
        battery.

        Test: svg/animations/animations-lowPowerMode-throttling.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.idl:
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::animationFrameDelay):
        (WebCore::SMILTimeContainer::updateDocumentOrderIndexes):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateNextProgressTime):
        * testing/Internals.cpp:
        (WebCore::Internals::svgAnimationsInterval):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-03  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] WebCore.framework is missing a symlink from Frameworks to Versions/Current/Frameworks when the latter exists
        https://bugs.webkit.org/show_bug.cgi?id=169067

        Reviewed by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj:

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

        REGRESSION (r209760): Apple Pay doesn't work on casper.com, shopspring.com, maybe other sites
        <rdar://problem/30313445>
        https://bugs.webkit.org/show_bug.cgi?id=169149

        Reviewed by Simon Fraser.

        Relax restriction that the ApplePayShippingMethod sequence must not be empty. This
        was incorrect.

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

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

        [URLParser] Fix file: as a relative file URL
        https://bugs.webkit.org/show_bug.cgi?id=169122

        Reviewed by Tim Horton.

        This is clearly defined in https://url.spec.whatwg.org/#file-state with the EOF code point.
        I got it wrong and didn't test it.  It's been added to the web platform tests since we last updated.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2017-03-03  Dave Hyatt  <hyatt@apple.com>

        Enable fieldsets to be flexboxes, grids and multicolumn.
        https://bugs.webkit.org/show_bug.cgi?id=169082

        Reviewed by Simon Fraser.

        Added new tests in fast/forms/fieldset.

        This patch eliminates RenderFieldset and moves the functionality into RenderBlock so that
        derived classes can also be fieldsets.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove RenderFieldset from the project.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::titleUIElement):
        Call in to RenderBlock now instead of RenderFieldset.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::createElementRenderer):
        * html/HTMLFieldSetElement.h:
        The fieldset DOM element now uses RenderElement::createFor to make renderers so that multiple display types
        can be supported. A special flag has been added that indicates only to make flexbox and block-related
        renderers (not table display types).

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::shouldSkipChild):
        (WebCore::OrderIteratorPopulator::collectChild):
        * rendering/OrderIterator.h:
        Streamline child collection for flexboxes and grids to indicate whether the child should be skipped as a return
        value from collectChild. Add a shouldSkipChild method that skips both out of flow positioned objects and
        excluded children like the legends of fieldsets.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        When the legend is taller than the fieldset's borderBefore(), intrinsic border is added to the CSS border width.
        This intrinsic border being factored in ensures that the padding and content boxes of fieldsets are correct
        across any layout system, since the legend is now just treated as part of the border.

        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        Call the new computePreferredWidthsForExcludedChildren to ensure that excluded children contribute to
        preferred width in their own way and not as part of a specific layout system.

        (WebCore::RenderBlock::renderName):
        Hacked to still return RenderFieldSet for RenderBlockFlow-backed fieldsets for layout test compatibility.

        (WebCore::RenderBlock::layoutExcludedChildren):
        Renamed from layoutSpecialExcludedChild to more accurately reflect the fact that multiple excluded children
        can be included here (e.g., both a multicolumn flow thread and a legend). The RenderBlock base class handles
        the layout of legends by both placing them and setting the correct intrinsic border before amount on the
        block.

        (WebCore::RenderBlock::findFieldsetLegend):
        Moved from RenderFieldset.

        (WebCore::RenderBlock::adjustBorderBoxRectForPainting):
        (WebCore::RenderBlock::paintRectToClipOutFromBorder):
        These methods are used when painting to shrink the border box as needed to account for the legend and to
        provide the portion of the border that needs to be clipped out. These methods have been enhanced to
        properly support all writing modes.

        (WebCore::RenderBlock::intrinsicBorderForFieldset):
        (WebCore::RenderBlock::setIntrinsicBorderForFieldset):
        (WebCore::RenderBlock::borderTop):
        (WebCore::RenderBlock::borderLeft):
        (WebCore::RenderBlock::borderBottom):
        (WebCore::RenderBlock::borderRight):
        (WebCore::RenderBlock::borderBefore):
        These methods are overridden for border to ensure that the intrinsic border added by a tall legend is
        properly factored in.

        (WebCore::RenderBlock::computePreferredWidthsForExcludedChildren):
        * rendering/RenderBlock.h:
        This method computes the preferred widths for legend children in order to ensure that the legend properly
        grows the width of the fieldset when it is the widest item.

        (WebCore::RenderBlock::adjustBorderBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBlock::adjustContentBoxLogicalHeightForBoxSizing):
        Preserve the behavior of fieldsets in that the available content size includes the space lost accounting
        for the legend. I don't think this makes much sense, but it matches the behavior of other browsers
        (and our old behavior).

        (WebCore::RenderBlock::paintExcludedChildrenInBorder):
        Method for painting the excluded children that might be present in our border. We only do this if the
        paint phase is a box decoration painting phase and if the legend isn't self-painting.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns):
        Allow fieldsets to create columns now.

        (WebCore::RenderBlockFlow::layoutBlockChildren):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        Renamed this method and change it to call the base class to ensure that legends in multicolumn fieldsets
        get handled properly.

        (WebCore::RenderBlockFlow::addChild):
        Patched to make sure legends don't get put into the multicolumn flow thread, as they need to
        remain outside of it.

        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild): Deleted.
        Renamed to layoutExcludedChildren.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        Patched to call the new adjustBorderBoxRectForPainting and paintRectToClipOutFromBorder methods in
        order to properly shrink the border box rect for painting and to clip out the portion of the border
        covered by the legend.

        (WebCore::RenderBox::avoidsFloats):
        Add fieldsets as avoiding floats. RenderFieldset used to subclass this method to return true, but with
        its removal, we need to put this in the base class along with legends.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem):
        (WebCore::RenderBox::isFlexItem):
        Patched to exclude legends so that they don't try to size like they are really in the grid or flexbox.

        (WebCore::RenderBox::adjustBorderBoxRectForPainting):
        This method is overridden by RenderBLock to handle adjusting fieldset border rects for painting.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::paintRectToClipOutFromBorder):
        Patched to properly paint fieldsets using the new helpers.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        Make sure deprecated flexible boxes lay out their legends properly by calling layoutExcludedChildren.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        Patched to take a flag that limits what renderers can be created so that fieldsets don't make table
        display types.

        * rendering/RenderFieldset.cpp: Removed.
        * rendering/RenderFieldset.h: Removed.
        Remove RenderFieldset files from the tree.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderFlexibleBox::firstLineBaseline):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins):
        Make sure flexible boxes lay out their legends properly by calling layoutExcludedChildren.
        Patch methods to use the OrderIterator's new shouldSkipChild method to ensure legends aren't
        part of the flexible box layout.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::layoutGridItems):
        Make sure grids lay out their legends properly by calling layoutExcludedChildren.
        Patch methods to use the OrderIterator's new shouldSkipChild method to ensure legends aren't
        part of the grid's layout.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::populate):
        Pull legends back up into the block and don't let them be part of the flow thread.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::requiresBalancing):
        Fix an assert to allow legends to exist as siblings of multicolumn sets.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isFieldset):
        Changed to examine the HTML element rather than RenderFieldset.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isExcludedFromNormalLayout):
        (WebCore::RenderObject::setIsExcludedFromNormalLayout):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        RenderObjects now have a new bit that is set for excluded objects like legends, flow threads,
        placeholders, and ruby text. This bit lets code easily detect that an object is excluded from
        the layout system and can be skipped.

        (WebCore::RenderObject::isExcludedAndPlacedInBorder):
        Helper method for asking if an object is painting inside the border. Used to know we
        need to factor it into preferred width calculations outside of any one layout system
        and also to know that we need to paint it when we paint the fieldset's border instead of
        later (after we might have scrolled or clipped the child painting area).

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutExcludedChildren):
        (WebCore::RenderRubyRun::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderRubyRun.h:
        Rename layoutSpecialExcludedChild to layoutExcludedChildren.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::adjustBorderBoxRectForPainting):
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::paintMask):
        (WebCore::RenderTable::subtractCaptionRect): Deleted.
        * rendering/RenderTable.h:
        Patched tables to share the same border box rect adjustment used by fieldsets when subtracting
        out captions. This is prep work to allow tables to be fieldsets, but for now I didn't go all the
        way.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        Make sure table cells adjust their border box rects for painting. Again this is prep work for
        cells potentially being fieldsets, but not supported yet.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::layoutExcludedChildren):
        (WebCore::RenderTextControl::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::layoutExcludedChildren):
        (WebCore::RenderTextControlMultiLine::layoutSpecialExcludedChild): Deleted.
        * rendering/RenderTextControlMultiLine.h:
        Renamed the methods for doing the excluded child layout.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        Make sure to dump the original fieldset border and not the border with the extra legend stuff in it.

2017-03-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213344.

        This changed caused LayoutTest crashes under GuardMalloc.

        Reverted changeset:

        "Add support for canvas.toBlob"
        https://bugs.webkit.org/show_bug.cgi?id=148878
        http://trac.webkit.org/changeset/213344

2017-03-03  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed typo fix

        * features.json:

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

        [MediaStream] Remove #if USE(VIDEOTOOLBOX) from AVVideoCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=169131

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::currentFrameCGImage):

2017-03-03  Chris Dumez  <cdumez@apple.com>

        Add assertion in Frame::setView() to make sure associated document has no living render tree
        https://bugs.webkit.org/show_bug.cgi?id=169134

        Reviewed by Brent Fulgham.

        Add assertion in Frame::setView() to make sure associated document has no living render tree.
        This is not supposed to happen and r213311 fixed one case where this could happen. We need
        to find out if it can still happen.

        * page/Frame.cpp:
        (WebCore::Frame::setView):

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

        Rename htmlediting.h/cpp to Editing.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=169103

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/Node.h:
        * dom/Position.cpp:
        * dom/PositionIterator.cpp:
        * dom/Range.cpp:
        * editing/AlternativeTextController.cpp:
        * editing/AppendNodeCommand.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::CreateLinkCommand):
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/EditCommand.cpp:
        * editing/Editing.cpp: Copied from Source/WebCore/editing/htmlediting.cpp.
        * editing/Editing.h: Copied from Source/WebCore/editing/htmlediting.h.
        * editing/EditingAllInOne.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        * editing/EditorCommand.cpp:
        * editing/FormatBlockCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/HTMLInterchange.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertListCommand.cpp:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/ModifySelectionListLevel.cpp:
        * editing/RemoveNodeCommand.cpp:
        * editing/ReplaceNodeWithSpanCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SpellChecker.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisiblePosition.cpp:
        * editing/VisibleSelection.cpp:
        * editing/VisibleUnits.cpp:
        * editing/cocoa/DataDetection.mm:
        * editing/cocoa/EditorCocoa.mm:
        * editing/htmlediting.cpp: Removed.
        * editing/htmlediting.h: Removed.
        * editing/ios/EditorIOS.mm:
        * editing/mac/DictionaryLookup.mm:
        * editing/mac/EditorMac.mm:
        * editing/markup.cpp:
        * html/HTMLTextFormControlElement.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * page/DOMSelection.cpp:
        * page/DragController.cpp:
        * page/EventHandler.cpp:
        * page/FocusController.cpp:
        * page/Frame.cpp:
        * platform/ios/PasteboardIOS.mm:
        * platform/mac/PasteboardMac.mm:
        * rendering/RenderBox.cpp:
        * rendering/RenderObject.cpp:

2017-03-02  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Should be able to push nodes in an iframe subtree to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=169086

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/push-node-by-path-to-frontend.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForPath):
        During top-down document traversal, descend into content document nodes
        when visiting an HTMLFrameOwnerElement.

2017-03-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213274.

        This change caused flakiness with LayoutTest memory/memory-
        pressure-simulation.html

        Reverted changeset:

        "Don't keep dead resources in MemoryCache while under memory
        pressure."
        https://bugs.webkit.org/show_bug.cgi?id=169070
        http://trac.webkit.org/changeset/213274

2017-03-02  Jiewen Tan  <jiewen_tan@apple.com>

        WebCrypto API support for AES-GCM
        https://bugs.webkit.org/show_bug.cgi?id=157175
        <rdar://problem/27311691>

        Reviewed by Brent Fulgham.

        This patch adds support for AES-GCM. Operations of AES-GCM include: encrypt, decrypt, generateKey,
        importKey, exportKey, wrapKey, and unwrapKey. https://www.w3.org/TR/WebCryptoAPI/#aes-gcm

        Tests: crypto/subtle/aes-gcm-decrypt-malformed-parameters.html
               crypto/subtle/aes-gcm-encrypt-malformed-parameters.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-gcm-generate-export-raw-key.html
               crypto/subtle/aes-gcm-generate-key-encrypt-decrypt.html
               crypto/subtle/aes-gcm-generate-key.html
               crypto/subtle/aes-gcm-import-jwk-key-length-128.html
               crypto/subtle/aes-gcm-import-jwk-key-length-192.html
               crypto/subtle/aes-gcm-import-jwk-key-length-256.html
               crypto/subtle/aes-gcm-import-key-decrypt-additional-data-tag-length-32.html
               crypto/subtle/aes-gcm-import-key-decrypt-additional-data.html
               crypto/subtle/aes-gcm-import-key-decrypt-tagLengths.html
               crypto/subtle/aes-gcm-import-key-decrypt.html
               crypto/subtle/aes-gcm-import-key-encrypt-additional-data-tag-length-32.html
               crypto/subtle/aes-gcm-import-key-encrypt-additional-data.html
               crypto/subtle/aes-gcm-import-key-encrypt-tagLengths.html
               crypto/subtle/aes-gcm-import-key-encrypt.html
               crypto/subtle/aes-gcm-import-key-unwrap-jwk-key.html
               crypto/subtle/aes-gcm-import-key-unwrap-raw-key.html
               crypto/subtle/aes-gcm-import-key-wrap-jwk-key.html
               crypto/subtle/aes-gcm-import-key-wrap-raw-key.html
               crypto/subtle/aes-gcm-import-raw-key.html
               crypto/workers/subtle/aes-gcm-import-key-decrypt.html
               crypto/workers/subtle/aes-gcm-import-key-encrypt.html
               crypto/workers/subtle/aes-gcm-import-key-unwrap-key.html
               crypto/workers/subtle/aes-gcm-import-key-wrap-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        Add CryptoAlgorithmAES_CFBMac.cpp as well.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        Add support for AES-GCM.
        * crypto/CommonCryptoUtilities.h:
        Include SPI header for AES-GCM support. We have a mismatch SPI between different OS version.
        Therefore, a guardian is placed.
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp: Added.
        (WebCore::usagesAreInvalidForCryptoAlgorithmAES_GCM):
        (WebCore::tagLengthIsValid):
        (WebCore::CryptoAlgorithmAES_GCM::create):
        (WebCore::CryptoAlgorithmAES_GCM::identifier):
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::generateKey):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        (WebCore::CryptoAlgorithmAES_GCM::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h: Added.
        * crypto/gnutls/CryptoAlgorithmAES_GCMGnuTLS.cpp: Added.
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp: Added.
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/AesGcmParams.idl: Added.
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h: Added.

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

        Add support for canvas.toBlob
        https://bugs.webkit.org/show_bug.cgi?id=148878
        <rdar://problem/22590406>

        Reviewed by Tim Horton.

        These tests now pass:
        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/toBlob.jpeg.html
        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-canvas-element/toBlob.png.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobCallback.cpp: Added.
        (WebCore::BlobCallback::scheduleCallback):
        * fileapi/BlobCallback.h: Added.
        (WebCore::BlobCallback::~BlobCallback):
        * fileapi/BlobCallback.idl: Added.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toBlob):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::writeFunction):
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::data):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        (WebCore::ImageBuffer::toCGImage):
        (WebCore::cgImage):
        (WebCore::dataURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::toData):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::toData):

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

        Migrate font-stretch to use fixed-point values
        https://bugs.webkit.org/show_bug.cgi?id=169107

        Reviewed by Dean Jackson.

        There are a few benefits of using fixed-point values:
        - Not all of the entropy of a float is necessary for font selection. In particular, values are
        expected to stay between around -1000 to 1000, and only need to have a few fractional bits.
        Therefore, the values can be represented by 16-bit fixed point numbers, which includes one sign
        bit and two fractional bits. This is smaller than the 32-bit floating point numbers we were
        using, which means FontDescription can be slimmed down. This becomes even more important when
        the rest of the variation font properties are implemented, since those will use these fixed-
        point values too.
        - Fixed point values have a larger distance between adjacent representable values, which means
        there are more collisions, which means our cache hit rates are higher.

        No new tests because there is no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontStretchFromStyle):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontStretch):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::stretch):
        (WebCore::FontDescription::setStretch):
        (WebCore::FontCascadeDescription::initialStretch):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::defaultFontSelectionValues):
        (WebCore::preparePlatformFont):
        (WebCore::FontDatabase::InstalledFont::InstalledFont):
        (WebCore::FontDatabase::InstalledFontFamily::expand):
        (WebCore::FontDatabase::capabilitiesForFontDescriptor):
        (WebCore::FontDatabase::stretchThreshold):
        (WebCore::FontDatabase::italicThreshold):
        (WebCore::FontDatabase::weightThreshold):
        (WebCore::findClosestStretch):
        (WebCore::filterStretch):
        (WebCore::findClosestStyle):
        (WebCore::filterStyle):
        (WebCore::findClosestWeight):
        (WebCore::filterWeight):
        (WebCore::computeTargetWeight):
        (WebCore::findClosestFont):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        (WebCore::defaultVariationValues): Deleted.
        (WebCore::FontDatabase::Range::Range): Deleted.
        (WebCore::FontDatabase::Range::isValid): Deleted.
        (WebCore::FontDatabase::Range::expand): Deleted.
        (WebCore::FontDatabase::Range::includes): Deleted.
        (): Deleted.
        * platform/text/TextFlags.h:
        (WebCore::FontSelectionValue::FontSelectionValue):
        (WebCore::FontSelectionValue::operator float):
        (WebCore::FontSelectionValue::operator+):
        (WebCore::FontSelectionValue::operator-):
        (WebCore::FontSelectionValue::operator*):
        (WebCore::FontSelectionValue::operator/):
        (WebCore::FontSelectionValue::operator==):
        (WebCore::FontSelectionValue::operator!=):
        (WebCore::FontSelectionValue::operator<):
        (WebCore::FontSelectionValue::operator<=):
        (WebCore::FontSelectionValue::operator>):
        (WebCore::FontSelectionValue::operator>=):
        (WebCore::FontSelectionValue::rawValue):
        (WebCore::FontSelectionRange::isValid):
        (WebCore::FontSelectionRange::expand):
        (WebCore::FontSelectionRange::includes):
        (WebCore::FontSelectionCapabilities::expand):

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

        Modernize ContentExtensionParser
        https://bugs.webkit.org/show_bug.cgi?id=169106

        Reviewed by Andy Estes.

        We were returning std::error_code and passing the return value as a parameter reference.
        because we wrote this code before we had WTF::Expected.

        No change in behavior, verified by many API tests.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionParser.h:
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::ContentExtensionRule::ContentExtensionRule):
        * contentextensions/ContentExtensionRule.h:

2017-03-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213301.

        This change broke internal builds.

        Reverted changeset:

        "WebCrypto API support for AES-GCM"
        https://bugs.webkit.org/show_bug.cgi?id=157175
        http://trac.webkit.org/changeset/213301

2017-03-02  Aakash Jain  <aakash_jain@apple.com>

        Move stringMatchesWildcardString from WebKit2 to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169065

        Reviewed by Alexey Proskuryakov.

        * WebCore.xcodeproj/project.pbxproj: Added StringUtilities.h and StringUtilities.mm
        * PlatformMac.cmake: Added StringUtilities.mm
        * platform/mac/StringUtilities.h: Added.
        * platform/mac/StringUtilities.mm: Added.
        (WebCore::wildcardRegexPatternString): Added.
        (WebCore::stringMatchesWildcardString): Added.

2017-02-28  Matt Rajca  <mrajca@apple.com>

        Media: send "did interfere with playback" events when the user pauses an autoplaying element
        https://bugs.webkit.org/show_bug.cgi?id=169006

        Reviewed by Alex Christensen.

        Added API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseInternal):

2017-03-02  Chris Dumez  <cdumez@apple.com>

        We should prevent load of subframes inserted during FrameTree deconstruction
        https://bugs.webkit.org/show_bug.cgi?id=169095

        Reviewed by Brent Fulgham.

        When deconstructing the FrameTree, we fire the unload event in each subframe.
        Such unload event handler may insert a new frame, we would previously load
        such new frame which was unsafe as we would end up with an attached subframe
        on a detached tree. To address the issue, we prevent new subframes from loading
        while deconstructing the FrameTree and firing the unload events. This new
        behavior is consistent with Chrome and should therefore be safe from a
        compatibility standpoint.

        Test: fast/frames/insert-frame-unload-handler.html

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::disconnectSubframes):
        Update SubframeLoadingDisabler call site now that the constructor takes in
        a pointer instead of a reference.

        * html/HTMLFrameOwnerElement.h:
        (WebCore::SubframeLoadingDisabler::SubframeLoadingDisabler):
        (WebCore::SubframeLoadingDisabler::~SubframeLoadingDisabler):
        Update SubframeLoadingDisabler constructor to take in a pointer instead
        of a reference, for convenience.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachChildren):
        Prevent loads in subframes while detaching the subframes. It would be unsafe
        as we copy the list of frames before iterating to fire the unload events.
        Therefore, newly inserted frames would not get unloaded.

2017-03-02  Dave Hyatt  <hyatt@apple.com>

        flex-basis should be 0% (not 0px) when omitted
        https://bugs.webkit.org/show_bug.cgi?id=169100
        rdar://problem/30429154

        Reviewed by Dean Jackson.

        Covered by existing tests.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeFlex):

2017-02-22  Jiewen Tan  <jiewen_tan@apple.com>

        WebCrypto API support for AES-GCM
        https://bugs.webkit.org/show_bug.cgi?id=157175
        <rdar://problem/27311691>

        Reviewed by Brent Fulgham.

        This patch adds support for AES-GCM. Operations of AES-GCM include: encrypt, decrypt, generateKey,
        importKey, exportKey, wrapKey, and unwrapKey. https://www.w3.org/TR/WebCryptoAPI/#aes-gcm

        Tests: crypto/subtle/aes-gcm-decrypt-malformed-parameters.html
               crypto/subtle/aes-gcm-encrypt-malformed-parameters.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-gcm-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-gcm-generate-export-raw-key.html
               crypto/subtle/aes-gcm-generate-key-encrypt-decrypt.html
               crypto/subtle/aes-gcm-generate-key.html
               crypto/subtle/aes-gcm-import-jwk-key-length-128.html
               crypto/subtle/aes-gcm-import-jwk-key-length-192.html
               crypto/subtle/aes-gcm-import-jwk-key-length-256.html
               crypto/subtle/aes-gcm-import-key-decrypt-additional-data-tag-length-32.html
               crypto/subtle/aes-gcm-import-key-decrypt-additional-data.html
               crypto/subtle/aes-gcm-import-key-decrypt-tagLengths.html
               crypto/subtle/aes-gcm-import-key-decrypt.html
               crypto/subtle/aes-gcm-import-key-encrypt-additional-data-tag-length-32.html
               crypto/subtle/aes-gcm-import-key-encrypt-additional-data.html
               crypto/subtle/aes-gcm-import-key-encrypt-tagLengths.html
               crypto/subtle/aes-gcm-import-key-encrypt.html
               crypto/subtle/aes-gcm-import-key-unwrap-jwk-key.html
               crypto/subtle/aes-gcm-import-key-unwrap-raw-key.html
               crypto/subtle/aes-gcm-import-key-wrap-jwk-key.html
               crypto/subtle/aes-gcm-import-key-wrap-raw-key.html
               crypto/subtle/aes-gcm-import-raw-key.html
               crypto/workers/subtle/aes-gcm-import-key-decrypt.html
               crypto/workers/subtle/aes-gcm-import-key-encrypt.html
               crypto/workers/subtle/aes-gcm-import-key-unwrap-key.html
               crypto/workers/subtle/aes-gcm-import-key-wrap-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        Add CryptoAlgorithmAES_CFBMac.cpp as well.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        Add support for AES-GCM.
        * crypto/CommonCryptoUtilities.h:
        Include SPI header for AES-GCM support.
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp: Added.
        (WebCore::usagesAreInvalidForCryptoAlgorithmAES_GCM):
        (WebCore::tagLengthIsValid):
        (WebCore::CryptoAlgorithmAES_GCM::create):
        (WebCore::CryptoAlgorithmAES_GCM::identifier):
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::generateKey):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        (WebCore::CryptoAlgorithmAES_GCM::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h: Added.
        * crypto/gnutls/CryptoAlgorithmAES_GCMGnuTLS.cpp: Added.
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp: Added.
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/AesGcmParams.idl: Added.
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h: Added.

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

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213281.

        This change caused API test WebKit2.UserMediaBasic to time
        out.

        Reverted changeset:

        "[MediaStream] UIClient may not be notified of capture state
        change when leaving a page"
        https://bugs.webkit.org/show_bug.cgi?id=169014
        http://trac.webkit.org/changeset/213281

2017-03-02  Jon Lee  <jonlee@apple.com>

        Improve consistency of captions rendering on Mac
        https://bugs.webkit.org/show_bug.cgi?id=169071

        Reviewed by Eric Carlson.

        * page/CaptionUserPreferencesMediaAF.h:
        (WebCore::CaptionUserPreferencesMediaAF::captionsEdgeColorForTextColor): Deleted.
        (WebCore::CaptionUserPreferencesMediaAF::cssPropertyWithTextEdgeColor): Deleted.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::appendCSS): Helper function to add a CSS rule with a provided StringBuilder.
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS): Refactor to use
        appendCSS.
        (WebCore::CaptionUserPreferencesMediaAF::colorPropertyCSS): Ditto.
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS): Update text edge styles.
        - Add a blur to the shadow
        - Drop shadow style includes 1px text border
        - Always use black for the text edge color
        Also convert the stroke rules to using the CSS property and values instead of straight strings.
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride): Fly-by fix of a typo.

2017-03-02  Chris Dumez  <cdumez@apple.com>

        Download attribute set to "*\" save file with name "example.com"
        https://bugs.webkit.org/show_bug.cgi?id=169066
        <rdar://problem/30740875>

        Reviewed by Alex Christensen.

        The issue is that a backslash in recognized as an escaping character in
        a quoted string as per RFC2616:
        "
        The backslash character ("\") MAY be used as a single-character
        quoting mechanism only within quoted-string and comment constructs.
        "

        We therefore need to escape the backslashes in the filename before
        using it in the Content-Disposition header, inside the quoted string.

        Test: fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-backslash.html

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename):

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

        [WebRTC] Activate ICE candidate privacy policy
        https://bugs.webkit.org/show_bug.cgi?id=168975

        Reviewed by Alex Christensen.

        Test: webrtc/datachannel/filter-ice-candidate.html

        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Disabling ICE candidate filtering by default for rwt.
        (WebCore::Internals::setICECandidateFiltering):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-02  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] UIClient may not be notified of capture state change when leaving a page
        https://bugs.webkit.org/show_bug.cgi?id=169014
        <rdar://problem/30632267>

        Reviewed by Youenn Fablet.

        Enable and update the WebKit API test WebKit2.UserMedia.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Always call page.updateIsPlayingMedia() if there
        is active media in the document because it won't be possible when the state changes later
        because the frame will have been cleared.

2017-03-02  Tomas Popela  <tpopela@redhat.com>

        [WK2] Keyboard menu key should show context menu
        https://bugs.webkit.org/show_bug.cgi?id=72099

        Reviewed by Carlos Garcia Campos.

        Show the context menu when the GtkWidget::popup-menu signal is
        emitted. This signal is triggered by pressing a key (usually
        the Menu key or the Shift + F10 shortcut) or it could be emitted on
        WebKitWebView.

        Test: fast/events/context-activated-by-key-event.html

        Also could be tested by:

        ManualTests/keyboard-menukey-event.html
        ManualTests/win/contextmenu-key.html
        ManualTests/win/contextmenu-key2.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey):
        Correctly send the mouse event that used for showing the context menu.
        Previously the event was immediately dispatched as it is, but this was
        only the right way if some element was focused on the page. If there
        was no focused element or non-empty text range then the event lacked
        the right node, where it was supposed to be shown. The correct node
        is determined and added to the event in the sendContextMenuEvent() so
        we have to use this function to send the event.

        Also use absoluteBoundingBoxRect() instead of
        pixelSnappedAbsoluteClippedOverflowRect() when determining
        a coordinate where to show the context menu for the currently focus
        element. The latter is not returning a right box (it is bigger) which
        could lead to the situation that no menu will be displayed at all,
        because the HitTest won't contain the right element as the
        determined coordinates could be outside of the element.
        * page/EventHandler.h:

2017-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in WebCore::CoordinatedGraphicsLayer::notifyFlushRequired
        https://bugs.webkit.org/show_bug.cgi?id=166420

        Reviewed by Žan Doberšek.

        This is happening when closing a page that is being inspected. When CoordinatedGraphicsLayer::removeFromParent()
        is called, the coordinator has already been invalidated, so all its layers were set a nullptr coordinator. I
        think it's safe to simply handle m_coordinator being nullptr in notifyFlushRequired().

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::notifyFlushRequired): Return early if the coordinator is nullptr.

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

        Don't keep dead resources in MemoryCache while under memory pressure.
        <https://webkit.org/b/169070>

        Reviewed by Antti Koivisto.

        Have CachedResource::deleteIfPossible() remove the resource from the MemoryCache
        if we're under memory pressure and that was the only thing keeping it alive.

        This is consistent with the policy where dead resources are evicted from the cache
        as we come under pressure.

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

2017-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r213062): [SOUP] UTF-8 filename in Content-Disposition header incorrectly handled since r213062
        https://bugs.webkit.org/show_bug.cgi?id=169024

        Reviewed by Youenn Fablet.

        This made test http/tests/download/literal-utf-8.html to start failing. The problem is that I removed the
        conversion made by String::fromUTF8WithLatin1Fallback that was added in r176930. I removed it because that made
        fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-unicode.html to timeout. This patch brings back
        the String::fromUTF8WithLatin1Fallback call but only when the header string is 8 bit one.

        Fixes: http/tests/download/literal-utf-8.html

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename):

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

        Actually fix Windows build.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        Win32Handle is now in WTF namespace.

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

        Fix WinCairo build after r213214
        https://bugs.webkit.org/show_bug.cgi?id=168908

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

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

        Implement font-stretch for installed fonts
        https://bugs.webkit.org/show_bug.cgi?id=168888

        Reviewed by Darin Adler and Dave Hyatt.

        This patch implements the font-stretch property. Both parsing and the implementation is
        implemented. Contrary to the name, this property doesn't actually stretch fonts; instead,
        it provides one more input to the font selection routine.

        The mapping from Core Text's [-1, 1] width values to font-stretch's percentage-based
        values is not perfect. For now, I've implemented a piecewise linear curve mapping the
        two. However, I expect to be able to improve this transfer function soon.

        This patch does not implement the font-stretch descriptor in @font-face, and therefore
        does not work with web fonts. I will add this support in
        https://bugs.webkit.org/show_bug.cgi?id=168892. The reason it isn't done in this patch is
        it requires some architectural changes to our CSSFontFace classes which are large enough
        they should be separated into their own patch.

        This patch lays the groundwork for implementing the 'wdth' variation axis. It does this
        by adding a floating-point value to RenderStyle instead of just an enum. The font-stretch
        keywords get converted to these floating-point numbers in accordance with the Fonts spec.
        This patch doesn't actually implement the variations piece of font-stretch, because that
        piece also requires some architectural changes. This patch just implements the installed
        font selection piece.

        This patch also fixes the regression introduced in r213163 with Helvetica Neue. Now that
        our font selection algorithm has a concept of font stretch, weights 800 and 900 of
        Helvetica Neue are rendered as expected. (And this patch updates the tests to make sure.)

        Tests: fast/text/font-stretch-parse.html
               fast/text/font-stretch-shorthand.html
               FontCacheTest.FontLookupFromFamilyName

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontStretchFromStyle): Map style values to CSS keywords.
        (WebCore::ComputedStyleExtractor::propertyValue): Call the above function.
        * css/CSSFontValue.cpp:
        (WebCore::CSSFontValue::customCSSText): Used in getComputedStyle() for the "font"
        shorthand.
        (WebCore::CSSFontValue::equals):
        * css/CSSFontValue.h:
        * css/CSSProperties.json:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontStretch): Map CSS keywords to style values.
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::appendFontLonghandValueIfExplicit): Used for
        Element.style.font.
        (WebCore::StyleProperties::fontValue):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID): Now that variation fonts are being
        implemented, font-stretch is no longer a keyword property. Instead, it can also take a
        number or percentage.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontStretch): Parse the value.
        (WebCore::CSSPropertyParser::parseSingleValue): Call the above function.
        (WebCore::CSSPropertyParser::consumeFont): Ditto.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey): Caches should be sensitive to this
        new value.
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::computeHash):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::stretch): The parsed style value.
        (WebCore::FontDescription::setStretch):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::initialStretch):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::InstalledFont::InstalledFont): Update the installed font selection
        algorithm to understand font-stretch.
        (WebCore::findClosestStretch):
        (WebCore::filterStretch):
        (WebCore::findClosestFont):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):

2017-03-01  Antti Koivisto  <antti@apple.com>

        Rename recalcStyle to resolveStyle and clean up the signature
        https://bugs.webkit.org/show_bug.cgi?id=169049

        Reviewed by Sam Weinig.

        Move to modern naming.

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

            Only two of the possible values are used so pass in a two-value enum.

        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::recalcStyle): Deleted.
        * dom/Document.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::reportDataReceived):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Parent::Parent):
        (WebCore::Style::TreeResolver::resolve):

            Remove the argument, Document invalidates the document element if everything needs to be re-resolved.

        * style/StyleTreeResolver.h:

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

        Unreviewed, rolling out r213259.

        Broke an internal build

        Reverted changeset:

        "Continue enabling WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=169056
        http://trac.webkit.org/changeset/213259

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

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-01  Chris Dumez  <cdumez@apple.com>

        [WK2][!NETWORK_SESSION] Failure to download when using a download attribute with no value on an anchor
        https://bugs.webkit.org/show_bug.cgi?id=169060
        <rdar://problem/30773140>

        Reviewed by Darin Adler.

        Make sure we never set the suggested filename to the empty string when
        the download attribute is present but has no value.

        Test: http/tests/download/anchor-download-no-value.html

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2017-03-01  Antoine Quint  <graouts@apple.com>

        [ios-simulator] Unskip media/modern-media-controls/audio/audio-controls-metrics.html
        https://bugs.webkit.org/show_bug.cgi?id=167258
        <rdar://problem/30282740>

        We weren't enforcing the min-width to be 200px as well as the default width, and the
        UA stylesheet would override it. Setting a default min-width that trumps the UA
        stylesheet makes the test work correctly on iOS and we can safely unskip this test.

        Reviewed by Jon Lee.

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

2017-03-01  Javier Fernandez  <jfernandez@igalia.com>

        Missing 'specification' section in the place-content shorthand
        https://bugs.webkit.org/show_bug.cgi?id=169052

        Reviewed by Darin Adler.

        Added 'specification' section in the place-content shorthand.

        No new tests, no new functionality.

        * css/CSSProperties.json:

2017-02-28  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media is muted
        https://bugs.webkit.org/show_bug.cgi?id=168987

        Reviewed by Alex Christensen.

        Added API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::pageMutedStateDidChange):
        * page/AutoplayEvent.h:

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

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

        Speculative rollout, might be causing several failures and
        crashes in WebKitGTK+ (Requested by lajava on #webkit).

        Reverted changeset:

        "REGRESSION(r213062): [SOUP] UTF-8 filename in Content-
        Disposition header incorrectly handled since r213062"
        https://bugs.webkit.org/show_bug.cgi?id=169024
        http://trac.webkit.org/changeset/213226

2017-03-01  James Craig  <jcraig@apple.com>

        AX: add role aliases for ARIA DPUB module
        https://bugs.webkit.org/show_bug.cgi?id=168978
        <rdar://problem/30762724>

        Reviewed by Chris Fleizach.

        Added role aliases for ARIA DPUB module, and updated existing tests.

        Test: accessibility/roles-exposed.html
        Test: inspector/dom/getAccessibilityPropertiesForNode.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap): 

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

        Don't call libwebrtc functions if libwebrtc.dylib doesn't exist while testing
        https://bugs.webkit.org/show_bug.cgi?id=169045
        <rdar://problem/30735413>

        Reviewed by Youenn Fablet.

        WebRTC tests fail instead of crashing now if libwebrtc.dylib is missing.
        All other tests pass instead of crashing immediately when creating an Internals object.

        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::disableICECandidateFiltering):
        (WebCore::RTCController::enableICECandidateFiltering):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        * testing/Internals.cpp:
        (WebCore::Internals::enableMockMediaEndpoint):
        (WebCore::Internals::emulateRTCPeerConnectionPlatformEvent):
        (WebCore::Internals::useMockRTCPeerConnectionFactory):
        * testing/Internals.h:

2017-03-01  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Implement the place-content shorthand
        https://bugs.webkit.org/show_bug.cgi?id=168771

        Reviewed by Manuel Rego Casasnovas.

        The CSS Box Alignment specification defines a new shorthand to set the
        Content Alignment properties (align-content and justify-content) at the
        same time.

        This patch provides the implementation of the CSS parsing logic and the
        required regression tests.

        Test: css3/parse-place-content.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSimplifiedContentPosition):
        (WebCore::CSSPropertyParser::consumePlaceContentShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSPropertyParser.h:

2017-03-01  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build after r213191.

        * platform/spi/win/CoreTextSPIWin.h:

2017-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r213062): [SOUP] UTF-8 filename in Content-Disposition header incorrectly handled since r213062
        https://bugs.webkit.org/show_bug.cgi?id=169024

        Reviewed by Youenn Fablet.

        This made test http/tests/download/literal-utf-8.html to start failing. The problem is that I removed the
        conversion made by String::fromUTF8WithLatin1Fallback that was added in r176930. I removed it because that made
        fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-unicode.html to timeout. This patch brings back
        the String::fromUTF8WithLatin1Fallback call but only when the header string is 8 bit one.

        Fixes: http/tests/download/literal-utf-8.html

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename):

2017-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] fast/canvas/canvas-createPattern-video-loading.html makes its subsequent test timeout
        https://bugs.webkit.org/show_bug.cgi?id=169019

        Reviewed by Xabier Rodriguez-Calvar.

        The timeout happens normally when the media player is deleted and the pipeline state is set to NULL. The call to
        gst_element_set_state() never returns because of different deadlocks with the video sink. Sometimes the deadlock
        happens with the sample mutex used by VideoRenderRequestScheduler. VideoRenderRequestScheduler::requestRender()
        calls webkitVideoSinkRepaintRequested() with the lock held, that ends up calling
        MediaPlayerPrivateGStreamerBase::triggerRepaint(). When rendering can't be accelerated the draw timer is
        scheduled and triggerRepaint blocks until the timer is fired. If the media player is destroyed before the timer
        is fired, when setting the pipeline state to NULL, other VideoRenderRequestScheduler methods can be called, like
        stop() that tries to get the sample mutex that is still held by requestRender(). So, first we need to make
        sure that requestRender() releases the lock before calling webkitVideoSinkRepaintRequested(). But that's not
        enough, we also need to ensure that the pipeline is set to NULL state after everyting has been properly
        stopped. This is currently done in ~MediaPlayerPrivateGStreamer that happens before
        ~MediaPlayerPrivateGStreamerBase, so gst_element_set_state() is hanging before allowing the
        MediaPlayerPrivateGStreamerBase to be cleaned up. We should move the call to the end of
        ~MediaPlayerPrivateGStreamerBase and ensure the draw timer and mutex are properly cleaned up before.

        Fixes: fast/canvas/canvas-createPattern-video-loading.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Do not reset pipeline here.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Stop the draw mutex and notify the
        lock to ensure we unblock. Do the pipeline reset at the end.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::requestRender): Release the mutex lock before calling webkitVideoSinkRepaintRequested().

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        Unreviewed compiler warning fix after r213218

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        [Cairo] Incorrectly determining height in GraphicsContext::roundToDevicePixels()
        https://bugs.webkit.org/show_bug.cgi?id=169031

        Reviewed by Carlos Garcia Campos.

        We should compare if height is between -1 and 0 and not mixing height
        and width together.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        [GTK] Fix problems found by Coverity scan in platform's keyboard and mouse events
        https://bugs.webkit.org/show_bug.cgi?id=169028

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Initialize
        the m_handledByInputMethod member.
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Initialize the
        m_modifierFlags member.

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

        Move MemoryPressureHandler to WTF
        <https://webkit.org/b/168908>

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        * history/PageCache.cpp:
        * html/HTMLMediaElement.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorMemoryAgent.h:
        * page/FrameView.cpp:
        * page/MemoryRelease.h:
        * page/linux/ResourceUsageThreadLinux.cpp:
        * platform/Linux.cmake:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/WidthCache.h:
        * platform/graphics/ca/TileController.cpp:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileGrid.mm:
        * platform/ios/LegacyTileLayerPool.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp:
        * testing/Internals.cpp:

2017-03-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] Popup menus are too small in HiDPI mode.
        https://bugs.webkit.org/show_bug.cgi?id=168965

        Reviewed by Brent Fulgham.

        Scale font with device scale factor.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        * platform/win/PopupMenuWin.h:

2017-03-01  Joseph Pecoraro  <pecoraro@apple.com>

        [WebRTC] Install libwebrtc.dylib inside of WebCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=168859

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        Set library search path to find the libwebrtc.dylib inside of WebCore's Frameworks
        or in the WK_OVERRIDE_FRAMEWORKS_DIR.

2017-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments on r213163
        https://bugs.webkit.org/show_bug.cgi?id=168678

        Unreviewed.

        No new tests because there is no behavior change.

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

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

        Don't use the LinearGlyphMask format if accelerated drawing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=168997

        Reviewed by Tim Horton.

        Non-accelerated drawing doesn't work into LinearGlyphMask-format backing store,
        so don't use that backing store format when accelerated drawing is disabled.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (layerContentsFormat):
        (PlatformCALayerCocoa::updateContentsFormat):

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

        Make the repaint indicators show subpixel antialiased text indication a bit more clearly
        https://bugs.webkit.org/show_bug.cgi?id=168988

        Reviewed by Tim Horton.

        Put a more obvious stroke around the repaint count when subpixel-antialiased layer text is enabled.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        (WebCore::PlatformCALayer::drawTextAtPoint):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::drawTextAtPoint):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2017-02-28  Alex Christensen  <achristensen@webkit.org>

        LibWebRTCProvider should check existence of libwebrtc.dylib
        https://bugs.webkit.org/show_bug.cgi?id=168986
        <rdar://problem/30735413>

        Reviewed by Youenn Fablet.

        Some configurations of the webrtc tests overwrite the availability of WebRTC in order to test it
        with MockLibWebRTCPeerConnection.  If the dylib can not be found, we can't use it, so we want to
        fail these tests rather than crashing calling rtc::LogMessage::LogToDebug.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::factory):
        (WebCore::LibWebRTCProvider::webRTCAvailable):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::useMockRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):

2017-02-28  Tim Horton  <timothy_horton@apple.com>

        Apply a review comment that was missing in r213182

        * loader/ios/QuickLook.mm:
        (WebCore::isQuickLookPreviewURL):

2017-02-28  Tim Horton  <timothy_horton@apple.com>

        [iOS] Getting QLPreviewProtocol slows down first navigation in Web process
        https://bugs.webkit.org/show_bug.cgi?id=168940
        <rdar://problem/29468999>

        Reviewed by Simon Fraser.

        No new tests, just a performance improvement.

        * loader/DocumentLoader.cpp:
        (WebCore::isRemoteWebArchive):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        Make use of isQuickLookPreviewURL.

        * loader/ios/QuickLook.h:
        * loader/ios/QuickLook.mm:
        (WebCore::isQuickLookPreviewURL):
        Add isQuickLookPreviewURL, which first early-returns if the protocol
        of the URL is a well-known protocol, and then falls back to loading QuickLook.

        In a microbenchmark this is a 30-40% improvement in total time spent
        loading an empty HTML document (wall-clock time between loadHTMLString
        and didFinishNavigation).

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

        Add Geolocation and DeviceOrientation to features.json 

        * features.json:

2017-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should support attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=168916
        <rdar://problem/30664519>

        Reviewed by Ryosuke Niwa.

        Teaches DragController to recognize and initiate dragging on attachment elements, and also adds a new
        convenience method to the WebItemProviderPasteboard for block enumeration of available UIItemProviders. Covered
        by a new API test: DataInteractionTests.AttachmentElementItemProviders.

        * page/DragController.cpp:
        (WebCore::DragController::draggableElement):
        (WebCore::DragController::startDrag):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard enumerateItemProvidersWithBlock:]):

2017-02-28  Mark Lam  <mark.lam@apple.com>

        Remove setExclusiveThread() and peers from the JSLock.
        https://bugs.webkit.org/show_bug.cgi?id=168977

        Reviewed by Filip Pizlo.

        No new tests because this should already be covered by existing tests.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2017-02-28  Dave Hyatt  <hyatt@apple.com>

        Centering text inside a button set to display flex and justify-content: center is impossible
        https://bugs.webkit.org/show_bug.cgi?id=148872
        <rdar://problem/22590086>

        Reviewed by Simon Fraser.

        Added new test in fast/forms.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::updateAnonymousChildStyle):
        (WebCore::RenderButton::styleDidChange):
        (WebCore::RenderButton::styleWillChange): Deleted.
        (WebCore::RenderButton::setupInnerStyle): Deleted.
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::updateAnonymousChildStyle):

2017-02-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add missing compact mode assets for macOS
        https://bugs.webkit.org/show_bug.cgi?id=168980
        <rdar://problem/30763269>

        Reviewed by Jon Lee.

        Adding missing compact mode assets for the AirPlay, tracks, PiP and volume buttons.

        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css:
        (.media-controls.mac.inline.compact button.airplay):
        (.media-controls.mac.inline.compact button.pip):
        (.media-controls.mac.inline.compact button.tracks):
        * Modules/modern-media-controls/images/macOS/airplay-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-in-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-in-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-compact@1x.png:
        * Modules/modern-media-controls/images/macOS/volume-compact@2x.png:
        * Modules/modern-media-controls/images/macOS/volume-mute-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-mute-compact@2x.png: Added.

2017-02-28  Chris Dumez  <cdumez@apple.com>

        [iOS] Throttle requestAnimationFrame to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168837
        <rdar://problem/30700929>

        Reviewed by Simon Fraser.

        Throttle requestAnimationFrame to 30fps in low power mode on iOS to save battery.

        ScriptedAnimationController now maintains an OptionSet of throttling reasons.
        Throttling reasons for now are: OutsideViewport, VisuallyIdle, and LowPowerMode.
        The requestAnimationFrame interval is then determined based on those throttling
        reasons:
        - OutsideViewport or VisuallyIdle: 10 seconds (very aggressive throttling)
        - LowPowerMode: 30fps
        - No reasons: 60fps

        The Page now keeps track of low power mode state using a LowPowerModeNotifier.
        Whenever low power mode changes, it updates the throttling reasons in all the
        documents' ScriptedAnimationControllers in the frame tree.

        Tests: fast/animation/request-animation-frame-throttling-detached-iframe.html
               fast/animation/request-animation-frame-throttling-lowPowerMode.html

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::throttlingReasonToString):
        (WebCore::throttlingReasonsToString):
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        (WebCore::ScriptedAnimationController::isThrottled):
        (WebCore::ScriptedAnimationController::interval):
        (WebCore::ScriptedAnimationController::page):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::create):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateScriptedAnimationsAndTimersThrottlingState):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::isLowPowerModeEnabled):
        (WebCore::Page::setLowPowerModeEnabledOverrideForTesting):
        (WebCore::updateScriptedAnimationsThrottlingReason):
        (WebCore::Page::setIsVisuallyIdleInternal):
        (WebCore::Page::handleLowModePowerChange):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::requestAnimationFrameInterval):
        (WebCore::Internals::setLowPowerModeEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        [WebRTC] Limit libwebrtc logging in Debug build
        https://bugs.webkit.org/show_bug.cgi?id=168974

        Reviewed by Alex Christensen.

        Covered by manual testing..

        * platform/Logging.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::callOnWebRTCSignalingThread):

2017-02-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] Migrate off of CTFontCreateForCSS
        https://bugs.webkit.org/show_bug.cgi?id=168678

        Reviewed by David Hyatt.

        This patch implements the Font Matching Algorithm detailed in
        https://drafts.csswg.org/css-fonts-4/#font-matching-algorithm
        Previously, this was implemented inside Core Text (via
        CTFontCreateForCSS()), but that implementation does not understand
        variation fonts. Therefore it should move to WebKit (along with
        the general fact that CSS algorithms should be implemented in a
        CSS engine, not the platform's text engine).

        This implementation is not completely divorced from the platform,
        however - Core Text exposes font weights on a [-1, 1] range, but
        CSS operates on a [1, 999] range. In order to provide the mapping
        to CSS weights, Core Text infrastructure is necessary. Therefore,
        this new implementation of the matching algorithm is only used
        on certain operating systems.

        The new implementation of the algorithm is not bug-compatible with
        the existing implementation; this patch does represent a behavior
        change. However, I have reviewed the differences manually and
        believe this algorithm to be a progression over the previous one
        (except for one case with Helvetica Neue - see
        LayoutTests/ChangeLog for more information about that).

        This patch also represents a 27% performance progression on our
        standard page load test (just measuring the performance of the font
        matching algorithm, and nothing else). (Because font matching is
        only a small part of the entire test, the overall progression is
        much smaller.)

        Tests: FontCacheTest.FontLookupFromFamilyName
               FontCacheTest.FontLookupFromPostScriptName

        * platform/graphics/FontCache.h:
        (WebCore::FontCache::createFontPlatformDataForTesting): Allow for
        unit testing.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::isSystemFont): Inlined.
        (WebCore::FontDatabase::singleton): Cache results of Core Text
        lookups.
        (WebCore::FontDatabase::Range::Range): Because of variation fonts,
        fonts' weights, widths, and slopes need to be represented as a range
        instead of an individual value.
        (WebCore::FontDatabase::Range::isValid):
        (WebCore::FontDatabase::Range::expand):
        (WebCore::FontDatabase::Range::includes):
        (WebCore::FontDatabase::InstalledFont::InstalledFont): Represents a
        Font Descriptor as well as some lookup information about it.
        (WebCore::FontDatabase::InstalledFontCollection::InstalledFontCollection):
        A collection of installed fonts.
        (WebCore::FontDatabase::InstalledFontCollection::insertInstalledFont):
        Cache minima and maxima.
        (WebCore::FontDatabase::InstalledFontCollection::isEmpty):
        (WebCore::FontDatabase::InstalledFontCollection::size):
        (WebCore::FontDatabase::lookupFamilyName): Get all the fonts in
        the family.
        (WebCore::FontDatabase::lookupPostScriptName): Get the font with
        the given PostScript name.
        (WebCore::FontDatabase::clear):
        (WebCore::FontDatabase::FontDatabase): Cache.
        (WebCore::iterateActiveFontsWithReturn): The Font Matching Algorithm
        works by starting with every font in the family, and the eliminating
        items from the set iteratively. Instead of actually removing items
        from a vector or linked list, we instead want to treat the collection
        as immutable and keep a parallel side-table of which items have been
        eliminated (in order to reduce copies and allocations). This makes
        sense because most families only have a handful of fonts in them.
        This function consults with the side-table to iterate only over the
        fonts which have not been eliminated.
        (WebCore::iterateActiveFonts): Ditto.
        (WebCore::findClosestStretch):
        (WebCore::filterStretch): Eliminate fonts based on their stretch
        value.
        (WebCore::findClosestStyle):
        (WebCore::filterStyle): Eliminate fonts based on their style value.
        (WebCore::findClosestWeight):
        (WebCore::filterWeight): Eliminate fonts based on their weight value.
        (WebCore::computeTargetWeight):
        (WebCore::findClosestFont): If we have a set of fonts in a family,
        select the font in the set which best matches the criteria.
        (WebCore::platformFontLookupWithFamily): While findClosestFont()
        function satisfies the spec's notion of the font matching algorithm,
        WebKit actually claims to be able to look up fonts by their PostScript
        name. Therefore, this function has a higher-level of logic to rectify
        the confusion that results when the PostScript name doesn't agree with
        the other CSS properties (like if you say "Helvetica-Bold" but also say
        font-weight: 100).
        * platform/spi/cocoa/CoreTextSPI.h: Add signature for system CSS
        font weight support.

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplayed media ends without being paused
        https://bugs.webkit.org/show_bug.cgi?id=168852

        Reviewed by Alex Christensen.

        Added API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
         Set state accordingly if we autoplayed or if playback was prevented.
        (WebCore::HTMLMediaElement::play):
         Update state if playback was prevented.
        (WebCore::HTMLMediaElement::playInternal):
         Update state if playback began without user interaction.
        (WebCore::HTMLMediaElement::pauseInternal):
         Update state.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
         If playback ends and it began without user interaction, send a DidPlayMediaWithoutInterference event.
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto.
        * html/HTMLMediaElement.h:
        * page/AutoplayEvent.h:

2017-02-27  Dave Hyatt  <hyatt@apple.com>

        Update flexbox to Blink's tip of tree
        https://bugs.webkit.org/show_bug.cgi?id=168657

        Reviewed by Zalan Bujtas.

        Added new tests in css3/flexbox.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * rendering/FlexibleBoxAlgorithm.cpp: Added.
        (WebCore::FlexItem::FlexItem):
        (WebCore::FlexLayoutAlgorithm::FlexLayoutAlgorithm):
        (WebCore::FlexLayoutAlgorithm::computeNextFlexLine):
        * rendering/FlexibleBoxAlgorithm.h: Added.
        (WebCore::FlexItem::hypotheticalMainAxisMarginBoxSize):
        (WebCore::FlexItem::flexBaseMarginBoxSize):
        (WebCore::FlexItem::flexedMarginBoxSize):
        (WebCore::FlexLayoutAlgorithm::isMultiline):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::computeTrackBasedSize):
        (WebCore::GridTrackSizingAlgorithm::increaseSizesToAccommodateSpanningItems):
        (WebCore::GridTrackSizingAlgorithm::assumedRowsSizeForOrthogonalChild):
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild):
        (WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded):
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::next):
        (WebCore::OrderIterator::reset):
        (WebCore::OrderIteratorPopulator::~OrderIteratorPopulator):
        (WebCore::OrderIteratorPopulator::collectChild):
        (WebCore::OrderIteratorPopulator::OrderIteratorPopulator): Deleted.
        (WebCore::OrderIteratorPopulator::removeDuplicatedOrderValues): Deleted.
        * rendering/OrderIterator.h:
        (WebCore::OrderIteratorPopulator::OrderIteratorPopulator):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateBlockChildDirtyBitsBeforeLayout):
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        (WebCore::RenderBlock::computeChildPreferredLogicalWidths):
        (WebCore::RenderBlock::hasDefiniteLogicalHeight):
        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasPercentHeightDescendants):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::columnFlexItemHasStretchAlignment):
        (WebCore::RenderBox::isStretchingColumnFlexItem):
        (WebCore::RenderBox::hasStretchedLogicalWidth):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::cacheIntrinsicContentLogicalHeightForFlexItem):
        (WebCore::RenderBox::updateLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightWithoutLayout):
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation):
        (WebCore::RenderBox::shouldTreatChildAsReplacedInTableCells):
        (WebCore::tableCellShouldHaveZeroInitialSize):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvable):
        (WebCore::RenderBox::hasUnsplittableScrollingOverflow):
        (WebCore::flexItemHasStretchAlignment): Deleted.
        (WebCore::isStretchingColumnFlexItem): Deleted.
        (WebCore::logicalWidthIsResolvable): Deleted.
        (WebCore::RenderBox::hasDefiniteLogicalWidth): Deleted.
        (WebCore::percentageLogicalHeightIsResolvable): Deleted.
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock): Deleted.
        (WebCore::RenderBox::hasDefiniteLogicalHeight): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem):
        (WebCore::RenderBox::isFlexItem):
        (WebCore::RenderBox::selfAlignmentNormalBehavior):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::isOutOfFlowPositionedWithImplicitHeight):
        (WebCore::RenderBoxModelObject::containingBlockForAutoHeightDetection):
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChildInternal):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::LineContext::LineContext):
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::contentAlignmentNormalBehavior):
        (WebCore::RenderFlexibleBox::styleDidChange):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::clientLogicalBottomAfterRepositioning):
        (WebCore::RenderFlexibleBox::hasOrthogonalFlow):
        (WebCore::RenderFlexibleBox::flexBasisForChild):
        (WebCore::RenderFlexibleBox::crossAxisExtentForChild):
        (WebCore::RenderFlexibleBox::cachedChildIntrinsicContentLogicalHeight):
        (WebCore::RenderFlexibleBox::setCachedChildIntrinsicContentLogicalHeight):
        (WebCore::RenderFlexibleBox::clearCachedChildIntrinsicContentLogicalHeight):
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalHeight):
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth):
        (WebCore::RenderFlexibleBox::crossAxisIntrinsicExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisContentExtentForChildIncludingScrollbar):
        (WebCore::RenderFlexibleBox::crossAxisExtent):
        (WebCore::RenderFlexibleBox::mainAxisExtent):
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::transformedWritingMode):
        (WebCore::RenderFlexibleBox::flowAwareMarginStartForChild):
        (WebCore::RenderFlexibleBox::flowAwareMarginEndForChild):
        (WebCore::RenderFlexibleBox::flowAwareMarginBeforeForChild):
        (WebCore::RenderFlexibleBox::crossAxisMarginExtentForChild):
        (WebCore::RenderFlexibleBox::flowAwareLocationForChild):
        (WebCore::RenderFlexibleBox::useChildAspectRatio):
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing):
        (WebCore::RenderFlexibleBox::setFlowAwareLocationForChild):
        (WebCore::RenderFlexibleBox::mainAxisLengthIsDefinite):
        (WebCore::RenderFlexibleBox::crossAxisLengthIsDefinite):
        (WebCore::RenderFlexibleBox::cacheChildMainSize):
        (WebCore::RenderFlexibleBox::clearCachedMainSizeForChild):
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::autoMarginOffsetInMainAxis):
        (WebCore::RenderFlexibleBox::updateAutoMarginsInMainAxis):
        (WebCore::RenderFlexibleBox::hasAutoMarginsInCrossAxis):
        (WebCore::RenderFlexibleBox::availableAlignmentSpaceForChild):
        (WebCore::RenderFlexibleBox::updateAutoMarginsInCrossAxis):
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild):
        (WebCore::RenderFlexibleBox::computeChildMarginValue):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution):
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution):
        (WebCore::RenderFlexibleBox::childLogicalHeightForPercentageResolution):
        (WebCore::RenderFlexibleBox::adjustChildSizeForAspectRatioCrossAxisMinAndMax):
        (WebCore::RenderFlexibleBox::constructFlexItem):
        (WebCore::RenderFlexibleBox::freezeViolations):
        (WebCore::RenderFlexibleBox::freezeInflexibleItems):
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        (WebCore::alignmentOffset):
        (WebCore::RenderFlexibleBox::setOverrideMainAxisContentSizeForChild):
        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::staticCrossAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::staticInlinePositionForPositionedChild):
        (WebCore::RenderFlexibleBox::staticBlockPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::setStaticPositionForPositionedLayout):
        (WebCore::RenderFlexibleBox::prepareChildForPositionedLayout):
        (WebCore::RenderFlexibleBox::alignmentForChild):
        (WebCore::RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis):
        (WebCore::RenderFlexibleBox::needToStretchChildLogicalHeight):
        (WebCore::RenderFlexibleBox::childHasIntrinsicMainAxisSize):
        (WebCore::RenderFlexibleBox::crossAxisOverflowForChild):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::initialAlignContentOffset):
        (WebCore::alignContentSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::adjustAlignmentForChild):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        (WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        (WebCore::RenderFlexibleBox::Violation::Violation): Deleted.
        (WebCore::RenderFlexibleBox::setCrossAxisExtent): Deleted.
        (WebCore::RenderFlexibleBox::flowAwareMarginAfterForChild): Deleted.
        (WebCore::RenderFlexibleBox::mainAxisBorderAndPaddingExtentForChild): Deleted.
        (WebCore::RenderFlexibleBox::mainAxisScrollbarExtentForChild): Deleted.
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild): Deleted.
        (WebCore::RenderFlexibleBox::computeNextFlexLine): Deleted.
        (WebCore::RenderFlexibleBox::setLogicalOverrideSize): Deleted.
        (WebCore::RenderFlexibleBox::numberOfInFlowPositionedChildren): Deleted.
        (WebCore::RenderFlexibleBox::needToStretchChild): Deleted.
        (WebCore::contentAlignmentNormalBehaviorFlexibleBox): Deleted.
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::orderIterator):
        (WebCore::RenderFlexibleBox::isFlexibleBoxImpl):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::selfAlignmentChangedToStretchInRowAxis):
        (WebCore::selfAlignmentChangedFromStretchInRowAxis):
        (WebCore::selfAlignmentChangedFromStretchInColumnAxis):
        (WebCore::RenderGrid::styleDidChange):
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight):
        (WebCore::RenderGrid::computeTrackSizesForDefiniteSize):
        (WebCore::RenderGrid::gridGapForDirection):
        (WebCore::RenderGrid::guttersSize):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize):
        (WebCore::RenderGrid::computeAutoRepeatTracksCount):
        (WebCore::RenderGrid::trackSizesForComputedStyle):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::alignSelfForChild):
        (WebCore::RenderGrid::justifySelfForChild):
        (WebCore::RenderGrid::columnAxisPositionForChild):
        (WebCore::RenderGrid::rowAxisPositionForChild):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::needToStretchChildLogicalHeight): Deleted.
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::shouldFlexCellChild):
        (WebCore::RenderTableSection::relayoutCellIfFlexed):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/style/RenderStyle.cpp:
        (WebCore::resolvedSelfAlignment):
        (WebCore::RenderStyle::resolvedAlignSelf):
        (WebCore::RenderStyle::resolvedJustifySelf):
        * rendering/style/RenderStyle.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::textRendererIsNeeded):

2017-02-28  Alex Christensen  <achristensen@webkit.org>

        Main resource requests need cachePartition
        https://bugs.webkit.org/show_bug.cgi?id=168806
        <rdar://30639764>

        Reviewed by Brady Eidson.

        Test: http/tests/security/credentials-main-resource.html

        r211751 caused an unintended regression on pages whose main resource is protected
        by basic authentication.  We were not setting the cache partition for main resource
        requests, and we use the cache partition now for credentials, so the credentials for
        the main resource were not being put into a partition in the CredentialStorage that
        would not be used for subresources of the page, whose requests had the correct partition
        for the domain of the page.  This caused users to have to enter their credentials twice,
        once for the main resource and once for any subresources.  This is fixed by using the
        domain from the main resource request as the cache partition.  Elsewhere the Document is
        used to get the cache partition, but there is no Document yet when requesting the main resource.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        Set the cache partition for the main resource loads based on the SecurityOrigin of the
        initial request if we are loading the main resource for a new top document.  If the main resource
        request is redirected, then we will still use the partition of the initial request because that is
        what the user requested and that is where the user entered the credentials.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setDomainForCachePartition):
        * loader/cache/CachedResourceRequest.h:

2017-02-28  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: LayoutTest http/tests/security/credentials-iframes.html is failing on ios-simulator
        https://bugs.webkit.org/show_bug.cgi?id=167967

        Reviewed by Brady Eidson.

        XHR credentials have a persistence of CredentialPersistenceNone because we keep
        them in the WebCore::CredentialStorage.  We were storing them to CFNetwork's NSURLCredentialStorage
        on iOS and then they were being given as the proposedCredential in
        NetworkDataTaskCocoa::tryPasswordBasedAuthentication even though we set CredentialPersistenceNone.

        This fixes http/tests/security/credentials-iframes.html

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        * platform/network/CredentialStorage.h:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::saveToPersistentStorage): Deleted.
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::saveToPersistentStorage): Deleted.

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build.

        * PlatformWinCairo.cmake:

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Begin enabling WebRTC on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=168915

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Use compact mode by default on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168958
        <rdar://problem/30748638>

        Reviewed by Jon Lee.

        We now use the compact layout mode by default on macOS.

        * Modules/modern-media-controls/controls/layout-item.js: Remove the ReducedPadding trait.
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css: 
        (.media-controls.mac.inline.compact .time-label,): Vertically align the time label with
        the scrubber in compact mode.
        (.media-controls.mac.inline.compact .scrubber.slider): Correctly position the scrubber in
        compact mode so that it's vertically aligned.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layoutTraitsDidChange): Remove handling of tight and
        reduced padding traits since these do not apply to macOS anymore. We also notify the
        scrubber of a layout trait change so that it may adjust its height.
        * Modules/modern-media-controls/controls/scrubber.js:
        (Scrubber):
        (Scrubber.prototype.layoutTraitsDidChange): Adjust the height of the scrubber to match
        compact layout traits.
        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.get isSufficientlyWide): Adjust the minimum scrubber width for
        TimeControl visibility to match compact layout traits.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits): Use the compact layout trait by default
        on macOS and make the tight padding specific to iOS.

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Adhere to tight padding on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168949
        <rdar://problem/30746164>

        Reviewed by Jon Lee.

        We used to only support custom margins on macOS, to support this on iOS as
        well, we promote the notification when the layoutTraits property is set to
        MediaControls and expose a new protected method layoutTraitsDidChange() for
        subclasses to implement. IOSInlineMediaControls now implements that method
        and will use tighter margins for the TightPadding layout trait.

        Test: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-tight-padding.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.layoutTraitsDidChange):
        (IOSInlineMediaControls):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.get layoutTraits): Deleted.
        (MacOSInlineMediaControls.prototype.set layoutTraits): Deleted.
        (MacOSInlineMediaControls.prototype._matchLayoutTraits): Deleted.
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get layoutTraits):
        (MediaControls.prototype.set layoutTraits):
        (MediaControls.prototype.layoutTraitsDidChange):

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

        [WebRTC] Support modern RTCStatsReport
        https://bugs.webkit.org/show_bug.cgi?id=166916
        <rdar://problem/30293780>

        Reviewed by Alex Christensen.

        Updating binding generator and IDL parser to handle maplike.
        Covered by binding tests.

        Added support for maplike binding from JS wrapper to DOM class.
        The principle is to have the JSXX wrapper having a @backingMap slot containing a Map.
        All maplike methods are forwarded to the corresponding Map methods.
        The XX object is responsible to add key/value pairs using a helper routine.
        The creation of the Map is done at creation of the JSXX wrapper.

        DOM class is interacting with the map through DOMMapLike.
        Extracted DOMGuarded from DOM promise implementation.
        This allows reusing this code for DOMMapLike.

        Covered by binding tests and manual tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::InboundRTPStreamStats::InboundRTPStreamStats):
        (WebCore::RTCStatsReport::OutboundRTPStreamStats::OutboundRTPStreamStats):
        (WebCore::RTCStatsReport::create):
        (WebCore::RTCStatsReport::synchronizeBackingMap):
        (WebCore::RTCStatsReport::backingMap):
        (WebCore::RTCStatsReport::addStats):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fromStdString):
        (WebCore::fillRTCStats):
        (WebCore::fillRTCRTPStreamStats):
        (WebCore::fillInboundRTPStreamStats):
        (WebCore::fillOutboundRTPStreamStats):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBindingInternals.js: Added.
        (mapLikeForEach):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMGuardedObject.cpp: Added.
        (WebCore::DOMGuardedObject::DOMGuardedObject):
        (WebCore::DOMGuardedObject::~DOMGuardedObject):
        (WebCore::DOMGuardedObject::clear):
        (WebCore::DOMGuardedObject::contextDestroyed):
        * bindings/js/JSDOMGuardedObject.h: Added.
        (WebCore::DOMGuardedObject::isSuspended):
        (WebCore::DOMGuardedObject::visitAggregate):
        (WebCore::DOMGuardedObject::guardedObject):
        (WebCore::DOMGuardedObject::globalObject):
        (WebCore::DOMGuardedObject::isEmpty):
        (WebCore::DOMGuarded::DOMGuarded):
        (WebCore::DOMGuarded::guarded):
        * bindings/js/JSDOMMapLike.cpp: Added.
        (WebCore::getBackingMap):
        (WebCore::initializeBackingMap):
        (WebCore::createBackingMap):
        (WebCore::forwardAttributeGetterToBackingMap):
        (WebCore::forwardFunctionCallToBackingMap):
        (WebCore::forwardForEachCallToBackingMap):
        * bindings/js/JSDOMMapLike.h: Added.
        (WebCore::DOMMapLike::set):
        (WebCore::synchronizeBackingMap):
        (WebCore::forwardSizeToMapLike):
        (WebCore::forwardEntriesToMapLike):
        (WebCore::forwardKeysToMapLike):
        (WebCore::forwardValuesToMapLike):
        (WebCore::forwardClearToMapLike):
        (WebCore::forwardForEachToMapLike):
        (WebCore::forwardHasToMapLike):
        (WebCore::forwardAddToMapLike):
        (WebCore::forwardDeleteToMapLike):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::promise):
        (WebCore::DeferredPromise::reject):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::resolve):
        (WebCore::DeferredPromise::resolveWithNewlyCreated):
        (WebCore::DeferredPromise::reject):
        (WebCore::DeferredPromise::resolveWithCallback):
        (WebCore::DeferredPromise::rejectWithCallback):
        (WebCore::DeferredPromise::DeferredPromise):
        (WebCore::DeferredPromise::deferred):
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (PrototypeFunctionCount):
        (GeneratePropertiesHashTable):
        (InterfaceNeedsIterator):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bindings/scripts/IDLParser.pm:
        (assert):
        (parseAttributeOrOperationOrIterator):
        (parseSerializer):
        (parseAttributeOrOperationRest):
        (parseAttribute):
        (parseAttributeRest):
        (parseOperationOrIterator):
        (parseOptionalIterableInterface):
        (parseMapLikeRest):
        (parseMapLikeProperties):
        (parseOperationRest):
        (applyMemberList):
        * bindings/scripts/test/JS/JSMapLike.cpp: Added.
        * bindings/scripts/test/JS/JSMapLike.h: Added.
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp: Added.
        * bindings/scripts/test/JS/JSReadOnlyMapLike.h: Added.
        * bindings/scripts/test/TestMapLike.idl: Added.
        * bindings/scripts/test/TestReadOnlyMapLike.idl: Added.

2017-02-27  Mark Lam  <mark.lam@apple.com>

        Introduce a VM Traps mechanism and refactor Watchdog to use it.
        https://bugs.webkit.org/show_bug.cgi?id=168842

        Reviewed by Filip Pizlo.

        No new tests needed because this is a re-implementation of existing functionality.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):

2017-02-27  Andy Estes  <aestes@apple.com>

        [Cocoa] Rename FileMac.mm to FileCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=168947

        Reviewed by Zalan Bujtas.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/FileCocoa.mm: Renamed from Source/WebCore/fileapi/FileMac.mm.

2017-02-27  Andy Estes  <aestes@apple.com>

        [iOS] Enable file replacement
        https://bugs.webkit.org/show_bug.cgi?id=168907
        <rdar://problem/22258242>

        Reviewed by David Kilzer.

        Covered by existing tests.

        * fileapi/FileMac.mm:
        (WebCore::File::shouldReplaceFile): Stop using Carbon and AppKit API for determining if a
        file path is a file package. Use NSURL and CoreServices instead, which exist on Mac and iOS.

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Use a solid background for <audio> controls on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168941
        <rdar://problem/30744316>

        Reviewed by Dean Jackson.

        Use a solid background for <audio> elements on macOS, the same way we do on iOS.

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-audio-background.html

        * 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):

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] StatusLabel should use similar properties to TimeLabel
        https://bugs.webkit.org/show_bug.cgi?id=168938
        <rdar://problem/30743185>

        Reviewed by Dean Jackson.

        Ensure we use the same styling properties for StatusLabel and TimeLabel.

        Tests: media/modern-media-controls/status-label/status-label-ios.html
               media/modern-media-controls/status-label/status-label-macos.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (.media-controls.ios.inline .time-label,):
        (.media-controls.ios.inline .time-label): Deleted.
        * Modules/modern-media-controls/controls/macos-media-controls.css:
        (.media-controls.mac > .controls-bar .time-label,):
        (.media-controls.mac > .controls-bar .time-label): Deleted.
        * Modules/modern-media-controls/controls/status-label.css:
        (.status-label):

2017-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename ICU cursor iterator to caret iterator
        https://bugs.webkit.org/show_bug.cgi?id=168206

        Reviewed by Simon Fraser.

        Mechanical find/replace.

        No new tests because there is no behavior change.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):

2017-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix -webkit-line-break
        https://bugs.webkit.org/show_bug.cgi?id=168213

        Reviewed by Darin Adler.

        We support the property as specced.

        Test: fast/text/line-break-unprefixed.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):

2017-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Use RAII for ICU breaking iterators
        https://bugs.webkit.org/show_bug.cgi?id=168203

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):

2017-02-27  Basuke Suzuki  <Basuke.Suzuki@am.sony.com>

        [WinCairo][MiniBrowser] Add ca-bundle to display secure pages
        https://bugs.webkit.org/show_bug.cgi?id=168486

        Reviewed by Alex Christensen.

        change the order of path location search to make it possible to 
        configure with environment variable because bundled ca-bundle is
        always available now.

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

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Status text does not appear on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168918
        <rdar://problem/30737644>

        Reviewed by Dean Jackson.

        We refactor the layout code out of MacOSInlineMediaControls and into a new
        InlineLayoutSupport class which IOSInlineMediaControls uses as well. Now
        both the macOS and iOS inline media controls run the same layout logic to
        control whether the status label or scrubber should be displayed, and which
        controls should be dropped due to space constraints.

        Test: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-status-label.html

        * Modules/modern-media-controls/controls/inline-layout-support.js: Added.
        (InlineLayoutSupport):
        (InlineLayoutSupport.prototype.childrenAfterPerformingLayout):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.layout):
        (IOSInlineMediaControls):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/js-files:

2017-02-27  Simon Fraser  <simon.fraser@apple.com>

        Add specification and status metadata to CSSProperties.json, and validate it
        https://bugs.webkit.org/show_bug.cgi?id=168901

        Reviewed by Darin Adler.

        Annotate CSS properties with data about the WebKit development status, and
        where they are specified. A property has a canonical specification reference,
        but individual values may have a reference to a more recent spec.

        Add a list of specifications to the JSON that properties reference by key.

        Enhance check-webkit-style to validate the status and spec data.

        * css/CSSProperties.json:

2017-02-27  Jiewen Tan  <jiewen_tan@apple.com>

        [CredentialManagement] Add IDL definitions for Credential, SiteBoundCredential, and PasswordCredential
        https://bugs.webkit.org/show_bug.cgi?id=168616
        <rdar://problem/30167149>

        Reviewed by Daniel Bates.

        This patch adds IDL definitions for:
        1. Credential(https://w3c.github.io/webappsec-credential-management/#interfaces-credential-types-credential),
        2. SiteBoundCredential(https://w3c.github.io/webappsec-credential-management/#interfaces-credential-types-siteboundcredential), and
        3. PasswordCredential(https://w3c.github.io/webappsec-credential-management/#interfaces-credential-types-passwordcredential).

        Test: credentials/idlharness.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/credentials/BasicCredential.cpp: Added.
        (WebCore::BasicCredential::BasicCredential):
        (WebCore::BasicCredential::~BasicCredential):
        (WebCore::BasicCredential::type):
        * Modules/credentials/BasicCredential.h: Added.
        (WebCore::BasicCredential::id):
        * Modules/credentials/BasicCredential.idl: Added.
        * Modules/credentials/CredentialData.h: Added.
        * Modules/credentials/CredentialData.idl: Added.
        * Modules/credentials/PasswordCredential.cpp: Added.
        (WebCore::PasswordCredential::PasswordCredential):
        (WebCore::PasswordCredential::PasswordCredential):
        Dummy constructors for now.
        * Modules/credentials/PasswordCredential.h: Added.
        (WebCore::PasswordCredential::create):
        (WebCore::PasswordCredential::create):
        (WebCore::PasswordCredential::setIdName):
        (WebCore::PasswordCredential::idName):
        (WebCore::PasswordCredential::setPasswordName):
        (WebCore::PasswordCredential::passwordName):
        (WebCore::PasswordCredential::setAdditionalData):
        (WebCore::PasswordCredential::additionalData):
        * Modules/credentials/PasswordCredential.idl: Added.
        * Modules/credentials/SiteBoundCredential.cpp: Added.
        (WebCore::SiteBoundCredential::SiteBoundCredential):
        (WebCore::SiteBoundCredential::~SiteBoundCredential):
        * Modules/credentials/SiteBoundCredential.h: Added.
        (WebCore::SiteBoundCredential::name):
        (WebCore::SiteBoundCredential::iconURL):
        (WebCore::SiteBoundCredential::setOrigin):
        (WebCore::SiteBoundCredential::origin):
        * Modules/credentials/SiteBoundCredential.idl: Added.
        * Modules/credentials/SiteBoundCredentialData.h: Added.
        * Modules/credentials/SiteBoundCredentialData.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:

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

        [WebRTC] Fix remote audio rendering
        https://bugs.webkit.org/show_bug.cgi?id=168898

        Reviewed by Eric Carlson.

        Test: webrtc/audio-peer-connection-webaudio.html

        Fix MediaStreamAudioSourceNode by not bailing out early if the input sample rate doesn't match
        the AudioContext's sample rate; there's code in setFormat() to do the sample rate conversion
        correctly.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):

        Fix AudioSampleBufferList by making the AudioConverter input proc a free function, and passing
        its refCon a struct containing only the information it needs to perform its task. Because the
        conversion may result in a different number of output samples than input ones, just ask to
        generate the entire capacity of the scratch buffer, and signal that the input buffer was fully
        converted with a special return value.

        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::audioConverterFromABLCallback):
        (WebCore::AudioSampleBufferList::copyFrom):
        (WebCore::AudioSampleBufferList::convertInput): Deleted.
        (WebCore::AudioSampleBufferList::audioConverterCallback): Deleted.
        * platform/audio/mac/AudioSampleBufferList.h:

        Fix AudioSampleDataSource by updating both the sampleCount and the sampleTime after doing
        a sample rate conversion to take into account that both the number of samples may have changed,
        as well as the timeScale of the sampleTime. This may result in small off-by-one rounding errors
        due to the sample rate conversion of sampleTime, so remember what the next expected sampleTime
        should be, and correct sampleTime if it is indeed off-by-one. If the pull operation has gotten
        ahead of the push operation, delay the next pull by the empty amount by rolling back the
        m_outputSampleOffset. Introduce the same offset behavior during pull operations.

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

        Fix MediaPlayerPrivateMediaStreamAVFObjC by obeying the m_muted property.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted):

        Fix LibWebRTCAudioModule by sleeping for the correct amount after emitting frames. Previously,
        LibWebRTCAudioModule would sleep for a fixed amount of time, which meant it would get slowly out
        of sync when emitting frames took a non-zero amount of time. Now, the amount of time before the
        next cycle starts is correctly calculated, and then LibWebRTCAudioModule sleeps for a dynamic amount
        of time in order to wake up correctly at the beginning of the next cycle.

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::StartPlayoutOnAudioThread):

        Fix AudioTrackPrivateMediaStreamCocoa by just using the output unit's preferred format
        description (with the current system sample rate), rather than whatever is the current
        input description.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:

        Fix RealtimeIncomingAudioSource by actually creating an AudioSourceProvider when asked.

        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData):
        (WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:

        Fix RealtimeOutgoingAudioSource by using the outgoing format description rather than the
        incoming one to determine the sample rate, channel count, sample byte size, etc., to use
        when delivering data upstream to libWebRTC.

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

        Fix WebAudioSourceProviderAVFObjC by using a AudioSampleDataSource to do format and sample
        rate conversion rather than trying to duplicate all that code and use a CARingBuffer and 
        AudioConverter directly.

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

        Fix the MockLibWebRTCAudioTrack by passing along the AddSink() sink to its AudioSourceInterface,
        allowing the RealtimeOutgoingAudioSource to push data into the libWebRTC network stack. Also,
        make sure m_enabled is initialized to a good value.

        * testing/MockLibWebRTCPeerConnection.h:

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

        AudioSampleDataSource should not exclusively lock its read and write threads.
        https://bugs.webkit.org/show_bug.cgi?id=168646

        Reviewed by Eric Carlson.

        Locking the write thread causes the read thread to drop audio samples and generates audible
        glitches, and the realtime audio thread backing the read thread should never block. There's
        no real reason to lock these threads against one another here; they both rely on the
        CARingBuffer to safely and simultaneously read and write data.

        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::setPaused):
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pushSamples):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
        (WebCore::AudioSampleDataSource::pullSamples):
        * platform/audio/mac/AudioSampleDataSource.h:

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

        AudioTrackPrivateMediaStreamCocoa should not exclusively lock its read and write threads.
        https://bugs.webkit.org/show_bug.cgi?id=168643

        Reviewed by Eric Carlson.

        Locking the write thread causes the read thread to drop audio samples and generates audible
        glitches, and the realtime audio thread backing the read thread should never block. There's
        no real reason to lock these threads against one another here; they both rely on the
        AudioSampleDataSource and it's CARingBuffer to safely and simultaneously read and write
        data.

        The one piece which locks previously protected against unsafe access was during creation of
        the audio unit.  Without a lock, the audio unit could begin playback after the unit was
        created and assigned to m_remoteIOUnit but before the ring buffer was created. To protect
        against this possibility, create the unit, set the input and output descriptions, but only
        assign the new audio unit to m_remoteIOUnit after the ring buffer has been created and
        initialized.

        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::~AudioTrackPrivateMediaStreamCocoa):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::playInternal):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::play):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::pause):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::setVolume):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::setupAudioUnit): Renamed to createAudioUnit()
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:

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

        [WebRTC] RealtimOutgoingVideoSource should not need to do image conversion
        https://bugs.webkit.org/show_bug.cgi?id=168802

        Reviewed by Jon Lee.

        Covered by manual testing as mock sources do not hit the same code path.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::currentFrameCGImage):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Downloads attributes tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=168871

        Reviewed by Michael Catanzaro.

        Use libsoup to get the suggested filename from the Content-Disposition header instead of buggy
        filenameFromHTTPContentDisposition().

        Fixes: fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-doublequote.html
               fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-unicode.html

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename):

2017-02-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Dragging controls in fullscreen on macOS prevents scrubbing or interacting with controls
        https://bugs.webkit.org/show_bug.cgi?id=168820
        <rdar://problem/30690281>

        Reviewed by Jon Lee.

        We broke this in https://bugs.webkit.org/show_bug.cgi?id=168755. We restore the check that the
        event target when initiating a drag is the controls bar itself and not some of its content.

        Since this wasn't caught by our existing tests, we add a test that attemps to initiate a drag
        starting over one of the controls and notice that no dragging occurs.

        We also fix an issue where we wouldn't update the layout of the left container as its icon
        buttons would load, which would cause the layout width of the left container to be incorrect
        and the related tests to time out.

        Test: media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-drag-is-prevented-over-button.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        (MacOSFullscreenMediaControls.prototype._handleMousedown):

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        [libwebrtc] Enable WebRTC in some Production Builds
        https://bugs.webkit.org/show_bug.cgi?id=168858

        * Configurations/FeatureDefines.xcconfig:

2017-02-27  Zan Dobersek  <zdobersek@igalia.com>

        [TextureMapper] Clean up BitmapTextureGL construction
        https://bugs.webkit.org/show_bug.cgi?id=168909

        Reviewed by Carlos Garcia Campos.

        Have the BitmapTextureGL constructor accept an rvalue reference pointer
        to the GraphicsContext3D object. A static create() method is also added
        to help with constructing these objects. Construction sites are updated
        appropriately.

        The BitmapTextureGL constructor is further cleaned up by moving default
        member initializations together with the member declarations.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        * platform/graphics/texmap/BitmapTextureGL.h:
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::createTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::createTexture):

2017-02-27  Zan Dobersek  <zdobersek@igalia.com>

        [TextureMapper] Remove InterpolationQuality, TextDrawingModeFlags member variables
        https://bugs.webkit.org/show_bug.cgi?id=168906

        Reviewed by Carlos Garcia Campos.

        Remove the InterpolationQuality and TextDrawingModeFlags member variables from the
        TextureMapper class. These weren't modified anywhere in the code.

        BitmapTexture::updateContents() still sets the image interpolation quality and
        drawing mode on the ImageBuffer's GraphicsContext, but now uses the default
        InterpolationDefault and TextModeFill values.

        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper): Deleted.
        (WebCore::TextureMapper::~TextureMapper): Deleted.
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setImageInterpolationQuality): Deleted.
        (WebCore::TextureMapper::setTextDrawingMode): Deleted.
        (WebCore::TextureMapper::imageInterpolationQuality): Deleted.
        (WebCore::TextureMapper::textDrawingMode): Deleted.

2017-02-26  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Remove CoordinatedGraphicsScene::paintToGraphicsContext()
        https://bugs.webkit.org/show_bug.cgi?id=168903

        Reviewed by Carlos Garcia Campos.

        Remove the GraphicsContext pointer member from the TextureMapper class
        since the getter and setter methods are not used anywhere.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setGraphicsContext): Deleted.
        (WebCore::TextureMapper::graphicsContext): Deleted.

2017-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop compiling our own cursorMovementIterator()
        https://bugs.webkit.org/show_bug.cgi?id=168211

        Reviewed by David Hyatt.

        Covered by existing tests.

        Hook up the caret iterator.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        * rendering/RenderText.h:

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

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

        Made EWS very flaky (Requested by ap on #webkit).

        Reverted changeset:

        "[Modern Media Controls] Dragging controls in fullscreen on
        macOS prevents scrubbing or interacting with controls"
        https://bugs.webkit.org/show_bug.cgi?id=168820
        http://trac.webkit.org/changeset/212942

2017-02-26  Chris Dumez  <cdumez@apple.com>

        HitTestResult's linkSuggestedFilename should sanitize download attribute
        https://bugs.webkit.org/show_bug.cgi?id=168856
        <rdar://problem/30683109>

        Reviewed by Antti Koivisto.

        HitTestResult's linkSuggestedFilename should sanitize download attribute.
        This is used by the context menu's "Download Linked File" & "Download Linked
        File As..." actions.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::linkSuggestedFilename):
        * rendering/HitTestResult.h:

2017-02-25  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move coverage functions out of SimpleLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=168872
        
        Reviewed by Simon Fraser.

        SimpleLineLayout.cpp is for core functions only.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderingAllInOne.cpp:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        (WebCore::SimpleLineLayout::printReason): Deleted.
        (WebCore::SimpleLineLayout::printReasons): Deleted.
        (WebCore::SimpleLineLayout::printTextForSubtree): Deleted.
        (WebCore::SimpleLineLayout::textLengthForSubtree): Deleted.
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlows): Deleted.
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlowsForCurrentPage): Deleted.
        (WebCore::SimpleLineLayout::toggleSimpleLineLayout): Deleted.
        (WebCore::SimpleLineLayout::printSimpleLineLayoutBlockList): Deleted.
        (WebCore::SimpleLineLayout::printSimpleLineLayoutCoverage): Deleted.
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutCoverage.cpp: Added.
        (WebCore::SimpleLineLayout::printReason):
        (WebCore::SimpleLineLayout::printReasons):
        (WebCore::SimpleLineLayout::printTextForSubtree):
        (WebCore::SimpleLineLayout::textLengthForSubtree):
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlows):
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlowsForCurrentPage):
        (WebCore::SimpleLineLayout::toggleSimpleLineLayout):
        (WebCore::SimpleLineLayout::printSimpleLineLayoutBlockList):
        (WebCore::SimpleLineLayout::printSimpleLineLayoutCoverage):
        * rendering/SimpleLineLayoutCoverage.h: Added.

2017-02-25  Zalan Bujtas  <zalan@apple.com>

        Text might wrap when its preferred logical width is used for sizing the containing block.
        https://bugs.webkit.org/show_bug.cgi?id=168864
        <rdar://problem/30690734>

        Reviewed by Antti Koivisto.

        In certain cases we end up measuring a text run in 2 different ways.
        1. preferred width computation -> slow path FontCascade::width() 
        2. line breaking logic -> fast path FontCascade::widthForSimpleText()
 
        FontCascade::width() and ::widthForSimpleText() might return different results for the same run even when
        the individual glyph widths are measured to be the same. It's because they run diffrent set of
        arithmetics on the float values and for certain values these arithmetics produce different results due to the floating point
        precision.
        Since RenderText::computePreferredLogicalWidths() currently forces us to use the slow path
        (to retrieve fontfallback and glyph overflow information) the only alternative solution is to turn off the fast path
        for all runs that have been already measured using the slow path (which would be just wasteful).

        Test: fast/text/fast-run-width-vs-slow-run-width.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText): Mimics WidthIterator::applyFontTransforms. Use the same set of arithmetics here.  

2017-02-24  Simon Fraser  <simon.fraser@apple.com>

        Improve how multiple codegen-properties are handled in CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=168867

        Reviewed by Zalan Bujtas.

        To make upcoming metadata storage easier, it's better if property entries in CSSProperties.json
        are always hashes. One property (line-height) used an array, in order to represent settings for
        two different build flags (ENABLE_TEXT_AUTOSIZING and !ENABLE_TEXT_AUTOSIZING).

        Fix by making "codegen-properties" optionally be an array. The relevant item is selected in
        removeInactiveCodegenProperties() and used to replace the array.

        Sort @internalProprerties when generating code, otherwise the contents of isInternalCSSProperty()
        are unstable (the order in @allNames is not stable because it's the keys in a hash).

        * css/CSSProperties.json:
        * css/makeprop.pl:
        (matchEnableFlags):
        (removeInactiveCodegenProperties):
        (isPropertyEnabled):

2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Media elements initiated loads should set the initiatorType to their element name (video/audio)
        https://bugs.webkit.org/show_bug.cgi?id=168680

        Reviewed by Youenn Fablet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        Pass in the element so it may be used as the initiator.

        * html/HTMLVideoElement.h:
        Export create() for TestWebKitAPI to use.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        (WebCore::MediaResourceLoader::contextDestroyed):
        (WebCore::MediaResourceLoader::requestResource):
        * loader/MediaResourceLoader.h:
        Include the HTMLMediaElement as the initiator.

2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        This patch replaces the unused `double finishTime` in ResourceLoader's
        didFinishLoad with a complete WebCore::NetworkLoadMetrics object. This
        allows the NetworkProcess to give complete timing information, and more
        final metrics about the load, to WebCore. Currently this is only used
        by ResourceTiming, but it will soon be used by Web Inspector as well.
        We may also end up extending this to the didFail path as well, since it
        is possible that we have some metrics for load failures.

        At the same time we want to start moving away from the legacy path that
        populated a subset of this information in ResourceResponse's NetworkLoadMetrics.
        It doesn't make sense to store this information on the ResourceResponse
        for a few reasons: We don't want to store the metrics in our Network Cache and
        not all of the load timing metrics have been populated yet (responseEnd).
        In an effort to move off of this data we've renamed the accessor to
        "deprecatedNetworkLoadMetrics". There are a few remaining clients
        (ResourceHandle, PerformanceTiming, InspectorNetworkAgent) which can be
        migrated separately from this patch.

        Having both the legacy and new code paths adds a little bit of complexity.
        One advantage of the new path is that the complete load timing data
        (fetchStart -> dns -> connect -> request -> response -> responseEnd) can
        be packaged together. The legacy path could not include a responseEnd, so
        WebCore faked that value with its own timestamp. Having the fake responseEnd
        caused issues as timestamps / clocks are different between processes. In order
        for PerformanceResponseTiming to know whether or not the NetworkLoadMetrics
        has the complete network timing metrics it checks isComplete(). If true
        it knows it can use the responseEnd time from NetworkLoadMetrics, otherwise
        it must fallback to the legacy value from LoadTiming. Once all of the
        deprecatedNetworkLoadMetrics clients go away, we should always have the
        complete data and this can be eliminated.

        Tests: imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html
               imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Rename NetworkLoadTiming -> NetworkLoadMetrics.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::entryStartTime):
        (WebCore::entryEndTime):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::nextHopProtocol):
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        (WebCore::PerformanceResourceTiming::responseStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
        * page/PerformanceResourceTiming.h:
        Mostly just updating names and types. This does however need to get the
        correct endTime based on whether the NetworkLoadMetrics are complete
        (meaning includes responseEnd) or not (legacy, use LoadTiming value).

        * page/PerformanceResourceTiming.idl:
        Add nextHopProtocol.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::secureConnectionStart):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart):
        * page/PerformanceTiming.h:
        Navigation Timing values still uses the NetworkLoadTiming values stored on
        the DocumentLoader. This should be moved off of the deprecated path separately.

        * platform/network/NetworkLoadMetrics.h: Renamed from Source/WebCore/platform/network/NetworkLoadTiming.h.
        (WebCore::NetworkLoadMetrics::NetworkLoadMetrics):
        (WebCore::NetworkLoadMetrics::isolatedCopy):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::operator==):
        (WebCore::NetworkLoadMetrics::operator!=):
        (WebCore::NetworkLoadMetrics::isComplete):
        (WebCore::NetworkLoadMetrics::markComplete):
        (WebCore::NetworkLoadMetrics::encode):
        (WebCore::NetworkLoadMetrics::decode):
        Re-introduce a reset() method (for NetworkLoadSoup to reset between redirects).
        Add protocolName and "complete" boolean.

        * platform/network/cocoa/NetworkLoadMetrics.mm: Renamed from Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm.
        (WebCore::timingValue):
        (WebCore::copyTimingData):
        (WebCore::setCollectsTimingData):
        Use this opportunity to convert NetworkLoadTiming timestamps to WTF::Seconds.
        Since we already have to modify all the clients this moves us to use the more
        strongly typed units that are less ambiguous then "double". The rest of the
        Performance API has already moved to these units.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * inspector/InspectorNetworkAgent.h:
        Inspector was the only client of the finishTime, and since the value was
        erratically coming from clients in different ways it was almost certainly
        inaccurate. Simplify this in preparation for using NetworkLoadMetrics.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::didFinishLoading):
        * Modules/fetch/FetchLoader.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didFinishLoading):
        * fileapi/FileReaderLoader.h:
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseNPTTime):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishLoading):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::notifyFinished):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::deliverResponseAndData):
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        * loader/ResourceLoader.h:
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromLoad):
        (WebCore::ResourceTiming::fromSynchronousLoad):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::isolatedCopy):
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::networkLoadMetrics):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::networkLoadTiming): Deleted.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::reportResourceTiming):
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setLoadFinishTime):
        * loader/ios/QuickLook.mm:
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        * page/EventSource.cpp:
        (WebCore::EventSource::didFinishLoading):
        * page/EventSource.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didFinishLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::doNotifyFinish):
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::crossThreadData):
        (WebCore::ResourceResponseBase::fromCrossThreadData):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::deprecatedNetworkLoadMetrics):
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):
        (WebCore::ResourceResponseBase::networkLoadTiming): Deleted.
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didFinishLoading):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::calculateWebTimingInformations):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::handleDataURL):
        (WebCore::milisecondsSinceRequest): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::networkEventCallback):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::readCallback):
        (WebCore::milisecondsSinceRequest): Deleted.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didFinishLoading):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        Eliminate the unused finishTime double.

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK build fix after r212965

        * CMakeLists.txt:

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r212944.

        Caused a lot of failures on the debug bots

        Reverted changeset:

        "[Resource Timing] Gather timing information with reliable
        responseEnd time"
        https://bugs.webkit.org/show_bug.cgi?id=168351
        http://trac.webkit.org/changeset/212944

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, follow-up fix after r212972.

        Fixes a few assertions on the debug build bots.
        URL needs to be exactly the same as the parsed one given
        that we are calling the ParsedURLString constructor.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename):

2017-02-24  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Re-adjust paginated lines when block height changes.
        https://bugs.webkit.org/show_bug.cgi?id=168838
        <rdar://problem/30701233>

        Reviewed by Antti Koivisto.

        When the estimated block height is wrong, we issue an additional layout on the inline children
        so that we get the pagination right (this layout is setChildNeedsLayout(MarkOnlyThis) only).
        Since the height change only affects the struts and page breaks (and again, the relayoutChildren flag is false)
        we don't need to re-layout the content, but instead we just need to re-adjust the pagination for the simple lines. 
        This patch also moves the pagination logic to SimpleLineLayoutPagination.cpp.

        Not enabled yet.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        * rendering/RenderingAllInOne.cpp:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        (WebCore::SimpleLineLayout::computeLineTopAndBottomWithOverflow): Deleted.
        (WebCore::SimpleLineLayout::computeLineBreakIndex): Deleted.
        (WebCore::SimpleLineLayout::computeOffsetAfterLineBreak): Deleted.
        (WebCore::SimpleLineLayout::setPageBreakForLine): Deleted.
        (WebCore::SimpleLineLayout::updateMinimumPageHeight): Deleted.
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination): Deleted.
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Layout::setIsPaginated):
        (WebCore::SimpleLineLayout::Layout::setLineStruts):
        * rendering/SimpleLineLayoutPagination.cpp: Added.
        (WebCore::SimpleLineLayout::computeLineTopAndBottomWithOverflow):
        (WebCore::SimpleLineLayout::computeLineBreakIndex):
        (WebCore::SimpleLineLayout::computeOffsetAfterLineBreak):
        (WebCore::SimpleLineLayout::setPageBreakForLine):
        (WebCore::SimpleLineLayout::updateMinimumPageHeight):
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination):
        * rendering/SimpleLineLayoutPagination.h: Added.

2017-02-24  Jon Lee  <jonlee@apple.com>

        Alias "system-ui" for the System font name
        https://bugs.webkit.org/show_bug.cgi?id=151493

        Reviewed by Tim Horton and Joseph Pecoraro.

        Updated existing tests.

        * WebCore.xcodeproj/project.pbxproj: Add WebKitFontFamilyNames.in for
        convenience.
        * css/CSSValueKeywords.in: Add system-ui as a keyword.
        * css/WebKitFontFamilyNames.in: Add system-ui.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase): Include "system-ui" as an
        alias.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase): Ditto.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateCachedSystemFontDescription): Update
        serialization to "system-ui" from "-apple-system".

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::identifierForFamily):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::familyNameFromPrimitive):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontFamily):

2017-02-24  Matt Rajca  <mrajca@apple.com>

        Media: notify clients when autoplay is denied
        https://bugs.webkit.org/show_bug.cgi?id=168840

        Reviewed by Alex Christensen.

        Added API tests.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        * page/AutoplayEvent.h: Added.
        * page/ChromeClient.h:

2017-02-24  Basuke Suzuki  <Basuke.Suzuki@am.sony.com>

        curl: Improve errors by including the domain
        https://bugs.webkit.org/show_bug.cgi?id=134340

        Reviewed by Alex Christensen.

        Added proper error domain to ResourceError created by
        Curl problem.

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

2017-02-24  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] <audio> controls should center in their container when the page is scaled
        https://bugs.webkit.org/show_bug.cgi?id=168841
        <rdar://problem/28612794>

        Reviewed by Eric Carlson.

        When dealing with <audio> elements, we vertically center the controls relative to their containing
        media element such that if the controls visually overflow, they overflow equally above and below
        to minimize the likelihood of overlap with surrounding elements.

        Test: media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get shouldCenterControlsVertically):
        (MediaControls.prototype.set shouldCenterControlsVertically):
        (MediaControls.prototype.commitProperty):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get isAudio):
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype._updateControlsSize):

2017-02-24  Alex Christensen  <achristensen@webkit.org>

        Non-special relative URLs should not ignore extra slashes
        https://bugs.webkit.org/show_bug.cgi?id=168834

        Reviewed by Sam Weinig.

        Special authority ignore slashes state should, as its name implies,
        only be reached by special URLs.  See https://url.spec.whatwg.org/#relative-slash-state

        Covered by newly passing web platform tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2017-02-24  Alexey Proskuryakov  <ap@apple.com>

        Build fix for newer clang
        https://bugs.webkit.org/show_bug.cgi?id=168849
        rdar://problem/30638741

        Reviewed by Ryosuke Niwa.

        * dom/Range.cpp: (WebCore::Range::toString): std::max(0, <unsigned>) is not meaningful,
        and now triggers a warning.

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Download attribute should be sanitized before being used as suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=168839
        <rdar://problem/30683109>

        Reviewed by Darin Adler.

        Sanitize Download attribute before using it as a suggested filename for the download.
        We rely on ResourceResponse's sanitizing of the suggested filename to do so, which has
        the benefit of being consistent with downloads without the download attribute.

        Tests: fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-doublequote.html
               fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-slashes.html
               fast/dom/HTMLAnchorElement/anchor-file-blob-download-includes-unicode.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeSuggestedFilename):
        * platform/network/ResourceResponseBase.h:

2017-02-24  Miguel Gomez  <magomez@igalia.com>

        [GTK] WebkitWebProcess crashes on exit on nvidia if threaded compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=165522

        Reviewed by Carlos Garcia Campos.

        Before destrying a GLContextGLX we need to set the default framebufer to avoid a bug
        in some nvidia drivers. Ensure that we set the context as current before performing
        that operation, and set the appropriate current context after doing so.

        No new tests.

        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::~GLContextGLX):

2017-02-24  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] Disable network cache speculative revalidation / loading in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168832
        <rdar://problem/30697911>

        Reviewed by Antti Koivisto.

        Add LowPowerModeNotifier class to monitor low power mode state on iOS.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/LowPowerModeNotifier.cpp: Added.
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::isLowPowerModeEnabled):
        * platform/LowPowerModeNotifier.h: Added.
        * platform/ios/LowPowerModeNotifierIOS.mm: Added.
        (-[WebLowPowerModeObserver initWithNotifier:]):
        (-[WebLowPowerModeObserver dealloc]):
        (-[WebLowPowerModeObserver _didReceiveLowPowerModeChange]):
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::isLowPowerModeEnabled):
        (WebCore::LowPowerModeNotifier::notifyLowPowerModeChanged):
        (WebCore::notifyLowPowerModeChanged):

2017-02-24  Chris Dumez  <cdumez@apple.com>

        [Mac] Report domains using abnormally high memory usage via enhanced privacy logging
        https://bugs.webkit.org/show_bug.cgi?id=168797
        <rdar://problem/29964017>

        Reviewed by Andreas Kling.

        Report domains using abnormally high memory usage (> 2GB) via enhanced privacy
        logging on Mac.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::domainCausingJetsamKey):
        * page/DiagnosticLoggingKeys.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::reportPageOverPostLoadResourceThreshold):
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
        (WebCore::PerformanceMonitor::measurePostLoadMemoryUsage):
        (WebCore::reportPageOverPostLoadCPUUsageThreshold): Deleted.

2017-02-24  Alex Christensen  <achristensen@webkit.org>

        .. should not remove windows drive letters in paths of file URLs
        https://bugs.webkit.org/show_bug.cgi?id=168824

        Reviewed by Youenn Fablet.

        It's specified in https://url.spec.whatwg.org/#shorten-a-urls-path and helps behavior for browsers on Windows.
        It can't hurt to pass a few more web platform tests, though.

        * platform/URLParser.cpp:
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::shouldPopPath):
        (WebCore::URLParser::popPath):
        (WebCore::URLParser::parse):
        * platform/URLParser.h:

2017-02-24  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r212736.

        * PlatformMac.cmake:

2017-02-24  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>
        <rdar://problem/30646710>
        <rdar://problem/30660708>

        Reviewed by Alex Christensen.

        This patch only adds test infrastructure in WebCore.

        Tests: http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-mixed-statistics.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-sub-frame-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-unique-redirects-to.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-mixed-statistics.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-sub-frame-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-unique-redirects-to.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setSubframeUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUniqueRedirectTo):
        * loader/ResourceLoadObserver.h:

2017-02-23  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] No controls are shown for <audio preload="none">
        https://bugs.webkit.org/show_bug.cgi?id=168800
        <rdar://problem/30652142>

        Reviewed by Eric Carlson.

        A media element's currentSrc property will only be set when data has started
        to load. In the case where preload="none" is used, regardless of whether a
        source is specified, currentSrc would be the empty string and we wouldn't
        show controls at all. Identifying whether a source is specified is a little
        tricky because it could be specified in a variety of ways and dynamically
        as well.

        So instead we optimistically show controls always provided the "controls"
        attribute is set.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport.prototype._shouldShowStartButton):
        (StartSupport):

2017-02-23  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        This patch replaces the unused `double finishTime` in ResourceLoader's
        didFinishLoad with a complete WebCore::NetworkLoadMetrics object. This
        allows the NetworkProcess to give complete timing information, and more
        final metrics about the load, to WebCore. Currently this is only used
        by ResourceTiming, but it will soon be used by Web Inspector as well.
        We may also end up extending this to the didFail path as well, since it
        is possible that we have some metrics for load failures.

        At the same time we want to start moving away from the legacy path that
        populated a subset of this information in ResourceResponse's NetworkLoadMetrics.
        It doesn't make sense to store this information on the ResourceResponse
        for a few reasons: We don't want to store the metrics in our Network Cache and
        not all of the load timing metrics have been populated yet (responseEnd).
        In an effort to move off of this data we've renamed the accessor to
        "deprecatedNetworkLoadMetrics". There are a few remaining clients
        (ResourceHandle, PerformanceTiming, InspectorNetworkAgent) which can be
        migrated separately from this patch.

        Having both the legacy and new code paths adds a little bit of complexity.
        One advantage of the new path is that the complete load timing data
        (fetchStart -> dns -> connect -> request -> response -> responseEnd) can
        be packaged together. The legacy path could not include a responseEnd, so
        WebCore faked that value with its own timestamp. Having the fake responseEnd
        caused issues as timestamps / clocks are different between processes. In order
        for PerformanceResponseTiming to know whether or not the NetworkLoadMetrics
        has the complete network timing metrics it checks isComplete(). If true
        it knows it can use the responseEnd time from NetworkLoadMetrics, otherwise
        it must fallback to the legacy value from LoadTiming. Once all of the
        deprecatedNetworkLoadMetrics clients go away, we should always have the
        complete data and this can be eliminated.

        Tests: imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html
               imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Rename NetworkLoadTiming -> NetworkLoadMetrics.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::entryStartTime):
        (WebCore::entryEndTime):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::nextHopProtocol):
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        (WebCore::PerformanceResourceTiming::responseStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
        * page/PerformanceResourceTiming.h:
        Mostly just updating names and types. This does however need to get the
        correct endTime based on whether the NetworkLoadMetrics are complete
        (meaning includes responseEnd) or not (legacy, use LoadTiming value).

        * page/PerformanceResourceTiming.idl:
        Add nextHopProtocol.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::secureConnectionStart):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart):
        * page/PerformanceTiming.h:
        Navigation Timing values still uses the NetworkLoadTiming values stored on
        the DocumentLoader. This should be moved off of the deprecated path separately.

        * platform/network/NetworkLoadMetrics.h: Renamed from Source/WebCore/platform/network/NetworkLoadTiming.h.
        (WebCore::NetworkLoadMetrics::NetworkLoadMetrics):
        (WebCore::NetworkLoadMetrics::isolatedCopy):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::operator==):
        (WebCore::NetworkLoadMetrics::operator!=):
        (WebCore::NetworkLoadMetrics::isComplete):
        (WebCore::NetworkLoadMetrics::markComplete):
        (WebCore::NetworkLoadMetrics::encode):
        (WebCore::NetworkLoadMetrics::decode):
        Re-introduce a reset() method (for NetworkLoadSoup to reset between redirects).
        Add protocolName and "complete" boolean.

        * platform/network/cocoa/NetworkLoadMetrics.mm: Renamed from Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm.
        (WebCore::timingValue):
        (WebCore::copyTimingData):
        (WebCore::setCollectsTimingData):
        Use this opportunity to convert NetworkLoadTiming timestamps to WTF::Seconds.
        Since we already have to modify all the clients this moves us to use the more
        strongly typed units that are less ambiguous then "double". The rest of the
        Performance API has already moved to these units.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * inspector/InspectorNetworkAgent.h:
        Inspector was the only client of the finishTime, and since the value was
        erratically coming from clients in different ways it was almost certainly
        inaccurate. Simplify this in preparation for using NetworkLoadMetrics.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::didFinishLoading):
        * Modules/fetch/FetchLoader.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didFinishLoading):
        * fileapi/FileReaderLoader.h:
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseNPTTime):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishLoading):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::notifyFinished):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::deliverResponseAndData):
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        * loader/ResourceLoader.h:
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromLoad):
        (WebCore::ResourceTiming::fromSynchronousLoad):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::isolatedCopy):
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::networkLoadMetrics):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::networkLoadTiming): Deleted.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::reportResourceTiming):
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setLoadFinishTime):
        * loader/ios/QuickLook.mm:
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        * page/EventSource.cpp:
        (WebCore::EventSource::didFinishLoading):
        * page/EventSource.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didFinishLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::doNotifyFinish):
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::crossThreadData):
        (WebCore::ResourceResponseBase::fromCrossThreadData):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::deprecatedNetworkLoadMetrics):
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):
        (WebCore::ResourceResponseBase::networkLoadTiming): Deleted.
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didFinishLoading):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::calculateWebTimingInformations):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::handleDataURL):
        (WebCore::milisecondsSinceRequest): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::networkEventCallback):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::readCallback):
        (WebCore::milisecondsSinceRequest): Deleted.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didFinishLoading):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        Eliminate the unused finishTime double.

2017-02-23  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls overflow when media element has border or padding
        https://bugs.webkit.org/show_bug.cgi?id=168818
        <rdar://problem/30689780>

        Reviewed by Jon Lee.

        We used to query the media element's layout size to compute the size of the media controls,
        which would account for border and padding. Instead, we should use the size of the container,
        at the root of the ShadowRoot, which will always match the size of the media.

        Test: media/modern-media-controls/media-controller/media-controller-controls-sizing-with-border-and-padding.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container,):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsSize):
        (MediaController.prototype._controlsWidth):

2017-02-23  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Dragging controls in fullscreen on macOS prevents scrubbing or interacting with controls
        https://bugs.webkit.org/show_bug.cgi?id=168820
        <rdar://problem/30690281>

        Reviewed by Jon Lee.

        We broke this in https://bugs.webkit.org/show_bug.cgi?id=168755. We restore the check that the
        event target when initiating a drag is the controls bar itself and not some of its content.

        Since this wasn't caught by our existing tests, we add a test that attemps to initiate a drag
        starting over one of the controls and notice that no dragging occurs.

        Test: media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-drag-is-prevented-over-button.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype._handleMousedown):

2017-02-23  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r211305): Masks on composited elements with preserve-3d broken
        https://bugs.webkit.org/show_bug.cgi?id=168815
        rdar://problem/30676846

        Reviewed by Jon Lee.

        r211305 moved the mask layer to be on the structural layer if there is one, to fix
        masking backdrops. However, with preserve-3d the structural layer can be a CATransformLayer,
        which doesn't take a mask, so limit the previous change to backdrops only.

        Test: compositing/masks/mask-with-preserve-3d.html

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

2017-02-23  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Show "Loading" until playback starts
        https://bugs.webkit.org/show_bug.cgi?id=168809
        <rdar://problem/30687468>

        Reviewed by Jon Lee.

        We now display the "Loading" status as soon as we've started loading and
        until we've obtained enough data to play. No test provided since we don't
        have a way to specifically set networkState and readyState to the satisfactory
        values.

        * Modules/modern-media-controls/media/status-support.js:
        (StatusSupport.prototype.syncControl):
        (StatusSupport):

2017-02-23  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Enforce a minimum layout height of 50pt for <audio>
        https://bugs.webkit.org/show_bug.cgi?id=168801
        <rdar://problem/30683453>

        Reviewed by Eric Carlson.

        We enforce a 50pt minimum layout height for <audio> elements. There is no way
        for the page author to override this value since the min-height property is set
        as !important in a <style> element contained in a ShadowRoot.

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

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

        [WebRTC] Outgoing video quality is poor
        https://bugs.webkit.org/show_bug.cgi?id=168778
        <rdar://problem/30674673>

        Reviewed by Eric Carlson.

        Covered by manually ensuring the voice process thread is not spinning.

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h: Setting the next call to max was not a good idea since the thread process is adding some value to it, making it a negative value.

2017-02-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction with a URL should navigate the page if the operation is not handled
        https://bugs.webkit.org/show_bug.cgi?id=168798
        <rdar://problem/30665969>

        Reviewed by Tim Horton.

        Refactors some drag and drop code on the Mac, and implements PlatformPasteboard::stringForType.

        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::stringForType):
        * platform/mac/DragDataMac.mm:

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

        [WebRTC] RealtimeOutgoingAudioSource does not need to upsample audio buffers
        https://bugs.webkit.org/show_bug.cgi?id=168796

        Reviewed by Jer Noble.

        Covered by manual testing.
        Limiting RealtimeOutgoingAudioSource conversion to interleaving and float-to-integer.
        Removed the sample rate conversion.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::libwebrtcAudioFormat):
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):

2017-02-23  Alex Christensen  <achristensen@webkit.org>

        Re-soft-link CoreVideo after r212906
        https://bugs.webkit.org/show_bug.cgi?id=168803

        Reviewed by Jer Noble.

        CoreVideo should be soft linked to reduce startup time.
        Linking against the framework just for a few symbols used in one file was the wrong solution.

        * Configurations/WebCore.xcconfig:
        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:

2017-02-23  Chris Dumez  <cdumez@apple.com>

        Report domains using abnormally high CPU usage via enhanced privacy logging
        https://bugs.webkit.org/show_bug.cgi?id=168794
        <rdar://problem/29964018>

        Reviewed by Ryosuke Niwa.

        Report domains using abnormally high CPU usage (> 20%) via enhanced privacy
        logging.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::domainCausingEnergyDrainKey):
        * page/DiagnosticLoggingKeys.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::reportPageOverPostLoadCPUUsageThreshold):
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):

2017-02-23  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Adjust RunResolver::lineIndexForHeight with line struts.
        https://bugs.webkit.org/show_bug.cgi?id=168783
        <rdar://problem/30676449>

        Reviewed by Antti Koivisto.

        When there's a pagination gap between lines the simple lineIndex = y / lineHeight formula does not work anymore.
        This patch takes the line gaps into account by offsetting the y position accordingly.

        Not enabled yet.

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

2017-02-23  Alex Christensen  <achristensen@webkit.org>

        Fix iOS WebRTC build after r212812
        https://bugs.webkit.org/show_bug.cgi?id=168790

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:

2017-02-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Several layout tests trigger GStreamer-CRITICAL **: gst_bin_get_by_name: assertion 'GST_IS_BIN (bin)' failed
        https://bugs.webkit.org/show_bug.cgi?id=167016

        Reviewed by Xabier Rodriguez-Calvar.

        This is because we create AudioSourceProviderGStreamer objects that are never loaded. In the destructor the
        AudioSourceProviderGStreamer calls gst_bin_get_by_name() on its m_audioSinkBin that is nullptr. We could simply
        check m_audioSinkBin in the destructor, but I think it's better to simply not create
        AudioSourceProviderGStreamer for nothing. MediaPlayerPrivateGStreamer should create the AudioSourceProvider on demand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Do not create the AudioSourceProvider.
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Call ensureAudioSourceProvider() before using m_audioSourceProvider.
        (WebCore::MediaPlayerPrivateGStreamer::ensureAudioSourceProvider): Create the AudioSourceProvider if needed.
        (WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider): Ensure and return the m_audioSourceProvider.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2017-02-23  Tomas Popela  <tpopela@redhat.com>

        [GTK] Drag and drop is always moving the content even if copy is requested
        https://bugs.webkit.org/show_bug.cgi?id=168424

        Reviewed by Carlos Garcia Campos.

        Drag and drop is always moving the content around even if the copy is
        requested (i.e. by pressing the Control key).

        Test: editing/pasteboard/drag-drop-copy-content.html

        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::isCopyKeyDown):

2017-02-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Remove Yosemite-specific font lookup code
        https://bugs.webkit.org/show_bug.cgi?id=168682

        Reviewed by Zalan Bujtas.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformInvalidateFontCache):
        (WebCore::acceptableChoice): Deleted.
        (WebCore::betterChoice): Deleted.
        (WebCore::desiredFamilyToAvailableFamilyMap): Deleted.
        (WebCore::hasDesiredFamilyToAvailableFamilyMapping): Deleted.
        (WebCore::rememberDesiredFamilyToAvailableFamilyMapping): Deleted.
        (WebCore::toAppKitFontWeight): Deleted.
        (WebCore::appkitWeightToFontWeight): Deleted.
        (WebCore::toNSFontTraits): Deleted.
        (WebCore::platformFontWithFamily): Deleted.

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

        [Modern Media Controls] Clicking on the video doesn't toggle playback state in fullscreen on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168755
        <rdar://problem/30664484>

        Reviewed by Dean Jackson.

        We now call super in the handleEvent() method of MacOSFullscreenMediaControls if we're not dealing
        with an event type and target combination that was specifically registered in this class's scope.
        We had mistakenly added the call to super.handleEvent(event) in the wrong method when fixing
        https://bugs.webkit.org/show_bug.cgi?id=168515.

        Test: media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-fullscreen.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.handleEvent):
        (MacOSFullscreenMediaControls.prototype._handleMousedown):
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.handleEvent):
        (MacOSMediaControls):

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

        [Modern Media Controls] Scrubber stops moving while scrubbing on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168518
        <rdar://problem/30577637>

        Reviewed by Dean Jackson.

        As we start to scrub, controlValueWillStartChanging() is called on
        ScrubberSupport and pauses the media if it's not already paused. This
        causes the play/pause button to change icon and for layout() to be
        called on MacOSInlineMediaControls. This in turns sets the .children
        property on the .controlsBar and eventually yields a DOM manipulation
        which re-inserts the scrubber's DOM hierarchy, causing stutters during
        user interaction.

        Our solution is to make the .children setter smarter about identifying
        that the children list hasn't changed and that no DOM invalidation is
        necessary.

        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.set children):

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

        [Modern Media Controls] Controls bar may disappear while captions menu is visible
        https://bugs.webkit.org/show_bug.cgi?id=168751
        <rdar://problem/30663411>

        Reviewed by Dean Jackson.

        We now prevent the controls bar from fading out due to the auto-hide timer firing
        when the tracks panel is up, and wait until the track panel is hidden before fading
        the controls bar.

        Test: media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set userInteractionEnabled):
        (ControlsBar.prototype._autoHideTimerFired):

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

        [Modern Media Controls] Can't set the volume slider with macOS inline controls
        https://bugs.webkit.org/show_bug.cgi?id=168747
        <rdar://problem/30605528>

        Reviewed by Dean Jackson.

        Only call super for events we haven't registered specifically in the context
        of this class. Otherwise we'd invalidate the volume container visibility for
        a "mousedown" event registered by the MacOSMediaControls, the super class.

        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.handleEvent):

2017-02-22  Antti Koivisto  <antti@apple.com>

        Replace SimpleLineLayout::Range by WTF::IteratorRange
        https://bugs.webkit.org/show_bug.cgi?id=168742

        Reviewed by Zalan Bujtas.

        Kill a redundant custom type.

        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRendererWithOffsets):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::LineResolver::rangeForRect):
        (WebCore::SimpleLineLayout::Range::Range): Deleted.
        (WebCore::SimpleLineLayout::Range::begin): Deleted.
        (WebCore::SimpleLineLayout::Range::end): Deleted.

2017-02-22  Simon Fraser  <simon.fraser@apple.com>

        Add the Web Authentication API as "Under Consideration".

        * features.json:

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

        Simple line layout: Set the pagination strut on the flow when the first line does not fit the page.
        https://bugs.webkit.org/show_bug.cgi?id=168738
        <rdar://problem/30659469>

        Reviewed by Antti Koivisto.

        The pagination strut for the first line is tracked by the parent RenderBlockFlow and not by
        the line itself (see RenderBlockFlow::adjustLinePositionForPagination()). Also renamed *PaginationStrut* to
        *LineStrut* to make sure we don't confuse it with the block level strut.

        Not enabled yet.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::computeLineTopAndBottomWithOverflow):
        (WebCore::SimpleLineLayout::computeLineBreakIndex):
        (WebCore::SimpleLineLayout::setPageBreakForLine):
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Layout::hasLineStruts):
        (WebCore::SimpleLineLayout::Layout::struts):
        (WebCore::SimpleLineLayout::Layout::hasPaginationStruts): Deleted.
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowHeight):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::computeBaselinePosition):

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

        [WebRTC] Disable libwebrtc stderr logging in release mode
        https://bugs.webkit.org/show_bug.cgi?id=168734

        Reviewed by Tim Horton.

        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads):

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

        MediaStreamSourceNode never receives audio from MockRealtimeAudioSourceMac.
        https://bugs.webkit.org/show_bug.cgi?id=168731

        Reviewed by Eric Carlson.

        Test: fast/mediastream/mock-media-source-webaudio.html

        Because the audioSourceProvider can be created before the mock source is configured, explicitly configure the
        source if necessary after creating the audioSourceProvider.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):

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

        Do not aggressively throttle DOM timers until they've reached their max nesting level
        https://bugs.webkit.org/show_bug.cgi?id=168700
        <rdar://problem/29808005>

        Reviewed by Simon Fraser.

        Do not aggressively throttle DOM timers until they've actually areached their max
        nesting level (5). This overly aggressive throttling of non-nested timers is what
        was causing Google Maps to use 100% CPU in background tabs for several minutes.

        Test: fast/dom/timer-throttling-hidden-page-non-nested.html

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

2017-02-22  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Respond to capture interruptions and notifications
        https://bugs.webkit.org/show_bug.cgi?id=168610

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup: don't create
        a sample buffer display layer unless there is an active video track.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource): Add static_asserts to ensure that
        WebCore::InterruptionReason values map directly to AVCaptureSessionInterruptionReason values.
        (WebCore::AVMediaCaptureSource::~AVMediaCaptureSource): Minor cleanup.
        (WebCore::AVMediaCaptureSource::startProducingData): Start listening for notifications before
        starting the session.
        (WebCore::AVMediaCaptureSource::stopProducingData): Remove the notification observers before
        stopping the session.
        (WebCore::AVMediaCaptureSource::setupSession): Minor style cleanup.
        (WebCore::AVMediaCaptureSource::captureSessionRuntimeError): New. When the error is AVErrorMediaServicesWereReset,
        sometimes caused by a mediaserverd crash, try to restart the session one time.
        (WebCore::AVMediaCaptureSource::captureSessionBeginInterruption): Store the interruption reason.
        (WebCore::AVMediaCaptureSource::captureSessionEndInterruption): Try to restart the session if
        it was interrupted because the app went into multi-app layout mode.
        (WebCore::sessionKVOProperties): Drive-by cleanup.
        (-[WebCoreAVMediaCaptureSourceObserver initWithCallback:]):
        (-[WebCoreAVMediaCaptureSourceObserver disconnect]):
        (-[WebCoreAVMediaCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]):
        (-[WebCoreAVMediaCaptureSourceObserver sessionRuntimeError:]):
        (-[WebCoreAVMediaCaptureSourceObserver beginSessionInterrupted:]):
        (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]):

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::initializeCapabilities): Not all AVCaptureSession preset strings
        are available on all platforms so load with SOFT_LINK_POINTER_OPTIONAL and NULL check before use.
        (WebCore::sizeForPreset): Ditto.
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions): Ditto.

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

        Simple line layout: ensureLineBoxes for paginated content.
        https://bugs.webkit.org/show_bug.cgi?id=168729
        <rdar://problem/30654400>

        Reviewed by Antti Koivisto.

        This patch sets the layout state bits for paginated subtree layout, when we are switching
        over from simple line runs to inline tree. 

        Not enabled yet.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutStateForPagination): LayoutUnit(1) is not the real height, it's just
        an indicator that we've got paginated content.
        * rendering/RenderView.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Layout::isPaginated):
        (WebCore::SimpleLineLayout::Layout::hasPaginationStruts):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowHeight):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::computeBaselinePosition):

2017-02-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=168713

        Reviewed by Brent Fulgham.

        The include file <ANGLE/ShaderLang.h> is not found.

        * testing/Internals.cpp:

2017-02-22  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Fix issue with allowed systems extraction
        https://bugs.webkit.org/show_bug.cgi?id=168717

        Reviewed by Carlos Garcia Campos.

        The allowed systems were not being extracted from the need-context
        message because the loop was not stopping on the right condition.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::extractEventsAndSystemsFromMessage): Fix wrong
        condition.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        Add better debug category.

2017-02-22  Antti Koivisto  <antti@apple.com>

        REGRESSION(r207669): Crash after mutating selector text
        https://bugs.webkit.org/show_bug.cgi?id=168655
        <rdar://problem/30632111>

        Reviewed by Andreas Kling.

        Test: fast/css/selector-text-mutation-crash.html

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

        Protect against entering scheduleUpdate and wiping style resolver while updating it.
        Extension stylesheets can trigger this.

        (WebCore::Style::Scope::scheduleUpdate):

        Clear the style resolver immediately if style sheet content changes. The resolver may
        have data structures that point to the old sheet contents.

        The resolver would get wiped anyway when the scheduled update actually occurs.

        * style/StyleScope.h:

2017-02-08  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Move the track sizing algorithm to its own class
        https://bugs.webkit.org/show_bug.cgi?id=167988

        Reviewed by Manuel Rego Casasnovas.

        This is about moving the track sizing algorithm code out of RenderGrid to a new class
        GridTrackSizingAlgorithm, making RenderGrid more compact and easy to maintain. A nice side
        effect of this patch is the removal of the GridSizingData structure as it is no longer
        needed. All the data structures in that class were transferred to GridTrackSizingAlgorithm
        as private attribute members. The GridTrack class was also moved to the new file.

        The algorithm execution starts with the call to run(). It's mandatory to call setup() before
        any call to run() in order to properly configure the behaviour of the algorithm. You can
        call setup() & run() multiple times for a single layout operation (normally twice, one for
        columns and another one for rows). The algorithm uses a state machine to verify that the
        client issues the calls in the proper order (i.e. first columns and then rows). After
        finishing the layout, the client should call reset() to allow the algorithm to perform
        cleanups and to prepare itself for another round of calls.

        In order to implement the different behaviours of the algorithm depending on whether the
        available size is definite or not, a strategy pattern was implemented in the
        GridTrackSizingAlgorithmStrategy class. It has two subclasses, one for definite sizes and
        another one for indefinite ones.

        We took advantage of this change to perform some renames of the track sizing algorithm
        methods that were still using the names from the first versions of the specs. Not only that,
        the original track sizing algorithm method (computeUsedBreadthOfGridTracks) was split in 4
        different parts representing the 4 steps of the algorithm.

        No new tests as this is about moving code and refactoring.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/GridTrackSizingAlgorithm.cpp: Added.
        (WebCore::GridTrack::baseSize):
        (WebCore::GridTrack::growthLimit):
        (WebCore::GridTrack::setBaseSize):
        (WebCore::GridTrack::setGrowthLimit):
        (WebCore::GridTrack::growthLimitIfNotInfinite):
        (WebCore::GridTrack::setTempSize):
        (WebCore::GridTrack::growTempSize):
        (WebCore::GridTrack::setGrowthLimitCap):
        (WebCore::GridTrack::ensureGrowthLimitIsBiggerThanBaseSize):
        (WebCore::shouldClearOverrideContainingBlockContentSizeForChild):
        (WebCore::hasOverrideContainingBlockContentSizeForChild):
        (WebCore::setOverrideContainingBlockContentSizeForChild):
        (WebCore::flowAwareDirectionForChild):
        (WebCore::overrideContainingBlockContentSizeForChild):
        (WebCore::computeMarginLogicalSizeForChild):
        (WebCore::marginIntrinsicLogicalWidthForChild):
        (WebCore::GridTrackSizingAlgorithm::setFreeSpace):
        (WebCore::GridTrackSizingAlgorithm::rawGridTrackSize):
        (WebCore::GridTrackSizingAlgorithm::computeTrackBasedSize):
        (WebCore::GridTrackSizingAlgorithm::initialBaseSize):
        (WebCore::GridTrackSizingAlgorithm::initialGrowthLimit):
        (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem):
        (WebCore::GridTrackSizingAlgorithm::spanningItemCrossesFlexibleSizedTracks):
        (WebCore::GridItemWithSpan::GridItemWithSpan):
        (WebCore::GridItemWithSpan::gridItem):
        (WebCore::GridItemWithSpan::span):
        (WebCore::GridItemWithSpan::operator<):
        (WebCore::GridTrackSizingAlgorithm::itemSizeForTrackSizeComputationPhase):
        (WebCore::shouldProcessTrackForTrackSizeComputationPhase):
        (WebCore::trackSizeForTrackSizeComputationPhase):
        (WebCore::updateTrackSizeForTrackSizeComputationPhase):
        (WebCore::trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase):
        (WebCore::markAsInfinitelyGrowableForTrackSizeComputationPhase):
        (WebCore::GridTrackSizingAlgorithm::increaseSizesToAccommodateSpanningItems):
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore::clampGrowthShareIfNeeded):
        (WebCore::GridTrackSizingAlgorithm::distributeSpaceToTracks):
        (WebCore::GridTrackSizingAlgorithm::assumedRowsSizeForOrthogonalChild):
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild):
        (WebCore::GridTrackSizingAlgorithm::gridTrackSize):
        (WebCore::GridTrackSizingAlgorithm::computeFlexFactorUnitSize):
        (WebCore::GridTrackSizingAlgorithm::computeFlexSizedTracksGrowth):
        (WebCore::GridTrackSizingAlgorithm::findFrUnitSize):
        (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes):
        (WebCore::GridTrackSizingAlgorithmStrategy::logicalHeightForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::updateOverrideContainingBlockContentSizeForChild):
        (WebCore::IndefiniteSizeStrategy::minLogicalWidthForChild):
        (WebCore::IndefiniteSizeStrategy::layoutGridItemForMinSizeComputation):
        (WebCore::IndefiniteSizeStrategy::maximizeTracks):
        (WebCore::normalizedFlexFraction):
        (WebCore::IndefiniteSizeStrategy::findUsedFlexFraction):
        (WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded):
        (WebCore::DefiniteSizeStrategy::minLogicalWidthForChild):
        (WebCore::DefiniteSizeStrategy::maximizeTracks):
        (WebCore::DefiniteSizeStrategy::layoutGridItemForMinSizeComputation):
        (WebCore::DefiniteSizeStrategy::findUsedFlexFraction):
        (WebCore::DefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded):
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::resolveIntrinsicTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::stretchFlexibleTracks):
        (WebCore::GridTrackSizingAlgorithm::advanceNextState):
        (WebCore::GridTrackSizingAlgorithm::isValidTransition):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::run):
        (WebCore::GridTrackSizingAlgorithm::reset):
        (WebCore::GridTrackSizingAlgorithm::tracksAreWiderThanMinTrackBreadth):
        (WebCore::GridTrackSizingAlgorithm::StateMachine::StateMachine):
        (WebCore::GridTrackSizingAlgorithm::StateMachine::~StateMachine):
        * rendering/GridTrackSizingAlgorithm.h: Added.
        (WebCore::GridTrack::GridTrack):
        (WebCore::GridTrack::infiniteGrowthPotential):
        (WebCore::GridTrack::plannedSize):
        (WebCore::GridTrack::setPlannedSize):
        (WebCore::GridTrack::tempSize):
        (WebCore::GridTrack::infinitelyGrowable):
        (WebCore::GridTrack::setInfinitelyGrowable):
        (WebCore::GridTrack::growthLimitCap):
        (WebCore::GridTrack::growthLimitIsInfinite):
        (WebCore::GridTrack::isGrowthLimitBiggerThanBaseSize):
        (WebCore::GridTrackSizingAlgorithmStrategy::GridTrackSizingAlgorithmStrategy):
        (WebCore::GridTrackSizingAlgorithmStrategy::computeTrackBasedSize):
        (WebCore::GridTrackSizingAlgorithmStrategy::direction):
        (WebCore::GridTrackSizingAlgorithmStrategy::findFrUnitSize):
        (WebCore::GridTrackSizingAlgorithmStrategy::distributeSpaceToTracks):
        (WebCore::GridTrackSizingAlgorithmStrategy::renderGrid):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight):
        (WebCore::RenderGrid::computeTrackSizesForDefiniteSize):
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::GridTrack::GridTrack): Deleted.
        (WebCore::GridTrack::baseSize): Deleted.
        (WebCore::GridTrack::growthLimit): Deleted.
        (WebCore::GridTrack::setBaseSize): Deleted.
        (WebCore::GridTrack::setGrowthLimit): Deleted.
        (WebCore::GridTrack::infiniteGrowthPotential): Deleted.
        (WebCore::GridTrack::growthLimitIfNotInfinite): Deleted.
        (WebCore::GridTrack::plannedSize): Deleted.
        (WebCore::GridTrack::setPlannedSize): Deleted.
        (WebCore::GridTrack::tempSize): Deleted.
        (WebCore::GridTrack::setTempSize): Deleted.
        (WebCore::GridTrack::growTempSize): Deleted.
        (WebCore::GridTrack::infinitelyGrowable): Deleted.
        (WebCore::GridTrack::setInfinitelyGrowable): Deleted.
        (WebCore::GridTrack::setGrowthLimitCap): Deleted.
        (WebCore::GridTrack::growthLimitCap): Deleted.
        (WebCore::GridTrack::growthLimitIsInfinite): Deleted.
        (WebCore::GridTrack::isGrowthLimitBiggerThanBaseSize): Deleted.
        (WebCore::GridTrack::ensureGrowthLimitIsBiggerThanBaseSize): Deleted.
        (WebCore::RenderGrid::GridSizingData::GridSizingData): Deleted.
        (WebCore::RenderGrid::GridSizingData::freeSpace): Deleted.
        (WebCore::RenderGrid::GridSizingData::availableSpace): Deleted.
        (WebCore::RenderGrid::GridSizingData::setAvailableSpace): Deleted.
        (WebCore::RenderGrid::GridSizingData::advanceNextState): Deleted.
        (WebCore::RenderGrid::GridSizingData::isValidTransition): Deleted.
        (WebCore::RenderGrid::GridSizingData::grid): Deleted.
        (WebCore::RenderGrid::GridSizingData::setFreeSpace): Deleted.
        (WebCore::RenderGrid::computeTrackSizesForDirection): Deleted.
        (WebCore::RenderGrid::computeIntrinsicLogicalHeight): Deleted.
        (WebCore::normalizedFlexFraction): Deleted.
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks): Deleted.
        (WebCore::RenderGrid::computeFlexSizedTracksGrowth): Deleted.
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength): Deleted.
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength): Deleted.
        (WebCore::RenderGrid::computeFlexFactorUnitSize): Deleted.
        (WebCore::RenderGrid::findFlexFactorUnitSize): Deleted.
        (WebCore::hasOverrideContainingBlockContentSizeForChild): Deleted.
        (WebCore::setOverrideContainingBlockContentSizeForChild): Deleted.
        (WebCore::shouldClearOverrideContainingBlockContentSizeForChild): Deleted.
        (WebCore::RenderGrid::rawGridTrackSize): Deleted.
        (WebCore::RenderGrid::gridTrackSize): Deleted.
        (WebCore::RenderGrid::logicalHeightForChild): Deleted.
        (WebCore::RenderGrid::minSizeForChild): Deleted.
        (WebCore::RenderGrid::updateOverrideContainingBlockContentSizeForChild): Deleted.
        (WebCore::RenderGrid::minContentForChild): Deleted.
        (WebCore::RenderGrid::maxContentForChild): Deleted.
        (WebCore::GridItemWithSpan::GridItemWithSpan): Deleted.
        (WebCore::GridItemWithSpan::gridItem): Deleted.
        (WebCore::GridItemWithSpan::span): Deleted.
        (WebCore::GridItemWithSpan::operator<): Deleted.
        (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks): Deleted.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions): Deleted.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems): Deleted.
        (WebCore::trackSizeForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::shouldProcessTrackForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::markAsInfinitelyGrowableForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::updateTrackSizeForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::currentItemSizeForTrackSizeComputationPhase): Deleted.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems): Deleted.
        (WebCore::sortByGridTrackGrowthPotential): Deleted.
        (WebCore::clampGrowthShareIfNeeded): Deleted.
        (WebCore::RenderGrid::distributeSpaceToTracks): Deleted.
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth): Deleted.
        (WebCore::RenderGrid::assumedRowsSizeForOrthogonalChild): Deleted.
        (WebCore::RenderGrid::gridAreaBreadthForChild): Deleted.
        * rendering/RenderGrid.h:

2017-02-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash under CACFLayerTreeHost::acceleratedCompositingAvailable().
        https://bugs.webkit.org/show_bug.cgi?id=168711

        Reviewed by Alex Christensen.

        Add null pointer check.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable):

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Crash in MediaPlayerPrivateGStreamerMSE::buffered() when MEDIA_STREAM is disabled
        https://bugs.webkit.org/show_bug.cgi?id=168662

        Reviewed by Michael Catanzaro.

        When MEDIA_STREAM is disabled, if MediaPlayer::loadWithNextMediaEngine is called with a current engine and
        there's no type specified, the next media engine that is used is the MSE one. Since there's no actually a media
        stream, the engine is created but never loaded. When buffered is called it tries to use its media source that is
        nullptr. It doesn't happen when MEDIA_STREAM is enabled, because the next media engine returned is Owr that
        doesn't implement buffered and always returns an empty PlatformTimeRanges.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::buffered): Return an empty PlatformTimeRanges if m_mediaSource is nullptr.

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

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Configurations/FeatureDefines.xcconfig:

2017-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WinCairo build after r212703.

        * platform/TextureMapper.cmake:

2017-02-21  Per Arne Vollan  <pvollan@apple.com>

        Add support for CSS properties paint-order, stroke-linecap, and stroke-linejoin in text rendering.
        https://bugs.webkit.org/show_bug.cgi?id=168601
        rdar://problem/30583872

        Reviewed by Simon Fraser.

        Text rendering should respect the CSS properties paint-order, stroke-linecap, and stroke-linejoin,
        see https://drafts.fxtf.org/paint/. The text rendering changes are mainly in the TextPainter class,
        where text is painted in three phases (fill, stroke, markers), where the order follows the
        paint-order property. The linecap and linejoin properties are set on the graphics context before
        rendering the text.

        Tests: fast/css/paint-order.html
               fast/css/paint-order-shadow.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertPaintOrder):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::paintTypesForPaintOrder):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setPaintOrder):
        (WebCore::RenderStyle::initialPaintOrder):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):

2017-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        [User Timing] Throw a SyntaxError for performance.measure if mark name is not found
        https://bugs.webkit.org/show_bug.cgi?id=168707

        Reviewed by Ryosuke Niwa.

        Test: performance-api/performance-measure-name.html

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::findExistingMarkStartTime):
        Instead of returning zero, throw a SyntaxError. This is more in line
        with User Timing Level 1 and behavior in Window. This is an issue with
        the Level 2 spec: https://github.com/w3c/user-timing/issues/21

2017-02-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed attempt to fix the Windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::supportsSubpixelAntialiasedText):

2017-02-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212737.

        This change caused an existing LayoutTest to crash.

        Reverted changeset:

        "REGRESSION(r207669): Crash after mutating selector text"
        https://bugs.webkit.org/show_bug.cgi?id=168655
        http://trac.webkit.org/changeset/212737

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

        REGRESSION (r207720): /more/conformance/conformance/quickCheckAPI-S_V.html test fails
        https://bugs.webkit.org/show_bug.cgi?id=168632
        <rdar://problem/30620129>

        Reviewed by Darin Adler.

        After r207720, the following WebGL conformance tests started failing:
        - /more/conformance/conformance/quickCheckAPI-S_V.html
        - /context/context-lost.html

        We started throwing security errors in case where we did not before.
        Chrome and Firefox are both passing these tests so our new behavior was not interoperable.

        This patch reverts part of r207720 to restore our previous behavior.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::validateHTMLImageElement):
        (WebCore::WebGLRenderingContextBase::validateHTMLCanvasElement):
        (WebCore::WebGLRenderingContextBase::validateHTMLVideoElement):
        * html/canvas/WebGLRenderingContextBase.h:

2017-02-21  Dean Jackson  <dino@apple.com>

        No need for static attributes when creating a pixel format
        https://bugs.webkit.org/show_bug.cgi?id=168688
        <rdar://problem/30642256>

        Reviewed by Myles Maxfield.

        Just create the attributes when needed.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):

2017-02-20  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.

        Added new tests in JSTests.
        
        The WebCore changes involve:
        
        - Refactoring around new header discipline.
        
        - Adding crazy GC APIs to window.internals to enable us to test the GC's runloop discipline.

        * ForwardingHeaders/heap/GCFinalizationCallback.h: Added.
        * ForwardingHeaders/heap/IncrementalSweeper.h: Added.
        * ForwardingHeaders/heap/MachineStackMarker.h: Added.
        * ForwardingHeaders/heap/RunningScope.h: Added.
        * bindings/js/CommonVM.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        (WebCore::Internals::isReadableStreamDisturbed):
        (WebCore::Internals::isGCRunning):
        (WebCore::Internals::addGCFinalizationCallback):
        (WebCore::Internals::stopSweeping):
        (WebCore::Internals::startSweeping):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-02-20  Simon Fraser  <simon.fraser@apple.com>

        Add support to PlatformCALayer/GraphicsLayerCA for subpixel-antialiased text, with a Setting and a MiniBrowser switch
        https://bugs.webkit.org/show_bug.cgi?id=168620
        <rdar://problem/30617772>

        Reviewed by Tim Horton.

        Add a Setting for subpixel-antialiased layer text. Plumb this through GraphicsLayerCA and
        PlatformCALayer, where it ultimately affects the layer contents format.
        
        TileControllers are slightly special because we communicate with them via an Obj-C
        WebTiledBackingLayer.

        Test: compositing/contents-format/subpixel-antialiased-text-enabled.html

        * page/Settings.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsSubpixelAntialiasedText):
        (WebCore::GraphicsLayer::setSupportsSubpixelAntialiasedText):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setSupportsSubpixelAntialiasedText):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateSupportsSubpixelAntialiasedText):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setWantsDeepColorBackingStore):
        (WebCore::TileController::setSupportsSubpixelAntialiasedText):
        (WebCore::TileController::setTilesOpaque):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::updateTileLayerProperties):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::supportsSubpixelAntialiasedText):
        (PlatformCALayerCocoa::setSupportsSubpixelAntialiasedText):
        (layerContentsFormat):
        (PlatformCALayerCocoa::updateContentsFormat):
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.h:
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer drawsAsynchronously]):
        (-[WebTiledBackingLayer setSupportsSubpixelAntialiasedText:]):
        (-[WebTiledBackingLayer supportsSubpixelAntialiasedText]):
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):

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

        REGRESSION (203941): iAd Producer: Clicking buttons in Preview does not work
        https://bugs.webkit.org/show_bug.cgi?id=168677
        <rdar://problem/30640101>

        Reviewed by Ryosuke Niwa.

        Add quirk to initMouseEvent to unbreak iAd Producer.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEventQuirk):
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::MacApplication::isIADProducer):

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

        AudioSampleDataSource doesn't need to use the m_scratchBuffer on the pulling thread
        https://bugs.webkit.org/show_bug.cgi?id=168640

        Reviewed by Eric Carlson.

        Rather than copying the pulled data into a scratch buffer, applying a volume transformation
        and then copying back out, just do the volume transformation in-place in the destination
        buffer.

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

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

        [WebRTC] Implement Incoming libwebrtc audio source support.
        https://bugs.webkit.org/show_bug.cgi?id=167961

        Reviewed by Eric Carlson.

        Hook libwebrtc incoming audio source into WebCore audio rendering path.
        Manually testing that muted sources produce data with zeros and unmuted sources provide data with non zeros.

        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::create):
        (WebCore::streamDescription):
        (WebCore::RealtimeIncomingAudioSource::OnData):
        (WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:

2017-02-21  Simon Fraser  <simon.fraser@apple.com>

        Fix ImageBitmap comment to not insert a <canvas>.

        * features.json:

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-02-21  Simon Fraser  <simon.fraser@apple.com>

        Add Media Streams and Capture to features.json.

        * features.json:

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

        Clarify the status of 'webkitSubtle' and 'subtle' attributes on the WebCrypto API.

        * features.json:

2017-02-21  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Add ReadableStreamBYOBRequest view getter
        https://bugs.webkit.org/show_bug.cgi?id=168652

        Reviewed by Youenn Fablet.

        Implemented getter for ReadableStreamBYOBRequest view attribute.
        
        Added 1 test checking that view length corresponds to autoAllocateChunkSize.
        Also updated test expectations for W3C imported tests.

        * Modules/streams/ReadableByteStreamInternals.js:
        (isReadableStreamBYOBRequest): Added.
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (view): Added.

2017-02-21  Simon Fraser  <simon.fraser@apple.com>

        Clarify the status of 'webkitSubtle' and 'subtle' attributes on the WebCrypto API.

        * features.json:

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

        [WebRTC] ICE candidates should be filtered according a policy
        https://bugs.webkit.org/show_bug.cgi?id=168348

        Reviewed by Alex Christensen.

        Covered by manual tests. Should be covered in the future by layout tests with dedicated internals API.

        Adding support for ICE candidate filtering at RTCPeerConnection level.
        If ICE candidate filtering is on (by default), host candidates are stored and not sent immediately.
        Reflexive candidates are purged from raddr information to not leak the host IP address.

        Stored candidates may be advertised to the JS layer if RTCController is notified of a change of filtering policy.
        To implement that, PeerConnectionBackend stores all filtered out candidates and RTCPeerConnection register
        themselves to RTCController to get notifications of filtering policy changes.

        Making RTCPeerConnection use setPendingActivity throughout its lifetime.
        This ensures it does not get collected until the page is off or close() is called on the object.

        Adding support for enumerating or not all interfaces at libwebrtc level.
        This choice is done at creation of the peer connection.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::enableICECandidateFiltering):
        (WebCore::PeerConnectionBackend::disableICECandidateFiltering):
        (WebCore::filterICECandidate):
        (WebCore::PeerConnectionBackend::newICECandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCController.cpp: Added.
        (WebCore::RTCController::remove):
        (WebCore::RTCController::add):
        (WebCore::RTCController::disableICECandidateFiltering):
        (WebCore::RTCController::enableICECandidateFiltering):
        * Modules/mediastream/RTCController.h: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::rtcController):
        (WebCore::RTCPeerConnection::registerToController):
        (WebCore::RTCPeerConnection::unregisterFromController):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.h:
        (WebCore::Page::rtcController):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

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

        Unreviewed, update WebCrypto API feature status.

        * features.json:

2017-02-21  Simon Fraser  <simon.fraser@apple.com>

        Fix the bad JSON.

        * features.json:

2017-02-21  Andreas Kling  <akling@apple.com>

        [iOS] WebKit1 should use shared memory pressure handler code.
        <https://webkit.org/b/168653>

        Reviewed by Antti Koivisto.

        Remove iOS WebKit1 specific members and code from MemoryPressureHandler in favor
        of using the same code that iOS WebKit2 and macOS WebKit uses.

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory): Add two cleanup calls that were only in the iOS WebView code.
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::m_releaseMemoryBlock): Deleted.
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::respondToMemoryPressureCallback): Deleted.
        (WebCore::MemoryPressureHandler::installMemoryReleaseBlock): Deleted.
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure): Deleted.
        (WebCore::MemoryPressureHandler::clearMemoryPressure): Deleted.
        (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage): Deleted.
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded): Deleted.

2017-02-21  Anders Carlsson  <andersca@apple.com>

        Fix two failing WebKit legacy tests
        https://bugs.webkit.org/show_bug.cgi?id=168667

        Reviewed by Tim Horton.

        Handle the NSPasteboardTypeString type.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):
        (WebCore::addHTMLClipboardTypesForCocoaType):

2017-02-21  Simon Fraser  <simon.fraser@apple.com>

        Add Web Audio and Web MIDI to features.json.

        * features.json:

2017-02-21  Antti Koivisto  <antti@apple.com>

        REGRESSION(r207669): Crash after mutating selector text
        https://bugs.webkit.org/show_bug.cgi?id=168655
        <rdar://problem/30632111>

        Reviewed by Brent Fulgham.

        Test: fast/css/selector-text-mutation-crash.html

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

        Clear the style resolver immediately if style sheet content changes. The resolver may
        have data structures that point to the old sheet contents.

        The resolver would get wiped anyway when the scheduled update actually occurs.

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

        [WebCrypto] Add support for AES-CFB
        https://bugs.webkit.org/show_bug.cgi?id=168344
        <rdar://problem/20940221>

        Reviewed by Brent Fulgham.

        This patch adds support for AES-CFB. Operations of AES-CFB include: encrypt, decrypt, generateKey,
        importKey, exportKey, wrapKey, and unwrapKey. This implementation follows a slightly old version
        of WebCryptoAPI spec: https://www.w3.org/TR/2014/CR-WebCryptoAPI-20141211/#aes-cfb.

        Tests: crypto/subtle/aes-cbc-cfb-decrypt-malformed-parameters.html
               crypto/subtle/aes-cbc-cfb-encrypt-malformed-parameters.html
               crypto/subtle/aes-cbc-import-key-unwrap-jwk-rsa-key-public.html
               crypto/subtle/aes-cfb-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-cfb-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-cfb-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-cfb-generate-export-raw-key.html
               crypto/subtle/aes-cfb-generate-key-encrypt-decrypt.html
               crypto/subtle/aes-cfb-generate-key.html
               crypto/subtle/aes-cfb-import-jwk-key-length-128.html
               crypto/subtle/aes-cfb-import-jwk-key-length-192.html
               crypto/subtle/aes-cfb-import-jwk-key-length-256.html
               crypto/subtle/aes-cfb-import-key-decrypt.html
               crypto/subtle/aes-cfb-import-key-encrypt.html
               crypto/subtle/aes-cfb-import-key-unwrap-jwk-key.html
               crypto/subtle/aes-cfb-import-key-unwrap-raw-key.html
               crypto/subtle/aes-cfb-import-key-wrap-jwk-key.html
               crypto/subtle/aes-cfb-import-key-wrap-raw-key.html
               crypto/subtle/aes-cfb-import-raw-key.html
               crypto/workers/subtle/aes-cfb-import-key-decrypt.html
               crypto/workers/subtle/aes-cfb-import-key-encrypt.html
               crypto/workers/subtle/aes-cfb-import-key-unwrap-key.html
               crypto/workers/subtle/aes-cfb-import-key-wrap-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Add CryptoAlgorithmAES_CFB.cpp,
        change AesCbcParams.idl to AesCbcCfbParams.idl.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        Add support for AES-CFB.
        * crypto/CryptoAlgorithm.h:
        Include <wtf/Variant.h>.
        * crypto/CryptoAlgorithmParameters.h:
        Add support for AES-CFB.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        Rename CryptoAlgorithmAesCbcParams to CryptoAlgorithmAesCbcCfbParams.
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp: Added.
        (WebCore::usagesAreInvalidForCryptoAlgorithmAES_CFB):
        (WebCore::CryptoAlgorithmAES_CFB::create):
        (WebCore::CryptoAlgorithmAES_CFB::identifier):
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::generateKey):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        (WebCore::CryptoAlgorithmAES_CFB::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h: Added.
        * crypto/gnutls/CryptoAlgorithmAES_CFBGnuTLS.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        Add dummy support of AES_CFB for GTK+.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        Drop conditional PLATFORM(COCOA).
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        Rename CryptoAlgorithmAesCbcParams to CryptoAlgorithmAesCbcCfbParams.
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp: Added.
        (WebCore::transformAES_CFB):
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Add support for AES-CFB.
        * crypto/parameters/AesCbcCfbParams.idl: Renamed from Source/WebCore/crypto/parameters/AesCbcParams.idl.
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmAesCbcParams.h.
        Since dictionaries AesCbcParams and AesCfbParams are essentially the same, I combine them together in our implementations.

2017-02-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the ToT iOS build

        Adopt updated UIKit SPI and remove calls to the deprecated version.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItems:]):

2017-02-21  Per Arne Vollan  <pvollan@apple.com>

        [Win] WebView is not painting in accelerated compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=168654

        Reviewed by Brent Fulgham.

        Initializing the uncommitted layer change flags to CoverageRectChanged in GraphicsLayerCA,
        stops WebView painting in accelerated mode.

        Covered by existing tests.

        * platform/graphics/ca/GraphicsLayerCA.h:

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

        Make logging in high-priority audio threads less expensive
        https://bugs.webkit.org/show_bug.cgi?id=168639

        Reviewed by Jon Lee.

        Logging from inside a high-priority audio thread will make a number of calls to malloc, block, and
        therefore cause audio glitches. Make this logging less expensive by dispatching to the main thread
        before creating and outputting the log string.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/AudioSampleDataSource.mm: Renamed from Source/WebCore/platform/audio/mac/AudioSampleDataSource.cpp.
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):

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

        Give the Mock audio input a "hum" to make drop-outs more detectable
        https://bugs.webkit.org/show_bug.cgi?id=168641

        Reviewed by Eric Carlson.

        Add two helper functions to generate waveforms: addHum() and writeHum(). Use these methods
        to create a bip-bop audio buffer which can be used to "blit" a portion the waveform into the
        destination buffer during rendering. The background hum must be seamless across multiple
        pull operations, so add the hum sound during rendering.

        To ensure the waveform buffer is created, initialize the sampleRate to zero, then call
        applySampleRate() with the desired default rate, 44.1kHz.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::writeHum):
        (WebCore::addHum):
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSourceMac::render):
        (WebCore::MockRealtimeAudioSourceMac::applySampleRate):

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

        Make TrackPrivateBase ThreadSafeRefCounted, so that it can be retained in non-main threads
        https://bugs.webkit.org/show_bug.cgi?id=168642

        Reviewed by Eric Carlson.

        AudioTrackPrivateMediaStreamCocoa has two entry points from background threads:
        audioSamplesAvailable() and render(). Protect against being destroyed mid-execution by
        retaining this for the duration of those methods.

        * platform/graphics/TrackPrivateBase.h:
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::render):

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

        Pulling too quickly from an AudioSampleDataSource should increase the pre-buffer amount
        https://bugs.webkit.org/show_bug.cgi?id=168645

        Reviewed by Eric Carlson.

        If a pull operation runs past the end of the buffered range of a CARingBuffer, the underrun
        is zero-filled, causing an audible glitch.  In this case, bias m_outputSampleOffset by the
        amount of the underrun, which should keep the underrun from reoccurring.

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

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

        AudioSampleBufferList::zeroABL() takes a byte-count, not a sample-count.
        https://bugs.webkit.org/show_bug.cgi?id=168635

        Reviewed by Jon Lee.

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

2017-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r212681): Crash when dragging links without a drag image
        https://bugs.webkit.org/show_bug.cgi?id=168648

        Reviewed by Tim Horton.

        This happens in GTK+ port, because we don't use a drag image for links.

        Fixes: editing/pasteboard/drop-link.html
               editing/pasteboard/drop-text-without-selection.html
               editing/pasteboard/files-during-page-drags.html
               fast/events/content-changed-during-drop.html
               fast/events/drag-and-drop-link-fast-multiple-times-does-not-crash.html
               fast/events/drag-and-drop-link-into-focused-contenteditable.html
               fast/events/drag-and-drop-link.html
               fast/events/drag-in-frames.html
               fast/events/drag-parent-node.html
               fast/events/shift-drag-selection-on-link-triggers-drag-n-drop.html

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Do not try to use drag image and its size when createDragImageForLink
        returns nullptr.

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212699.

        Internal build not ready

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212699

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove ENABLE_THREADED_COMPOSITOR build option
        https://bugs.webkit.org/show_bug.cgi?id=168606

        Reviewed by Michael Catanzaro.

        * platform/TextureMapper.cmake:

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

        Fix some 32-bit builds after r212699

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        Explicitly cast OSStatus to int for logging.

2017-02-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary PerformanceEntry virtual methods
        https://bugs.webkit.org/show_bug.cgi?id=168633

        Reviewed by Ryosuke Niwa.

        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::isResource):
        (WebCore::PerformanceEntry::isMark):
        (WebCore::PerformanceEntry::isMeasure):
        Implement based on the Type.

        * page/PerformanceMark.h:
        * page/PerformanceMeasure.h:
        * page/PerformanceResourceTiming.h:
        Remove virtual overrides.

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

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2017-02-20  Joseph Pecoraro  <pecoraro@apple.com>

        ASSERTION FAILED: m_normalWorld->hasOneRef() under WorkerThread::stop
        https://bugs.webkit.org/show_bug.cgi?id=168356
        <rdar://problem/30592486>

        Reviewed by Ryosuke Niwa.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners):
        Remove Performance object EventListeners.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::removeAllEventListeners):
        (WebCore::WorkerGlobalScope::performance):
        * workers/WorkerGlobalScope.h:
        Remove Performance object EventListeners.
        Also clear Performance early in destruction since its ContextDestructionObserver
        destruction makes checks about the WorkerThread.

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

        Local audio-only stream will not trigger playback to begin
        https://bugs.webkit.org/show_bug.cgi?id=168412

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/local-audio-playing-event.html

        With video-bearing streams, the first video sample emitted from the stream causes the
        readyState to move from HAVE_NOTHING to HAVE_ENOUGH_DATA. Wire up this same behavior for
        audio-bearing streams. Add a MediaStreamTrackPrivate::Observer callback method
        audioSamplesAvailable(), which gets passed up to MediaPlayerPrivateMediaStreamAVFObjC.
        Because this callback may be (and probably will be) called on a background thread, run the
        updateReadyState() task in a scheduledDeferredTask().

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable):

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

        Simple line layout: Implement absoluteQuadsForRange.
        https://bugs.webkit.org/show_bug.cgi?id=168613
        <rdar://problem/30614618>

        Reviewed by Simon Fraser.

        This patch ensures that the commonly used Range::getClientRects calls do not
        throw us off of the simple line layout path.

        Test: fast/dom/Range/simple-line-layout-getclientrects.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::collectAbsoluteQuadsForRange): Special case empty ranges with multiple empty runs.
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::rangeForRendererWithOffsets):
        * rendering/SimpleLineLayoutResolver.h:

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212685.

        This change broke the 32-bit Sierra build.

        Reverted changeset:

        "Resource Load Statistics: Add alternate classification
        method"
        https://bugs.webkit.org/show_bug.cgi?id=168347
        http://trac.webkit.org/changeset/212685

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

        [WebIDL] Add support for constructors that have variadic parameters
        https://bugs.webkit.org/show_bug.cgi?id=168614

        Reviewed by Alex Christensen.

        In preparation of removing some more custom bindings, move the constructor calling
        code over to using GenerateParametersCheck completely. This required
        - Removing special case of NamedConstructors automatically getting a Document passed
          to them. The three named constructors that expected this have been updated to add
          the required attributes.
        - Add a version of the GenerateCallWith prologue for constructors.
        - Remove now unnecessary argumentCount return value from GenerateParametersCheck.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallWithUsingReferences):
        (GenerateCallWithUsingPointers):
        (GenerateConstructorCallWithUsingPointers):
        (GenerateCallWith):
        (GenerateParametersCheck):
        (GenerateConstructorDefinition):

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        Update results for more consistent placement of ScriptExecutionContext and Document
        accessors, add UNLIKELY to context checks, and remove automatic Document passing
        for NamedConstructors.

        * html/HTMLAudioElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLOptionElement.idl:
        Add ConstructorCallWith=Document.

2017-02-20  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>

        Reviewed by Alex Christensen.

        This patch only adds test infrastructure in WebCore.

        Tests: http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-mixed-statistics.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-sub-frame-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-unique-redirects-to.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-mixed-statistics.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-sub-frame-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-under-top-frame-origins.html
               http/tests/loading/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-unique-redirects-to.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setSubframeUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUniqueRedirectTo):
        * loader/ResourceLoadObserver.h:

2017-02-20  Anders Carlsson  <andersca@apple.com>

        Use the new drag code path when dragging links
        https://bugs.webkit.org/show_bug.cgi?id=168612

        Reviewed by Tim Horton.

        * editing/Editor.cpp:
        (WebCore::Editor::copyURL):
        Use userVisibleString instead of fillInUserVisibleForm.

        (WebCore::Editor::pasteboardWriterURL):
        New function that returns a PasteboardWriterData::URL for a given URL + title.

        * editing/Editor.h:
        Add new members.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::userVisibleString):
        (WebCore::Editor::fillInUserVisibleForm): Deleted.
        Add a getter instead of a function that fills in a struct member.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Add the new DragItem code path when dragging links.

        * platform/PasteboardWriterData.cpp:
        (WebCore::PasteboardWriterData::isEmpty):
        Check for m_url as well.

        (WebCore::PasteboardWriterData::setURL):
        Set m_url.

        * platform/PasteboardWriterData.h:
        Add new members.

        * platform/mac/PasteboardWriter.mm:
        (WebCore::toUTI):
        New helper function that returns an UTI from a pasteboard type.

        (WebCore::createPasteboardWriter):
        Handle converting URLs to the various pasteboard types.

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

        Add plumbing to the UI process for TextIndicatorData when computing the drag image
        https://bugs.webkit.org/show_bug.cgi?id=168583
        Work towards <rdar://problem/30313681>

        Reviewed by Tim Horton.

        Adds some additional arguments to drag image creation functions to allow platforms to specify TextIndicatorData
        for a link or selection-based DragImage. This TextIndicatorData is an optional member of the DragImage, and is
        propagated to the UI process via SetDragImage in the WebDragClient.

        Additionally renames hasDataInteractionAtPosition to hasSelectionAtPosition to better reflect its purpose.

        No new tests, since there is no behavior change.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Page.cpp:
        (WebCore::Page::hasSelectionAtPosition):
        (WebCore::Page::hasDataInteractionAtPosition): Deleted.
        * page/Page.h:
        * platform/DragImage.cpp:
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForLink):
        (WebCore::DragImage::operator=):
        * platform/DragImage.h:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageForLink):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):

2017-02-20  Brent Fulgham  <bfulgham@apple.com>

        Nullptr dereferences when stopping a load
        https://bugs.webkit.org/show_bug.cgi?id=168608
        <rdar://problem/29852056>

        Reviewed by Ryosuke Niwa.

        Don't attempt to notify a detached frame's load client that the load is
        stopped.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Check for null frame loader and
        bypass dereferencing it. 

2017-02-17  Anders Carlsson  <andersca@apple.com>

        Add a new drag code path and use it for dragging plain text
        https://bugs.webkit.org/show_bug.cgi?id=168534

        Reviewed by Geoffrey Garen.

        The new code path is currently only used for plain text selection dragging.

        * WebCore.xcodeproj/project.pbxproj:
        * page/DragClient.h:
        (WebCore::DragClient::useLegacyDragClient):
        Add a new member function. This currently returns true everywhere except legacy WebKit on Mac.

        (WebCore::DragClient::beginDrag):
        Add new empty member function.

        * page/DragController.cpp:
        (WebCore::dragImageAnchorPointForSelectionDrag):
        Helper function that returns the anchor point for a selection drag image.

        (WebCore::DragController::startDrag):
        If we can use the new code path, set up a drag item with an image and pasteboard data.

        (WebCore::DragController::beginDrag):
        New function that calls out to the client.

        * page/DragController.h:
        Add new members.

        * platform/DragItem.h:
        Add a new class - it's essentially a tuple of a drag image, an anchor point and the pasteboard data the item represents.

        * platform/mac/PasteboardWriter.h:
        Rename createPasteboardWriting to createPasteboardWriter.

        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter):
        Use the UTI pasteboard type.

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

        Fix libwebrtc build after r212644.
        https://bugs.webkit.org/show_bug.cgi?id=168596

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):
        m_endpoint changed from a c++ reference to a WTF::Ref, so we need to use operator -> instead of .

2017-02-20  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Add ReadableByteStreamController byobRequest attribute
        https://bugs.webkit.org/show_bug.cgi?id=168319

        Reviewed by Youenn Fablet.

        Added ReadableByteStreamController byobRequest attribute.

        Added tests related to ReadableStreamBYOBRequest as a dedicated object
        and also as an attribute of ReadableByteStreamController.

        * CMakeLists.txt: Added new files.
        * DerivedSources.cpp: Added new files.
        * DerivedSources.make: Added new files.
        * Modules/streams/ReadableByteStreamController.idl: Added byobRequest support.
        * Modules/streams/ReadableByteStreamController.js: Added byobRequest support.
        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableStreamBYOBRequest): Added constructor.
        * Modules/streams/ReadableStreamBYOBRequest.idl: Added.
        * Modules/streams/ReadableStreamBYOBRequest.js: Added.
        (respond): Not implemented yet.
        (respondWithNewView): Not implemented yet.
        (view): Not implemented yet.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bindings/js/JSDOMGlobalObject.cpp: Added ReadableStreamBYOBRequest support.
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        (WebCore::JSDOMGlobalObject::finishCreation):
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp: Added ReadableStreamBYOBRequest support.
        (WebCore::constructJSReadableByteStreamController):
        (WebCore::constructJSReadableStreamBYOBRequest):
        (WebCore::JSBuiltinReadableStreamBYOBRequestPrivateConstructor::initializeExecutable):
        (WebCore::createReadableStreamBYOBRequestPrivateConstructor):
        * bindings/js/JSReadableStreamPrivateConstructors.h: Added ReadableStreamBYOBRequest support.
        * bindings/js/WebCoreBuiltinNames.h: Added ReadableStreamBYOBRequest support.

2017-02-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] Custom scale factor is not applied in all cases.
        https://bugs.webkit.org/show_bug.cgi?id=168117

        Reviewed by Brent Fulgham.

        We should not call the function deviceScaleFactorForWindow directly, since this
        will return the system scale factor, and ignore the custom scale factor.

        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::initializeContext):
        (WebCore::WKCACFViewLayerTreeHost::resize):
        (WebCore::WKCACFViewLayerTreeHost::setScaleFactor):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/win/GDIUtilities.h:
        (WebCore::makeScaledPoint):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::positionForEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:

2017-02-20  Jon Lee  <jonlee@apple.com>

        Fix build error for iOS. Unreviewed.

        * platform/graphics/GraphicsContext3D.cpp: Move stub function into !PLATFORM(COCOA) instead of !PLATFORM(MAC).

2017-02-20  Jon Lee  <jonlee@apple.com>

        Unreviewed, rolling out r212639.

        Have a fix for the linker error on iOS.

        Reverted changeset:

        "Unreviewed, rolling out r212637."
        https://bugs.webkit.org/show_bug.cgi?id=168595
        http://trac.webkit.org/changeset/212639

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

        [WebRTC] Fix some memory leaks in libwebrtc binding code
        https://bugs.webkit.org/show_bug.cgi?id=168596

        Reviewed by Eric Carlson.

        Covered by manual testing.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::StatsCollector): Using the libwebrtc way of creating such objects.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::create):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::PeerConnectionFactoryAndThreads::OnMessage):

2017-02-20  Alexey Proskuryakov  <ap@apple.com>

        Clean up how WebKit exports _WebCreateFragment
        https://bugs.webkit.org/show_bug.cgi?id=168579

        Reviewed by Dan Bernstein.

        * editing/Editor.h: Removed the declaration of _WebCreateFragment, SOFT_LINK doesn't need it.
        * editing/cocoa/EditorCocoa.mm: Moved a FIXME comment here.

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212637.

        This change broke iOS builds.

        Reverted changeset:

        "Add 'webglcontextchanged' WebGLContextEvent"
        https://bugs.webkit.org/show_bug.cgi?id=168595
        http://trac.webkit.org/changeset/212637

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove code under USE(GRAPHICS_SURFACE)
        https://bugs.webkit.org/show_bug.cgi?id=168592

        Reviewed by Michael Catanzaro.

        This was only used by EFL port.

        * platform/TextureMapper.cmake:
        * platform/graphics/opengl/GLPlatformSurface.cpp: Removed.
        * platform/graphics/surfaces/GLTransportSurface.cpp: Removed.
        * platform/graphics/surfaces/GLTransportSurface.h: Removed.
        * platform/graphics/surfaces/GraphicsSurface.cpp: Removed.
        * platform/graphics/surfaces/GraphicsSurface.h: Removed.
        * platform/graphics/surfaces/GraphicsSurfaceToken.h: Removed.
        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp: Removed.
        * platform/graphics/surfaces/egl/EGLConfigSelector.h: Removed.
        * platform/graphics/surfaces/egl/EGLContext.cpp: Removed.
        * platform/graphics/surfaces/egl/EGLContext.h: Removed.
        * platform/graphics/surfaces/egl/EGLHelper.cpp: Removed.
        * platform/graphics/surfaces/egl/EGLHelper.h: Removed.
        * platform/graphics/surfaces/egl/EGLSurface.cpp: Removed.
        * platform/graphics/surfaces/egl/EGLSurface.h: Removed.
        * platform/graphics/surfaces/egl/EGLXSurface.cpp: Removed.
        * platform/graphics/surfaces/egl/EGLXSurface.h: Removed.
        * platform/graphics/surfaces/glx/GLXConfigSelector.h: Removed.
        * platform/graphics/surfaces/glx/GLXContext.cpp: Removed.
        * platform/graphics/surfaces/glx/GLXContext.h: Removed.
        * platform/graphics/surfaces/glx/GLXSurface.cpp: Removed.
        * platform/graphics/surfaces/glx/GLXSurface.h: Removed.
        * platform/graphics/surfaces/glx/X11Helper.cpp: Removed.
        * platform/graphics/surfaces/glx/X11Helper.h: Removed.
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::setClient):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp: Removed.
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::syncPlatformLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2017-02-20  Dean Jackson  <dino@apple.com>

        Add 'webglcontextchanged' WebGLContextEvent
        https://bugs.webkit.org/show_bug.cgi?id=168595
        <rdar://problem/30604254>

        Reviewed by Antoine Quint.

        Add a new event that is dispatched when the GraphicsContext3D
        notices that the active GPU has changed.

        Test: fast/canvas/webgl/webglcontextchangedevent.html

        * dom/EventNames.h: Add 'webglcontextchanged'.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent): Dispatch the new event.
        (WebCore::WebGLRenderingContextBase::simulateContextChanged): Tell the GraphicsContext3D to
        pretend there was a GPU switch. This is called from Internals for testing.
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl: Export the interface so Internals can see it.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::simulateContextChanged): Tell the GraphicsContext3DManager
        that it should pretend a GPU change has happened, which causes it to notify all the
        active contexts.
        * platform/graphics/GraphicsContext3D.h:

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3DManager::updateAllContexts): Tell the GraphicsContext3Ds
        to tell their WebGLRenderingContexts to dispatch an event.
        (WebCore::GraphicsContext3D::simulateContextChanged): Fake the display change.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::dispatchContextChangedNotification): Tell the WebGLRenderingContext
        that a change has occurred, and that it should dispatch an event. This is a layering
        violation which will need to be fixed (although with other communication from GC3D back
        to WebGL).
        * testing/Internals.cpp:
        (WebCore::Internals::simulateWebGLContextChanged):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-02-19  Dean Jackson  <dino@apple.com>

        Activate/deactivate high performance GPU when requested
        https://bugs.webkit.org/show_bug.cgi?id=168559
        <rdar://problem/30592266>

        Reviewed by Jon Lee.

        Respect the high-performance powerPreference for WebGL, by managing an
        object that enables the high-performance GPU. If a WebGL context wants
        high-performance, and it is visible, then a manager class in GraphicsContext3D
        creates and retains the object, causing all the WebGL contexts to move GPUs.
        If all the high-performance contexts are not visible, such as in a background tab,
        then the manager will release the object, allowing the GPU to power down.

        The swapping back from the high-performance GPU happens on a timer, to make
        sure we don't churn between GPUs if the user is swapping between a lot of tabs,
        or windows.

        Unfortunately testing this change properly requires hardware with
        multiple GPUs. I plan to write an API test that fakes most of the
        system interaction, such as occluding the page. An API test might
        also be able to verify if the system has more than one GPU. Otherwise
        I'll have to plumb everything through Internals.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::isHighPerformanceContext): Helper to detect if the GraphicsContext3D actually
        used high-performance mode.
        (WebCore::WebGLRenderingContextBase::create): Add logging if we are
        actually overriding a high-performance request.
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase): If we are high-performance,
        then register for activity state changes.
        (WebCore::WebGLRenderingContextBase::addActivityStateChangeObserverIfNecessary):
        (WebCore::WebGLRenderingContextBase::removeActivityStateChangeObserver):
        (WebCore::WebGLRenderingContextBase::destroyGraphicsContext3D): Call removeActivityStateChangeObserver
        as the GC3D is destroyed.
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext): If the context was
        restored successfully, and came back in high-performance, then we need
        to listen for activity state changes as usual.
        (WebCore::WebGLRenderingContextBase::activityStateDidChange): If we changed visibility,
        tell the GC3D.
        * html/canvas/WebGLRenderingContextBase.h: Class inherits ActivityStateChangeObserver.

        * page/Settings.in: No longer force low-power everywhere.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::setContextVisibility): Empty implementation for non-Mac.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::powerPreferenceUsedForCreation): Tells clients what power preference
        was actually used during creation (e.g. a single GPU system will use default, even if
        they requested high-performance).

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3DManager::GraphicsContext3DManager): Helper class to
        look after all GraphicsContext3Ds.
        (WebCore::GraphicsContext3DManager::hasTooManyContexts): We have a limit on the
        number of contexts we can keep alive at any one time.
        (WebCore::manager): Helper to return the static instance.
        (WebCore::displayWasReconfigured): Send a message to all the contexts.
        (WebCore::GraphicsContext3DManager::addContext):
        (WebCore::GraphicsContext3DManager::removeContext):
        (WebCore::GraphicsContext3DManager::addContextRequiringHighPerformance):
        (WebCore::GraphicsContext3DManager::removeContextRequiringHighPerformance):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState): Check if the number
        of contexts requiring high-performance means we need to enable/disable that GPU.
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired): Releases our
        object that keeps the high-performance GPU on.
        (WebCore::GraphicsContext3DManager::recycleContextIfNecessary): Get rid of the first (oldest)
        context. This code was in GC3D proper, but it made more sense here in the helper.
        (WebCore::setPixelFormat): All contexts are created muxable now.
        (WebCore::GraphicsContext3D::create): Use the manager.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Add logging.
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Better logging.
        (WebCore::GraphicsContext3D::updateCGLContext):
        (WebCore::GraphicsContext3D::setContextVisibility): This is the responder to the
        ActivityStateChanges in the WebGLRenderingContext.
        (WebCore::activeContexts): Deleted.
        (WebCore::addActiveContext): Deleted.
        (WebCore::removeActiveContext): Deleted.

2017-02-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Remove compilation flag ENABLE_CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=167693

        Reviewed by Sergio Villar Senin.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        (WebCore::isLayoutDependent):
        (WebCore::resolveJustifySelfAuto):
        (WebCore::isImplicitlyInheritedGridOrFlexProperty):
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGridAutoRepeatValue.cpp:
        * css/CSSGridAutoRepeatValue.h:
        * css/CSSGridLineNamesValue.cpp:
        * css/CSSGridLineNamesValue.h:
        * css/CSSGridTemplateAreasValue.cpp:
        * css/CSSGridTemplateAreasValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isContentDistributionValue):
        (WebCore::CSSValue::isGridLineNamesValue):
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGridAutoFlow):
        (WebCore::StyleBuilderConverter::convertContentAlignmentData):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueGridTemplateRows):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        * css/StyleResolver.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGridAutoFlow):
        (WebCore::consumeGridTemplateAreas):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::consumeGridShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::isCSSGridLayoutEnabled):
        * rendering/Grid.cpp:
        * rendering/Grid.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getFirstLetter):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::clearExtraInlineAndBlockOffests):
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::createsNewFormattingContext):
        (WebCore::logicalWidthIsResolvable):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        (WebCore::RenderBox::hasDefiniteLogicalHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderGrid):
        * rendering/style/GridArea.h:
        * rendering/style/GridLength.h:
        * rendering/style/GridPosition.h:
        * rendering/style/GridPositionsResolver.cpp:
        * rendering/style/GridPositionsResolver.h:
        * rendering/style/GridTrackSize.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::isCSSGridLayoutEnabled):
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::gridItemRowEnd):
        (WebCore::RenderStyle::setGridRowGap):
        (WebCore::RenderStyle::initialGridItemRowEnd):
        (WebCore::RenderStyle::isDisplayReplacedType):
        (WebCore::RenderStyle::isDisplayGridBox):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleGridData.cpp:
        * rendering/style/StyleGridData.h:
        * rendering/style/StyleGridItemData.cpp:
        * rendering/style/StyleGridItemData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setCSSGridLayoutEnabled):

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r212345): [GTK] ASSERT(cookieChangeCallbackMap().contains(jar)) failed in WebCore::stopObservingCookieChanges:54
        https://bugs.webkit.org/show_bug.cgi?id=168375

        Reviewed by Alex Christensen.

        Simplify the way cookie storage is handled in NetworkStorageSessionSoup. Now we always keep a reference to the
        cookie jar, no matter if we have a session or not, that is always kept in sync with the one actually used by the
        session. We always connect to the changed signal of the current cookie jar and notify the observer if it has been
        set.

        * platform/network/NetworkStorageSession.h:
        * platform/network/soup/CookieStorageSoup.cpp:
        (WebCore::startObservingCookieChanges): Remove this implementation and add an ASSERT to ensure we don't use this anymore.
        (WebCore::stopObservingCookieChanges): Ditto.
        (WebCore::cookieChangeCallbackMap): Deleted.
        (WebCore::soupCookiesChanged): Deleted.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Initialize the cookie storage.
        (WebCore::NetworkStorageSession::~NetworkStorageSession): Disconnect the changed signal.
        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession): Always pass the current cookie storage.
        (WebCore::NetworkStorageSession::cookiesDidChange): Notify the observer.
        (WebCore::NetworkStorageSession::cookieStorage): Return the current cookie storage.
        (WebCore::NetworkStorageSession::setCookieStorage): Update the current cookie storage and update the session if
        needed too. We always have a valid cookie storage so if nullptr is given we create a new one.
        (WebCore::NetworkStorageSession::setCookieObserverHandler): Set a cookie observer handler.

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

        onbeforeunload event return value coercion is not per-spec
        https://bugs.webkit.org/show_bug.cgi?id=168382

        Reviewed by Darin Adler.

        Update handling of value returned by onbeforeunload event listeners
        to match Firefox and the specification:
        - https://html.spec.whatwg.org/#the-event-handler-processing-algorithm (step 4)

        Namely, the following changes were made:
        - Only set the event's returnValue attribute to the returned value if the attribute
          value is the empty string (so as to not override the attribute value if it has
          explicitly been set by JS).
        - Cancel the event when the return value is not null by calling preventDefault().

        Additionally, the following changes were made:
        - Ask the user to confirm the navigation if the event was canceled, not just if the
          returnValue attribute was set to a non-empty string.
        as per:
        - https://html.spec.whatwg.org/#prompt-to-unload-a-document (step 8)

        Tests: fast/events/before-unload-return-string-conversion.html
               imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-canceling.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::handleBeforeUnloadEventReturnValue):
        (WebCore::JSEventListener::handleEvent):
        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):

2017-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Call SoupNetworkSession::setShouldIgnoreTLSErrors when testRunner.setAllowsAnySSLCertificate() is called
        https://bugs.webkit.org/show_bug.cgi?id=168571

        Reviewed by Michael Catanzaro.

        Fixes: http/tests/ssl/upgrade-origin-usage.html

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setAllowsAnySSLCertificate):

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

        REGRESSION(r212218): Assertion failures in and after parserRemoveChild
        https://bugs.webkit.org/show_bug.cgi?id=168458

        Reviewed by Antti Koivisto.

        The bug was caused by parserRemoveChild not preceeding to remove oldChild even when
        oldChild had been inserted elsewhere during unload evnets of the disconnected frames.
        Fixed the bug by checking this condition and exiting early.

        Also fixed various callers of parserRemoveChild to not call parserAppendChild when
        the removed node had already been inserted elsewhere by scripts.

        Tests: fast/parser/adoption-agency-unload-iframe-3.html
               fast/parser/adoption-agency-unload-iframe-4.html
               fast/parser/xml-error-unload-iframe.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserRemoveChild): Exit early when the node had been
        inserted elsewhere while firing unload events. Also moved the call to
        notifyRemovePendingSheetIfNeeded outside NoEventDispatchAssertion since it can
        synchrnously fire a focus event.
        (WebCore::ContainerNode::parserAppendChild): Moved adoptNode call to inside
        NoEventDispatchAssertion since adoptNode call here should never mutate DOM.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeReparentTask): Added an early exit when the node had already been
        inserted elsewhere.
        (WebCore::executeInsertAlreadyParsedChildTask): Ditto.
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock): Ditto.
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end): Fixed a crash unveiled by one of the test cases.
        Exit early when insertErrorMessageBlock detached the parser (by author scripts).
        (WebCore::XMLDocumentParser::finish): Keep the parser alive until we exit.

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

        <input type=color readonly> doesn't act per spec
        https://bugs.webkit.org/show_bug.cgi?id=168421
        <rdar://problem/30593185>

        Reviewed by Ryosuke Niwa.

        The 'readonly' attribute should not apply to <input type=color> as per the
        HTML specification:
        - https://html.spec.whatwg.org/#the-input-element:attr-input-readonly-3

        Chrome / Firefox and Edge already behave as per the specification.

        Tests: fast/forms/color/input-color-disabled.html
               fast/forms/color/input-color-readonly.html

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::handleDOMActivateEvent):
        (WebCore::ColorInputType::didChooseColor):

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

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

        causes crashes on AArch64 on linux, maybe it's causing crashes
        on iOS too (Requested by pizlo on #webkit).

        Reverted changeset:

        "The collector thread should only start when the mutator
        doesn't have heap access"
        https://bugs.webkit.org/show_bug.cgi?id=167737
        http://trac.webkit.org/changeset/212466

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

        Simple line layout: Implement positionForPoint.
        https://bugs.webkit.org/show_bug.cgi?id=168565
        <rdar://problem/30593370>

        Reviewed by Antti Koivisto.

        With this patch, now we don't need to switch over to line box tree anymore when positionForPoint()
        is called on a single RenderText content (which is the majority of the simple line content).
        This patch also adds a new positionForPoint method which returns a Position object instead of VisiblePosition.
        Some of the positionForPoint() callsites are only interested in the Position object so constructing a VisiblePosition
        (which could potentially kick off a layout) is a waste. At this point the non-simple line layout codepath still constructs
        a VisiblePosition and that should be addresses as part of webkit.org/b/168566.

        Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPoint):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::positionForPoint):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RenderText.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::positionForPoint):
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::runForPoint):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::logicalLeft):
        (WebCore::SimpleLineLayout::RunResolver::Run::logicalRight):

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

        Execute pending scripts asynchronously after stylesheet loads complete
        https://bugs.webkit.org/show_bug.cgi?id=168367
        rdar://problem/30561379

        Reviewed by Andreas Kling.

        The current synchronous execution is fragile and creates various problems.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::checkLoaded):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::removeChildren):

            Remove various places where we would trigger delayed synchronous execution.

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

            Trigger scroll to anchor at the end of style resolution instead of when style sheet load completes.

        (WebCore::Document::didRemoveAllPendingStylesheet):

            Call asynchronous script execution function.

        * dom/Document.h:
        (WebCore::Document::setNeedsNotifyRemoveAllPendingStylesheet): Deleted.
        (WebCore::Document::notifyRemovePendingSheetIfNeeded): Deleted.
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheetsSoon):
        (WebCore::ScriptableDocumentParser::scriptsWaitingForStylesheetsExecutionTimerFired):

            Add a timer for executing pending scripts.

        (WebCore::ScriptableDocumentParser::detach):
        * dom/ScriptableDocumentParser.h:
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheets):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLLinkElement.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::detach):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):

            Stay in loading state if we have a pending script. This matches existing behavior.

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

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

        <input type=range readonly> doesn't act per spec
        https://bugs.webkit.org/show_bug.cgi?id=168422
        <rdar://problem/30593189>

        Reviewed by Ryosuke Niwa.

        'readonly' attribute should not apply to <input type=range> as per the HTML
        specification:
        - https://html.spec.whatwg.org/#the-input-element:attr-input-readonly-3

        Firefox and Edge already behave as per the specification.

        No new tests, updated existing tests.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::handleTouchEvent):
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::willRespondToMouseMoveEvents):
        (WebCore::SliderThumbElement::willRespondToMouseClickEvents):

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

        Recursive MessagePort.postMessage() calls causes tab to become unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=168548
        <rdar://problem/29808005>

        Reviewed by Darin Adler.

        MessagePort::dispatchMessages() was getting messages one by one of the
        channel's MessageQueue and firing the MessageEvent for each of them.
        The issue is that we can get stuck in an infinite loop if the
        MessageEvent handler posts a message on the same post.

        To address the issue, we now takes all messages from the queue before
        iterating over them to fire the event. This way, if new messages are
        added to the queue in one of the MessageEvent handlers, they will not
        be processed until the next event loop iteration, as is expected.

        Test: fast/events/message-port-postMessage-recursive.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::EventData):
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::takeMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::takeAllMessages):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):

2017-02-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove COORDINATED_GRAPHICS_MULTIPROCESS
        https://bugs.webkit.org/show_bug.cgi?id=168514

        Reviewed by Darin Adler.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2017-02-17  Simon Fraser  <simon.fraser@apple.com>

        Allow properties in CSSProperties.json that don't trigger code generation
        https://bugs.webkit.org/show_bug.cgi?id=168535

        Reviewed by Sam Weinig.
        
        In order to track the development of CSS properties that we have not yet implemented,
        support '"skip-codegen" : true' in "codegen-properties".

        Test by adding a few fill-related properties with this attribute.

        * css/CSSProperties.json:
        * css/makeprop.pl:
        (isPropertyEnabled):
        (addProperty):

2017-02-17  Brian Burg  <bburg@apple.com>

        Web Inspector: RTL: Inspector window should dock to the left when using RTL layout direction
        https://bugs.webkit.org/show_bug.cgi?id=168273
        <rdar://problem/29949325>

        Reviewed by Matt Baker.

        Add the ability to dock Web Inspector to the left of the inspected view.
        The frontend decides whether the Dock to Side button docks left or right
        based on the current layout direction.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestSetDockSide):

2017-02-16  Simon Fraser  <simon.fraser@apple.com>

        Allow PlatformCALayers to specify that they want deep color backing store
        https://bugs.webkit.org/show_bug.cgi?id=168495

        Reviewed by Tim Horton.
        
        Currently capable iOS devices get deep color backing store by virtue of a supports
        check in PlatformCALayerCocoa::PlatformCALayerCocoa(), and LegacyTileGridTile.

        Future work will make layer contents format selection more complex, so express the need
        for deep color on PlatformCALayer, and have the creators of PlatformCALayer (mainly the
        flavors of GraphicsLayerCA) choose for them to support deep color. A bit of special-casing
        is needed to propagte the state to TileControllers.
        
        The deep-colorness now propagates from PlatformCALayerRemote to RemoteLayerBackingStore,
        instead of RemoteLayerBackingStore looking at the properties of the screen directly.

        Remove PlatformCALayer::LayerTypeWebTiledLayer which was only used for the old CATiledLayers
        that we no longer use.

        An iphone7 test verifies that page tiles, normal layers and tiled layers get the deep
        color state set on them.

        Test: tiled-drawing/ios/iphone7/compositing-layers-deep-color.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::canHaveBackingStore):
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setZoomedOutContentsScale):
        (WebCore::TileController::setAcceleratesDrawing):
        (WebCore::TileController::setWantsDeepColorBackingStore):
        (WebCore::TileController::createTileLayer):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::updateTileLayerProperties):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::PlatformCALayerCocoa):
        (PlatformCALayerCocoa::commonInit):
        (PlatformCALayerCocoa::wantsDeepColorBackingStore):
        (PlatformCALayerCocoa::setWantsDeepColorBackingStore):
        (layerContentsFormat):
        (PlatformCALayerCocoa::updateContentsFormat):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.h:
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer setWantsDeepColorBackingStore:]):
        (-[WebTiledBackingLayer wantsDeepColorBackingStore]):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::wantsDeepColorBackingStore):
        (PlatformCALayerWin::setWantsDeepColorBackingStore):
        (printLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/spi/cocoa/QuartzCoreSPI.h:

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

        Refactoring: Make sure to unprepare WebAudioSourceProviderAVFObjC when its owner is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=168532

        Reviewed by Youenn Fablet.

        Because WebAudioSourceProviderAVFObjC has a back-pointer to the object which creted it, make
        sure that back-pointer is invalidated once the creating object is destroyed by calling
        WebAudioSOurceProviderAVFObjC::unprepare().

        Drive-by Fix: In WebAudioSourceProviderAVFObjC::audioSamplesAvailable(), PlatformAudioData will
        always be of the WebAudioBufferList type. If this ever becomes untrue, an invalid downcast will
        be caught by downcast<>, so just remove the is<> check.

        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::~AVAudioCaptureSource):
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::~MockRealtimeAudioSourceMac):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare):
        (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):

2017-02-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Improve handling of <video> with only audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=167836
        <rdar://problem/30255812>

        Reviewed by Dean Jackson.

        We now check for the availability of video tracks before considering a <video>
        element is displaying an actual video file and turning auto-hide on. We also
        check that we have video tracks before enabling the fullscreen button. This
        brings the behavior of a <video> pointing to a resource with no video tracks
        to be the same as an <audio> element.

        Test: media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get tracksToMonitor):
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):

2017-02-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Toggle playback when clicking on the video on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168515
        <rdar://problem/30577441>

        Reviewed by Dean Jackson.

        Listen to click events on the macOS media controls. Detect any clicks that were on the
        background instead of the controls widgets themselves, and tell the delegate (MediaController)
        about them.

        Tests: media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html
               media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html
               media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype._handleMousedown):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.handleEvent):
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.handleEvent):
        (MacOSMediaControls):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.togglePlayback):
        (MediaController.prototype.macOSControlsBackgroundWasClicked):
        (MediaController.prototype._updateControlsIfNeeded):
        * Modules/modern-media-controls/media/playback-support.js:
        (PlaybackSupport.prototype.buttonWasPressed):

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

        Refactoring: Remove AudioSourceObserverObjC and AudioCaptureSourceProviderObjC
        https://bugs.webkit.org/show_bug.cgi?id=168520

        Reviewed by Youenn Fablet.

        Having AudioCaptureSourceProviderObjC as the type provided to WebAudioSourceProviderAVFObjC
        (and only ever to WebAudioSourceProviderAVFObjC) makes it impossible for that class to add
        an observer on RealtimeMediaSource, of which all classes inheriting from
        WebAudioSourceProviderAVFObjC are subclasses. There is no need to treat
        WebAudioSourceProviderAVFObjC as an "observer", since the only thing it will ever observe is
        the object which created it and hold an explicit reference to it. So replace all instances
        of the "observer" pattern with direct calls to the necessary (newly non-virtual) methods.
        This allows WebAudioSourceProviderAVFObjC to register as an observer directly on
        RealtimeMediaSource, to listen for audioSamplesAvailable() instead of process(), and remove
        a lot of unnecessary conversion code and observer duplication.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::Observer::sourceStopped):
        (WebCore::RealtimeMediaSource::Observer::sourceMutedChanged):
        (WebCore::RealtimeMediaSource::Observer::sourceEnabledChanged):
        (WebCore::RealtimeMediaSource::Observer::sourceSettingsChanged):
        (WebCore::RealtimeMediaSource::Observer::preventSourceFromStopping):
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::shutdownCaptureSession):
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVAudioCaptureSource::addObserver): Deleted.
        (WebCore::AVAudioCaptureSource::removeObserver): Deleted.
        (WebCore::AVAudioCaptureSource::start): Deleted.
        * platform/mediastream/mac/AudioCaptureSourceProviderObjC.h: Removed.
        * platform/mediastream/mac/AudioSourceObserverObjC.h: Removed.
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        (WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):
        (WebCore::MockRealtimeAudioSourceMac::addObserver): Deleted.
        (WebCore::MockRealtimeAudioSourceMac::removeObserver): Deleted.
        (WebCore::MockRealtimeAudioSourceMac::start): Deleted.
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
        (WebCore::RealtimeIncomingAudioSource::addObserver): Deleted.
        (WebCore::RealtimeIncomingAudioSource::removeObserver): Deleted.
        (WebCore::RealtimeIncomingAudioSource::start): Deleted.
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * 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):
        (WebCore::WebAudioSourceProviderAVFObjC::process): Deleted.

2017-02-17  Antoine Quint  <graouts@apple.com>

        REGRESSION: Subtitles menu in media controls allows multiple items to be selected
        https://bugs.webkit.org/show_bug.cgi?id=168168
        <rdar://problem/30488605>

        Reviewed by Dean Jackson.

        Ensure that only a single audio track and a single text track can be selected
        in the tracks panel at any given point.

        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.tracksPanelSelectionDidChange):
        (TracksSupport.prototype._sortedTrackList):
        (TracksSupport):

2017-02-17  Jeremy Jones  <jeremyj@apple.com>

        Invalidate WebAVSampleBufferStatusChangeListener when MediaPlayerPrivateMediaStreamAVFObjC is deallocated.
        https://bugs.webkit.org/show_bug.cgi?id=168488

        Reviewed by Jer Noble.

        Fixes periodically crashing test: fast/mediastream/MediaStream-video-element-track-stop.html

        WebAVSampleBufferStatusChangeListener has an unretained referecne to MediaPlayerPrivateMediaStreamAVFObjC
        that must be invaldated when MediaPlayerPrivateMediaStreamAVFObjC is deallocated.

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

2017-02-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Improve handling of live broadcast video
        https://bugs.webkit.org/show_bug.cgi?id=168506
        <rdar://problem/30432094>

        Reviewed by Dean Jackson.

        We improve the handling of live broadcast video by:
        
            - checking that we have a media source before deciding to show the controls
              bar and start button
            - support a mode where neither the status text nor the scrubber is visible
              in case we're still waiting on sufficient data to determine the video
              time and we haven't really started loading data yet
            - not showing time labels when we have an infinite duration
            - ensuring the status label is left-aligned

        Test: media/modern-media-controls/status-label/status-label-text-align.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        * 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):
        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/status-support.js:
        (StatusSupport.prototype.syncControl):
        (StatusSupport):
        * Modules/modern-media-controls/media/time-labels-support.js:
        (TimeLabelsSupport.prototype.syncControl):
        (TimeLabelsSupport):

2017-02-17  Anders Carlsson  <andersca@apple.com>

        Begin overhauling the pasteboard implementation
        https://bugs.webkit.org/show_bug.cgi?id=168525

        Reviewed by Tim Horton.

        Add a new PasteboardWriterData object. This object will hold data that is going
        to be written to the pasteboard at some point. Currently it only supports plain text.

        Also add a Mac-only PasteboardWriter class which can convert a PasteboardWriterDataObject
        into an object that conforms to NSPasteboardWriting.

        The basic idea is that instead of doing a bunch of pasteboard operations,
        we'll just package all the pasteboard data up into an object and ship it over to WebKit.

        This code is currently unused but will be adopted by a new drag implementation (in an upcoming patch).

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PasteboardWriterData.cpp: Added.
        (WebCore::PasteboardWriterData::PasteboardWriterData):
        (WebCore::PasteboardWriterData::~PasteboardWriterData):
        (WebCore::PasteboardWriterData::isEmpty):
        (WebCore::PasteboardWriterData::setPlainText):
        * platform/PasteboardWriterData.h: Added.
        * platform/mac/PasteboardWriter.h: Added.
        * platform/mac/PasteboardWriter.mm: Added.
        (WebCore::createPasteboardWriting):
        * platform/spi/mac/NSPasteboardSPI.h: Added.

2017-02-17  Per Arne Vollan  <pvollan@apple.com>

        Apply SVG styles paint-order, stroke-linejoin, and stroke-linecap on DOM text.
        https://bugs.webkit.org/show_bug.cgi?id=168044
        rdar://problem/30165746

        Reviewed by Simon Fraser.

        This patch moves these styles out of svg, and sets the properties on video cues.

        Tests: fast/css/parsing-paint-order.html
               fast/css/parsing-stroke-linecap.html
               fast/css/parsing-stroke-linejoin.html
               fast/css/parsing-stroke-width.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        (WebCore::paintOrder): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isValidCueStyleProperty):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::cssPropertyWithTextEdgeColor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::paintTypesForPaintOrder):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setPaintOrder):
        (WebCore::RenderStyle::paintOrder):
        (WebCore::RenderStyle::initialPaintOrder):
        (WebCore::RenderStyle::setCapStyle):
        (WebCore::RenderStyle::capStyle):
        (WebCore::RenderStyle::initialCapStyle):
        (WebCore::RenderStyle::setJoinStyle):
        (WebCore::RenderStyle::joinStyle):
        (WebCore::RenderStyle::initialJoinStyle):
        (WebCore::RenderStyle::strokeWidth):
        (WebCore::RenderStyle::setStrokeWidth):
        (WebCore::RenderStyle::hasVisibleStroke):
        (WebCore::RenderStyle::setStrokeOpacity):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        (WebCore::SVGRenderStyle::paintTypesForPaintOrder): Deleted.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBufferedRendering):
        (WebCore::SVGRenderStyle::initialFillRule):
        (WebCore::SVGRenderStyle::initialMaskType):
        (WebCore::SVGRenderStyle::setBufferedRendering):
        (WebCore::SVGRenderStyle::setFillRule):
        (WebCore::SVGRenderStyle::setMaskType):
        (WebCore::SVGRenderStyle::bufferedRendering):
        (WebCore::SVGRenderStyle::fillRule):
        (WebCore::SVGRenderStyle::strokeMiterLimit):
        (WebCore::SVGRenderStyle::maskType):
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::setBitDefaults):
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::initialCapStyle): Deleted.
        (WebCore::SVGRenderStyle::initialJoinStyle): Deleted.
        (WebCore::SVGRenderStyle::initialPaintOrder): Deleted.
        (WebCore::SVGRenderStyle::setCapStyle): Deleted.
        (WebCore::SVGRenderStyle::setJoinStyle): Deleted.
        (WebCore::SVGRenderStyle::setPaintOrder): Deleted.
        (WebCore::SVGRenderStyle::capStyle): Deleted.
        (WebCore::SVGRenderStyle::joinStyle): Deleted.
        (WebCore::SVGRenderStyle::strokeWidth): Deleted.
        (WebCore::SVGRenderStyle::paintOrder): Deleted.
        (WebCore::SVGRenderStyle::hasVisibleStroke): Deleted.
        (WebCore::SVGRenderStyle::setStrokeWidth): 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/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::strokeShape):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::strokeShape):
        (WebCore::RenderSVGPath::shapeDependentStrokeContains):
        (WebCore::RenderSVGPath::shouldStrokeZeroLengthSubpath):
        (WebCore::RenderSVGPath::zeroLengthLinecapPath):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::strokeShape):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeShape):
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        (WebCore::RenderSVGShape::strokeWidth):
        (WebCore::RenderSVGShape::hasSmoothStroke):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2017-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Handle Settings::allowsAnySSLCertificate() in SSL sockets
        https://bugs.webkit.org/show_bug.cgi?id=168521

        Reviewed by Michael Catanzaro.

        When Settings::allowsAnySSLCertificate() is enabled, connect to accept-certificate signal of the GTlsConnection
        to always accept the certificates.

        Fixes: http/tests/websocket/tests/hybi/simple-wss.html

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::wssConnectionAcceptCertificateCallback):
        (WebCore::wssSocketClientEventCallback):
        (WebCore::SocketStreamHandleImpl::create):

2017-02-17  Simon Fraser  <simon.fraser@apple.com>

        Fixed elements bounce when rubber-banding at the bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=168493
        rdar://problem/30567713

        Reviewed by Tim Horton.

        FrameView::visibleDocumentRect() was computing a bad visible rect when bottom-rubber-banding,
        by adding rubberBandBottom which is negative, rather than subtracting.

        Log some more scrolling stuff.

        Ironically, the existing test didn't test stick-to-viewport fixed position because
        backgroundShouldExtendBeyondPage() is off by default in WTR, so clone it to a test
        that sets this, to test both behaviors.

        This also revealed that dynamic changes to backgroundShouldExtendBeyondPage() need
        to be propagated to the scrolling tree, which is fixed in AsyncScrollingCoordinator::frameViewLayoutUpdated().

        Test: fast/visual-viewport/rubberbanding-viewport-rects-extended-background.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::visibleDocumentRect):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2017-02-17  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (209396): Apple Pay buttons do not render
        https://bugs.webkit.org/show_bug.cgi?id=168523
        rdar://problem/30451563

        Reviewed by Geoffrey Garen.

        The new CSS parser mistakenly converted -apple-pay-button values to
        -webkit-pay-button, breaking -webkit-appearance: -apple-pay-button.

        Fix by excluding "-apple-pay" prefixed values from the conversion.

        Test: fast/css/appearance-apple-pay-button.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAppleLegacyCssValueKeyword):

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

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

        Some crashes with GuardMalloc (Requested by anttik on
        #webkit).

        Reverted changeset:

        "Execute pending scripts asynchronously after stylesheet loads
        complete"
        https://bugs.webkit.org/show_bug.cgi?id=168367
        http://trac.webkit.org/changeset/212463

2017-02-16  Brent Fulgham  <bfulgham@apple.com>

        RenderView needs to be updated when FrameView changes
        https://bugs.webkit.org/show_bug.cgi?id=168481
        <rdar://problem/30339638>

        Reviewed by Andreas Kling.

        The state of the Document's RenderView can get out of sync with the Frame's FrameView.
        We need a notification mechanism so that modifications to the Frame's view are properly
        relayed to Document so that it can have a correct RenderView.

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInView): Create an updated render tree (if
        one does not already exist).
        (WebCore::Document::destroyRenderTree): Remove an incorrect ASSERT. We may enter this
        code when the Frame uses 'setView(nullptr)', which happens during certain  updates.
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::setView): Destroy the old render tree (if present) before switching to
        the new view. Then notify the document that it is now the current document in the new view.

2017-02-17  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Fast replay on video hide/unhide on platforms with limited video buffer pools
        https://bugs.webkit.org/show_bug.cgi?id=168505

        Reviewed by Žan Doberšek.

        The WebKit code isn't consuming the video samples when the video layer is hidden,
        so the buffers aren't being returned to the pool and starve the decoder when the
        buffer pool runs out of buffers (on platforms using a buffer pool and a custom
        allocator, such as OMX on the Raspberry Pi 2). When the video layer is restored,
        the pipeline tries to catch up and the user sees the video "going fast forward".

        The added code "consumes" (removes and unrefs) the buffer in that case. However,
        the sample isn't completely removed because it still holds important info (eg:
        caps) needed for the proper operation of the video element.

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

2017-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Stop removing the fragment identifier from resource requests
        https://bugs.webkit.org/show_bug.cgi?id=168509

        Reviewed by Sergio Villar Senin.

        I don't know why, but have always removed the fragment identifier from the URL when creating the SoupURI that
        is passed to libsoup. Maybe it was a bug in a very old version of libsoup, but it doesn't look necessary anymore
        and it's causing several layout test failures.

        Fixes: http/tests/svg/svg-use-external.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html
               imported/w3c/web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::createSoupURI): Do not remove the fragment identifier from the URL.

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

        [JSC] Drop PassRefPtr from ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=168455

        Reviewed by Geoffrey Garen.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readArrayBufferView):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):

2017-02-16  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION(r212439): Web Inspector Toolbar / Window appears broken
        https://bugs.webkit.org/show_bug.cgi?id=168494

        Reviewed by Joseph Pecoraro.

        Missed one conversion from acceleratesDrawing to drawsAsynchronously, which
        caused non-Whippet GrpahicsContext shadow drawing to happen unexpectedly.

        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer drawsAsynchronously]):
        (-[WebTiledBackingLayer acceleratesDrawing]): Deleted.

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

        <input>.labels is empty if type changes from text->hidden->checkbox
        https://bugs.webkit.org/show_bug.cgi?id=168358

        Reviewed by Ryosuke Niwa.

        We were invalidating LabelsNodeLists on 'for' attribute change.
        We now also invalidate them of 'type' attribute change since
        HTMLInputElements whose type is 'hidden' do not support labels.

        No new tests, updated existing test.

        * dom/Document.h:
        * dom/LiveNodeList.h:
        (WebCore::shouldInvalidateTypeOnAttributeChange):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):

2017-02-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove even more EFL from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=168485

        Reviewed by Alex Christensen.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::copy):
        * platform/ContextMenuItem.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::timeoutError):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::setProxySettingsFromEnvironment): Deleted.
        * platform/network/soup/SoupNetworkSession.h:

2017-02-16  Daniel Bates  <dabates@apple.com>

        Remove Chromium-specific code to call FrameLoaderClient::redirectDataToPlugin(nullptr)
        https://bugs.webkit.org/show_bug.cgi?id=168417
        <rdar://problem/30541748>

        Reviewed by Brent Fulgham.

        Remove Chromium-specific code that was added in r125500 to call FrameLoaderClient::redirectDataToPlugin(nullptr)
        in PluginDocument::detachFromPluginElement(). Calling redirectDataToPlugin() with nullptr was used by the
        Chromium port to signify that the plugin document was being destroyed so that they could tear down their
        plugin widget. And PluginDocument::detachFromPluginElement() is the only place that calls redirectDataToPlugin()
        passing nullptr. No other port made use of this machinery and the Chromium port has long since been removed
        from the Open Source WebKit Project. We should remove this code.

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes): Pass the plugin widget by reference.
        (WebCore::PluginDocument::detachFromPluginElement): Remove call to FrameLoaderClient::redirectDataToPlugin().
        This call was only used by the Chromium port as means to be notified when the plugin document was being
        destroyed. No other port made use of this notification or needed such a notification.
        * loader/EmptyClients.cpp: Change argument of redirectDataToPlugin() from Widget* to Widget& to convey
        that this function always takes a valid Widget. Also remove unnecessary argument name as the data type
        of the argument and the name of the function sufficiently describes the purpose of the argument.
        * loader/FrameLoaderClient.h: Ditto.

2017-02-16  Myles C. Maxfield  <mmaxfield@apple.com>

        font-weight in @font-face can cause a font to be downloaded even when it's not used
        https://bugs.webkit.org/show_bug.cgi?id=168114
        <rdar://problem/30301317>

        Reviewed by Darin Adler.

        There were two problems with our font loading code.

        When we are in the middle of a download, we will use a special interstitial font,
        and this special font has a flag set which will cause it to be invisible when it is
        drawn. However, when we start using this font during the load, we give it a
        unicode-range of U+0-0 which means that it will never be used, and fallback will
        happen to other weights immediately. 

        The second problem with the font loading code is that this interstital font is just
        Times. Times doesn't support every character, which means that if we are trying
        to render some exotic character, we fall back to other weights. The solution here
        is to use LastResort as the interstitial font, because it supports all characters.
        Because its metrics are reasonable and we don't ever actually paint this
        interstitial font, this choice is no worse than Times.

        Tests: fast/text/font-style-download.html
               fast/text/font-weight-download-2.html
               fast/text/font-weight-download.html
               fast/text/font-weight-fallback.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::appendFont):
        (WebCore::CSSSegmentedFontFace::fontRanges):
        (WebCore::appendFontWithInvalidUnicodeRangeIfLoading): Deleted.
        * platform/graphics/Font.h:
        (WebCore::Font::widthForGlyph):
        * platform/graphics/FontCache.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter):

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove EFL-specific files in Source.

        Rubber-stamped by Anders Carlsson.

        * editing/efl: Removed.
        * page/efl: Removed.
        * platform/audio/efl: Removed.
        * platform/efl: Removed.
        * platform/efl/DefaultTheme: Removed.
        * platform/efl/DefaultTheme/widget: Removed.
        * platform/efl/DefaultTheme/widget/button: Removed.
        * platform/efl/DefaultTheme/widget/check: Removed.
        * platform/efl/DefaultTheme/widget/combo: Removed.
        * platform/efl/DefaultTheme/widget/entry: Removed.
        * platform/efl/DefaultTheme/widget/progressbar: Removed.
        * platform/efl/DefaultTheme/widget/radio: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar: Removed.
        * platform/efl/DefaultTheme/widget/search: Removed.
        * platform/efl/DefaultTheme/widget/search/cancel: Removed.
        * platform/efl/DefaultTheme/widget/search/decoration: Removed.
        * platform/efl/DefaultTheme/widget/search/field: Removed.
        * platform/efl/DefaultTheme/widget/slider: Removed.
        * platform/efl/DefaultTheme/widget/spinner: Removed.
        * platform/gamepad/efl: Removed.
        * platform/graphics/efl: Removed.
        * platform/graphics/surfaces/efl: Removed.
        * platform/network/efl: Removed.

2017-02-16  Simon Fraser  <simon.fraser@apple.com>

        Add WebUSB to features.json as a "Not Considering".

        * features.json:

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove old URL parser
        https://bugs.webkit.org/show_bug.cgi?id=168483

        Reviewed by Tim Horton.

        * platform/URL.cpp:
        (WebCore::isSchemeFirstChar):
        (WebCore::isSchemeChar):
        (WebCore::URL::URL):
        (WebCore::URL::setProtocol):
        (WebCore::URL::setHost):
        (WebCore::URL::removePort):
        (WebCore::URL::setPort):
        (WebCore::URL::setHostAndPort):
        (WebCore::URL::setUser):
        (WebCore::URL::setPass):
        (WebCore::URL::setFragmentIdentifier):
        (WebCore::URL::setQuery):
        (WebCore::URL::setPath):
        (WebCore::URL::serialize):
        (WebCore::isUserInfoChar): Deleted.
        (WebCore::isHostnameChar): Deleted.
        (WebCore::isIPv6Char): Deleted.
        (WebCore::isPathSegmentEndChar): Deleted.
        (WebCore::appendASCII): Deleted.
        (WebCore::findFirstOf): Deleted.
        (WebCore::checkEncodedString): Deleted.
        (WebCore::URL::init): Deleted.
        (WebCore::appendEscapingBadChars): Deleted.
        (WebCore::escapeAndAppendNonHierarchicalPart): Deleted.
        (WebCore::copyPathRemovingDots): Deleted.
        (WebCore::hasSlashDotOrDotDot): Deleted.
        (WebCore::URL::parse): Deleted.
        (WebCore::cannotBeABaseURL): Deleted.
        (WebCore::isDefaultPortForScheme): Deleted.
        (WebCore::hostPortIsEmptyButCredentialsArePresent): Deleted.
        (WebCore::isNonFileHierarchicalScheme): Deleted.
        (WebCore::isCanonicalHostnameLowercaseForScheme): Deleted.
        (WebCore::findHostnamesInMailToURL): Deleted.
        (WebCore::findHostnameInHierarchicalURL): Deleted.
        (WebCore::encodeHostnames): Deleted.
        (WebCore::encodeRelativeString): Deleted.
        (WebCore::substituteBackslashes): Deleted.
        * platform/URLParser.cpp:
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::setEnabled): Deleted.
        (WebCore::URLParser::enabled): Deleted.
        * platform/URLParser.h:
        * platform/cf/URLCF.cpp:
        (WebCore::URL::URL):
        * platform/mac/URLMac.mm:
        (WebCore::URL::URL):

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer):

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Remove EFL from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=168477

        Reviewed by Brian Burg.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canSetValueAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored):
        * crypto/CryptoKey.cpp:
        * crypto/keys/CryptoKeyRSA.h:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * editing/FrameSelection.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::requiresAcceleratedCompositingForWebGL):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::port):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performURLImport):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/LocalizedStrings.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/NotImplemented.h:
        * platform/Pasteboard.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/PlatformWheelEvent.h:
        * platform/Widget.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getEvasObject): Deleted.
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::createForCurrentGLContext):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/network/NetworkStateNotifier.h:
        * platform/posix/FileSystemPOSIX.cpp:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTExtensions.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/XSLTUnicodeSort.cpp:

2017-02-16  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add forced line layout info to coverage print.
        https://bugs.webkit.org/show_bug.cgi?id=168470

        Reviewed by Simon Fraser.

        This is about potential vs. actual coverage:

        Simple line layout potential coverage: 65.05%
        Simple line layout actual coverage: 46.60%
        Forced line layout blocks: 4 content length: 57(18.45%)

        Not testable.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::printSimpleLineLayoutCoverage):

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Rename DataTransfer functions to indicate whether they are for dragging or dropping
        https://bugs.webkit.org/show_bug.cgi?id=168478

        Reviewed by Tim Horton.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForDrag):
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForDragAndDrop): Deleted.
        * dom/DataTransfer.h:
        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::tryDHTMLDrag):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer):

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Rename EventHandler::freeDataTransfer to invalidateDataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=168472

        Reviewed by Tim Horton.

        The code doesn't necessarily free the data transfer object, so rename the member function
        to reflect that. Also, get rid of a goto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::invalidateDataTransfer):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::freeDataTransfer): Deleted.
        * page/EventHandler.h:

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Special URLs without a host are invalid
        https://bugs.webkit.org/show_bug.cgi?id=168461

        Reviewed by Tim Horton.

        http://? should be invalid.  This matches Chrome and the spec and the intent of my implementation
        of URLParser which already fails with urls like http:// and this was just an oversight.
        Covered by newly passing web platform tests.  Updated API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2017-02-16  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add support for pagination.
        https://bugs.webkit.org/show_bug.cgi?id=168355
        <rdar://problem/30119769>

        Reviewed by David Hyatt.

        This patch adds basic support for paginated content including widows and orphans.

        This is based on the normal line layout pagination logic. However there are 2 major
        advantages here (and they allow us to have a much simpler logic):
        1. all the lines are positioned by the time we start paginating them and
        2. lines always have uniform heights. 

        This is not enabled yet.

        * rendering/RenderBlockFlow.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::computeLineTopAndBottomWithOverflow):
        (WebCore::SimpleLineLayout::computeLineBreakIndex):
        (WebCore::SimpleLineLayout::setPageBreakForLine):
        (WebCore::SimpleLineLayout::computeOffsetAfterLineBreak):
        (WebCore::SimpleLineLayout::updateMinimumPageHeight):
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Layout::isPaginated):
        (WebCore::SimpleLineLayout::Layout::struts):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowHeight):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::computeBaselinePosition):

2017-02-11  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.

        Added new tests in JSTests and LayoutTests.
        
        The WebCore changes involve:
        
        - Refactoring around new header discipline.
        
        - Adding crazy GC APIs to window.internals to enable us to test the GC's runloop discipline.

        * ForwardingHeaders/heap/GCFinalizationCallback.h: Added.
        * ForwardingHeaders/heap/IncrementalSweeper.h: Added.
        * ForwardingHeaders/heap/MachineStackMarker.h: Added.
        * ForwardingHeaders/heap/RunningScope.h: Added.
        * bindings/js/CommonVM.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        (WebCore::Internals::isReadableStreamDisturbed):
        (WebCore::Internals::isGCRunning):
        (WebCore::Internals::addGCFinalizationCallback):
        (WebCore::Internals::stopSweeping):
        (WebCore::Internals::startSweeping):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-02-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] remove toJSValueFromJsonWebKey from custom SubtleCrypto binding codes
        https://bugs.webkit.org/show_bug.cgi?id=167026

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise):
        (WebCore::toJSValueFromJsonWebKey): Deleted.
        * crypto/JsonWebKey.h:
        * crypto/JsonWebKey.idl:
        * crypto/RsaOtherPrimesInfo.idl:
        Change std::optional<String> to String in order to use toJS<IDLDictionary<JsonWebKey>>.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::importJwk):
        Only check if key_ops contains all of the specified usages when key_ops field of jwk is present,
        as per the specification: https://www.w3.org/TR/WebCryptoAPI/#aes-cbc-operations
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::importJwk):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        Accommodate the change from std::optional<String> to String.
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create):
        Add a null check for p.

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

        Execute pending scripts asynchronously after stylesheet loads complete
        https://bugs.webkit.org/show_bug.cgi?id=168367
        rdar://problem/30561379

        Reviewed by Andreas Kling.

        The current synchronous execution is fragile and creates various problems.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::checkLoaded):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::removeChildren):

            Remove various places where we would trigger delayed synchronous execution.

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

            Trigger scroll to anchor at the end of style resolution instead of when style sheet load completes.

        (WebCore::Document::didRemoveAllPendingStylesheet):

            Call asynchronous script execution function.

        * dom/Document.h:
        (WebCore::Document::setNeedsNotifyRemoveAllPendingStylesheet): Deleted.
        (WebCore::Document::notifyRemovePendingSheetIfNeeded): Deleted.
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheetsSoon):
        (WebCore::ScriptableDocumentParser::scriptsWaitingForStylesheetsExecutionTimerFired):

            Add a timer for executing pending scripts.

        (WebCore::ScriptableDocumentParser::detach):
        * dom/ScriptableDocumentParser.h:
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheets):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLLinkElement.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::detach):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):

            Stay in loading state if we have a pending script. This matches existing behavior.

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

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Set the DHTML drag image in the DHTML type check
        https://bugs.webkit.org/show_bug.cgi?id=168451

        Reviewed by Wenson Hsieh.

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

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Begin removing EFL code from WebCore.

        Rubber-stamped by Alex Christensen.

        * PlatformEfl.cmake: Removed.
        * editing/efl/EditorEfl.cpp: Removed.
        * page/efl/DragControllerEfl.cpp: Removed.
        * page/efl/EventHandlerEfl.cpp: Removed.
        * platform/audio/efl/AudioBusEfl.cpp: Removed.
        * platform/efl/CursorEfl.cpp: Removed.
        * platform/efl/DefaultTheme/CMakeLists.txt: Removed.
        * platform/efl/DefaultTheme/default.edc: Removed.
        * platform/efl/DefaultTheme/widget/button/button.edc: Removed.
        * platform/efl/DefaultTheme/widget/button/img_button_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/button/img_button_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/button/img_button_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/button/img_button_press.png: Removed.
        * platform/efl/DefaultTheme/widget/check/check.edc: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_bg_disabled.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_bg_enabled.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_off.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_off_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_off_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_on.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_on_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/check/img_check_on_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo.edc: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_focus_button.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_focus_button_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_focus_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_hover_button.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_hover_button_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_hover_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_normal_button.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_normal_button_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_normal_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_press.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_press_button.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_press_button_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/combo_press_transparent.png: Removed.
        * platform/efl/DefaultTheme/widget/combo/icon.png: Removed.
        * platform/efl/DefaultTheme/widget/entry/entry.edc: Removed.
        * platform/efl/DefaultTheme/widget/entry/img_focused.png: Removed.
        * platform/efl/DefaultTheme/widget/entry/img_hovered.png: Removed.
        * platform/efl/DefaultTheme/widget/entry/img_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/progressbar/bt_base.png: Removed.
        * platform/efl/DefaultTheme/widget/progressbar/progressbar.edc: Removed.
        * platform/efl/DefaultTheme/widget/progressbar/shelf_inset.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_bg_disabled.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_bg_enabled.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/radio/radio.edc: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar.edc: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_bg_horizontal.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_bg_vertical.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_thumb_horizontal.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_thumb_vertical.png: Removed.
        * platform/efl/DefaultTheme/widget/search/cancel/cancel_normal_button.png: Removed.
        * platform/efl/DefaultTheme/widget/search/cancel/cancel_normal_button2.png: Removed.
        * platform/efl/DefaultTheme/widget/search/cancel/search_cancel.edc: Removed.
        * platform/efl/DefaultTheme/widget/search/decoration/decoration_normal_button.png: Removed.
        * platform/efl/DefaultTheme/widget/search/decoration/search_decoration.edc: Removed.
        * platform/efl/DefaultTheme/widget/search/field/field_focused.png: Removed.
        * platform/efl/DefaultTheme/widget/search/field/field_hovered.png: Removed.
        * platform/efl/DefaultTheme/widget/search/field/field_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/search/field/search_field.edc: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider.edc: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_fill_h.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_fill_v.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_h.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_h.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_press_h.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_press_v.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_v.png: Removed.
        * platform/efl/DefaultTheme/widget/slider/slider_v.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_bg.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_default.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_pressed.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_default.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_pressed.png: Removed.
        * platform/efl/DefaultTheme/widget/spinner/spinner.edc: Removed.
        * platform/efl/DragDataEfl.cpp: Removed.
        * platform/efl/DragImageEfl.cpp: Removed.
        * platform/efl/EflInspectorUtilities.cpp: Removed.
        * platform/efl/EflInspectorUtilities.h: Removed.
        * platform/efl/EflKeyboardUtilities.cpp: Removed.
        * platform/efl/EflKeyboardUtilities.h: Removed.
        * platform/efl/EflScreenUtilities.cpp: Removed.
        * platform/efl/EflScreenUtilities.h: Removed.
        * platform/efl/ErrorsEfl.cpp: Removed.
        * platform/efl/ErrorsEfl.h: Removed.
        * platform/efl/EventLoopEfl.cpp: Removed.
        * platform/efl/FileSystemEfl.cpp: Removed.
        * platform/efl/LocalizedStringsEfl.cpp: Removed.
        * platform/efl/MIMETypeRegistryEfl.cpp: Removed.
        * platform/efl/MainThreadSharedTimerEfl.cpp: Removed.
        * platform/efl/PasteboardEfl.cpp: Removed.
        * platform/efl/PlatformKeyboardEventEfl.cpp: Removed.
        * platform/efl/PlatformMouseEventEfl.cpp: Removed.
        * platform/efl/PlatformScreenEfl.cpp: Removed.
        * platform/efl/PlatformSpeechSynthesisProviderEfl.cpp: Removed.
        * platform/efl/PlatformSpeechSynthesisProviderEfl.h: Removed.
        * platform/efl/PlatformSpeechSynthesizerEfl.cpp: Removed.
        * platform/efl/PlatformWheelEventEfl.cpp: Removed.
        * platform/efl/ScrollbarThemeEfl.cpp: Removed.
        * platform/efl/ScrollbarThemeEfl.h: Removed.
        * platform/efl/SoundEfl.cpp: Removed.
        * platform/efl/TemporaryLinkStubs.cpp: Removed.
        * platform/efl/UserAgentEfl.cpp: Removed.
        * platform/efl/WidgetEfl.cpp: Removed.
        * platform/gamepad/efl/GamepadsEfl.cpp: Removed.
        * platform/graphics/efl/CairoUtilitiesEfl.cpp: Removed.
        * platform/graphics/efl/CairoUtilitiesEfl.h: Removed.
        * platform/graphics/efl/EvasGLContext.cpp: Removed.
        * platform/graphics/efl/EvasGLContext.h: Removed.
        * platform/graphics/efl/EvasGLSurface.cpp: Removed.
        * platform/graphics/efl/EvasGLSurface.h: Removed.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Removed.
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp: Removed.
        * platform/graphics/efl/GraphicsContext3DPrivate.h: Removed.
        * platform/graphics/efl/IconEfl.cpp: Removed.
        * platform/graphics/efl/ImageBufferEfl.cpp: Removed.
        * platform/graphics/efl/ImageEfl.cpp: Removed.
        * platform/graphics/efl/IntPointEfl.cpp: Removed.
        * platform/graphics/efl/IntRectEfl.cpp: Removed.
        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp: Removed.
        * platform/network/efl/NetworkStateNotifierEfl.cpp: Removed.
        * rendering/RenderThemeEfl.cpp: Removed.
        * rendering/RenderThemeEfl.h: Removed.

2017-02-16  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Support Resource Timing in Workers
        https://bugs.webkit.org/show_bug.cgi?id=168086
        <rdar://problem/30430117>

        Reviewed by Alex Christensen.

        Worker's load resources through the Document that loaded them. However,
        their PerformanceResourceTiming entries should be added to the Performance
        object inside the Worker context, not the Document's context.

        This change adds an InitiatorContext to ResourceLoadOptions so that loaders
        can determine if the load was initiated by the Document or a Worker. This
        allows loaders to then know if the ResourceTiming data they collect should
        be added to the Document's Performance object or forwarded on to the Worker's.

        This adds a new ThreadableLoaderClient method intended only for the purpose
        of adding the ResourceTiming information to the Worker's Performance object.
        Unlike other ThreadableLoaderClient methods that are bridged and forwarded
        on to a client inside the worker (e.g. XMLHttpRequest or FetchLoader) this
        method never needs to be handled by clients and can be uniformly handled by
        the WorkerThreadableLoader itself.

        We also add a new ResourceTiming object that encapsulates all of the data
        ultimately needed for a PerformanceResourceTimingEntry object. This allows
        for all of the information to be gathered while loading on the Document
        before serializing across to the Worker. That includes the Timing-Allow-Origin
        check which uses the SecurityOrigin of the Worker.

        This also modernizes and addresses issues in the Resource Timing implementation.
        Better handling cases like loading from the Cache, Synchronous Loads, and
        improving initiatorType information.

        Tests: imported/w3c/web-platform-tests/resource-timing/rt-cors.html
               imported/w3c/web-platform-tests/resource-timing/rt-cors.worker.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-css.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-element.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-fetch.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-media.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-other.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-script-module.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-xmlhttprequest.html
               imported/w3c/web-platform-tests/resource-timing/rt-initiatorType.worker.html
               imported/w3c/web-platform-tests/resource-timing/rt-performance-extensions.html
               imported/w3c/web-platform-tests/resource-timing/rt-performance-extensions.worker.html
               imported/w3c/web-platform-tests/resource-timing/rt-resource-errors.html
               imported/w3c/web-platform-tests/resource-timing/rt-resource-ignored.html
               imported/w3c/web-platform-tests/resource-timing/rt-resources-per-frame.html
               imported/w3c/web-platform-tests/resource-timing/rt-resources-per-worker.html
               imported/w3c/web-platform-tests/resource-timing/rt-serialization.html
               imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-frames.html
               imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-workers.html
               performance-api/resource-timing-apis.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        New files.

        * platform/network/NetworkLoadTiming.h:
        (WebCore::NetworkLoadTiming::reset): Deleted.
        We no longer need to reset.

        * loader/ResourceTiming.cpp: Added.
        (WebCore::passesTimingAllowCheck):
        (WebCore::ResourceTiming::fromCache):
        (WebCore::ResourceTiming::fromLoad):
        (WebCore::ResourceTiming::fromSynchronousLoad):
        (WebCore::ResourceTiming::ResourceTiming):
        (WebCore::ResourceTiming::isolatedCopy):
        * loader/ResourceTiming.h: Added.
        (WebCore::ResourceTiming::url):
        (WebCore::ResourceTiming::initiator):
        (WebCore::ResourceTiming::loadTiming):
        (WebCore::ResourceTiming::networkLoadTiming):
        (WebCore::ResourceTiming::allowTimingDetails):
        (WebCore::ResourceTiming::overrideInitiatorName):
        (WebCore::ResourceTiming::ResourceTiming):
        Class that encapsulates all of the data needed for a PerformanceResourceTiming entry.
        There are three static constructors indicating the different ways this object can
        be constructed and the different data available at the time of construction.

        * loader/ResourceLoaderOptions.h:
        Add the new InitiatorContext, default to Document.

        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFinishTiming):
        New client method only used by WorkerThreadableLoader.

        * loader/WorkerThreadableLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishTiming):
        All loads initiated in a WorkerThreadableLoader get identified as InitiatorContext::Worker.
        Add timing information to the Performance object when received. No need to inform clients.

        * loader/DocumentThreadableLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::finishedTimingForWorkerLoad):
        (WebCore::DocumentThreadableLoader::loadRequest):
        Provide APIs to pass timing data on to a WorkerThreadableLoader.
        Create ResourceTiming data for synchronous loads.

        * loader/LoadTiming.h:
        * loader/LoadTiming.cpp:
        (WebCore::LoadTiming::isolatedCopy):
        Add isolatedCopy to allow this data to be passed across to a Worker.

        * loader/ResourceTimingInformation.h:
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::shouldAddResourceTiming):
        (WebCore::ResourceTimingInformation::addResourceTiming):
        (WebCore::ResourceTimingInformation::storeResourceTimingInitiatorInformation):
        Refactor to remove unused / unnecessary bits. Extract out some helpful code.
        Changed this to match when Blink decides when to add or ignore entries, however
        this may change over time.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::notifyDone):
        (WebCore::SubresourceLoader::reportResourceTiming):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::finishedTimingForWorkerLoad):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::finishedTimingForWorkerLoad):
        Plumbing to report timing information to Worker if this resource was loaded for a Worker.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::initiatorName):
        Store the initiator name on the CachedResource like other data added to the original
        CachedResourceRequest. This is a bit of a hack but follows an existing pattern, and
        cleans up other hacks that worked around this later on.

        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        Simply the creation of a ResourceTiming object for cache hits.
        Report timing information to Worker if this resource was loaded for a Worker.

        (WebCore::CachedResourceLoader::loadDone):
        Eliminate this redundant point attempting to add a ResourceTiming entry.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::initiatorName):
        Update to match the spec. The fallback is "other".

        * page/Performance.h:
        * page/Performance.cpp:
        (WebCore::Performance::setResourceTimingBufferSize):
        (WebCore::Performance::addResourceTiming):
        Update to support PerformanceObservers.
        Update to match spec (event should bubble).

        * page/PerformanceResourceTiming.h:
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::create):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::fetchStart):
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        (WebCore::PerformanceResourceTiming::responseStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
        Construct with a ResourceTiming object containing all the data we need for the entry.
        Update to match spec for what is required, should fallback, should be zero, etc.

        (WebCore::passesTimingAllowCheck): Deleted.
        Extracted this to ResourceTiming creation time in the loading context,
        since this can't be determined on the Worker context without also having
        all of the header information from each resource response.

        * page/PerformanceResourceTiming.idl:
        Expose to Workers!

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

        [JSC] Drop PassRefPtr in inspector/
        https://bugs.webkit.org/show_bug.cgi?id=168420

        Reviewed by Alex Christensen.

        Use Ref<Inspector::ScriptArguments> and Ref<ScriptCallStack> as much as possible.
        It drops some unnecessary null checks.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStackCaller):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::WebInjectedScriptManager):
        * inspector/WebInjectedScriptManager.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        We dispatch appropriate addMessage function according to whether
        `timer.stackTrace()` is nullptr.

        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        (WebCore::PageConsoleClient::count):
        (WebCore::PageConsoleClient::timeEnd):
        (WebCore::PageConsoleClient::timeStamp):
        * page/PageConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::messageWithTypeAndLevel):
        (WebCore::WorkerConsoleClient::count):
        (WebCore::WorkerConsoleClient::timeEnd):
        (WebCore::WorkerConsoleClient::timeStamp):
        * workers/WorkerConsoleClient.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addMessage):

2017-02-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Make form validation accessible on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168400

        Reviewed by Chris Dumez.

        Hide the popover content of form validation from accessibility (since its not interactable)
        and instead announce the message.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::show):

2017-02-16  Simon Fraser  <simon.fraser@apple.com>

        Clean up use of some CALayer-related SPI
        https://bugs.webkit.org/show_bug.cgi?id=168401

        Reviewed by Tim Horton.

        Use -setDrawsAsynchronously: rather than the old -setAcceleratesDrawing: SPI.

        Remove CATiledLayer-related stuff from QuartzCoreSPI.h, since we don't use it any more.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::acceleratesDrawing):
        (PlatformCALayerCocoa::setAcceleratesDrawing):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer setDrawsAsynchronously:]): This override passes the state
        onto the TileController.
        (-[WebTiledBackingLayer setAcceleratesDrawing:]): Deleted.
        * platform/ios/LegacyTileGridTile.mm:
        (WebCore::LegacyTileGridTile::LegacyTileGridTile):
        * platform/spi/cocoa/QuartzCoreSPI.h:

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

        Web Inspector: allow import() inside the inspector
        https://bugs.webkit.org/show_bug.cgi?id=167457

        Reviewed by Ryosuke Niwa.

        When evaluating `import("...")`, we need the caller's context to resolve
        the module specifier correctly. For example, if `import("./cocoa.js")` is
        evaluated in the script "drinks/hot.js", this module name is resolved to
        "drinks/cocoa.js". If the same import operator is evaluated in the script
        "menu/all.js", the module specifier becomes "menu/cocoa.js".

        Previously we reject the import operator if the caller does not have such
        a context. These context is SourceOrigin and its ScriptFetcher. While they
        are offered in the script tag and other code evaluations, the inspector
        console does not offer that. These class are offered in the WebCore side
        and we should not touch these classes in the JSC's inspector code.

        Now we relax the above restriction. If the above caller information is not
        offered, we fallback to the default one. In the web page, we use the page's
        URL as the caller's source origin. This allows us to evaluate the import
        operator in the inspector console.

        And as of r167698, the console recognizes `await import("...")` form. We use
        this to test this `import()` in the console functionality.

        Test: inspector/controller/runtime-controller-import.html

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::importModule):

2017-02-16  Miguel Gomez  <magomez@igalia.com>

        [GTK] scroll with transparent background not repainted after scrollY >= 32768
        https://bugs.webkit.org/show_bug.cgi?id=154283

        Reviewed by Carlos Garcia Campos.

        Due to a limitation of the pixman backend, which uses 16 bits to hold signed integers, cairo is
        not able to draw anything when using transformation matrices with values bigger than 32768. When
        drawing patterns into large pages, the matrices values can overflow those 16 bits, so cairo doesn't
        draw anything in, which causes the reported transparent backgrounds.

        The patch modifies the transformation matrices both from the current context and the pattern we
        are painting, to avoid them to hold values that cannot stored in 16 bits.

        There's still the possibility that this happens, but it would require using a pattern with a size
        bigger than 32768.

        Based on a previous patch by Gwang Yoon Hwang  <yoon@igalia.com>.

        Test: fast/backgrounds/background-repeat-long-scroll.html

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):

2017-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Images are never read from the clipboard
        https://bugs.webkit.org/show_bug.cgi?id=168419

        Reviewed by Sergio Villar Senin.

        We write images in the clipboard, but we don't read them.

        Fixes: editing/pasteboard/paste-image-using-image-data.html

        * editing/Editor.cpp:
        (WebCore::Editor::createFragmentForImageAndURL): Moved from EditorMac.mm since it's cross-platform code.
        * editing/Editor.h:
        * editing/gtk/EditorGtk.cpp:
        (WebCore::createFragmentFromPasteboardData): Check if there's an image in the selection, and use
        Editor::createFragmentForImageAndURL in that case.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::createFragmentForImageAndURL): Deleted.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents): Check also if there's an image in the clipboard.

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

        REGRESSION (r212311): NULL-dereference in HTMLMediaElement::prepareToPlay()
        https://bugs.webkit.org/show_bug.cgi?id=168404
        <rdar://problem/30547188>

        Reviewed by Brian Weinstein.

        Prior to r212311, m_player was always guaranteed to be initialized when calling
        prepareToPlay(). r212311 began calling prepareToPlay() on a subsequent run-loop iteration
        after creating m_player. So now check whether m_player is NULL before calling methods on it.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareToPlay):

2017-02-15  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] delete CaptureDeviceInfo struct
        https://bugs.webkit.org/show_bug.cgi?id=168395

        The CaptureDeviceInfo struct and CaptureDevice class were almost identical, so
        add an "enabled" field to the later, delete the former, and switch all uses of
        CaptureDeviceInfo to CaptureDevice.

        Do some minor drive-by cleanup of AVCaptureDeviceManager::refreshCaptureDevices
        and CaptureDeviceManager::captureDeviceFromDeviceID.
        
        Reviewed by Sam Weinig.

        No new tests, no behavior change.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): SourceKind -> DeviceType
        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::CaptureDevice):
        (WebCore::CaptureDevice::type): Renamed from kind.
        (WebCore::CaptureDevice::setType):
        (WebCore::CaptureDevice::enabled): Added.
        (WebCore::CaptureDevice::setEnabled):
        (WebCore::CaptureDevice::kind): Deleted.
        (WebCore::CaptureDevice::setKind): Deleted.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::getSourcesInfo):
        (CaptureDeviceManager::captureDeviceFromDeviceID): Don't call sourceWithUID.
        (CaptureDeviceManager::bestSourcesForTypeAndConstraints):
        (CaptureDeviceManager::sourceWithUID):
        * platform/mediastream/CaptureDeviceManager.h:
        (WebCore::CaptureDeviceManager::refreshCaptureDevices):
        (WebCore::CaptureDeviceManager::refreshCaptureDeviceList): Deleted.

        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::captureDevices):
        (WebCore::deviceIsAvailable):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::createMediaSourceForCaptureDeviceWithConstraints):
        (WebCore::AVCaptureDeviceManager::deviceConnected):
        (WebCore::AVCaptureDeviceManager::deviceDisconnected):
        (WebCore::AVCaptureDeviceManager::captureDeviceList): Deleted.
        (WebCore::shouldConsiderDeviceInDeviceList): Deleted.
        (WebCore::AVCaptureDeviceManager::refreshCaptureDeviceList): Deleted.
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::audioDeviceInfo):
        (WebCore::MockRealtimeMediaSource::videoDeviceInfo):

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

        [WebIDL] Remove custom conversion from FontFace code by using a Variant
        https://bugs.webkit.org/show_bug.cgi?id=168384

        Reviewed by Alex Christensen.

        Match the font face spec and use a union rather than any in the FontFace constructor.

        Test: Added additional cases to fast/text/font-face-javascript.html.

        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * css/FontFace.h:
        * css/FontFace.idl:

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

        Disabled Media Sources should render black/silence
        https://bugs.webkit.org/show_bug.cgi?id=168281

        Reviewed by Eric Carlson.

        Test: webrtc/video-disabled-black.html

        Pass the enabled flag setting down from the MediaStreamTrackPrivate to its underlying
        source, including RealtimeMediaSource and RealtimeOutgoingAudio/VideoSource. When either
        enabled is cleared or muted is set, generate empty (black or silent) media, as opposed to
        pausing media or (worse) continuing to send generated media.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setEnabled):
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setEnabled):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::enabled):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::render):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingAudioSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingVideoSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::generateFrame):

2017-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Editing history scripts should not add the contenteditable attribute or override key events
        https://bugs.webkit.org/show_bug.cgi?id=168389
        <rdar://problem/30529945>

        Reviewed by Dan Bernstein.

        Clients that hook into editing history tracking should handle setting the contenteditable attribute on the body
        rather than have the script add it to the body. Additionally, this script should NOT be overriding any keydown
        events. These were initially added for compatibility with a test harness early on, and should have been removed
        earlier.

        * Scripts/DumpEditingHistory.js:

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

        Pass "RequiresCustomURLLoading" in AVURLAsset options dictionary
        https://bugs.webkit.org/show_bug.cgi?id=168381

        Reviewed by Eric Carlson.

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

2017-02-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2017-02-15  Anders Carlsson  <andersca@apple.com>

        Modernize DragClient::startDrag somewhat
        https://bugs.webkit.org/show_bug.cgi?id=168379

        Reviewed by Tim Horton.

        Change DragClient::startDrag to take a DragImage instead of a DragImageRef, and to pass along the source action
        instead of whether it's a link or not.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:

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

        Expose Symbol.toPrimitive / valueOf on Location instances
        https://bugs.webkit.org/show_bug.cgi?id=168295

        Reviewed by Geoffrey Garen, Keith Miller and Mark Lam.

        Expose Symbol.toPrimitive / valueOf on Location instances as per:
        - https://html.spec.whatwg.org/#the-location-interface

        Firefox and Chrome already comply with the specification.

        Tests: fast/dom/location-valueOf-after-object-prototype-update.html
               fast/dom/location-valueOf-after-object-prototype-update2.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html
               imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-valueof.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-02-15  Aakash Jain  <aakash_jain@apple.com>

        Remove WebIOSEvent interface
        https://bugs.webkit.org/show_bug.cgi?id=168368

        Reviewed by Tim Horton.

        * platform/ios/WebEvent.h: Removed WebIOSEvent.

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

        [iOS] Form Validation Bubble should be sensitive to Dynamic Type
        https://bugs.webkit.org/show_bug.cgi?id=168291
        <rdar://problem/30508593>

        Reviewed by Tim Horton.

        Update ValidationBubble implementation on iOS to stop obeying the
        minimum font size setting, given that this setting is not exposed
        on iOS. Instead, we now rely on
        [UIFont preferredFontForTextStyle:UIFontTextStyleCallout], which
        will give us a font whose size obeys Dynamic Type [1] setting on iOS.

        [1] https://developer.apple.com/ios/human-interface-guidelines/visual-design/typography/

        No new tests, no easily testable.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::ValidationBubble):

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

        [JSC] Drop PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=168320

        Reviewed by Saam Barati.

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        Use Ref and pass it to SourceCode.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::frameNavigated):
        Pass reference.

2017-02-15  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][MSE][EME] Handle protection event also at decryptor level
        https://bugs.webkit.org/show_bug.cgi?id=168316

        Reviewed by Žan Doberšek.

        So far in MSE pipeline we were handling the encryption events
        only when they arrived at the demuxer but this won't work in any
        kind of key renegotiation as the event will never arrive. Now we
        connect to the element messages, check for the drm id and send it
        to the private player for processing.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::appendPipelineElementMessageCallback):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleElementMessage):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2017-02-15  Zan Dobersek  <zdobersek@igalia.com>

        [EME] MediaKeys::setServerCertificate() must resolve with 'false' when certificates aren't supported
        https://bugs.webkit.org/show_bug.cgi?id=168362

        Reviewed by Xabier Rodriguez-Calvar.

        In MediaKeys::setServerCertificate(), when the CDM implementation
        doesn't support server certificates, it should resolve the promise
        with the 'false' value, as mandated by the specification, and not
        reject it.

        A test case in mock-MediaKeys-setServerCertificate.html is updated.

        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setServerCertificate):

2017-02-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r206014): HTTPHeaderMap does not consistently use comma without space to separate values of header fields
        https://bugs.webkit.org/show_bug.cgi?id=168115

        Reviewed by Darin Adler.

        In r206014 HTTPHeaderMap::add() was updated to combine common headers with ',' instead of ", " to match the
        fetch specification, but the uncommon headers are still combined with ", ".

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::add):

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

        An assertion failure inside removeChildren
        https://bugs.webkit.org/show_bug.cgi?id=168069

        Reviewed by Brent Fulgham.

        The bug was caused by notifyRemovePendingSheet executing scripts synchronously where it shouldn't.

        Removed the call to notifyRemovePendingSheetIfNeeded in notifyChildNodeRemoved. Instead, invoke it
        in its call sites when they're safe.

        Test: http/tests/security/move-iframe-within-focus-handler-inside-removal.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::replaceAllChildren):
        (WebCore::ContainerNode::removeChildren):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeRemoved):

2017-02-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Several tests are timing out after r212349
        https://bugs.webkit.org/show_bug.cgi?id=168359

        Reviewed by Žan Doberšek.

        This is because they are failing the cross origin check. Those tests are not using WebKitWebSrc, but
        GstFileSrc. I didn't consider the case of source not being a WebKitWebSrc.

        Fixes several timeout instroduced in r212349.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::hasSingleSecurityOrigin): Split the source check in two. First check if
        it's nullptr, and return false. Then check if it's a WebKitWebSrc and return true if it isn't.

2017-02-14  Brent Fulgham  <bfulgham@apple.com>

        Revalidate URL after events that could trigger navigations
        https://bugs.webkit.org/show_bug.cgi?id=168071
        <rdar://problem/30450379>

        Reviewed by Ryosuke Niwa.

        When arbitary javascript runs during a load, we should revalidate
        the URLs involved to make sure they are still valid.

        Tests: http/tests/plugins/navigation-during-load-embed.html
               http/tests/plugins/navigation-during-load.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): Confirm we are still allowed to
        load the URL after executing JS callbacks.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Split existing function into
        existing protected method, and a new public method that checks a passed URL
        for validity.
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::isURLAllowed):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): Confirm we are still allowed to
        load the URL after executing JS callbacks.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame): Ditto.

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Implement MediaPlayerPrivate::hasSingleSecurityOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=168322

        Reviewed by Žan Doberšek.

        It currently returns true unconditionally. Add resolved-location property to WebKitWebSourceGStreamer to track
        the resolved url returned by the server and use that from MediaPlayerPrivate to check if there was a cross
        origin redirection.

        Fixes: http/tests/security/canvas-remote-read-remote-video-redirect.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::hasSingleSecurityOrigin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcFinalize):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStart):
        (webKitWebSrcQueryWithParent):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (StreamingClient::handleResponseReceived):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r211967.

        Caused rendering issues in HiDPI

        Reverted changeset:

        "[GTK] scroll with transparent background not repainted after
        scrollY >= 32768"
        https://bugs.webkit.org/show_bug.cgi?id=154283
        http://trac.webkit.org/changeset/211967

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Update cookie manager API to properly work with ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=168230

        Reviewed by Michael Catanzaro.

        Add implementation for deleteAllCookiesModifiedSince. Note that this only works when the timespan is 0, we need
        new libsoup API to support removing recently modified cookies.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteAllCookiesModifiedSince):

2017-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        [WebIDL] Improve serializer = { inherit }
        https://bugs.webkit.org/show_bug.cgi?id=168293

        Reviewed by Youenn Fablet.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        Expose a serialize() method on the interface.

        (GenerateSerializerFunction):
        (GenerateSerializerAttributesForInterface): Deleted.
        Subclasses that have `serializer = { inherit }` can use
        their parent's serialize() method to get the initial object.
        We can now collapse everything back into a single function
        because we only generate code for our own attributes.

        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::serialize):
        (WebCore::jsTestNodePrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::serialize):
        (WebCore::jsTestObjPrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::serialize):
        (WebCore::jsTestSerializationPrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInherit::serialize):
        (WebCore::jsTestSerializationInheritPrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestSerializationInherit.h:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinal::serialize):
        (WebCore::jsTestSerializationInheritFinalPrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h:
        Updated results.

2017-02-14  Aakash Jain  <aakash_jain@apple.com>

        Move methods from WebCoreThread.h to WebCoreThreadInternal.h
        https://bugs.webkit.org/show_bug.cgi?id=168326

        Reviewed by Alexey Proskuryakov.

        * platform/ios/wak/WebCoreThread.h: Move methods WebThreadRunLoop and WebThreadCurrentContext to WebCoreThreadInternal.h
        * platform/ios/wak/WebCoreThreadInternal.h: Ditto.
        * platform/ios/wak/WebCoreThreadRun.cpp: Removed WebCoreThread.h as it is already included by WebCoreThreadInternal.h
        * platform/ios/wak/WKGraphics.mm: Included WebCoreThreadInternal.h, it subsequently includes WebCoreThread.h
        * inspector/InspectorTimelineAgent.cpp: Ditto.
        * page/mac/PageMac.mm: Ditto.
        * platform/cf/MainThreadSharedTimerCF.cpp: Ditto.
        * platform/cocoa/MemoryPressureHandlerCocoa.mm: Ditto.
        * platform/graphics/ca/cocoa/LayerFlushSchedulerMac.cpp: Ditto.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Ditto.
        * bindings/js/CommonVM.cpp: included WebCoreThreadInternal.h

2017-02-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support data interaction on links
        https://bugs.webkit.org/show_bug.cgi?id=168331
        <rdar://problem/30200837>

        Reviewed by Tim Horton.

        Adds support for data interaction on links at the WebCore layer, refactoring some drag-and-drop code on the Mac
        along the way. Also adds two new TestWebKitAPI unit tests in DataInteractionTests.mm: LinkToInput and
        BackgroundImageLinkToInput (see Tools/ChangeLog for more information).

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

        Introduce platformAdjustDragImageForDeviceScaleFactor, and special-case drag images for links to anchor at the
        bottom center.

        * platform/DragImage.cpp:
        (WebCore::platformAdjustDragImageForDeviceScaleFactor):

        Scale the drag image up by the device scale factor. In WebDragClient, we scale the image back down to the
        original size. It seems the reason we do this extra dance is because the image sizing heuristic in between
        assumes that the image dimensions are for a non-retina device, but this work should really not be necessary if
        we tweak the heuristic to account for deviceScaleFactor. We should address this in a separate patch.

        * platform/DragImage.h:
        * platform/graphics/Path.h:

2017-02-14  Basuke Suzuki  <Basuke.Suzuki@am.sony.com>

        [CURL] ResourceError created with error information should have default type Type::General
        https://bugs.webkit.org/show_bug.cgi?id=168345

        Reviewed by Alex Christensen.

        ResourceError has separate implementaion for each platform
        so that the interface should be same.
        On CURL port, the constructor with error information has
        different default value on `type` parameter. It is Type::Null but other implementaitons have Type::General.
        This causes some ResourceError is created inconsistent. 

        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):

2017-02-14  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Add support for libwebrtc negotiation needed event
        https://bugs.webkit.org/show_bug.cgi?id=168267

        Reviewed by Eric Carlson.

        Test: webrtc/negotiatedneeded-event-addStream.html

        Moving generic code (markAsNeedingNegotiation) from MediaEndpointPeerConnection to PeerConnectionBackend.
        This code handles the control of sending or not the negotiationneeded event.

        Updating mock to use markAsNeedingNegotiation when streams are changed.
        Updating libwebrtc backend to call markAsNeedingNegotiation when required by libwebrtc implementation.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::markAsNeedingNegotiation):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::isNegotiationNeeded):
        (WebCore::PeerConnectionBackend::clearNegotiationNeededState):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnRenegotiationNeeded):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::AddStream):
        (WebCore::MockLibWebRTCPeerConnection::RemoveStream):

2017-02-14  Brady Eidson  <beidson@apple.com>

        Unreviewed followup to r212330 to fix Debug builds

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Add call to relaxAdoptionRequirement().

2017-02-14  Matt Rajca  <mrajca@apple.com>

        Website policies: iframes should respect the autoplay policy of the top-level document
        https://bugs.webkit.org/show_bug.cgi?id=168333

        Reviewed by Alex Christensen.

        API tests were added.

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

2017-02-14  Dean Jackson  <dino@apple.com>

        Rename preferLowPowerWebGLRendering setting to forceWebGLUsesLowPower
        https://bugs.webkit.org/show_bug.cgi?id=168339
        <rdar://problem/30522092>

        Reviewed by Simon Fraser.

        Use a setting name that more clearly reflects what it is doing. It's not
        preferring to use the low-power GPU, it's forcing it.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * page/Settings.in:

2017-02-14  Brady Eidson  <beidson@apple.com>

        Speculative fix for: Crash in DocumentThreadableLoader::redirectReceived.
        <rdar://problem/29899473> and https://bugs.webkit.org/show_bug.cgi?id=168337

        Reviewed by Geoffrey Garen.

        No new tests (Unable to find a reproduction).

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):

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

        [WebRTC] Remove obsolete WebRTC stats API
        https://bugs.webkit.org/show_bug.cgi?id=167910

        Reviewed by Alex Christensen.

        No change of behavior as removed constructs are not functional.
        Removing RTCStatsResponse which no longer exists and made RTCStatsReport an empty container for now.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::getStats):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::create): Deleted.
        (WebCore::RTCStatsReport::RTCStatsReport): Deleted.
        (WebCore::RTCStatsReport::names): Deleted.
        (WebCore::RTCStatsReport::local): Deleted.
        (WebCore::RTCStatsReport::remote): Deleted.
        (WebCore::RTCStatsReport::addStatistic): Deleted.
        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::create):
        (WebCore::RTCStatsReport::timestamp): Deleted.
        (WebCore::RTCStatsReport::id): Deleted.
        (WebCore::RTCStatsReport::type): Deleted.
        (WebCore::RTCStatsReport::stat): Deleted.
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.cpp: Removed.
        * Modules/mediastream/RTCStatsResponse.h: Removed.
        * Modules/mediastream/RTCStatsResponse.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaEndpoint.h:
        (WebCore::MediaEndpoint::getStats):
        * platform/mediastream/RTCStatsRequest.h: Removed.
        * platform/mediastream/RTCStatsResponseBase.h: Removed.

2017-02-14  Karim H  <karim@karhm.com>

        Removed unused methods of WebCore::FileStream
        https://bugs.webkit.org/show_bug.cgi?id=168025

        Reviewed by Michael Catanzaro.

        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::openForWrite): Deleted.
        (WebCore::AsyncFileStream::write): Deleted.
        (WebCore::AsyncFileStream::truncate): Deleted.
        * fileapi/AsyncFileStream.h:
        * platform/FileStream.cpp:
        (WebCore::FileStream::openForWrite): Deleted.
        (WebCore::FileStream::write): Deleted.
        (WebCore::FileStream::truncate): Deleted.
        * platform/FileStream.h:

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

        HTML Form Validation bubble should take minimum font size setting into consideration
        https://bugs.webkit.org/show_bug.cgi?id=168271
        <rdar://problem/29869869>

        Reviewed by Simon Fraser.

        HTML Form Validation bubble should take minimum font size setting into consideration
        for better accessibility.

        Test: fast/forms/validation-message-minimum-font-size.html

        * platform/ValidationBubble.h:
        (WebCore::ValidationBubble::create):
        (WebCore::ValidationBubble::fontSize):
        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::ValidationBubble):
        * platform/mac/ValidationBubbleMac.mm:
        (WebCore::ValidationBubble::ValidationBubble):
        Update the ValidationBubble constructor to take in Settings. For now, there is a
        single setting that is the minimum font size and that is taken into account when
        setting the font size of the validation bubble text.

2017-02-14  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] add navigator.getUserMedia for compatibility with legacy content
        https://bugs.webkit.org/show_bug.cgi?id=168324
        <rdar://problem/30513125>

        Reviewed by Youenn Fablet.

        Tests: fast/mediastream/argument-types.html
               fast/mediastream/getusermedia.html
               fast/mediastream/webkitGetUserMedia-shadowing-then.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/NavigatorUserMedia.idl: Added.
        * Modules/mediastream/NavigatorUserMedia.js: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/Navigator.idl:

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

        Fallback to legacy type only when event is trusted
        https://bugs.webkit.org/show_bug.cgi?id=168301

        Reviewed by Ryosuke Niwa.

        Fallback to legacy type only when event is trusted as per a recent
        DOM specification change:
        - https://github.com/whatwg/dom/issues/404
        - https://github.com/whatwg/dom/pull/406

        No new tests, rebaselined existing test.

        * dom/EventTarget.cpp:
        (WebCore::legacyType):
        (WebCore::EventTarget::fireEventListeners):

2017-02-13  Dean Jackson  <dino@apple.com>

        Rename preferLowPowerToHighPerformance to powerPreference
        https://bugs.webkit.org/show_bug.cgi?id=168269
        <rdar://problem/30504444>

        Reviewed by Chris Dumez.

        Based on the discussion in https://github.com/KhronosGroup/WebGL/pull/2283.

        Change WebGLContextAttributes's preferLowPowerToHighPerformance boolean
        into a powerPreference enum taking three values. The implementation
        of the enum is in GraphicsContext3DAttributes.

        While the name and values have changed, there should be no change in
        behaviour caused by this patch.

        * html/canvas/WebGLContextAttributes.h: Use GraphicsContext3DAttributes
        enum GraphicsContext3DPowerPreference.
        * html/canvas/WebGLContextAttributes.idl: Rename and add the WebIDL enum.
        * html/canvas/WebGLRenderingContextBase.cpp: Use the new values.
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::registerWithWebGLStateTracker):
        * platform/WebGLStateTracker.cpp:
        * platform/WebGLStateTracker.h: Update the state tracker to use the new
        values.
        * platform/graphics/GraphicsContext3DAttributes.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Accept GraphicsContext3DPowerPreference as a parameter.
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2017-02-14  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Implement description getters for libwebrtc RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=168234

        Reviewed by Alex Christensen.

        Allows passing W3C webrtc tests.

        Implementing localDescription/remoteDescription using libwebrtc backend.
        current and pending description getters are made the same as local/remote getters for the moment.
        This should be fixed when upgrading to latest libwebrtc revision.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::toSessionDescriptionType):
        (WebCore::fromSessionDescriptionType):
        (WebCore::fromSessionDescription):
        (WebCore::LibWebRTCMediaEndpoint::localDescription):
        (WebCore::LibWebRTCMediaEndpoint::remoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::localDescription):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2017-02-14  Jeremy Jones  <jeremyj@apple.com>

        When playing inline after fullscreen, set a flag instead of adding attribute plays inline, and use in requiresFullscreenForVideoPlayback.
        https://bugs.webkit.org/show_bug.cgi?id=167815
        rdar://problem/27685077

        Reviewed by Jer Noble.

        Test: media/media-fullscreen-loop-inline.html

        When video is allowed to play inline after fullscreen. Looped video causes play state to update, which can send video back to fullscreen when
        allowsInline is false. This change will set a new flag when allowsInlineMediaPlaybackAfterFullscreen allows inline playback that can be tested
        in requiresFullscreenForVideoPlayback to prevent sending video back into fullscreen when video loops.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::isTemporarilyAllowingInlinePlaybackAfterFullscreen): Added.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):

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

        Video elements with MediaSource objects set by srcObject are not cleared when srcObject is set to null
        https://bugs.webkit.org/show_bug.cgi?id=168268

        Reviewed by Eric Carlson.

        Test: fast/mediastream/MediaStream-MediaElement-setObject-null.html

        Make the setSrcObject() operation compliant with the HTML spec. Since the specification defines
        srcObject in terms of either a MediaSource, MediaStream, or Blob object, add the variant typedef
        to HTMLMediaElement and move the definition out of the Modules/mediastream extension IDL and into
        HTMLMediaElement.idl. Then bring the "media elements load" and "resource selection" algorithms up
        to their most recent definitions in the HTML5 spec.

        Drive-by fix: Allow the (admittedly weird) single-element-union type in IDL.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/mediastream/HTMLMediaElementMediaStream.cpp: Removed.
        * Modules/mediastream/HTMLMediaElementMediaStream.h: Removed.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (parseUnionType):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLMediaElement.cpp:
        (WebCore::actionName):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::insertedInto):
        (WebCore::HTMLMediaElement::scheduleDelayedAction):
        (WebCore::HTMLMediaElement::scheduleNextSourceChild):
        (WebCore::HTMLMediaElement::pendingActionTimerFired):
        (WebCore::HTMLMediaElement::setSrcObject):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::mediaCanStart):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::loadInternal): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::srcObject):
        * html/HTMLMediaElement.idl:
        * platform/ContentType.h:

2017-02-14  Aakash Jain  <aakash_jain@apple.com>

        Remove unused WebThreadContextIsCurrent method from WebCoreThread.h
        https://bugs.webkit.org/show_bug.cgi?id=168254

        Reviewed by Dan Bernstein.

        * platform/ios/wak/WebCoreThread.h: Removed unused WebThreadContextIsCurrent.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadContextIsCurrent): Deleted.

2017-02-14  Alexey Proskuryakov  <ap@apple.com>

        WebCore shouldn't export SystemMemory.h
        https://bugs.webkit.org/show_bug.cgi?id=168285

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj:

2017-02-13  Filip Pizlo  <fpizlo@apple.com>

        worker.postMessage should throw a TypeError if a SharedArrayBuffer is in the transfer list
        https://bugs.webkit.org/show_bug.cgi?id=168277

        Reviewed by Mark Lam.

        Test: workers/sab/postMessage-transfer-type-error.html
        
        This is a simple spec compliance change. The title says it all.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):

2017-02-14  Zan Dobersek  <zdobersek@igalia.com>

        HTMLMediaElement: WebKitMediaKeys member name should be prefixed
        https://bugs.webkit.org/show_bug.cgi?id=168297

        Reviewed by Xabier Rodriguez-Calvar.

        Rename the LEGACY_ENCRYPTED_MEDIA m_mediaKeys variable to m_webkitMediaKeys
        so that it contains the legacy prefix, just like the API. This will make
        room for the MediaKeys member variable that will be implemented under
        the ENCRYPTED_MEDIA guards.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCachedKeyForKeyId):
        (WebCore::HTMLMediaElement::webkitSetMediaKeys):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::webkitKeys):

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make DragImageRef a RefPtr instead of a plain pointer
        https://bugs.webkit.org/show_bug.cgi?id=168296

        Reviewed by Sergio Villar Senin.

        Use RefPtr<cairo_surface_t> as DragImageRef for GTK+ port to avoid memory leaks.

        * platform/DragImage.h:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImageFilename):

2017-02-14  Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        [GStreamer][MSE] Some GStreamer log messages are generated with the 'default' category
        https://bugs.webkit.org/show_bug.cgi?id=168015

        Reviewed by Xabier Rodriguez-Calvar.

        The elements AppendPipeline, PlaybackPipeline, MediaSourceClientGstreamerMSE do not have
        a defined Gstreamer log category, then the webkitmse category has been added to them.
        WebKitMediaSourceGstreamer has its own category but was not declared at the beginning of
        the .cpp file.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp: Added webkitmse category.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        Added webkitmse category and gst header.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp: Added webkitmse category.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        Added webkitmediasrc category.

2017-02-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        CookieManager only works with the default session
        https://bugs.webkit.org/show_bug.cgi?id=168229

        Reviewed by Alex Christensen.

        Update cookie observer API to use a std::function instead of a function pointer and make it work with multiple
        sessions in the backends that support it.

        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::cookieChangeCallbackMap):
        (WebCore::notifyCookiesChanged):
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/mac/CookieStorageMac.mm:
        (-[WebCookieStorageObjCAdapter startListeningForCookieChangeNotificationsWithCallback:]):
        (-[WebCookieStorageObjCAdapter stopListeningForCookieChangeNotifications]):
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/soup/CookieStorageSoup.cpp:
        (WebCore::cookieChangeCallbackMap):
        (WebCore::soupCookiesChanged):
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):

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

        REGRESSION: Update volume and scrubbing slider to match HI designs
        https://bugs.webkit.org/show_bug.cgi?id=168170
        <rdar://problem/28095266>

        Reviewed by Dean Jackson.

        We bring the designs of the control's background materials, scrubber and
        volume slider up to spec.

        The first important set of changes is that, on macOS, the materials and colors
        were incorrect. Buttons and time labels now set a mix-blend-mode to correctly
        appear vibrant against the media, and the controls bar, volume container
        and tracks menu now use a new BackgroundTint node to correctly apply both
        a backdrop-filter and blended tint above it.

        The second important set of changes is the rendering of the sliders. Up to now
        we would simply style the <input type="range"> track and thumb, applying solid
        fills and strokes. We now draw sliders in two ways depending on the platform.
        
        On macOS, we draw the whole slider with a <canvas> element with "mix-blend-mode"
        set to "plus-lighter". On iOS, we draw the track as a <div> with "mix-blend-mode"
        set to "plus-darker" and draw the fill (up to the thumb) in the <canvas> with
        no blend mode to obtain a pure white color, finally the thumb is rendered by the
        <input> element. We couldn't draw the pure white color with the track in the
        same <canvas> due to the "plus-darker" blend mode.

        Test: media/modern-media-controls/background-tint/background-tint.html

        * Modules/modern-media-controls/controls/airplay-button.css:
        (button.airplay.on):
        * Modules/modern-media-controls/controls/background-tint.css: Added.
        (.background-tint):
        (.background-tint,):
        (.background-tint > .blur):
        (.background-tint > .tint):
        * Modules/modern-media-controls/controls/background-tint.js: Added.
        (BackgroundTint):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (.media-controls.ios.inline .scrubber.slider):
        (.media-controls.ios.inline .scrubber.slider > div):
        (.media-controls.ios.inline .scrubber.slider > input::-webkit-slider-thumb):
        (.media-controls.ios.inline .scrubber.slider > .fill): Deleted.
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css:
        (.media-controls.mac.inline.compact .volume-slider-container):
        (.media-controls.mac.inline.compact .volume.slider):
        (.media-controls.mac.inline.compact .scrubber.slider > input::-webkit-slider-thumb): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen > .controls-bar):
        (.media-controls.mac.fullscreen > .controls-bar > .background-tint > div):
        (.media-controls.mac.fullscreen .volume.slider):
        (.media-controls.mac.fullscreen button.volume-up):
        (.media-controls.mac.fullscreen button.rewind):
        (.media-controls.mac.fullscreen button.forward):
        (.media-controls.mac.fullscreen .buttons-container.right button):
        (.media-controls.mac.fullscreen .scrubber):
        (.media-controls.mac.fullscreen > .controls-bar button): Deleted.
        (.media-controls.mac.fullscreen button.airplay): Deleted.
        (.media-controls.mac.fullscreen button.aspect-ratio): Deleted.
        (.media-controls.mac.fullscreen button.pip): Deleted.
        (.media-controls.mac.fullscreen button.tracks): Deleted.
        (.media-controls.mac.fullscreen button.fullscreen): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline .scrubber.slider):
        (.media-controls.mac.inline .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):
        (.media-controls.mac.inline button): Deleted.
        (.media-controls.mac.inline button:active): Deleted.
        (.media-controls.mac.inline > .controls-bar button): Deleted.
        (.media-controls.mac.inline > .controls-bar,): Deleted.
        (.media-controls.mac.inline .volume-slider-container:before): Deleted.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/macos-media-controls.css: Added.
        (.media-controls.mac button:active):
        (.media-controls.mac > .controls-bar button):
        (.media-controls.mac > .controls-bar .time-label):
        (.media-controls.mac > .controls-bar .slider > canvas):
        (.media-controls.mac > .controls-bar .slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/scrubber.css: Removed.
        * Modules/modern-media-controls/controls/scrubber.js:
        (Scrubber):
        (Scrubber.prototype.get buffered):
        (Scrubber.prototype.set buffered):
        (Scrubber.prototype.draw):
        (Scrubber.prototype._drawMacOS):
        (Scrubber.prototype._drawiOS):
        * Modules/modern-media-controls/controls/slider.css:
        (.slider):
        (.slider > canvas,):
        (.slider > canvas):
        (.slider > input):
        (.slider > input,): Deleted.
        (.slider > .fill): Deleted.
        (.slider > input::-webkit-slider-thumb): Deleted.
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.set value):
        (Slider.prototype.set width):
        (Slider.prototype.commitProperty):
        (Slider.prototype.layout):
        (Slider.prototype.draw):
        (Slider.prototype._handleInputEvent):
        (Slider.prototype._handleChangeEvent):
        (addRoundedRect):
        (Slider.prototype._updateFill): Deleted.
        * Modules/modern-media-controls/controls/start-button.css:
        (button.start):
        * Modules/modern-media-controls/controls/time-control.js:
        * Modules/modern-media-controls/controls/time-label.css:
        (.time-label):
        * Modules/modern-media-controls/controls/tracks-panel.css:
        (.tracks-panel):
        (.tracks-panel > .background-tint > div):
        (.tracks-panel > section):
        (.tracks-panel > section:first-of-type):
        (.tracks-panel > section > h3):
        (.tracks-panel > section > ul):
        (.tracks-panel > section > ul > li):
        (.tracks-panel > section > ul > li:focus):
        (.tracks-panel > section > ul > li.selected:before):
        (.tracks-panel > section > ul > li.animated):
        (.tracks-panel-section): Deleted.
        (.tracks-panel-section:first-of-type): Deleted.
        (.tracks-panel-section > h3): Deleted.
        (.tracks-panel-section > ul): Deleted.
        (.tracks-panel-section > ul > li): Deleted.
        (.tracks-panel-section > ul > li:focus): Deleted.
        (.tracks-panel-section > ul > li.selected:before): Deleted.
        (.tracks-panel-section > ul > li.animated): Deleted.
        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype._childrenFromDataSource):
        (TracksPanel.prototype._childrenFromDataSource.): Deleted.
        * Modules/modern-media-controls/controls/volume-slider.js:
        (VolumeSlider):
        (VolumeSlider.prototype.handleEvent):
        (VolumeSlider.prototype.draw):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/scrubbing-support.js:
        (ScrubbingSupport.prototype.get mediaEvents):
        (ScrubbingSupport.prototype.syncControl):
        (ScrubbingSupport):

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        URLs with an invalid IPv4 address should be invalid
        https://bugs.webkit.org/show_bug.cgi?id=168260

        Reviewed by Tim Horton.

        All URL hosts are fed through the IPv4 parser.  https://webkit.org/ doesn't
        look enough like an IPv4 address to be considered an invalid IPv4 address, so 
        we continue to the String host processing.  http://127.0.0.257 does, though, and
        according to https://url.spec.whatwg.org/#concept-ipv4-parser parsing that URL
        should fail.

        Covered by newly passing web platform tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Host):
        (WebCore::URLParser::parseHostAndPort):
        * platform/URLParser.h:

2017-02-13  Dan Bernstein  <mitz@apple.com>

        Reverted r212275. It still breaks some Apple-internal builds.

        * platform/spi/mac/TUCallSPI.h:

2017-02-13  Joseph Pecoraro  <pecoraro@apple.com>

        Address ESLint warnings in modern-media-controls
        https://bugs.webkit.org/show_bug.cgi?id=168224

        Reviewed by Alexey Proskuryakov.

        * Modules/modern-media-controls/controls/controls-bar.js:
        * Modules/modern-media-controls/controls/fullscreen-button.js:
        * Modules/modern-media-controls/controls/layout-node.js:
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        * Modules/modern-media-controls/controls/media-controls.js:
        * Modules/modern-media-controls/controls/scheduler.js:
        * Modules/modern-media-controls/controls/seek-button.js:
        * Modules/modern-media-controls/controls/tracks-panel.js:
        * Modules/modern-media-controls/controls/volume-slider.js:
        * Modules/modern-media-controls/gesture-recognizers/gesture-recognizer.js:
        * Modules/modern-media-controls/gesture-recognizers/pinch.js:
        * Modules/modern-media-controls/media/fullscreen-support.js:
        * Modules/modern-media-controls/media/media-controller.js:
        * Modules/modern-media-controls/media/placard-support.js:
        * Modules/modern-media-controls/media/status-support.js:
        Address pedantic warnings.

2017-02-13  Dan Bernstein  <mitz@apple.com>

        Restored changes from r212210 in a way that does not break the build.

        * platform/spi/mac/TUCallSPI.h:

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

        FontCascade::widthForSimpleText should skip applyTransforms() when kerning and ligatures are off.
        https://bugs.webkit.org/show_bug.cgi?id=168251
        <rdar://problem/30498102>

        Reviewed by Antti Koivisto.

        Covered by existing (perf)tests.

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

2017-02-12  Brian Burg  <bburg@apple.com>

        Web Inspector: expose system user interface layout direction through InspectorFrontendHost
        https://bugs.webkit.org/show_bug.cgi?id=168209
        <rdar://problem/11573736>

        Reviewed by Joseph Pecoraro.

        Forward the UserInterfaceLayoutDirection of the inspector page. If the WebKit client has
        properly set the UI directionality from system settings in PageClient, this will get inherited
        automatically by the Inspector's WebPage instance.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::userInterfaceLayoutDirection):
        * inspector/InspectorFrontendClientLocal.h:

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::userInterfaceLayoutDirection):
        Expose the directionality to the frontend as "ltr" or "rtl" strings.

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

        Simple line layout: Do not measure runs with trailing whitespace when kerning and ligatures are off.
        https://bugs.webkit.org/show_bug.cgi?id=168247
        <rdar://problem/30497288>

        Reviewed by Antti Koivisto.

        The width of the run is supposed to be the same with or without the trailing whitespace.

        Covered by performance test.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2017-02-13  Karim H  <karim@karhm.com>

        Added the other missing BSTR roles tag names.
        https://bugs.webkit.org/show_bug.cgi?id=165545

        Reviewed by Chris Fleizach.

        Test: accessibility/win/bstr-elements-role.html

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

2017-02-13  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Creating RTCPeerConnection with libwebrtc backend is crashing on rwt
        https://bugs.webkit.org/show_bug.cgi?id=168250

        Reviewed by Alex Christensen.

        Covered by webrtc tests in LayoutTests and in web-platform-tests.
        Making mock peer connection factory keep a ref of the real libwebrtc peer connection factory.
        That way, it can create real libwebrtc backends whenever requested by tests.

        Moving LibWebRTCUtils.h routines as static LibWebRTCProvider methods.
        In the future, we should make them no longer static.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp: Renamed from Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCUtils.cpp.
        (WebCore::LibWebRTCProvider::callOnWebRTCNetworkThread):
        (WebCore::LibWebRTCProvider::callOnWebRTCSignalingThread):
        (WebCore::LibWebRTCProvider::factory):
        (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
        (WebCore::createActualPeerConnection):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCUtils.h: Removed.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        * testing/Internals.cpp:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::useMockRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionForIceCandidates::gotLocalDescription):
        (WebCore::releaseInNetworkThread):
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):
        (WebCore::MockLibWebRTCPeerConnection::CreateOffer):
        (WebCore::MockLibWebRTCPeerConnection::CreateAnswer):

2017-02-13  Anders Carlsson  <andersca@apple.com>

        Simplify DragController::startDrag
        https://bugs.webkit.org/show_bug.cgi?id=168240

        Reviewed by Tim Horton.

        Use early returns instead of assigning to a variable that's returned at the end of the function.

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

2017-02-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The current frame of an image should not deleted if another frame is asynchronously being decoded
        https://bugs.webkit.org/show_bug.cgi?id=167618

        Reviewed by Simon Fraser.

        Test: fast/images/animated-image-draw-while-decode.html

        If the memory cache asks the BitmapImage to destroy all its frames while
        the next frame is being decoded, a thread contention may happen. This can
        happen when BitmapImage::draw() is called and the next frame is not ready
        yet for drawing, so the current frame has to be drawn. This will invoke
        a frame decoding in the same image from the drawing committing thread.

        We can avoid that by destroying all the frames except the current frame if
        the image is asynchronously decoding its frames. This should not add extra
        memory overhead because building the image frame cache and then destroying
        it, when needed, is an on-going process. The frames will be allocated and
        decoded all the time and all of them can be destroyed except the current one.
        
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        The logic of destroying the ImageFrames was split among BitmapImage, ImageSource
        and ImageFrameCache. Move all the logic to BitmapImage and have ImageFrameCache
        be responsible only for destroying a range of ImageFrames.

        (WebCore::BitmapImage::draw): add an ASSERT_IMPLIES to ensure the current frame
        is ready to be rendered if the next frame is being decoded.
        
        * platform/graphics/BitmapImage.h: Move a const from ImageFrameCache.h to BitmapImage.h.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::destroyDecodedData):
        (WebCore::ImageFrameCache::destroyDecodedDataIfNecessary): Deleted.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::destroyAllDecodedData):
        (WebCore::ImageFrameCache::destroyAllDecodedDataExcludeFrame):
        (WebCore::ImageFrameCache::destroyDecodedDataBeforeFrame):
        Make ImageFrameCache be responsible for destroying a range of ImageFrames.
        This range might include all the frames, all the frames but up to a specific
        frame, or all the frames but exclude one frame in the middle.
        
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::clear): No need to call clearFrameBufferCache() from clear().
        The decision to call clearFrameBufferCache() or clear() is moved to
        BitmapImage::destroyDecodedData().
         
        (WebCore::ImageSource::destroyDecodedData): Deleted.
        (WebCore::ImageSource::destroyDecodedDataIfNecessary): Deleted.
        These functions are replaced by another set of functions in ImageSource.h.
        
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::destroyAllDecodedData):
        (WebCore::ImageSource::destroyAllDecodedDataExcludeFrame):
        (WebCore::ImageSource::destroyDecodedDataBeforeFrame):
        (WebCore::ImageSource::hasDecodingQueue):
        These are new wrappers which call the corresponding ImageFrameCache functions.

2017-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Stop soft-linking CTRunGetBaseAdvancesAndOrigins()
        https://bugs.webkit.org/show_bug.cgi?id=168256

        Reviewed by Alex Christensen.

        Use of this function is already behind a platform guard.

        No new tests because there is no behavior change.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (SOFT_LINK): Deleted.

2017-02-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] WebInspector should indicate webkitSubtle is deprecated
        https://bugs.webkit.org/show_bug.cgi?id=165913
        <rdar://problem/30477222>

        Reviewed by Joseph Pecoraro.

        Covered by existing tests.

        * page/Crypto.cpp:
        (WebCore::Crypto::webkitSubtle):

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

        Call WKDestroyRenderingResources() on iOS when tabs are backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=168261
        rdar://problem/30481079

        Reviewed by Tim Horton.

        Add CABackingStoreCollectBlocking() to QuartzCoreSPI.h, and fix files in WebCore
        that do a framework include.

        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.h:
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * platform/spi/mac/NSViewSPI.h:

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

        ASSERTION FAILED: !m_bodyLoader
        https://bugs.webkit.org/show_bug.cgi?id=166986

        Reviewed by Sam Weinig.

        Refactoring to make the unset/set pending activity part of body loader.
        This allows ensuring to not forget to do that by simply deleting the body loader.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::BodyLoader):
        (WebCore::FetchResponse::BodyLoader::~BodyLoader):
        (WebCore::FetchResponse::stop):
        * Modules/fetch/FetchResponse.h:

2017-02-13  Aakash Jain  <aakash_jain@apple.com>

        Remove unused WebCoreThreadSafe.h
        https://bugs.webkit.org/show_bug.cgi?id=168236

        Reviewed by Dan Bernstein.

        * platform/ios/wak/WebCoreThreadSafe.h: Removed.
        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreThreadSafe.h
        * platform/ios/wak/WebCoreThread.mm: Removed WebCoreThreadSafe.h and included WAKWindow.h directly

2017-02-13  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

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

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

        Rename MediaQueryExp.h/cpp to MediaQueryExpression.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=168249

        Reviewed by Dean Jackson.

        Fix a FIXME and rename MediaQueryExp.h/cpp to match the class it contains, MediaQueryExpression.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/MediaQuery.h:
        * css/MediaQueryEvaluator.h:
        * css/MediaQueryExp.cpp: Removed.
        * css/MediaQueryExp.h: Removed.
        * css/MediaQueryExpression.cpp: Copied from Source/WebCore/css/MediaQueryExp.cpp.
        * css/MediaQueryExpression.h: Copied from Source/WebCore/css/MediaQueryExp.h.
        * css/parser/MediaQueryParser.h:

2017-02-13  Aakash Jain  <aakash_jain@apple.com>

        WAKResponder should be exported from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=168245

        Reviewed by Dan Bernstein.

        * platform/ios/wak/WAKResponder.h:

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

        Log to the History Channel in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=168252

        Reviewed by Brady Eidson.

        *** Aliens ***

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::updateForReload):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::cancel):
        * page/History.cpp:
        (WebCore::History::go):

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        Percent should be allowed in non-special URL hosts
        https://bugs.webkit.org/show_bug.cgi?id=168255

        Reviewed by Tim Horton.

        In the last few weeks, the spec has consolidated its sets of code points.
        Now forbidden host code points replace the old invalid host code points with
        the modification that percents are allowed in non-special hosts because we
        percent-encode non-ascii code points in non-special hosts.
        See https://url.spec.whatwg.org/#concept-opaque-host-parser

        Covered by newly passing web platform tests.

        * platform/URLParser.cpp:
        (WebCore::isC0Control):
        (WebCore::isInUserInfoEncodeSet):
        (WebCore::URLParser::hasForbiddenHostCodePoint):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::isInvalidDomainCharacter): Deleted.
        (WebCore::URLParser::hasInvalidDomainCharacter): Deleted.
        * platform/URLParser.h:

2017-02-13  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

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

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        Fix Yosemite build after r211765
        https://bugs.webkit.org/show_bug.cgi?id=168246
        <rdar://problem/30494174>

        Reviewed by Brady Eidson.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (SOFT_LINK):

2017-02-13  Anders Carlsson  <andersca@apple.com>

        Add a DragImage class that wraps a DragImageRef
        https://bugs.webkit.org/show_bug.cgi?id=168131

        Reviewed by Beth Dakin.

        This allows us to get rid of the explicit deleteDragImage calls and will make additional cleanup of the
        various drag code paths possible. No functionality change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::updateDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:
        * platform/DragImage.cpp:
        (WebCore::DragImage::DragImage):
        (WebCore::DragImage::operator=):
        (WebCore::DragImage::~DragImage):
        * platform/DragImage.h:
        * platform/Pasteboard.h:
        * platform/StaticPasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):

2017-02-13  Chris Dumez  <cdumez@apple.com>

        Regression(r211455): ASSERTION FAILED: frameView || pageCacheState() == InPageCache in com.apple.WebCore: WebCore::Document::destroyRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=168237
        <rdar://problem/30494165>

        Reviewed by Gavin Barraclough.

        Drop bad assertion under document::destroyRenderTree() that was introduced in r211455.
        The assertion seemed like a good idea but the issue is that CachedFrame::destroy()
        reset's the document's pageCacheState before calling Document::prepareForDestruction().

        No new tests, this fixes assertion hits on our bots.

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

2017-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Update custom line breaking iterators to the latest version of Unicode
        https://bugs.webkit.org/show_bug.cgi?id=168182

        Reviewed by Zalan Bujtas.

        Clean up our breaking code to be more descriptive about the difference between
        line-break: auto vs line-break: loose | normal | strict. The only difference is
        that we have some hardcoded tables to speed up character iteration for
        line-break: auto.

        Tests: TestWebKitAPI WebKit2.LineBreaking

        * rendering/BreakLines.h:
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        (WebCore::nextBreakablePositionWithoutShortcut):
        (WebCore::nextBreakablePositionIgnoringNBSPWithoutShortcut):
        (WebCore::isBreakable):
        (WebCore::nextBreakablePositionNonLoosely): Deleted.
        (WebCore::nextBreakablePositionLoosely): Deleted.
        (WebCore::nextBreakablePositionLoose): Deleted.
        (WebCore::nextBreakablePositionIgnoringNBSPLoose): Deleted.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::nextBreakablePositionInSegment):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):

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

        Remove @getUserMedia identifier
        https://bugs.webkit.org/show_bug.cgi?id=168216

        Reviewed by Sam Weinig.

        No change of behavior.

        * Modules/mediastream/MediaDevices.idl:
        * bindings/js/WebCoreBuiltinNames.h:

2017-02-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Non-accelerated drawing is broken with HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=168128

        Reviewed by Michael Catanzaro.

        When device scale factor changes, the page notifies the page overlay controller about it. Then overlay root
        layers are created to be notified about the device scale factor. That causes us to enter in accelerated
        compositing mode, because the graphics layer factory is called. But the render layer compositor doesn't really
        enter in accelerated mode, because there aren't page overlays, the accelerated mode is not forced and the website
        doesn't require acceleration either. This leaves our drawing area in an inconsistent state, it thinks it's in AC
        mode because it has a layer tree host, but without a root layer attached, so nothing is rendered. The page
        overlay controller doesn't need to create the layers when device scale factor changes, when an overlay is
        installed, layers will be created with the current device scale factor anyway.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::didChangeDeviceScaleFactor): Return early if not initialized yet.

2017-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r210845) Build broken with ENABLE_MHTML disabled
        https://bugs.webkit.org/show_bug.cgi?id=167771

        Reviewed by Daniel Bates.

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

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

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * platform/spi/mac/TUCallSPI.h: Reverted to r212210.

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

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * platform/spi/mac/TUCallSPI.h:

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

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * platform/spi/mac/TUCallSPI.h:

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

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * platform/spi/mac/NSMenuSPI.h: Replaced declaration of deprecated method with its current
          equivalent.

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

        Tried to fix USE(APPLE_INTERNAL_SDK) builds after r212211.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:

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

        parserRemoveChild should unload subframes
        https://bugs.webkit.org/show_bug.cgi?id=168151

        Reviewed by Darin Adler.

        Fix the bug that the adoption agency algorithm does not unload subframes as it disconnects nodes.

        Also moved calls to nodeWillBeRemoved inside NoEventDispatchAssertion to expand on r211965.

        Tests: fast/parser/adoption-agency-clear-focus-range.html
               fast/parser/adoption-agency-unload-iframe-1.html
               fast/parser/adoption-agency-unload-iframe-2.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom): Rewritten using idioms used in removeChildren and parserAppendChild.

        Disconnect all subframes first since this can synchronously dispatch an unload event. Then update DOM ranges,
        the focused element, and other states in the document.

        Second, use the regular removeBetween, notifyChildNodeRemoved, childrenChanged sequence of calls to disconnect nodes
        instead of a single call to removeDetachedChildren to properly disconnect child nodes since those nodes may have
        already come live due to execution of synchronous scripts prior to the adoption agency algorithm has run, or in
        response to the unload event we just dispatched.

        Third, append these nodes using parserAppendChild to avoid dispatching mutation events.

        (WebCore::willRemoveChild): Removed the call to nodeWillBeRemoved. It's now called within NoEventDispatchAssertion
        in each call site of willRemoveChild and willRemoveChildren.
        (WebCore::willRemoveChildren): Ditto.
        (WebCore::ContainerNode::removeChild): Call nodeWillBeRemoved inside NoEventDispatchAssertion.
        (WebCore::ContainerNode::replaceAllChildren): Call nodeWillBeRemoved inside NoEventDispatchAssertion.
        (WebCore::ContainerNode::parserRemoveChild): Disconnect subframes and update document's states.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTakeAllChildrenAndReparentTask): Add a release assert that new parent does not already have a parent. 

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

        REGRESSION (r179497): Crash inside setAttributeNode
        https://bugs.webkit.org/show_bug.cgi?id=168161
        <rdar://problem/30451581>

        Reviewed by Andreas Kling.

        The bug was caused by setAttributeNode calling setAttributeInternal with the same element data as the one used
        to call removeAttributeInternal despite of the fact removeAttributeInternal could have invoked arbitrary scripts
        and mutated element's m_elementData.

        Fixed the bug by calling with setAttributeInternal with the result of new invocation of ensureUniqueElementData().

        Test: fast/dom/Attr/make-unique-element-data-while-replacing-attr.html

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

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

        Rebaseline bindings tests after r212207.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:

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

        [Cocoa] Some -respondsToSelector: checks are unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=168183

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Removed a string that’s no longer needed after the
          change to WebKit2/Platform/mac/MenuUtilities.mm.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController): Removed check whether
          LULookupDefinitionModule responds to +showDefinitionForTerm:relativeToRect:ofView:options:.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize): Changed to use
          -[NEFilterSource setSourceAppIdentifier:], without checking, instead of
          -setSourceAppBundleID:, which does not exist.

        * platform/cocoa/ScrollController.mm:
        (systemUptime): Deleted.
        (WebCore::ScrollController::snapRubberBand): Use -[NSProcessInfo systemUptime] directly.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Remove unnecessary check.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didPassCORSAccessCheck): Replaced
          -respondsToSelector: check with -isKindOfClass: check corresponding to the above cast.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep): Removed unnecessary
          check.

        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer): Removed unnecessary checks.

        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): Ditto.

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::typeForEvent): Removed check whether NSMenu responds to +menuTypeForEvent: and
          all code to handle that case that it doesn’t.

        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController applicationDidResignActive:]): Removed check whether
          NSWindow responds to -isOnActiveSpace.
        (-[WebVideoFullscreenController updateMenuAndDockForFullscreen]): Removed check whether
          NSApplication responds to -setPresentationOptions:

        * platform/mac/WebVideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC updateIsPlaying:newPlaybackRate:]): Removed
          unnecessary -respondsToSelector: check.
        (-[WebVideoFullscreenInterfaceMacObjC setVideoDimensions:]): Ditto.
        (-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]): Ditto.

        * platform/spi/cf/CFNetworkSPI.h: Moved declarations of
          -[NSURLCache _initWithMemoryCapacity:diskCapacity:relativePath:] and
          -[NSURLCache _CFURLCache] to the !USE(APPLE_INTERNAL_SDK) section.

        * platform/spi/cocoa/NEFilterSourceSPI.h: Added declaration of NEFilterSource’
          sourceAppIdentifier property to the !USE(APPLE_INTERNAL_SDK) section and deleted
          unconditional declaration of sourceAppBundleID property, which doesn’t exist.

        * platform/spi/cocoa/QuartzCoreSPI.h: Removed redundant declarations.

        * platform/spi/ios/DataDetectorsUISPI.h: Moved declarations of DDDetectionController methods
          from WebKit2/UIProcess/ios/{WKActionSheetAssistant,WKContentViewInteraction}.mm to here.
          Removed an unused declaration.

        * platform/spi/mac/LookupSPI.h: Moved redundant declarations into the
          !USE(APPLE_INTERNAL_SDK) section.

        * platform/spi/mac/NSMenuSPI.h: Changed to import NSMenu_Private.h when using the
          Apple internal SDK. Cleaned up the declarations for the other case.

        * platform/spi/mac/TUCallSPI.h: Changed to import TUCall_Strings.h when use the Apple
          internal SDK.

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

        Remove the remaining functions out of JSDOMBinding
        https://bugs.webkit.org/show_bug.cgi?id=168179

        Reviewed by Darin Adler.

        Move utility functions into more appropriate locations.
        - Move hasIteratorMethod to runtime/IteratorOperations.h
        - Move nonCachingStaticFunctionGetter to runtime/Lookup.h
        - Move addImpureProperty to CommonVM

        Remove toJS overload that took a Vector<T>. Replace it's usage
        with toJS<IDLSequence<T>> usage. To make this work, added two
        new types, IDLIDBKeyData and IDLIDBValue.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::setGetResult):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        Adopt JSDOMConvert infrastructure for conversions using new types.

        * bindings/IDLTypes.h:
        * bindings/js/JSDOMConvertIndexedDB.h:
        (WebCore::JSConverter<IDLIDBKeyData>::convert):
        (WebCore::JSConverter<IDLIDBValue>::convert):
        Add new types for IDBKeyData and IDBValue.

        * bindings/js/CommonVM.cpp:
        (WebCore::addImpureProperty):
        * bindings/js/CommonVM.h:
        Move addImpureProperty here from JSDOMBinding.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyDataToScriptValue): Deleted.
        * bindings/js/IDBBindingUtilities.h:
        Remove unused idbKeyDataToScriptValue, and group like functions
        together.

        * bindings/js/JSDOMBinding.cpp: Removed.
        * bindings/js/JSDOMBinding.h:
        (WebCore::nonCachingStaticFunctionGetter): Deleted.
        (WebCore::toJS): Deleted.
        Move/remove functions.

        * bindings/js/JSDOMConvertUnion.h:
        Update for move of hasIteratorMethod to runtime/IteratorOperations.h

        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        Update for move of nonCachingStaticFunctionGetter to runtime/Lookup.h

        * bindings/js/JSSubtleCryptoCustom.cpp:
        Remove unneeded include of runtime/IteratorOperations.h

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadedFunctionOrConstructor):
        Include runtime/IteratorOperations when needing to distinguish a sequence.

        * html/HTMLDocument.cpp:
        Replace include of JSDOMBinding.h with CommonVM.h for addImpureProperty.

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

        [GTK] Handle caps lock indicator in event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=168186

        Reviewed by Michael Catanzaro.

        Add helper function to check if caps lock is present in the given modifiers. We need this because in GDK
        GDK_LOCK_MASK might be either CapsLock or ShiftLock in X11. We use this new method in all platform event
        implementations to add the appropriate modifiers.

        Fixes: fast/events/special-key-events-in-input-text.html

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::modifiersForGdkKeyEvent):
        (WebCore::PlatformKeyboardEvent::modifiersContainCapsLock):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

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

        Remove custom bindings for XSLTProcessor.idl
        https://bugs.webkit.org/show_bug.cgi?id=168174

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSXSLTProcessorCustom.cpp: Removed.
        Remove file.
 
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringOrUndefined): Deleted.
        * bindings/js/JSDOMBinding.h:
        Remove now unused jsStringOrUndefined.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::setParameter):
        (WebCore::XSLTProcessor::getParameter):
        (WebCore::XSLTProcessor::removeParameter):
        * xml/XSLTProcessor.idl:
        Replace custom bindings bindings with early returns. One subtle difference
        between the custom bindings and this, is that getParameter will return 
        jsNull() rather than jsUndefined() for null String returns. This matches
        all other bindings.

2017-02-11  Olivier Blin  <olivier.blin@softathome.com>

        [GStreamer][MSE][EME] Fix decryptor assignment
        https://bugs.webkit.org/show_bug.cgi?id=168122

        Reviewed by Michael Catanzaro.

        The new decryptor is a floating reference so we should not use the
        adopt GRefPtr constructor, but use the regular assignment operator
        that will sink the object (clear the floating flag).

        This fixes assertions in debug build.

        See previous pipeline fix in r210851 and WPE commit
        06020b18831e1c0eead34e2c1a5a4b7d026c227d.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        Do not use adoptGRef(), it prevented the object from being sunk.

2017-02-11  Simon Fraser  <simon.fraser@apple.com>

        Avoid a redundant scroll to 0,0 when navigating back to a url with no fragment
        https://bugs.webkit.org/show_bug.cgi?id=168177

        Reviewed by Sam Weinig.

        FrameView::scrollToFragment() is called from FrameLoader::scrollToFragmentWithParentBoundary()
        when navigating within the page. If the URL had no fragment identifier, this code would
        call into FrameView::scrollToAnchor() with an empty name, where maintainScrollPositionAtAnchor()
        used the document as the anchor, thus scrolling to 0,0. Later, history().restoreScrollPositionAndViewState()
        the restores the scroll position from history.
        
        This scroll to 0,0 happened to be not visible to the page because of scroll event
        coalescing, but it makes implementation of history.scrollRestoration harder, so avoid it
        by just returning early from FrameView::scrollToFragment() if there is no fragment,
        making sure to clear the document's CSSTarget.

        * dom/Document.cpp:
        (WebCore::Document::setCSSTarget):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        (WebCore::FrameView::scrollToAnchor):

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

        Implement URL's toJSON()
        https://bugs.webkit.org/show_bug.cgi?id=167979

        Reviewed by Sam Weinig.

        Implement URL's toJSON() as per:
        - https://url.spec.whatwg.org/#dom-url-tojson

        This is already supported by Firefox.

        Also, drop URLUtils.idl as it is no longer in the specification.
        Merge its content to DOMURL.idl as per the URL specification.

        Finally, mark href attribute as stringifier and drop the toString()
        operation to match the specification. This fixes a bug where our
        toString property was not enumerable but should have been.

        Tests: fast/url/url-tojson.html
               imported/w3c/web-platform-tests/url/url-tojson.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMURL.idl:
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::toJSON):
        * html/URLUtils.idl: Removed.

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

        [GTK][EFL] Implement MIMETypeRegistry::getPreferredExtensionForMIMEType
        https://bugs.webkit.org/show_bug.cgi?id=168163

        Reviewed by Michael Catanzaro.

        It's missing causing several HTML anchor download tests to fail because the suggested filename missed the
        extension. This patch moves MIMETypeRegistry::appendFileExtensionIfNecessary() from the cocoa specific file to the
        common file because it's not actually platform specific. MIMETypeRegistry::getPreferredExtensionForMIMEType() is
        what platforms should implement.

        Fixes: fast/dom/HTMLAnchorElement/anchor-download-user-triggered-synthetic-click.html
               fast/dom/HTMLAnchorElement/anchor-download.html
               fast/dom/HTMLAnchorElement/anchor-file-blob-download-no-extension.html
               fast/dom/HTMLAnchorElement/anchor-nodownload-set.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary): Deleted.
        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):

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

        Unreviewed. Update imageTitle translatable string.

        To match mac port. Fixes fast/images/imageDocument-title.html.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):

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

        Updates to Resource Load Statistics: Get the right website data store and introduce timeout for user interaction
        https://bugs.webkit.org/show_bug.cgi?id=167474
        <rdar://problem/24681808>
        <rdar://problem/24703286>
        <rdar://problem/30290270>

        This patch does the following:
        1. Gets the right website data store. API::WebsiteDataStore::defaultDataStore()
            does not provide the right data store.
        2. Introduces timeout for user interaction. A domain needs interaction every 30
            days to stay in that category.
        3. Adds grandfathered to the statistics model in preparation for grandfathering of
            existing data records.
        4. Adds test infrastructure to allow testing of the various rules in place for
            data records removal.
        5. Fixes various smaller bugs that were found as part of setting up the tests.
        6. Regresses the data records removal counting. We need to come up with a thread
            safe way of gathering removal statistics from more than one data store now
            that we potentially interact with multiple stores.
        7. Adds a first set of layout tests for resource load statistics.

        Reviewed by Andy Estes.

        Tests: http/tests/loading/resourceLoadStatistics/non-prevalent-resource-with-user-interaction.html
               http/tests/loading/resourceLoadStatistics/non-prevalent-resource-without-user-interaction.html
               http/tests/loading/resourceLoadStatistics/prevalent-resource-with-user-interaction-timeout.html
               http/tests/loading/resourceLoadStatistics/prevalent-resource-with-user-interaction.html
               http/tests/loading/resourceLoadStatistics/prevalent-resource-without-user-interaction.html

        * dom/Document.cpp:
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
            This now calls ResourceLoadObserver::logUserInteraction() every time since
            we want to keep track of the most recent user interaction.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::statisticsStore):
            New getter used by WebResourceLoadStatisticsManager::resetToConsistentState().
        (WebCore::reduceTimeResolutionToOneDay):
            Convenience function.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Reduces time resolution for privacy reasons.
        (WebCore::ResourceLoadObserver::logUserInteraction):
        (WebCore::ResourceLoadObserver::clearUserInteraction):
        (WebCore::ResourceLoadObserver::hasHadUserInteraction):
        (WebCore::ResourceLoadObserver::setPrevalentResource):
        (WebCore::ResourceLoadObserver::isPrevalentResource):
        (WebCore::ResourceLoadObserver::clearPrevalentResource):
        (WebCore::ResourceLoadObserver::setTimeToLiveUserInteraction):
        (WebCore::ResourceLoadObserver::fireDataModificationHandler):
            New functions that allow WebKitTestRunner to stage exact
            statistics, fire the handler, and test the outcome.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString):
        (WebCore::ResourceLoadStatistics::merge):
            Support for statistics mostRecentUserInteraction, grandfathered, and
            dataRecordsRemoved.
        * loader/ResourceLoadStatistics.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
            New function that allows WebKitTestRunner to test 
            aging out of user interaction.
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction):
            Now takes into account the timestamp and ages
            out user interaction.
        (WebCore::ResourceLoadStatisticsStore::prevalentResourceDomainsWithoutUserInteraction):
            Now makes use of ResourceLoadStatisticsStore::hasHadRecentUserInteraction().
        * loader/ResourceLoadStatisticsStore.h:

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

        [WebIDL] Cleanup XMLHttpRequest's bindings
        https://bugs.webkit.org/show_bug.cgi?id=168067

        Reviewed by Chris Dumez.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsOwnedStringOrNull): Deleted.
        * bindings/js/JSDOMBinding.h:
        Remove jsOwnedStringOrNull and inline it into it's one use
        in JSXMLHttpRequestCustom.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText):
        (WebCore::SendFunctor::SendFunctor): Deleted.
        (WebCore::SendFunctor::line): Deleted.
        (WebCore::SendFunctor::column): Deleted.
        (WebCore::SendFunctor::url): Deleted.
        (WebCore::SendFunctor::operator()): Deleted.
        (WebCore::JSXMLHttpRequest::send): Deleted.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:
        Remove custom send, replacing it with a single send implementation that
        takes a variant.

        * xml/XMLHttpRequest.idl:
        Cleanup the IDL to better match the spec. Update correct types where trivial.

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

        document.origin doesn't match spec
        https://bugs.webkit.org/show_bug.cgi?id=168022

        Reviewed by Sam Weinig.

        Update document.origin to return the origin in the expected format:
        - https://dom.spec.whatwg.org/#dom-document-origin

        Change: "https_webkit.org_0 -> "https://webkit.org".

        The new behavior matches Firefox and Chrome.

        No new tests, updated existing tests.

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

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

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

        * dom/Document.cpp:
        (WebCore::Document::detachFromCachedFrame): Use ASSER_UNUSED() instead of ASSERT() since
        the parameter cachedFrame is unused in non-debug build.

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

        Detach frame from document when entering page cache
        https://bugs.webkit.org/show_bug.cgi?id=166774
        <rdar://problem/29904368>

        Reviewed by Chris Dumez.

        When a page enters the page cache it is unnecessary for it to hold a reference to its
        associated frame because subsequent interactions with the page do not need to make use
        of it. Once a page exits the page cache we associate it with its frame.

        * dom/Document.cpp:
        (WebCore::Document::frameDestroyed): Update comment to reflect the renaming of disconnectFromFrame().
        (WebCore::Document::attachToCachedFrame): Added.
        (WebCore::Document::detachFromCachedFrame): Added.
        (WebCore::Document::prepareForDestruction): Only call CSSAnimationController::detachFromDocument() if
        we have a frame. Substitute detachFromFrame() for disconnectFromFrame() as the latter was renamed to
        the former.
        (WebCore::Document::hasEverCalledWindowOpen): Deleted.
        (WebCore::Document::markHasCalledWindowOpen): Deleted.
        (WebCore::Document::disconnectFromFrame): Renamed to detachFromFrame.
        * dom/Document.h:
        (WebCore::Document::detachFromFrame): Renamed; formerly named disconnectFromFrame(). Changed
        visibility from public to private and made this function inline.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::pruneDetachedChildFrames): Remove cached child frames that were
        removed from the page when it was in the page cache as there is no need to restore such frames.
        (WebCore::CachedFrameBase::restore): Call pruneDetachedChildFrames() before restoring the
        frame tree.
        (WebCore::CachedFrame::CachedFrame): Detach from the frame.
        (WebCore::CachedFrame::open): Assert that we have a document and re-attach the frame.
        (WebCore::CachedFrame::destroy): Update assertion as this function should only be called for a
        frameless document. Only detach the FrameView, DocumentLoader, and Page when the cached frame is for
        subframe and is associated with a Page object. Call CSSAnimationController::detachFromDocument() to
        detach the animation controller from the document as it is being destroyed. We have to do this here
        because the document does not have a frame. And Document::prepareForDestruction() only calls
        CSSAnimationController::detachFromDocument() if the document has a frame.
        * history/CachedFrame.h:
        * history/PageCache.cpp:
        (WebCore::canCachePage): Remove logic that prevents caching of a page that called window.open()
        or has an opener as it is feasible to keep such pages in the page cache.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::finishedInsertingSubtree): Fix style nit.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::frameDetached): Only stop all loaders and stop active DOM objects if the
        page is not in- or about to enter- the page cache. A page in the page cache has finished loading
        and its active DOM objects are suspended. Also fix style nit in comment.
        (WebCore::FrameLoader::detachFromParent): Only stop all loaders if the page is not in- or about to
        enter- the page cache. A page in the page cache has finished loading. Also added a comment to explain
        that we protect the frame because stopAllLoaders() can cause the frame to be deallocated.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Remove logic to call markHasCalledWindowOpen() as this
        function will be removed.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::hasCalledWindowOpenKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::hasOpenerKey): Deleted.
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::Page::openedByWindowOpen): Deleted.
        * page/Page.h:
        * page/Settings.in: Remove setting allowsPageCacheWithWindowOpener.

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

        REGRESSION (r211845): [ios-simulator] LayoutTest compositing/masks/solid-color-masked.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=168054

        Reviewed by Tim Horton.

        When adding mask layers, there was an ordering dependency. There was a hack in GraphicsLayerCA::setVisibleAndCoverageRects()
        to propagate m_intersectsCoverageRect to masks. However, if GraphicsLayerCA::setVisibleAndCoverageRects()
        ran on the masked layer before the mask was added, nothing updated the "m_intersectsCoverageRect" state of the mask layer.

        Fix by explicitly calling setVisibleAndCoverageRects() on the mask layer, passing the same rects and
        viewport-constrained state as for its host layer (we already assume that their geometry matches).

        Tested by compositing/masks/solid-color-masked.html

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

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

        Unreviewed, rolling out r212154, r212154, and r212156.
        https://bugs.webkit.org/show_bug.cgi?id=168156

        broke internal builds (Requested by smfr on #webkit).

        Reverted changesets:

        "Add a DragImage class that wraps a DragImageRef"
        https://bugs.webkit.org/show_bug.cgi?id=168131
        http://trac.webkit.org/changeset/212154

        "Add a DragImage class that wraps a DragImageRef"
        https://bugs.webkit.org/show_bug.cgi?id=168131
        http://trac.webkit.org/changeset/212154

        "Try to fix the iOS and Windows builds."
        http://trac.webkit.org/changeset/212156

2017-02-10  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(WEBGL) build
        https://bugs.webkit.org/show_bug.cgi?id=168112

        Reviewed by Alex Christensen.

        * html/canvas/WebGLRenderingContextBase.h:

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

        [Fetch API] fetch fails when undefined is passed as headers
        https://bugs.webkit.org/show_bug.cgi?id=168043

        Reviewed by Geoffrey Garen.

        Covered by updated test.

        * Modules/fetch/FetchInternals.js:
        (fillFetchHeaders): Exit early in case of undefined headers, since it is an optional parameter.

2017-02-10  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(WEB_TIMING) build
        https://bugs.webkit.org/show_bug.cgi?id=168113

        Reviewed by Alex Christensen.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):

2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        Update features.json for Performance Timing APIs
        https://bugs.webkit.org/show_bug.cgi?id=168148

        Reviewed by Simon Fraser.

        * features.json:

2017-02-10  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS and Windows builds.

        * platform/ios/DragImageIOS.mm:
        (WebCore::deleteDragImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::setDragImage):

2017-02-10  Anders Carlsson  <andersca@apple.com>

        Add a DragImage class that wraps a DragImageRef
        https://bugs.webkit.org/show_bug.cgi?id=168131

        Reviewed by Beth Dakin.

        This allows us to get rid of the explicit deleteDragImage calls and will make additional cleanup of the
        various drag code paths possible. No functionality change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::updateDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:
        * platform/DragImage.cpp:
        (WebCore::DragImage::DragImage):
        (WebCore::DragImage::operator=):
        (WebCore::DragImage::~DragImage):
        * platform/DragImage.h:
        * platform/Pasteboard.h:
        * platform/StaticPasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):

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

        Make sure the "inwindow" flag propagates to TiledBackings for masks and reflections
        https://bugs.webkit.org/show_bug.cgi?id=168127
        rdar://problem/30467120

        Reviewed by Tim Horton.
        
        Replace the special-case, but wrong, GraphicsLayer traversal in setIsInWindowIncludingDescendants()
        which forgot to hit masks and replica layers with a generic traverse() function, which
        is then used for setting 'inWindow' as well as resetting tracked repaints.

        Tests: compositing/tiling/tiled-mask-inwindow.html
               compositing/tiling/tiled-reflection-inwindow.html

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::layerWithDocumentOverlays):
        (WebCore::PageOverlayController::layerWithViewOverlays):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setIsInWindow):
        (WebCore::GraphicsLayer::setReplicatedByLayer):
        (WebCore::GraphicsLayer::traverse):
        (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): Deleted.
        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::resetTrackedRepaintRects):
        (WebCore::resetTrackedRepaintRectsRecursive): Deleted.

2017-02-09  Simon Fraser  <simon.fraser@apple.com>

        Tiled layers are sometimes left with some tiles when outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=168104
        rdar://problem/30459055

        Reviewed by Tim Horton.

        When the coverage rect of a TiledBacking goes from a non-empty rect to an empty rect, we
        shouldn't just early return from TileGrid::revalidateTiles(), otherwise we are left with some
        tiles. Run through the function as normal, which will remove all the tiles for an empty coverage rect.
        
        Minor logging changes.

        Test: tiled-drawing/tile-coverage-iframe-to-zero-coverage.html

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):

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

        Mail hangs when removing multiple rows from large table.
        https://bugs.webkit.org/show_bug.cgi?id=168103
        <rdar://problem/30090186>

        Reviewed by Ryosuke Niwa.

        DeleteSelectionCommand::removeNode doesn't actually destroy table structure items,
        but instead it removes their content. In order to be able to continue editing the table after
        the delete, we need to ensure that its cells' width and height are > 0. Currently we issue layout on
        each table item recursively.
        This patch delays the layout until after we've finished with the entire subtree delete (10x progression).

        Performance test added.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::insertBlockPlaceholderForTableCellIfNeeded):
        (WebCore::DeleteSelectionCommand::removeNodeUpdatingStates):
        (WebCore::shouldRemoveContentOnly):
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/DeleteSelectionCommand.h:

2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Enable Resource Timing by default in Tests
        https://bugs.webkit.org/show_bug.cgi?id=168145

        Reviewed by Ryosuke Niwa.

        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setResourceTimingEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        No longer needed for tests.

2017-02-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add shouldChangeSelectedRange to WKWebProcessPlugInEditingDelegate
        https://bugs.webkit.org/show_bug.cgi?id=168097

        Reviewed by Tim Horton.

        Added a userTriggered argument to FrameSelection::setSelectedRange so that WebKit2 can
        indicate that changes should be agreed to by the delegate.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectedRange): If the change is user-triggered, check with
          shouldChangeSelection.
        * editing/FrameSelection.h:

2017-02-10  Jonathan Bedard  <jbedard@apple.com>

        Removing LayoutTestRelay
        https://bugs.webkit.org/show_bug.cgi?id=165927

        Reviewed by Daniel Bates.
        Part 2

        LayoutTestRelay uses SPI, since recent versions of the iOS SDK allow for installing apps on
        simulators through simctl (iOS 10 and later), use this functionality instead.

        * platform/RuntimeApplicationChecks.mm:
        (WebCore::IOSApplication::isDumpRenderTree): Update comment to reflect removal of LayoutTestRelay.

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

        [WebRTC] Implement Outgoing libwebrtc audio source support
        https://bugs.webkit.org/show_bug.cgi?id=168118

        Reviewed by Eric Carlson.

        No new automated tests as we need the audio rendering to work to test the whole loop.

        Using an AudioSampleDataSource to convert the captured data to libwebrtc expected format.
        Capturing and pushing data happens in the capture thread.
        Pulling of converted data happens in libwebrtc thread.

        Introducing LibWebRTCAudioFormat.h to centralize libwbebrtc expected audio format.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList): Missing initialization leads to assertion failure.
        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::copyFrom): In case of interleaved channels, there is one buffer but two channels.
        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::pushSamples):
        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioFormat.h: Added.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::libwebrtcAudioFormat):
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

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

        HTMLConstructionSiteTask::Insert should never be called on a node with a parent
        https://bugs.webkit.org/show_bug.cgi?id=168099

        Reviewed by Sam Weinig.

        insertAlreadyParsedChild always use HTMLConstructionSiteTask::InsertAlreadyParsedChild instead
        of using HTMLConstructionSiteTask::Insert when fostering a child.

        Also combine the step to take all children and re-parenting into a single task instead of
        separately issuing TakeAllChildren and Reparent tasks.

        No new tests since this is a refactoring.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert): Now asserts that the child node never have a parent.
        (WebCore::executeInsertAlreadyParsedChildTask): Moved the code to remove the parent here.
        (WebCore::executeTakeAllChildrenAndReparentTask): Renamed from executeTakeAllChildrenTask
        now that this function also does the reparenting.
        (WebCore::executeTask):
        (WebCore::HTMLConstructionSite::reparent): Removed the variant only used with takeAllChildren.
        (WebCore::HTMLConstructionSite::insertAlreadyParsedChild): Always use InsertAlreadyParsedChild
        instead of calling fosterParent which uses Insert when fostering parents.
        (WebCore::HTMLConstructionSite::takeAllChildrenAndReparent): Renamed from takeAllChildren.
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSiteTask:Operation):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2017-02-10  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make intercap property values serialize correctly
        https://bugs.webkit.org/show_bug.cgi?id=168073

        Reviewed by Zalan Bujtas.

        Fix CSS value keywords to preserve case when the value contains capital
        letters. Examples include optimizeSpeed, translateX, scaleY, etc.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EPointerEvents):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        (WebCore::CSSPrimitiveValue::operator EColorInterpolation):
        (WebCore::CSSPrimitiveValue::operator EColorRendering):
        (WebCore::CSSPrimitiveValue::operator EShapeRendering):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::colorGamutEvaluate):
        * css/SVGCSSValueKeywords.in:
        * css/TransformFunctions.cpp:
        (WebCore::transformOperationType):
        (WebCore::transformsForValue):
        * css/makevalues.pl:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseSimpleTransformValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTransformValue):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):

2017-02-10  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::load()
        https://bugs.webkit.org/show_bug.cgi?id=168041

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the MediaKeySession::load() method, tracing the steps as they
        are defined in the EME specification. The only exception is step 8.3,
        which requires additional facility that tracks currently open sessions
        and provides information whether for a given session ID there's already
        a MediaKeySession that's not yet been closed.

        Session ID sanitization is done through the CDM::sanitizeSessionId()
        method, which relays the task to the CDMPrivate implementation.

        The CDMInstance::loadSession() virtual method is called with the session
        type, sanitized ID, the Document's origin (in string form) and the
        callback that's invoked upon completion of the task. The callback
        checks whether the operation was successful, or examines the reason for
        the load failure in case it wasn't, rejecting the promise in the latter
        case either immediately or in the following task at the latest.

        When the load was successful, the optional known keys, expiration time
        and message are handled appropriately, and the promise is resolved.

        MockCDM::sanitizeSessionId() implementation only treats
        'valid-loaded-session' as a valid session ID.
        MockCDMInstance::loadSession() implementation is kept slim for now, only
        providing the 'license-renewal' message when invoking the passed-in
        callback. Known keys and expiration time will also be tested once the
        relevant MediaKeySession algorithms are implemented.

        Test: media/encrypted-media/mock-MediaKeySession-load.html

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::sanitizeSessionId):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::load):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeSessionId):
        (WebCore::MockCDMInstance::loadSession):
        * testing/MockCDMFactory.h:

2017-02-10  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::sessionClosed()
        https://bugs.webkit.org/show_bug.cgi?id=168039

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the 'session closed' algorithm for MediaKeySession by
        following the specified steps. After this algorithm is run, the
        session should be considered closed, which we track via the m_closed
        member variable on the class. This is set to true before the promise
        that's accessible through the 'closed' attribute is resolved.

        Because the algorithm requires the CDM instance to store any record
        of key usage when the session's type is 'persistent-usage-record', the
        storeRecordOfKeyUsage() virtual method is added to the CDMInstance
        interface. MockCDMInstance implementation is left unimplemented for now.

        JSMediaKeySession::closed() accessor now has a custom implementation
        that creates a deferred promise for that object if there's none yet, and
        shares it with the wrapped class through the registerClosedPromise()
        method, storing a reference to the promise in the m_closedPromise
        member variable, or resolving the promise immediately if the session was
        already closed.

        Test cases added to media/encrypted-media/mock-MediaKeySession-close.html.

        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::registerClosedPromise):
        (WebCore::MediaKeySession::sessionClosed):
        * Modules/encryptedmedia/MediaKeySession.h:
        * bindings/js/JSMediaKeySessionCustom.cpp:
        (WebCore::JSMediaKeySession::closed):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::storeRecordOfKeyUsage):
        * testing/MockCDMFactory.h:

2017-02-10  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::updateKeyStatuses(), MediaKeyStatusMap
        https://bugs.webkit.org/show_bug.cgi?id=167888

        Reviewed by Xabier Rodriguez-Calvar.

        Implement MediaKeySession::updateKeyStatuses(), transforming the passed-in
        KeyStatusVector into a Vector mapping the key IDs to MediaKeyStatus values.
        A keystatuseschange event is fired on the MediaKeySession object afterwards.
        The queueing of the task that runs the 'attemp to resume playback' on the
        related HTMLMediaElement objects isn't done yet since that algorithm isn't
        implemented yet.

        The statuses Vector is stored on the MediaKeySession object. That Vector is
        then exposed through the MediaKeyStatusMap object, each such object being
        unique to one MediaKeySession object. The implementation of MediaKeyStatusMap
        thus keeps a reference to the session object as long as that object is alive,
        and queries the MediaKeySession::statuses() getter to access the Vector that
        contains status information for all the key IDs.

        MediaKeyStatusMap::Iterator object keeps a reference to the MediaKeyStatusMap
        object and accesses the statuses by indexing into the status Vector of the
        related MediaKeySession object.

        CDMInstance::updateLicense() now accepts the session ID string as the first
        argument, making it possible to specify which session should be updated.

        MockCDMFactory::keysForSessionWithID() returns an optional reference to the
        Vector value in the session map that lists all the key IDs that are being
        stored for that session.

        MockCDMInstance::updateLicense() now detects the 'keys-changed' entry in the
        passed-in response data, and upon detecting that constructs a KeyStatusVector
        object containing all the keys for that session. KeyStatus::Usable is returned
        for each object at the moment, but this should be adjustable in the future
        through additional parameters passed through the response data. The Vector
        object is then passed to the callback and is then passed to the 'update key
        statuses' algorithm in MediaKeySession.

        Covered by a test case in media/encrypted-media/mock-MediaKeySession-update.html.

        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::~MediaKeySession):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        (WebCore::MediaKeyStatusMap::MediaKeyStatusMap):
        (WebCore::MediaKeyStatusMap::detachSession):
        (WebCore::MediaKeyStatusMap::size):
        (WebCore::keyIdsMatch):
        (WebCore::MediaKeyStatusMap::has):
        (WebCore::MediaKeyStatusMap::get):
        (WebCore::MediaKeyStatusMap::Iterator::Iterator):
        (WebCore::MediaKeyStatusMap::Iterator::next):
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        (WebCore::MediaKeyStatusMap::create):
        * Modules/encryptedmedia/MediaKeyStatusMap.idl:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::keysForSessionWithID):
        (WebCore::MockCDMInstance::updateLicense):
        * testing/MockCDMFactory.h:

2017-02-09  Simon Fraser  <simon.fraser@apple.com>

        Improve IOSurfacePool logging
        https://bugs.webkit.org/show_bug.cgi?id=168098

        Reviewed by Tim Horton.

        Pass a string to DUMP_POOL_STATISTICS so we can tell what's triggering the
        logging.

        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::addSurface):
        (WebCore::IOSurfacePool::evict):
        (WebCore::IOSurfacePool::collectionTimerFired):
        (WebCore::IOSurfacePool::showPoolStatistics):
        * platform/graphics/cg/IOSurfacePool.h:

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212040.

        Broke build.  I'm not surprised

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212040

2017-02-09  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Use MIME type to add file extension to downloads' suggested filenames when missing
        https://bugs.webkit.org/show_bug.cgi?id=168077
        <rdar://problem/30412595>

        Reviewed by Alex Christensen.

        Add utility function to MIMETypeRegistry that appends an extension to
        a filename if necessary, based on a provided MIME type.

        Tests: fast/dom/HTMLAnchorElement/anchor-file-blob-download-no-extension.html
               http/tests/download/anchor-download-no-extension.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):
        * platform/MIMETypeRegistry.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):

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

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2017-02-09  Philip Rogers  <pdr@google.com>

        SVG clip-path references can clip out later content
        https://bugs.webkit.org/show_bug.cgi?id=164181

        Reviewed by Said Abou-Hallawa.

        RenderSVGResourceClipper can modify the GraphicsContext state (through the path-only
        clipping codepath) so we need to ensure RenderLayer::setupClipPath saves the context
        and its caller restores it back so later content is not clipped as well.

        This patch is based on a chromium patch by fs@opera.com:
        https://chromium.googlesource.com/chromium/src/+/b3f7e7d2c4afb3c7e5c7eb438ff5933cbe2109b3

        Test: css3/masking/clip-path-reference-restore.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Add a GC save and return true to restore. Also switch to downcast instead of static_cast.

2017-02-09  Filip Pizlo  <fpizlo@apple.com>

        SharedArrayBuffer does not need to be in the transfer list
        https://bugs.webkit.org/show_bug.cgi?id=168079

        Reviewed by Geoffrey Garen and Keith Miller.

        Tests: workers/sab/multi-memory-multi-buffer.html
               workers/sab/multi-memory.html
               workers/sab/no-transfer.html
               workers/sab/postMessage-clones.html
               workers/sab/sent-from-worker-no-transfer.html
               workers/sab/sent-from-worker-transfer.html

        The SAB API that we originally implemented required that SABs get put in transfer lists
        when they are sent to workers.
        
        The new SAB API that everyone is converging towards requires that you do not put the
        SAB in the transfer list. That's supposed to be an error. Instead, anytime that a SAB
        is part of any message to or from a dedicated worker then it is automatically shared.
        
        The new API provides a lot more clarity about what is supposed to happen in contexts
        that support transfering but don't support sharing.
        
        Right now this patch allows both styles to work, but I hope we can disable the transfer
        list capability soon.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueToJSValue):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * 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:
        (): Deleted.
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::trySerializeDetail):
        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::trySerializeError):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::trySerializeData):
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::trySerializeState):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):

2017-02-09  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r212025.

        inDocument -> isConnected

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::didMoveToNewDocument):
        (WebCore::FormAssociatedElement::resetFormAttributeTargetObserver):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):

2017-02-09  Chris Dumez  <cdumez@apple.com>

        Make sure Event keeps its current target element alive
        https://bugs.webkit.org/show_bug.cgi?id=167885
        <rdar://problem/30376972>

        Reviewed by Brent Fulgham.

        Make sure Event keeps its current target element alive to avoid
        crashes if it is accessed by JS after it has been garbage collected.

        Test: fast/events/currentTarget-gc-crash.html

        * dom/Event.cpp:
        (WebCore::Event::setCurrentTarget):
        * dom/Event.h:
        (WebCore::Event::currentTarget):

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

        Crash in render tree after dynamically mutating the slot value
        https://bugs.webkit.org/show_bug.cgi?id=167502

        Reviewed by Antti Koivisto.

        The crash was caused by attributeChanged not destructing the render tree after an assigned element had been
        removed from its slot. Since the style resolver can no longer find this element in the flat tree, we need to
        delete its render object as if the element had been removed from the DOM tree.

        Tests: fast/html/details-summary-slot.html
               fast/shadow-dom/shadow-slot-attribute-change-crash.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummarySlotElement): Added. Always use the default slot regardless of the slot attribute's value.
        (WebCore::HTMLSummaryElement::create): Use SummarySlotElement

2017-02-09  Antti Koivisto  <antti@apple.com>

        Details element doesn't work correctly when mutating content between closing and opening
        https://bugs.webkit.org/show_bug.cgi?id=167310

        Reviewed by Ryosuke Niwa.

        Tests: fast/html/details-close-modify-open.html
               fast/shadow-dom/slot-remove-mutate-add.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::didChangeSlot):

            Always reset the slot assignment when content is mutated.

2017-02-09  Chris Dumez  <cdumez@apple.com>

        Crash under FormSubmission::create()
        https://bugs.webkit.org/show_bug.cgi?id=167200
        <rdar://problem/30096323>

        Reviewed by Darin Adler.

        The issue is that FormSubmission::create() was iterating over
        form.associatedElements() as was calling Element::appendFormData()
        in the loop. HTMLObjectElement::appendFormData() was calling
        pluginWidget(PluginLoadingPolicy::Load) which causes a synchronous
        layout and can fire events (such as focus event) synchronously.
        Firing those events synchronously allows the JS to modify the
        form.associatedElements() vector we are currently iterating on.

        To avoid this issue, we now call pluginWidget(PluginLoadingPolicy::DoNotLoad)
        in HTMLObjectElement::appendFormData() as we are not allowed to fire
        synchronous events at this point. I also added a security assertion
        in FormSubmission::create() to catch cases where we fire JS events
        while iterating over the form associated elements to more easily
        notice these things in the future.

        Test: fast/forms/formsubmission-appendFormData-crash.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::appendFormData):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2017-02-09  Chris Dumez  <cdumez@apple.com>

        Crash under HTMLFormElement::registerFormElement()
        https://bugs.webkit.org/show_bug.cgi?id=167162

        Reviewed by Ryosuke Niwa.

        didMoveToNewDocument() was re-registering FormAttributeTargetObserver
        even if the element's inDocument was not set yet. As a result, it was
        possible for FormAssociatedElement::resetFormOwner() to be called
        when the element was in the tree but with its inDocument still being
        false (because insertedInto() has not been called yet). This could
        end up calling HTMLFormElement::registerFormElement() even though
        the element is still recognized as detached. This is an issue because
        HTMLFormElement::m_associatedElements's order and its corresponding
        indexes (m_associatedElementsBeforeIndex / m_associatedElementsAfterIndex)
        rely on the position of the element with regards to the form element
        (before / inside / after).

        To address the issue, we now only register the FormAttributeTargetObserver
        in didMoveToNewDocument() if the inDocument flag is set to true. This
        is similar to what is done at other call sites of
        resetFormAttributeTargetObserver(). We also ignore the form content
        attribute in HTMLFormElement::formElementIndex() if the element is
        not connected.

        As per the HTML specification [1], the form content attribute is only
        taken if the element is connected (i.e. inDocument flag is true).

        Note that FormAssociatedElement::findAssociatedForm() was already
        ignoring the form content attribute if the element is disconnected.

        [1] https://html.spec.whatwg.org/#reset-the-form-owner (step 3)

        Test: fast/forms/registerFormElement-crash.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::didMoveToNewDocument):
        Only call resetFormAttributeTargetObserver() if inDocument flag is set,
        similarly to what is done at other call sites.

        (WebCore::FormAssociatedElement::resetFormAttributeTargetObserver):
        Add an assertion to make sure no one call this method on an element that
        is not connected.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        Ignore the form content attribute if the element is not connected, as
        per the HTML specification [1].

2017-02-09  Antti Koivisto  <antti@apple.com>

        Tear down existing renderers when adding a shadow root.
        https://bugs.webkit.org/show_bug.cgi?id=167117

        Reviewed by Andreas Kling.

        Adding a shadow root may cause children no longer be part of the flat tree. If they had renderers
        tear down code would no longer reach them.

        Test: fast/shadow-dom/attach-shadow-teardown.html

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

            Tear down existing render tree when adding a shadow root.

2017-02-09  Brent Fulgham  <bfulgham@apple.com>

        Handle synchronous layout when setting a selection range
        https://bugs.webkit.org/show_bug.cgi?id=167092
        <rdar://problem/30041640>

        Reviewed by Antti Koivisto.

        The 'innerTextElement' of a form control can change during layout due
        to arbitrary JavaScript executing. Handle the case where the inner text
        element has changed so that current render box height is while setting
        a selection range.

        Test: fast/forms/input-type-change-during-selection.html

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange):

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-02-09  Brent Fulgham  <bfulgham@apple.com>

        Disconnect shadow children of root when detaching a frame
        https://bugs.webkit.org/show_bug.cgi?id=166851
        <rdar://problem/29930443>

        Reviewed by Andy Estes.

        If the root of the tree we are disconnecting has a shadow element, include it in the set of
        things to disconnect.

        Tests: fast/shadow-dom/shadow-at-root-during-disconnect.html

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::disconnectSubframes):

2017-02-09  Alexey Proskuryakov  <ap@apple.com>

        Remove unused WebThreadRunSync
        https://bugs.webkit.org/show_bug.cgi?id=168024

        Reviewed by Tim Horton.

        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/ios/wak/WebCoreThreadRun.h:
        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        (InitWebCoreThreadSystemInterface):

2017-02-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211802.

        This change caused fast/regions/inline-block-inside-anonymous-
        overflow-with-covered-controls.html to be a flaky failure.

        Reverted changeset:

        "[Modern Media Controls] Improve handling of <video> with only
        audio tracks"
        https://bugs.webkit.org/show_bug.cgi?id=167836
        http://trac.webkit.org/changeset/211802

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Fix i386 libwebrtc build
        https://bugs.webkit.org/show_bug.cgi?id=168038

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        DataChannelInterface::buffered_amount returns a uint64_t, and we want a size_t.
        If this overflows, then we've run out of memory and crashed a long time ago.

2017-02-09  Andreas Kling  <akling@apple.com>

        Document::settings() should return a const Settings&.
        <https://webkit.org/b/168061>

        Reviewed by Geoffrey Garen.

        - Make Document::settings() return a const reference.
        - Added Document::mutableSettings() for all your non-const needs.
        - Fixed up settings generator to produce const getters.
        - Simplify a few settings() call sites that exposed themselves.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::shouldDiscloseApplePayCapability):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::canCallGetUserMedia):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::appendSources):
        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::settings):
        * dom/Document.h:
        (WebCore::Document::settings):
        (WebCore::Document::mutableSettings):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):
        * html/HTMLCanvasElement.cpp:
        (WebCore::shouldEnableWebGL):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::updateDuringParsing):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowContentSecurityPolicySourceStarToMatchAnyProtocol):
        * page/make_settings.pl:
        (printGetterAndSetter):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::toggleSimpleLineLayout):

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

        Make passing PlatformAudioData in audioSamplesAvaliable const-correct.
        https://bugs.webkit.org/show_bug.cgi?id=168051

        Reviewed by Eric Carlson.

        Modify all the functions which take a (conceptually) read-only audio buffer const-correct.

        Drive-by fix: AudioSampleBufferList::copyFrom() set a ivar pointer to the passed in
        AudioBufferList. Ensure that the ivar is reset when copyFrom() returns by using a
        SetForScope.

        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::copyFrom):
        * platform/audio/mac/AudioSampleBufferList.h:
        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pushSamples):
        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::audioSamplesAvailable):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::Observer::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

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

        Fix some logging statements in MediaPlayerPrivateMediaStreamAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=168063

        Reviewed by Eric Carlson.

        Make the format string match the types passed in (i.e., floats, not strings).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateSampleTimes):

2017-02-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] Handle NULL m_sampleBufferDisplayLayer
        https://bugs.webkit.org/show_bug.cgi?id=168060

        Reviewed by Jer Noble.

        No new tests, this avoids an occasional crash on the bots.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): Don't assume
        m_sampleBufferDisplayLayer is valid.

2017-02-09  Chris Dumez  <cdumez@apple.com>

        Object.getPrototypeOf(NodeFilter) should be Function.prototype, not Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=167964

        Reviewed by Youenn Fablet.

        Object.getPrototypeOf(NodeFilter) should be Function.prototype, not Object.prototype
        after the following WebIDL spec change:
        - https://github.com/heycam/webidl/issues/96

        This aligns our behavior with other browsers as the spec has been updated to match
        the majority.

        No new tests, rebaselined existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterfaceConstructor::prototypeForStructure):

2017-02-09  Miguel Gomez  <magomez@igalia.com>

        [GTK] scroll with transparent background not repainted after scrollY >= 32768
        https://bugs.webkit.org/show_bug.cgi?id=154283

        Reviewed by Carlos Garcia Campos.

        Due to a limitation of the pixman backend, which uses 16 bits to hold signed integers, cairo is
        not able to draw anything when using transformation matrices with values bigger than 32768. When
        drawing patterns into large pages, the matrices values can overflow those 16 bits, so cairo doesn't
        draw anything in, which causes the reported transparent backgrounds.

        The patch modifies the transformation matrices both from the current context and the pattern we
        are painting, to avoid them to hold values that cannot stored in 16 bits.

        There's still the possibility that this happens, but it would require using a pattern with a size
        bigger than 32768.

        Based on a previous patch by Gwang Yoon Hwang  <yoon@igalia.com>.

        No new tests.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):

2017-02-09  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r211965.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): inDocument -> isConnected

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

        Adopting a child node of a script element can run script
        https://bugs.webkit.org/show_bug.cgi?id=167318

        Reviewed by Darin Adler.

        The bug was caused by ScriptElement::childrenChanged indiscriminately running the script.
        Do this only if some node has been inserted as spec'ed:

        https://html.spec.whatwg.org/multipage/scripting.html#script-processing-model
        "The script element is connected and a node or document fragment is inserted into
        the script element, after any script elements inserted at that time."

        Split NonContentsChildChanged into NonContentsChildInserted and NonContentsChildRemoved to disambiguate
        non-contents child such as text and element being removed or inserted. New behavior matches that of
        Gecko and Chrome as well as the latest HTML5 specification.

        Also deploy NoEventDispatchAssertion in more places. Unfortunately, this results in some DOM trees
        internal to WebKit to be mutated while there is NoEventDispatchAssertion in the stack. Added a new RAII
        object "EventAllowedScope" to temporarily disable this assertion within such a tree. CachedSVGFont's
        ensureCustomFontData used to completely disable this assertion but we no longer have to do this either.

        To clarify the new semantics, renamed isEventDispatchForbidden to isEventAllowedInMainThread with
        the negated boolean value, and added a new variant isEventDispatchAllowedInSubtree, which checks
        isEventDispatchForbidden() is true or if the node was one of an internal DOM node or its descendent
        held by EventAllowedScope.

        Inspired by https://chromium.googlesource.com/chromium/src/+/604e798ec6ee30f44d57a5c4a44ce3dab3a871ed

        Tests: fast/html/script-must-not-run-when-child-is-adopted.html
               fast/html/script-must-not-run-when-child-is-removed.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::notifyParentAfterChange): Added NoEventDispatchAssertion.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore): Added NoEventDispatchAssertion around TreeScope's adoptIfNeeded
        and insertBeforeCommon as done elsewhere.
        (WebCore::ContainerNode::appendChildCommon): Added NoEventDispatchAssertion.
        (WebCore::ContainerNode::changeForChildInsertion): Use NonContentsChildInserted here.
        (WebCore::ContainerNode::notifyChildRemoved): Added NoEventDispatchAssertion.
        (WebCore::ContainerNode::replaceChild): Moved adoptIfNeeded into NoEventDispatchAssertion.
        (WebCore::ContainerNode::removeChild): Added NoEventDispatchAssertion.
        (WebCore::ContainerNode::parserRemoveChild): Added NoEventDispatchAssertion.
        (WebCore::ContainerNode::removeChildren): Call childrenChanged in NoEventDispatchAssertion.
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck): Moved adoptIfNeeded into
        NoEventDispatchAssertion.
        (WebCore::dispatchChildInsertionEvents): Check the forbidden-ness more precisely.
        (WebCore::dispatchChildRemovalEvents): Ditto.
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ChildChange::isInsertion): Added.
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted): Check the forbidden-ness more precisely. Here, we check against
        insertionPoint since EventAllowedScope checks against the root node.
        * dom/Document.cpp:
        (WebCore::Document::adoptNode): Assert the node to be adopted has not been inserted back, or else
        remove() had resulted in an exception before calling TreeScope::adoptIfNeeded.
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/NoEventDispatchAssertion.h:
        (WebCore::NoEventDispatchAssertion::isEventDispatchForbidden): Added a new variant that takes a node.
        If this node is a descendent of a node "marked as safe" by EventAllowedScope, then we don't consider
        the event dispatch to be forbidden.
        (WebCore::NoEventDispatchAssertion::dropTemporarily): Deleted.
        (WebCore::NoEventDispatchAssertion::restoreDropped): Deleted.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope): Added. A RAII object which marks descendants of
        a given node as "safe" for the purpose of checking isEventDispatchForbidden.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::EventAllowedScope): Added. There can be a chain
        of EventAllowedScope objects in the stack. s_currentScope points to the most recently instantiated
        RAII object, and each instance remembers prior instance. 
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::~EventAllowedScope): Added.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::isAllowedNode): Added. Returns true if the given
        node is a descendent of any node held by instances of EventAllowedScope.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::isAllowedNodeInternal): Added. A helper function
        for isAllowedNode.
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent): Check the forbidden-ness more precisely.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::childrenChanged): Only prepare the script if we've inserted nodes.
        (WebCore::ScriptElement::executeClassicScript): Assert isEventDispatchForbidden is false since running
        arbitrary author scripts can, indeed, result dispatch any events.
        * dom/ScriptElement.h:
        * html/HTMLElement.cpp:
        (WebCore::textToFragment): Made this a static local function and not return an exception since there
        is no way appendChild called in this function can throw an exception.
        (WebCore::HTMLElement::setInnerText): Create EventAllowedScope for the fragment. It's called called by
        HTMLTextAreaElement's childrenChanged to update its UA shadow tree, and it's dispatching as event on
        a new fragment can't execute arbitrary scripts since it has never been exposed to author scripts.
        Because of the precise-ness of this check, this does not disable the assertion for "this" element.
        HTMLTextFormControlElement::setInnerTextValue explicitly creates another EventAllowedScope to mark
        the shadow tree into which the fragment is inserted safe.
        (WebCore::HTMLElement::setOuterText):
        * html/HTMLElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::childrenChanged):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue): See above (setInnerText).
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::createCueRenderingTree): Create EventAllowedScope for the cloned fragment here since
        the VTT tree is never exposed to author scripts.
        (WebCore::VTTCue::updateDisplayTree): Ditto.
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData): Use EventAllowedScope to disable assertions only on
        the new SVG document we just created instead of disabling for all DOM trees.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::childrenChanged):

2017-02-09  Andreas Kling  <akling@apple.com>

        Document should always have a Settings.
        <https://webkit.org/b/120172>

        Reviewed by Antti Koivisto.

        Since a Document can't move between Frames, and it's either frameless
        or partnered with a Frame provided at construction time, we know that
        it will never need to switch between different Settings objects either.

        Give Document a Ref<Settings> that contains either the Frame's Settings
        or a default-constructed Settings object if frameless.
        Document::settings() is promoted to a reference getter.

        The bulk of this patch is removing now-unnecessary null checks.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory):
        * Modules/plugins/PluginReplacement.h:
        (WebCore::ReplacementPlugin::isEnabledBySettings):
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::isEnabledBySettings):
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::isEnabledBySettings):
        * Modules/plugins/YouTubePluginReplacement.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon):
        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::appendSources):
        (WebCore::CSSFontFace::webFontsShouldAlwaysFallBack):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fallbackFontCount):
        (WebCore::CSSFontSelector::fallbackFontAt):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertResize):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontFamily):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::checkForGenericFamilyChange):
        (WebCore::StyleResolver::initializeFontStyle):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::settings):
        (WebCore::StyleResolver::documentSettings): Deleted.
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setReadyState):
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::defaultCharsetForLegacyBindings):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::implicitClose):
        (WebCore::Document::minimumLayoutDelay):
        (WebCore::Document::setDomain):
        (WebCore::Document::audioPlaybackRequiresUserGesture):
        (WebCore::Document::videoPlaybackRequiresUserGesture):
        (WebCore::Document::storageBlockingStateDidChange):
        (WebCore::Document::isTelephoneNumberParsingEnabled):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::initDNSPrefetch):
        (WebCore::Document::getCachedLocale):
        (WebCore::Document::shouldEnforceContentDispositionAttachmentSandbox):
        (WebCore::Document::settings): Deleted.
        * dom/Document.h:
        (WebCore::Document::settings):
        * dom/Element.cpp:
        (WebCore::subpixelMetricsEnabled):
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::pageUserSheet):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::requestAnimationFrameEnabled):
        * dom/make_names.pl:
        (printConstructorInterior):
        * editing/Editor.cpp:
        * editing/markup.cpp:
        (WebCore::createMarkupInternal):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::sendPings):
        (WebCore::HTMLAnchorElement::treatLinkAsLiveForEventType):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::canEmbedJava):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::shouldEnableWebGL):
        (WebCore::HTMLCanvasElement::shouldAccelerate):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::updateImageControls):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory):
        (WebCore::HTMLMediaElement::mediaPlayerAcceleratedCompositingEnabled):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::mediaPlayerNeedsSiteSpecificHacks):
        (WebCore::HTMLMediaElement::mediaPlayerNetworkInterfaceName):
        (WebCore::HTMLMediaElement::setMediaControlsDependOnPageScaleFactor):
        (WebCore::HTMLMediaElement::doesHaveAttribute):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled):
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):
        (WebCore::MediaElementSession::allowsAutomaticMediaDataLoading):
        (WebCore::MediaElementSession::allowsPictureInPicture):
        (WebCore::MediaElementSession::maximumMediaSourceBufferSize):
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowContentSecurityPolicySourceStarToMatchAnyProtocol):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::toggleSimpleLineLayout):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize):
        (WebCore::Style::fontSizeForKeyword):
        (WebCore::Style::legacyFontSizeForPixelSize):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectActiveStyleSheets):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::usesDashboardBackwardCompatibilityMode):

2017-02-09  Antti Koivisto  <antti@apple.com>

        Use all cacheable speculatively loaded responses
        https://bugs.webkit.org/show_bug.cgi?id=168052

        Reviewed by Andreas Kling.

        * platform/network/CacheValidation.cpp:
        (WebCore::isStatusCodeCacheableByDefault):
        (WebCore::isStatusCodePotentiallyCacheable):

        Moved here from WebKit2.

        * platform/network/CacheValidation.h:

2017-02-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Remove legacy Navigator.webkitGetUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=168016

        Reviewed by Youenn Fablet.

        No new tests, existing tests updated.

        * WebCore.xcodeproj/project.pbxproj: NavigatorUserMedia.
        * DerivedSources.make: Ditto.
        * CMakeLists.txt: Ditto.
        * Modules/mediastream/NavigatorUserMedia.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * page/Navigator.idl: Add some whitespace to force derived sources to be rebuild correctly.

2017-02-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Tapping the skip back button on iOS inline media controls make the controls disappear
        https://bugs.webkit.org/show_bug.cgi?id=168049
        <rdar://problem/30442660>

        Reviewed by Eric Carlson.

        Calling elementAtPoint() on the Document will not return an element in the ShadowRoot,
        we need to call it on the ShadowRoot. So we now iterate over ancestors of the controls
        bar to find the ShadowRoot, if any, and check whether the tapped element is contained
        within the controls bar. We only fade the controls bar out if the tapped element is
        outside of the controls bar hierarchy.

        Test: media/modern-media-controls/media-controller/media-controller-ios-do-not-hide-controls-when-tapping-button.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.gestureRecognizerStateDidChange):

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

        Configure MockRealtimeAudioSourceMac to generate stereo audio
        https://bugs.webkit.org/show_bug.cgi?id=168027

        Reviewed by Eric Carlson.

        Update MockRealtimeAudioSourceMac to generate stereo audio.

        First, because the pattern of creating a AudioBufferList structure (with all it's quirks and
        weird requirements) was repeated multiple places, add a new wrapper around ABL called
        WebAudioBufferList which takes care of correctly initializing the ABL structure and manages
        the lifetime of its data members.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/PlatformAudioData.h: Added.
        (WebCore::PlatformAudioData::kind):
        * platform/audio/WebAudioBufferList.cpp: Added.
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        (WebCore::WebAudioBufferList::buffers):
        (WebCore::WebAudioBufferList::bufferCount):
        (WebCore::WebAudioBufferList::buffer):
        * platform/audio/WebAudioBufferList.h: Added.
        (WebCore::WebAudioBufferList::list):
        (WebCore::WebAudioBufferList::operator AudioBufferList&):
        (WebCore::WebAudioBufferList::kind):
        (isType):

        Then update existing code to work in terms of WebAudioBufferList:

        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::mixFrom):
        (WebCore::AudioSampleBufferList::copyFrom):
        (WebCore::AudioSampleBufferList::copyTo):
        (WebCore::AudioSampleBufferList::reset):
        (WebCore::AudioSampleBufferList::configureBufferListForStream): Deleted.
        * platform/audio/mac/AudioSampleBufferList.h:
        (WebCore::AudioSampleBufferList::bufferList):
        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::pushSamples):
        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::audioSamplesAvailable):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::Observer::audioSamplesAvailable):
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

        Finally, actually update MockRealtimeAudioSource to emit stereo samples. Importantly, set
        the correct values for the m_streamFormat; mBytesPerFrame and mBytesPerPacket are not
        multiplied by the channelCount. When generating audio, write to both channels of data.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        (WebCore::MockRealtimeAudioSourceMac::render):

2017-02-09  Antti Koivisto  <antti@apple.com>

        Nullptr crash under styleForFirstLetter
        https://bugs.webkit.org/show_bug.cgi?id=167756
        rdar://problem/30029354

        Reviewed by Zalan Bujtas.

        Don't know how we get here. Paper over the crash.

        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter):

            Use parent first line style if we compute null style for the first letter renderer.

2017-02-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Playing an <audio> element on iOS makes the controls disappear
        https://bugs.webkit.org/show_bug.cgi?id=168047
        <rdar://problem/30441939>

        Reviewed by Eric Carlson.

        The controls bar auto-hide behavior is disabled for <audio> elements, but on iOS we have
        a TapGestureRecognizer to identify when controls are tapped to toggle controls visibility.
        This gesture recognizer would be on at all times, but it should only be enabled when
        fadesToIdle is set to true.

        Test: media/modern-media-controls/media-controller/media-controller-ios-only-enable-tap-gesture-recognizer-with-fades-when-idle.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set fadesWhileIdle):

2017-02-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] <audio> element does not show any background on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168046
        <rdar://problem/30441872>

        Reviewed by Eric Carlson.

        Use a solid gray background for <audio> elements on iOS.

        Test: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-audio-background.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (:host(audio) .media-controls.ios.inline > .controls-bar:before):

2017-02-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls fail to instantiate in an XHTML document
        https://bugs.webkit.org/show_bug.cgi?id=168045
        <rdar://problem/30290095>

        Reviewed by Eric Carlson.

        Always use valid HTML and XHTML strings when creating HTML elements.

        Test: media/modern-media-controls/media-controller/media-controller-in-xhtml.xhtml

        * Modules/modern-media-controls/controls/button.js:
        (Button):
        * Modules/modern-media-controls/controls/buttons-container.js:
        * Modules/modern-media-controls/controls/controls-bar.js:
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        * Modules/modern-media-controls/controls/media-controls.js:
        * Modules/modern-media-controls/controls/slider.js:
        * Modules/modern-media-controls/controls/status-label.js:
        * Modules/modern-media-controls/controls/time-control.js:
        * Modules/modern-media-controls/controls/time-label.js:
        * Modules/modern-media-controls/controls/tracks-panel.js:

2017-02-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix typo in comment

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2017-02-09  Andreas Kling  <akling@apple.com>

        Disallow accelerated rendering for ginormous 2D canvases.
        <https://webkit.org/b/167968>
        <rdar://problem/30119483>

        Reviewed by Antti Koivisto.

        Add a "maximumAccelerated2dCanvasSize" setting that defaults to 5120x2880
        which is the 5K resolution for 16:9.

        Also added a way to include the "accelerates drawing" flag in layer tree dumps.

        Test: compositing/canvas/accelerated-canvas-compositing-size-limit.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::shouldAccelerate):
        * page/Frame.h:
        * page/Settings.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayerClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-02-09  Antti Koivisto  <antti@apple.com>

        Remove most cases of #if ENABLE(CACHE_PARTITIONING)
        https://bugs.webkit.org/show_bug.cgi?id=167990

        Reviewed by Sam Weinig.

        We'll just return empty string for the partition if partitioning is not enabled.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::url):
        (WebCore::CachedResource::cachePartition):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setDomainForCachePartition):
        * loader/cache/CachedResourceRequest.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequestImpl):
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::remove):
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::removeResourcesWithOrigins):
        (WebCore::MemoryCache::getOriginsWithCache):
        (WebCore::MemoryCache::originsWithCache):
        * loader/cache/MemoryCache.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::domainForCachePartition):
        * page/SecurityOrigin.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::cachePartitioningSchemes):
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme):
        * platform/SchemeRegistry.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy):
        (WebCore::ResourceRequestBase::setCachePartition):
        (WebCore::ResourceRequestBase::partitionName):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::cachePartition):
        (WebCore::ResourceRequestBase::setDomainForCachePartition):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::cachePartition): Deleted.
        (WebCore::ResourceRequest::setCachePartition): Deleted.
        (WebCore::ResourceRequest::setDomainForCachePartition): Deleted.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::partitionName): Deleted.
        (WebCore::ResourceRequest::doPlatformSetAsIsolatedCopy): Deleted.
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):

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

        Add Web Bluetooth as Not Considering
        https://bugs.webkit.org/show_bug.cgi?id=168042

        Reviewed by Yusuke Suzuki.

        Add Web Bluetooth as a feature not being considered to be implemented in WebKit.

        * features.json:

2017-02-08  Simon Fraser  <simon.fraser@apple.com>

        Put names on more UIViews for ease of debugging
        https://bugs.webkit.org/show_bug.cgi?id=168035

        Reviewed by Tim Horton.

        Name the page overlay layers.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::createRootLayersIfNeeded):
        (WebCore::PageOverlayController::installPageOverlay):

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

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

        http/tests/media/media-stream/disconnected-frame-permission-
        denied.html should be updated (Requested by youenn on
        #webkit).

        Reverted changeset:

        "[MediaStream] Remove legacy Navigator.webkitGetUserMedia"
        https://bugs.webkit.org/show_bug.cgi?id=168016
        http://trac.webkit.org/changeset/211912

2017-02-08  Youenn Fablet  <youennf@gmail.com>

        HTML Link elements should load data URLs as same origin
        https://bugs.webkit.org/show_bug.cgi?id=168032
        <rdar://problem/30275036>

        Reviewed by Alex Christensen.

        Test: fast/dom/data-url-css-link-element-cors-active.html

        Making CSS data URLs resources considered as same origin when loaded through link elements.
        In the future, we should consider remove the data URL same origin flag and fully align with the fetch and HTML spec.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

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

        REGRESSION (r193286): Promise chain no longer prevent UI refresh
        <rdar://problem/28062149>
        https://bugs.webkit.org/show_bug.cgi?id=161291

        Reviewed by Geoffrey Garen.

        Add new subtest to js/dom/Promise.html

        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::append):
        (WebCore::MicrotaskQueue::remove):
        (WebCore::MicrotaskQueue::performMicrotaskCheckpoint):
        * dom/Microtasks.h:
        The microtask queue needs to be completely drained, even of new microtasks added while
        the previous task was run. Remove the m_tasksAppendedDuringMicrotaskCheckpoint as it is
        no longer needed.

2017-02-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Remove legacy Navigator.webkitGetUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=168016

        Reviewed by Youenn Fablet.

        No new tests, existing tests updated.

        * WebCore.xcodeproj/project.pbxproj: NavigatorUserMedia.
        * DerivedSources.make: Ditto.
        * CMakeLists.txt: Ditto.
        * Modules/mediastream/NavigatorUserMedia.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * page/Navigator.idl: Add some whitespace to force derived sources to be rebuild correctly.

2017-02-08  Chris Dumez  <cdumez@apple.com>

        Use smaller tiles in windows that are not active to facilitate App Napping
        https://bugs.webkit.org/show_bug.cgi?id=167997
        <rdar://problem/30358835>

        Reviewed by Simon Fraser.

        Use smaller / non-adaptative tiles in windows that are not active to facilitate
        App Napping after <https://trac.webkit.org/r197594>.

        Test: compositing/tiling/non-active-window-tiles-size.html

        * page/FrameView.cpp:
        (WebCore::FrameView::contentsResized):
        (WebCore::FrameView::addedOrRemovedScrollbar):
        (WebCore::FrameView::computeScrollability):
        (WebCore::FrameView::updateTiledBackingAdaptiveSizing):
        (WebCore::FrameView::unobscuredContentSizeChanged):
        (WebCore::FrameView::setViewExposedRect):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setActivityState):
        (WebCore::Page::isWindowActive):
        * page/Page.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setTileSizeUpdateDelayDisabledForTesting):
        (WebCore::TileController::notePendingTileSizeChange):
        * platform/graphics/ca/TileController.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::disableTileSizeUpdateDelay):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-02-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r211907.

        Broke the build

        Reverted changeset:

        "[MediaStream] Remove legacy Navigator.webkitGetUserMedia"
        https://bugs.webkit.org/show_bug.cgi?id=168016
        http://trac.webkit.org/changeset/211907

2017-02-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Remove legacy Navigator.webkitGetUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=168016

        Reviewed by Youenn Fablet.

        No new tests, existing tests updated.

        * WebCore.xcodeproj/project.pbxproj: NavigatorUserMedia.
        * DerivedSources.make: Ditto.
        * CMakeLists.txt: Ditto.
        * Modules/mediastream/NavigatorUserMedia.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:

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

        Add kUTTypeUTF8PlainText and kUTTypeJPEG to the list of compatible content types in DragData
        https://bugs.webkit.org/show_bug.cgi?id=167942
        <rdar://problem/30315079>

        Reviewed by Tim Horton.

        Adds UTI types for dragging UTF8 plain text and JPEG images to the list of supported types in DragDataMac.mm.
        Also handles reading these types in PasteboardMac.mm. I verified manually with a test app that if a platform
        NSView vends only UTF8 plaintext or JPEG images when dragging, WebKit is able to read the contents of the
        pasteboard as text and an image, respectively.

        New TestWebKitAPI tests in DragAndDropPasteboardTests.mm.

        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsCompatibleContent):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):

2017-02-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        getIntersectionList always returns empty NodeList until layout is complete
        https://bugs.webkit.org/show_bug.cgi?id=81423

        Reviewed by Simon Fraser.

        Layout needs to be forced before trying to figure out which SVGElements
        intersect with a given SVGRect. We do the same thing in the DOM API
        Element::getBoundingClientRect().

        Test: svg/custom/intersection-list-before-layout.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getIntersectionList):

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

        [Modern Media Controls] Implement reduced and tight padding modes
        https://bugs.webkit.org/show_bug.cgi?id=167933
        <rdar://problem/30396994>

        Reviewed by Dean Jackson.

        The design specs for modern media controls mandate the following for inline media controls:

            - controls at or below 300pt width use a 12pt left margin for the left buttons container,
            and a 12pt right margin for the right buttons container, and 16pth button margin inside
            both containers ("reduced padding mode").

            - when dropping at or below 120pt width, controls use an 8pt left margin for
            the left buttons container, and an 8pt right margin for the right buttons container, and
            12pt button margin inside both containers and a shorter bar (25pt) ("compact mode").

            - in the case of audio controls, at 400pt or less, controls switch to 12pt margins and
            button margins for both buttons containers ("tight padding mode").

        The "compact" mode was already implemented as a dedicated MacOSInlineMediaControls subclass.
        Since we now have a more generic need to vary the metrics used for inline media controls on
        macOS, we add new features to MacOSInlineMediaControls to support varying metrics based on
        the controls' "layoutTraits" property.

        So MediaController is changed such that it knows to use the new TightPadding and ReducedPadding
        layout traits based on the conditions defined above, and _updateControlsIfNeeded() is changed
        to set the "layoutTraits" property on the controls whenever called, which in our case is most
        relevantly a "resize" event on the shadow root or a TrackEvent on the video tracks (to determine
        when we're possibly changing between a video and audio file).

        As a result, the "layoutTraits" setter is called on MacOSInlineMediaControls, which updates
        the metrics for the various buttons containers, but also notifies the buttons contained
        within that layout traits may have changed, since some buttons support a "compact" appearance
        that is shorter and require a different image file. To that end, IconButton has been updated
        so that it may be notified of a layout traits change through a new layoutTraitsDidChange()
        method, that checks whether the current layout traits differ from those last used when loading
        the icon.

        Tests: media/modern-media-controls/icon-button/icon-button-change-layout-traits.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-compact-buttons-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-compact-controls-bar-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-compact.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-reduced-padding.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-tight-padding.html
               media/modern-media-controls/media-controller/media-controller-compact.html
               media/modern-media-controls/media-controller/media-controller-reduced-padding.html
               media/modern-media-controls/media-controller/media-controller-tight-padding.html

        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype.set iconName):
        (IconButton.prototype.layoutTraitsDidChange):
        (IconButton.prototype._loadImage):
        * Modules/modern-media-controls/controls/layout-item.js:
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.js: Removed.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.get layoutTraits):
        (MacOSInlineMediaControls.prototype.set layoutTraits):
        (MacOSInlineMediaControls.prototype._matchLayoutTraits):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._controlsClassForLayoutTraits):
        (MediaController.prototype._shouldFadeBetweenControls): Deleted.
        (MediaController.prototype._controlsClass): Deleted.
        * WebCore.xcodeproj/project.pbxproj:

2017-02-08  Aakash Jain  <aakash_jain@apple.com>

        Move private methods from WKGraphics.h to a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=167996

        Reviewed by Alexey  Proskuryakov.

        * platform/ios/wak/WKGraphicsInternal.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Added WKGraphicsInternal.h
        * platform/ios/wak/WKGraphics.h: Moved methods to WKGraphicsInternal.h
        * platform/graphics/mac/GraphicsContextMac.mm: Included new header file.
        * platform/ios/wak/WKGraphics.mm: Same.

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

        Opt-out iBooks from synchronous willSendRequest on iOS.
        <rdar://problem/30129966> and https://bugs.webkit.org/show_bug.cgi?id=168006

        Reviewed by Brent Fulgham.

        No new tests (Not a testable behavior change at this time).

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled): iBooks never gets synchronous willSendRequest:

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

        Split JSDOMConstructor.h/cpp up by class
        https://bugs.webkit.org/show_bug.cgi?id=167958

        Reviewed by Tim Horton.

        Splits JSDOMConstructor up by class.
        - Renames DOMConstructorObject to JSDOMConstructorBase.
        - Renames DOMConstructorWithDocument to JSDOMConstructorWithDocument.
        - Renames DOMConstructorJSBuiltinObject to JSDOMBuiltinConstructorBase.
        - Renames JSBuiltinConstructor to JSDOMBuiltinConstructor.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files.

        * bindings/js/JSDOMBinding.h:
        (WebCore::propertyNameToString): Deleted.
        (WebCore::propertyNameToAtomicString): Deleted.
        * bindings/js/JSDOMBuiltinConstructor.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.
        * bindings/js/JSDOMBuiltinConstructorBase.cpp: Copied from Source/WebCore/bindings/js/JSDOMConstructor.cpp.
        * bindings/js/JSDOMBuiltinConstructorBase.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.
        * bindings/js/JSDOMConstructor.cpp: Removed.
        * bindings/js/JSDOMConstructor.h: Remove all classes other than JSDOMConstructor.
        * bindings/js/JSDOMConstructorBase.cpp: Copied from Source/WebCore/bindings/js/JSDOMConstructor.cpp.
        * bindings/js/JSDOMConstructorBase.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.
        * bindings/js/JSDOMConstructorNotConstructable.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.
        * bindings/js/JSDOMConstructorWithDocument.cpp: Copied from Source/WebCore/bindings/js/JSDOMConstructor.cpp.
        * bindings/js/JSDOMConstructorWithDocument.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.
        * bindings/js/JSDOMNamedConstructor.h: Copied from Source/WebCore/bindings/js/JSDOMConstructor.h.

        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::propertyNameToString):
        (WebCore::propertyNameToAtomicString):
        Move these here from JSDOMBinding.

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::constructJSMutationObserver):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSUserMessageHandlersNamespaceCustom.cpp:
        (WebCore::JSUserMessageHandlersNamespace::getOwnPropertySlotDelegate):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::constructJSWorker):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetConstructorTemplateClassName):
        (GenerateConstructorDeclaration):
        Update includes/names.

        * dom/StaticRange.cpp:
        (WebCore::StaticRange::~StaticRange):
        * dom/StaticRange.h:
        Add out-of-line destructor, so Node.h does not have to be included.

2017-02-08  Joseph Pecoraro  <pecoraro@apple.com>

        Initialize the main RunLoop in iOS WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=167953

        Reviewed by Alexey Proskuryakov.

        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):
        Initialize the main runloop on the main thread during iOS WebKit initialization.

2017-02-08  Aakash Jain  <aakash_jain@apple.com>

        Move private methods from WKContentObservation.h to a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=167998

        Reviewed by Alexey Proskuryakov.

        * WebCore.xcodeproj/project.pbxproj: Added WKContentObservationInternal.h
        * platform/ios/wak/WKContentObservationInternal.h: Added.
        * platform/ios/wak/WKContentObservation.h: Moved methods to WKContentObservationInternal.h
        * platform/ios/wak/WKContentObservation.cpp: Included new header file.
        * page/DOMTimer.cpp: Same.
        * page/DOMWindow.cpp: Same.
        * style/RenderTreeUpdater.cpp: Same.

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

        RTCPeerConnection constructor can take null as input
        https://bugs.webkit.org/show_bug.cgi?id=167992

        Reviewed by Chris Dumez.

        Covered by updated test.

        RTCPeerConnection takes an optional Dictionary as input.
        As per https://heycam.github.io/webidl/#es-dictionary, null is converted to an empty dictionary.

        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):

2017-02-08  Andreas Kling  <akling@apple.com>

        No need for CachedFrame to detach custom scrollbars.
        <https://webkit.org/b/167995>

        Reviewed by Sam Weinig.

        Custom scrollbars have already been torn down with the rest of the render tree
        by the time we're creating a CachedFrame.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

2017-02-08  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Fix printReason for unsupported overflow values.
        https://bugs.webkit.org/show_bug.cgi?id=168000

        Reviewed by Simon Fraser.

        Not testable.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::printReason):

2017-02-08  Aakash Jain  <aakash_jain@apple.com>

        Remove WebCoreObjCDeallocWithWebThreadLock from header file
        https://bugs.webkit.org/show_bug.cgi?id=167987

        Reviewed by Alexey Proskuryakov.

        * platform/ios/wak/WebCoreThread.mm: Added WebCoreObjCDeallocWithWebThreadLock.
        * platform/ios/wak/WebCoreThreadMessage.h: Removed WebCoreObjCDeallocWithWebThreadLock.

2017-02-08  Aakash Jain  <aakash_jain@apple.com>

        Move WKMouseInRect to WAKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=167989

        Reviewed by Alexey Proskuryakov.

        * platform/ios/wak/WAKAppKitStubs.h: Removed WKMouseInRect.
        * platform/ios/wak/WAKAppKitStubs.m:
        (WKMouseInRect): Deleted.
        * platform/ios/wak/WAKView.mm: 
        (-[WAKView mouse:inRect:]): Added the logic of WKMouseInRect here instead of separate function call.

2017-02-08  Aakash Jain  <aakash_jain@apple.com>

        Remove unused method WebCore::PluginData::pluginNameForMimeType
        https://bugs.webkit.org/show_bug.cgi?id=167986

        Reviewed by Anders Carlsson.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::pluginNameForWebVisibleMimeType): Deleted.
        * plugins/PluginData.h: Removed pluginNameForWebVisibleMimeType.

2017-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix translatable form validation messages
        https://bugs.webkit.org/show_bug.cgi?id=167984

        Reviewed by Michael Catanzaro.

        Most of them are just wrong. Use the same mesages than mac, which also makes some tests pass.

        Fixes: fast/forms/validation-message-maxLength.html
               fast/forms/validationMessage.html

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooShortText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageBadInputForNumberText):

2017-02-08  Chris Dumez  <cdumez@apple.com>

        Add support for enhanced privacy diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167948
        <rdar://problem/30385112>

        Reviewed by Antti Koivisto.

        Add new logDiagnosticMessageWithEnhancedPrivacy() method to DiagnosticLoggingClient
        that is used for enhanced privacy logging. Start using this new API to log domains
        that are visited.

        * loader/EmptyClients.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::logNavigation):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * page/DiagnosticLoggingClient.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::domainVisitedKey):
        * page/DiagnosticLoggingKeys.h:

2017-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Critical warnings when media player is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=167981

        Reviewed by Xabier Rodriguez-Calvar.

        It can happen that the source doesn't have a parent when we try to disconnect the element-added signal.

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

2017-02-08  Miguel Gomez  <magomez@igalia.com>

        [GTK] Reduce TiledBackingStore tile coverage when on memory pressure state
        https://bugs.webkit.org/show_bug.cgi?id=167980

        Reviewed by Carlos Garcia Campos.

        Use a smaller coverAreaMultiplier in the TiledBackingStore when in memory pressure situation, to reduce
        the amount of tiles created.

        No new tests.

        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTilesIfNeeded):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2017-02-08  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::remove()
        https://bugs.webkit.org/show_bug.cgi?id=167870

        Reviewed by Xabier Rodriguez-Calvar.

        Implement MediaKeySession::remove() as outlined in the specification.

        The CDMInstance::removeSessionData() virtual method is added. CDMInstance
        implementors should remove any session data stored for the session that's
        represented by the passed-in session ID and session type.

        Once the session data is removed, the passed-in callback should be invoked
        by the CDMInstance object so that MediaKeySession can immediately queue a
        task in which it updates key statuses and expiration, reject the promise if
        the data removal failed, or enqueue any license-release message and finally
        successfully resolve the promise.

        MockCDMFactory gains the removeKeysFromSessionWithID() method that purges
        the keys for a given session ID. The method is called from
        MockCDMInstance::removeSessionData() implementation, which passes the
        removed keys to the RemoveSessionDataCallback, along with a license-release
        message that is checked in the tests. The key removal itself isn't tested
        yet because the MediaKeySession's `update key statuses` algorithm isn't
        implemented yet.

        Test: media/encrypted-media/mock-MediaKeySession-remove.html

        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::remove):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::removeKeysFromSessionWithID):
        (WebCore::MockCDMInstance::removeSessionData):
        * testing/MockCDMFactory.h:

2017-02-08  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::close()
        https://bugs.webkit.org/show_bug.cgi?id=167869

        Reviewed by Xabier Rodriguez-Calvar.

        Implement MediaKeySession::close() as outlined in the specification.

        The CDMInstance::closeSession() virtual method, when called, should
        close the session that's represented by the passed-in session ID on
        the CDMInstance implementor object. That's the same session ID that
        the CDMInstance object passes to the MediaKeySession class through
        the callback that's provided to the updateLicense call.

        The CloseSessionCallback, passed to CDMInstance::closeSession(),
        should be invoked by the CDMInstance implementor once the session
        is closed. When that is invoked, another task is queued for the
        MediaKeySession object that runs the `session closed` algorithm
        and resolves the promise.

        MockCDMInstance::closeSession() is defined to remove the session
        from the MockCDMFactory object and invoke the CloseSessionCallback.

        Test: media/encrypted-media/mock-MediaKeySession-close.html

        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::close):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::closeSession):
        * testing/MockCDMFactory.h:

2017-02-08  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Alias CDMInstance enums to the specification-defined enums
        https://bugs.webkit.org/show_bug.cgi?id=167896

        Reviewed by Sam Weinig.

        Simplify the enums in the CDMInstance class by simply aliasing them
        to the EME specification-defined enums. CDMInstance::KeyStatus and
        CDMInstance::MessageType were already direct copies of the
        MediaKeyStatus and MediaKeyMessageType enums, while the
        CDMInstance::LicenseType had the members as MediaKeySessionType,
        but with slightly different names.

        No changes in behavior.

        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::update):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::requestLicense):

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

        REGRESSION(r210740): [GTK] 2.15 broke embedded videos in GNOME's yelp app
        https://bugs.webkit.org/show_bug.cgi?id=167887

        Reviewed by Michael Catanzaro.

        Update the m_renderingCanBeAccelerated when accelerated rendering state changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

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

        [GTK] Handle extended colors in cairo and texture mapper backends
        https://bugs.webkit.org/show_bug.cgi?id=167943

        Reviewed by Michael Catanzaro.

        Fixes: css3/color/backgrounds-and-borders.html
               css3/color/box-shadows.html
               css3/color/canvas.html
               css3/color/composited-solid-backgrounds.html
               css3/color/text.html

        * platform/graphics/Color.cpp:
        (WebCore::premultipliedARGBFromColor): Handle the case of color being extended.
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::setSourceRGBAFromColor): Ditto.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::fillRectWithColor): Use isVisible() instead of alpha().
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA): Handle the case of color being extended.
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawNumber): Ditto.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::blendWithOpacity): Ditto.
        (WebCore::TextureMapperLayer::paintSelf): Use isVisible() instead of alpha().
        (WebCore::TextureMapperLayer::computeOverlapRegions): Ditto.

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

        WebItemProviderPasteboard should use -registerLoadHandlersToItemProvider: when creating a new UIItemProvider
        https://bugs.webkit.org/show_bug.cgi?id=167918
        <rdar://problem/30382347>

        Reviewed by Tim Horton.

        Adopts SPI in WebItemProviderPasteboard for object types that the platform knows how to serialize. Since we use
        -createObjectOfClass: to initialize data when reading off of the pasteboard, we need to match the format that
        objects conforming to UIItemProviderReading will expect. Thus, for all given objects that conform to
        UIItemProviderWriting, we have them register themselves to the item provider.

        We register other UTI types due to the fact that PlatformPasteboardIOS does not care about the specific
        pasteboard used. This should not be necessary, however, since data written to the WebItemProviderPasteboard
        should never need to be read by an actual UIPasteboard. This will be refactored in a future patch to add a
        special type of WebItemProviderPasteboard-aware PlatformPasteboard.

        Also fixes some reference counting issues in WebItemProviderPasteboard by changing the array of _itemProviders
        to be a RetainPtr.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard pasteboardTypes]):
        (-[WebItemProviderPasteboard itemProviders]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard numberOfItems]):
        (-[WebItemProviderPasteboard setItems:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard itemProviderAtIndex:]):
        (-[WebItemProviderPasteboard dealloc]): Deleted.

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

        WebContent process repeatedly jetsams on BuzzFeed's Another Round page
        https://bugs.webkit.org/show_bug.cgi?id=167830
        <rdar://problem/30187368>

        Reviewed by Simon Fraser.

        The jetsams on https://www.buzzfeed.com/anotherround were caused by WebKit creating the backing store
        for every iframe's layer on the page regardless of whether they're in the viewport or not.

        This was caused by GraphicsLayerCA's setVisibleAndCoverageRects not setting CoverageRectChanged on
        m_uncommittedChanges on the very first call. Fixed the bug by initializing m_uncommittedChanges
        to always have CoverageRectChanged so that the coverage rect would get updated properly.

        Unfortunately, no new tests since somehow the backing store doesn't get created inside the test runner.

        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA):

2017-02-07  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] LibWebRTCEndpoint should not own objects that should be destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=167816

        Reviewed by Alex Christensen.

        Tests: webrtc/libwebrtc/release-while-creating-offer.html
               webrtc/libwebrtc/release-while-getting-stats.html
               webrtc/libwebrtc/release-while-setting-local-description.html

        Moving AV sources, stats promises, ICE candidates from LibWebRTCEndpoint to LibWebRTCPeerConnectionBackend.
        This allows ensuring these are destroyed in the main thread.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::getStats):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::StatsCollector):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::addIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::isStopped):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::~LibWebRTCPeerConnectionBackend):
        (WebCore::LibWebRTCPeerConnectionBackend::getStats):
        (WebCore::LibWebRTCPeerConnectionBackend::iceCandidateSucceeded):
        (WebCore::LibWebRTCPeerConnectionBackend::iceCandidateFailed):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetRemoteDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        (WebCore::LibWebRTCPeerConnectionBackend::addAudioSource):
        (WebCore::LibWebRTCPeerConnectionBackend::addVideoSource):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer):
        (WebCore::releaseInNetworkThread):
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer::CreateOffer):
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats):
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats::GetStats):
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription):
        (WebCore::MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
        * testing/MockLibWebRTCPeerConnection.h:

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

        [Win] [GTK] [EFL] Compile (but don't use, yet) the platform-independent piece of ComplexTextController
        https://bugs.webkit.org/show_bug.cgi?id=167927

        Reviewed by Brent Fulgham.

        This patch simply moves some functions around to enable the Win, GTK, and EFL ports to compile the
        platform-independent pieces of ComplexTextController. Those parts of ComplexTextController have
        some dependencies which were previously only available on the Cocoa ports; however, those
        dependencies are easily created or moved from elsewhere. The next step is to populate the
        ComplexTextController::collectComplexTextRunsForCharacters() function for DirectWrite and HarfBuzz.
        Once that is done, UniscribeController and HarfBuzzShaper can be deleted.

        Adds ComplexTextController TestWebKitAPI tests to the Win and GTK ports.

        * CMakeLists.txt: Everyone can compile the platform-independent piece of ComplexTextController.
        * PlatformEfl.cmake: Add the HarfBuzz-specific piece.
        * PlatformGTK.cmake: Ditto.
        * PlatformWin.cmake: Add the DirectWrite-specific piece.
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::TextLayoutDeleter::operator()): ComplexTextController shouldn't be enabled yet for Win,
        GTK, or EFL.
        (WebCore::FontCascade::createLayout): Ditto.
        (WebCore::FontCascade::width): Ditto.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Moved shared code to the shared
        file.
        * platform/graphics/Font.cpp:
        (WebCore::Font::noSynthesizableFeaturesFont): Default implementation for other ports.
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis): Ditto.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence): Ditto.
        (WebCore::FontCascade::drawEmphasisMarksForComplexText): Ditto.
        (WebCore::FontCascade::createLayout): Deleted. Moved to ComplexTextController.
        (WebCore::TextLayoutDeleter::operator()): Deleted. Ditto.
        * platform/graphics/FontCascade.h: fontForCombiningCharacterSequence() should exist on all ports.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::drawEmphasisMarksForComplexText): Deleted. Shared among all ports.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawEmphasisMarksForComplexText): Deleted. Ditto.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp: Added.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Empty implementation of
        HarfBuzz-specific piece of ComplexTextController.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm: Moved constructors to shared file.
        * platform/graphics/win/ComplexTextControllerDirectWrite.cpp: Added.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Empty implementation of
        Direct Write-specific piece of ComplexTextController.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::FontCascade::drawEmphasisMarksForComplexText): Deleted. Shared among all ports.

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

        Revert r166597
        https://bugs.webkit.org/show_bug.cgi?id=167951

        Reviewed by Andreas Kling.

        * platform/spi/cf/CFNetworkSPI.h:
        Remove now-unused SPI declaration.

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

        Try to fix the windows build.

        * bindings/js/ReadableStreamDefaultController.cpp:

2017-02-07  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] LibWebRTC WK2 network stack is not providing correct ports for ICE candidates
        https://bugs.webkit.org/show_bug.cgi?id=167939

        Reviewed by Sam Weinig.

        Test: webrtc/no-port-zero-in-upd-candidates.html

        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory): Adding a way to create one real PC in WTR environment.

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

        Update bindings tests results for additional include.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:

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

        Try to fix the windows build.

        * bindings/js/JSDOMConvertNumbers.h:

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

        Fix libwebrtc build after r211728
        https://bugs.webkit.org/show_bug.cgi?id=167821

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::processNewSample):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSource::sourceHasMoreMediaData): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        (WebCore::RealtimeOutgoingVideoSource::sourceHasMoreMediaData): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-02-07  Tim Horton  <timothy_horton@apple.com>

        Remove accidentally-added (in r211409) patch reject file

        * bindings/scripts/test/JS/JSTestSerialization.cpp.rej: Removed.

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

        JSDOMConvert is too big. Split it up!
        https://bugs.webkit.org/show_bug.cgi?id=167806

        Rubber-stamped by Geoff Garen.

        Split JSDOMConvert up roughly by IDL type. Some are grouped for convenience, e.g. all the
        string types are together, all the numeric types are together. Also moved helpers from 
        JSDOMBinding to their respective JSDOMConvertFoo header. For now, JSDOMConvert.h as an
        umbrella of all the sub headers, but it will be removed, and the code generator taught
        to include the right header in a subsequent patch.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/IDBBindingUtilities.h:
        Remove toJS that takes a std::optional<IDBKeyPath>, it was unused, and update date code
        to only call valueToDate once, and pass things by reference.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        Move most of the conversion helpers into their respective JSDOMConvertFoo header.

        * bindings/js/JSDOMConvert.h:
        Leave for now, just has includes of all the broken out headers.

        * bindings/js/JSDOMConvertAny.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertBase.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertBoolean.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertBufferSource.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertCallbacks.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertDate.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMConvertDate.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertDictionary.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertEnumeration.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertEventListener.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertIndexedDB.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertInterface.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertJSON.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertNull.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertNullable.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertNumbers.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMConvertNumbers.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertObject.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertRecord.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertSequences.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertSerializedScriptValue.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertStrings.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMConvertStrings.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertUnion.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertVariadic.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertWebGL.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.
        * bindings/js/JSDOMConvertXPathNSResolver.h: Copied from Source/WebCore/bindings/js/JSDOMConvert.h.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        Add include of JSDOMConvertVariadic.h rather than JSDOMConvert.

        * bindings/js/JSCryptoCustom.cpp:
        * bindings/js/JSCryptoOperationData.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * bindings/js/WebCoreTypedArrayController.cpp:
        * html/canvas/WebGLAny.cpp:
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        Add includes for specific JSDOMConvert header now that helpers have 
        been moved their from JSDOMBinding.h

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

        Remove unnecessary exports on inline functions. They were causing build failures
        with some compilers.

        * Modules/mediasource/SampleMap.h:
        (WebCore::PresentationOrderSampleMap::begin):
        (WebCore::PresentationOrderSampleMap::end):
        (WebCore::PresentationOrderSampleMap::rbegin):
        (WebCore::PresentationOrderSampleMap::rend):
        (WebCore::DecodeOrderSampleMap::begin):
        (WebCore::DecodeOrderSampleMap::end):
        (WebCore::DecodeOrderSampleMap::rbegin):
        (WebCore::DecodeOrderSampleMap::rend):
        (WebCore::SampleMap::sizeInBytes):
        (WebCore::SampleMap::decodeOrder):
        (WebCore::SampleMap::presentationOrder):
        (WebCore::SampleMap::addRange):
        (WebCore::SampleMap::SampleMap): Deleted.

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

        Unreviewed, manual roll out of r211777
        https://bugs.webkit.org/show_bug.cgi?id=167457

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::importModule):

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

        [GStreamer] Deadlock when media player is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=167861

        Reviewed by Michael Catanzaro.

        The problem is that we are calling notifyOne() for the draw mutex without taking the lock.

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

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

        MediaSourceClientGStreamerMSE: wrap FastMalloc-ed memory into pipeline-bound GstBuffers
        https://bugs.webkit.org/show_bug.cgi?id=167928

        Reviewed by Xabier Rodriguez-Calvar.

        The buffers created in MediaSourceClientGStreamerMSE can be large enough in size
        that repetitive allocations can cause larger heap fragmentation in different libc
        allocators. To avoid that occurrence, we should simply use FastMalloc to allocate
        memory for these buffers.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append):

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

        [Modern Media Controls] Handle media durations of an hour or more gracefully
        https://bugs.webkit.org/show_bug.cgi?id=167882
        <rdar://problem/29601260>

        Reviewed by Eric Carlson.

        We add a new "labelsMayDisplayTimesOverAnHour" to TimeControl so that time labels
        to the left and right of the scrubber may have extra room to display to account for
        the extra "xx:" characters that may appear. We don't lay the time out dynamically
        such that we don't see layout jumps as the times shown in the labels go around
        the hour mark.

        We also refactor the ElapsedTimeSupport and RemainingTimeSupport in a single
        TimeLabelsSupport class which updates both elapsed and remaining time labels
        and sets the "labelsMayDisplayTimesOverAnHour" on the TimeControl should a
        "durationchange" happen to make the media duration reach or go past the hour mark.

        Tests: http/tests/media/modern-media-controls/time-labels-support/long-time.html
               media/modern-media-controls/time-control/time-control-labels-may-display-times-over-an-hour.html
               media/modern-media-controls/time-labels-support/elapsed-time.html
               media/modern-media-controls/time-labels-support/remaining-time.html

        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.get labelsMayDisplayTimesOverAnHour):
        (TimeControl.prototype.set labelsMayDisplayTimesOverAnHour):
        (TimeControl.prototype.set width):
        * Modules/modern-media-controls/controls/time-label.css:
        (.time-label):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/elapsed-time-support.js: Removed.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):
        * Modules/modern-media-controls/media/time-labels-support.js: Renamed from Source/WebCore/Modules/modern-media-controls/media/remaining-time-support.js.
        (TimeLabelsSupport.prototype.get control):
        (TimeLabelsSupport.prototype.syncControl):
        (TimeLabelsSupport):
        * WebCore.xcodeproj/project.pbxproj:

2017-02-06  Per Arne Vollan  <pvollan@apple.com>

        Read stroke width of subtitles from MediaAccessibility framework.
        https://bugs.webkit.org/show_bug.cgi?id=167871
        <rdar://problem/29265906>

        Reviewed by Brent Fulgham.

        Read MACaptionFontAttributeStrokeWidth from CTFontDescriptorRef.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::strokeWidth):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):
        * page/CaptionUserPreferencesMediaAF.h:
        * platform/cf/MediaAccessibilitySoftLink.cpp:
        * platform/cf/MediaAccessibilitySoftLink.h:

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

        [Modern Media Controls] Improve handling of <video> with only audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=167836
        <rdar://problem/30255812>

        Reviewed by Dean Jackson.

        We now check for the availability of video tracks before considering a <video>
        element is displaying an actual video file and turning auto-hide on. We also
        check that we have video tracks before enabling the fullscreen button. This
        brings the behavior of a <video> pointing to a resource with no video tracks
        to be the same as an <audio> element.

        Test: media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get tracksToMonitor):
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):

2017-02-07  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableByteStreamController enqueue()
        https://bugs.webkit.org/show_bug.cgi?id=167786

        Reviewed by Youenn Fablet.

        Implemented ReadableByteStreamController enqueue() method. Also replaced
        @queue by an Array instead of a dedicated queue object (said object is
        useful for ReadableStreamDefaultController, but not for ReadableByteStreamController).

        Added 8 tests to cover newly added code as well as code that was previously unreachable.

        * Modules/streams/ReadableByteStreamController.js:
        (enqueue): Implemented as defined by spec.
        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Updated @queue.
        (readableByteStreamControllerCancel): Updated @queue.
        (readableByteStreamControllerError): Updated @queue.
        (readableByteStreamControllerPull): Updated @queue.
        (readableByteStreamControllerEnqueue): Added.
        (readableByteStreamControllerEnqueueChunkToQueue): Added.
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamFulfillReadRequest): Added (used at different places).

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

        Object.preventExtensions() on a Location object should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=167917

        Reviewed by Alex Christensen.

        Object.preventExtensions() on a Location object should throw a TypeError:
        - https://html.spec.whatwg.org/#location-preventextensions
        - https://www.ecma-international.org/ecma-262/7.0/index.html#sec-object.preventextensions

        Firefox already implements this.

        No new tests, rebaselined existing tests.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::preventExtensions):

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

        Web Inspector: allow import() inside the inspector
        https://bugs.webkit.org/show_bug.cgi?id=167457

        Reviewed by Ryosuke Niwa.

        When evaluating `import("...")`, we need the caller's context to resolve
        the module specifier correctly. For example, if `import("./cocoa.js")` is
        evaluated in the script "drinks/hot.js", this module name is resolved to
        "drinks/cocoa.js". If the same import operator is evaluated in the script
        "menu/all.js", the module specifier becomes "menu/cocoa.js".

        Previously we reject the import operator if the caller does not have such
        a context. These context is SourceOrigin and its ScriptFetcher. While they
        are offered in the script tag and other code evaluations, the inspector
        console does not offer that. These class are offered in the WebCore side
        and we should not touch these classes in the JSC's inspector code.

        Now we relax the above restriction. If the above caller information is not
        offered, we fallback to the default one. In the web page, we use the page's
        URL as the caller's source origin. This allows us to evaluate the import
        operator in the inspector console.

        And as of r167698, the console recognizes `await import("...")` form. We use
        this to test this `import()` in the console functionality.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::importModule):

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

        Move platform-independent parts of ComplexTextController out of mac/ subfolder
        https://bugs.webkit.org/show_bug.cgi?id=167922

        Reviewed by Jon Lee.

        Just a mechanical git mv, and updating the Xcode projects.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ComplexTextController.cpp: Renamed from Source/WebCore/platform/graphics/mac/ComplexTextController.cpp.
        * platform/graphics/ComplexTextController.h: Renamed from Source/WebCore/platform/graphics/mac/ComplexTextController.h.

2017-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Overlay scrolling with iframe-s broken
        https://bugs.webkit.org/show_bug.cgi?id=165056

        Reviewed by Antonio Gomes.

        Mouse press events for overlay scrollbars are ignored if there's a subframe under the scrollbar. This doesn't
        happen with normal scrollbars, because the subframe is not really under the scrollbar, so events are always
        correctly passed to the scrollbar. With overlay scrollbars, the hit test detects the scrollbar, but events are
        always passed first to the subframe. Scrollbars are correctly updated on hover though, because
        handleMouseMoveEvent checks the presence of scrollbars before checking for subframes and move events are
        actually passed to both, the scrollbar and the subframe. Overlay scrollbars should always take precedence over
        subframes to handle mouse press events, so we should check first if mouse is over a scrollbar and never pass the
        event to a subframe in that case. Another problem is that the cursor is not updated either when the overlay
        scrollbar is hovered and there's a subframe. This is because in handleMouseMoveEvent we pass the event to both
        the scrollbar and subframe but we never update the cursor when a suframe was found. So, here again we need to make
        an exception for scrollbars and upate the cursor when mouse is over the scrollbar even if a subframe was found.

        Test: fast/scrolling/scroll-animator-overlay-scrollbars-clicked.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): Move the scrollbar check before the subframe check.
        (WebCore::EventHandler::handleMouseMoveEvent): Update the cursor when hovering a scrollbar even if a subframe
        was found.
        (WebCore::EventHandler::updateLastScrollbarUnderMouse): Use an enum instead of a boolean for setLast parameter.
        * page/EventHandler.h:

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

        Symbols exposed on cross-origin Window / Location objects should be configurable
        https://bugs.webkit.org/show_bug.cgi?id=167920

        Reviewed by Ryosuke Niwa.

        Symbols exposed on cross-origin Window / Location objects should be configurable:
        - https://html.spec.whatwg.org/#crossorigingetownpropertyhelper-(-o,-p-) (Step 1)

        Firefox behaves as per specification.

        No new tests, rebaselined existing test.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):

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

        Web Inspector: Do not use RunLoop when dispatching inspector GC event
        https://bugs.webkit.org/show_bug.cgi?id=167683
        <rdar://problem/30167791>

        Reviewed by Brian Burg.

        Covered by existing tests.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new file.

        * inspector/PageHeapAgent.cpp:
        (WebCore::PageHeapAgent::PageHeapAgent):
        (WebCore::PageHeapAgent::enable):
        (WebCore::PageHeapAgent::disable):
        * inspector/PageHeapAgent.h:
        Extend WebHeapAgent.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Use WebHeapAgent.

        * inspector/WebHeapAgent.cpp: Added.
        (WebCore::SendGarbageCollectionEventsTask::SendGarbageCollectionEventsTask):
        (WebCore::SendGarbageCollectionEventsTask::addGarbageCollection):
        (WebCore::SendGarbageCollectionEventsTask::reset):
        (WebCore::SendGarbageCollectionEventsTask::timerFired):
        (WebCore::WebHeapAgent::WebHeapAgent):
        (WebCore::WebHeapAgent::~WebHeapAgent):
        (WebCore::WebHeapAgent::disable):
        (WebCore::WebHeapAgent::dispatchGarbageCollectedEvent):
        (WebCore::WebHeapAgent::dispatchGarbageCollectionEventsAfterDelay):
        * inspector/WebHeapAgent.h:
        Move the defered event dispatch from InspectorHeapAgent here where a RunLoop is guarenteed.

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

        ExtendedColor leaks seen on leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=167912

        Reviewed by Alexey Proskuryakov.

        * platform/graphics/Color.cpp:
        (WebCore::Color::operator=):
        Before overwriting m_colorData, we must deref the extended color inside it.

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

        Re-land r210095 (avoid a tile revalidation on scale change)
        https://bugs.webkit.org/show_bug.cgi?id=167866

        Reviewed by Tim Horton.
        
        r210095 was rolled out in r211230 but now that all TileControllers unparent
        offscreen tiles, we can roll it back it.
        
        Also add more Tiling logging.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::validationPolicyAsString):
        (WebCore::TileGrid::setScale):
        (WebCore::TileGrid::prepopulateRect):
        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::ensureTilesForRect):

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

        Migrate ComplexTextController to use platform-independent types
        https://bugs.webkit.org/show_bug.cgi?id=167833

        Reviewed by Brent Fulgham.

        ComplexTextController will eventually be used on all ports to perform complex text layout.
        This is a mechanical patch which migrates the shared parts of ComplexTextController away from
        using CoreGraphics and CoreFoundation types in favor of WebCore/platform types. Eventually,
        ComplexTextController will get moved to PAL but there is a layering violation (TextLayout) to
        fix first.

        No new tests because there is no behavior change.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBufferAdvance::GlyphBufferAdvance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::advanceByCombiningCharacterSequence):
        (WebCore::ComplexTextController::ComplexTextRun::indexAt):
        (WebCore::ComplexTextController::ComplexTextRun::setIsNonMonotonic):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        (WebCore::ComplexTextController::ComplexTextRun::stringLength):
        (WebCore::ComplexTextController::ComplexTextRun::indexBegin):
        (WebCore::ComplexTextController::ComplexTextRun::indexEnd):
        (WebCore::ComplexTextController::ComplexTextRun::endOffsetAt):
        (WebCore::ComplexTextController::ComplexTextRun::glyphs):
        (WebCore::ComplexTextController::ComplexTextRun::growInitialAdvanceHorizontally):
        (WebCore::ComplexTextController::ComplexTextRun::initialAdvance):
        (WebCore::ComplexTextController::ComplexTextRun::baseAdvances):
        (WebCore::ComplexTextController::ComplexTextRun::glyphOrigins):
        (WebCore::ComplexTextController::glyphOrigin):
        (WebCore::ComplexTextController::ComplexTextRun::createForTesting): Deleted.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (SOFT_LINK):
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2017-02-06  Brent Fulgham  <bfulgham@apple.com>

        Correct File Path Handling in SecurityOrigin and FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=167894
        <rdar://problem/30380080>

        Reviewed by Alexey Proskuryakov.

        Roll out the URL decoding being done in the FileSystem class (added in Bug 167894), and instead ensure that
        SecurityOrigin properly handles file URLs, and only passes valid file strings to the FileSystem interface.

        Tested by FileSystemTests and SecurityOriginTests in TestWebKitAPI.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Initialize m_filePath using the url's fileSystemPath, not
        the %-encoded 'path' property.
        (WebCore::SecurityOrigin::canDisplay): Pass the 'fileSystemPath' to 'filesHaveSameVolume', rather than
        the %-encoded 'path' property.
        * page/SecurityOrigin.h:
        * platform/FileSystem.cpp:
        (WebCore::filesHaveSameVolume): Do not use 'decodeURLEscapeSequences' in 'filesHaveSameVolume'.

2017-02-06  Andy Estes  <aestes@apple.com>

        [Cocoa] Split FileSystemMac.mm into Mac and Cocoa parts
        https://bugs.webkit.org/show_bug.cgi?id=167908

        Reviewed by Sam Weinig.

        Kept the Mac-only functions in FileSystemMac.mm and moved the rest into FileSystemCocoa.mm.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/FileSystemCocoa.mm: Copied from Source/WebCore/platform/mac/FileSystemMac.mm.
        * platform/mac/FileSystemMac.mm:
        (-[WebFileManagerDelegate fileManager:shouldProceedAfterError:movingItemAtURL:toURL:]): Moved to FileSystemCocoa.mm.
        (WebCore::homeDirectoryPath): Ditto.
        (WebCore::openTemporaryFile): Ditto.
        (WebCore::moveFile): Ditto.
        (WebCore::getVolumeFreeSpace): Ditto.

2017-02-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] Remove some unused code
        https://bugs.webkit.org/show_bug.cgi?id=167913

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * platform/mediastream/CaptureDeviceManager.h:
        (WebCore::CaptureSessionInfo::~CaptureSessionInfo): Deleted.
        (WebCore::CaptureSessionInfo::supportsVideoSize): Deleted.
        (WebCore::CaptureSessionInfo::bestSessionPresetForVideoDimensions): Deleted.
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::refreshCaptureDeviceList):
        (WebCore::AVCaptureSessionInfo::AVCaptureSessionInfo): Deleted.
        (WebCore::AVCaptureSessionInfo::supportsVideoSize): Deleted.
        (WebCore::AVCaptureSessionInfo::bestSessionPresetForVideoDimensions): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):

2017-02-06  Youenn Fablet  <youennf@gmail.com>

        Allow some schemes to opt-out of CORS
        https://bugs.webkit.org/show_bug.cgi?id=167795

        Reviewed by Alex Christensen.

        Test: http/tests/security/bypassing-cors-checks-for-extension-urls.html

        Adding the possibility to opt out of CORS for DocumentThreadableLoader clients (fetch and XHR).
        This is made specific to the case of user extension URLs for pages running user scripts.
        Introducing a boolean flag in Page for that purpose.
        Introducing a helper routine in SchemeRegistry to centralize the various user script extension schemes.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/Page.h:
        (WebCore::Page::setAsRunningUserScripts):
        (WebCore::Page::isRunningUserScripts):
        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::isUserExtensionScheme):
        * platform/SchemeRegistry.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setAsRunningUserScripts):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Align [[OwnPropertyKeys]] with the HTML specification for cross-origin Window / Location objects
        https://bugs.webkit.org/show_bug.cgi?id=167647
        <rdar://problem/30339489>

        Reviewed by Sam Weinig.

        Align [[OwnPropertyKeys]] with the HTML specification for cross-origin Window / Location objects:
        - https://html.spec.whatwg.org/#windowproxy-ownpropertykeys [1]
        - https://html.spec.whatwg.org/#crossoriginownpropertykeys-(-o-) [2]
        - https://html.spec.whatwg.org/#crossoriginproperties-(-o-) [3]

        In particular, the following changes were made:
        - Location:
          - We now return the following symbols as well: @@toStringTag, @@hasInstance,
            @@isConcatSpreadable as per [2].
        - Window:
          - We now return the following symbols as well: @@toStringTag, @@hasInstance,
            @@isConcatSpreadable as per [2].
          - We now return the indices of the child browsing contexts as per [1].
          - We now return the names of the child browsing contexts as per [3].

        No new tests, updated / rebaselined existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        Index properties should be configurable as per:
        - https://html.spec.whatwg.org/#windowproxy-getownproperty (step 2.5)

        (WebCore::inScope):
        (WebCore::addScopedChildrenNames):
        (WebCore::addCrossOriginPropertyNames):
        (WebCore::addScopedChildrenIndexes):
        (WebCore::addCrossOriginOwnPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::addCrossOriginPropertyNames):
        (WebCore::addCrossOriginOwnPropertyNames):
        (WebCore::JSLocation::getOwnPropertyNames):

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

        http/tests/preload/dynamic_removing_preload.html fails to test what it should
        https://bugs.webkit.org/show_bug.cgi?id=167792

        Reviewed by Ryosuke Niwa.

        Cancel the link preload resource load when the link element is removed from the DOM.

        No new tests, but unskipping an existing test: http/tests/preload/dynamic_removing_preload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom): Call m_linkLoader.cancelLoad().
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::cancelLoad): Clear m_preloadResourceClient.
        * loader/LinkLoader.h:
        * loader/LinkPreloadResourceClients.h:
        (WebCore::LinkPreloadResourceClient::clearResource): Call m_resource->cancelLoad().
        * loader/SubresourceLoader.cpp:
        (WebCore::LinkPreloadResourceClient::didFinishLoading): Change ASSERT to exempt cancelled loads.

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

        More build fixes after r211751
        https://bugs.webkit.org/show_bug.cgi?id=166998

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::applyAuthenticationToRequest):
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):

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

        Fix non-cocoa builds after r211751.
        https://bugs.webkit.org/show_bug.cgi?id=166998

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::applyAuthenticationToRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):

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

        credentials should be partitioned by main document domain
        https://bugs.webkit.org/show_bug.cgi?id=166998
        rdar://problem/22901123

        Reviewed by Brady Eidson.

        Covered by http/tests/security/credentials-iframes.html
        Also added http/tests/security/credentials-from-different-domains.html to verify existing behavior without iframes.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * dom/Document.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::domainForCachePartition):
        Return emptyString instead of a null String because it is used as a key in a HashMap, and hashing null strings dereferences null.
        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createSocketStreamHandle):
        * page/SocketProvider.h:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::get):
        (WebCore::CredentialStorage::remove):
        * platform/network/CredentialStorage.h:
        Partition credentials.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        (WebCore::SocketStreamHandleImpl::getStoredCONNECTProxyCredentials):
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/soup/SocketStreamHandleImpl.h:

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

        Safari pages are blank sometimes (missing tiles)
        https://bugs.webkit.org/show_bug.cgi?id=167904

        Reviewed by Tim Horton.

        After r211683 we failed to udpate the "inWindow" flag on the page tiled layer, because
        usingTiledBacking() on GraphicsLayer confusingly was false for the page tiled layer.

        Fix by removing usingTiledBacking() entirely, and checking for tiledBacking(),
        looking at the layer type when necessary.

        Tested by tiled-drawing/tiled-backing-in-window.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): This is the bug fix.
        (WebCore::GraphicsLayer::getDebugBorderInfo):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::usingTiledBacking): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::willDestroyLayer):
        (WebCore::RenderLayerBacking::compositingLayerType):
        * rendering/RenderLayerCompositor.cpp: A bit more logging.
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::attachRootLayer):

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

        Change the CSS animation timer a to be little more than 60fps to ensure we hit that frame rate
        https://bugs.webkit.org/show_bug.cgi?id=167825

        Reviewed by Simon Fraser.

        The system timer fires little bit slower than 60fps. This might cause the
        frame to be missed and hence it can lower the frame rate significantly. The
        rAF timer was set to 15ms for the same reason. So set the repeated CSS
        animation timer also to 15ms.

        * page/animation/CSSAnimationController.cpp:

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

        Playback stalls when a SourceBuffer append causes frame eviction
        https://bugs.webkit.org/show_bug.cgi?id=167834

        Reviewed by Eric Carlson.

        Test: PerformanceTests/Media/MSERemoveCodedFrames.html

        Optimize searching through SampleMap by presentationTime.

        Many of the methods exposed by PresentationOrderSampleMap used the bare  std::equal_range,
        lower_bound, or upper_bound methods. Unlike those methods exposed on std::map, the bare
        search methods perform a linear O(n) search, rather than a the binary O(log(n)) search used
        by std::map. Rewrite those methods using the bare methods in terms of the std::map search
        methods.

        Drive-by fix: rename findSampleOnOrAfterPresentationTime to
        findSampleStartingOnOrAfterPresentationTime to make the behavior of the method more
        explicit.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSampleContainingPresentationTime):
        (WebCore::PresentationOrderSampleMap::findSampleStartingOnOrAfterPresentationTime):
        (WebCore::PresentationOrderSampleMap::reverseFindSampleBeforePresentationTime):
        (WebCore::DecodeOrderSampleMap::findSyncSampleAfterPresentationTime):
        (WebCore::PresentationOrderSampleMap::findSamplesBetweenPresentationTimes):
        (WebCore::PresentationOrderSampleMap::findSamplesWithinPresentationRange):
        (WebCore::PresentationOrderSampleMap::findSampleOnOrAfterPresentationTime): Deleted.
        * Modules/mediasource/SampleMap.h:
        (WebCore::PresentationOrderSampleMap::begin):
        (WebCore::PresentationOrderSampleMap::end):
        (WebCore::PresentationOrderSampleMap::rbegin):
        (WebCore::PresentationOrderSampleMap::rend):
        (WebCore::DecodeOrderSampleMap::begin):
        (WebCore::DecodeOrderSampleMap::end):
        (WebCore::DecodeOrderSampleMap::rbegin):
        (WebCore::DecodeOrderSampleMap::rend):
        (WebCore::SampleMap::SampleMap):
        (WebCore::SampleMap::sizeInBytes):
        (WebCore::SampleMap::decodeOrder):
        (WebCore::SampleMap::presentationOrder):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::removeSamplesFromTrackBuffer):
        (WebCore::SourceBuffer::removeCodedFrames):
        (WebCore::SourceBuffer::reenqueueMediaForTime):
        * WebCore.xcodeproj/project.pbxproj:

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

        Rename AnimationController to CSSAnimationController
        https://bugs.webkit.org/show_bug.cgi?id=167829

        Reviewed by Simon Fraser.

        AnimationController is a very generic name. The current function of this
        class is CSS animation.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * dom/Document.cpp:
        * history/CachedFrame.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        (WebCore::Frame::animation):
        * page/FrameView.cpp:
        * page/Page.cpp:
        * page/animation/AnimationBase.cpp:
        * page/animation/CSSAnimationController.cpp: Renamed from Source/WebCore/page/animation/AnimationController.cpp.
        (WebCore::AnimationPrivateUpdateBlock::AnimationPrivateUpdateBlock):
        (WebCore::AnimationPrivateUpdateBlock::~AnimationPrivateUpdateBlock):
        (WebCore::CSSAnimationControllerPrivate::CSSAnimationControllerPrivate):
        (WebCore::CSSAnimationControllerPrivate::~CSSAnimationControllerPrivate):
        (WebCore::CSSAnimationControllerPrivate::ensureCompositeAnimation):
        (WebCore::CSSAnimationControllerPrivate::clear):
        (WebCore::CSSAnimationControllerPrivate::updateAnimations):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimer):
        (WebCore::CSSAnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::CSSAnimationControllerPrivate::fireEventsAndUpdateStyle):
        (WebCore::CSSAnimationControllerPrivate::startUpdateStyleIfNeededDispatcher):
        (WebCore::CSSAnimationControllerPrivate::addEventToDispatch):
        (WebCore::CSSAnimationControllerPrivate::addElementChangeToDispatch):
        (WebCore::CSSAnimationControllerPrivate::animationFrameCallbackFired):
        (WebCore::CSSAnimationControllerPrivate::animationTimerFired):
        (WebCore::CSSAnimationControllerPrivate::isRunningAnimationOnRenderer):
        (WebCore::CSSAnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::CSSAnimationControllerPrivate::suspendAnimations):
        (WebCore::CSSAnimationControllerPrivate::resumeAnimations):
        (WebCore::CSSAnimationControllerPrivate::animationsAreSuspendedForDocument):
        (WebCore::CSSAnimationControllerPrivate::detachFromDocument):
        (WebCore::CSSAnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::CSSAnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::CSSAnimationControllerPrivate::startAnimationsIfNotSuspended):
        (WebCore::CSSAnimationControllerPrivate::setAllowsNewAnimationsWhileSuspended):
        (WebCore::CSSAnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::CSSAnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::CSSAnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::CSSAnimationControllerPrivate::beginAnimationUpdate):
        (WebCore::CSSAnimationControllerPrivate::endAnimationUpdate):
        (WebCore::CSSAnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::CSSAnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::CSSAnimationControllerPrivate::computeExtentOfAnimation):
        (WebCore::CSSAnimationControllerPrivate::numberOfActiveAnimations):
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsWaitingForStyle):
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsWaitingForStyle):
        (WebCore::CSSAnimationControllerPrivate::styleAvailable):
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse):
        (WebCore::CSSAnimationControllerPrivate::startTimeResponse):
        (WebCore::CSSAnimationControllerPrivate::animationWillBeRemoved):
        (WebCore::CSSAnimationControllerPrivate::addToAnimationsDependentOnScroll):
        (WebCore::CSSAnimationControllerPrivate::removeFromAnimationsDependentOnScroll):
        (WebCore::CSSAnimationControllerPrivate::scrollWasUpdated):
        (WebCore::CSSAnimationController::CSSAnimationController):
        (WebCore::CSSAnimationController::~CSSAnimationController):
        (WebCore::CSSAnimationController::cancelAnimations):
        (WebCore::CSSAnimationController::updateAnimations):
        (WebCore::CSSAnimationController::getAnimatedStyleForRenderer):
        (WebCore::CSSAnimationController::computeExtentOfAnimation):
        (WebCore::CSSAnimationController::notifyAnimationStarted):
        (WebCore::CSSAnimationController::pauseAnimationAtTime):
        (WebCore::CSSAnimationController::numberOfActiveAnimations):
        (WebCore::CSSAnimationController::pauseTransitionAtTime):
        (WebCore::CSSAnimationController::isRunningAnimationOnRenderer):
        (WebCore::CSSAnimationController::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::CSSAnimationController::isSuspended):
        (WebCore::CSSAnimationController::suspendAnimations):
        (WebCore::CSSAnimationController::resumeAnimations):
        (WebCore::CSSAnimationController::allowsNewAnimationsWhileSuspended):
        (WebCore::CSSAnimationController::setAllowsNewAnimationsWhileSuspended):
        (WebCore::CSSAnimationController::serviceAnimations):
        (WebCore::CSSAnimationController::animationsAreSuspendedForDocument):
        (WebCore::CSSAnimationController::detachFromDocument):
        (WebCore::CSSAnimationController::suspendAnimationsForDocument):
        (WebCore::CSSAnimationController::resumeAnimationsForDocument):
        (WebCore::CSSAnimationController::startAnimationsIfNotSuspended):
        (WebCore::CSSAnimationController::beginAnimationUpdate):
        (WebCore::CSSAnimationController::endAnimationUpdate):
        (WebCore::CSSAnimationController::supportsAcceleratedAnimationOfProperty):
        (WebCore::CSSAnimationController::wantsScrollUpdates):
        (WebCore::CSSAnimationController::scrollWasUpdated):
        (WebCore::CSSAnimationController::hasAnimations):
        * page/animation/CSSAnimationController.h: Renamed from Source/WebCore/page/animation/AnimationController.h.
        (WebCore::AnimationUpdateBlock::AnimationUpdateBlock):
        (WebCore::AnimationUpdateBlock::~AnimationUpdateBlock):
        * page/animation/CSSAnimationControllerPrivate.h: Renamed from Source/WebCore/page/animation/AnimationControllerPrivate.h.
        (WebCore::CSSAnimationControllerPrivate::hasAnimations):
        (WebCore::CSSAnimationControllerPrivate::isSuspended):
        (WebCore::CSSAnimationControllerPrivate::setBeginAnimationUpdateTime):
        (WebCore::CSSAnimationControllerPrivate::allowsNewAnimationsWhileSuspended):
        (WebCore::CSSAnimationControllerPrivate::wantsScrollUpdates):
        (WebCore::CSSAnimationControllerPrivate::scrollPosition):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::singleton):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::CompositeAnimation):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::create):
        (WebCore::CompositeAnimation::animationController):
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * page/ios/FrameIOS.mm:
        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::animation):
        * testing/Internals.cpp:

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

        Simple line layout: Use simplified text measuring when possible.
        https://bugs.webkit.org/show_bug.cgi?id=167843
        <rdar://problem/30364907>

        Reviewed by Antti Koivisto.

        This patch adds a simplified version of text width measuring.
        Certain type of text runs (no spacing etc) only require a subset of what we
        currently do in FontCascade::width().

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText):
        * platform/graphics/FontCascade.h:
        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::add):
        (WebCore::WidthCache::addSlowCase):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::setRenderedText):
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring):
        * rendering/RenderText.h:
        (WebCore::RenderText::canUseSimplifiedTextMeasuring):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2017-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Resource usage overlay should ignore mouse events outside bounds by default
        https://bugs.webkit.org/show_bug.cgi?id=167874

        Reviewed by Andreas Kling.

        It's overriding the default causing that the first click after the overlay is shown is always handled by the
        overlay even when clicked outside bounds. It should only be set false while dragging.

        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::initialize):

2017-02-06  Antti Koivisto  <antti@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at WebCore: WebCore::Node::invalidateStyle
        https://bugs.webkit.org/show_bug.cgi?id=167878
        rdar://problem/30251840

        Reviewed by Andreas Kling.

        Speculative fix.

        We are trying to invalidate a null node from ~PostResolutionCallbackDisabler. Looks like the only way
        this could happen is if HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition is called
        with null 'this'. There is one place where this might happen.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachRootLayer): Add null check.

2017-02-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211722.

        This change introduced a LayoutTest failure on mac-wk2.

        Reverted changeset:

        "[Modern Media Controls] Improve handling of <video> with only
        audio tracks"
        https://bugs.webkit.org/show_bug.cgi?id=167836
        http://trac.webkit.org/changeset/211722

2017-02-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] Stop using AVSampleBufferAudioRenderer
        https://bugs.webkit.org/show_bug.cgi?id=167821

        Reviewed by Jer Noble.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::pullSamplesInternal): Don't assume the first timestamp from the
        render proc after a pause is zero.

        Stop using an audio renderer for each audio track. No audio renderers means we don't need to use
        an AVSampleBufferRenderSynchronizer.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener invalidate]): No more audio renderers.
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Pause
          audio tracks explicitly.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSourceProvider): Remove the existing code,
          it was incorrect and not thread safe.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers): No more audio renderers.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): No more render synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start each audio track.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Pause each audio track.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): Pass the command to each audio track.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::streamTime): No more render synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Don't handle audio samples.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Update for audio track class change. No
        more render synchronizer.
        (-[WebAVSampleBufferStatusChangeListener beginObservingRenderer:]): Deleted.
        (-[WebAVSampleBufferStatusChangeListener stopObservingRenderer:]): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSample): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForAudioData): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createAudioRenderer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderers): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rendererStatusDidChange): Deleted.

        * platform/mediastream/AudioTrackPrivateMediaStream.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): add/removeObserver takes a reference,
        not a pointer.
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Ditto.
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Renamed from sourceHasMoreMediaData.
        (WebCore::MediaStreamTrackPrivate::sourceHasMoreMediaData): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::addObserver): Take a reference, not a pointer.
        (WebCore::RealtimeMediaSource::removeObserver): Ditto.
        (WebCore::RealtimeMediaSource::videoSampleAvailable): Renamed from mediaDataUpdated.
        (WebCore::RealtimeMediaSource::audioSamplesAvailable): New.
        (WebCore::RealtimeMediaSource::stop): Drive-by cleanup.
        (WebCore::RealtimeMediaSource::requestStop): Ditto.
        (WebCore::RealtimeMediaSource::mediaDataUpdated): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::AVAudioCaptureSource):
        (WebCore::AVAudioCaptureSource::addObserver):
        (WebCore::AVAudioCaptureSource::shutdownCaptureSession):
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame): Call videoSampleAvailable, not mediaDataUpdated.

        Render audio with a CoreAudio output unit.
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: Added.
        (WebCore::AudioTrackPrivateMediaStreamCocoa::AudioTrackPrivateMediaStreamCocoa):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::~AudioTrackPrivateMediaStreamCocoa):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::playInternal):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::play):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::pause):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::setVolume):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::setupAudioUnit):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::sourceStopped):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::render):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::inputProc):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h: Added.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::alignTo16Bytes):
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        (WebCore::MockRealtimeAudioSourceMac::reconfigure): Minor cleanup.
        (WebCore::MockRealtimeAudioSourceMac::render): Ditto.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Call videoSampleAvailable, not mediaDataUpdated.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput): Use a mutex. Get rid of m_writeAheadCount,
        it is always 0.
        (WebCore::WebAudioSourceProviderAVFObjC::prepare): Use a lock.
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare): Ditto.
        (WebCore::WebAudioSourceProviderAVFObjC::process): Ditto.
        * platform/mock/MockRealtimeAudioSource.h:
        (WebCore::MockRealtimeAudioSource::renderInterval): Decrease the render interval.

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

        [Modern Media Controls] Add a backdrop filter to the start button on macOS
        https://bugs.webkit.org/show_bug.cgi?id=167879
        <rdar://problem/30375174>

        Reviewed by Eric Carlson.

        Add a backdrop filter to the start button on macOS.

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-start-button-style.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline > button.start > div):

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

        [Modern Media Controls] Bring fullscreen controls up to spec
        https://bugs.webkit.org/show_bug.cgi?id=167875
        <rdar://problem/29611222>

        Reviewed by Eric Carlson.

        We update the fullscreen PiP icon to have the correct size and add two new buttons
        around the volume slider, "volume-down" to bring the volume to 0 and "volume-up"
        to bring the volume to 1.

        To accomodate the new volume buttons, we move the volume slider inside an additional
        ButtonsContainer object, along with the two new buttons.

        Tests: media/modern-media-controls/volume-down-support/volume-down-support.html
               media/modern-media-controls/volume-up-support/volume-up-support.html

        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen button.volume-down):
        (.media-controls.mac.fullscreen button.volume-up):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        * Modules/modern-media-controls/controls/volume-down-button.js: Added.
        (VolumeDownButton):
        * Modules/modern-media-controls/controls/volume-slider.js:
        (VolumeSlider):
        * Modules/modern-media-controls/controls/volume-up-button.js: Added.
        (VolumeUpButton):
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@1x.png:
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@2x.png:
        * Modules/modern-media-controls/images/macOS/volume-down-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-down-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-up-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-up-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):
        * Modules/modern-media-controls/media/volume-down-support.js: Added.
        (VolumeDownSupport.prototype.get control):
        (VolumeDownSupport.prototype.buttonWasPressed):
        (VolumeDownSupport):
        * Modules/modern-media-controls/media/volume-up-support.js: Added.
        (VolumeUpSupport.prototype.get control):
        (VolumeUpSupport.prototype.buttonWasPressed):
        (VolumeUpSupport):
        * WebCore.xcodeproj/project.pbxproj:

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

        [Modern Media Controls] Improve handling of <video> with only audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=167836
        <rdar://problem/30255812>

        Reviewed by Dean Jackson.

        We now check for the availability of video tracks before considering a <video>
        element is displaying an actual video file and turning auto-hide on. We also
        check that we have video tracks before enabling the fullscreen button. This
        brings the behavior of a <video> pointing to a resource with no video tracks
        to be the same as an <audio> element.

        Test: media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get tracksToMonitor):
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):

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

        Fix WinCairo build after r211681
        https://bugs.webkit.org/show_bug.cgi?id=167096

        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        Include some necessary GLES headers.

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

        Data interaction fails in Safari splitscreen mode when dropping into a contenteditable
        https://bugs.webkit.org/show_bug.cgi?id=167862
        <rdar://problem/30368405>

        Reviewed by Tim Horton.

        Adds a counter to WebItemProviderPasteboard that can incremented, decremented, and queried by clients.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard hasPendingOperation]):
        (-[WebItemProviderPasteboard incrementPendingOperationCount]):
        (-[WebItemProviderPasteboard decrementPendingOperationCount]):

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

        Remove unparentsOffscreenTiles logic in TileController
        https://bugs.webkit.org/show_bug.cgi?id=167823

        Reviewed by Tim Horton.

        Give all TileGrids the "unparents offscreen tiles" behavior. This was enabled for
        only the page tiles in WK2 on Mac and iOS, but there's no reason to not use it for
        tiled composited layers also.

        Also use more modern C++ idioms in a few places.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::ensureTilesForRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2017-02-05  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] PiP button is not visible with a live broadcast video
        https://bugs.webkit.org/show_bug.cgi?id=167794
        <rdar://problem/30348790>

        Reviewed by Dean Jackson.

        We were only listening to the "loadedmetadata", "error", "webkitpresentationmodechanged"
        and "webkitcurrentplaybacktargetiswirelesschanged" events to invalidate the enabled state
        for the PiP button. We also need to check availability of video tracks, which we already
        did for fullscreen, which is quite similar.
        
        So we now listen to "addtrack", "removetrack" and "change" events on the media.videoTracks
        property, which correctly invalidates the PiP button when the first video track becomes
        available or the last video track is removed.

        Since a couple of other MediaControllerSupport subclasses (FullscreenSupport and TracksSupport)
        would also listen to those events on various track types, we add a new "tracksToMonitor"
        property on MediaControllerSupport which subclasses can override to provide a list of tracks
        that should listen to those events. This removes the need for dedicated construction and
        destruction time in MediaControllerSupport subclasses that need to listen to events on
        tracks rather than the media itself.

        Test: http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html

        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport):
        (FullscreenSupport.prototype.get tracksToMonitor):
        (FullscreenSupport.prototype.destroy): Deleted.
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport):
        (MediaControllerSupport.prototype.destroy):
        (MediaControllerSupport.prototype.get tracksToMonitor):
        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.get tracksToMonitor):
        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport):
        (TracksSupport.prototype.get tracksToMonitor):
        (TracksSupport.prototype.destroy): Deleted.

2017-02-05  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Time labels may wrap instead of displaying on a single line
        https://bugs.webkit.org/show_bug.cgi?id=167835
        <rdar://problem/30340534>

        Reviewed by Dean Jackson.

        No text in modern media controls is expected to wrap, so let's prevent any wrapping.

        Test: media/modern-media-controls/time-label/time-label-white-space-nowrap.html

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

2017-02-04  Simon Fraser  <simon.fraser@apple.com>

        Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays
        https://bugs.webkit.org/show_bug.cgi?id=167850

        Reviewed by Tim Horton.
        
        RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer
        tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary
        GraphicsLayers. We also never did this work for page overlay layers.

        Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that
        from RenderLayerCompositor::setIsInWindow() and PageOverlayController.

        PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings
        created dynamically get the correct in-window state.

        Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload,
        and on hide/show web view. This was because the overlay root layers were re-parented, but
        addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed
        by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers,
        update the inWindow state, and return the layer.

        Make it possible to dump tile caches in page overlay tests.

        Make showGraphicsLayers() always dump page overlay layers (source of much confusion).

        Test: pageoverlay/overlay-remove-reinsert-view.html

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::documentOverlayRootLayer):
        (WebCore::PageOverlayController::viewOverlayRootLayer):
        (WebCore::PageOverlayController::layerWithDocumentOverlays):
        (WebCore::PageOverlayController::layerWithViewOverlays):
        (WebCore::PageOverlayController::tiledBackingUsageChanged):
        (WebCore::PageOverlayController::willAttachRootLayer): Deleted.
        * page/PageOverlayController.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants):
        (WebCore::dumpChildren):
        * platform/graphics/GraphicsLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted.
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        (WebCore::Internals::layerTreeAsText):
        (WebCore::Internals::pageOverlayLayerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::layerTreeAsText):
        * testing/MockPageOverlayClient.h:

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

        Simple line layout: Use RenderText::canUseSimpleFontCodePath() only as a hint.
        https://bugs.webkit.org/show_bug.cgi?id=167853
        <rdar://problem/30367302>

        Reviewed by Simon Fraser.

        Apparently RenderText::canUseSimpleFontCodePath() only checks if the string is qualified for
        the simple font code path. However certain css properties could still force us to use the complex
        path.
        In most cases, we still do only one string traversal thanks to TextRun::setCharacterScanForCodePath(). 

        Test: fast/text/simple-line-layout-simple-text-but-complex-font-path.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):

2017-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Move TextureMapper-specific logic out of GraphicsContext3DPrivate
        https://bugs.webkit.org/show_bug.cgi?id=167096

        Reviewed by Alex Christensen.

        Move the TextureMapper-specific functionality in GraphicsContext3DPrivate into a
        separate class. The new TextureMapperGC3DPlatformLayer class inherits from the
        class that's aliased to the PlatformLayer type, like GraphicsContext3DPrivate did
        before.

        In GraphicsContext3D, the new m_texmapLayer member variable of the
        std::unique_ptr<TextureMapperGC3DPlatformLayer> type is used for configurations
        that enable TextureMapper, largely the same way the GraphicsContext3DPrivate
        object was used before. The remaining code in GraphicsContext3DPrivate is left
        unchanged to keep it working for other ports.

        No new tests -- no change in behavior.

        * platform/TextureMapper.cmake:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate): Deleted.
        (WebCore::GraphicsContext3DPrivate::proxy): Deleted.
        (WebCore::GraphicsContext3DPrivate::swapBuffersIfNeeded): Deleted.
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper): Deleted.
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::createForCurrentGLContext):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp: Copied from Source/WebCore/platform/graphics/GraphicsContext3DPrivate.cpp.
        (WebCore::TextureMapperGC3DPlatformLayer::TextureMapperGC3DPlatformLayer):
        (WebCore::TextureMapperGC3DPlatformLayer::~TextureMapperGC3DPlatformLayer):
        (WebCore::TextureMapperGC3DPlatformLayer::makeContextCurrent):
        (WebCore::TextureMapperGC3DPlatformLayer::platformContext):
        (WebCore::TextureMapperGC3DPlatformLayer::proxy):
        (WebCore::TextureMapperGC3DPlatformLayer::swapBuffersIfNeeded):
        (WebCore::TextureMapperGC3DPlatformLayer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3DPrivate.h.
        (WebCore::TextureMapperGC3DPlatformLayer::renderStyle):

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

        Simple line layout: Bail out from Simple Line Layout on surrogate pairs.
        https://bugs.webkit.org/show_bug.cgi?id=167840
        <rdar://problem/30364784>

        Reviewed by Myles C. Maxfield.

        Surrogate pairs require special line breaking logic. 

        Test: fast/text/simple-line-layout-no-surrogate-pairs.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForCharacter):
        (WebCore::SimpleLineLayout::canUseForText): Checking against special characters is faster than
        checking against glyphs. Reverse their order. 
        (WebCore::SimpleLineLayout::printReason):

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

        Static Analyzer: WebCoreNSURLExtras.mm: Potential leak of memory pointed to by 'allBytesBuffer'
        https://bugs.webkit.org/show_bug.cgi?id=167849

        Reviewed by Sam Weinig.

        Source/WebCore/platform/mac/WebCoreNSURLExtras.mm:883:20: warning: Potential leak of memory pointed to by 'allBytesBuffer'
                    return nil;
                           ^~~

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::dataForURLComponentType):
        Free the potentially malloc'd buffer before the early return.

2017-02-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix mistake in comment added in r211569.

        * history/PageCache.cpp:
        (WebCore::PageCache::removeAllItemsForPage):

2017-02-04  Yoav Weiss  <yoav@yoav.ws>

        Fix memory issues related to preload eviction.
        https://bugs.webkit.org/show_bug.cgi?id=167838

        Reviewed by Andreas Kling.

        This avoids removing resources from m_preloads during the iteration
        by creating a second HashSetList containing the remaining link preloads.

        No new tests but this will fix crashes on the leak bots.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::clearPreloads):

2017-02-04  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Skip 16bit specific checks on 8bit content.
        https://bugs.webkit.org/show_bug.cgi?id=167831
        <rdar://problem/30361948>

        Reviewed by Antti Koivisto and Myles C. Maxfield.

        Skip various checks on 8bit content.

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForCharacter):
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseForFontAndText):

2017-02-03  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Remove redundant codepath check.
        https://bugs.webkit.org/show_bug.cgi?id=167827
        <rdar://problem/30361850>

        Reviewed by Myles C. Maxfield.

        FontCascade::codePath() iterates through the entire text. It's rather wasteful to do twice.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        (WebCore::SimpleLineLayout::printReason):

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

        REGRESSION(r204858): Synthetic bold text in vertical writing mode is rotated away from original text
        https://bugs.webkit.org/show_bug.cgi?id=167826
        <rdar://problem/28193222>

        Reviewed by Zalan Bujtas.

        When drawing vertical text, the rotation is not reset between successive paint calls. We implement
        synthetic bold by drawing text twice, which means that the second draw call was getting rotated
        twice. This was an oversight in r204858.

        Test: fast/text/synthetic-bold-vertical-text.html

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showGlyphsWithAdvances):

2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>

        Performance Timing: Convert WTF::MonotonicTime and WTF::Seconds
        https://bugs.webkit.org/show_bug.cgi?id=167768

        Reviewed by Geoffrey Garen.

        The public APIs still return double (DOMHighResTimeStamp), which
        is milliseconds since a time origin:
        https://w3c.github.io/hr-time/#dom-domhighrestimestamp

        * loader/LoadTiming.cpp:
        (WebCore::LoadTiming::secondsSinceStartTime):
        (WebCore::LoadTiming::monotonicTimeToPseudoWallTime):
        (WebCore::LoadTiming::markStartTime):
        (WebCore::LoadTiming::addRedirect):
        (WebCore::LoadTiming::monotonicTimeToZeroBasedDocumentTime): Deleted.
        * loader/LoadTiming.h:
        (WebCore::LoadTiming::markUnloadEventStart):
        (WebCore::LoadTiming::markUnloadEventEnd):
        (WebCore::LoadTiming::markRedirectStart):
        (WebCore::LoadTiming::markRedirectEnd):
        (WebCore::LoadTiming::markFetchStart):
        (WebCore::LoadTiming::setResponseEnd):
        (WebCore::LoadTiming::markLoadEventStart):
        (WebCore::LoadTiming::markLoadEventEnd):
        (WebCore::LoadTiming::startTime):
        (WebCore::LoadTiming::unloadEventStart):
        (WebCore::LoadTiming::unloadEventEnd):
        (WebCore::LoadTiming::redirectStart):
        (WebCore::LoadTiming::redirectEnd):
        (WebCore::LoadTiming::fetchStart):
        (WebCore::LoadTiming::responseEnd):
        (WebCore::LoadTiming::loadEventStart):
        (WebCore::LoadTiming::loadEventEnd):
        (WebCore::LoadTiming::redirectCount):
        (WebCore::LoadTiming::referenceMonotonicTime):
        (WebCore::LoadTiming::referenceWallTime):
        Use MonotonicTime and WallTime for timestamps and references.

        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::monotonicTimestamp):
        * dom/DocumentTiming.h:
        (WebCore::DocumentTiming::DocumentTiming): Deleted.
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::dataReceived):
        * loader/DocumentLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance):
        Use new types instead of raw doubles.

        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::now):
        (WebCore::Performance::reduceTimeResolution):
        (WebCore::Performance::addResourceTiming):
        * page/Performance.h:
        Do time arithmatic with WTF::Time classes.
        This clarifies that we reduce our timestamps to 100us
        resolution instead of the maximum 5us allowed by the spec.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::monotonicTimeToDOMHighResTimeStamp):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart):
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds):
        (WebCore::toIntegerMilliseconds): Deleted.
        * page/PerformanceTiming.h:
        Do time arithmatic with WTF::Time classes.

        * 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/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:
        Pass time origin as MonotonicTime.

        * workers/Worker.cpp:
        (WebCore::Worker::create):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        Rename creation timestamp member. This matches Document's m_documentCreationTime.

2017-02-03  Jeremy Jones  <jeremyj@apple.com>

        WK1 mouse events are missing movementX and movementY for pointerlock.
        https://bugs.webkit.org/show_bug.cgi?id=167775
        rdar://problem/30343810

        Reviewed by Alexey Proskuryakov.

        pointer-lock/mouse-event-delivery.html

        Improve mouse-event-delivery.html test to mouse move and check for valid movementX and movementY.
        
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder): WK1 plumb throuhg movementX and movementY

2017-02-03  Simon Fraser  <simon.fraser@apple.com>

        Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
        https://bugs.webkit.org/show_bug.cgi?id=167774

        Reviewed by Tim Horton.

        RenderLayerBacking had some very confusing "usingTiledCacheLayer" uses.

        Its member variable, m_usingTiledCacheLayer, really meant "m_isMainFrameLayerWithTiledBacking" so make it so.
        It had a usingTiledBacking(), which returned the same thing, which this patch replaces with isMainFrameLayerWithTiledBacking().

        The fact that usingTiledBacking() was only true for the page tiled layer tripped up
        RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants(), which would only ever call setIsInWindow()
        on the page tiled layer. These changes fix that.

        Also make a way for tests to unparent the web view via UIScriptController, and dump out the "in window"
        status of TileBackings when dumping tile caches.

        Test: tiled-drawing/tiled-backing-in-window.html

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/TileController.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computePageTiledBackingCoverage):
        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds):
        (WebCore::RenderLayerBacking::updateDescendantClippingLayer):
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration):
        (WebCore::RenderLayerBacking::paintsIntoWindow):
        (WebCore::computeTileCoverage): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged):
        (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing):
        (WebCore::RenderLayerCompositor::documentUsesTiledBacking):

2017-02-03  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Bail out from Simple Line Layout when the primary font is insufficient.
        https://bugs.webkit.org/show_bug.cgi?id=167820
        <rdar://problem/30359685>

        Reviewed by Myles C. Maxfield.

        Currently simple line layout requires the primary font to have all the glyps for the content.

        Test: fast/text/simple-line-layout-do-not-support-unicode-range.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        (WebCore::SimpleLineLayout::printReason):

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

        ASSERT in HTMLMediaElement::~HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=167818

        Reviewed by Brent Fulgham.

        Test: media/audio-dealloc-crash.html

        HTMLMediaElement's MediaElementSession can nominate the HTMLMediaElement itself
        to become the playback controls session from inside the HTMLMediaElement destructor. Protect
        against this by clearing out the session before calling updatePlaybackControlsManager().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2017-02-03  Daniel Bates  <dabates@apple.com>

        [Mac][WK2] Add SPI to override the Content Security Policy of a page
        https://bugs.webkit.org/show_bug.cgi?id=167810
        <rdar://problem/30102568>

        Reviewed by Anders Carlsson.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Apply the embedding client's override Content Security
        Policy to the document if one exists.
        * loader/FrameLoaderClient.h: Add function overrideContentSecurityPolicy() that a FrameLoaderClient
        can override to provide a custom Content Security Policy for a document (defaults: null string - no policy).
        As its name implies, the policy returned by overrideContentSecurityPolicy() will define the Content
        Security Policy for the document, overriding any subsequently received Content Security Policy for
        the document.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom): Only copy policies from the specified ContentSecurityPolicy
        object if our policy was not specified by the embedding client.
        (WebCore::ContentSecurityPolicy::didReceiveHeader): Set ContentSecurityPolicy::m_hasAPIPolicy to true
        when we receive an API policy from the embedding client (ContentSecurityPolicy::PolicyFrom::API). An
        API policy must be defined before a policy received from a document. Do not process a received header
        if we already have an API policy as the API policy overrides all other policies.
        * page/csp/ContentSecurityPolicy.h:

2017-02-03  Chris Dumez  <cdumez@apple.com>

        Drop Mac App Store workaround for window.getComputedStyle()
        https://bugs.webkit.org/show_bug.cgi?id=166891
        <rdar://problem/28282452>

        Reviewed by Sam Weinig.

        Drop Mac App Store workaround for window.getComputedStyle() now that
        <rdar://problem/28020681> has been fixed.

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::MacApplication::isAppStore): Deleted.

2017-02-03  Chris Dumez  <cdumez@apple.com>

        Dismiss HTML form validation popover when pressing Escape key
        https://bugs.webkit.org/show_bug.cgi?id=167716
        <rdar://problem/29872943>

        Reviewed by Simon Fraser.

        Dismiss any visible HTML form validation popover when pressing
        the Escape key.

        Test: fast/forms/validation-bubble-escape-key-dismiss.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * page/ValidationMessageClient.h:

2017-02-03  Jeremy Jones  <jeremyj@apple.com>

        Pointer lock events should be delivered directly to the target element
        https://bugs.webkit.org/show_bug.cgi?id=167134
        rdar://problem/30268004

        Reviewed by Dean Jackson.

        pointer-lock/mouse-event-delivery.html: Enabled for mac, added wheel event tests.

        When pointer is locked on an element, route mouse events directly to the target element, instead of 
        doing the normal event disptach.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseForceEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::isLocked): Added.
        (WebCore::PointerLockController::dispatchLockedWheelEvent): Added.
        * page/PointerLockController.h:

2017-02-03  Yoav Weiss  <yoav@yoav.ws>

        Avoid evicting link preload resources when parsing is done.
        https://bugs.webkit.org/show_bug.cgi?id=167415

        Reviewed by Ryosuke Niwa.

        Currently all preloads (speculative and link preload) are being cleared when the document has finished parsing.
        When it comes to link preloads, it can result in resources being cleared before the page had a chance to use them. (e.g. resources
        that are preloaded in order to be loaded through script after DOMContentLoaded)

        This patch fixes that by marking link preload resources as such, so that they can be handled separately inside clearPreloads().
        As this fix also exposed an issue with load cancelation with invalid hrefs (which tests were passing before due to the preloads
        being cleared), said issue is also fixed by clearing previousely preloaded resources if an invalid link preload is later detected.

        Test: http/tests/preload/not_evicting_preload_at_onload.html

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Only clear speculative preloads when parsing is finished.
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded): Set request flag indicating link preload.
        (WebCore::LinkLoader::loadLink): Clear previousely preloaded resource to cancel their load.
        * loader/LinkPreloadResourceClients.h:
        (WebCore::LinkPreloadResourceClient::clearResource): Call cancelLoad() when the client is cleared.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isLinkPreload):
        (WebCore::CachedResource::setLinkPreload):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Initialize m_isLinkPreload with the request's value.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestResource): Mirror the request link preload flag to the resource if it's fetched from cache.
        (WebCore::CachedResourceLoader::clearPreloads): Add a "speculative only" mode, which doesn't clear link preloads.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::isLinkPreload):
        (WebCore::CachedResourceRequest::setIsLinkPreload):

2017-02-03  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Removing adjacent trailing whitespace runs should not crash.
        https://bugs.webkit.org/show_bug.cgi?id=167803
        <rdar://problem/30337368>

        Reviewed by Antti Koivisto.

        In case of adjacent collapsed whitespace fragments, the length of these fragments (TextFragmentIterator::TextFragment)
        do not necessarily equal the length of the final runs (SimpleLineLayout::Run).
        This patch removes the dependency on the length and switches over to using the position information instead.

        Test: fast/text/simple-line-layout-multiple-trailingwhitespace-crash.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):

2017-02-03  Brent Fulgham  <bfulgham@apple.com>

        Correct memory leak in MediaConstraints
        https://bugs.webkit.org/show_bug.cgi?id=167744
        <rdar://problem/30331444>

        Reviewed by Anders Carlsson.

        ConstraintHolder returns a reference to an object created by operator new. When the
        returned value is assigned or stored in Vector or other containers we leak memory.
        Instead, this value should just be returned as a regular object so that the return
        value optimization can make sure memory is properly (and efficiently) used.

        Tested by existing mediastream tests.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::FlattenedConstraint::ConstraintHolder::create): Return by value.
        (WebCore::FlattenedConstraint::ConstraintHolder::~ConstraintHolder): Don't attempt to
        delete memory that was moved away.
        (WebCore::FlattenedConstraint::ConstraintHolder::ConstraintHolder): Add Move constructor.

2017-02-03  Chris Dumez  <cdumez@apple.com>

        Fix bad assertion under HTMLTreeBuilder::processStartTagForInBody()
        https://bugs.webkit.org/show_bug.cgi?id=167799
        <rdar://problem/30237241>

        Reviewed by Brent Fulgham.

        Fix bad assertion under HTMLTreeBuilder::processStartTagForInBody() that was
        expecting the root element to be an <html> element when parsing a <frameset>.
        While this assertion is true in theory and as per the specification, it does
        not hold in WebKit when parsing a DocumentFragment. This is because WebKit
        has an optimization causing us to have a DocumentFragment as root element
        when parsing a fragment. See the following constructor:
        "HTMLTreeBuilder(HTMLDocumentParser&, DocumentFragment&, Element&, ParserContentPolicy, const HTMLParserOptions&)"

        which has the following code:
        """
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-html-fragments
        // For efficiency, we skip step 5 ("Let root be a new html element with no attributes") and instead use the DocumentFragment as a root node.
        m_tree.openElements().pushRootNode(HTMLStackItem::create(fragment));
        """

        Update the assertion to expect a DocumentFragment as root element when parsing
        a fragment, and keep expecting an <html> element otherwise.

        Test: fast/parser/fragment-with-frameset-crash.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2017-02-03  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Skip back button is visible with a live broadcast video
        https://bugs.webkit.org/show_bug.cgi?id=167793

        Reviewed by Eric Carlson.

        We shouldn't be showing the skip back button when a live broadcast video is playing.
        We now listen to the "durationchange" event to determine when we have an inifinite-duration
        video and disable the skip button in that case.

        Test: http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast.html

        * Modules/modern-media-controls/media/skip-back-support.js:
        (SkipBackSupport.prototype.get mediaEvents):
        (SkipBackSupport.prototype.syncControl):
        (SkipBackSupport):

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

        URLParser: implement forbidden host code points for non-special URLs
        https://bugs.webkit.org/show_bug.cgi?id=167779

        Reviewed by Chris Dumez.

        Covered by newly passing web platform tests.

        * platform/URLParser.cpp:
        (WebCore::isC0Control):
        (WebCore::isForbiddenHostCodePoint):
        (WebCore::URLParser::parseHostAndPort):
        In non-special URL hosts such as customprotocol://strange%host
        don't accept characters that are part of the URL grammar and would be forbidden
        in a special URL host, like https://not[allowed
        This was recently added to the spec in https://github.com/whatwg/url/issues/214

2017-02-03  Per Arne Vollan  <pvollan@apple.com>

        The CSS property -webkit-text-stroke is not applied on captions.
        https://bugs.webkit.org/show_bug.cgi?id=167687

        Reviewed by Brent Fulgham.

        Add style to list of valid properties for cue.

        Test: media/track/track-css-stroke-cues.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isValidCueStyleProperty):

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

        Align URL setters with spec for URLs that cannot be a base URL
        https://bugs.webkit.org/show_bug.cgi?id=167783

        Reviewed by Chris Dumez.

        Setting things like credentials on mailto URLs doesn't make sense.
        It's forbidden by the spec.

        Covered by newly passing web platform tests.

        * html/URLUtils.h:
        (WebCore::URLUtils<T>::setUsername):
        (WebCore::URLUtils<T>::setPassword):
        (WebCore::URLUtils<T>::setHost):
        (WebCore::URLUtils<T>::setHostname):
        (WebCore::URLUtils<T>::setPort):
        (WebCore::URLUtils<T>::setPathname):
        * platform/URL.cpp:
        (WebCore::URL::serialize):
        * platform/URL.h:
        (WebCore::URL::cannotBeABaseURL):

2017-02-03  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Add classes to manage audio samples
        https://bugs.webkit.org/show_bug.cgi?id=167739

        Reviewed by Jer Noble.

        No new tests, this code isn't used yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/AudioSampleBufferList.cpp: Added.
        (WebCore::AudioSampleBufferList::create):
        (WebCore::AudioSampleBufferList::AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::~AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::setSampleCount):
        (WebCore::AudioSampleBufferList::applyGain):
        (WebCore::AudioSampleBufferList::mixFrom):
        (WebCore::AudioSampleBufferList::copyFrom):
        (WebCore::AudioSampleBufferList::copyTo):
        (WebCore::AudioSampleBufferList::reset):
        (WebCore::AudioSampleBufferList::zero):
        (WebCore::AudioSampleBufferList::zeroABL):
        (WebCore::AudioSampleBufferList::convertInput):
        (WebCore::AudioSampleBufferList::audioConverterCallback):
        (WebCore::AudioSampleBufferList::configureBufferListForStream):
        * platform/audio/mac/AudioSampleBufferList.h: Added.
        (WebCore::AudioSampleBufferList::streamDescription):
        (WebCore::AudioSampleBufferList::bufferList):
        (WebCore::AudioSampleBufferList::sampleCapacity):
        (WebCore::AudioSampleBufferList::sampleCount):
        (WebCore::AudioSampleBufferList::timestamp):
        (WebCore::AudioSampleBufferList::hostTime):
        (WebCore::AudioSampleBufferList::setTimes):
        (WebCore::AudioSampleBufferList::audioBufferListSizeForStream):
        * platform/audio/mac/AudioSampleDataSource.cpp: Added.
        (WebCore::AudioSampleDataSource::create):
        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::~AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::setPaused):
        (WebCore::AudioSampleDataSource::setupConverter):
        (WebCore::AudioSampleDataSource::setInputFormat):
        (WebCore::AudioSampleDataSource::setOutputFormat):
        (WebCore::AudioSampleDataSource::hostTime):
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pushSamples):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamples):
        * platform/audio/mac/AudioSampleDataSource.h: Added.
        (WebCore::AudioSampleDataSource::setVolume):
        (WebCore::AudioSampleDataSource::volume):
        (WebCore::AudioSampleDataSource::setMuted):
        (WebCore::AudioSampleDataSource::muted):

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the buidl after r211631.

        I added the OS(LINUX) ifdef to the wrong file by mistake.

        * page/ResourceUsageThread.h:
        * page/linux/ResourceUsageThreadLinux.cpp:

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial implementation of resource usage overlay
        https://bugs.webkit.org/show_bug.cgi?id=167731

        Reviewed by Michael Catanzaro.

        Add an implementation of ResourceUsageOverlay and ResourceUsageThread for Linux systems.

        * PlatformGTK.cmake: Add new new files to compilation.
        * page/Page.cpp:
        (WebCore::Page::setResourceUsageOverlayVisible): Do not create the page overlay if accelerated compositing is
        not enabled.
        * page/ResourceUsageOverlay.h:
        * page/linux/ResourceUsageOverlayLinux.cpp: Added.
        (WebCore::cpuUsageString):
        (WebCore::formatByteNumber):
        (WebCore::gcTimerString):
        (WebCore::ResourceUsageOverlay::platformInitialize):
        (WebCore::ResourceUsageOverlay::platformDestroy):
        * page/linux/ResourceUsageThreadLinux.cpp: Added.
        (WebCore::cpuPeriod):
        (WebCore::cpuUsage):
        (WebCore::ResourceUsageThread::platformThreadBody):

2017-02-03  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Store preloaded media in webkit's cache
        https://bugs.webkit.org/show_bug.cgi?id=119477

        Reviewed by Xabier Rodriguez-Calvar.

        Files cached on disk by MediaPlayerPrivateGStreamer are deleted only when the player is closed. If the
        WebProcess crashed, they're just left there in the cache directory. This patch changes the location
        of those temporary files to a proper temporary directory (/var/tmp, as those files aren't actually
        reusable, so they don't belong to a cache directory, and /tmp is a bad place because it's RAM-based on
        some distros), unlinks (deletes) them right after creation and also deletes any other stalled temporary
        file on the old legacy cache directory.

        There's no API in GstPlaybin to control the temporary file location, so we do it manually by locating
        the GstDownloadBuffer element in the pipeline as soon as it's created, reconfiguring it with the right
        temporary file path and deleting the file as soon as it's created.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Stop listening to element-added.
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback): Look for GstDownloadBuffer.
        (WebCore::MediaPlayerPrivateGStreamer::downloadBufferFileCreatedCallback): Remove the file after creation.
        (WebCore::MediaPlayerPrivateGStreamer::purgeOldDownloadFiles): Delete legacy files.
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged): Listen to element-added signals on GstUriDecodeBin.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: New reference to GstDownloadBuffer.

2017-02-03  Antti Koivisto  <antti@apple.com>

        WebContent crash when pasting into input fields at com.apple.WebCore: WebCore::ResourceRequestBase::url const + 9
        https://bugs.webkit.org/show_bug.cgi?id=167787
        rdar://problem/29168795

        Reviewed by Andreas Kling.

        No test, don't know how to get here.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::crossfadeBlend): Null check.

2017-02-03  Alberto Garcia  <berto@igalia.com>

        JSDOMWindowBase.cpp doesn't build if the JIT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=167785

        Reviewed by Carlos Garcia Campos.

        r211403 moved GetCallerGlobalObjectFunctor from JSDOMBinding.cpp
        to JSDOMWindowBase.cpp, but forgot to include bytecode/CodeBlock.h
        in the latter file.

        This breaks the build if the JIT is disabled because the headers
        that would include ClodeBlock.h indirectly are guarded by
        ENABLE(JIT).

        * bindings/js/JSDOMWindowBase.cpp:

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes AKA websam
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Add a new timer-based memory pressure monitor that checks the process memory
        footprint every 30 seconds and reacts to changes by setting a MemoryUsagePolicy.

        There are four MemoryUsagePolicy values:

            - Unrestricted (below 1GB)
            - Conservative (above 1GB)
            - Strict (above 2GB)
            - Panic (above 4GB, or 3GB if 32-bit)

        For Strict and above, the old-style "isUnderMemoryPressure()" API will return true.

        Transitioning to a higher policy will cause memory pressure handlers to run:

        At Strict, we run the "non-critical" memory pressure handler, then carry on.

        At Panic, we run the "critical" memory pressure handler. If that fails to recover
        enough memory to bring us back below 4GB, we may kill the process:

        A process is eligible to get killed for using too much memory if:

            - It's not visible on screen (i.e it's a background tab.)
            - It's not playing audio.
            - It has not performed a main frame navigation in the last hour.

        Before killing the process, an exit-time callback will run. This patch installs such
        a callback that prints out some time-of-death statistics about C++ and JavaScript memory
        usage to hopefully help understand what was soaking up all the memory.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setState):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::didCompleteLoad):
        * page/MainFrame.h:
        * page/MemoryRelease.cpp:
        (WebCore::pageCount):
        (WebCore::logMemoryStatisticsAtTimeOfDeath):
        (WebCore::didExceedMemoryLimitAndFailedToRecover):
        (WebCore::processIsEligibleForMemoryKill):
        * page/MemoryRelease.h:
        * page/ResourceUsageThread.h:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        (WebCore::toString):
        (WebCore::thresholdForPolicy):
        (WebCore::policyForFootprint):
        (WebCore::MemoryPressureHandler::measurementTimerFired):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setMemoryKillCallback):
        (WebCore::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback):
        (WebCore::MemoryPressureHandler::isUnderMemoryPressure):

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

        URLParser: Fix parsing invalid IPv4 addresses with non-ASCII characters
        https://bugs.webkit.org/show_bug.cgi?id=167773
        <rdar://problem/30221102>

        Reviewed by Ryosuke Niwa.

        If an invalid IPv4 address contains the first syntaxViolation (difference between input and canonicalized URL),
        an iterator is used to calculate how far we have parsed in the input string to copy all the syntax-violation-free
        characters into a Vector. If a URL contains only ASCII that doesn't contain anything percent-encoded in the host,
        there is a fast path to parse ASCII hosts.  All my existing invalid IPv4 tests followed this path.
        If there is a non-ASCII character, we need to use an iterator to the original string instead of an iterator
        to the string after converting the input string's host to ASCII.

        Covered by a new API test which used to RELEASE_ASSERT.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Host):
        (WebCore::URLParser::parseIPv6Host):
        (WebCore::URLParser::parseHostAndPort):
        * platform/URLParser.h:

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

        CrashTracer: [USER] com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::URL::host const + 9
        https://bugs.webkit.org/show_bug.cgi?id=167766
        <rdar://problem/30132707>

        Reviewed by Chris Dumez.

        The mainframe's document pointer may be null when tearing down a page upon navigation to a page that is in the
        page cache. If this triggers a GC sweep, we will attempt to reload touch bar media controls, which (as a part of
        the media controller heuristic) checks the mainframe's document URL to see if quirks should be enabled. This
        assumes that the mainframe's document exists, which is not a safe assumption if page navigation is occurring. As
        such, we need a null check for the mainframe's document in needsPlaybackControlsManagerQuirk().

        No test, as we were unable to reproduce this crash.

        * html/HTMLMediaElement.cpp:
        (WebCore::needsPlaybackControlsManagerQuirk):

2017-02-02  Chris Dumez  <cdumez@apple.com>

        Suspend SVG animations in hidden pages
        https://bugs.webkit.org/show_bug.cgi?id=167763
        <rdar://problem/29986313>

        Reviewed by Simon Fraser.

        Suspend SVG animations in hidden pages to save power, similarly to what
        we already do for another types of animations.

        Test: svg/animations/animations-paused-page-non-visible.html

        * page/Page.cpp:
        (WebCore::setSVGAnimationSuspended):
        (WebCore::Page::setIsVisibleInternal):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::areAnimationsPaused):
        * testing/Internals.cpp:
        (WebCore::Internals::areSVGAnimationsPaused):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Unreviewed, rolling out r211596 and r211605.
        https://bugs.webkit.org/show_bug.cgi?id=167767

        This change broke certain build configurations (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[Mac] Add classes to manage audio samples"
        https://bugs.webkit.org/show_bug.cgi?id=167739
        http://trac.webkit.org/changeset/211596

        "Unreviewed speculative build fix."
        http://trac.webkit.org/changeset/211605

2017-02-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed speculative build fix.

        * platform/audio/mac/AudioSampleDataSource.cpp:
        (WebCore::AudioSampleDataSource::setupConverter):
        (WebCore::AudioSampleDataSource::pushSamples):

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

        Build libwebrtc and dependencies with Xcode
        https://bugs.webkit.org/show_bug.cgi?id=167758

        Reviewed by Dean Jackson.

        * WebCore.xcodeproj/project.pbxproj:

2017-02-02  Chris Dumez  <cdumez@apple.com>

        {}.toString.call(crossOriginWindow) should return "[object Object]"
        https://bugs.webkit.org/show_bug.cgi?id=167701
        <rdar://problem/30330797>

        Reviewed by Keith Miller.

        {}.toString.call() to should "[object Object] for cross origin
        Window / Location objects. This new behavior is consistent with
        Firefox and Chrome.

        No new tests, rebaselined existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toStringName):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toStringName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/IDLAttributes.txt:
        * page/DOMWindow.idl:
        * page/Location.idl:

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

        Drag images should be anchored to the mouse location
        https://bugs.webkit.org/show_bug.cgi?id=167690
        <rdar://problem/30295261>

        Reviewed by Enrica Casucci.

        Adds logic to compute the mouse anchor point. This is a point in the unit square indicating where the drag
        origin is relative to the bounds of the drag image. There is no behavior change, since this anchor point is not
        used by any client yet; this patch only computes and vends this information from WebCore.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        * page/DragController.h:
        * platform/DragImage.h:

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

        [Mac] Add classes to manage audio samples
        https://bugs.webkit.org/show_bug.cgi?id=167739

        Reviewed by Jer Noble.

        No new tests, this code isn't used yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/AudioSampleBufferList.cpp: Added.
        (WebCore::AudioSampleBufferList::create):
        (WebCore::AudioSampleBufferList::AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::~AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::setSampleCount):
        (WebCore::AudioSampleBufferList::applyGain):
        (WebCore::AudioSampleBufferList::mixFrom):
        (WebCore::AudioSampleBufferList::copyFrom):
        (WebCore::AudioSampleBufferList::copyTo):
        (WebCore::AudioSampleBufferList::reset):
        (WebCore::AudioSampleBufferList::zero):
        (WebCore::AudioSampleBufferList::zeroABL):
        (WebCore::AudioSampleBufferList::convertInput):
        (WebCore::AudioSampleBufferList::audioConverterCallback):
        (WebCore::AudioSampleBufferList::configureBufferListForStream):
        * platform/audio/mac/AudioSampleBufferList.h: Added.
        (WebCore::AudioSampleBufferList::streamDescription):
        (WebCore::AudioSampleBufferList::bufferList):
        (WebCore::AudioSampleBufferList::sampleCapacity):
        (WebCore::AudioSampleBufferList::sampleCount):
        (WebCore::AudioSampleBufferList::timestamp):
        (WebCore::AudioSampleBufferList::hostTime):
        (WebCore::AudioSampleBufferList::setTimes):
        (WebCore::AudioSampleBufferList::audioBufferListSizeForStream):
        * platform/audio/mac/AudioSampleDataSource.cpp: Added.
        (WebCore::AudioSampleDataSource::create):
        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::~AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::setPaused):
        (WebCore::AudioSampleDataSource::setupConverter):
        (WebCore::AudioSampleDataSource::setInputFormat):
        (WebCore::AudioSampleDataSource::setOutputFormat):
        (WebCore::AudioSampleDataSource::hostTime):
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pushSamples):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamples):
        * platform/audio/mac/AudioSampleDataSource.h: Added.
        (WebCore::AudioSampleDataSource::setVolume):
        (WebCore::AudioSampleDataSource::volume):
        (WebCore::AudioSampleDataSource::setMuted):
        (WebCore::AudioSampleDataSource::muted):

2017-02-02  Joseph Pecoraro  <pecoraro@apple.com>

        Support Performance API (performance.now(), UserTiming) in Workers
        https://bugs.webkit.org/show_bug.cgi?id=167717

        Reviewed by Ryosuke Niwa.

        Tests: performance-api/performance-mark-name.html
               performance-api/performance-now-api.html
               performance-api/performance-now-time-origin-in-worker.html
               performance-api/user-timing-apis.html

        * CMakeLists.txt:
        * DerivedSources.make:
        New files.

        * page/DOMWindow.idl:
        * page/GlobalPerformance.idl:
        * workers/WorkerGlobalScope.idl:
        Add partial interface for performance attribute.

        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.idl:
        * page/PerformanceObserver.idl:
        * page/PerformanceObserverEntryList.idl:
        Expose these to Workers.

        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::contextDestroyed):
        * page/Performance.h:
        Use the EventQueue variant that works with any ScriptExectionContext.

        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::PerformanceObserver):
        Get the Performance base in a Worker context.

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::mark):
        Only reject legacy special mark names in a Window, not a Worker.

        (WebCore::UserTiming::findExistingMarkStartTime):
        Simple implementation returns 0 as the start time in Workers. The spec
        is currently imprecise here, but it does not have the unusual
        PerformanceTiming behavior in a Window which is part of User Timing 1.

        * workers/Worker.cpp:
        (WebCore::Worker::create):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        Record the moment of Worker creation.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::performance):
        * workers/WorkerGlobalScope.h:
        Construct the Performance object with the moment of creation (timeOrigin).

        * 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/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:
        Pass the moment of creation (timeOrigin) through to WorkerGlobalScope creation.

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

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

        Caused mediastream crashes. (Requested by bfulgham_ on
        #webkit).

        Reverted changeset:

        "Correct memory leak in MediaConstraints"
        https://bugs.webkit.org/show_bug.cgi?id=167744
        http://trac.webkit.org/changeset/211579

2017-02-02  Chris Dumez  <cdumez@apple.com>

        Rename Node::inDocument() to isConnected()
        https://bugs.webkit.org/show_bug.cgi?id=167743

        Reviewed by Sam Weinig.

        Rename Node::inDocument() to isConnected() to match the DOM specification more closely:
        - https://dom.spec.whatwg.org/#connected

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

        [Modern Media Controls] Provide a compact mode for when the controls are small
        https://bugs.webkit.org/show_bug.cgi?id=167746
        <rdar://problem/29565842>

        Reviewed by Dean Jackson.

        When the macOS inline media controls become too narrow to display both the volume and fullscreen
        buttons in their right container (width < 242), we switch to a compact mode where the controls bar
        is shorter and the buttons smaller.

        To facilitate this, we provide a new subclass of MacOSInlineMediaControls called MacOSCompactInlineMediaControls
        which changes some of the layout properties of the buttons to have shorter margins around buttons.

        We also added a new "Compact" LayoutTrait and improved IconService to provide specific icons
        for this mode for the buttons that can exist in compact mode. 

        To correctly implement the design, we needed to add a way to provide different margins around the
        left and right edges of the container, so the "padding" property is now split between "leftMargin"
        and "rightMargin", and to make property naming cleaner, the "margin" property which specifies the
        space between each button in a container is now called "buttonMargin". We also set the default
        values for those properties to be 24 (instead of 0) which are the most widely used values, requiring
        less customization.

        Tests: media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-buttons-styles.html
               media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-constructor.html
               media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-controls-bar-styles.html
               media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-layout.html
               media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-volume-styles.html
               media/modern-media-controls/media-controller/media-controller-toggle-compact-mode.html

        * Modules/modern-media-controls/controls/buttons-container.js:
        (ButtonsContainer.prototype.layout): Refactor the "margin" and "padding" properties into
        "leftMargin", "rightMargin" and "buttonMargin".
        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype._updateImage): Fix a small bug that would prevent the image source
        change to occur after changing the "iconName" property should the previous and new icons
        share the same metrics, which is the case for the "play" and "pause" icons in compact mode.
        * Modules/modern-media-controls/controls/icon-service.js: Add support for compact variants.
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconNameAndLayoutTraits):
        (const.iconService.new.IconService):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js: Adopt new margin defaults.
        * Modules/modern-media-controls/controls/layout-item.js: Add the new "Compact" LayoutTrait.
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css: Added.
        (.media-controls.mac.inline.compact > .controls-bar):
        (.media-controls.mac.inline.compact button.play-pause):
        (.media-controls.mac.inline.compact button.skip-back):
        (.media-controls.mac.inline.compact .scrubber.slider):
        (.media-controls.mac.inline.compact button.mute):
        (.media-controls.mac.inline.compact button.fullscreen):
        (.media-controls.mac.inline.compact .time-label,):
        (.media-controls.mac.inline.compact .volume-slider-container):
        (.media-controls.mac.inline.compact .volume.slider):
        (.media-controls.mac.inline.compact .scrubber.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.js: Added.
        (MacOSCompactInlineMediaControls):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js: Adopt new margin defaults.
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js: Adopt new margin defaults
        and make the _leftContainer and _rightContainer properties public such that the MacOSCompactInlineMediaControls
        subclass may customize them without accessing a private property.
        (MacOSInlineMediaControls.prototype.layout):
        (MacOSInlineMediaControls.prototype.showTracksPanel):
        * Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/interval-skip-back-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/interval-skip-back-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/play-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/play-compact@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-compact@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-compact@2x.png: Added.
        * Modules/modern-media-controls/js-files: Add the new files so they are concatenated by the build script.
        * Modules/modern-media-controls/media/media-controller.js: Toggle compact mode if controls
        are below the 242px width threshold.
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._shouldFadeBetweenControls):
        (MediaController.prototype._updateControlsSize):
        (MediaController.prototype._controlsWidth):
        (MediaController.prototype._controlsClass):
        (MediaController):
        * WebCore.xcodeproj/project.pbxproj: Add new files and perform some cleanup so that the
        project accurately lists all the existing project files and remove some older ones.

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

        Unreviewed, rolling out r211571 and r211582.
        https://bugs.webkit.org/show_bug.cgi?id=167751

        This change caused API test WebKit1.MemoryPressureHandler to
        fail with an assertion. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Mac] In-process memory pressure monitor for WebContent
        processes."
        https://bugs.webkit.org/show_bug.cgi?id=167491
        http://trac.webkit.org/changeset/211571

        "Unreviewed attempt to fix the Windows build after r211571."
        http://trac.webkit.org/changeset/211582

2017-02-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the Windows build after r211571.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::thresholdForPolicy):
        (WebCore::policyForFootprint):

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

        Correct memory leak in MediaConstraints
        https://bugs.webkit.org/show_bug.cgi?id=167744
        <rdar://problem/30331444>

        Reviewed by Anders Carlsson.

        ConstraintHolder returns a reference to an object created by operator new. When the
        returned value is assigned or stored in Vector or other containers we leak memory.
        Instead, this value should just be returned as a regular object so that the return
        value optimization can make sure memory is properly (and efficiently) used.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::FlattenedConstraint::ConstraintHolder::create): Return by value.

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes AKA websam
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Add a new timer-based memory pressure monitor that checks the process memory
        footprint every 30 seconds and reacts to changes by setting a MemoryUsagePolicy.

        There are four MemoryUsagePolicy values:

            - Unrestricted (below 1GB)
            - Conservative (above 1GB)
            - Strict (above 2GB)
            - Panic (above 4GB, or 3GB if 32-bit)

        For Strict and above, the old-style "isUnderMemoryPressure()" API will return true.

        Transitioning to a higher policy will cause memory pressure handlers to run:

        At Strict, we run the "non-critical" memory pressure handler, then carry on.

        At Panic, we run the "critical" memory pressure handler. If that fails to recover
        enough memory to bring us back below 4GB, we may kill the process:

        A process is eligible to get killed for using too much memory if:

            - It's not visible on screen (i.e it's a background tab.)
            - It's not playing audio.
            - It has not performed a main frame navigation in the last hour.

        Before killing the process, an exit-time callback will run. This patch installs such
        a callback that prints out some time-of-death statistics about C++ and JavaScript memory
        usage to hopefully help understand what was soaking up all the memory.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setState):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::didCompleteLoad):
        * page/MainFrame.h:
        * page/MemoryRelease.cpp:
        (WebCore::pageCount):
        (WebCore::logMemoryStatisticsAtTimeOfDeath):
        (WebCore::didExceedMemoryLimitAndFailedToRecover):
        (WebCore::processIsEligibleForMemoryKill):
        * page/MemoryRelease.h:
        * page/ResourceUsageThread.h:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        (WebCore::toString):
        (WebCore::thresholdForPolicy):
        (WebCore::policyForFootprint):
        (WebCore::MemoryPressureHandler::measurementTimerFired):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setMemoryKillCallback):
        (WebCore::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback):
        (WebCore::MemoryPressureHandler::isUnderMemoryPressure):

2017-02-02  Chris Dumez  <cdumez@apple.com>

        [Crash] com.apple.WebKit.WebContent at WebKit: WebKit::WebPage::fromCorePage()
        https://bugs.webkit.org/show_bug.cgi?id=167738
        <rdar://problem/30229990>

        Reviewed by Andreas Kling.

        Upon destruction of a Page, we destroy the BackForwardClient, which is supposed
        to keep track of HistoryItems associated to this particular page and remove them
        from the PageCache. Given the crash trace, the issue seems to be that some
        HistoryItems associated with the Page sometimes linger in the PageCache *after*
        the Page has been destroyed, which leads to crashes later on when pruning the
        PageCache.

        In order to make the process more robust, this patch refactors the code so that
        the Page is now in charge of removing all its associated HistoryItems from the
        PageCache instead of relying on the BackForwardClient. Also, instead of having
        the Page keep track of which HistoryItems are associated with it (which is
        error prone), we now scan all PageCache entries instead to find which ones are
        associated with the Page. While this is in theory slower, this is much safer
        and in practice not an issue because the PageCache usually has 3-5 entries.

        No new tests, could not reproduce.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/CachedPage.h:
        (WebCore::CachedPage::page):
        * history/PageCache.cpp:
        (WebCore::PageCache::removeAllItemsForPage):
        * history/PageCache.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):

2017-02-02  Antti Koivisto  <antti@apple.com>

        Column progression wrong after enabling pagination on RTL document
        https://bugs.webkit.org/show_bug.cgi?id=167733
        <rdar://problem/29012252>

        Reviewed by Zalan Bujtas.

        Column progression depends on document direction but was not updated when direction changed.

        Test: fast/multicol/pagination/pagination-dynamic-rtl.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

            Update column styles if document direction changes.

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

        [EME][GStreamer] Fixed decryptor selection
        https://bugs.webkit.org/show_bug.cgi?id=167588

        Reviewed by Žan Doberšek.

        GStreamer selected a decryptor automatically but we need to be
        able to tell it which decryptor we want because one file can be
        encrypted with more than one system and the one we want to use can
        depend on what the user tells us.

        Now when the demuxer is about to select the demuxer, it runs a
        GstContext query with the events, which are forwarded through the
        EME api to the application, which will answer the the
        generateKeyRequest and then we can instruct the demuxer to select
        the one we tell it, not the one that is selected automatically. If
        the demuxer has already a preferred decryptor, the codepath will
        be similar to the older one.

        Something that is also fixed is the report of the keyneeded event,
        which will contain all pssh boxes as requested by the spec.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Intercept
        the event and handle it.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        Initialize the CDM session.
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        Unlock the protection condition just in case and set CDM to null.
        (WebCore::extractEventsAndSystemsFromMessage): Access the events
        and accepted key systems coming at the message from the demuxer.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        Handle the protection event not as an element event but as a
        context request. It also concatenates all the initdatas in case
        there is more than one. The event is sent in the main thread and
        the current one blocks until a timeout is hit or the
        generateKeyRequest is called.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        Check if the event was already handled and if not, run the need
        key event.
        (WebCore::MediaPlayerPrivateGStreamerBase::receivedGenerateKeyRequest):
        Notify the that the query arrived so that we can unlock the
        demuxer thread.
        (WebCore::keySystemIdToUuid): Translates ids to uuids, meaning
        the ones coming from JS to the ones coming from the media engine.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Attributes and methods.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webkit_media_clear_key_decrypt_class_init):
        (webKitMediaClearKeyDecryptorRequestDecryptionKey): Deleted.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.h:
        Added the ui and uuid.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptSinkEventHandler): Do not rely
        on the subclass, just forward the event to the pipeline inside a message.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:
        Remove unused function signature.
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::appendPipelineNeedContextMessageCallback): Renamed from
        appendPipelineElementMessageCallback.
        (WebCore::AppendPipeline::AppendPipeline): Connect to the
        need-context message instead of the element one.
        (WebCore::AppendPipeline::dispatchPendingDecryptionKey):
        Dispatches the drm-cypher message if there is one pending.
        (WebCore::AppendPipeline::dispatchDecryptionKey): Dispatches the
        drm-cypher.
        (WebCore::AppendPipeline::handleNeedContextSyncMessage): Handles
        the need-context event instead of the element one.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        Dispatches the key to the pipeline if there's any pending.
        (WebCore::appendPipelineElementMessageCallback): Deleted.
        (WebCore::AppendPipeline::handleElementMessage): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h: New methods
        and attributes.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::dispatchDecryptionKey):
        Use the dispatchDecryptionKey method of the AppendPipeline.

2017-02-02  Joseph Pecoraro  <pecoraro@apple.com>

        Removed unused EventHandler members
        https://bugs.webkit.org/show_bug.cgi?id=167723

        Reviewed by Yusuke Suzuki.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        Remove unused members.

        * editing/FrameSelection.cpp:
        * html/HTMLTextAreaElement.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderSlider.cpp:
        Remove unnecessary includes.

2017-02-02  Joseph Pecoraro  <pecoraro@apple.com>

        Removed unused m_navigationStart from NavigatorGamepad
        https://bugs.webkit.org/show_bug.cgi?id=167722

        Reviewed by Yusuke Suzuki.

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::NavigatorGamepad):
        (WebCore::NavigatorGamepad::from):
        * Modules/gamepad/NavigatorGamepad.h:
        (WebCore::NavigatorGamepad::navigationStart): Deleted.

2017-02-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        In iOS, we should take background assertion when accessing localstorage databases.
        https://bugs.webkit.org/show_bug.cgi?id=165478

        Move WebSQLiteDatabaseTrackerClient from WebKitLegacy to WebCore so that it can be accessible from
        WebKit1 and WebKit2. Previously, to avoid dependencies on UIKit, WebKitLegacy introduced several
        global methods for UIKit to setup the start/end background task blocks on runtime (WebKitSetStartBackgroundTaskBlock,
        WebKitSetInvalidWebBackgroundTaskIdentifier and WebKitSetEndBackgroundTaskBlock). Since we have to
        move the background task handling to WebCore, to avoid adding WebCore dependencies on UIKit, this
        patch introdues a new WebCore class WebBackgroundTaskController which holds the start/end background
        task blocks. The existing WebKitSetStartBackgroundTaskBlock and WebKitSetEndBackgroundTaskBlock methods
        in WebKit1 will use WebBackgroundTaskController to store the blocks set by UIKit. 

        Reviewed by Brady Eidson.

        No new test since this is code refactoring.

        * WebCore.xcodeproj/project.pbxproj: Add a new class WebBackgroundTaskController to the project. Also move
            WebSQLiteDatabaseTrackerClient from WebKitLegacy to WebCore.
        * platform/ios/WebBackgroundTaskController.h: Use properties to hold the blocks for starting or ending background tasks.
        * platform/ios/WebBackgroundTaskController.mm:
        (+[WebBackgroundTaskController sharedController]):
        (-[WebBackgroundTaskController dealloc]):
        (-[WebBackgroundTaskController startBackgroundTaskWithExpirationHandler:]): Start a background task with a expiration handler;
            to start the background task, we will use backgroundTaskStartBlock set up by UIKit.
        (-[WebBackgroundTaskController endBackgroundTaskWithIdentifier:]): Call backgroundTaskEndBlack to end a background task.
        * platform/ios/WebSQLiteDatabaseTrackerClient.h: Copied from Source/WebKit/ios/Storage/WebSQLiteDatabaseTrackerClient.h.
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm: Copied from Source/WebKit/ios/Storage/WebSQLiteDatabaseTrackerClient.mm.
        (WebCore::WebSQLiteDatabaseTrackerClient::sharedWebSQLiteDatabaseTrackerClient): Make WebSQLiteDatabaseTrackerClient a singleton.
        (WebCore::WebSQLiteDatabaseTrackerClient::WebSQLiteDatabaseTrackerClient): 
        (WebCore::WebSQLiteDatabaseTrackerClient::~WebSQLiteDatabaseTrackerClient):
        (WebCore::WebSQLiteDatabaseTrackerClient::willBeginFirstTransaction): Use a utility class WebDatabaseTransactionBackgroundTaskController
            to schedule database transaction background task.
        (WebCore::WebSQLiteDatabaseTrackerClient::didFinishLastTransaction): Use WebDatabaseTransactionBackgroundTaskController to stop
            databas transaction background task.
        (transactionBackgroundTaskIdentifierLock: Moved from Source/WebKit/mac/Storage/WebDatabaseManager.mm.
        (setTransactionBackgroundTaskIdentifier): Ditto.
        (getTransactionBackgroundTaskIdentifier): Ditto.
        (+[WebDatabaseTransactionBackgroundTaskController startBackgroundTask]): Ditto.
        (+[WebDatabaseTransactionBackgroundTaskController endBackgroundTask]): Ditto.

2017-02-01  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement MediaKeySession::update()
        https://bugs.webkit.org/show_bug.cgi?id=167636

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the MediaKeySession::update() method by following the steps as
        they are described in the specification.

        In order to sanitize the passed-in response data, CDM::sanitizeResponse()
        is added. It passes the SharedBuffer object by reference to the CDMPrivate
        interface implementor, which returns a SharedBuffer object containing
        sanitized response data.

        CDMInstance::updateLicense() virtual method is added to perform the license
        update for some specific CDMInstance object. After the update the CDMInstance
        invokes the callback that's passed to updateLicense(), providing information
        about session being closed, changed keys or expiration value, any message
        that has to be enqueued, and whether the update was successful.

        After that callback is invoked, MediaKeySession::update() goes on to handle
        all the provided information in a future task, finally resolving the promise
        (or rejecting it beforehand in case of any failure during response handling
        or license update).

        Three algorithms that can be invoked from MediaKeySession::update() (key
        status update, expiration update and session closure) will be implemented
        separately. Placeholder methods are provided until then.

        MockCDM::sanitizeResponse() and MockCDMInstance::updateLicense() are
        implemented for testing purposes. For now only the response sanitization
        and sanitized response format are checked there. Key status update,
        expiration update and session closure should be tested once the
        implementations for those algorithms are added.

        Test: media/encrypted-media/mock-MediaKeySession-update.html

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::sanitizeResponse):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::updateKeyStatuses):
        (WebCore::MediaKeySession::updateExpiration):
        (WebCore::MediaKeySession::sessionClosed):
        * Modules/encryptedmedia/MediaKeySession.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeResponse):
        (WebCore::MockCDMInstance::updateLicense):
        * testing/MockCDMFactory.h:

2017-02-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update CARingBuffer class
        https://bugs.webkit.org/show_bug.cgi?id=167656
        <rdar://problem/30318329>

        Unreviewed fix the 32-bit build after r211539.

        * platform/audio/mac/CAAudioStreamDescription.cpp:
        (WebCore::CAAudioStreamDescription::CAAudioStreamDescription):

2017-02-01  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] With visual viewports, a fixed bottom bar can be clipped out when the keyboard is visible
        https://bugs.webkit.org/show_bug.cgi?id=167710
        rdar://problem/30100286

        Reviewed by Wenson Hsieh.
        
        Add a bit of logging to show when RLC decides to not composite a fixed element which
        is out of bounds.

        Test: fast/visual-viewport/ios/bottom-bar-with-keyboard.html

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

2017-02-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update CARingBuffer class
        https://bugs.webkit.org/show_bug.cgi?id=167656

        Unreviewed build fix after r211539.

        * platform/audio/mac/CAAudioStreamDescription.cpp:
        (WebCore::CAAudioStreamDescription::CAAudioStreamDescription): Initialize a variable to fix
        release builds.

2017-02-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update CARingBuffer class
        https://bugs.webkit.org/show_bug.cgi?id=167656

        Reviewed by Jer Noble.

        API test CARingBufferTest added.

        * WebCore.xcodeproj/project.pbxproj: Add headers to framework so they can be used from the API test.

        * platform/audio/AudioStreamDescription.h: Add Int32.

        * platform/audio/mac/CAAudioStreamDescription.cpp:
        (WebCore::CAAudioStreamDescription::CAAudioStreamDescription):
        (WebCore::CAAudioStreamDescription::~CAAudioStreamDescription):
        (WebCore::CAAudioStreamDescription::format): Support Int32.
        (WebCore::CAAudioStreamDescription::operator==): Make inline.
        * platform/audio/mac/CAAudioStreamDescription.h:

        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::CARingBuffer): Move initializers into class declaration.
        (WebCore::CARingBuffer::allocate): Use flush method, get allocation info from a CAAudioStreamDescription.
        (WebCore::FetchABL): Add a mode parameter to allow samples to replace or mix into destination.
        (WebCore::CARingBuffer::flush): New.
        (WebCore::CARingBuffer::fetch): Add mode parameter.
        (WebCore::CARingBuffer::~CARingBuffer): Deleted.
        * platform/audio/mac/CARingBuffer.h:
        (WebCore::CARingBuffer::~CARingBuffer):

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::prepare): Use new CARingBuffer constructor.
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::prepare): Use new CARingBuffer constructor
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.

2017-02-01  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move TextFragmentIterator::runWidth to ::textWidth.
        https://bugs.webkit.org/show_bug.cgi?id=167705
        <rdar://problem/30314393>

        Reviewed by Antti Koivisto.

        We also don't need to compute logicalHeight for logicalLeft/right since the
        cases where it matters (floating boxes) are not supported by simple line layout. 

        Covered by existing test.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::updateLineConstrains):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::nextBreakablePositionInSegment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Fix compilation error under recent clang update
        https://bugs.webkit.org/show_bug.cgi?id=167707

        Reviewed by Eric Carlson.

        Include TypedArrayInlines.h to fix a "missing symbol" link error when compiling under a recent clang update.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2017-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Performance Timeline: Prepare for Worker support
        https://bugs.webkit.org/show_bug.cgi?id=167633

        Reviewed by Ryosuke Niwa.

        Remove references to Document/Frame in Performance. Instead use
        ScriptExecutionContext and pass in the time origin / SecurityOrigin
        where it is relevant. No tests should change this is just refactoring.

        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance):
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::now):
        (WebCore::Performance::reduceTimeResolution):
        (WebCore::Performance::navigation):
        (WebCore::Performance::timing):
        (WebCore::Performance::addResourceTiming):
        (WebCore::Performance::scriptExecutionContext): Deleted.
        * page/Performance.h:
        * page/Performance.idl:
        * page/PerformanceResourceTiming.cpp:
        (WebCore::monotonicTimeToDOMHighResTimeStamp):
        (WebCore::passesTimingAllowCheck):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::redirectStart):
        (WebCore::PerformanceResourceTiming::redirectEnd):
        (WebCore::PerformanceResourceTiming::fetchStart):
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        (WebCore::PerformanceResourceTiming::responseStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        (WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
        (WebCore::monotonicTimeToDocumentMilliseconds): Deleted.
        (WebCore::PerformanceResourceTiming::initiatorType): Deleted.
        (WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds): Deleted.
        * page/PerformanceResourceTiming.h:
        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::findExistingMarkStartTime):

2017-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r205136): {}.toString.call(crossOriginWindow) should not throw
        https://bugs.webkit.org/show_bug.cgi?id=167681
        <rdar://problem/30301117>

        Reviewed by Mark Lam.

        As per https://html.spec.whatwg.org/#crossorigingetownpropertyhelper-(-o,-p-):
        """
        If P is @@toStringTag, @@hasInstance, or @@isConcatSpreadable, then return
        PropertyDescriptor{ [[Value]]: undefined, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
        """

        We now implement this behavior instead of throwing.

        Test: http/tests/security/symbols-cross-origin.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):

2017-02-01  Brent Fulgham  <bfulgham@apple.com>

        Correct "filesHaveSameVolume" predicate
        https://bugs.webkit.org/show_bug.cgi?id=167696
        <rdar://problem/30298722>

        Reviewed by David Kilzer.

        We are passing %-encoded strings to the underlying operating system's file system APIs.
        This doesn't work. Instead, we need to present a decoded version of the file path
        that matches what the system APIs expect.

        Tested by new TestWebKitAPI Test.

        * platform/FileSystem.cpp:
        (WebCore::filesHaveSameVolume): Make sure the file paths we give to the underlying
        operating system are not percent encoded.
        * platform/FileSystem.h: Export 'filesHaveSameVolume' for use by testing system.

2017-02-01  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/tracks-support/tracks-support-click-track-in-panel.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=165319
        <rdar://problem/30284104>

        Reviewed by Dean Jackson.

        Running media/controls/track-menu.html before media/modern-media-controls/tracks-support/tracks-
        support-click-track-in-panel.html makes that test time out in all test runs. The root of the issue
        is that animations are suspended by media/controls/track-menu.html with a call to
        internals.suspendAnimations(), and that state isn't reset with a call to internals.resumeAnimations().
        Then, media/modern-media-controls/tracks-support/tracks-support-click-track-in-panel.html fails because
        the selection animation for the tracks panel menu item that is clicked never completes and the delegate
        to notify that an item in the tracks panel was selected is never fired, which leads to the test failure.

        We change Internals::suspendAnimations() and Internals::resumeAnimations() to only affect the current
        document, rather than calling into AnimationController::suspendAnimations() which would do just that,
        but also set a Frame-wide flag that would prevent further animations from running, even in a subsequent
        document load.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Ensure the document that is about to be destroyed is no longer
        associated with an AnimationController.
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensureCompositeAnimation): Update the animation's suspend state in case
        the document its renderer is associated with is suspended. This is required since previously CompositeAnimations
        would set their suspend state in their constructor, based on the Frame-wide suspended state, but there is no
        document to use as a basis to query its suspended state in that constructor.
        (WebCore::AnimationControllerPrivate::animationsAreSuspendedForDocument):
        (WebCore::AnimationControllerPrivate::detachFromDocument):
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::startAnimationsIfNotSuspended):
        (WebCore::AnimationController::animationsAreSuspendedForDocument):
        (WebCore::AnimationController::detachFromDocument):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * testing/Internals.cpp:
        (WebCore::Internals::animationsAreSuspended):
        (WebCore::Internals::suspendAnimations):
        (WebCore::Internals::resumeAnimations):

2017-02-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix after r211488.

        * accessibility/AXObjectCache.h: Removed property svn:executable.

2017-02-01  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * html/HTMLMediaElement.h: Removed property svn:executable.

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

        NULL-deref crash in TextTrack::removeCue()
        https://bugs.webkit.org/show_bug.cgi?id=167615

        Reviewed by Eric Carlson.

        Test: http/tests/media/track-in-band-hls-metadata-crash.html

        Follow-up to r211401. When passing around a reference to an object, the assumption is that
        the caller is retaining the underlying object. This breaks down for
        InbandDataTextTrack::removeDataCue(), which releases its own ownership of the cue object,
        then passes the reference to that object to its superclass to do further remove steps. The
        retain count of the cue can thus drop to zero within the scope of
        InbandTextTrack::removeCue(). Use "take" semantics to remove the cue from the
        m_incompleteCueMap without releasing ownership, and pass a reference to that retained object
        on to removeCue(), guaranteeing that the cue will not be destroyed until after the
        romeveDataCue() method returns.

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::removeDataCue):

2017-02-01  Nan Wang  <n_wang@apple.com>

        AX: Incorrect range from index and length in text controls when there are newlines
        https://bugs.webkit.org/show_bug.cgi?id=167677
        <rdar://problem/30300099>

        Reviewed by Chris Fleizach.

        When there are newlines in text controls, the VisiblePosition that is created
        from the index could be wrong. Because the index doesn't include the information 
        regarding a position's affinity. Fixed it by using CharacterOffset instead, since
        it doesn't require that information.

        Test: accessibility/mac/range-for-contenteditable-newline.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange):
        (WebCore::AXObjectCache::nextCharacterOffset):
        (WebCore::AXObjectCache::characterOffsetForIndex):

2017-02-01  Timothy Hatcher  <timothy@hatcher.name>

        AXObjectCache is missing two functions at link time when !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=167691

        Reviewed by Chris Fleizach.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::recomputeDeferredIsIgnored): Added empty stub.
        (WebCore::AXObjectCache::performDeferredIsIgnoredChange): Added empty stub.

2017-02-01  Timothy Hatcher  <timothy@hatcher.name>

        HTMLMediaElement.h fails to build when ENABLE(MEDIA_CONTROLS_SCRIPT) is false
        https://bugs.webkit.org/show_bug.cgi?id=167689

        Reviewed by Joseph Pecoraro.

        * html/HTMLMediaElement.h: Move mediaControlsHost() into the ENABLE(MEDIA_CONTROLS_SCRIPT)
        block that is just above it to match m_mediaControlsHost.

2017-02-01  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableByteStreamController pull()
        https://bugs.webkit.org/show_bug.cgi?id=167593

        Reviewed by Youenn Fablet.

        Implemented pull() method for ReadableByteStreamController. Also updated
        pendingPullIntos attribute, which was a more complex object than necessary
        (an array is enough).

        Added 2 tests that allow covering most of new code. Code not yet tested will
        become reachable as the rest of the spec is implemented (new tests will then
        be added).

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Updated pendingPullIntos.
        (readableByteStreamControllerCancel): Updated pendingPullIntos.
        (readableByteStreamControllerClose): Updated pendingPullIntos.
        (readableByteStreamControllerHandleQueueDrain): Added.
        (readableByteStreamControllerPull): Added.

2017-02-01  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] qtdemux: Update the tfdt patch to the version finally accepted upstream
        https://bugs.webkit.org/show_bug.cgi?id=166529

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline): Don't use the "always-honor-tfdt" property
        in qtdemux anymore.

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

        Unreviewed, build fix for macOS and iOS ports, part 2

        Annotate the function with static.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::rejectToPropagateNetworkError):

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

        Unreviewed, build fix for macOS and iOS ports

        * bindings/js/ModuleFetchFailureKind.h: Renamed from Source/ModuleFetchFailureKind.h.

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

        Propagate networking errors correctly for import() operator
        https://bugs.webkit.org/show_bug.cgi?id=167501

        Reviewed by Ryosuke Niwa.

        We use the promise chain inside the module loader pipeline.
        The problem is that,

        1. The errors of loading module scripts are propagated through the promise's rejection.
        2. Some module related errors like syntax error (when scanning module dependencies) are
           reported at loading time (evaluating time). These errors are propagated through the
           promise rejections and dumped to the console. LoadableModuleScript set catch handler
           for that and print these errors to the console for ScriptElement.
        3. Some of errors are already reported to the console. For example, networking errors
           are reported by the CachedModuleLoader.
        4. But there is no way to distinguish between (2) and (3) at the catch handler.

        Previously, we propagate the special symbol for the already reported errors to distinguish
        that. This was OK because these errors cannot be catched by the user code. However,
        recent `import()` call needs to expose these errors to the user code. So now, accidentally,
        the special purpose symbol is exposed.

        Instead of propagating the special symbol, this patch just propagates the errors. But these
        error objects are annotated with the private symbol. So these errors can be distinguished
        from the other ones.

        Currently, we do not have the way to expose the error details to the client of the
        CachedScript. So we just report the error with the failed / canceled. This should be
        more descriptive error messages in the separate patch[1].

        [1]: https://bugs.webkit.org/show_bug.cgi?id=167553

        Tests: http/tests/security/mixedContent/import-insecure-script-in-iframe.html
               js/dom/modules/import-not-found-error.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::resolveWithCallback):
        (WebCore::DeferredPromise::rejectWithCallback):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setupModuleScriptHandlers):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::moduleLoaderAlreadyReportedErrorSymbol): Deleted.
        (WebCore::ScriptController::moduleLoaderFetchingIsCanceledSymbol): Deleted.
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::rejectToPropagateNetworkError):
        (WebCore::ScriptModuleLoader::fetch):
        (WebCore::ScriptModuleLoader::notifyFinished):
        * bindings/js/WebCoreBuiltinNames.h:

2017-01-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Regression (Safari 10.1): Pressing Return in a contenteditable no longer inserts a line break under certain conditions
        https://bugs.webkit.org/show_bug.cgi?id=167525
        <rdar://problem/30270210>

        Reviewed by Ryosuke Niwa.

        Test: fast/events/input-events-insert-newlines-after-mutation.html

        Reverts an unintended change made while refactoring code for input events that caused input events to be
        dispatched immediately rather than on the scoped queue. Normally, input events are dispatched in
        CompositeEditCommand::apply after the end of the scope, but TypingCommands may fire input events *from within*
        the scope by calling typingAddedToOpenCommand.

        Instead, TypingCommands should always dispatch events
        synchronously after the end of the scoped queue in CompositeEditCommand::apply, but this is a riskier change
        than we should currently allow, so we should revert to our old behavior for the time being.

        * editing/Editor.cpp:

2017-01-31  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Do not assert on zero length/width trailing whitespace.
        https://bugs.webkit.org/show_bug.cgi?id=167679

        Reviewed by Simon Fraser.

        It's valid to have an zero length/width trailing whitespace.

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace): Zero length -> nothing to do.
        Zero width with length > 0 (font-size: 0) -> remove trailing run.

2017-01-31  Alex Christensen  <achristensen@webkit.org>

        Fix debug libwebrtc build after r211439
        https://bugs.webkit.org/show_bug.cgi?id=167572

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::OnMessage):

2017-01-31  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Collect fragments in LineState only when needed for post-processing.
        https://bugs.webkit.org/show_bug.cgi?id=167655
        <rdar://problem/30290592>

        Reviewed by Antti Koivisto.

        The fragments we need to keep around for basic line breaking are the last and last non-whitespace fragments.
        However in certain cases such as text-align: justify, we have to traverse the entire line
        at post-processing which requires all the fragments on the current line.
        This patch speeds up the basic line handling by using m_fragment list only for the special cases.
        It improves PerformanceTests/Layout/simple-line-layout-non-repeating-text.html by ~7% (local measurement)
        median: 114.25 runs/s -> median: 122.16 runs

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::setNeedsAllFragments):
        (WebCore::SimpleLineLayout::LineState::hasTrailingWhitespace):
        (WebCore::SimpleLineLayout::LineState::lastFragment):
        (WebCore::SimpleLineLayout::LineState::expansionOpportunityCount):
        (WebCore::SimpleLineLayout::LineState::isEmpty):
        (WebCore::SimpleLineLayout::LineState::endPositionForCollapsedFragment):
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded): Track uncompleted width.
        (WebCore::SimpleLineLayout::LineState::revertToLastCompleteFragment):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::updateLineConstrains): Set the slow path for text-align: justify.
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isValid):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::length):

2017-01-31  Chris Dumez  <cdumez@apple.com>

        com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::FrameView::didDestroyRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=167665
        <rdar://problem/30241193>

        Reviewed by Andreas Kling.

        When destroying a PageCache entry, we would call Document::prepareFromDestruction()
        which would destroy the render tree and then call FrameView::didDestroyRenderTree().
        We would sometimes hit the ASSERT(m_widgetsInRenderTree.isEmpty()) assertion in
        didDestroyRenderTree(). This indicates that there are still RenderWidgets associated
        with the FrameView even though we claim we already destroyed the render tree.

        The reason for this is that, in the PageCache context, the top document's frame is
        reused on navigation and may not be associated with a new document that is currently
        displayed, has a render tree (and possible RenderWidgets). The solution proposed is
        to stop calling FrameView::didDestroyRenderTree() in Document::prepareFromDestruction()
        if the frame's document is not |this|. This happens when the document is destroyed
        while in PageCache. We do not want to mess with the frame / frameview in this case
        since they are no longer associated to the present document anymore.

        No new tests, already covered by existing tests which currently crash flakily.

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

2017-01-31  Sam Weinig  <sam@webkit.org>

        Remove unused/rarely used bindings helpers
        https://bugs.webkit.org/show_bug.cgi?id=167648

        Reviewed by Anders Carlsson.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsString): Deleted.
        (WebCore::jsStringOrUndefined): Deleted.
        (WebCore::finiteInt32Value): Deleted.
        (WebCore::toJS): Deleted.
        Remove unused functions. The toJS overrides can be replaced with their
        modern JSDOMConvert counterparts.
        
        * bindings/js/JSDOMExceptionHandling.h:
        (WebCore::toJS): Deleted.
        (WebCore::toJSNewlyCreated): Deleted.
        Remove unused functions.

        * bindings/js/JSDOMIterator.h:
        Add more specific include of JSDOMConvert.h to fix compile.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::reject):
        Create the Symbol directly, instead of using the toJS override.

        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::constructJSWorker):
        Use JSDOMConvert toJS function.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::retrieveResponse):
        Use JSDOMConvert toJS functions.

        * bindings/js/ScriptController.h:
        Add missing forward declaration of URL.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::resolve):
        Create the Symbol directly, instead of using the toJS override.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        Use JSDOMConvert toJS functions.

2017-01-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should be robust when UIItemProvider fails to initialize an object
        https://bugs.webkit.org/show_bug.cgi?id=167663
        <rdar://problem/30294240>

        Reviewed by Tim Horton.

        Adds a nil check for the result of -createObjectOfClass:error:.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard _tryToCreateAndAppendObjectOfClass:toArray:usingProvider:]):

2017-01-31  Keith Rollin  <krollin@apple.com>

        Variable used after it's been WTFMove'd
        https://bugs.webkit.org/show_bug.cgi?id=167658

        Reviewed by Chris Dumez.

        Rather than WTFMoving the variable as part of passing it to a function
        that takes an RValue-ref, call copyRef to provide the RValue-ref. This
        preserves the original variable for later use in the function.

        No new tests -- this issue was found by inspection. It's not apparent
        what the side-effect of this bug is or how a test would verify it.

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

2017-01-31  Anders Carlsson  <andersca@apple.com>

        Apple Pay button does nothing on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=167664
        rdar://problem/30273885

        Reviewed by Sam Weinig.

        Separate line item validation into convertAndValidateTotal and convertAndValidate. The former
        works on totals (which require an amount), and the latter works on regular line items that do not require an amount
        if the item type is "pending".

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidateTotal):
        (WebCore::convertAndValidate):
        Only check the amount if the type is not pending.

        (WebCore::ApplePaySession::completeShippingMethodSelection):
        (WebCore::ApplePaySession::completeShippingContactSelection):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        Call convertAndValidateTotal for totals.

2017-01-31  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add a libwebrtc AudioModule specific to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=167572

        Reviewed by Alex Christensen.

        To be covered by webrtc audio tests.
        Adding an AudioModule to circumvent the default LibWebRTC Audio Module which does the audio directly.
        The implementation of the AudioModule is restricted to enable fueling the incoming audio tracks with incoming data.
        Code inspired from https://chromium.googlesource.com/chromium/src/+/master/remoting/protocol/webrtc_audio_module.h

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp: Added.
        (WebCore::LibWebRTCAudioModule::LibWebRTCAudioModule):
        (WebCore::LibWebRTCAudioModule::RegisterAudioCallback):
        (WebCore::LibWebRTCAudioModule::OnMessage):
        (WebCore::LibWebRTCAudioModule::StartPlayout):
        (WebCore::LibWebRTCAudioModule::StopPlayout):
        (WebCore::LibWebRTCAudioModule::StartPlayoutOnAudioThread):
        (WebCore::LibWebRTCAudioModule::PollFromSource):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::ThreadMessageData::ThreadMessageData):
        (WebCore::initializePeerConnectionFactoryAndThreads):

2017-01-31  Jessie Berlin  <jberlin@webkit.org>

        Build fix.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::takeFindStringFromSelection):
        (WebCore::Editor::replaceNodeFromPasteboard):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForDragAndDrop):

2017-01-31  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Add an audio stream description class
        https://bugs.webkit.org/show_bug.cgi?id=167639

        Reviewed by Youenn Fablet.

        No new tests, the new class is not used yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/AudioStreamDescription.h: Added.
        (WebCore::AudioStreamDescription::isPCM):
        * platform/audio/mac/CAAudioStreamDescription.cpp: Added.
        (WebCore::CAAudioStreamDescription::CAAudioStreamDescription):
        (WebCore::CAAudioStreamDescription::platformDescription):
        (WebCore::CAAudioStreamDescription::format):
        (WebCore::toCAAudioStreamDescription):
        (WebCore::CAAudioStreamDescription::operator==):
        (WebCore::operator==):
        * platform/audio/mac/CAAudioStreamDescription.h: Added.
        (WebCore::operator!=):
        (WebCore::CAAudioStreamDescription::bytesPerFrame):
        (WebCore::CAAudioStreamDescription::bytesPerPacket):
        (WebCore::CAAudioStreamDescription::formatFlags):
        (WebCore::CAAudioStreamDescription::operator==):
        (WebCore::CAAudioStreamDescription::operator!=):
        (WebCore::CAAudioStreamDescription::streamDescription):

2017-01-31  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection methods can take dictionaries as input
        https://bugs.webkit.org/show_bug.cgi?id=167590

        Reviewed by Alex Christensen.

        Test: webrtc/rtcpeerconnection-error-messages.html

        Made addIceCandidate/setRemoteDescription/setLocalDescription take either dictionaries or objects as parameter.
        Spec only mandates this for addIceCandidate, but sites may be using the old version for setRemoteDescription and setLocalDescription.

        Updated RTCPeerConnection methods error messages.

        * Modules/mediastream/RTCPeerConnection.js:
        (getLocalStreams):
        (getStreamById):
        (addStream):
        (createOffer):
        (createAnswer):
        (setLocalDescription):
        (setRemoteDescription):
        (addIceCandidate):
        (getStats):
        * Modules/mediastream/RTCPeerConnectionInternals.js:

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

        REGRESSION (r209411): Scrolling to a fragment identifier in overflow:scroll inside position:fixed no longer works
        https://bugs.webkit.org/show_bug.cgi?id=167630
        rdar://problem/30091558

        Reviewed by Zalan Bujtas.
        
        r209411 added special handling for scrolling inside position:fixed, but cut off all scrolling, breaking
        overflow:scroll inside position:fixed. Fix by only handling the position:fixed case when we get to 
        the root layer, which is where we scroll the document.

        Test: fast/overflow/scroll-anchor-in-overflow-in-position-fixed.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::getRectToExpose):

2017-01-31  Zan Dobersek  <zdobersek@igalia.com>

        [EME] InitDataRegistry should use base64url encoding and decoding for keyids
        https://bugs.webkit.org/show_bug.cgi?id=167592

        Reviewed by Jer Noble.

        In InitDataRegistry, WTF::base64URLEncode() and WTF::base64URLDecode() should
        be used to encode and decode the 'keyids' initialization data format, as
        required by the relevant specification.
        https://w3c.github.io/encrypted-media/format-registry/initdata/keyids.html#format

        Relevant test case was added to media/encrypted-media/mock-MediaKeySession-generateRequest.html.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        (WebCore::sanitizeKeyids):

2017-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Performance Timeline: Add serializer to PerformanceEntry
        https://bugs.webkit.org/show_bug.cgi?id=167632

        Reviewed by Ryosuke Niwa.

        Test: performance-api/performance-timeline-serializers.html

        * page/PerformanceEntry.idl:

2017-01-31  Chris Fleizach  <cfleizach@apple.com>

        AX: enable search predication for iOS
        https://bugs.webkit.org/show_bug.cgi?id=167558
        <rdar://problem/30251367>

        Reviewed by Joanmarie Diggs.

        Move the code to support accessibility searching into a shared place so it can be used by iOS.

        Test: accessibility/ios-simulator/ios-search-predicate.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityFindMatchingObjects:]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray):
        (createAccessibilitySearchKeyMap):
        (accessibilitySearchKeyForString):
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilitySearchKeyMap): Deleted.
        (accessibilitySearchKeyForString): Deleted.
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute): Deleted.
        (convertToNSArray): Deleted.

2017-01-30  Joseph Pecoraro  <pecoraro@apple.com>

        [WebIDL] Add support for inherit serializer attribute
        https://bugs.webkit.org/show_bug.cgi?id=167274

        Reviewed by Darin Adler.

        Support for serializer { inherit }, which will be used by Resource Timing.
        https://heycam.github.io/webidl/#idl-serializers

        * bindings/scripts/CodeGenerator.pm:
        (GetInterfaceForAttribute):
        (IsSerializableAttribute):
        Determine if an attribute is serializable at generation time so we can
        verify types. This allows us to support typedefs. We don't yet support
        serializing an attribute that is itself a serializable interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerFunction):
        (GenerateSerializerAttributesForInterface):
        Generate inherited attributes first, then generate our own list.
        Explicitly provided attribute names are expected to be serializable,
        so produce an error if they are not.

        * bindings/scripts/IDLParser.pm:
        (parseSerializationAttributes):
        Update parsing of serializer attributes to allow for multiple
        special strings. The spec does not precisely define where the
        special "attribute" keyword is allowed.

        (applyMemberList):
        (isSerializableAttribute): Deleted.
        Move serializable attribute checking to generation.

        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp: Added.
        * bindings/scripts/test/JS/JSTestSerializationInherit.h: Added.
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: Added.
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h: Added.
        The toJSON implementations are the most interesting.

        * bindings/scripts/test/TestSerialization.idl:
        Extend this test for typedefed attributes that are serializable.
        Change TestNode (a serializable Interface) to TestException (an
        unserializable Interface) for expected behavior of an
        unserializable attribute.

        * bindings/scripts/test/TestSerializationInherit.idl:
        Test for { inherit, attribute }.

        * bindings/scripts/test/TestSerializationInheritFinal.idl:
        Test for { inherit, attribute_names... }, and multi-level inherit.

2017-01-30  Joseph Pecoraro  <pecoraro@apple.com>

        Implement PerformanceObserver
        https://bugs.webkit.org/show_bug.cgi?id=167546
        <rdar://problem/30247959>

        Reviewed by Ryosuke Niwa.

        This implements PerformanceObserver from Performance Timeline Level 2:
        https://w3c.github.io/performance-timeline/

        Tests: performance-api/performance-observer-api.html
               performance-api/performance-observer-basic.html
               performance-api/performance-observer-callback-mutate.html
               performance-api/performance-observer-callback-task.html
               performance-api/performance-observer-entry-sort.html
               performance-api/performance-observer-exception.html
               performance-api/performance-observer-nested.html
               performance-api/performance-observer-order.html
               performance-api/performance-observer-periodic.html
               performance-api/performance-timeline-api.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        New files.

        * page/Performance.h:
        * page/Performance.cpp:
        (WebCore::Performance::mark):
        (WebCore::Performance::measure):
        (WebCore::Performance::registerPerformanceObserver):
        (WebCore::Performance::unregisterPerformanceObserver):
        (WebCore::Performance::queueEntry):
        Register PerformanceObservers with the Performance object.
        When new PerformanceEntries are created (Mark and Measure
        right now) check them against observers.

        * page/PerformanceEntry.cpp:
        (WebCore::PerformanceEntry::PerformanceEntry):
        (WebCore::PerformanceEntry::typeForEntryTypeString):
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::type):
        Give PerformanceEntry a convenience enum for easy comparison
        and to know if it is one of the built-in known types (which the
        PerformanceObserver API takes into account).

        * page/PerformanceObserver.cpp: Added.
        (WebCore::PerformanceObserver::PerformanceObserver):
        (WebCore::PerformanceObserver::observe):
        (WebCore::PerformanceObserver::disconnect):
        (WebCore::PerformanceObserver::queueEntry):
        (WebCore::PerformanceObserver::deliver):
        * page/PerformanceObserver.h:
        (WebCore::PerformanceObserver::create):
        (WebCore::PerformanceObserver::typeFilter):
        - TypeErrors on observe bad behavior
        - Completely replace types filter on observe
        - Handle register and unregister
        - Handle calling the callback

        * page/PerformanceObserverCallback.idl: Added.
        * page/PerformanceObserverEntryList.cpp: Added.
        (WebCore::PerformanceObserverEntryList::PerformanceObserverEntryList):
        (WebCore::PerformanceObserverEntryList::getEntries):
        (WebCore::PerformanceObserverEntryList::getEntriesByType):
        (WebCore::PerformanceObserverEntryList::getEntriesByName):
        * page/PerformanceObserverEntryList.h:
        (WebCore::PerformanceObserverEntryList::create):
        * page/PerformanceObserverEntryList.idl: Added.
        Implement sorting and filtering of entries.

        * page/PerformanceObserver.idl: Added.
        * page/PerformanceObserverCallback.h:
        (WebCore::PerformanceObserverCallback::~PerformanceObserverCallback):
        Mostly autogenerated.

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::measure):
        * page/PerformanceUserTiming.h:
        Update these to return the entry so it can be passed on to
        any interested PerformanceObservers.

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

        [WebRTC] getStats does not support legacy callback
        https://bugs.webkit.org/show_bug.cgi?id=167617

        Reviewed by Alex Christensen.

        Covered by updated tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        (WebCore::RTCPeerConnection::privateGetStats): Deleted.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnection.js:
        (addIceCandidate):
        (getStats): Deleted.

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

        JSDOMBinding is too big. Split it up!
        https://bugs.webkit.org/show_bug.cgi?id=167601

        Reviewed by Darin Adler.

        Splits JSDOMBinding.h/cpp up a bit by splitting out:
        - JSDOMBindingCaller.h
        - JSDOMBindingSecurity.h/cpp
        - JSDOMExceptionHandling.h/cpp
        - JSDOMWrapperCache.h/cpp

        Also:
        - Moves all constructor objects to JSDOMConstructor.h/cpp,  
        - Moves special DOMWindow accessors to JSDOMWindowBase.
        - Deletes unused CallbackFunction.h/cpp

        * CMakeLists.txt:
        * Modules/webdatabase/Database.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallbackFunction.cpp: Removed.
        * bindings/js/CallbackFunction.h: Removed.
        * bindings/js/DOMConstructorWithDocument.h: Removed.
        * bindings/js/JSCryptoCustom.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMBindingCaller.h: Copied from Source/WebCore/bindings/js/JSDOMBinding.h.
        * bindings/js/JSDOMBindingSecurity.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMBindingSecurity.h: Copied from Source/WebCore/bindings/js/JSDOMBinding.h.
        * bindings/js/JSDOMConstructor.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMConstructor.h:
        * bindings/js/JSDOMConvert.h:
        * bindings/js/JSDOMExceptionHandling.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMExceptionHandling.h: Copied from Source/WebCore/bindings/js/JSDOMBinding.h.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::callerDOMWindow): Moved from JSDOMBinding.h
        (WebCore::activeDOMWindow): Moved from JSDOMBinding.h
        (WebCore::firstDOMWindow): Moved from JSDOMBinding.h
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowProperties.cpp:
        * bindings/js/JSDOMWrapperCache.cpp: Copied from Source/WebCore/bindings/js/JSDOMBinding.cpp.
        * bindings/js/JSDOMWrapperCache.h: Copied from Source/WebCore/bindings/js/JSDOMBinding.h.
        * bindings/js/JSEventTargetCustom.h:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMutationObserverCustom.cpp:
        * bindings/js/JSSQLStatementErrorCallbackCustom.cpp:
        * bindings/js/JSStorageCustom.cpp:
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/js/JSXPathNSResolverCustom.cpp:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptGlobalObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/StructuredClone.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallWith):
        (GenerateParametersCheck):
        (GenerateCallbackImplementationContent):
        (NativeToJSValue):
        * bridge/objc/WebScriptObject.mm:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLVideoElement.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/PageScriptDebugServer.cpp:
        * inspector/WorkerScriptDebugServer.cpp:

2017-01-30  Andy Estes  <aestes@apple.com>

        [QuickLook] FrameLoaderClient should return the new QuickLookHandleClient it creates
        https://bugs.webkit.org/show_bug.cgi?id=167625

        Reviewed by Andreas Kling.

        QuickLookHandleClients were being created by QuickLookHandle calling
        FrameLoaderClient::didCreateQuickLookHandle() then having the FrameLoaderClient create a new
        QuickLookHandleClient and set it using QuickLookHandle::setClient().

        Since all FrameLoaderClient::didCreateQuickLookHandle() does is create a new
        QuickLookHandleClient, this patch changes the FrameLoaderClient function to return the new
        QuickLookHandleClient directly and removes the API from QuickLookHandle to set a client.
        This also removes previewFileName() and previewUTI() from QuickLookHandle and instead passes
        these as arguments to the FrameLoaderClient.

        No change in behavior. Covered by existing tests.

        * loader/EmptyClients.cpp: Added an implementation of createQuickLookHandleClient() that
        returns nullptr.
        * loader/FrameLoaderClient.h: Declared createQuickLookHandleClient() and removed
        didCreateQuickLookHandle().
        * loader/ios/QuickLook.h: Removed setClient(), previewFileName(), and previewUTI().
        * loader/ios/QuickLook.mm: Removed testingOrEmptyClient().
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:quickLookHandle:]): Set _client
        to testingClient() if it exists, otherwise set it to the client returned by
        FrameLoaderClient::createQuickLookHandleClient() it non-null, otherwise set it to
        emptyClient().
        (testingOrEmptyClient): Deleted.
        (-[WebPreviewLoader setClient:]): Deleted.
        (-[WebPreviewLoader converter]): Deleted.
        (WebCore::QuickLookHandle::setClient): Deleted.
        (WebCore::QuickLookHandle::previewFileName): Deleted.
        (WebCore::QuickLookHandle::previewUTI): Deleted.

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

        NULL-deref crash in TextTrack::removeCue()
        https://bugs.webkit.org/show_bug.cgi?id=167615

        Reviewed by Eric Carlson.

        It's possible for a track to be removed which was never actually added to the cue list.
        Specifically, if an in-band track with a negative start or end time was parsed, it would
        have been rejected by TextTrack::addCue(). When it comes time to flush those in-band cues,
        TextTrack::m_cues will still be NULL. Rather than ASSERT in this case, we should revert the
        behavior added in r210319 and throw an exception.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeCue):

2017-01-30  Andreas Kling  <akling@apple.com>

        Fix CMSampleBuffer leak in MediaSampleAVFObjC::createNonDisplayingCopy().
        <https://webkit.org/b/167621>

        Reviewed by Andy Estes.

        We were failing to adopt the CMSampleBuffer after copying it. Seen on leaks bot.

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy):

2017-01-30  Andy Estes  <aestes@apple.com>

        [QuickLook] QLPreviewConverter and QuickLookHandle have different lifetime requirements
        https://bugs.webkit.org/show_bug.cgi?id=167609

        Reviewed by Andreas Kling.
        
        Currently, QuickLookHandles are owned by DocumentLoader so that the underlying
        QLPreviewConverter stays alive to service subresource requests. However, the QuickLookHandle
        itself only needs to live long enough to handle the main resource load. And in a follow-on
        patch we will need to create QLPreviewConverters independent of QuickLookHandle.

        This patch moves ownership of QuickLookHandle from DocumentLoader to ResourceLoader. It also
        creates a C++ wrapper around QLPreviewConverter and teaches QuickLookHandle to transfer
        ownership of the wrapper to DocumentLoader once the main resource conversion is complete.

        No change in behavior. Covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj: Added PreviewConverter.{h,mm}.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setPreviewConverter): Renamed from setQuickLookHandle().
        (WebCore::DocumentLoader::previewConverter): Renamed from quickLookHandle().
        (WebCore::DocumentLoader::setQuickLookHandle): Renamed to setPreviewConverter().
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::quickLookHandle): Renamed to quickLookHandle().
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal): Changed to call PreviewConverter::safeRequest().
        (WebCore::ResourceLoader::isQuickLookResource): Changed to check if m_quickLookHandle is null.
        (WebCore::ResourceLoader::didCreateQuickLookHandle): Deleted.
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::shouldCreateQuickLookHandleForResponse): Changed to access m_quickLookHandle.
        (WebCore::SubresourceLoader::didReceiveResponse): Ditto.
        (WebCore::SubresourceLoader::didReceiveData): Ditto.
        (WebCore::SubresourceLoader::didReceiveBuffer): Ditto.
        (WebCore::SubresourceLoader::didFinishLoading): Ditto.
        (WebCore::SubresourceLoader::didFail): Ditto.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::finishLoading): Wrapped the call to ResourceLoader::isQuickLookResource() in USE(QUICK_LOOK).
        * loader/ios/QuickLook.h: Renamed m_converter to m_previewLoader.
        * loader/ios/QuickLook.mm: Renamed WebPreviewConverter to WebPreviewLoader.
        (WebCore::registerQLPreviewConverterIfNeeded): Created a PreviewConverter instead of a QLPreviewConverter.
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:quickLookHandle:]): Ditto.
        (-[WebPreviewLoader appendDataArray:]): Accessed the QLPreviewConverter from the PreviewConverter.
        (-[WebPreviewLoader finishedAppending]): Ditto.
        (-[WebPreviewLoader failed]): Ditto.
        (-[WebPreviewLoader converter]): Renamed from platformConverter. Returns a pointer to the PreviewConverter.
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]): Moved _converter to DocumentLoader.
        (-[WebPreviewLoader connection:didFailWithError:]): Created a PreviewConverter instead of a QLPreviewConverter.
        (WebCore::QuickLookHandle::QuickLookHandle): Called FrameLoaderClient::didCreateQuickLookHandle() instead of going through FrameLoader.
        (WebCore::QuickLookHandle::didReceiveData): Renamed m_converter to m_previewLoader.
        (WebCore::QuickLookHandle::didReceiveBuffer): Ditto.
        (WebCore::QuickLookHandle::didFinishLoading): Ditto.
        (WebCore::QuickLookHandle::didFail): Ditto.
        (WebCore::QuickLookHandle::setClient): Ditto.
        (WebCore::QuickLookHandle::previewFileName): Ditto.
        (WebCore::QuickLookHandle::previewUTI): Ditto.
        (WebCore::QuickLookHandle::willSendRequest): Deleted.
        * platform/ios/QuickLookSoftLink.h: Removed soft-linking of QLPreviewConverter and kQLPreviewOptionPasswordKey.
        * platform/ios/QuickLookSoftLink.mm: Ditto.
        * platform/network/ios/PreviewConverter.h: Added.
        (WebCore::PreviewConverter::platformConverter): Added. Returns the underlying QLPreviewConverter.
        * platform/network/ios/PreviewConverter.mm: Added.
        (WebCore::optionsWithPassword): Creates a dictionary with the kQLPreviewOptionPasswordKey option set if password is non-null.
        (WebCore::PreviewConverter::PreviewConverter): Added constructors for the delegate/response and data/uti cases.
        (WebCore::PreviewConverter::safeRequest): Wraps -[QLPreviewConverter safeRequestForRequest:].
        (WebCore::PreviewConverter::previewRequest): Wraps -[QLPreviewConverter previewRequest].
        (WebCore::PreviewConverter::previewResponse): Wraps -[QLPreviewConverter previewResponse].
        (WebCore::PreviewConverter::previewFileName): Wraps -[QLPreviewConverter previewFileName].
        (WebCore::PreviewConverter::previewUTI): Wraps -[QLPreviewConverter previewUTI].

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

        Drop legacy Attributes.isId attribute
        https://bugs.webkit.org/show_bug.cgi?id=167603

        Reviewed by Ryosuke Niwa.

        Drop legacy Attributes.isId attribute.

        This attribute is not in the specification:
        - https://dom.spec.whatwg.org/#interface-attr

        Both Firefox and Chrome currently do not expose this attribute.

        No new tests, rebaselined existing test.

        * dom/Attr.cpp:
        * dom/Attr.h:
        * dom/Attr.idl:

2017-01-30  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Small tweaks to improve performance.
        https://bugs.webkit.org/show_bug.cgi?id=167611
        <rdar://problem/30274294>

        Reviewed by Simon Fraser.

        This is ~10% progression on the attached test case (paragraphs with non-redundant content).
        median: 102.08 runs/s -> median: 114.25 runs/s

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Drop legacy constants on Event interface
        https://bugs.webkit.org/show_bug.cgi?id=167602

        Reviewed by Sam Weinig.

        Drop legacy constants on Event interface:
        MOUSEDOWN, MOUSEUP, MOUSEOVER, MOUSEOUT, MOUSEMOVE, MOUSEDRAG,
        CLICK, DBLCLICK, KEYDOWN, KEYUP, KEYPRESS, DRAGDROP, FOCUS,
        BLUR, SELECT, and CHANGE.

        Those constants are not used for anything, they are not in the
        specification and Chrome / Firefox do not have them.

        No new tests, rebaselined existing test.

        * dom/Event.idl:

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

        [iOS] position:fixed inside touch-scrollable overflow is mispositioned
        https://bugs.webkit.org/show_bug.cgi?id=167604
        rdar://problem/29500273

        Reviewed by Zalan Bujtas.
        
        For layers inside touch-scrollable overflow, RenderLayerBacking::computeParentGraphicsLayerRect() needs
        to account for the offset from the ancestor compositing layer's origin, to handle scrollable elements with
        box-shadow, for example.
        
        Also make the compositing log output a little easier to read.

        Test: compositing/scrolling/fixed-inside-scroll.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):

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

        NULL-deref crash at PlatformMediaSession::endInterruption
        https://bugs.webkit.org/show_bug.cgi?id=167595

        Reviewed by Eric Carlson.

        Use the same, NULL-aware forEachSession() iterator rather than iterating over m_sessions directly.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::beginInterruption):
        (WebCore::PlatformMediaSessionManager::endInterruption):

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

        Correct spacing regression on inter-element complex path shaping on some fonts
        https://bugs.webkit.org/show_bug.cgi?id=166013

        Reviewed by Simon Fraser.

        This patch brings the implementation of ComplexTextController in-line with the
        design at https://trac.webkit.org/wiki/ComplexTextController. Previously,
        ComplexTextController had a few problems:
        - The total width computed by ComplexTextController didn't match the width if
        you iterated over the entire string and added up the advances
        - FontCascade::getGlyphsAndAdvancesForComplexText() tried to compensate for
        the above by construing the concepts of paint advances as distinct from layout
        advances
        - Initial advances were considered part of layout sometimes and part of painting
        other times, depending on which function reports the information
        - For RTL runs, the wrong origin was added to the initial advance, and the origin
        should have been subtracted instead of added

        This patch exhaustively updates every function in ComplexTextController to be
        consistent with the design linked to above. This design solves all of these
        problems.

        Tests: ComplexTextControllerTest.InitialAdvanceWithLeftRunInRTL
               ComplexTextControllerTest.InitialAdvanceInRTL
               ComplexTextControllerTest.InitialAdvanceWithLeftRunInLTR
               ComplexTextControllerTest.InitialAdvanceInLTR
               ComplexTextControllerTest.InitialAdvanceInRTLNoOrigins
               ComplexTextControllerTest.LeadingExpansion
               ComplexTextControllerTest.VerticalAdvances

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::setLeadingExpansion): Deleted. No longer necessary.
        (WebCore::GlyphBuffer::leadingExpansion): Deleted. Ditto.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::adjustSelectionRectForComplexText): Removed use of
        unnecessary leadingExpansion().
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText): This function needs
        to compute paint advances, which means that it can't base this information off
        of layout advances. This function uses the trick mentioned at the end of the
        above link to compute the paint offset of an arbitrary glyph in the middle of
        an RTL run.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::computeExpansionOpportunity): Refactored for
        testing.
        (WebCore::ComplexTextController::ComplexTextController): Ditto.
        (WebCore::ComplexTextController::finishConstruction): Ditto.
        (WebCore::ComplexTextController::offsetForPosition): This function operates on
        layout advances, and the initial layout advance is already added into the
        m_adjustedBaseAdvances vector by adjustGlyphsAndAdvances(). Therefore, there is
        no need to add it again here.
        (WebCore::ComplexTextController::advance): This function had completely busted
        logic about the relationship between initial advances and the first origin in
        each run. Because of the fortunate choice of only representing layout advances 
        in m_adjustedBaseAdvances, this entire block can be removed and the raw paint
        initial advance can be reported to the GlyphBuffer. Later in the function, we
        have to update the logic about how to compute a paint advance given a layout
        advance and some origins. In particular, there are two tricky pieces here: 1.
        The layout advance for the first glyph is equal to (initial advance - first
        origin + first Core Text advance, so computing the paint offset must cancel out
        the initial layout offset, and 2. the last paint advance in a run must actually
        end up at the position of the first glyph in the next run, so the next run's
        initial advance must be queried.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Previously, we
        represented an initial advance of a successive run by just adding it to the
        previous run's last advance. However, this is incompatible with the new model
        presented in the link above, so we remove this section. We also have to add in
        the logic that the layout advance for the first glyph is equal to the formula
        presented above.
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::initialAdvance): Adjust comment
        to reflect reality.
        (WebCore::ComplexTextController::leadingExpansion): Deleted.

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

        Fixed elements should not rubber-band in WK2, nor remain at negative offsets
        https://bugs.webkit.org/show_bug.cgi?id=167484
        rdar://problem/29453068

        Reviewed by Dean Jackson.

        There were various problems with the layout rect computation:
        1. It ignored the scrollBehaviorForFixedElements() which we use to avoid rubber-banding fixed
           elements in WK2, but allow in WK1, so make use of that.
        2. Sometimes layouts/paints of fixed elements would be triggered when coalesced calls to
           AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll() failed to
           copy the layoutViewportOrigin to the scheduled update.
        3. The layout viewport could be left with a negative top/left after rubber-banding.
        
        Also add a way to do unconstrained scrollTo(), so that a test can call window.scrollTo(-10, -10) to
        simulate rubberbanding.

        Tests: fast/visual-viewport/rubberbanding-viewport-rects-header-footer.html
               fast/visual-viewport/rubberbanding-viewport-rects.html

        * page/FrameView.cpp:
        (WebCore::FrameView::computeLayoutViewportOrigin): Handle ScrollBehaviorForFixedElements, incorporating it
        into logic that clamps layoutViewportOrigin between min/max when rubberbanding is not allowed, or not in progress.
        (WebCore::FrameView::updateLayoutViewport): Pass in scrollBehaviorForFixedElements().
        (WebCore::FrameView::visibleDocumentRect): The clamping here was preventing the visible rect from
        escaping the document bounds, which caused fixed elements to bounce with rubber-banding, so remove the clamping,
        and fix the logic to allow rubber-banding while taking headers and footers into account.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll): layoutViewportOrigin has to
        be pushed onto the scheduled update, just like scroll position.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition): Pass in m_behaviorForFixed.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::adjustScrollPositionWithinRange):
        (WebCore::ScrollView::setScrollOffset):
        * platform/ScrollView.h:
        (WebCore::ScrollView::setAllowsUnclampedScrollPositionForTesting):
        (WebCore::ScrollView::allowsUnclampedScrollPosition):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setAllowUnclampedScrollPosition):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Web content process crashes when initiating a drag on a very large image
        https://bugs.webkit.org/show_bug.cgi?id=167564

        Reviewed by Beth Dakin.

        If we begin dragging an image element that is too large to show the cached image for, we will show an image file
        icon instead of the cached image. This may return null if createDragImageIconForCachedImageFilename is
        unimplemented, so in the meantime, we should not assume that dragImage will always exist before calling into
        doSystemDrag in doImageDrag and bail from the drag operation if that is the case.

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

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

        Update DiagnosticLoggingClient::logDiagnosticMessageWithValue() to take in the value as a double
        https://bugs.webkit.org/show_bug.cgi?id=167536

        Reviewed by Darin Adler.

        Update DiagnosticLoggingClient::logDiagnosticMessageWithValue() to take in the value as a double
        instead of a string. The value needs to be numeric and the current API is error-prone.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineFailedToLoad):
        * loader/EmptyClients.cpp:
        * page/DiagnosticLoggingClient.h:

2017-01-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rollout r211235 Pointer lock events should be delivered directly to the target element.

        The LayoutTest for this change is frequently failing.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseForceEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::isLocked): Deleted.
        (WebCore::PointerLockController::dispatchLockedWheelEvent): Deleted.
        * page/PointerLockController.h:

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

        LayoutTest media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=167254
        <rdar://problem/30259293>

        Reviewed by Dean Jackson.

        When we would identify that we need to prolong an existing auto-hide timer, when the previous
        auto-hide timer was marked as non-cancelable, calling _cancelAutoHideTimer() would not actually
        cancel the previous timer, which would let it fire and hide the controls bar. We now have two
        methods, _cancelAutoHideTimer() which always cancels the current auto-hide timer, and
        _cancelNonEnforcedAutoHideTimer() which is used from all other existing call sites, which only
        cancels the current auto-hide timer if it was marked as cancelable. This, and revised timing in
        the test itself, make media/modern-media-controls/media-controller/media-controller-auto-hide-
        mouse-leave-after-play.html a lot more reliable.

        We also make a small drive-by fix where we ensure the "autoHideDelay" property is set first so
        that setting other members which may set a timer do not used an undefined value for the auto-hide
        timer delay.

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set visible):
        (ControlsBar.prototype.handleEvent):
        (ControlsBar.prototype._cancelNonEnforcedAutoHideTimer):
        (ControlsBar.prototype._cancelAutoHideTimer):

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r202615?): [GStreamer] ASSERTION FAILED: isMainThread() in WebCore::BuiltinResourceHandleConstructorMap& WebCore::builtinResourceHandleConstructorMap()
        https://bugs.webkit.org/show_bug.cgi?id=167003

        Reviewed by Michael Catanzaro.

        Add a way to create a ResourceHandle for a given SoupNetworkSession and use it in the GStreamer streaming client
        to ensure both the session and the handle are created and destroyed in the secondary thread. This way we also
        avoid using the default session for downloading HLS fragments.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::ResourceHandleStreamingClient): Create a SoupNetworkSession and pass it to ResourceHandle::create().
        * platform/network/ResourceHandle.h: Add create and constructor to receive a SoupNetworkSession.
        * platform/network/ResourceHandleInternal.h: Add SoupNetworkSession member.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::soupSession): Return the SoupNetworkSession if not nullptr.
        (WebCore::ResourceHandle::create): Create a ResourceHandle without trying to use any builtin constructor and
        using the given SoupNetworkSession.
        (WebCore::ResourceHandle::ResourceHandle): Set the SoupNetworkSession if early request validations didn't fail.

2017-01-30  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Add support for libwebrtc data channel
        https://bugs.webkit.org/show_bug.cgi?id=167489

        Reviewed by Alex Christensen.

        Partially covered by webrtc/datachannel/basic.html but not yet enabled on bots.

        Introducing LibWebRTCDataChannelHandler as the integration layer between WebCore (RTCDataChannel)
        and libwebrtc (DataChannelObserver).

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::bufferedAmount):
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp: Added.
        (WebCore::LibWebRTCDataChannelHandler::~LibWebRTCDataChannelHandler):
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::sendStringData):
        (WebCore::LibWebRTCDataChannelHandler::sendRawData):
        (WebCore::LibWebRTCDataChannelHandler::close):
        (WebCore::LibWebRTCDataChannelHandler::OnStateChange):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnRemoveStream):
        (WebCore::LibWebRTCMediaEndpoint::addDataChannel):
        (): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::createDataChannelHandler):
        * dom/EventNames.h:
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mock/RTCDataChannelHandlerMock.h:

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Several web timing tests crash in GTK+ and AppleWin bots
        https://bugs.webkit.org/show_bug.cgi?id=167577

        Reviewed by Ryosuke Niwa.

        The problem is that entry is used in both the key, to get name, and in the value with WTFMove. So, the name is
        invalidated by the move. It could be fixed by simply copying the name, instead of using entry->name, but I think
        that code could be simplified using HashMap::ensure and then we don't need any string copy, nor even the static
        insertPerformanceEntry().

        Fix crashes in several imported/w3c/web-platform-tests/user-timing/ tests.

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::measure):
        (WebCore::insertPerformanceEntry): Deleted.

2017-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crash in GraphicsContext3D::deleteTexture when destroying TextureMapperPlatformLayerProxy
        https://bugs.webkit.org/show_bug.cgi?id=167575

        Reviewed by Žan Doberšek.

        We should clear all the buffers on invalidate to ensure we don't have textures alive after CoordinatedGraphicsScene::purgeGLResources().

        Fix crash in media/video-poster-background.html.

        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::invalidate): Clear current, pending and all used buffers.

2017-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crash on WebCore::GLContext::version()
        https://bugs.webkit.org/show_bug.cgi?id=167559

        Reviewed by Michael Catanzaro.

        Fixes crashes in several media tests.

        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::invalidate): Clear m_compositorThreadUpdateTimer and call the update function.

2017-01-29  Nan Wang  <n_wang@apple.com>

        AX: WKContentView needs to implement UITextInput methods to make speak selection highlighting work
        https://bugs.webkit.org/show_bug.cgi?id=166955

        Reviewed by Ryosuke Niwa.

        Created a new version of Range::collectSelectionRect() that returns rects for each
        line, so that Speak Selection doesn't need to handle searching for soft line breaks.
        Also added a variant of findPlainText to search for the closest matched range to the given position.

        Test: editing/text-iterator/range-of-string-closest-to-position.html

        * dom/Range.cpp:
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines):
        (WebCore::Range::collectSelectionRects):
        * dom/Range.h:
        * editing/TextIterator.cpp:
        (WebCore::findPlainTextMatches):
        (WebCore::updateSearchBuffer):
        (WebCore::findIteratorOptions):
        (WebCore::rangeMatches):
        (WebCore::findClosestPlainText):
        (WebCore::findPlainText):
        (WebCore::findPlainTextOffset): Deleted.
        * editing/TextIterator.h:
        * editing/htmlediting.h:
        * testing/Internals.cpp:
        (WebCore::Internals::rangeOfStringNearLocation):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-01-29  Andy Estes  <aestes@apple.com>

        [QuickLook] Add a WebPreference to enable saving QuickLook documents in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=167563
        <rdar://problem/30253207>

        Reviewed by Andreas Kling.

        * loader/ios/QuickLook.h: Removed unused declarations.
        (WebCore::QuickLookHandle::firstRequestURL): Deleted.
        * loader/ios/QuickLook.mm:
        (WebCore::removeQLPreviewConverterForURL): Stopped deleting the temporary file here; that's
        now done in QuickLookDocumentWriter.
        (addQLPreviewConverterWithFileForURL): Changed from an exported function to a static
        function since it's now only called inside QuickLook.mm.
        (WebCore::QuickLookHandle::QuickLookHandle): Stopped initializing m_firstRequestURL.
        (WebCore::addQLPreviewConverterWithFileForURL): Deleted.
        (WebCore::qlPreviewConverterFileNameForURL): Deleted.
        (WebCore::qlPreviewConverterUTIForURL): Deleted.
        (WebCore::QuickLookHandle::previewRequestURL): Deleted.
        (WebCore::QuickLookHandle::converter): Deleted.

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

        Simple line layout: PerformanceTests/Layout/simple-line-layout-innertext.html regressed at r211108
        https://bugs.webkit.org/show_bug.cgi?id=167562

        Reviewed by Antti Koivisto.

        Apparently RunResolver::Run::constructStringForHyphenIfNeeded() is in a superhot codepath.
        The Run should not have any additional members anyway, so let's construct the hyphenated
        string on demand.
        Progression on simple-line-layout-innertext.html is from ~34runs/sec back to ~50runs/sec.

        Covered by existing text.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSimpleLine):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::textWithHyphen):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Run::constructStringForHyphenIfNeeded): Deleted.
        * rendering/SimpleLineLayoutResolver.h:

2017-01-28  Tim Horton  <timothy_horton@apple.com>

        Don't flash a tap highlight for the entirety of an editable WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=167486
        <rdar://problem/30193996>

        Reviewed by Dan Bernstein.

        * dom/Document.h:
        Export.

2017-01-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Check USE(APPLE_INTERNAL_SDK) instead of specific headers when importing from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=167555

        Reviewed by Dan Bernstein.

        Instead of guarding #import <WebKitAdditions/*> on the existence of the imported file, consult
        USE(APPLE_INTERNAL_SDK) instead.

        * page/ios/EventHandlerIOS.mm:
        * platform/ios/DragImageIOS.mm:
        * platform/ios/PasteboardIOS.mm:
        * platform/mac/DragDataMac.mm:

2017-01-28  Yoav Weiss  <yoav@yoav.ws>

        Add Link Preload as an off-by-default experimental feature menu item.
        https://bugs.webkit.org/show_bug.cgi?id=167201

        Reviewed by Ryosuke Niwa.

        Removed the explicit setting of the Link Preload experimental feature,
        as it is now on by default for testing.

        No new tests as this just removes methods from settings.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Fix typo in error message
        https://bugs.webkit.org/show_bug.cgi?id=167554

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGenerator.pm:
        (GetEnumByType):

2017-01-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] REGRESSION: Video stops playing after going into Full Screen in media documents
        https://bugs.webkit.org/show_bug.cgi?id=167552
        <rdar://problem/29601646>

        Reviewed by Eric Carlson.

        In the case of media documents, there is a built-in behavior, implemented in MediaDocument::defaultEventHandler(),
        that toggles playback when clicking or double-clicking the video. We disable this behavior by adding a "click" event
        handler on the entire media shadow root and calling "preventDefault()".

        Test: media/modern-media-controls/media-documents/click-on-video-should-not-pause.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._containerWasClicked):

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

        [Xcode] Clean up PAL and WebCore’s build settings a little
        https://bugs.webkit.org/show_bug.cgi?id=167292

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Simplified the definition of
          GCC_WARN_64_TO_32_BIT_CONVERSION, removed the unused build setting PREBINDING, removed
          a duplicate definition of GCC_GENERATE_DEBUGGING_SYMBOLS, and removed definitions specific
          to OS X versions that are no longer supported.

        * Configurations/DebugRelease.xcconfig: Removed definitions specific to OS X versions
          that are no longer supported.

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

        Resolve beforeChild's render tree position before calling addChildIgnoringContinuation.
        https://bugs.webkit.org/show_bug.cgi?id=167540
        <rdar://problem/30126535>

        Reviewed by Simon Fraser.

        Use the actual render tree position for the beforeChild when inside a flow thread.

        Test: fast/multicol/assert-on-continuation-with-spanner.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::resolveMovedChild):

2017-01-28  Andreas Kling  <akling@apple.com>

        Avoid synchronous style recalc in dispatchUnloadEvents().
        <https://webkit.org/b/167551>

        Reviewed by Antti Koivisto.

        It shouldn't be necessary to force a synchronous style resolution in an unloading document.
        This call has been here since the import of KHTMLPart.

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

2017-01-28  Andreas Kling  <akling@apple.com>

        REGRESSION(r196383): Automatic shrink-to-fit of RuleSet no longer works.
        <https://webkit.org/b/167543>

        Reviewed by Antti Koivisto.

        Re-enable the automatic shrink-to-fit optimization in RuleSet.
        This was disabled accidentally, which I discovered while investigating
        the memory footprint of extension stylesheets.

        * css/RuleSet.h:

2017-01-28  Antti Koivisto  <antti@apple.com>

        Give scripts 'high' load priority
        https://bugs.webkit.org/show_bug.cgi?id=167550

        Reviewed by Andreas Kling.

        For historical reasons it is currently 'medium', same as web fonts and some other non-parsing blocking things.

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

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Add User Timing Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=167542
        <rdar://problem/22746307>

        Reviewed by Ryosuke Niwa.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::performanceTimelineEnabled):
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        Make a better RuntimeEnabledFeature named "PerformanceTiming" which
        is enabled if either UserTiming or ResourceTiming is enabled. This
        will then expose the APIs that are only useful when at least one of
        the APIs are available.

        * page/PerformanceEntry.cpp:
        (WebCore::PerformanceEntry::name): Deleted.
        (WebCore::PerformanceEntry::entryType): Deleted.
        (WebCore::PerformanceEntry::startTime): Deleted.
        (WebCore::PerformanceEntry::duration): Deleted.
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::name):
        (WebCore::PerformanceEntry::entryType):
        (WebCore::PerformanceEntry::startTime):
        (WebCore::PerformanceEntry::duration):
        Inline simple accessors.

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::measure):
        Fix a bug introduced by ExceptionOr refactoring.

        (WebCore::UserTiming::clearMarks):
        (WebCore::UserTiming::clearMeasures):
        (WebCore::clearPerformanceEntries):
        (WebCore::clearPeformanceEntries): Deleted.
        Fix method name typo.

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

        Ignore Xcode’s project.xcworkspace and userdata directories in this new project like we do
        in other projects.

        * PAL/PAL.xcodeproj: Added property svn:ignore.

2017-01-27  Andy Estes  <aestes@apple.com>

        Fix the iOS build when USE(QUICK_LOOK) is disabled.

        * testing/Internals.cpp:
        (WebCore::Internals::setQuickLookPassword):
        * testing/Internals.h:

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

        setTimeout / setInterval's string execution should inherit SourceOrigin correctly
        https://bugs.webkit.org/show_bug.cgi?id=167097

        Reviewed by Darin Adler.

        Tests: js/dom/modules/import-from-set-interval.html
               js/dom/modules/import-from-set-timeout.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):

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

        Merge CachedModuleScript and LoadableModuleScript
        https://bugs.webkit.org/show_bug.cgi?id=167500

        Reviewed by Darin Adler.

        CachedModuleScript becomes duplicate with LoadableModuleScript.
        And CachedModuleScript does not offer any meaningful functionality
        to LoadableModuleScript.
        This patch merges CachedModuleScript to LoadableModuleScript.

        No behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedModuleScript.cpp: Removed.
        * bindings/js/CachedModuleScript.h: Removed.
        * bindings/js/CachedModuleScriptClient.h: Removed.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::loadModuleScript):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScript):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        * bindings/js/ScriptController.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::create):
        (WebCore::LoadableModuleScript::LoadableModuleScript):
        (WebCore::LoadableModuleScript::~LoadableModuleScript):
        (WebCore::LoadableModuleScript::isLoaded):
        (WebCore::LoadableModuleScript::error):
        (WebCore::LoadableModuleScript::wasCanceled):
        (WebCore::LoadableModuleScript::notifyLoadCompleted):
        (WebCore::LoadableModuleScript::notifyLoadFailed):
        (WebCore::LoadableModuleScript::notifyLoadWasCanceled):
        (WebCore::LoadableModuleScript::execute):
        (WebCore::LoadableModuleScript::load):
        (WebCore::LoadableModuleScript::notifyFinished): Deleted.
        * dom/LoadableModuleScript.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeModuleScript):
        * dom/ScriptElement.h:

2017-01-27  Michael Saboff  <msaboff@apple.com>

        JSCustomElementInterface::invokeCallback can be called with a null callback because Weak<>
        https://bugs.webkit.org/show_bug.cgi?id=167522

        Reviewed by Filip Pizlo.

        Added all provided callbacks to the global object with a private name the same way 
        that the constructor was added.  This will keep these callbacks from being GC'ed.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):

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

        [Cocoa] Prepare ComplexTextController for unit testing
        https://bugs.webkit.org/show_bug.cgi?id=167493

        Reviewed by Simon Fraser.

        Addressing post-review comments from Simon Fraser.

        * platform/graphics/FontCascade.h:
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::createForTesting):
        * platform/graphics/mac/ComplexTextControllerCoreText.h:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):

2017-01-27  Simon Fraser  <simon.fraser@apple.com>

        Element with a backdrop-filter and a mask may not correctly mask the backdrop
        https://bugs.webkit.org/show_bug.cgi?id=167456
        rdar://problem/29320059

        Reviewed by Antoine Quint.

        If a layer had a backdrop filter, but also corner radii that triggered using a mask layer,
        then the call to updateClippingStrategy() in GraphicsLayerCA::updateBackdropFiltersRect() would
        set the backdrop layer's mask, but GraphicsLayerCA::updateMaskLayer() would promptly then set
        the mask layer back to nil.

        Fix by having GraphicsLayerCA::updateMaskLayer() put the mask on the structural layer, if there
        is one. We always have a structural layer with backdrops, so this will mask both the layer
        and the backdrop.

        Test: css3/filters/backdrop/backdrop-filter-uneven-corner-radii.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        * platform/graphics/mac/WebLayer.mm:
        (-[CALayer _descriptionWithPrefix:]): Dump the mask layer.

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Fix remaining bad uses of logDiagnosticMessageWithValue()
        https://bugs.webkit.org/show_bug.cgi?id=167526

        Reviewed by Alex Christensen.

        Drop unused keys, add new ones.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::networkCacheFailureReasonKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheUnusedReasonKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheReuseFailureKey):
        (WebCore::DiagnosticLoggingKeys::backNavigationDeltaKey):
        (WebCore::DiagnosticLoggingKeys::userZoomActionKey):
        (WebCore::DiagnosticLoggingKeys::deltaKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::backNavigationKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::requestKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::unusableCachedEntryKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::userKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::zoomedKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::notInCacheKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

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

        Proclaim that we are considering font-display, rhythmic sizing, and text decoration level 4
        https://bugs.webkit.org/show_bug.cgi?id=167340

        Reviewed by Saam Barati.

        * features.json:

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Fix diagnostic logging under loader/
        https://bugs.webkit.org/show_bug.cgi?id=167512

        Reviewed by Alex Christensen.

        Fix diagnostic logging under loader/. We should not be using logDiagnosticLoggingWithValue()
        without a numeric value.

        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::logMemoryCacheResourceRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::logRevalidation):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::memoryCacheEntryDecisionKey):
        (WebCore::DiagnosticLoggingKeys::memoryCacheUsageKey):
        (WebCore::DiagnosticLoggingKeys::cachedResourceRevalidationReasonKey):
        (WebCore::DiagnosticLoggingKeys::resourceLoadedKey):
        (WebCore::DiagnosticLoggingKeys::resourceResponseSourceKey):
        * page/DiagnosticLoggingKeys.h:

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Fix diagnostic logging in media code
        https://bugs.webkit.org/show_bug.cgi?id=167510

        Reviewed by Alex Christensen.

        Fix diagnostic logging in media code. It should not use logDiagnosticMessageWithValue()
        with a non-numeric value.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updatePlayState):

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

        [Cocoa] Prepare ComplexTextController for unit testing
        https://bugs.webkit.org/show_bug.cgi?id=167493

        Reviewed by Dean Jackson.

        ComplexTextController has three phases:
        1. Interrogate Core Text about some text
        2. Compute layout advances and paint advances from the information retrieved from
        Core Text
        3. Iterate through the layout advances or paint advances.

        This patch tests phases 2 and 3 by chopping ComplexTextController between
        phases 1 and 2, and injecting foreign metrics from a unit test. These metrics
        have been gathered from real-world uses; however, a layout test is not appropriate
        because the fonts which produced these metrics are not licensed appropriately.
        The tests can enforce the correct behavior by using ComplexTextController's
        public API.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=166013.
        However, the fix for that bug is quite large, so I've split out this smaller piece
        to ease the reviewing burden. The tests I've added are disabled for now (because
        they fail), but will be enabled by the fix to that bug.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::finishConstruction):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::createForTesting):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):

2017-01-27  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Do not bail out on -webkit-line-box-contain: block glyphs unless text overflows vertically.
        https://bugs.webkit.org/show_bug.cgi?id=167481
        <rdar://problem/30180150>

        Reviewed by Antti Koivisto.

        Since -webkit-line-box-contain: glyphs requires variable line height support, we can use simple line layout
        only when each line happen to have the same height ('block' property value is set, glyphs do not overflow the block line height).  

        Test: fast/text/simple-line-layout-line-box-contain-glyphs.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::printReason):

2017-01-27  Chris Dumez  <cdumez@apple.com>

        Fix PageCache diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167508

        Reviewed by Sam Weinig.

        Fix PageCache diagnostic logging. It should not call logDiagnosticMessageWithValue()
        with a non-numeric value. Use logDiagnosticMessage() instead.

        * history/PageCache.cpp:
        (WebCore::logPageCacheFailureDiagnosticMessage):
        (WebCore::canCacheFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::pageCacheFailureKey):
        (WebCore::DiagnosticLoggingKeys::successKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::failureKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2017-01-27  Devin Rousso  <dcrousso+webkit@gmail.com>

        Styles should not show background-repeat-x/y, or -webkit-mask-repeat-x/y
        https://bugs.webkit.org/show_bug.cgi?id=167255

        Reviewed by Joseph Pecoraro.

        Test: inspector/css/css-property.html

        * css/makeprop.pl:
        (addProperty):
        Add a generated function `isInternalCSSProperty` that checks the given CSSPropertyID against
        a derived list of properties from CSSProperties.json with "internal-only".

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        Only pass CSS property payloads to the frontend if they are not internal.

2017-01-27  Antti Koivisto  <antti@apple.com>

        Implement Cache-control: immutable
        https://bugs.webkit.org/show_bug.cgi?id=167497

        Reviewed by Chris Dumez.

        Cache-control value 'immutable' indicates that a subresource does not change and so does not need to be
        revalidated on a normal reload. This can significantly speed up reloads and reduce network traffic.

        It is has been implemented in Firefox and is already used by Facebook.

        https://tools.ietf.org/html/draft-mcmanus-immutable-00
        https://hacks.mozilla.org/2017/01/using-immutable-caching-to-speed-up-the-web/

        This patch implements Cache-control: immutable for memory cache only. A disk cache implementation
        doesn't seem necessary as the resource is basically always expected to be in memory cache on reload.

        Immutable is only supported for https as suggested by the draft specification (and Gecko implementation).

        Test: http/tests/cache/cache-control-immutable-http.html
              http/tests/cache/cache-control-immutable-https.html

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

            On normal reloads (CachePolicyRevalidate) of https resources check for 'Cache-control: immutable'.
            If the resource is not expired don't revalidate it.

        * platform/network/CacheValidation.cpp:
        (WebCore::parseCacheControlDirectives):
        * platform/network/CacheValidation.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::cacheControlContainsImmutable):
        * platform/network/ResourceResponseBase.h:

2017-01-27  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Use MediaEndPointPeerConnection if not using libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167504

        Reviewed by Alex Christensen.

        No change of behavior.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp: If libwebrtc, we should use libwebrtc peer connection backend.

2017-01-27  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r211238.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::visitChildren):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::visitChildren):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::visitChildren):

2017-01-25  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Move Grid class out of RenderGrid
        https://bugs.webkit.org/show_bug.cgi?id=167418

        Reviewed by Antti Koivisto.

        The RenderGrid should be able to use different implementations of
        the Grid class. The latter is big enough to be in its own file. That
        would help on the effort of moving the grid track sizing algorithm
        out of RenderGrid too.

        No new tests required as we're just moving code.

        * CMakeLists.txt:
        * rendering/Grid.cpp: Added.
        (WebCore::Grid::Grid):
        (WebCore::Grid::numTracks):
        (WebCore::Grid::ensureGridSize):
        (WebCore::Grid::insert):
        (WebCore::Grid::setSmallestTracksStart):
        (WebCore::Grid::smallestTrackStart):
        (WebCore::Grid::gridItemArea):
        (WebCore::Grid::setGridItemArea):
        (WebCore::Grid::setAutoRepeatTracks):
        (WebCore::Grid::autoRepeatTracks):
        (WebCore::Grid::setAutoRepeatEmptyColumns):
        (WebCore::Grid::setAutoRepeatEmptyRows):
        (WebCore::Grid::hasAutoRepeatEmptyTracks):
        (WebCore::Grid::isEmptyAutoRepeatTrack):
        (WebCore::Grid::autoRepeatEmptyTracks):
        (WebCore::Grid::gridItemSpan):
        (WebCore::Grid::setNeedsItemsPlacement):
        (WebCore::GridIterator::GridIterator):
        (WebCore::GridIterator::nextGridItem):
        (WebCore::GridIterator::isEmptyAreaEnough):
        (WebCore::GridIterator::nextEmptyGridArea):
        * rendering/Grid.h: Added.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
        (WebCore::RenderGrid::Grid::numTracks): Deleted.
        (WebCore::RenderGrid::Grid::ensureGridSize): Deleted.
        (WebCore::RenderGrid::Grid::insert): Deleted.
        (WebCore::RenderGrid::Grid::setSmallestTracksStart): Deleted.
        (WebCore::RenderGrid::Grid::smallestTrackStart): Deleted.
        (WebCore::RenderGrid::Grid::gridItemArea): Deleted.
        (WebCore::RenderGrid::Grid::setGridItemArea): Deleted.
        (WebCore::RenderGrid::Grid::setAutoRepeatTracks): Deleted.
        (WebCore::RenderGrid::Grid::autoRepeatTracks): Deleted.
        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyColumns): Deleted.
        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyRows): Deleted.
        (WebCore::RenderGrid::Grid::hasAutoRepeatEmptyTracks): Deleted.
        (WebCore::RenderGrid::Grid::isEmptyAutoRepeatTrack): Deleted.
        (WebCore::RenderGrid::Grid::autoRepeatEmptyTracks): Deleted.
        (WebCore::RenderGrid::Grid::gridItemSpan): Deleted.
        (WebCore::RenderGrid::Grid::setNeedsItemsPlacement): Deleted.
        (WebCore::RenderGrid::GridIterator::GridIterator): Deleted.
        (WebCore::RenderGrid::GridIterator::nextGridItem): Deleted.
        (WebCore::RenderGrid::GridIterator::isEmptyAreaEnough): Deleted.
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea): Deleted.
        * rendering/RenderGrid.h:

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

        Implement dynamic-import for WebCore
        https://bugs.webkit.org/show_bug.cgi?id=166926

        Reviewed by Ryosuke Niwa.

        This patch introduces browser side dynamic-import implementation.
        The dynamic-import is new ES feature which is now stage 3.
        The JSC shell already implements it.

        The dynamic-import allows us to kick module loading in a dynamic manner.
        For example, you can write,

            await module = import(`${HOST}/hello.js`);

        The dynamic `import` operator (this is not a function) returns a promise with
        module namespace object if the module loading succeeds. Otherwise, it returns
        a rejected promise.

        And importantly, this feature allows us to kick module loading from classic script.
        Previously, module loading can be only used from <script type="module"> tag. And
        all the module loading is done statically.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::load):
        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::create):
        (WebCore::CachedScriptFetcher::requestModuleScript):
        requestModuleScript function is used only when loading a new module script.
        So, LoadableClassicScript should use requestScriptWithCache to load itself.
        We pass String() for cross origin mode for null cross origin attribute as
        specified.

        (WebCore::CachedScriptFetcher::requestScriptWithCache):
        * bindings/js/CachedScriptFetcher.h:
        (WebCore::CachedScriptFetcher::CachedScriptFetcher):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderImportModule):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::resolveModuleSpecifier):
        Extract the part of resolving module specifier to a static function to use
        it in ScriptModuleLoader::resolve and ScriptModuleLoader::importModule.

        (WebCore::ScriptModuleLoader::resolve):
        (WebCore::rejectPromise):
        (WebCore::ScriptModuleLoader::importModule):
        New hook moduleLoaderImportModule is implemented. This hook is called when
        `import` operator is used. This hook is responsible to
            1. resolve the module name to obtain module specifier. (like, resolve the
                relative URL to get absolute URL.)
            2. kick module loading with the resolved specifier.
        When resolving the module name, the referrer information is needed.
        For example, "./script.js" will be resolved to "http://example.com/script.js" if
        the referrer module specifier is "http://example.com/".
        If `import("./script.js")` is executed in the classic script
        src="http://example.com/test.js", it starts loading "http://example.com/script.js".
        So the information of the caller of `import` operator is necessary here.
        This appropriate referrer is propagated by SourceOrigin.

        * bindings/js/ScriptModuleLoader.h:
        * dom/InlineClassicScript.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::load):
        * dom/LoadableClassicScript.h:
        * dom/LoadableModuleScript.h:
        * dom/LoadableScript.h:
        (WebCore::LoadableScript::LoadableScript):
        (WebCore::LoadableScript::isClassicScript): Deleted.
        (WebCore::LoadableScript::isModuleScript): Deleted.
        * dom/ScriptElement.h:
        * dom/ScriptElementCachedScriptFetcher.cpp: Copied from Source/WebCore/dom/InlineClassicScript.h.
        (WebCore::ScriptElementCachedScriptFetcher::requestModuleScript):
        This requestModuleScript will be used when the script tag (or modules imported from the script tag) uses `import` operator.
        In classic scripts, `crossorigin` mode always becomes "omit" while module scripts
        propagate the original `crossorigin` value.

        * dom/ScriptElementCachedScriptFetcher.h: Copied from Source/WebCore/bindings/js/CachedScriptFetcher.h.
        (WebCore::ScriptElementCachedScriptFetcher::crossOriginMode):
        (WebCore::ScriptElementCachedScriptFetcher::ScriptElementCachedScriptFetcher):

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Revert r210474 it is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=167487

        Reviewed by Daniel Bates.

        Revert r210474 it is no longer needed after r211254.

        * dom/Document.cpp:
        (WebCore::Document::canNavigate):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::handleClick):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadFrameRequest):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultEventHandler):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2017-01-26  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Implement WebRTC PeerConnection backend based on libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167289

        Reviewed by Alex Christensen.

        Introducing an initial implementation of WebRTC peer connection backend based on LibWebRTC.
        This is done behind a compilation flag which is off by default, until the implementation is ready.

        The backend implements the PeerConnectionBackend API.
        The implementation is split into LibWebRTCPeerConnectionBackend which contains mostly generic code and
        passes the real work to LibWebRTCMediaEndpoint.
        The latter class is implementing the API using LibWebRTC.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: Added.
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::sessionDescriptionType):
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::addPendingIceCandidates):
        (WebCore::streamId):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::StatsCollector):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):
        (WebCore::signalingState):
        (WebCore::LibWebRTCMediaEndpoint::OnSignalingChange):
        (WebCore::trackId):
        (WebCore::createMediaStreamTrack):
        (WebCore::LibWebRTCMediaEndpoint::addStream):
        (WebCore::LibWebRTCMediaEndpoint::OnAddStream):
        (WebCore::LibWebRTCMediaEndpoint::OnRemoveStream):
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        (WebCore::LibWebRTCMediaEndpoint::OnRenegotiationNeeded):
        (WebCore::iceConnectionState):
        (WebCore::LibWebRTCMediaEndpoint::OnIceConnectionChange):
        (WebCore::LibWebRTCMediaEndpoint::OnIceGatheringChange):
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidatesRemoved):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: Added.
        (WebCore::createLibWebRTCPeerConnectionBackend):
        (WebCore::libWebRTCProvider):
        (WebCore::LibWebRTCPeerConnectionBackend::LibWebRTCPeerConnectionBackend):
        (WebCore::configurationFromMediaEndpointConfiguration):
        (WebCore::LibWebRTCPeerConnectionBackend::setConfiguration):
        (WebCore::LibWebRTCPeerConnectionBackend::getStats):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetRemoteDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doCreateOffer):
        (WebCore::LibWebRTCPeerConnectionBackend::doCreateAnswer):
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        (WebCore::LibWebRTCPeerConnectionBackend::markAsNeedingNegotiation):
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::createDataChannelHandler):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: Added.
        * WebCore.xcodeproj/project.pbxproj:

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Crash when navigating back to a page in PacheCache when one of its frames has been removed
        https://bugs.webkit.org/show_bug.cgi?id=167421
        <rdar://problem/30188490>

        Reviewed by Darin Adler.

        Disallow page caching of a page if:
        1. The main window has an opener (i.e. it was opened via window.open)
        2. It has ever used window.open()

        This is because allowing page caching in this case would allow such
        windows to script each other even after one of them entered Page
        Cache. Allowing this is dangerous and easily causes crashes.

        This is a short term workaround until we find a better solution to
        the problem. One issue is this workaround is that navigating back
        to a page that has an opener or used window.open() will not longer
        get the page from PageCache. As a result, state may be lost upon
        navigating back. However, we never guarantee that pages get page
        cached, and Chrome does not have a PageCache.

        Tests: fast/history/page-cache-after-window-open.html
               fast/history/page-cache-back-navigation-crash.html
               fast/history/page-cache-with-opener.html

        * dom/Document.cpp:
        (WebCore::Document::hasEverCalledWindowOpen):
        (WebCore::Document::markHasCalledWindowOpen):
        * dom/Document.h:
        * history/PageCache.cpp:
        (WebCore::canCachePage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::hasCalledWindowOpenKey):
        (WebCore::DiagnosticLoggingKeys::hasOpenerKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::Page::openedByWindowOpen):
        * page/Page.h:
        * page/Settings.in:

2017-01-26  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Add a LibWebRTC mock for testing
        https://bugs.webkit.org/show_bug.cgi?id=167429

        Reviewed by Alex Christensen.

        Covered by updated tests although feature is behind a flag, off by default.
        MockLibWebRTCPeerConnection will allow us testing the code above the WebRTC implementation above LibWebRTC,
        without reyling on it and controlling the way that the peer connections will behave.
        Adding support for mock factory to create real peer connections in case where we want to do full testing through the local loopback.

        Tests: fast/mediastream/getUserMedia-webaudio.html
               webrtc/datachannel/basic.html
               webrtc/video.html

        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::useMockRTCPeerConnectionFactory):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockLibWebRTCPeerConnection.cpp: Added.
        (WebCore::useMockRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionForIceCandidates::MockLibWebRTCPeerConnectionForIceCandidates):
        (WebCore::MockLibWebRTCPeerConnectionForIceCandidates::gotLocalDescription):
        (WebCore::MockLibWebRTCPeerConnectionForIceConnectionState::MockLibWebRTCPeerConnectionForIceConnectionState):
        (WebCore::MockLibWebRTCPeerConnectionForIceConnectionState::gotLocalDescription):
        (WebCore::MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateLocalMediaStream):
        (WebCore::MockLibWebRTCPeerConnection::SetLocalDescription):
        (WebCore::MockLibWebRTCPeerConnection::SetRemoteDescription):
        (WebCore::MockLibWebRTCPeerConnection::CreateDataChannel):
        (WebCore::MockLibWebRTCPeerConnection::AddStream):
        (WebCore::MockLibWebRTCPeerConnection::RemoveStream):
        (WebCore::MockLibWebRTCPeerConnection::CreateOffer):
        (WebCore::MockLibWebRTCPeerConnection::CreateAnswer):
        * testing/MockLibWebRTCPeerConnection.h: Added.
        (WebCore::MockLibWebRTCPeerConnection::~MockLibWebRTCPeerConnection):
        (WebCore::MockLibWebRTCPeerConnection::MockLibWebRTCPeerConnection):
        (WebCore::MockLibWebRTCPeerConnection::local_streams):
        (WebCore::MockLibWebRTCPeerConnection::remote_streams):
        (WebCore::MockLibWebRTCPeerConnection::CreateDtmfSender):
        (WebCore::MockLibWebRTCPeerConnection::GetStats):
        (WebCore::MockLibWebRTCPeerConnection::local_description):
        (WebCore::MockLibWebRTCPeerConnection::remote_description):
        (WebCore::MockLibWebRTCPeerConnection::AddIceCandidate):
        (WebCore::MockLibWebRTCPeerConnection::RegisterUMAObserver):
        (WebCore::MockLibWebRTCPeerConnection::signaling_state):
        (WebCore::MockLibWebRTCPeerConnection::ice_connection_state):
        (WebCore::MockLibWebRTCPeerConnection::ice_gathering_state):
        (WebCore::MockLibWebRTCPeerConnection::StopRtcEventLog):
        (WebCore::MockLibWebRTCPeerConnection::Close):
        (WebCore::MockLibWebRTCPeerConnection::gotLocalDescription):
        (WebCore::MockLibWebRTCIceCandidate::MockLibWebRTCIceCandidate):
        (WebCore::MockLibWebRTCAudioTrack::MockLibWebRTCAudioTrack):
        (WebCore::MockLibWebRTCVideoTrack::MockLibWebRTCVideoTrack):
        (WebCore::MockLibWebRTCDataChannel::MockLibWebRTCDataChannel):
        (WebCore::MockLibWebRTCPeerConnectionFactory::create):

2017-01-26  Jeremy Jones  <jeremyj@apple.com>

        Page should be able to request pointer lock without user gesture if it relinquished it without a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=167126

        Reviewed by Jon Lee.

        Enabled pointer-lock/locked-element-removed-from-dom.html for WK2.
        Not enable in WK1 because of https://bugs.webkit.org/show_bug.cgi?id=167127

        This change allows a page to lock the pointer again without a user gesture if it was unlocked by
        the page and not by the user. See https://www.w3.org/TR/2016/REC-pointerlock-20161027/ 5.1 Methods

        * page/PointerLockController.cpp:

        When a document acquires pointer lock with a user gesture, that document is allowed to request pointer lock again
        until the user takes an action to end pointer lock. We know it is a user action because user actions always
        call requestPointerUnlockAndForceCursorVisible().

        When the page requests a pointer unlock (via requestPointerUnlock), that document is allowed to continue to relock
        the page. This continues until there is either an unlock request form the user 
        via requestPointerUnlockAndForceCursorVisible or a didLosePointerLock without a pointer unlock request.

        (WebCore::PointerLockController::PointerLockController):
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        (WebCore::PointerLockController::requestPointerUnlockAndForceCursorVisible):
        (WebCore::PointerLockController::elementRemoved):
        (WebCore::PointerLockController::documentDetached):
        (WebCore::PointerLockController::didAcquirePointerLock):
        (WebCore::PointerLockController::didLosePointerLock):
        (WebCore::PointerLockController::clearElement):
        * page/PointerLockController.h:

2017-01-26  Andy Estes  <aestes@apple.com>

        [QuickLook] REGRESSION (WebKit2): Requests are made to invalid x-apple-ql-id: URLs
        https://bugs.webkit.org/show_bug.cgi?id=167453

        Reviewed by Brent Fulgham.

        Requests to x-apple-ql-id: URLs should be filtered by
        -[QLPreviewConverter safeRequestForRequest:]. This method checks that the URL is one of the
        ones generated for the current preview, and changes it to "about:" if it isn't.

        WebCore::safeQLURLForDocumentURLAndResourceURL() was responsible for finding the
        QLPreviewConverter instance to use by looking it up in an NSMutableDictionary using the
        document URL as a key. In WebKit1, this dictionary was populated by the
        QuickLookHandleClient when new QuickLookHandles were created, but the WebKit2
        QuickLookHandleClient never did this. As a result, requests to invalid URLs were not being
        rewritten.

        An easy way to load a QuickLook document with invalid URLs is to create an HTML file with a
        Microsoft Office extension (e.g. .xls); QuickLook, iWork, and Office support opening HTML
        files with Office document extensions. In r207155 we applied a Content Security Policy to
        QuickLook documents that only allows x-apple-ql-id: resources to load. This blocked
        cross-origin requests from loading, but same-origin requests to URLs that weren't generated
        by QLPreviewConverter were still allowed to load.

        This change blocks these URLs by calling -[QLPreviewConverter safeRequestForRequest:] in a
        way that works for both WebKit1 and WebKit2.

        After implementing QuickLook for WebKit2, we found a bug when loading HTML-as-Office
        documents (webkit.org/b/135651) that presented as a nil MIME type in the preview
        NSURLResponse returned by QLPreviewConverter. Unfortunately r172159 papered over the actual
        bug by failing to load previews with nil MIME types.

        The real issue was that we were asking for the preview response before QuickLook had
        received enough data to determine a MIME type, so this change also removes the bad fix from
        r172159 and instead waits until QuickLook has converted the document to ask for its preview
        response. This restores the ability to load HTML files with Office document extensions.
        These two fixes are combined in a single patch because I don't know how to create an invalid
        QuickLook URL for testing without loading an HTML-as-Office document.

        Test: quicklook/invalid-ql-id-url.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal): Called
        QuickLookHandle::willSendRequest() if m_documentLoader has a QuickLookHandle.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load): Removed the call to
        WebCore::safeQLURLForDocumentURLAndResourceURL().
        * loader/ios/QuickLook.h: Removed safeQLURLForDocumentURLAndResourceURL() and declared
        QuickLookHandle::willSendRequest().
        * loader/ios/QuickLook.mm: Removed _previewResponse and _hasFailed ivars from
        WebPreviewConverter.
        (-[WebPreviewConverter initWithResourceLoader:resourceResponse:quickLookHandle:]): Stopped
        setting _previewResponse.
        (-[WebPreviewConverter _sendDidReceiveResponseIfNecessary]): Only emptied _bufferedDataArray
        if we haven't already called -_sendDidReceiveResponseIfNecessary; removed the check for a
        nil _previewResponse MIME type; accessed -[QLPreviewConverter previewResponse] now that the
        document has been converted and asserted its MIME type is non-nil.
        (-[WebPreviewConverter connection:didReceiveData:lengthReceived:]): Removed _hasFailed check.
        (-[WebPreviewConverter connectionDidFinishLoading:]): Ditto.
        (isQuickLookPasswordError): Moved the check for password failure errors to here from
        -connection:didFailWithError: for better readability.
        (-[WebPreviewConverter connection:didFailWithError:]): Removed _hasFailed check and used
        more early returns.
        (WebCore::QuickLookHandle::willSendRequest): Filtered the request through
        -[QLPreviewConverter safeRequestWithRequest:] if the request URL's scheme is x-apple-ql-id:.
        (WebCore::safeQLURLForDocumentURLAndResourceURL): Deleted.

2017-01-26  Keith Miller  <keith_miller@apple.com>

        classInfo should take a VM so it is not materialized from the object on each call
        https://bugs.webkit.org/show_bug.cgi?id=167424

        Rubber Stamped by Michael Saboff.

        Previously, classInfo() would get the VM from the target's
        MarkedBlock.  Most callers already have a VM on hand, so it is
        wasteful to compute the VM from the marked block every time. This
        patch refactors some of the most common callers of classInfo(),
        jsDynamicCast and inherits to take a VM as well.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::parseAlgorithmIdentifier):
        (WebCore::createRsaKeyGenParams):
        * bindings/js/JSCryptoCustom.cpp:
        (WebCore::JSCrypto::getRandomValues):
        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::valueToDate):
        (WebCore::reportException):
        (WebCore::retrieveErrorMessage):
        * bindings/js/JSDOMBinding.h:
        (WebCore::castThisValue):
        (WebCore::toPossiblySharedArrayBufferView):
        (WebCore::toUnsharedArrayBufferView):
        (WebCore::toPossiblySharedInt8Array):
        (WebCore::toPossiblySharedInt16Array):
        (WebCore::toPossiblySharedInt32Array):
        (WebCore::toPossiblySharedUint8Array):
        (WebCore::toPossiblySharedUint8ClampedArray):
        (WebCore::toPossiblySharedUint16Array):
        (WebCore::toPossiblySharedUint32Array):
        (WebCore::toPossiblySharedFloat32Array):
        (WebCore::toPossiblySharedFloat64Array):
        (WebCore::toUnsharedInt8Array):
        (WebCore::toUnsharedInt16Array):
        (WebCore::toUnsharedInt32Array):
        (WebCore::toUnsharedUint8Array):
        (WebCore::toUnsharedUint8ClampedArray):
        (WebCore::toUnsharedUint16Array):
        (WebCore::toUnsharedUint32Array):
        (WebCore::toUnsharedFloat32Array):
        (WebCore::toUnsharedFloat64Array):
        (WebCore::toRefNativeArray):
        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructorNotConstructable<JSClass>::finishCreation):
        (WebCore::JSDOMConstructor<JSClass>::finishCreation):
        (WebCore::JSDOMNamedConstructor<JSClass>::finishCreation):
        (WebCore::JSBuiltinConstructor<JSClass>::finishCreation):
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLInterface<T>>::convert):
        (WebCore::Converter<IDLXPathNSResolver<T>>::convert):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::finishCreation):
        (WebCore::JSDOMGlobalObject::scriptExecutionContext):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::next):
        (WebCore::IteratorTraits>::finishCreation):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowWebKit):
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::finishCreation):
        (WebCore::JSDOMWindowShell::toWrapped):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::cachedDocumentWrapper):
        (WebCore::JSDocument::createTouchList):
        * bindings/js/JSDynamicDowncast.h:
        (WebCore::JSDynamicCastTrait::cast):
        (WebCore::JSDynamicCastTrait<JSNode>::cast):
        (WebCore::JSDynamicCastTrait<JSElement>::cast):
        (WebCore::JSDynamicCastTrait<JSDocument>::cast):
        (WebCore::JSDynamicCastTrait<JSEvent>::cast):
        (WebCore::jsDynamicDowncast):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped):
        (WebCore::jsEventTargetCast):
        * bindings/js/JSEventTargetCustom.h:
        (WebCore::BindingCaller<JSEventTarget>::callOperation):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/js/JSExceptionBase.h:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableStreamDefaultReader):
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        (WebCore::startReadableStream):
        (WebCore::JSReadableStreamSource::start):
        (WebCore::pullReadableStream):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::toCryptoKey):
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        (WebCore::jsSubtleCryptoFunctionSignPromise):
        (WebCore::jsSubtleCryptoFunctionVerifyPromise):
        (WebCore::jsSubtleCryptoFunctionDigestPromise):
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise):
        (WebCore::jsSubtleCryptoFunctionUnwrapKeyPromise):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toTrack): Deleted.
        * bindings/js/JSTrackCustom.h:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::JSWebKitSubtleCrypto::encrypt):
        (WebCore::JSWebKitSubtleCrypto::decrypt):
        (WebCore::JSWebKitSubtleCrypto::sign):
        (WebCore::JSWebKitSubtleCrypto::verify):
        (WebCore::JSWebKitSubtleCrypto::exportKey):
        (WebCore::JSWebKitSubtleCrypto::wrapKey):
        (WebCore::JSWebKitSubtleCrypto::unwrapKey):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::finishCreation):
        (WebCore::toJSDedicatedWorkerGlobalScope):
        (WebCore::toJSWorkerGlobalScope):
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/JSXPathNSResolverCustom.cpp:
        (WebCore::JSXPathNSResolver::toWrapped):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setupModuleScriptHandlers):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch):
        (WebCore::ScriptModuleLoader::evaluate):
        * bindings/js/ScriptState.cpp:
        (WebCore::domWindowFromExecState):
        (WebCore::scriptExecutionContextFromExecState):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::isArray):
        (WebCore::CloneSerializer::isMap):
        (WebCore::CloneSerializer::isSet):
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readArrayBufferView):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBuffer):
        (WebCore::structuredCloneArrayBufferView):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateOverloadedFunctionOrConstructor):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceName::finishCreation):
        (WebCore::jsInterfaceNameConstructor):
        (WebCore::setJSInterfaceNameConstructor):
        (WebCore::JSInterfaceName::toWrapped):
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::finishCreation):
        (WebCore::BindingCaller<JSTestActiveDOMObject>::castForAttribute):
        (WebCore::BindingCaller<JSTestActiveDOMObject>::castForOperation):
        (WebCore::jsTestActiveDOMObjectConstructor):
        (WebCore::setJSTestActiveDOMObjectConstructor):
        (WebCore::JSTestActiveDOMObject::toWrapped):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactions::finishCreation):
        (WebCore::BindingCaller<JSTestCEReactions>::castForAttribute):
        (WebCore::BindingCaller<JSTestCEReactions>::castForOperation):
        (WebCore::jsTestCEReactionsConstructor):
        (WebCore::setJSTestCEReactionsConstructor):
        (WebCore::JSTestCEReactions::toWrapped):
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifier::finishCreation):
        (WebCore::BindingCaller<JSTestCEReactionsStringifier>::castForAttribute):
        (WebCore::BindingCaller<JSTestCEReactionsStringifier>::castForOperation):
        (WebCore::jsTestCEReactionsStringifierConstructor):
        (WebCore::setJSTestCEReactionsStringifierConstructor):
        (WebCore::JSTestCEReactionsStringifier::toWrapped):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::finishCreation):
        (WebCore::jsTestClassWithJSBuiltinConstructorConstructor):
        (WebCore::setJSTestClassWithJSBuiltinConstructorConstructor):
        (WebCore::JSTestClassWithJSBuiltinConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::finishCreation):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::setJSTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::finishCreation):
        (WebCore::BindingCaller<JSTestCustomNamedGetter>::castForOperation):
        (WebCore::jsTestCustomNamedGetterConstructor):
        (WebCore::setJSTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetter::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::finishCreation):
        (WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute):
        (WebCore::BindingCaller<JSTestDOMJIT>::castForOperation):
        (WebCore::jsTestDOMJITConstructor):
        (WebCore::setJSTestDOMJITConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::finishCreation):
        (WebCore::BindingCaller<JSTestEventConstructor>::castForAttribute):
        (WebCore::jsTestEventConstructorConstructor):
        (WebCore::setJSTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::finishCreation):
        (WebCore::BindingCaller<JSTestEventTarget>::castForOperation):
        (WebCore::jsTestEventTargetConstructor):
        (WebCore::setJSTestEventTargetConstructor):
        (WebCore::JSTestEventTarget::toWrapped):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::finishCreation):
        (WebCore::BindingCaller<JSTestException>::castForAttribute):
        (WebCore::jsTestExceptionConstructor):
        (WebCore::setJSTestExceptionConstructor):
        (WebCore::JSTestException::toWrapped):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::finishCreation):
        (WebCore::jsTestGenerateIsReachableConstructor):
        (WebCore::setJSTestGenerateIsReachableConstructor):
        (WebCore::JSTestGenerateIsReachable::toWrapped):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::finishCreation):
        (WebCore::BindingCaller<JSTestGlobalObject>::castForAttribute):
        (WebCore::BindingCaller<JSTestGlobalObject>::castForOperation):
        (WebCore::jsTestGlobalObjectConstructor):
        (WebCore::setJSTestGlobalObjectConstructor):
        (WebCore::JSTestGlobalObject::toWrapped):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::finishCreation):
        (WebCore::BindingCaller<JSTestInterface>::castForAttribute):
        (WebCore::BindingCaller<JSTestInterface>::castForOperation):
        (WebCore::jsTestInterfaceConstructor):
        (WebCore::setJSTestInterfaceConstructor):
        (WebCore::JSTestInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscore::finishCreation):
        (WebCore::BindingCaller<JSTestInterfaceLeadingUnderscore>::castForAttribute):
        (WebCore::jsTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::JSTestInterfaceLeadingUnderscore::toWrapped):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterable::finishCreation):
        (WebCore::BindingCaller<JSTestIterable>::castForOperation):
        (WebCore::jsTestIterableConstructor):
        (WebCore::setJSTestIterableConstructor):
        (WebCore::JSTestIterable::toWrapped):
        * bindings/scripts/test/JS/JSTestIterable.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::finishCreation):
        (WebCore::BindingCaller<JSTestJSBuiltinConstructor>::castForAttribute):
        (WebCore::BindingCaller<JSTestJSBuiltinConstructor>::castForOperation):
        (WebCore::jsTestJSBuiltinConstructorConstructor):
        (WebCore::setJSTestJSBuiltinConstructorConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::finishCreation):
        (WebCore::BindingCaller<JSTestMediaQueryListListener>::castForOperation):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        (WebCore::setJSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::toWrapped):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::finishCreation):
        (WebCore::jsTestNamedConstructorConstructor):
        (WebCore::setJSTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::finishCreation):
        (WebCore::BindingCaller<JSTestNode>::castForAttribute):
        (WebCore::BindingCaller<JSTestNode>::castForOperation):
        (WebCore::jsTestNodeConstructor):
        (WebCore::setJSTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::finishCreation):
        (WebCore::BindingCaller<JSTestObj>::castForAttribute):
        (WebCore::BindingCaller<JSTestObj>::castForOperation):
        (WebCore::jsTestObjConstructor):
        (WebCore::setJSTestObjConstructor):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction):
        (WebCore::JSTestObj::toWrapped):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
        (WebCore::JSTestOverloadedConstructors::finishCreation):
        (WebCore::jsTestOverloadedConstructorsConstructor):
        (WebCore::setJSTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructors::toWrapped):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::finishCreation):
        (WebCore::jsTestOverloadedConstructorsWithSequenceConstructor):
        (WebCore::setJSTestOverloadedConstructorsWithSequenceConstructor):
        (WebCore::JSTestOverloadedConstructorsWithSequence::toWrapped):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::finishCreation):
        (WebCore::BindingCaller<JSTestOverrideBuiltins>::castForOperation):
        (WebCore::jsTestOverrideBuiltinsConstructor):
        (WebCore::setJSTestOverrideBuiltinsConstructor):
        (WebCore::JSTestOverrideBuiltins::toWrapped):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::finishCreation):
        (WebCore::BindingCaller<JSTestSerialization>::castForAttribute):
        (WebCore::BindingCaller<JSTestSerialization>::castForOperation):
        (WebCore::jsTestSerializationConstructor):
        (WebCore::setJSTestSerializationConstructor):
        (WebCore::JSTestSerialization::toWrapped):
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::finishCreation):
        (WebCore::BindingCaller<JSTestSerializedScriptValueInterface>::castForAttribute):
        (WebCore::BindingCaller<JSTestSerializedScriptValueInterface>::castForOperation):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        (WebCore::setJSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::finishCreation):
        (WebCore::BindingCaller<JSTestTypedefs>::castForAttribute):
        (WebCore::BindingCaller<JSTestTypedefs>::castForOperation):
        (WebCore::jsTestTypedefsConstructor):
        (WebCore::setJSTestTypedefsConstructor):
        (WebCore::JSTestTypedefs::toWrapped):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bridge/c/CRuntimeObject.cpp:
        (JSC::Bindings::CRuntimeObject::finishCreation):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::finishCreation):
        (JSC::Bindings::CInstance::invokeMethod):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/objc/ObjCRuntimeObject.mm:
        (JSC::Bindings::ObjCRuntimeObject::finishCreation):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::finishCreation):
        (ObjcInstance::invokeMethod):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::finishCreation):
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::finishCreation):
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::finishCreation):
        (JSC::RuntimeMethod::lengthGetter):
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::finishCreation):
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * html/HTMLMediaElement.cpp:
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAccessInspectedScriptState):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):
        (WebCore::WebInjectedScriptHost::isHTMLAllCollection):
        * inspector/WebInjectedScriptHost.h:

2017-01-26  Dean Jackson  <dino@apple.com>

        WebGL content in Safari sticks to GPU that it was started on, sometimes causing extra battery drain and difficulty interacting with UI
        https://bugs.webkit.org/show_bug.cgi?id=167477
        <rdar://problem/29956321>

        Reviewed by Tim Horton.

        We were not implementing the recommended approach to properly handle
        GPU switching, causing some contexts to remain on a GPU and slow
        down the machine's UI. It also could stop the discrete GPU from
        turning off.

        Register for CGL's display reconfiguration notification, so that we
        can alert any active CGLContexts and cause them to update.

        The code change here doesn't lend itself to automated testing because
        it is specific to hardware with multiple GPUs, relies on some separate
        tools to detect which GPU is active, and an external method of triggering
        a GPU switch. It's best tested by the manual workflow in Radar.

        * platform/graphics/GraphicsContext3D.h: Add a macOS-specific update
        call.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::displayWasReconfigured): The callback for display reconfigurations.
        (WebCore::addActiveContext): Helper to keep track of active contexts, so we
        can register/unregister the callback when necessary.
        (WebCore::removeActiveContext):
        (WebCore::GraphicsContext3D::create): Use the new helpers.
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::updateCGLContext): Tell the CGLContextRef to update.

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

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

        Blocking bug is fixed <rdar://problem/29957753> (Requested by
        keith_miller on #webkit).

        Reverted changeset:

        "Disable smooth playhead animation for main content media in
        the Touch Bar"
        https://bugs.webkit.org/show_bug.cgi?id=166715
        http://trac.webkit.org/changeset/210328

2017-01-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: iOS: Memory timeline shows impossible values for Page size (underflowed)
        https://bugs.webkit.org/show_bug.cgi?id=167468
        <rdar://problem/30099051>

        Reviewed by Andreas Kling.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize):
        This value matches the sysctl value we were attempting to access, and is
        the most appropriate when dealing with mach APIs, as we are using here.

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

        Autoplay muted videos stop playback of any streaming app in the background
        https://bugs.webkit.org/show_bug.cgi?id=163993
        <rdar://problem/29020431>

        Reviewed by Eric Carlson.

        Added test in TestWebKitAPI, WebKit1.AudioSessionCategoryIOS.

        Previously, we would set the audio session category to "playback" if there was a media-
        element-type media session, and if there was a session capable of playing audio. But because
        this was an "or" operation, we would incorrectly set the category to "playback" if there was
        a video element incapable of rendering audio (due to being muted, without an audio track,
        etc.), and also a session capable of producing audio, such as WebAudio.

        With this change, this turns into an "and" operation; there must be a media element capable
        of rendering audio in order to switch the audio session category to "playback".

        Additionally, we no longer cache the value of "canProduceAudio()"; it's queried directly
        whenever updateSessionState() is called.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon):
        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedInto):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::HTMLMediaElement::presentationType):
        (WebCore::HTMLMediaElement::characteristics):
        (WebCore::HTMLMediaElement::canProduceAudio):
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::activeAudioSessionRequired):
        (WebCore::PlatformMediaSession::canProduceAudio):
        (WebCore::PlatformMediaSession::canProduceAudioChanged):
        (WebCore::PlatformMediaSession::setCanProduceAudio): Deleted.
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::canProduceAudio):
        (WebCore::PlatformMediaSession::canProduceAudio): Deleted.
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):

2017-01-26  Filip Pizlo  <fpizlo@apple.com>

        EventTarget should visit the JSEventListeners using visitAdditionalChildren
        https://bugs.webkit.org/show_bug.cgi?id=167462

        Reviewed by Michael Saboff.

        No new tests because this is already caught by existing testing. This would show up as ASSERTs
        in debug, and we suspect it might be at fault for null deref crashes.
        
        Previously, EventTarget would have its event listeners visited by its subclasses' visitChildren
        methods. Every subclass of EventTarget would call EventTarget's visitJSEventListeners. For
        example, this means that if JSFoo has seven classes between it and JSEventTarget in the JSCell
        class hierarchy, then JSFoo::visitChildren would end up calling visitJSEventListeners seven extra
        times.
        
        Also, the weird way that visitJSEventListeners was called meant that it was not part of the GC's
        output constraint processing. This meant that it would not be called when the GC tried to
        terminate. So, if something about the event listener changes during a GC cycle, the GC would
        potentially fail to mark one of the references.
        
        Both problems can be solved by simply moving the call to visitJSEventListeners into
        visitAdditionalChildren.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::visitAdditionalChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/EventTarget.idl:

2017-01-26  Andy Estes  <aestes@apple.com>

        [QuickLook] Create temporary files with NSFileProtectionCompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=167455
        <rdar://problem/12499118>

        Reviewed by David Kilzer.

        Add the NSFileProtectionKey attribute with value NSFileProtectionCompleteUnlessOpen to
        temporary directories created for QuickLook files. Also:

        1. Stop calling -[NSFileManager _web_pathWithUniqueFilenameForPath:], since the temporary
        directory is already unique and only one file will be placed inside it.
        2. Create the temporary file with -[NSFileManager _web_createFileAtPath:contents:attributes:]
        instead of with -[NSFileManager _web_createFileAtPathWithIntermediateDirectories:contents:attributes:directoryAttributes:],
        since the intermediate directories were already created by createTemporaryDirectory().
        3. Explicitly set the temporary directory's attributes with
        -[NSFileManager setAttributes:ofItemAtPath:error:].
        4. Append the lastPathComponent of fileName to downloadDirectory to ensure fileName isn't
        really a relative path.

        * loader/ios/QuickLook.h: Stopped declaring QLFileAttributes() and QLDirectoryAttributes().
        * loader/ios/QuickLook.mm:
        (WebCore::temporaryFileAttributes): Renamed from QLFileAttributes().
        (WebCore::temporaryDirectoryAttributes): Renamed from QLDirectoryAttributes().
        (WebCore::createTemporaryFileForQuickLook):
        (WebCore::QLFileAttributes): Deleted.
        (WebCore::QLDirectoryAttributes): Deleted.
        * platform/spi/cocoa/NSFileManagerSPI.h: Declared -_web_createFileAtPath:contents:attributes:
        and removed declarations for -_web_createFileAtPathWithIntermediateDirectories:contents:attributes:directoryAttributes:
        and -_web_pathWithUniqueFilenameForPath:

2017-01-26  Jeremy Jones  <jeremyj@apple.com>

        Pointer lock events should be delivered directly to the target element
        https://bugs.webkit.org/show_bug.cgi?id=167134

        Reviewed by Jon Lee.

        pointer-lock/mouse-event-delivery.html: Enabled for mac, added wheel event tests.

        When pointer is locked on an element, route mouse events directly to the target element, instead of 
        doing the normal event disptach.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseForceEvent):
        (WebCore::EventHandler::handleWheelEvent):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::isLocked): Added.
        (WebCore::PointerLockController::dispatchLockedWheelEvent): Added.
        * page/PointerLockController.h:

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Fix CPU / Memory diagnostic logging in PerformanceMonitor
        https://bugs.webkit.org/show_bug.cgi?id=167469
        <rdar://problem/30220959>

        Reviewed by Alex Christensen.

        Fix CPU / Memory diagnostic logging in PerformanceMonitor to use logDiagnosticMessage()
        instead of logDiagnosticMessageWithValue(). logDiagnosticMessageWithValue() should only
        be used with numeric values but we already take care of the bucketing on our side.

        * page/DiagnosticLoggingClient.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingCPUUsageKey):
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingMemoryUsageKey):
        (WebCore::DiagnosticLoggingKeys::postPageLoadCPUUsageKey):
        (WebCore::DiagnosticLoggingKeys::postPageLoadMemoryUsageKey):
        (WebCore::DiagnosticLoggingKeys::foregroundCPUUsageToDiagnosticLoggingKey):
        (WebCore::DiagnosticLoggingKeys::backgroundCPUUsageToDiagnosticLoggingKey):
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::postPageLoadKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::memoryUsageKey): Deleted.
        * page/DiagnosticLoggingKeys.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
        (WebCore::PerformanceMonitor::measurePostLoadMemoryUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingMemoryUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingCPUUsage):

2017-01-26  Brady Eidson  <beidson@apple.com>

        Gamepads: Some DPads are still not exposed in the HID backend.
        rdar://problem/30217518 and https://bugs.webkit.org/show_bug.cgi?id=167465

        Reviewed by Alex Christensen.

        No new tests (Currently unable to test HID backend directly)

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::maybeAddButton): Allow GenericDesktop paged elements that are DPads to be buttons.

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

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

        broke tiling on mac (Requested by thorton on #webkit).

        Reverted changeset:

        "TileGrid revalidates tiles twice during flush, first with
        wrong visible rect"
        https://bugs.webkit.org/show_bug.cgi?id=166406
        http://trac.webkit.org/changeset/210095

2017-01-26  Chris Dumez  <cdumez@apple.com>

        Fix WebGL diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167463
        <rdar://problem/30216981>

        Reviewed by Alex Christensen.

        Fix WebGL diagnostic logging so that it no longer uses logDiagnosticMessageWithValue().
        This is because the value apparently needs to be numeric on Mac.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::checkForContextLossHandling):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::pageHandlesWebGLContextLossKey):
        (WebCore::WebCore::DiagnosticLoggingKeys::webGLStateKey):
        (WebCore::DiagnosticLoggingKeys::stateKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::handlesContextLossKey): Deleted.
        (WebCore::WebCore::DiagnosticLoggingKeys::webGLKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2017-01-26  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add support for -webkit-hyphenate-limit-lines
        https://bugs.webkit.org/show_bug.cgi?id=167446
        <rdar://problem/30194030>

        Reviewed by Antti Koivisto.

        Now we can set the limit on the number of lines that a word can split across through hyphenation.

        Tests: fast/text/simple-line-layout-hyphen-limit-lines.html
               fast/text/simple-line-layout-hyphen-limit-lines2.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::wrappingWithHyphenCounter):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::splitWithHyphen): The right side of the split has +1 on the wrapping counter.

2017-01-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for recognizing data interaction gestures in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=167444

        Reviewed by Beth Dakin.

        Minor tweaks to pasteboard code to support data interaction.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::PlatformPasteboard):

        If the pasteboard is the special data interaction type, use the shared item provider pasteboard; otherwise,
        fall back to the general pasteboard.

        (WebCore::PlatformPasteboard::getTypes):

        Actually populate the list of available types using available pasteboardTypes.

        (WebCore::PlatformPasteboard::write):

        Add UTF8 plaintext type (kUTTypeUTF8PlainText) when vending data representations of rich text.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItems:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

        Move off of deprecated methods when retrieving and supplying data to the item provider pasteboard.

        * platform/spi/ios/UIKitSPI.h:

2017-01-26  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        The API is tested.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal):
        * page/ChromeClient.h:

2017-01-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] ASSERTION FAILED: !g_object_is_floating(ptr) in adoptGRef(GstContext* ptr)
        https://bugs.webkit.org/show_bug.cgi?id=167458

        Reviewed by Xabier Rodriguez-Calvar.

        GstContext is a mini_object, not a GObject. Therefore it shouldn't (and can't) be checked for floatingness.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef): Removed incorrect assertion.

2017-01-26  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add support for -webkit-hyphenate-limit-after and -webkit-hyphenate-limit-before
        https://bugs.webkit.org/show_bug.cgi?id=167439
        <rdar://problem/30180184>

        Reviewed by Antti Koivisto.

        Implement pre and post hyphen length constrains for simple line layout.

        Tests: fast/text/simple-line-layout-hyphen-limit-after.html
               fast/text/simple-line-layout-hyphen-limit-before.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style): Same as normal line layout default values.
        (WebCore::SimpleLineLayout::TextFragmentIterator::lastHyphenPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2017-01-26  Brady Eidson  <beidson@apple.com>

        Gamepad support shows wrong values for PS4 controllers (D-pad is missing).
        <rdar://problem/29578619> and https://bugs.webkit.org/show_bug.cgi?id=165588

        Reviewed by Alex Christensen.

        No new tests (Currently unable to test HID backend directly)

        DPads report their HID type as "a button", but their HID usage is "Hatswitch".
        This patch adds a new element type that maps a "hatswitch" value to 4 additional buttons.
        
        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::initElements):
        (WebCore::HIDGamepad::initElementsFromArray):
        (WebCore::HIDGamepad::maybeAddButton):
        (WebCore::HIDGamepad::maybeAddDPad):
        (WebCore::HIDGamepad::maybeAddAxis):
        (WebCore::fillInButtonValues):
        (WebCore::HIDGamepad::valueChanged):

        * platform/gamepad/mac/HIDGamepad.h:
        (WebCore::HIDGamepadElement::isDPad):
        (WebCore::HIDGamepadDPad::HIDGamepadDPad):
        (WebCore::HIDGamepadDPad::normalizedValue):

2017-01-26  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Hiding controls, changing their width and showing them again shows an incorrect layout
        https://bugs.webkit.org/show_bug.cgi?id=167160
        <rdar://problem/29612318>

        Reviewed by Dean Jackson.

        When we toggle visibility of the controls bar, we notify the hosting media controls and in the case of the
        macOS inline media controls, we update the controls layout which would have failed to run last time it tried
        due to the controls bar being hidden.

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-resize-with-hidden-controls-bar.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set visible):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.controlsBarVisibilityDidChange):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.controlsBarVisibilityDidChange):

2017-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed speculative buildfix after r211161.
        https://bugs.webkit.org/show_bug.cgi?id=167294

        * PlatformMac.cmake:

2017-01-26  Zan Dobersek  <zdobersek@igalia.com>

        ImageBufferCairo: cairo_image_surface should use bmalloc-allocated memory
        https://bugs.webkit.org/show_bug.cgi?id=165751

        Reviewed by Carlos Garcia Campos.

        Allocate the underlying memory for cairo_image_surface objects through FastMalloc.
        This way we can steer such large allocations away from the default libc allocator.

        Objects of this class can create Cairo surfaces that need as much as 4MB of memory
        for the underlying pixel buffer. Allocating such objects through the default
        libc allocator can lead to increased memory usage because of non-optimal allocation
        strategy in libc. In contrast, bmalloc performs large allocations by directly using
        mmap() to reserve the necessary memory.

        The improvements can be significant. On nytimes.com, with the threaded version of
        the CoordinatedGraphics system, the memory consumption can drop by roughly 20%.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Zero-allocate the necessary memory via FastMalloc.
        Tie that memory lifetime to the lifetime of the surface by using
        cairo_surface_set_user_data() with the specific user data key.

2017-01-26  Miguel Gomez  <magomez@igalia.com>

        [GTK] WebProcess from WebKitGtk+ 2.15.3 SIGSEVs in WebCore::GraphicsContext3D::drawArrays(unsigned int, int, int) at Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:740
        https://bugs.webkit.org/show_bug.cgi?id=167296

        Reviewed by Sergio Villar Senin.

        Use a VBO to pass the vertex data when using the stencil for clipping. Passing a custom array without
        using an VBO is deprecated when using OpenGL >= 3.0 and a Core profile.

        No behaviour change, no new tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::beginClip):

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

        Crash under DOMSelection::deleteFromDocument()
        https://bugs.webkit.org/show_bug.cgi?id=167232

        Reviewed by Chris Dumez.

        The crash was caused by DOMSelection's deleteFromDocument() mutating contents inside the user-agent
        shadow tree of an input element when the text field is readonly. Fixed the bug by exiting early
        whenever the selection is inside a shadow tree since getSelection().getRangeAt(0) always returns
        a range outside the input element or any shadow tree for that matter.

        New behavior matches that of Gecko. The working draft spec of which I'm the editor states that
        deleteFromDocument() must invoke Range's deleteContents() on the associated range, which is
        the collapsed range returned by getSelection().getRangeAt(0) in the spec:
        https://www.w3.org/TR/2016/WD-selection-api-20160921/#widl-Selection-deleteFromDocument-void
        And Range's deleteContents() immediately terminates in step 1 when start and end are identical:
        https://dom.spec.whatwg.org/commit-snapshots/6b7621282c2e3b222ac585650e484abf4c0a416b/

        Note that Range's DOM mutating methods are not available inside an user-agent shadow tree because
        WebKit never returns a Range whose end boundary points are inside the tree to author scripts.
        Editing commands (ones executable from document.execCommand) that mutate DOM like this check whether
        the content is editable or not. Since VisibleSelection's validate() function makes sure the selection
        is either entirely within or outside of an root editable element (editing host in the W3C spec lingo),
        editing commands should never mutate a random node inside an user-agent shadow tree.

        Test: editing/selection/deleteFromDocument-shadow-tree-crash.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):

2017-01-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211193.

        This change broke internal builds.

        Reverted changeset:

        "Notify clients when the user plays media otherwise prevented
        from autoplaying"
        https://bugs.webkit.org/show_bug.cgi?id=167390
        http://trac.webkit.org/changeset/211193

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add infrastructure to support data interaction in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=167443

        Reviewed by Simon Fraser.

        Adds support in WebCore to determine whether there is interactive data at a given position. No new tests, since
        there should be no behavior change yet.

        * page/EventHandler.h:
        * page/Page.cpp:
        (WebCore::Page::hasDataInteractionAtPosition):
        * page/Page.h:

2017-01-25  Matt Rajca  <mrajca@apple.com>

        Notify clients when the user plays media otherwise prevented from autoplaying
        https://bugs.webkit.org/show_bug.cgi?id=167390

        Reviewed by Alex Christensen.

        The API is tested.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal):
        * page/ChromeClient.h:

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor drag and drop implementation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=167427

        Reviewed by Enrica Casucci.

        Refactors some code around drag and drop on Mac, and cleans up some other related code as needed. This patch
        should result in no behavior change.

        * dom/DataTransfer.cpp:
        * page/EventHandler.cpp:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        * page/mac/EventHandlerMac.mm:
        * platform/DragImage.cpp:
        * platform/Pasteboard.h:
        * platform/ios/DragImageIOS.mm:
        * platform/ios/PasteboardIOS.mm:
        * platform/mac/DragDataMac.mm:
        (rtfPasteboardType):
        (rtfdPasteboardType):
        (stringPasteboardType):
        (urlPasteboardType):
        (htmlPasteboardType):
        (colorPasteboardType):
        (pdfPasteboardType):
        (tiffPasteboardType):
        (WebCore::DragData::DragData):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsPromise):
        (WebCore::DragData::asURL):
        * platform/mac/DragImageMac.mm:

2017-01-25  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add support for incoming and outgoing libwebrtc audio tracks
        https://bugs.webkit.org/show_bug.cgi?id=167438

        Reviewed by Eric Carlson.

        RealtimeIncomingAudioSource consumes audio buffers given by libwebrtc.
        RealtimeOutgoingAudioSource consumes audio buffers from WebCore tracks (capture typically) and feeds libwebrtc with them.
        To be covered by Layout/mock tests once LibWebRTC peer connection will be added.
        These are only skeletons right now, the conversion between WebCore and LibWebRTC data is not yet implemented.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: Added.
        (WebCore::RealtimeIncomingAudioSource::create):
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::OnData):
        (WebCore::RealtimeIncomingAudioSource::startProducingData):
        (WebCore::RealtimeIncomingAudioSource::stopProducingData):
        (WebCore::RealtimeIncomingAudioSource::capabilities):
        (WebCore::RealtimeIncomingAudioSource::settings):
        (WebCore::RealtimeIncomingAudioSource::supportedConstraints):
        (WebCore::RealtimeIncomingAudioSource::addObserver):
        (WebCore::RealtimeIncomingAudioSource::removeObserver):
        (WebCore::RealtimeIncomingAudioSource::start):
        (WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h: Added.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp: Added.
        (WebCore::RealtimeOutgoingAudioSource::sourceHasMoreMediaData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h: Added.

2017-01-25  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add support for libwebrtc video incoming and outgoing video tracks
        https://bugs.webkit.org/show_bug.cgi?id=167432

        Reviewed by Eric Carlson.

        Not covered by tests right now, this will be covered by layout/mock tests.
        RealtimeIncomingVideoSource consumes video frames given by libwebrtc.
        RealtimeOutgoingVideoSource consumes video frames from WebCore tracks (capture typically) and feeds libwebrtc with them.

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: Added.
        (WebCore::RealtimeIncomingVideoSource::create):
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::startProducingData):
        (WebCore::RealtimeIncomingVideoSource::stopProducingData):
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        (WebCore::RealtimeIncomingVideoSource::processNewSample):
        (WebCore::drawImage):
        (WebCore::RealtimeIncomingVideoSource::currentFrameImage):
        (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext):
        (WebCore::RealtimeIncomingVideoSource::capabilities):
        (WebCore::RealtimeIncomingVideoSource::settings):
        (WebCore::RealtimeIncomingVideoSource::supportedConstraints):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h: Added.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp: Added.
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::GetStats):
        (WebCore::RealtimeOutgoingVideoSource::AddOrUpdateSink):
        (WebCore::RealtimeOutgoingVideoSource::RemoveSink):
        (WebCore::RealtimeOutgoingVideoSource::sourceHasMoreMediaData):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h: Added.

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce an item-provider-based pasteboard wrapper
        https://bugs.webkit.org/show_bug.cgi?id=167410

        Reviewed by Enrica Casucci.

        Introduces WebItemProviderPasteboard, a pasteboard-like object backed by a number of item providers. No new
        tests, since there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/AbstractPasteboard.h: Copied from Source/WebCore/platform/spi/ios/UIKitSPI.h.
        * platform/ios/WebItemProviderPasteboard.h: Copied from Source/WebCore/platform/spi/ios/UIKitSPI.h.
        * platform/ios/WebItemProviderPasteboard.mm: Added.
        (isRichTextType):
        (isStringType):
        (isURLType):
        (isColorType):
        (isImageType):
        (+[WebItemProviderPasteboard sharedInstance]):
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard dealloc]):
        (-[WebItemProviderPasteboard pasteboardTypes]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard numberOfItems]):
        (-[WebItemProviderPasteboard setItems:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard changeCount]):
        (-[WebItemProviderPasteboard itemProviderAtIndex:]):
        * platform/spi/ios/UIKitSPI.h:

2017-01-25  Konstantin Tokarev  <annulen@yandex.ru>

        Removed leftovers of pre-2015 VisualStudio support
        https://bugs.webkit.org/show_bug.cgi?id=167434

        Reviewed by Alex Christensen.

        No new tests needed.

        * platform/graphics/filters/FEConvolveMatrix.cpp: Replaced MSC_VER
        usage with COMPILER(MSVC)

2017-01-25  Youenn Fablet  <youenn@apple.com>

        Fixing typos in r211161
        https://bugs.webkit.org/show_bug.cgi?id=167433

        Reviewed by Alex Christensen.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2017-01-25  Simon Fraser  <simon.fraser@apple.com>

        Revert r210882, removing support for background-repeat-x/y
        https://bugs.webkit.org/show_bug.cgi?id=167223

        Reviewed by Myles C. Maxfield.
        
        Followup from r211149; I missed part of the patch when committing.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2017-01-25  Youenn Fablet  <youennf@gmail.com>

        [WebRTC] Introduce libwebrtc abstraction for WK1/WK2 implementations
        https://bugs.webkit.org/show_bug.cgi?id=167294

        Reviewed by Alex Christensen.

        Introducing LibWebRTCMacros.h which should be included before any libwebrtc header.

        Introducing LibWebRTCProvider as the abstraction allowing to suport WK1 and WK2 libwebrtc-based WebRTC endpoints.
        It  will create a libwebrtc peerconnection object differently in WK1 and WK2 as networking will be done differently.

        LibWebRTCUtils contains routines used by WK1 and WK2 RTC providers to create the libwebrtc peerconnection object
        and implement the necessary functionalities for it.

        Updating PageConfiguration accordingly.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::libWebRTCProvider):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:
        * platform/mediastream/libwebrtc/LibWebRTCMacros.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h: Added.
        * platform/mediastream/libwebrtc/LibWebRTCUtils.cpp: Added.
        (WebCore::staticFactoryAndThreads):
        (WebCore::ThreadMessageData::ThreadMessageData):
        (WebCore::PeerConnectionFactoryAndThreads::OnMessage):
        (WebCore::callOnWebRTCNetworkThread):
        (WebCore::initializePeerConnectionFactoryAndThreads):
        (WebCore::initializeLibWebRTCInternalsWithSocketServer):
        (WebCore::peerConnectionFactory):
        (WebCore::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCUtils.h: Added.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for named pasteboards, pasteboard strategies and platform pasteboards
        https://bugs.webkit.org/show_bug.cgi?id=167404

        Reviewed by Enrica Casucci.

        Refactors some pasteboard-related code to plumb the name of the pasteboard across from WebCore to the client
        layer. No new tests, because there should be no change in behavior.

        * platform/DragData.h:
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::writeString):
        (WebCore::Pasteboard::types):

2017-01-25  Antoine Quint  <graouts@apple.com>

        LayoutTest media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=167253

        Reviewed by Jon Lee.

        An IconButton loads its image asynchronously and waits for its load to obtain metrics. Once that happens,
        its layout delegate needs to be notified that it needs a new layout. The test was a flaky failure because
        the images would sometime load prior to layout, and sometime after, which would cause a failure. The test
        is now robust with a controls layout happening after all buttons had loaded.

        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype._updateImage):
        (IconButton):

2017-01-25  Timothy Hatcher  <timothy@hatcher.name>

        Fix the !HAVE(ACCESSIBILITY) build by properly instantiating AXObjectCache member timers.

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

2017-01-25  Chris Dumez  <cdumez@apple.com>

        Measure how common it is for content to deal with WebGL context loss
        https://bugs.webkit.org/show_bug.cgi?id=166866
        <rdar://problem/30171195>

        Reviewed by Alex Christensen.

        Add diagnostic logging to measure how common it is for sites to handle
        WebGL context loss via the webglcontextlost & webglcontextrestored
        events.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::checkForContextLossHandling):
        * html/canvas/WebGLRenderingContextBase.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::noKey):
        (WebCore::DiagnosticLoggingKeys::yesKey):
        (WebCore::DiagnosticLoggingKeys::handlesContextLossKey):
        * page/DiagnosticLoggingKeys.h:

2017-01-25  Simon Fraser  <simon.fraser@apple.com>

        Revert r210882, removing support for background-repeat-x/y
        https://bugs.webkit.org/show_bug.cgi?id=167223

        Reviewed by Myles Maxfield.

        CSSPropertyBackgroundRepeatX and CSSPropertyBackgroundRepeatY only exist to make it easier
        to parse CSSPropertyBackgroundRepeat as if it were a shorthand; they were never intended to
        be web-exposed. r210882 mistakenly expose them to the web, so undo that patch, and annotate
        the properties in CSSProperties.json with a flag which indicates their special status.

        In addition, remove background-repeat-x/y from the list of properties allowed in video cues,
        since these are not valid properties.

        * css/CSSProperties.json:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isValidCueStyleProperty):
        * css/makeprop.pl:
        (addProperty):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UIProcess from WebKitGtk+ 2.15.x SIGSEGVs because of X Error BadDamage in WebKit::AcceleratedBackingStoreX11::update(WebKit::LayerTreeContext const&) () at Source/WebKit2/UIProcess/gtk/AcceleratedBackingStoreX11.cpp:145
        https://bugs.webkit.org/show_bug.cgi?id=165656

        Reviewed by Michael Catanzaro.

        Also return the base error code from PlatformDisplayX11::supportsXDamage().

        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::supportsXDamage):
        * platform/graphics/x11/PlatformDisplayX11.h:

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix 32 bit build after r211140.

        Include glib-object.h instead of forward declaring GType.

        * platform/network/soup/SoupNetworkSession.h:

2017-01-25  Miguel Gomez  <magomez@igalia.com>

        [GTK] The inspector is broken when AC support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=165237

        Reviewed by Carlos Garcia Campos.

        Ensure that PageOverlayController destroys its root GraphicsLayers when leaving AC. They
        will be recreated if we enter AC again, avoiding a crash because the layers don't belong to
        the appropriate compositor. Also, don't append the document overlay layers if we are not
        in compositing mode.

        No new tests added.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::willDetachRootLayer):
        * page/PageOverlayController.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::detachRootLayer):

2017-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom protocols don't work in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=167236

        Reviewed by Sergio Villar Senin.

        Add static method to set the global custom protocols request type and setup method to add the feature to the session.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::setCustomProtocolRequestType):
        (WebCore::SoupNetworkSession::setupCustomProtocols):
        * platform/network/soup/SoupNetworkSession.h:

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

        collectMatchingElementsInFlatTree should not find elements inside an user agent shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=167409

        Reviewed by Antti Koivisto.

        The bug was caused by collectMatchingElementsInFlatTree including elements inside an user agent shadow tree
        even though it shouldn't. Fixed the bug by checking that condition.

        Also added matchingElementInFlatTree to find the first element matching a selector as opposed to all,
        again, only exposed in a world which forces all shadow trees to be accessible.

        * page/DOMWindow.cpp:
        (WebCore::selectorQueryInFrame):
        (WebCore::DOMWindow::collectMatchingElementsInFlatTree):
        (WebCore::DOMWindow::matchingElementInFlatTree):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2017-01-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r208902): URLWithUserTypedString returns nil with file URLs
        https://bugs.webkit.org/show_bug.cgi?id=167402
        <rdar://problem/29896656>

        Reviewed by Ryosuke Niwa.

        Covered by a new API test.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::mapHostNameWithRange):
        uidna_IDNToASCII succeeds when length is 0.
        uidna_nameToASCII fails when length is 0.
        This causes bad things to happen with file URLs, which have no host, so their host length is 0.
        This makes us match behavior before r208902.

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167394

        Reviewed by Ryosuke Niwa.

        All of the Performance Timing specifications are highly coupled.
        So let make WEB_TIMING encompass them all:

            - High Resolution Time (window.performance)
            - Performance Timeline (PerformanceEntry, PerformanceObserver)
            - Navigation Timing ("navigation" entries)
            - Resource Timing ("resource" entries)
            - User Timing ("mark" / "measure" entries)

        We can then turn on and off individual pieces as runtime features,
        such as Resource Timing, User Timing, and Performance Observer.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add User Timing files that are now included in WEB_TIMING builds.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setUserTimingEnabled):
        (WebCore::RuntimeEnabledFeatures::userTimingEnabled):
        Add a runtime feature for user timing. Disabled by default.

        * Configurations/FeatureDefines.xcconfig:
        * PAL/Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSPerformanceEntryCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * page/Performance.cpp:
        (WebCore::Performance::getEntries):
        (WebCore::Performance::getEntriesByType):
        (WebCore::Performance::getEntriesByName):
        (WebCore::Performance::mark):
        (WebCore::Performance::clearMarks):
        (WebCore::Performance::measure):
        (WebCore::Performance::clearMeasures):
        (WebCore::Performance::webkitMark): Deleted.
        (WebCore::Performance::webkitClearMarks): Deleted.
        (WebCore::Performance::webkitMeasure): Deleted.
        (WebCore::Performance::webkitClearMeasures): Deleted.
        * page/Performance.h:
        * page/Performance.idl:
        * page/PerformanceMark.h:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.h:
        * page/PerformanceMeasure.idl:
        * page/PerformanceUserTiming.cpp:
        * page/PerformanceUserTiming.h:
        Convert USER_TIMING to WEB_TIMING.
        Drop webkit prefixed legacy names.

2017-01-24  Antoine Quint  <graouts@apple.com>

        LayoutTest media/modern-media-controls/tracks-panel/tracks-panel-hide.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=167311

        Reviewed by Dean Jackson.

        Ensure we have a chance to start the transition (on the next frame) before registering for an event
        tracking its completion.

        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype.hide):

2017-01-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Avoid IOSurface readback for snapshot creation
        https://bugs.webkit.org/show_bug.cgi?id=167397
        rdar://problem/30174873

        Reviewed by Tim Horton.

        Export sinkIntoImage().

        * platform/graphics/cocoa/IOSurface.h:

2017-01-24  Brent Fulgham  <bfulgham@apple.com>

        Bug 167392: REGRESSION(r210531): Relax same-volume display requirement for iOS
        https://bugs.webkit.org/show_bug.cgi?id=167392
        <rdar://problem/30074665>

        Reviewed by Brady Eidson.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay): Exclude the new check when building on iOS.

2017-01-24  Andreas Kling  <akling@apple.com>

        Add memory footprint reporting using diagnostic logging.
        <https://webkit.org/b/167285>
        <rdar://problem/30151767>

        Reviewed by Chris Dumez.

        Add some basic logging of physical memory footprint post-load and post-backgrounding.
        The logging works similarly to the CPU usage logging, though with slightly longer
        delays to allow the measurement to stabilize.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::memoryUsageKey):
        (WebCore::DiagnosticLoggingKeys::memoryUsageToDiagnosticLoggingKey):
        * page/DiagnosticLoggingKeys.h:
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::physicalFootprint):
        * page/PerformanceLogging.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::PerformanceMonitor):
        (WebCore::PerformanceMonitor::didFinishLoad):
        (WebCore::PerformanceMonitor::activityStateChanged):
        (WebCore::PerformanceMonitor::measurePostLoadMemoryUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingMemoryUsage):
        * page/PerformanceMonitor.h:
        * page/Settings.h:
        (WebCore::Settings::isPostLoadMemoryUsageMeasurementEnabled):
        (WebCore::Settings::isPostBackgroundingMemoryUsageMeasurementEnabled):
        * page/cocoa/PerformanceLoggingCocoa.mm:
        (WebCore::PerformanceLogging::physicalFootprint):

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true unsafePluginPastingEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=167360

        Reviewed by Andreas Kling.

        Setting added by Chromium and never used by other ports.

        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * page/Settings.in:

2017-01-24  Anders Carlsson  <andersca@apple.com>

        When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
        https://bugs.webkit.org/show_bug.cgi?id=167391
        rdar://problem/29857388

        Reviewed by Sam Weinig.

        * page/Page.cpp:
        (WebCore::Page::refreshPlugins):
        Remove an unused variable.

        * plugins/PluginInfoProvider.cpp:
        (WebCore::PluginInfoProvider::refresh):
        Make sure to call refreshPlugins(). Instead of reloading subframes, just reload all the main frames with
        subframes that contain plug-ins.

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Clean up Performance IDL interfaces so they are easier to read
        https://bugs.webkit.org/show_bug.cgi?id=167378

        Reviewed by Sam Weinig.

        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.idl:
        Update spec links and use a typedef to match specs.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::workerStart):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceResourceTiming.idl:
        Add the workerStart property which always returns 0 for non-workers.

2017-01-24  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add support for hyphen: auto.
        https://bugs.webkit.org/show_bug.cgi?id=167297
        <rdar://problem/30119463>

        Reviewed by Antti Koivisto.

        Implement hyphen: auto for simple line layout. 

        Tests: fast/text/simple-line-hyphens-with-text-align.html
               fast/text/simple-line-hyphens-with-word-letter-spacing.html

        * platform/text/Hyphenation.h:
        (WebCore::enoughWidthForHyphenation):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSimpleLine):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded): Inherit the hyphen attribute from the
        run-to-be-appended. Ensure that we don't append additional runs when the last run has hyphen.
        (WebCore::SimpleLineLayout::splitFragmentToFitLine): Before calling into the lastHyphenPosition() we need to
        ensure that the hyphen would surely fit (even on the splitting position).
        (WebCore::SimpleLineLayout::createLineRuns): Probe hypenation for overhanging non-whitespace runs. 
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::Segment::toSegmentPosition):
        (WebCore::SimpleLineLayout::FlowContents::Segment::toRenderPosition):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::constructStringForHyphenIfNeeded):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::hasHyphen):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextBreakablePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::TextFragmentIterator::lastHyphenPosition): We only check the actual run for hyphenation ignoring
        the neighboring runs. This might need to be changed in the future.
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::hasHyphen):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::operator==):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::splitWithHyphen):
        * rendering/line/BreakingContext.h:
        (WebCore::tryHyphenating):

2017-01-24  Matt Rajca  <mrajca@apple.com>

        Pass down website autoplay policies to media elements
        https://bugs.webkit.org/show_bug.cgi?id=167355

        Reviewed by Alex Christensen.

        Autoplay policies can be specified at the global web view preferences level or on a per-page
        basis during navigation. This patch ensures that policies specified on a per-page basis hold
        precedence over global policies. If no policies are specified during navigation, global
        policies are used. A WebsiteAutoplayPolicy::Default option has been added to let clients
        explicitly specify web view defaults should be used.

        * dom/Document.cpp:
        (WebCore::Document::audioPlaybackRequiresUserGesture):
        (WebCore::Document::videoPlaybackRequiresUserGesture):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::playInternal):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::audioPlaybackRequiresUserGesture):
        (WebCore::DocumentLoader::setAudioPlaybackRequiresUserGesture):
        (WebCore::DocumentLoader::videoPlaybackRequiresUserGesture):
        (WebCore::DocumentLoader::setVideoPlaybackRequiresUserGesture):

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true selectionIncludesAltImageText setting
        https://bugs.webkit.org/show_bug.cgi?id=167358

        Reviewed by Alex Christensen.

        * editing/Editor.cpp:
        (WebCore::Editor::selectedTextForDataTransfer):
        * page/Settings.in:

2017-01-24  Daniel Bates  <dabates@apple.com>

        StringView.split() should use an iterator design pattern instead of allocating a Vector
        https://bugs.webkit.org/show_bug.cgi?id=163225

        Reviewed by Darin Adler.

        Update code to use the new iterator-style StringView.split().

        * platform/URLParser.cpp:

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true openGLMultisamplingEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=167364

        Reviewed by Sam Weinig.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * page/Settings.in:

2017-01-24  Miguel Gomez  <magomez@igalia.com>

        [GTK] Do not paint non composited content into the window when using the threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=167367

        Reviewed by Carlos Garcia Campos.

        When using the threaded compositor we need to send the non composited content for compositing as well,
        not painting it directly into the window.

        No new tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true allowCustomScrollbarInMainFrame setting
        https://bugs.webkit.org/show_bug.cgi?id=167362

        Reviewed by Andreas Kling.

        Setting added by Chromium and never used by other ports.

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * page/Settings.in:

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true syncXHRInDocumentsEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=167359

        Reviewed by Alex Christensen.

        Setting added by Chromium and never used by other ports.

        * page/Settings.in:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove always true antialiased2dCanvasEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=167361

        Reviewed by Andreas Kling.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * page/Settings.in:

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

        Add the support for nomodule attribute on script element
        https://bugs.webkit.org/show_bug.cgi?id=166987

        Reviewed by Sam Weinig.

        As discussed on https://github.com/whatwg/html/pull/2261, we should have
        the way to suppress classic script execution when our user agent have
        modules support. With such a feature, developers can write the code like,

            <script type="module" src="./app.js"></script>
            <script nomodule src="./bundled-app.js"></script>

        In the above code, if the user agent does not support modules, the bundled-app.js
        will be executed. On the other hand, if the user agent supports modules, we should
        ignore the script tag which has the `nomodule` attribute.
        This way allows us to support the legacy browsers while using modules.

        In WebKit, we already support modules. Thus, we should ignore the classic script
        attributed `nomodule`.

        We also rename asyncAttributeValue and deferAttributeValue to hasAsyncAttribute and
        hasDeferAttribute.

        Tests: js/dom/modules/nomodule-has-no-effect-on-module-inline.html
               js/dom/modules/nomodule-has-no-effect-on-module-src.html
               js/dom/modules/nomodule-prevents-execution-classic-script-inline.html
               js/dom/modules/nomodule-prevents-execution-classic-script-src.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):
        * dom/ScriptElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::hasAsyncAttribute):
        (WebCore::HTMLScriptElement::hasDeferAttribute):
        (WebCore::HTMLScriptElement::hasNoModuleAttribute):
        (WebCore::HTMLScriptElement::asyncAttributeValue): Deleted.
        (WebCore::HTMLScriptElement::deferAttributeValue): Deleted.
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::hasAsyncAttribute):
        (WebCore::SVGScriptElement::hasDeferAttribute):
        (WebCore::SVGScriptElement::hasNoModuleAttribute):
        (WebCore::SVGScriptElement::asyncAttributeValue): Deleted.
        (WebCore::SVGScriptElement::deferAttributeValue): Deleted.
        * svg/SVGScriptElement.h:

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to trigger a Garbage Collection
        https://bugs.webkit.org/show_bug.cgi?id=167345
        <rdar://problem/30102853>

        Reviewed by Timothy Hatcher.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Include a HeapAgent so we can do Heap.gc on Workers.

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup WEB_TIMING code
        https://bugs.webkit.org/show_bug.cgi?id=167339

        Reviewed by Alex Christensen.

        Stylistic cleanup to WEB_TIMING related code.

        * bindings/js/JSPerformanceEntryCustom.cpp:
        * loader/ResourceTimingInformation.cpp:
        * loader/ResourceTimingInformation.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * page/Performance.cpp:
        (WebCore::Performance::getEntries):
        (WebCore::Performance::getEntriesByType):
        (WebCore::Performance::setResourceTimingBufferSize):
        (WebCore::Performance::isResourceTimingBufferFull):
        * page/Performance.h:
        * page/PerformanceMark.h:
        * page/PerformanceMeasure.h:
        * page/PerformanceNavigation.h:
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::documentLoader):
        (WebCore::PerformanceTiming::documentTiming):
        (WebCore::PerformanceTiming::loadTiming):
        * page/PerformanceTiming.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):

2017-01-23  Alex Christensen  <achristensen@webkit.org>

        URLParser should fail to parse percent-encoded invalid UTF-8 sequences
        https://bugs.webkit.org/show_bug.cgi?id=167330
        <rdar://problem/29319962>

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::containsOnlyASCII):
        (WebCore::URLParser::parseHostAndPort):
        If UTF-8 decoding fails after percent-decoding the host, fail to parse.
        This matches Chrome and Firefox, and it was proposed to the spec in https://github.com/whatwg/url/issues/215

2017-01-23  Alex Christensen  <achristensen@webkit.org>

        Make URLs with non-special schemes and a query or fragment but no slash after the host more compatible
        https://bugs.webkit.org/show_bug.cgi?id=167317
        <rdar://problem/29526875>

        Reviewed by Sam Weinig.

        This is currently being added to the URL spec in https://github.com/whatwg/url/issues/212
        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        Only add a slash if there wasn't one if the URL has a special scheme.
        This new behavior matches the old behavior of URL::parse.

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Convert langAttributeAwareFormControlUIEnabled to a Setting
        https://bugs.webkit.org/show_bug.cgi?id=167279

        Reviewed by Sam Weinig.

        * dom/Document.cpp:
        (WebCore::Document::getCachedLocale):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        Convert to use Settings instead of RuntimeEnabledFeatures.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setLangAttributeAwareFormControlUIEnabled): Deleted.
        * page/Settings.in:
        Move to Settings.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setLangAttributeAwareFormControlUIEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        Remove the manual interface for the RuntimeEnabledFeature.
        An identical interface is generated from Settings.in!

2017-01-20  Anders Carlsson  <andersca@apple.com>

        When Safari reloads pages with Flash objects after Flash is installed, placeholders don't paint (but do work!)
        https://bugs.webkit.org/show_bug.cgi?id=167268
        rdar://problem/29857388

        Reviewed by Sam Weinig.

        * page/Page.cpp:
        (WebCore::Page::refreshPlugins):
        Call PluginInfoProvider::refresh instead.

        (WebCore::Page::clearPluginData):
        Add new setter.

        * page/Page.h:
        Declare new members.

        * plugins/PluginInfoProvider.cpp:
        (WebCore::PluginInfoProvider::refresh):
        Put the logic to clear plug-in data and reload frames here.

        * plugins/PluginInfoProvider.h:
        Add new members.

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

        REGRESSION (r208149): Video details does not apear and missing scrubber in Control Center
        https://bugs.webkit.org/show_bug.cgi?id=167233

        Reviewed by Alex Christensen.

        Test: In TestWebKitAPI, NowPlayingControlsTests.NowPlayingControlsIOS

        In r208149, we introduced a new media type, Video, and renamed the old type to
        VideoAudio (to be able to distinguish between video-with-audio and silent-video).
        But we missed one place where that type needs to be renamed.

        For testing purposes, overload methods from PlatformMediaSessionManager which WebKit2 uses
        to report the current now playing session and it's information.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::nowPlayingEligibleSession):
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):

2017-01-23  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r211033): ASSERTION FAILED: m_ptr in com.apple.WebCore: WTF::RefPtr<WebCore::Element>::operator* const + 70
        https://bugs.webkit.org/show_bug.cgi?id=167308
        <rdar://problem/30144964>

        Unreviewed, do a partial revert of r211033 to fix assertion.

        No new tests, already covered by:
        fullscreen/exit-full-screen-iframe.html

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

2017-01-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] asserting on unknown locale for hyphenation is wrong
        https://bugs.webkit.org/show_bug.cgi?id=167312

        Reviewed by Carlos Garcia Campos.

        The fact that we hit the assert on a test called 'hyphenation-unknown-locale' is already
        a strong indication we should not have it. In addition to that, Carlos Lopez pointed out
        a similar assert was removed from the Mac codepaths when the test was introduced.

        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::lastHyphenLocation): early return when a locale that is not available is provided
        for hyphenation, instead of asserting.

2017-01-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the iOS build after r211033.

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

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Remove allowWindowOpenWithoutUserGesture setting
        https://bugs.webkit.org/show_bug.cgi?id=167301

        Reviewed by Darin Adler.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        * page/Settings.in:

2017-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Database file not removed for origins after deleting all databases
        https://bugs.webkit.org/show_bug.cgi?id=167281

        Reviewed by Darin Adler.

        When DatabaseTracker::deleteDatabasesModifiedSince() is called with a min time, all databases for every origin
        are deleted. For each origin if all databases are removed DatabaseTracker::deleteOrigin() is called to remove
        also the origin database file. However, DatabaseTracker::deleteOrigin() returns early if the origin doesn't have
        databases and in this particular case it never has databases, because we have just removed them.

        This will be covered by GTK+ unit tests.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince): Instead of removing the databases while iterating
        them, add the ones to be removed to a vector. If after the iteration all databases should be removed call
        DatabaseTracker::deleteOrigin() to ensure both the databases and the database file are removed for the origin,
        otherwhise call DatabaseTracker::deleteDatabase() for every database to delete.

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

        [GTK] Update Safari version in user agent
        https://bugs.webkit.org/show_bug.cgi?id=167290

        Reviewed by Carlos Garcia Campos.

        Update Safari version from 10 to 11.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2017-01-20  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from "page" directory of WebCore, also deploy references
        https://bugs.webkit.org/show_bug.cgi?id=167224

        Reviewed by Chris Dumez.

        * Modules/fetch/DOMWindowFetch.cpp:
        (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of
        scriptExecutionContext.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        Pass a reference.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference.

        * dom/Document.cpp:
        (WebCore::Document::childrenChanged): Pass a reference. Also made the
        didReceiveDocType code unconditional instead of iOS-only.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto.
        (WebCore::Document::updateViewportArguments): Ditto.
        (WebCore::Document::setFocusedElement): Ditto.
        (WebCore::Document::createDOMWindow): Ditto.
        (WebCore::Document::takeDOMWindowFrom): Ditto.
        (WebCore::Document::requestFullScreenForElement): Ditto.
        (WebCore::Document::webkitExitFullscreen): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::focus): Ditto.
        (WebCore::Element::blur): Ditto.
        (WebCore::Element::dispatchFocusEvent): Ditto.
        (WebCore::Element::dispatchBlurEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::executePrint): Ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Ditto.
        (WebCore::CachedFrame::CachedFrame): Ditto.
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::handleDOMActivateEvent): Ditto.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference,
        and also rewrote to use && for clarity.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference.
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler): Ditto.
        (WebCore::SpinButtonElement::releaseCapture): Ditto.
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto.
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showContextMenu): Ditto.
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference.
        (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto.
        (WebCore::EmptyChromeClient::createColorChooser): Ditto.
        * loader/EmptyClients.h: Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Pass a reference.
        (WebCore::FrameLoader::commitProvisionalLoad): Ditto.
        (WebCore::FrameLoader::closeAndRemoveChild): Take a reference.
        (WebCore::FrameLoader::detachFromParent): Pass a reference.
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto.
        (WebCore::createWindow): Ditto.
        * loader/FrameLoader.h: Updated for the above.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto.

        * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference.
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        Ditto.
        (WebCore::ApplicationCacheStorage::store): Pass a reference.
        (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin
        now returns areference.
        * loader/appcache/ApplicationCacheStorage.h: Updated for the above.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference.
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isKeyboardFocusable): Ditto.

        * page/Chrome.cpp:
        (WebCore::Chrome::Chrome): Moved initialization of data members to the
        class definition.
        (WebCore::Chrome::contentsSizeChanged): Take a reference.
        (WebCore::Chrome::createWindow): Ditto.
        (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto.
        (WebCore::Chrome::runJavaScriptAlert): Ditto.
        (WebCore::Chrome::runJavaScriptConfirm): Ditto.
        (WebCore::Chrome::runJavaScriptPrompt): Ditto.
        (WebCore::Chrome::setStatusbarText): Ditto.
        (WebCore::Chrome::print): Ditto.
        (WebCore::Chrome::createColorChooser): Ditto.
        (WebCore::Chrome::createPopupMenu): Ditto.
        (WebCore::Chrome::createSearchPopupMenu): Ditto.
        (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but
        empty for non-iOS platforms.
        (WebCore::Chrome::registerPopupOpeningObserver): Take a reference.
        (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto.
        * page/Chrome.h: Updated for the above.

        * page/ChromeClient.h: Take references. Also updated some arguments from
        Node to Element.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference.
        (WebCore::ContextMenuController::showContextMenu): Ditto.
        (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use
        make_unique instead of unique_ptr plus new.
        (WebCore::openNewWindow): Ditto.
        (WebCore::insertUnicodeCharacter): Ditto.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        (WebCore::ContextMenuController::showContextMenuAt): Ditto.
        (WebCore::ContextMenuController::showImageControlsMenu): Ditto.
        * page/ContextMenuController.h: Updated for the above.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired): Pass a reference.

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of
        PassRefPtr.
        (WebCore::DOMWindow::adjustWindowRect): Use a reference.
        (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead
        of successive if statements.
        (WebCore::DOMWindow::canShowModalDialog): Ditto.
        (WebCore::DOMWindow::DOMWindow): Ditto.
        (WebCore::DOMWindow::didSecureTransitionTo): Ditto.
        (WebCore::DOMWindow::registerProperty): Ditto.
        (WebCore::DOMWindow::unregisterProperty): Ditto.
        (WebCore::DOMWindow::postMessageTimerFired): Merge with the function
        immediately followed, called only from here.
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted.
        (WebCore::DOMWindow::print): Pass a reference.
        (WebCore::DOMWindow::alert): Ditto.
        (WebCore::DOMWindow::confirm): Ditto.
        (WebCore::DOMWindow::prompt): Ditto.
        (WebCore::DOMWindow::setStatus): Ditto.
        (WebCore::DOMWindow::setDefaultStatus): Ditto.
        (WebCore::DOMWindow::moveBy): Ditto.
        (WebCore::DOMWindow::moveTo): Ditto.
        (WebCore::DOMWindow::resizeBy): Ditto.
        (WebCore::DOMWindow::resizeTo): Ditto.
        (WebCore::DOMWindow::clearTimeout): Ditto.
        (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto.
        (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto.
        (WebCore::DOMWindow::showModalDialog): Ditto.
        * page/DOMWindow.h: Updated for the above. ALso made functions private
        and final.

        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference.
        (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto.
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto.
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto.

        * page/DebugPageOverlays.cpp:
        (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr.
        (WebCore::RegionOverlay::~RegionOverlay): Pass a reference.
        (WebCore::DebugPageOverlays::showRegionOverlay): Ditto.
        (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto.

        * page/DragController.cpp:
        (WebCore::DragController::dragExited): Pass a reference.
        (WebCore::DragController::performDragOperation): Ditto.
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::DragController::tryDHTMLDrag): Ditto.

        * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>.
        (WebCore::EventHandler::updateCursor): Refactor into two functions so we
        can share more code with selectCursor.
        (WebCore::EventHandler::selectCursor): Updated to use std::optional.
        (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor.
        (WebCore::EventHandler::startPanScrolling): Use a reference.
        (WebCore::EventHandler::updateDragAndDrop): Ditto.
        (WebCore::EventHandler::cancelDragAndDrop): Ditto.
        (WebCore::EventHandler::performDragAndDrop): Ditto.
        (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer
        instead of a PassRefPtr.
        (WebCore::EventHandler::dispatchMouseEvent): Use a reference.
        (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto.
        (WebCore::EventHandler::isKeyboardOptionTab): Ditto.
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto.
        (WebCore::EventHandler::tabsToLinks): Ditto.
        * page/EventHandler.h: Updated for the above.

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame): Take pointer instead
        of PassRefPtr.
        (WebCore::FocusController::setFocusedElement): Take reference instead of
        PassRefPtr.
        * page/FocusController.h: Updated for the above changes.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::transferChild): Deleted. Unused function.
        (WebCore::FrameTree::appendChild): Merged with the following function
        since it's now only used here. Take reference instead of PassRefPtr.
        (WebCore::FrameTree::actuallyAppendChild): Deleted.
        (WebCore::FrameTree::removeChild): Take reference instead of pointer.
        Use move instead of trickier swap.
        * page/FrameTree.h: Updated for the above.

        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize): Use a reference.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::dropChildren): Ditto.
        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator): Ditto.
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::installPageOverlay): Take reference
        instead of PassRefPtr.
        (WebCore::PageOverlayController::uninstallPageOverlay): Take reference
        intead of pointer.
        * page/PageOverlayController.h: Updated for the above.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::PageSerializer): Moved most initialization to the
        class definition.
        (WebCore::PageSerializer::serialize): Use reference.
        (WebCore::PageSerializer::serializeFrame): Use initializer list instead of
        constructor for resource.
        (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto.
        (WebCore::PageSerializer::addImageToResources): Ditto.
        * page/PageSerializer.h: Removed constructors from PageSerializer::Resource
        struct since structures don't really need them. Updated for the above.
        Changed SerializerMarkupAccumulator into a nested class.

        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr&
        instead of PassRefPtr to compare RefPtr in place.

        * page/PerformanceUserTiming.cpp:
        (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr.

        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence.
        (WebCore::ResourceUsageOverlay::initialize): Ditto.

        * page/animation/AnimationBase.h: Removed unneeded include.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear): Use reference.
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto.
        (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the
        append function instead of a hand-written alternative.
        (WebCore::AnimationControllerPrivate::addElementChangeToDispatch):
        Take a reference rather than a Ref&& since no caller is passing ownership.
        * page/animation/AnimationControllerPrivate.h: Updated for the above.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Return RefPtr instead of PassRefPtr.
        (WebCore::blendFilter): Ditto.
        (WebCore::crossfadeBlend): Ditto.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions): Updated to use
        animationForProperty, which returns a raw pointer.
        (WebCore::CompositeAnimation::animationForProperty): Renamed from
        getAnimationForProperty and changed to return raw pointer instead
        of PassRefPtr.
        * page/animation/CompositeAnimation.h: Updated for the above.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty.
        (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference.
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto.

        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::tabsToAllFormControls): Take reference.
        (WebCore::EventHandler::createDraggingDataTransfer): Return Ref.
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::tabsToAllFormControls): Ditto.
        (WebCore::EventHandler::createDraggingDataTransfer): Ditto.
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tabsToAllFormControls): Ditto.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer): Ditto.
        (WebCore::EventHandler::tabsToAllFormControls): Ditto.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto.

        * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead
        of PassRefPtr. Use references.
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto.
        (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto.
        (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto.
        (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto.
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto.
        (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto.
        (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto.
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto.
        (WebCore::ServicesOverlayController::handleClick): Ditto.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        Take a reference instead of PassRefPtr.
        (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above.

        * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead
        of PsasRefPtr.

        * page/scrolling/ScrollLatchingState.cpp:
        (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members
        in class definition.
        (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead
        of PassRefPtr.
        (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw
        pointer instead of RefPtr&&.
        (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead
        of PassRefPtr.
        * page/scrolling/ScrollLatchingState.h: Updated for the above.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr.
        (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr.
        * page/scrolling/ScrollingStateNode.h: Updated for the above.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr.
        (WebCore::ScrollingStateTree::attachNode): Updated for the abve.
        (WebCore::ScrollingStateTree::commit): Ditto.
        * page/scrolling/ScrollingStateTree.h: Ditto.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference.
        * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr.
        (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer.
        * page/scrolling/ScrollingTreeNode.h: Updated for the above.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference
        instead of pointer.
        * page/scrolling/ThreadedScrollingTree.h: Updated for the above.

        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference.

        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::create): Take a reference.
        (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto.
        (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of
        PassRefPtr.
        * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference.

        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::create): Take a reference.
        (ScrollingTreeMac::ScrollingTreeMac): Ditto.
        (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a
        PassRefPtr.
        * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::tabsToAllFormControls): Take reference.
        (WebCore::EventHandler::createDraggingDataTransfer): Return Ref.

        * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit
        copy constructor, assignment operator, and destructor. Using the ones
        that the compiler automatically generates will work for all platforms and
        we then also get move constructor and move assignment operator.

        * platform/efl/CursorEfl.cpp:
        (WebCore::Cursor::Cursor): Deleted.
        (WebCore::Cursor::~Cursor): Deleted.
        (WebCore::Cursor::operator=): Deleted.
        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor): Deleted.
        (WebCore::Cursor::operator=): Deleted.
        (WebCore::Cursor::~Cursor): Deleted.
        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::Cursor): Deleted.
        (WebCore::Cursor::operator=): Deleted.
        (WebCore::Cursor::~Cursor): Deleted.
        * platform/win/CursorWin.cpp:
        (WebCore::SharedCursor::SharedCursor): Moved this here from the header
        since it is only used within this file.
        (WebCore::SharedCursor::create): Ditto.
        (WebCore::Cursor::Cursor): Deleted.
        (WebCore::Cursor::operator=): Deleted.
        (WebCore::Cursor::~Cursor): Deleted.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        Pass reference.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView
        through the render tree itself, rather than through the frame.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference.
        (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto.
        (WebCore::RenderLayerCompositor::attachRootLayer): Ditto.
        (WebCore::RenderLayerCompositor::detachRootLayer): Ditto.
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::showPopup): Ditto.
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::addSearchResult): Ditto.
        (WebCore::RenderSearchField::showPopup): Ditto.
        (WebCore::RenderSearchField::valueChanged): Ditto.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isKeyboardFocusable): Ditto.
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::installOverlay): Ditto.
        (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto.

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

        [Cocoa] Unify FontPlatformData's hashing and equality operators
        https://bugs.webkit.org/show_bug.cgi?id=167061

        Reviewed by Darin Adler.

        On iOS, we were using CFEqual() and CFHash(), while on macOS
        we were using pointer hashing and pointer equality. Instead,
        we should be consistent about these operators.

        Right now, FontPlatformData holds two internal CTFontRefs, and
        switching to these higher-level CFEqual() and CFHash()
        functions is required for eliminating one of these two
        internal font objects.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hash): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::cascadeToLastResortAttributesDictionary):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataDirect2D.cpp:
        (WebCore::FontPlatformData::hash):

2017-01-20  Dean Jackson  <dino@apple.com>

        [WebGL] Do not allow GPU muxing on some old Mac hardware
        https://bugs.webkit.org/show_bug.cgi?id=167259
        <rdar://problem/30060378>

        Reviewed by Simon Fraser and Darin Adler.

        Some old Macbook Pro models should never use the
        integrated GPU for WebGL, because they are unstable
        when swapping between that and the discrete GPU.

        Unfortunately this hardware configuration isn't in our
        testing infrastructure, so it was confirmed manually.
        Meanwhile, our existing tests make sure this patch
        doesn't break anything elsewhere.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::attachToAppleGraphicsControl): Helper function
        to get a mach port that talks to Apple's Graphics Control
        system.
        (WebCore::hasMuxCapability): Decides whether a system
        can do live GPU switching, based on whether or not it
        has a muxable GPU, and if that GPU is not the old hardware
        we know is problematic.
        (WebCore::hasMuxableGPU): Helper to return the static hasMuxCapability value.
        (WebCore::setPixelFormat): Only request the integrated card when the
        GPU is muxable.

2017-01-22  Don Olmstead <don.olmstead@am.sony.com> and Myles C. Maxfield <mmaxfield@apple.com>

        Introducing the Platform Abstraction Layer (PAL)
        https://bugs.webkit.org/show_bug.cgi?id=143358

        Reviewed by Alex Christensen.

        In order to enforce layering and promote testability, WebCore/platform files
        should be compiled in their own project. This new project can enforce layering
        and can be tested with unit tests in addition to layout tests.

        The name of this new project is the Platform Abstraction Layer, or "PAL."
        This comprises of a new directory in WebCore which will be the destination
        for files migrated from WebCore/platform. This new folder, and its associated
        project, will maintain layering invariants. These invariants are enforced at
        build-time by setting the #include path for PAL to not include the rest of
        WebCore (which is the same layering enforcement mechanism for WTF). Files will
        be migrated into this new target/directory piece-by-piece, and the migration
        of a file will be performed as soon as it can be migrated without violating
        layering.

        Within WebCore, files should include PAL files using the convention
        #include <pal/foo.h>. Symbols within PAL are placed within a new top-level
        namespace, "PAL," and therefore when used should be referred to as PAL::Foo.

        The first set of files to move into the new platform is the crypto/ subdirectory
        because it is both simple but also includes platform-dependent files.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig: Add PAL to the include path
        * PAL/Configurations/Base.xcconfig: Added.
        * PAL/Configurations/DebugRelease.xcconfig: Added.
        * PAL/Configurations/PAL.xcconfig: Added. Sets up some PAL-specific
        variables.
        * PAL/Configurations/FeatureDefines.xcconfig: Added.
        * PAL/Configurations/Version.xcconfig: Added.
        * PAL/PAL.xcodeproj/project.pbxproj: Added. New project file.
        * PAL/config.h: Added. Simplified from WebCore/config.h.
        * PAL/pal/CMakeLists.txt: Added.
        * PAL/pal/PlatformEfl.cmake: Added.
        * PAL/pal/PlatformGTK.cmake: Added.
        * PAL/pal/PlatformMac.cmake: Added.
        * PAL/pal/PlatformWin.cmake: Added.
        * PAL/pal/crypto/CryptoDigest.h: Renamed from Source/WebCore/platform/crypto/CryptoDigest.h.
        * PAL/pal/crypto/commoncrypto/CryptoDigestCommonCrypto.cpp: Renamed from Source/WebCore/platform/crypto/commoncrypto/CryptoDigestCommonCrypto.cpp.
        * PAL/pal/crypto/gcrypt/CryptoDigestGCrypt.cpp: Renamed from Source/WebCore/platform/crypto/gcrypt/CryptoDigestGCrypt.cpp.
        * PAL/pal/crypto/gnutls/CryptoDigestGnuTLS.cpp: Renamed from Source/WebCore/platform/crypto/gnutls/CryptoDigestGnuTLS.cpp.
        * PAL/pal/crypto/win/CryptoDigestWin.cpp: Renamed from Source/WebCore/platform/crypto/win/CryptoDigestWin.cpp.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj: Create a project link so WebCore
        knows that it needs to build PAL as a dependency.
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest): Update #include and namespace.
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest): Ditto.
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest): Ditto.
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest): Ditto.
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest): Ditto.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::cryptoDigestAlgorithm): Ditto.
        (WebCore::signRSASSA_PKCS1_v1_5): Ditto.
        (WebCore::verifyRSASSA_PKCS1_v1_5): Ditto.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::computeContentSecurityPolicySHA256Hash): Ditto.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::toCryptoDigestAlgorithm): Ditto.
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies): Ditto.
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash): Ditto.

2017-01-22  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Clear out m_appsinkCaps in AppendPipeline::appsinkCapsChanged() before using outPtr()
        https://bugs.webkit.org/show_bug.cgi?id=167165

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkCapsChanged): Replace the gst_caps_replace() call
        with a simple comparison and, in case the current appsink caps differ from the caps
        on the sink's pad, move the reference to the latter into the m_appsinkCaps member
        variable. This removes the use of GRefPtr<>::outPtr() which asserted in debug
        configurations in the case of m_appsinkCaps not being null.

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

        JavaScript for-of does not work on a lot of collection types (e.g. HTMLCollection)
        https://bugs.webkit.org/show_bug.cgi?id=167091

        Reviewed by Darin Adler.

        As per the Web IDL specification [1], https://heycam.github.io/webidl/#es-iterator
        an interface should get an iterator if it has:
        - an indexed property getter and an integer-typed attribute named "length".

        We now comply with this part of the Web IDL specification. This adds an iterator
        to the following interfaces:
        - AudioTrackList, ClientRectList, CSSRuleList, CSSStyleDeclaration, CSSValueList,
          MimeTypeArray, WebKitNamedFlowCollection, Plugin, PluginArray, DOMStringList,
          FileList, HTMLAllCollection, HTMLCollection, HTMLFormElement, HTMLOptionsCollection,
          HTMLSelectElement, MediaList, NamedNodeMap, SourceBufferList, StyleSheetList,
          TextTrackCueList, TextTrackList, TouchList, VideoTrackList, VTTRegionList.

        As a result, it is now possible to use `for ... of` for those types.

        Tests: fast/dom/FileList-iterator.html
               fast/dom/collection-iterators.html
               fast/dom/document-all-undefined.html
               fast/events/touch/ios/touchlist-iterator.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetAttributeWithName):
        (InterfaceNeedsIterator):
        (GenerateImplementation):
        (addIterableProperties):

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

        innerText should replace existing text node
        https://bugs.webkit.org/show_bug.cgi?id=167116

        Reviewed by Darin Adler.

        Update setInnerText() to use ContainerNode::replaceAllChildren()
        instead of replaceChildrenWithText(). replaceAllChildren() is
        implemented as per specification:
        - https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute
        - https://dom.spec.whatwg.org/#concept-node-replace-all

        As a result, we now correctly remove existing children before
        inserting the new one.

        No new tests, updated existing one.

        * editing/markup.cpp:
        (WebCore::replaceChildrenWithText): Deleted.
        * editing/markup.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):

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

        AccessibilityRenderObject::textChanged() bypasses AXLiveRegionChanged notification coalescing
        https://bugs.webkit.org/show_bug.cgi?id=167286
        <rdar://problem/30133211>

        Reviewed by Ryosuke Niwa.

        AccessibilityRenderObject::textChanged() bypasses AXLiveRegionChanged notification
        coalescing. This patch fixes the issue.

        No new tests, updated existing test.

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

2017-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r211012.

        It caused a lot of crashes in the network process

        Reverted changeset:

        "[SOUP] Custom protocols don't work in private browsing mode"
        https://bugs.webkit.org/show_bug.cgi?id=167236
        http://trac.webkit.org/changeset/211012

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove never changing IndexedDB RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167278

        Reviewed by Darin Adler.

        This RuntimeEnabledFeature flag is always true and there are
        no existing ways to change it. So lets just remove it.

        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIndexedDBEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::indexedDBEnabled): Deleted.

2017-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom protocols don't work in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=167236

        Reviewed by Sergio Villar Senin.

        Add static method to set the global custom protocols request type and setup method to add the feature to the session.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::setCustomProtocolRequestType):
        (WebCore::SoupNetworkSession::setupCustomProtocols):
        * platform/network/soup/SoupNetworkSession.h:

2017-01-20  Matt Rajca  <mrajca@apple.com>

        Record whether a media element was prevented from playing without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=167214

        Reviewed by Eric Carlson.

        This state will be used to notify clients when a user explicitly starts playback
        of a media element that was prevented from autoplaying.

        Tests will be added after a WebKit callback API is added.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/SuccessOr.h: Added.
        (WebCore::SuccessOr::SuccessOr):
        (WebCore::SuccessOr::operator bool):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        * html/MediaElementSession.h:

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

        Require a button press on a gamepad for them to be exposed to the DOM.
        <rdar://problem/28620919> and https://bugs.webkit.org/show_bug.cgi?id=167272

        Reviewed by Alex Christensen.

        Test: gamepad/gamepad-visibility-1.html

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadInputActivity):
        * Modules/gamepad/GamepadManager.h:

        * platform/gamepad/GamepadProvider.cpp:
        (WebCore::GamepadProvider::dispatchPlatformGamepadInputActivity):
        * platform/gamepad/GamepadProvider.h:
        (WebCore::GamepadProvider::~GamepadProvider): Deleted.
        (WebCore::GamepadProvider::isMockGamepadProvider): Deleted.

        * platform/gamepad/GamepadProviderClient.h:

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

        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::gamepadHadInput):
        (WebCore::GameControllerGamepadProvider::inputNotificationTimerFired):

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

        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::valuesChanged):
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired):
        * platform/gamepad/mac/HIDGamepadProvider.h:

        * testing/MockGamepadProvider.cpp:
        (WebCore::MockGamepadProvider::setMockGamepadButtonValue):
        (WebCore::MockGamepadProvider::gamepadInputActivity):
        * testing/MockGamepadProvider.h:

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

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

        Reviewed by Simon Fraser.

        RuntimeEnabledFeatures::reset() is bad for tests. It was getting called
        after the TestRunners had set up all the Settings and RuntimeEnabledFeatures
        they expected, so it was clearing the "consistent state" set by TestRunners.

        Cleanup within RuntimeEnabledFeatures:

          - Initialize all members.
          - Remove unused features.
          - Remove reset() no longer used.
          - Document features that do not change (potentially removable).
          - Document features that are not used but have APIs (use or remove later).
          - Drop webkit prefix for these internal only apis.
          - Move things around a bit to make it more readable.
          - Enable the Fetch API by default (WebKit levels all were enabling it).

        Cleanup within Internals:

          - Move all RuntimeEnabledFeature toggling to InternalSettings
          - Save and restore these RuntimeEnabledFeatures in InternalSettings

        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/NavigatorMediaDevices.idl:
        * Modules/mediastream/NavigatorUserMedia.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCTrackEvent.idl:
        Canonical usage is to start with a capital letter.

        * dom/EventNames.in:
        No port has API/SPI to disable this feature at runtime and the default is
        to have the feature enabled, so this is no different from the runtime flag.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        These features were always enabled and not toggleable. So drop the runtime
        feature check.

        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::experimentalFeaturesEnabled): Deleted.
        Nobody calls this method. Drop it.

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::reset):
        (WebCore::RuntimeEnabledFeatures::javaScriptI18NAPIEnabled): Deleted.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled):
        (WebCore::RuntimeEnabledFeatures::setLangAttributeAwareFormControlUIEnabled):
        (WebCore::RuntimeEnabledFeatures::setLinkPreloadEnabled):
        (WebCore::RuntimeEnabledFeatures::linkPreloadEnabled):
        (WebCore::RuntimeEnabledFeatures::setResourceTimingEnabled):
        (WebCore::RuntimeEnabledFeatures::resourceTimingEnabled):
        (WebCore::RuntimeEnabledFeatures::setShadowDOMEnabled):
        (WebCore::RuntimeEnabledFeatures::shadowDOMEnabled):
        (WebCore::RuntimeEnabledFeatures::setInputEventsEnabled):
        (WebCore::RuntimeEnabledFeatures::inputEventsEnabled):
        (WebCore::RuntimeEnabledFeatures::setInteractiveFormValidationEnabled):
        (WebCore::RuntimeEnabledFeatures::interactiveFormValidationEnabled):
        (WebCore::RuntimeEnabledFeatures::setCustomElementsEnabled):
        (WebCore::RuntimeEnabledFeatures::customElementsEnabled):
        (WebCore::RuntimeEnabledFeatures::setModernMediaControlsEnabled):
        (WebCore::RuntimeEnabledFeatures::modernMediaControlsEnabled):
        (WebCore::RuntimeEnabledFeatures::setIndexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::fontLoadEventsEnabled):
        (WebCore::RuntimeEnabledFeatures::setMediaStreamEnabled):
        (WebCore::RuntimeEnabledFeatures::setPeerConnectionEnabled):
        (WebCore::RuntimeEnabledFeatures::setLocalStorageEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::localStorageEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setSessionStorageEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::sessionStorageEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebkitNotificationsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitNotificationsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setApplicationCacheEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::applicationCacheEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setDataTransferItemsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::dataTransferItemsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebkitIndexedDBEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitIndexedDBEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::touchEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setTouchEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setDeviceMotionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::deviceMotionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::deviceMotionEventEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::ondevicemotionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setDeviceOrientationEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEventEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::ondeviceorientationEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setJavaScriptI18NAPIEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitGetUserMediaEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitMediaStreamEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::webkitRTCPeerConnectionEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::experimentalContentSecurityPolicyFeaturesEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setExperimentalContentSecurityPolicyFeaturesEnabled): Deleted.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setLangAttributeAwareFormControlUIEnabled):
        (WebCore::InternalSettings::setResourceTimingEnabled):
        (WebCore::InternalSettings::setLinkPreloadEnabled):
        (WebCore::InternalSettings::setCSSGridLayoutEnabled):
        (WebCore::InternalSettings::setWebGL2Enabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setLinkPreloadSupport): Deleted.
        (WebCore::Internals::setCSSGridLayoutEnabled): Deleted.
        (WebCore::Internals::webGL2Enabled): Deleted.
        (WebCore::Internals::setWebGL2Enabled): Deleted.
        (WebCore::Internals::setResourceTimingSupport): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        Move toggling of RuntimeEnabledFeatures to InternalSettings and
        properly remember to save and restore them in Internals.

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

        Add debugging code to compare URLParser with URL::parse
        https://bugs.webkit.org/show_bug.cgi?id=167267

        Reviewed by Brady Eidson.

        * platform/URLParser.cpp:
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parse):

2017-01-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210778.

        This change caused multiple LayoutTests to crash.

        Reverted changeset:

        "[Cocoa] Unify FontPlatformData's hashing and equality
        operators"
        https://bugs.webkit.org/show_bug.cgi?id=167061
        http://trac.webkit.org/changeset/210778

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove outdated ENABLE(CSP_NEXT) build flag
        https://bugs.webkit.org/show_bug.cgi?id=167252

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::reset):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::experimentalContentSecurityPolicyFeaturesEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setExperimentalContentSecurityPolicyFeaturesEnabled): Deleted.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::experimentalFeaturesEnabled): Deleted.
        * page/csp/ContentSecurityPolicy.h:

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

        Simple line layout: Add support for non-breaking space character.
        https://bugs.webkit.org/show_bug.cgi?id=167250
        <rdar://problem/30119638>

        Reviewed by Antti Koivisto.

        Do not bail out on noBreakSpace character.
        The line breaking logic already takes noBreakSpace characters into account.
        (except the peculiar "-webkit-nbsp-mode: space" mode)

        Covered by existing test cases.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::printReason):

2017-01-20  Antoine Quint  <graouts@apple.com>

        Web Animations should be off by default and enabled as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=167115
        <rdar://problem/30048963>

        Reviewed by Joseph Pecoraro.

        Conditionalize the existing parts of the Web Animations API so that they may be
        toggled at runtime.

        * animation/Animatable.idl:
        * animation/AnimationEffect.idl:
        * animation/AnimationTimeline.idl:
        * animation/DocumentAnimation.idl:
        * animation/DocumentTimeline.idl:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::reset):
        * page/RuntimeEnabledFeatures.h:

2017-01-20  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Tests: media/modern-media-controls/fullscreen-support/ipad/fullscreen-support-tap.html
               media/modern-media-controls/pip-support/ipad/pip-support-enabled.html
               media/modern-media-controls/pip-support/ipad/pip-support-tap.html
               media/modern-media-controls/placard-support/ipad/placard-support-pip.html
               media/modern-media-controls/scrubber-support/ipad/scrubber-support-drag.html

        Fix an error which may be triggered prior to Sierra where we would assume the presentation
        mode API was avaiable when it might not be, which caused a few tests to fail.

        We also ensure that we always inject the UA styles for legacy media controls as otherwise
        toggling from modern media controls to legacy media controls would not inject those styles.
        To facilitate this we add a dedicated method for modern media controls styles in RenderTheme
        that is only used in the case of modern media controls when the shadow root asks for the styles
        to inject in the shadow root.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::shadowRootCSSText):
        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.syncControl):
        (PiPSupport):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::modernMediaControlsStyleSheet):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet):
        (WebCore::RenderThemeIOS::modernMediaControlsStyleSheet):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::modernMediaControlsStyleSheet):

2017-01-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r206156): Animated images are repeated one extra iteration than the value which is saved in the image file
        https://bugs.webkit.org/show_bug.cgi?id=167174

        Reviewed by Simon Fraser.

        Before r206156, BitmapImage::repetitionCount() used to return zero for
        the case loopCount = 1, -1 for loopCount = Infinity and loopCount for
        all other cases. Having repetitionCount() return zero for loopCount = 1
        makes the condition if (++m_repetitionsComplete > repetitionCount())
        break the animation loop after one iteration. But it was wrong for all
        loopCount > 1. It was causing an extra iteration to be played for the
        animated image. After r206156, BitmapImage::repetitionCount() returns
        loopCount for all cases loopCount != Infinity. Keeping the same condition
        causes the extra iteration to be played even for loopCount = 1.

        Test: fast/images/animated-image-loop-count.html

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

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

        iterable<> should be enabled on WK1
        https://bugs.webkit.org/show_bug.cgi?id=167221
        <rdar://problem/30108531>

        Reviewed by Youenn Fablet.

        * Modules/fetch/FetchHeaders.idl:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * css/FontFaceSet.idl:
        * dom/NodeList.idl:

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

        Simple line layout: Extend coverage for justified content.
        https://bugs.webkit.org/show_bug.cgi?id=167219
        <rdar://problem/30108391>

        Reviewed by Antti Koivisto.

        Add support for general punctuation characters (0x2010, 0x2027) and latin characters including Extended-B.

        Test: fast/text/simple-line-layout-with-justified-punctuation.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseForFontAndText):

2017-01-19  Alex Christensen  <achristensen@webkit.org>

        Construct URLSearchParams from array or object
        https://bugs.webkit.org/show_bug.cgi?id=166973

        Reviewed by Sam Weinig.

        Covered by newly passing web platform tests.

        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::URLSearchParams):
        (WebCore::URLSearchParams::create):
        (WebCore::URLSearchParams::get):
        (WebCore::URLSearchParams::has):
        (WebCore::URLSearchParams::sort):
        (WebCore::URLSearchParams::set):
        (WebCore::URLSearchParams::getAll):
        (WebCore::URLSearchParams::remove):
        (WebCore::URLSearchParams::Iterator::next):
        * html/URLSearchParams.h:
        (WebCore::URLSearchParams::create):
        (WebCore::URLSearchParams::pairs):
        (WebCore::URLSearchParams::operator const Vector<std::pair<String, String>>&): Deleted.
        * html/URLSearchParams.idl:
        * platform/URLParser.cpp:
        (WebCore::URLParser::serialize):
        * platform/URLParser.h:

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

        CRASH at WebCore::TrackListBase::remove
        https://bugs.webkit.org/show_bug.cgi?id=167217

        Reviewed by Brent Fulgham.

        Test: media/media-source/media-source-error-crash.html

        In very specific conditions, a HTMLMediaElement backed by a MediaSource can try to remove
        the same track from its track list twice. If there are two SourceBuffers attached to a
        HTMLMediaElement, and one has not yet been initialized, when the second fails to parse an
        appended buffer after receiving an initialization segment, the HTMLMediaElement will remove
        all its tracks in mediaLoadingFailed(), then MediaSource object itself will attempt remove
        the same track in removeSourceBuffer().

        Solving this the safest way possible: bail early from TrackListBase if asked to remove a
        track which the list does not contain.

        * html/track/TrackListBase.cpp:
        (TrackListBase::remove):

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

        [iOS] Move the PDF password view into its own class for reuse
        https://bugs.webkit.org/show_bug.cgi?id=167192

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Updated the failure alert strings to not be specific to PDFs.

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

        Make sure HTML validation bubble gets dismissed when its associated element's frame gets detached
        https://bugs.webkit.org/show_bug.cgi?id=167215
        <rdar://problem/29885052>

        Reviewed by Andreas Kling.

        Make sure HTML validation bubble gets dismissed when its associated
        element's frame gets detached and that we do not crash.

        Tests: fast/forms/validation-message-detached-iframe.html
               fast/forms/validation-message-detached-iframe2.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * page/ValidationMessageClient.h:

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

        Implement per activity state CPU usage reporting using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167163
        <rdar://problem/30058349>

        Reviewed by Andreas Kling.

        Implement per activity state CPU usage reporting using diagnostic logging.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ActivityState.h:
        * page/ChromeClient.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::nonVisibleStateKey):
        (WebCore::DiagnosticLoggingKeys::visibleNonActiveStateKey):
        (WebCore::DiagnosticLoggingKeys::visibleAndActiveStateKey):
        (WebCore::DiagnosticLoggingKeys::foregroundCPUUsageToDiagnosticLogginKey):
        (WebCore::DiagnosticLoggingKeys::backgroundCPUUsageToDiagnosticLogginKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::isUtilityPageChromeClient):
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::didStartProvisionalLoad):
        (WebCore::Page::didFinishLoad):
        (WebCore::Page::isUtilityPage):
        (WebCore::Page::setActivityState):
        (WebCore::Page::setIsVisibleInternal):
        * page/Page.h:
        (WebCore::Page::activityState):
        (WebCore::Page::isUtilityPage):
        * page/PerformanceMonitor.cpp: Added.
        (WebCore::activityStateForCPUSampling):
        (WebCore::PerformanceMonitor::PerformanceMonitor):
        (WebCore::PerformanceMonitor::didStartProvisionalLoad):
        (WebCore::PerformanceMonitor::didFinishLoad):
        (WebCore::PerformanceMonitor::activityStateChanged):
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingCPUUsage):
        (WebCore::PerformanceMonitor::measurePerActivityStateCPUUsage):
        (WebCore::stringForCPUSamplingActivityState):
        (WebCore::PerformanceMonitor::measureCPUUsageInActivityState):
        * page/PerformanceMonitor.h: Copied from Source/WebCore/page/ActivityState.h.
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::isPostLoadCPUUsageMeasurementEnabled):
        (WebCore::Settings::isPostBackgroundingCPUUsageMeasurementEnabled):
        (WebCore::Settings::isPerActivityStateCPUUsageMeasurementEnabled):

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

        [Cocoa] Variation fonts are erroneously disabled on iOS
        https://bugs.webkit.org/show_bug.cgi?id=167172

        Reviewed by Simon Fraser.

        OpenSource builders don't seem to understand sdk=embedded*.

        * Configurations/FeatureDefines.xcconfig:

2017-01-19  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r210918.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestObj.cpp:

2017-01-19  Andreas Kling  <akling@apple.com>

        ScriptExecutionContext::topOrigin() should return a reference.
        <https://webkit.org/b/167190>

        Reviewed by Sam Weinig.

        There is always a topOrigin() SecurityOrigin, so make it return a reference
        and remove some unnecessary null-checks exposed by this change.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::canCallApplePaySessionAPIs):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedConfiguration):
        (WebCore::CDM::getConsentStatus):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::topLevelDocumentOrigin):
        (WebCore::canCallGetUserMedia):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::update):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setDomainForCachePartition):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessDatabase):
        (WebCore::SecurityOrigin::canAccessSessionStorage):
        (WebCore::SecurityOrigin::canAccessPluginStorage):
        (WebCore::SecurityOrigin::canAccessApplicationCache):
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):
        * 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/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:

2017-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Provide API to set proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=128674

        Reviewed by Michael Catanzaro.

        Add SoupNetworkProxySettings struct to store proxy settings.

        * platform/network/soup/SoupNetworkProxySettings.h: Added.
        (WebCore::SoupNetworkProxySettings::SoupNetworkProxySettings):
        (WebCore::SoupNetworkProxySettings::operator=):
        (WebCore::SoupNetworkProxySettings::isEmpty):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): Setup the proxy if user provided proxy settings.
        (WebCore::SoupNetworkSession::setupProxy): Set the proxy-resolver property of the SoupSession according to the
        global SoupNetworkProxySettings.
        (WebCore::SoupNetworkSession::setProxySettingsFromEnvironment): Update the global SoupNetworkProxySettings with
        values from environment.
        (WebCore::SoupNetworkSession::setProxySettings): Set the global SoupNetworkProxySettings.
        * platform/network/soup/SoupNetworkSession.h:

2017-01-18  Sam Weinig  <sam@webkit.org>

        [WebIDL] Records should preserve javascript object order
        https://bugs.webkit.org/show_bug.cgi?id=167189

        Reviewed by Alex Christensen.

        Instead of modeling IDL records as HashMaps, use a Vector
        of KeyValuePairs, to all preserving the iteration order.

        * Modules/webdatabase/SQLResultSetRowList.cpp:
        (WebCore::SQLResultSetRowList::item):
        * Modules/webdatabase/SQLResultSetRowList.h:
        Return a Vector rather than a HashMap.

        * bindings/IDLTypes.h:
        Change underlying type to be a Vector<KeyValuePair<K, V>>.

        * bindings/js/JSDOMConvert.h:
        Update conversion for new implementation type. For conversion
        to JSValue, allow any type that can has an iterator of keyValuePairs.
 
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testLongRecord):
        (WebCore::TypeConversions::setTestLongRecord):
        (WebCore::TypeConversions::testNodeRecord):
        (WebCore::TypeConversions::setTestNodeRecord):
        (WebCore::TypeConversions::testSequenceRecord):
        (WebCore::TypeConversions::setTestSequenceRecord):
        * testing/TypeConversions.idl:
        Update test IDL to use functions, since the spec mandates that
        records can't be used with attributes.

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Implement URLSearchParams's sort()
        https://bugs.webkit.org/show_bug.cgi?id=167154

        Reviewed by Sam Weinig.

        Test: imported/w3c/web-platform-tests/url/urlsearchparams-sort.html

        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::sort):
        * html/URLSearchParams.h:
        * html/URLSearchParams.idl:

2017-01-18  Yoav Weiss  <yoav@yoav.ws>

        Add Link header support for preload.
        https://bugs.webkit.org/show_bug.cgi?id=165521

        Reviewed by Alex Christensen.

        This patch adds Link header support for preload, by adding a Link
        header parser, and calling it from FrameLoader::receivedFirstData.

        Test: http/tests/preload/download_resources_from_header.php

        * CMakeLists.txt: Add LinkHeader files.
        * WebCore.xcodeproj/project.pbxproj: Add LinkHeader files.
        * loader/FrameLoader.cpp:
        (WebCore::receivedFirstData): Trigger Link based preloading by calling loadLinksFromHeader.
        * loader/LinkHeader.cpp: Added.
        (WebCore::isWhitespace):
        (WebCore::isValidURLChar):
        (WebCore::isValidParameterNameChar):
        (WebCore::isValidParameterValueEnd):
        (WebCore::isValidParameterValueChar):
        (WebCore::isExtensionParameter):
        (WebCore::parseURL):
        (WebCore::invalidParameterDelimiter):
        (WebCore::validFieldEnd):
        (WebCore::parseParameterDelimiter):
        (WebCore::paramterNameFromString):
        (WebCore::parseParameterName):
        (WebCore::skipQuotesIfNeeded):
        (WebCore::parseParameterValue):
        (WebCore::LinkHeader::setValue):
        (WebCore::findNextHeader):
        (WebCore::LinkHeader::LinkHeader):
        (WebCore::LinkHeaderSet::LinkHeaderSet):
        (WebCore::LinkHeaderSet::init):
        * loader/LinkHeader.h: Added.
        (WebCore::LinkHeader::url):
        (WebCore::LinkHeader::rel):
        (WebCore::LinkHeader::as):
        (WebCore::LinkHeader::mimeType):
        (WebCore::LinkHeader::media):
        (WebCore::LinkHeader::crossOrigin):
        (WebCore::LinkHeader::valid):
        (WebCore::LinkHeaderSet::begin):
        (WebCore::LinkHeaderSet::end):
        (WebCore::LinkHeaderSet::operator[]):
        (WebCore::LinkHeaderSet::size):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Loads link preload directives that arrive from Link headers.
        (WebCore::LinkLoader::preloadIfNeeded): Add return value.
        * loader/LinkLoader.h:
        * platform/network/HTTPHeaderNames.in: Add "Link" as a header name.

2017-01-18  Filip Pizlo  <fpizlo@apple.com>

        JSSegmentedVariableObject and its subclasses should have a sane destruction story
        https://bugs.webkit.org/show_bug.cgi?id=167193

        Reviewed by Saam Barati.

        No new tests because no new behavior.
        
        JSSegmentedVariableObjects now get to have a sane destruction story. This means switching
        subspace types for the DOM's global object subspace.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2017-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210848.

        This change introduced media-related LayoutTest failures and
        crashes on macOS.

        Reverted changeset:

        "[Modern Media Controls] Turn modern media controls on by
        default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210848

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Fix CFURLConnection build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=167168

        Reviewed by Andy Estes.

        This is old code, and it hurts to do this, but I need this working to compare with Windows
        to get the ResourceHandleCFURLConnectionDelegateWithOperationQueue working so we can make
        loading asynchronous in WebCore.

        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::clearOrUpdateNSURLRequest):
        Moved from iOS-specific file.  It's needed on Mac using CFURLConnection, too.
        * platform/network/ios/ResourceRequestIOS.mm:
        (WebCore::ResourceRequest::clearOrUpdateNSURLRequest): Deleted.

2017-01-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r210531): Broke local resource loads from custom local protocols
        https://bugs.webkit.org/show_bug.cgi?id=167058

        Reviewed by Brent Fulgham.

        Allow local protocols to access resources on different volumes unless the protocol is
        "file".

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):

2017-01-18  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:
        * platform/spi/cocoa/IOSurfaceSPI.h:

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

        [Cocoa] Variation fonts without variations specified are not rendered as if the default variations were specified
        https://bugs.webkit.org/show_bug.cgi?id=166672
        <rdar://problem/29779119>
        <rdar://problem/29848883>

        Reviewed by Simon Fraser.

        CoreText has a bug (<rdar://problem/29859207>) where variation fonts without
        a specified variation value are rendered as if the minimum value is specified,
        rather than the default value. The solution is to apply default values where
        they are omitted.

        Test: fast/text/variations/advances.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::defaultVariationValues):
        (WebCore::fontIsSystemFont):
        (WebCore::preparePlatformFont):

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

        background-repeat-x doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=166997

        Reviewed by Simon Fraser.

        During the creation of the new CSS parser, we accidentally forgot
        to hook up background-repeat-x and background-repeat-y.

        Tests: fast/backgrounds/background-repeat-x-y-parse.html
               fast/backgrounds/background-repeat-x-y.html

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

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

        [QuickLook] Support password-protected documents
        https://bugs.webkit.org/show_bug.cgi?id=167153
        <rdar://problem/28544527>

        Reviewed by Alex Christensen.

        Added support for previewing password-protected documents. If a document is
        password-protected, QLPreviewConverter will call -connection:didFailWithError: with an error
        code of kQLReturnPasswordProtected. When this happens, QuickLookHandle will ask the client
        for a password, create a new QLPreviewConverter with the password specified in an options
        dictionary, and replay the buffered input data into the converter. QLPreviewConverter will
        then send the converted document data to its delegate as usual.
        
        Password entry UI will be added later; this patch implements the necessary QuickLookHandle
        logic and adds support for testing.

        Test: quicklook/password-protected.html

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ios/QuickLook.h: Declared setClientForTesting().
        * loader/ios/QuickLook.mm: 
        (testingClient): Created a static RefPtr to hold the testing client.
        (testingOrEmptyClient): Returns the testing client if it's set, otherwise returns the empty client.
        (-[WebPreviewConverter initWithResourceLoader:resourceResponse:quickLookHandle:]):
        Initialized _client to testingOrEmptyClient(), stored the ResourceResponse's nsURLResponse()
        in _originalResponse, and initialized _bufferedDataArray.
        (-[WebPreviewConverter setClient:]): Ignore the new client if there is already a testing client.
        (-[WebPreviewConverter appendDataArray:]): Stored the data array in _bufferedDataArray.
        (-[WebPreviewConverter _sendDidReceiveResponseIfNecessary]): Cleared _bufferedDataArray.
        (-[WebPreviewConverter connection:didReceiveData:lengthReceived:]): Changed the
        UNUSED_PARAM() to an ASSERT_UNUSED().
        (-[WebPreviewConverter connectionDidFinishLoading:]): Ditto.
        (-[WebPreviewConverter connection:didFailWithError:]): If the error code is
        kQLReturnPasswordProtected and the domain is QuickLookErrorDomain, request a password from
        the client then create a new QLPreviewConverter with the password specified in the options dictionary.
        (WebCore::QuickLookHandle::setClientForTesting): Set testingClient() to the specified client.
        * platform/ios/QuickLookSoftLink.h: Soft-linked kQLPreviewOptionPasswordKey.
        * platform/ios/QuickLookSoftLink.mm: Ditto.
        * platform/network/ios/QuickLookHandleClient.h:
        (WebCore::QuickLookHandleClient::supportsPasswordEntry): Added. Tells QuickLookHandle
        whether the client supports password entry.
        (WebCore::QuickLookHandleClient::didRequestPassword): Added. Asks the client to specify a
        password in the completionHandler lambda.
        * platform/spi/ios/QuickLookSPI.h: Declared kQLReturnPasswordProtected for the public SDK
        and asserted that its value is 4.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset the MockQuickLookHandleClient password
        to the empty string and uninstalled the testing client.
        (WebCore::Internals::setQuickLookPassword): Installed the testing client and set a password
        on the MockQuickLookHandleClient.
        * testing/Internals.h: 
        * testing/Internals.idl: Defined Internals.setQuickLookPassword().
        * testing/MockQuickLookHandleClient.cpp: Added.
        (WebCore::MockQuickLookHandleClient::singleton): Returned a shared MockQuickLookHandleClient.
        (WebCore::MockQuickLookHandleClient::didRequestPassword): Dispatched a lambda on the
        main-or-Web-thread run loop to call the completionHandler with the specified password.
        This simulates the delay that would happen when prompting the user for a password.
        * testing/MockQuickLookHandleClient.h: Added.

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

        [Streams API] ReadableStream generic reader constructor does not need to call ReadableStream getReader
        https://bugs.webkit.org/show_bug.cgi?id=167137

        Reviewed by Xabier Rodriguez-Calvar.

        Test: streams/shadowing-getReader.html

        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableStreamDefaultReader): Using private constructor instead of getReader.

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

        Reject fetch promise in case of ReadableStream upload
        https://bugs.webkit.org/show_bug.cgi?id=167145

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract): Storing the fact that body data is represented as a ReadableStream.
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::isReadableStream):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch): Rejecting if request body data is a ReadableStream.

2017-01-18  Andreas Kling  <akling@apple.com>

        Document::securityOrigin() should return a reference.
        <https://webkit.org/b/167124>

        Reviewed by Sam Weinig.

        The security origin is always initialized by the Document constructor
        through Document::initSecurityContext(), so it's effectively always present.
        Make it return a reference and remove unnecessary null checks exposed by this.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::canCallApplePaySessionAPIs):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedConfiguration):
        (WebCore::CDM::getConsentStatus):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::canCallGetUserMedia):
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::allowDatabaseAccess):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientOrigin):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::canAccessDocument):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::collectIsolatedContexts):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::canAccessRules):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRulesFromSheet):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * dom/Document.cpp:
        (WebCore::canAccessAncestor):
        (WebCore::Document::findUnsafeParentScrollPropagationBoundary):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        (WebCore::Document::origin):
        (WebCore::Document::domain):
        (WebCore::Document::setDomain):
        (WebCore::Document::storageBlockingStateDidChange):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::initDNSPrefetch):
        (WebCore::Document::topOrigin):
        * dom/Document.h:
        (WebCore::Document::securityOrigin):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSecureTransitionTo):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::canEmbedJava):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::securityOrigin):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::DocumentThreadableLoader::securityOrigin):
        * loader/DocumentWriter.cpp:
        (WebCore::canReferToParentFrameEncoding):
        * loader/EmptyClients.cpp:
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::shouldClearWindowName):
        (WebCore::FrameLoader::outgoingOrigin):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):
        * loader/FrameLoaderClient.h:
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::isMixedContent):
        (WebCore::MixedContentChecker::canDisplayInsecureContent):
        (WebCore::MixedContentChecker::canRunInsecureContent):
        (WebCore::MixedContentChecker::checkFormForMixedContent):
        * loader/MixedContentChecker.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleRefresh):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::ResourceLoadInfo::isThirdParty):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::pluginIsLoadable):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::update):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::canRequestAfterRedirection):
        (WebCore::CachedResourceLoader::canRequestInContentDispositionAttachmentSandbox):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
        (WebCore::CachedResourceRequest::updateForAccessControl):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::setOrigin):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::isSameSecurityOriginAsMainFrame):
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
        (WebCore::DOMWindow::isInsecureScriptAccess):
        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::startDrag):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/Location.cpp:
        (WebCore::Location::ancestorOrigins):
        (WebCore::Location::reload):
        * page/Navigator.cpp:
        (WebCore::Navigator::javaEnabled):
        * page/Page.cpp:
        (WebCore::Page::showAllPlugins):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::canReceiveDragData):
        (WebCore::SecurityOrigin::canAccessStorage):
        (WebCore::SecurityOrigin::isSameOriginAs):
        (WebCore::SecurityOrigin::equal):
        (WebCore::SecurityOrigin::isSameSchemeHostPort):
        * page/SecurityOrigin.h:
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::fromFrame):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::equal):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::stripURLForUseInReport):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::hasSingleSecurityOrigin):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::checkShapeImageOrigin):
        * replay/ReplayInputCreationMethods.cpp:
        (WebCore::InitialNavigation::createFromPage):
        * replay/ReplayInputDispatchMethods.cpp:
        (WebCore::InitialNavigation::dispatch):
        * storage/Storage.cpp:
        (WebCore::Storage::isDisabledByPrivateBrowsing):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * testing/Internals.cpp:
        (WebCore::Internals::setApplicationCacheOriginQuota):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::shouldAllowExternalLoad):

2017-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Remove WEBCORE_EXPORT from newly inlined functions after r210845.

        Unreviewed build fix.

        * loader/DocumentLoader.h:

2017-01-18  Per Arne Vollan  <pvollan@apple.com>

        Crash when changing video subtitles.
        https://bugs.webkit.org/show_bug.cgi?id=167159

        Reviewed by Xabier Rodriguez-Calvar.

        Add null pointer check.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::removeDisplayTree):

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

        [Fetch API] Update content-type in case of form data
        https://bugs.webkit.org/show_bug.cgi?id=167143

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract): Adding a space to the content-type in case of form data.

2017-01-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GStreamer] media source tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=167158

        Reviewed by Carlos Garcia Campos.

        This fixes several media source tests which are asserting on debug builds,
        such as:

        - fast/history/page-cache-removed-source-buffer.html
        - imported/w3c/web-platform-tests/media-source/

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline): do not adopt the GStPipeline
        upon creation. A regular assignment will do the right thing, sinking the
        floating ref.

2017-01-18  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Tests: media/modern-media-controls/fullscreen-support/ipad/fullscreen-support-tap.html
               media/modern-media-controls/pip-support/ipad/pip-support-enabled.html
               media/modern-media-controls/pip-support/ipad/pip-support-tap.html
               media/modern-media-controls/placard-support/ipad/placard-support-pip.html
               media/modern-media-controls/scrubber-support/ipad/scrubber-support-drag.html

        Fix an error which may be triggered prior to Sierra where we would assume the presentation
        mode API was avaiable when it might not be, which caused a few tests to fail.

        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.syncControl):
        (PiPSupport):

2017-01-18  Miguel Gomez  <magomez@igalia.com>

        [GTK] [TextureMapper] [GLES2] Draw repeated patterns for NPOT textures manually
        https://bugs.webkit.org/show_bug.cgi?id=167118

        Reviewed by Žan Doberšek.

        When using GLES2 without the GL_OES_texture_npot extension, some implementations fail to properly
        draw repeated patters from a texture (using GL_REPEAT). For those cases, perform the repetition
        manually using the shader.

        Covered by existent tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::driverSupportsNPOTTextures):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2017-01-15  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from "loader" directory of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=167055

        Reviewed by Alex Christensen.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass a reference.
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply): Ditto.
        (WebCore::EditCommandComposition::reapply): Ditto.
        (WebCore::CompositeEditCommand::ensureComposition): Return a reference.
        (WebCore::CompositeEditCommand::applyCommandToComposite): Use a reference.
        * editing/CompositeEditCommand.h: Updated for above changes.

        * editing/Editor.cpp:
        (WebCore::Editor::unappliedEditing): Take a reference instead of a PassRefPtr.
        (WebCore::Editor::reappliedEditing): Ditto.
        * editing/Editor.h: Updated for above changes. Also changed the
        FragmentAndResources resources vector to hold Ref instead of RefPtr.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::createFragmentAndAddResources): Updated for change to
        FragmentAndResources.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readWebArchive): Pass a reference.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readWebArchive): Pass a reference.

        * history/PageCache.cpp:
        (WebCore::canCacheFrame): Use a reference.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent): Pass references.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formMethod): Use auto.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission): Updated to use a return
        values for textFieldValues intsead of an out argument with getTextFieldValues.
        (WebCore::HTMLFormElement::textFieldValues): Renamed from getTextFieldValues
        and changed to use a return value instead of an out argument.
        (WebCore::HTMLFormElement::submit): Pass a reference.
        (WebCore::HTMLFormElement::requestAutocomplete): Pass a Ref&&.
        * html/HTMLFormElement.h: Updated for above changes.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser): Use a reference.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Pass a reference.
        (WebCore::HTMLLinkElement::setCSSStyleSheet): Use auto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Use a reference.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus): Use a reference,
        also update for struct-style member names withou m_ prefix.
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests): Ditto.
        (WebCore::InspectorApplicationCacheAgent::getManifestForFrame): Ditto.
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame): Ditto.
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache): Ditto.
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources): Ditto.
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource): Ditto.
        * inspector/InspectorApplicationCacheAgent.h: Updated for above changes.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl): Take a reference.
        * inspector/InspectorInstrumentation.h: Updated for the above.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader): Move much initialization to class definition.
        (WebCore::DocumentLoader::originalRequest): Moved to header to make it inline.
        (WebCore::DocumentLoader::originalRequestCopy): Ditto.
        (WebCore::DocumentLoader::request): Ditto.
        (WebCore::DocumentLoader::url): Ditto.
        (WebCore::DocumentLoader::stopLoading): Pass a reference.
        (WebCore::DocumentLoader::willSendRequest): Updated to take a raw pointer instead of a
        PassRefPtr.
        (WebCore::DocumentLoader::commitData): Call shouldUseMainResourceEncoding instead of
        special casing WebArchive.
        (WebCore::DocumentLoader::maybeCreateArchive): Pass references.
        (WebCore::DocumentLoader::setArchive): Take Ref&& instead of PassRefPtr.
        (WebCore::DocumentLoader::addAllArchiveResources): Take a reference instead
        of a pointer.
        (WebCore::DocumentLoader::popArchiveForSubframe): Return RefPtr instead of
        PassRefPtr.
        (WebCore::DocumentLoader::subresource): Ditto.
        (WebCore::DocumentLoader::subresources): Return a Vector<Ref> instead of a
        Vector<RefPtr>.
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired): Use move
        instead of swap.
        (WebCore::DocumentLoader::scheduleArchiveLoad): Use shouldLoadFromArchiveOnly
        instead of a special case for each type of archive.
        (WebCore::DocumentLoader::originalURL): Moved to header to make it inline.
        (WebCore::DocumentLoader::responseURL): Ditto.
        (WebCore::DocumentLoader::documentURL): Call shouldUseMainResourceURL instead of
        special casing WebArchive.
        (WebCore::DocumentLoader::responseMIMEType): Moved to header to make it inline.
        (WebCore::DocumentLoader::currentContentType): Ditto.
        (WebCore::DocumentLoader::contentFilter): Ditto.
        (WebCore::DocumentLoader::getIconLoadDecisionForIconURL): Pass a reference.
        (WebCore::DocumentLoader::getIconDataForIconURL): Ditto.
        (WebCore::DocumentLoader::dispatchOnloadEvents): Use a reference.
        (WebCore::DocumentLoader::unreachableURL): Moved to header to make it inline.
        * loader/DocumentLoader.h: Updated for the above.

        * loader/EmptyClients.cpp: Updated for changes to client interfaces.
        * loader/EmptyClients.h: Ditto.

        * loader/FormState.cpp:
        (WebCore::FormState::FormState): Take references instead of PassRefPtr, also
        take Vector&& instead of Vector& when we want to take ownership and use move
        instead of swap to do that.
        (WebCore::FormState::create): Ditto.
        * loader/FormState.h: Updated for the above. Also changed return values to be
        references instead of pointers and members to be Ref instead of RefPtr.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::parseMethodType): Updated for change
        to the Method enumeration.
        (WebCore::FormSubmission::Attributes::copyFrom): Deleted.
        (WebCore::FormSubmission::FormSubmission): Use Ref&& instead of PassRefPtr.
        (WebCore::FormSubmission::create): Use reference instead of pointer and
        raw pointer instead of PassRefPtr. Also copy attributes using copy constructor
        instead of an explicit copyFrom function.
        (WebCore::FormSubmission::requestURL): Updated for change to the Method
        enumeration.
        (WebCore::FormSubmission::populateFrameLoadRequest): Ditto.
        * loader/FormSubmission.h: Updated for the above changes. Made the Attributes
        class copyable, since we copy it. Changed some functions to return references
        instead of pointers and use Ref instead of RefPtr for data members.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Updated for changes to FormSubmission
        and FormState.
        (WebCore::FrameLoader::receivedFirstData): Ditto.
        (WebCore::FrameLoader::loadFrameRequest): Ditto.
        (WebCore::FrameLoader::loadResourceSynchronously): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto.

        * loader/FrameLoaderClient.h: Use references, pointers, RefPtr, and Ref
        instead of PassRefPtr. Removed unused empty dispatchDidFailToStartPlugin.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState): Take RefPtr&& instead of PassRefPtr.
        (WebCore::HistoryController::replaceState): Ditto.
        * loader/HistoryController.h: Updated for the above.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Pass a reference.

        * loader/NavigationScheduler.cpp: Use refernces and Ref&& instead of
        pointers and PassRefPtr.
        (WebCore::ScheduledNavigation::ScheduledNavigation): Added an overload
        that sests m_shouldOpenExternalURLsPolicy.
        * loader/NavigationScheduler.h: Updated for the above.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start): Use and pass references.
        (WebCore::ResourceLoader::willSendRequest): Ditto.
        (WebCore::ResourceLoader::didReceiveResponse): Ditto.
        (WebCore::ResourceLoader::didFail): Ditto.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::createJavaAppletWidget): Return RefPtr instead
        of PassRefPtr. Pass references instead of pointers.
        (WebCore::SubframeLoader::loadOrRedirectSubframe): Ditto.
        (WebCore::SubframeLoader::loadSubframe): Ditto.
        (WebCore::SubframeLoader::document): Deleted. This was never really the
        correct idiom for getting the appropriate document; hiding the dependency
        on m_frame wasn't paing off.
        (WebCore::SubframeLoader::loadPlugin): Pass reference instead of pointer.
        (WebCore::SubframeLoader::shouldConvertInvalidURLsToBlank): Eliminated
        unneeded null checking and complexity due to going through the document
        instead of the frame for this check.
        * loader/SubframeLoader.h: Updated for the above.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::ApplicationCache): Moved data member
        initialization to the class definition.
        (WebCore::ApplicationCache::~ApplicationCache): Pass a reference instead
        of a pointer.
        (WebCore::ApplicationCache::isComplete): Ditto.
        (WebCore::ApplicationCache::setManifestResource): Take Ref&& instead of
        PassRefPtr.
        (WebCore::ApplicationCache::addResource): Ditto.
        (WebCore::ApplicationCache::removeResource): Deleted. Was unused.
        * loader/appcache/ApplicationCache.h: Updated for above changes.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup): Moved most
        member initialization to the class definition.
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup): Pass a reference.
        (WebCore::ApplicationCacheGroup::cacheForMainRequest): Removed
        unnecessary preflight for removeFragmentIdentifier, which efficiently
        does nothing if there is no identifier. Use early return.
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest): More of
        the same.
        (WebCore::ApplicationCacheGroup::selectCache): Ditto, also take a reference,
        and use event names instead of a special enumeration to poast events.
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL): Ditto.
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): Ditto.
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource): Ditto.
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader): Ditto.
        (WebCore::ApplicationCacheGroup::cacheDestroyed): Ditto.
        (WebCore::ApplicationCacheGroup::stopLoadingInFrame): Ditto.
        (WebCore::ApplicationCacheGroup::setNewestCache): Use Ref&& instead of
        PassRefPtr.
        (WebCore::ApplicationCacheGroup::makeObsolete): More of the same.
        (WebCore::ApplicationCacheGroup::update): Ditto.
        (WebCore::ApplicationCacheGroup::abort): Ditto.
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Ditto.
        (WebCore::ApplicationCacheGroup::didFinishLoading): Ditto.
        (WebCore::ApplicationCacheGroup::didFail): Ditto.
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): Ditto.
        (WebCore::ApplicationCacheGroup::manifestNotFound): Ditto.
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): Ditto.
        (WebCore::ApplicationCacheGroup::startLoadingEntry): Ditto.
        (WebCore::ApplicationCacheGroup::deliverDelayedMainResources): Use a modern
        for loop.
        (WebCore::ApplicationCacheGroup::addEntry): Use auto and simplify logic
        for adding.
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache): Update since
        function result is a reference.
        (WebCore::ApplicationCacheGroup::scheduleReachedMaxAppCacheSizeCallback):
        Use auto.
        (WebCore::ApplicationCacheGroup::postListenerTask): Take event type instead of
        taking a special enumeration.
        * loader/appcache/ApplicationCacheGroup.h: Updated for the above.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost): Move most member
        initialization to the class definition.
        (WebCore::ApplicationCacheHost::~ApplicationCacheHost): Use reference.
        (WebCore::ApplicationCacheHost::selectCacheWithoutManifest): Ditto.
        (WebCore::ApplicationCacheHost::selectCacheWithManifest): Ditto.
        (WebCore::ApplicationCacheHost::mainResourceDataReceived): Ditto.
        (WebCore::ApplicationCacheHost::failedLoadingMainResource): Ditto.
        (WebCore::ApplicationCacheHost::finishedLoadingMainResource): Ditto.
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForRedirect): Ditto.
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForResponse): Ditto.
        (WebCore::ApplicationCacheHost::createFileURL): Ditto.
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously): Ditto.
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache): Take event
        type instead of special enumeration.
        (WebCore::ApplicationCacheHost::stopLoadingInFrame): Use reference.
        (WebCore::ApplicationCacheHost::stopDeferringEvents): Updated to use
        event types instead of special enumeration and also repaired possible
        edge case where code in event handler somehow triggers additional events.
        (WebCore::ApplicationCacheHost::resourceList): Renamed from fillResourceList
        and changed to return a vector instead of populating one.
        (WebCore::ApplicationCacheHost::applicationCacheInfo): Tweak coding style a bit.
        (WebCore::createApplicationCacheEvent): Factored this helper out of
        dispatchDOMEvent so we can use Ref instead of RefPtr.
        (WebCore::ApplicationCacheHost::dispatchDOMEvent): Updated to recent event type
        rather than receiving an event id and mapping it to a type.
        (WebCore::ApplicationCacheHost::setApplicationCache): Take RefPtr&& instead of
        PassRefPtr.
        (WebCore::ApplicationCacheHost::update): Pass a reference.
        (WebCore::ApplicationCacheHost::swapCache): Ditto.
        (WebCore::ApplicationCacheHost::abort): Ditto.
        * loader/appcache/ApplicationCacheHost.h: Updated for the above.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup): Pass a Ref instead of RefPtr.
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed): Take a reference.
        (WebCore::ApplicationCacheStorage::cacheGroupMadeObsolete): Ditto.
        (WebCore::ApplicationCacheStorage::storeNewestCache): Ditto.
        (WebCore::ApplicationCacheStorage::loadCache): Return RefPtr instead of PassRefPtr.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Pass a reference.
        * loader/appcache/ApplicationCacheStorage.h: Updated for the above.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache): Take a reference.
        (WebCore::DOMApplicationCache::toEventType): Deleted.
        * loader/appcache/DOMApplicationCache.h: Updated for the above. Made most
        members private.

        * loader/archive/Archive.cpp:
        (WebCore::Archive::clearAllSubframeArchives): Use a set for the logic that
        prevents us from walking the same archive more than once, rather than using
        a vector. Left it recursive, though.
        * loader/archive/Archive.h: Git rid of the type function, replacing it with
        three functions for the four different policies we currently have about the
        different archive types. Changed functions to take Ref&& instead of PassRefPtr
        and return const Vector<Ref>& instead of const Vector<RefPtr>&, changing the
        data members to match.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::createArchiveMIMETypesMap): Factored this out of the archiveMIMETypes
        function so we don't need a boolean. Also use ASCIILiteral.
        (WebCore::archiveMIMETypes): Updated to se the above.

        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources): Take a reference.
        (WebCore::ArchiveResourceCollection::popSubframeArchive): Return RefPtr instead
        of PassRefPtr.
        * loader/archive/ArchiveResourceCollection.h: Updated for the above.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Use auto and
        fewer local variables, more references for argument types and return values.
        (WebCore::LegacyWebArchive::createResourceResponseFromPropertyListData): Ditto.
        (WebCore::LegacyWebArchive::createResource): Ditto.
        (WebCore::LegacyWebArchive::create): Ditto.
        (WebCore::LegacyWebArchive::extract): Ditto.
        (WebCore::LegacyWebArchive::type): Deleted.
        (WebCore::LegacyWebArchive::rawDataRepresentation): More of the same.
        (WebCore::LegacyWebArchive::createFromSelection): Ditto.
        * loader/archive/cf/LegacyWebArchive.h: Updated for the above. Also marked the
        class final and added overrides for the four new policy member functions.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create): Pass references.
        (WebCore::MHTMLArchive::generateMHTMLData): Return RefPtr instead of
        PassRefPtr.
        * loader/archive/mhtml/MHTMLArchive.h: Updated for the above. Also marked the
        class final and added overrides for the four new policy member functions.

        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseArchiveWithHeader): Pass Ref instead of RefPtr
        to setMainResource and addSubframeArchive.
        (WebCore::MHTMLParser::addResourceToArchive): Ditto.

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet): Return RefPtr instead
        of PassRefPtr.
        * loader/cache/CachedCSSStyleSheet.h: Updated for the above.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setInitiator): Take a reference instead of a
        PassRefPtr.
        * loader/cache/CachedResourceRequest.h: Updated for the above.

        * loader/cocoa/DiskCacheMonitor.h: Removed. This is a duplicate, unused copy
        of DiskCacheMonitorCocoa.h.

        * loader/cocoa/DiskCacheMonitorCocoa.h: Removed unneeded exporting and virtual
        member functions, made more things private, and changed return type to RefPtr
        instead of PassRefPtr.
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse):
        Changed return type to RefPtr instead of PassRefPtr.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL): Take raw pointer instead of
        PassRefPtr.
        (WebCore::IconDatabase::getOrCreateIconRecord): Return Ref instead of PassRefPtr.
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase): Return RefPtr
        instead of PassRefPtr.
        * loader/icon/IconDatabase.h: Updated for the above. Also marked functions final
        instead of override.
        * loader/icon/IconDatabaseBase.h: Ditto.

        * loader/icon/PageURLRecord.cpp:
        (WebCore::PageURLRecord::PageURLRecord): Moved initialization to the header.
        (WebCore::PageURLRecord::~PageURLRecord): Wrote code here instead of calling
        setIconRecord(nullptr).
        (WebCore::PageURLRecord::setIconRecord): Take RefPtr&& instead of PassRefPtr.
        * loader/icon/PageURLRecord.h: Updatd for the above.

        * page/Chrome.cpp:
        (WebCore::Chrome::runOpenPanel): Updated to take two references.
        * page/Chrome.h: Ditto.
        * page/ChromeClient.h: ditto.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::applicationCache): Pass a reference.
        (WebCore::DOMWindow::setLocation): Ditto.
        (WebCore::DOMWindow::createWindow): Ditto.
        (WebCore::DOMWindow::open): Ditto.

        * page/EditorClient.h: Changed arguments to references instead of PassRefPtr.

        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Pass an rvalue reference.

        * page/Location.cpp:
        (WebCore::Location::reload): Pass reference instead of pointer.
        (WebCore::Location::setLocation): Ditto.

        * platform/URL.cpp:
        (WebCore::URL::setFragmentIdentifier): Take a StringView rather than
        a String, which is more flexible for callers. Also eliminated an unneeded
        string allocation when the old string had a fragment that is being replaced.
        * platform/URL.h: Updated for the above.

        * replay/ReplayInputDispatchMethods.cpp:
        (WebCore::InitialNavigation::dispatch): Pass reference.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource): Ditto.
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateExternalDocument): Ditto.

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        Make opaque root scanning truly constraint-based
        https://bugs.webkit.org/show_bug.cgi?id=165760

        Reviewed by Geoffrey Garen.

        No new tests yet. I think that writing tests for this is a big investigation:
        https://bugs.webkit.org/show_bug.cgi?id=165808
        
        Remove the previous advancing wavefront DOM write barrier. I don't think this will scale
        very well. It's super confusing.
        
        This change makes it so that visitAdditionalChildren can become a GC constraint that
        executes as part of the fixpoint. This changes all WebCore visitAdditionalChildren into
        output constraints by using new JSC API for Subspaces and MarkingConstraints.

        * ForwardingHeaders/heap/MarkedAllocatorInlines.h: Added.
        * ForwardingHeaders/heap/MarkedBlockInlines.h: Added.
        * ForwardingHeaders/heap/MarkingConstraint.h: Added.
        * ForwardingHeaders/heap/SubspaceInlines.h: Added.
        * ForwardingHeaders/heap/VisitingTimeout.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        (WebCore::writeBarrierOpaqueRootSlow): Deleted.
        * bindings/js/CommonVM.h:
        (WebCore::writeBarrierOpaqueRoot): Deleted.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::finishCreation):
        (WebCore::JSDOMGlobalObject::scriptExecutionContext):
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::outputConstraintSubspaceFor):
        (WebCore::globalObjectOutputConstraintSubspaceFor):
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/WebCoreJSClientData.cpp: Added.
        (WebCore::JSVMClientData::JSVMClientData):
        (WebCore::JSVMClientData::~JSVMClientData):
        (WebCore::JSVMClientData::getAllWorlds):
        (WebCore::initNormalWorldClientData):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::outputConstraintSpace):
        (WebCore::JSVMClientData::globalObjectOutputConstraintSpace):
        (WebCore::JSVMClientData::forEachOutputConstraintSpace):
        (WebCore::JSVMClientData::JSVMClientData): Deleted.
        (WebCore::JSVMClientData::~JSVMClientData): Deleted.
        (WebCore::JSVMClientData::getAllWorlds): Deleted.
        (WebCore::initNormalWorldClientData): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyChildNodeRemoved):

2017-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        It introduced dozens of test timeouts.

        Reverted changeset:
        "[Modern Media Controls] Turn modern media controls on by default"
        https://bugs.webkit.org/show_bug.cgi?id=165668
        http://trac.webkit.org/changeset/210834

2017-01-17  Zalan Bujtas  <zalan@apple.com>

        Remove positionOutsideContainingSpecialElement
        https://bugs.webkit.org/show_bug.cgi?id=167150

        Reviewed by Antti Koivisto.

        It is not used anymore.

        No change in functionality.

        * editing/htmlediting.cpp:
        (WebCore::isFirstVisiblePositionInSpecialElement): Deleted.
        (WebCore::isLastVisiblePositionInSpecialElement): Deleted.
        (WebCore::positionOutsideContainingSpecialElement): Deleted.
        * editing/htmlediting.h:

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

        Unreviewed, fix nits found after landing r210833.
        https://bugs.webkit.org/show_bug.cgi?id=167065

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceAllChildren):
        * dom/ContainerNode.h:

2017-01-17  Andreas Kling  <akling@apple.com>

        WidthCache should be off while under memory pressure.
        <https://webkit.org/b/167141>

        Reviewed by Antti Koivisto.

        Since we empty all the WidthCaches when we come under memory pressure, we shouldn't
        repopulate them until the pressure has gone away.

        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::add):

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

        Persist derived data
        https://bugs.webkit.org/show_bug.cgi?id=167136

        Reviewed by Andreas Kling.

        * loader/LoaderStrategy.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didRetrieveDerivedDataFromCache):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::options):
        * loader/ResourceLoaderOptions.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didRetrieveDerivedDataFromCache):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::didRetrieveDerivedDataFromCache):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::cacheBodyKey):
        (WebCore::ResourceResponseBase::setCacheBodyKey):
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):

2017-01-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn modern media controls on by default
        https://bugs.webkit.org/show_bug.cgi?id=165668

        Reviewed by Dean Jackson.

        Tests: media/modern-media-controls/fullscreen-support/ipad/fullscreen-support-tap.html
               media/modern-media-controls/pip-support/ipad/pip-support-enabled.html
               media/modern-media-controls/pip-support/ipad/pip-support-tap.html
               media/modern-media-controls/placard-support/ipad/placard-support-pip.html
               media/modern-media-controls/scrubber-support/ipad/scrubber-support-drag.html

        Fix an error which may be triggered prior to Sierra where we would assume the presentation
        mode API was avaiable when it might not be, which caused a few tests to fail.

        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.syncControl):
        (PiPSupport):

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

        Document title changed twice when setting document.title
        https://bugs.webkit.org/show_bug.cgi?id=167065

        Reviewed by Darin Adler.

        Setting document.title would call the document title to be set twice
        first to the empty string and then to the new title. This is because
        setting document.title is equivalent to setting title.textContent [1],
        which first removes all children and then inserts the new one [2], and
        we call updateTitle() for each step. This is because
        HTMLTitleElement::childrenChanged() is called twice (once for the
        removal of the existing children, and a second time when the new child
        is inserted), and childrenChanged() calls document::titleElementTextChanged().

        Since no JS event is fired between those 2 mutations, it is safe (i.e. non
        observable from JS) to update the title only once after both mutations have
        taken place. To achieve this, add a new replaceAllChildren() function
        which implements [3]. This replaceAllChildren() has the benefit of
        calling ContainerNode::childrenChanged() only once, after both mutations
        have taken place, thus avoiding unnecessary work. This fixes the issue
        when setting the title and should be performance-positive in general.

        [1] https://html.spec.whatwg.org/#document.title
        [2] https://dom.spec.whatwg.org/#dom-node-textcontent
        [3] https://dom.spec.whatwg.org/#concept-node-replace-all

        Test: fast/dom/Node/textContent-mutationEvents.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::replaceAllChildren):
        (WebCore::ContainerNode::rebuildSVGExtensionsElementsIfNecessary):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        Add new replaceAllChildrenWith() function which implements [3]
        in a way that calls ContainerNode::childrenChanged() only once.

        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        Deal with new AllChildrenReplaced ChildChange type.

        * dom/Node.cpp:
        (WebCore::Node::setTextContent):
        Call replaceAllChildrenWith() as per the specification:
        - https://dom.spec.whatwg.org/#dom-node-textcontent

        * dom/Range.cpp:
        (WebCore::Range::surroundContents):
        Call replaceAllChildrenWith(nullptr) as per the specification:
        - https://dom.spec.whatwg.org/#dom-range-surroundcontents

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
        https://bugs.webkit.org/show_bug.cgi?id=116551
        <rdar://problem/13949830>

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-01-17  Zalan Bujtas  <zalan@apple.com>

        Editing nested RTL-LTR content makes the process unresponsive.
        https://bugs.webkit.org/show_bug.cgi?id=167140
        rdar://problem/29057611

        Reviewed by Ryosuke Niwa.

        Break out of the loop if we keep coming back to the same position.
        This is a workaround for the underlying editing/position bug -> webkit.org/b/167138.

        Test: editing/rtl-to-ltr-editing-word-move-spin.html

        * editing/VisibleUnits.cpp:
        (WebCore::visualWordPosition):

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        JSCell::classInfo() shouldn't have a bunch of mitigations for being called during destruction
        https://bugs.webkit.org/show_bug.cgi?id=167066

        Reviewed by Keith Miller and Michael Saboff.

        No new tests because no new behavior.
        
        It's now necessary to avoid jsCast in destructors and finalizers. This was an easy
        rule to introduce because this used to always be the rule.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::finalize):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::destroy):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary includes
        https://bugs.webkit.org/show_bug.cgi?id=167114

        Reviewed by Alex Christensen.

2017-01-17  Andreas Kling  <akling@apple.com>

        Kill the presentation attribute cache.
        <https://webkit.org/b/119542>

        Reviewed by Antti Koivisto.

        This cache was added to placate some old page cycler test that was measuring load times
        on pages captured in 2000. That content is not super relevant anymore, and I think
        we can live without this cache.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        (WebCore::presentationAttributeCache): Deleted.
        (WebCore::PresentationAttributeCacheCleaner::PresentationAttributeCacheCleaner): Deleted.
        (WebCore::PresentationAttributeCacheCleaner::didHitPresentationAttributeCache): Deleted.
        (WebCore::PresentationAttributeCacheCleaner::cleanCache): Deleted.
        (WebCore::presentationAttributeCacheCleaner): Deleted.
        (WebCore::StyledElement::clearPresentationAttributeCache): Deleted.
        (WebCore::attributeNameSort): Deleted.
        (WebCore::StyledElement::makePresentationAttributeCacheKey): Deleted.
        (WebCore::computePresentationAttributeCacheHash): Deleted.
        * dom/StyledElement.h:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):

2017-01-17  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/210821
        It was causing crashes.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::finalize):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::destroy):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Crash when closing tab with debugger paused
        https://bugs.webkit.org/show_bug.cgi?id=161746
        <rdar://problem/15607819>

        Reviewed by Brian Burg and Brent Fulgham.

        * page/Page.h:
        (WebCore::Page::incrementNestedRunLoopCount):
        (WebCore::Page::decrementNestedRunLoopCount):
        (WebCore::Page::insideNestedRunLoop):
        Keep track of whether or not this Page is inside of a nested run loop.
        Currently the only nested run loop we know about is EventLoop used
        by Web Inspector when debugging JavaScript.

        (WebCore::Page::whenUnnested):
        Callback that can be called when we are no longer inside of a nested
        run loop.

        (WebCore::Page::~Page):
        Ensure we are not in a known nested run loop when destructing, since
        that could be unsafe.

        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePausedInternal):
        Increment and decrement as we go into or leave the nested runloop.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::disconnectAllFrontends):
        Rework destruction to allow disconnectAllFrontends to happen earlier
        if necessary. WebKit clients may use this to disconnect remote
        frontends when closing a Page.

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        JSCell::classInfo() shouldn't have a bunch of mitigations for being called during destruction
        https://bugs.webkit.org/show_bug.cgi?id=167066

        Reviewed by Keith Miller and Michael Saboff.

        No new tests because no new behavior.
        
        It's now necessary to avoid jsCast in destructors and finalizers. This was an easy
        rule to introduce because this used to always be the rule.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::finalize):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::destroy):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-01-17  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r208997): [GLX] Google maps labels broken when using glXCreateContextAttribsARB
        https://bugs.webkit.org/show_bug.cgi?id=166489

        Reviewed by Žan Doberšek.

        The format GL_ALPHA that can be used in WebGL's texImage2D and texSubImage2D functions is deprecated
        in the OpenGL layer when using a core profile. Due to this, when using core, we need to transform
        that parameter into something supported by OpenGL.

        What we do is to use a texture with just GL_RED format (that allows a single color component) to
        store the alpha values, and then configure the texture to swizzle red and alpha when accessing the
        pixel components.

        No new tests added.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2017-01-17  Tomas Popela  <tpopela@redhat.com>

        Unreviewed build fix for the Release build with enabled logging

        * html/MediaElementSession.cpp:
        * html/track/InbandGenericTextTrack.cpp:

2017-01-17  Zan Dobersek  <zdobersek@igalia.com>

        MediaKeySession: use existing 'message' event name
        https://bugs.webkit.org/show_bug.cgi?id=167095

        Reviewed by Sam Weinig.

        When dispatching the 'message' event in MediaKeySession::enqueueMessage(),
        use the messageEvent member that's provided by the EventNames object. This
        removes the need for a custom static AtomicString object.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::enqueueMessage):
        (WebCore::messageEventName): Deleted.

2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Remove the REQUEST_ANIMATION_FRAME flag
        https://bugs.webkit.org/show_bug.cgi?id=156980
        <rdar://problem/25906849>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ScriptedAnimationController.cpp:
        * dom/ScriptedAnimationController.h:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/animation/AnimationController.cpp:
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * platform/HostWindow.h:
        * platform/ScrollAnimationSmooth.h:
        * testing/Internals.cpp:

2017-01-16  Andy Estes  <aestes@apple.com>

        [QuickLook] QLPreviewConverter should be owned by its delegate
        https://bugs.webkit.org/show_bug.cgi?id=167104

        Reviewed by Andreas Kling.
        
        Instead of having QuickLookHandle own both the QLPreviewConverter and its delegate, have it
        just own the delegate and have the delegate own the QLPreviewConverter.

        No change in behavior. Covered by existing tests.

        * loader/ios/QuickLook.h:
        (WebCore::QuickLookHandle::converter): Moved out-of-line.
        * loader/ios/QuickLook.mm: Renamed WebPreviewConverterDelegate to WebPreviewConverter, and
        gave it ownership of the QLPreviewConverter, QuickLookHandleClient, and preview response.
        (-[WebPreviewConverter initWithResourceLoader:resourceResponse:quickLookHandle:]):
        Added a ResourceResponse parameter.
        (-[WebPreviewConverter setClient:]): Moved from QuickLookHandle::setClient().
        (-[WebPreviewConverter appendDataArray:]): Moved from QuickLookHandle::didReceiveDataArray().
        (-[WebPreviewConverter finishedAppending]): Moved from QuickLookHandle::didFinishLoading().
        (-[WebPreviewConverter failed]): Moved from QuickLookHandle::didFail().
        (-[WebPreviewConverter platformConverter]): Added to return the QLPreviewConverter.
        (-[WebPreviewConverter _sendDidReceiveResponseIfNecessary]): Used _previewResponse directly.
        (WebCore::QuickLookHandle::~QuickLookHandle): Removed unneeded logging.
        (WebCore::QuickLookHandle::didReceiveData): Called -[WebPreviewConverter appendDataArray:].
        (WebCore::QuickLookHandle::didReceiveBuffer): Ditto.
        (WebCore::QuickLookHandle::didFinishLoading): Called -[WebPreviewConverter finishedAppending].
        (WebCore::QuickLookHandle::didFail): Called -[WebPreviewConverter failed].
        (WebCore::QuickLookHandle::setClient): Called -[WebPreviewConverter setClient:].
        (WebCore::QuickLookHandle::previewFileName): Retrieved the QLPreviewConverter via
        -[WebPreviewConverter platformConverter].
        (WebCore::QuickLookHandle::previewUTI): Ditto.
        (WebCore::QuickLookHandle::previewRequestURL): Ditto.
        (WebCore::QuickLookHandle::converter): Ditto.
        (WebCore::QuickLookHandle::didReceiveDataArray): Deleted.
        (WebCore::QuickLookHandle::previewResponse): Deleted.

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

        CrashTracer: com.apple.WebKit.WebContent at JavaScriptCore: WTF::StringImpl::containsOnlyWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=167106
        <rdar://problem/24457632>

        Reviewed by Tim Horton.

        Speculative fix.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):

            Test before casting to Text.

2017-01-16  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Implementing baseline positioning for grid containers
        https://bugs.webkit.org/show_bug.cgi?id=165063

        Reviewed by Darin Adler and Sergio Villar Senin.

        Implementation of the 'first-line' baseline for Grid containers,
        according to the CSS Grid Layout spec.
        https://drafts.csswg.org/css-grid/#grid-baselines

        The self-baseline and content-baseline alignment logic is still
        not implemented, hence some cases will be implemented in
        future patches.

        Tests: fast/css-grid-layout/grid-baseline-margins.html
               fast/css-grid-layout/grid-baseline-must-respect-grid-order.html
               fast/css-grid-layout/grid-baseline.html

        * rendering/RenderGrid.cpp:
        (WebCore::synthesizedBaselineFromBorderBox):
        (WebCore::RenderGrid::isInlineBaselineAlignedChild):
        (WebCore::RenderGrid::baselinePosition):
        (WebCore::RenderGrid::firstLineBaseline):
        (WebCore::RenderGrid::inlineBlockBaseline):
        * rendering/RenderGrid.h:

2017-01-16  Andy Estes  <aestes@apple.com>

        [QuickLook] Do some cleanup in QuickLookHandle
        https://bugs.webkit.org/show_bug.cgi?id=166864

        Reviewed by Darin Adler.

        * loader/ios/QuickLook.h: Stopped including QuickLookHandleClient.h and forward-declared
        instead; changed setClient() to take a Ref<QuickLookHandleClient>&&; renamed nsResponse() to
        previewResponse(); changed QuickLookHandle() to take a ResourceLoader& and const
        ResourceResponse&; gave m_delegate a stronger type; removed unused m_quicklookFileHandle;
        initialized m_finishedLoadingDataIntoConverter to false.
        (WebCore::QuickLookHandle::firstRequestURL): Stopped exporting.
        (WebCore::QuickLookHandle::setClient): Moved definition out-of-line.
        * loader/ios/QuickLook.mm: Renamed WebResourceLoaderQuickLookDelegate to
        WebPreviewConverterDelegate and stopped conforming to NSURLConnectionDelegate and
        WebCoreResourceLoaderDelegate; removed @property quickLookHandle and initialized
        _quickLookHandle in the initializer instead.
        (-[WebPreviewConverter initWithResourceLoader:quickLookHandle:]): Changed to take references
        to resourceLoader and quickLookHandle.
        (-[WebPreviewConverter _sendDidReceiveResponseIfNecessary]): Stopped checking for a nil
        _quickLookHandle, since it is never nil.
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveDataArray:]): Deleted.
        QLPreviewConverter never calls this method.
        (-[WebPreviewConverter connection:didReceiveData:lengthReceived:]): Stopped checking for a
        nil _resourceLoader, since it is never nil.
        (-[WebPreviewConverter connectionDidFinishLoading:]): Ditto.
        (-[WebPreviewConverter connection:didFailWithError:]): Ditto.
        (WebCore::emptyClient): Changed to return a reference.
        (WebCore::QuickLookHandle::QuickLookHandle): Moved creation of the delegate,
        firstRequestURL, and response to here from QuickLookHandle::create(). Called
        ResourceLoader::didCreateQuickLookHandle() here instead of in QuickLookHandle::create().
        (WebCore::QuickLookHandle::create): Used std::make_unique to create the QuickLookHandle.
        (WebCore::QuickLookHandle::didFinishLoading): Set m_finishedLoadingDataIntoConverter to true
        instead of YES.
        (WebCore::QuickLookHandle::setClient): Moved the client rvalue reference into m_client.
        (WebCore::QuickLookHandle::~QuickLookHandle): Stopped clearing m_converter and calling
        -detachHandle.
        (WebCore::QuickLookHandle::previewRequestURL): Used dot syntax.
        (WebCore::QuickLookHandle::previewResponse): Renamed from nsResponse().

2017-01-16  Simon Fraser  <simon.fraser@apple.com>

        Remove CSSPropertyNames.in from the project. It's not used any more,
        now that we generate files from CSSProperties.json.

        * WebCore.xcodeproj/project.pbxproj:

2017-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Accept-language could be set twice in a row for the default context
        https://bugs.webkit.org/show_bug.cgi?id=167089

        Reviewed by Žan Doberšek.

        If NetworkStorageSession doesn't have a SoupNetworkSession yet, we are creating it only to set the
        languages. Since we already set the global value, the languages will be set when the SoupNetworkSession is
        created later. This is not a big deal for the language property, but it will be for proxies after bug #128674.
        Since NetworkStorageSession::soupNetworkSession() it's actually getting or creating the SoupNetworkSession, this
        patch renames it as NetworkStorageSession::getOrCreateSoupNetworkSession() and now
        NetworkStorageSession::soupNetworkSession() returns a pointer without creating the SoupNetworkSession, so it can
        be nullptr. This can now be used to only use the default SoupNetworkSession when it has already been created.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::soupNetworkSession): Use NetworkStorageSession::getOrCreateSoupNetworkSession().
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::updateIsUsingProxy): Ditto.
        (WebCore::DNSResolveQueue::platformResolve): Ditto.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession): This is the old soupNetworkSession(), now renamed.
        (WebCore::NetworkStorageSession::soupNetworkSession): Return a pointer with the current value of m_session that
        now can be nullptr.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext): Use NetworkStorageSession::getOrCreateSoupNetworkSession().

2017-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Fix handling of accept language property
        https://bugs.webkit.org/show_bug.cgi?id=166969

        Reviewed by Michael Catanzaro.

        Add SoupNetworkSession::setInitialAcceptLanguages() static method and update setAcceptLanguages to receive the
        string already built from the languages vector. Now the SoupNetworkSession saves that value globally that
        is always used when creating new sessions.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Remove workaround.
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): If initial accept languages were set, apply them to the newly created context.
        (WebCore::SoupNetworkSession::setInitialAcceptLanguages): Just save the given value globally.
        (WebCore::SoupNetworkSession::setAcceptLanguages): It receives now the string, so just set it to the session.
        * platform/network/soup/SoupNetworkSession.h:

2017-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] SoupNetworkSession constructor should be explicit
        https://bugs.webkit.org/show_bug.cgi?id=167069

        Reviewed by Darin Adler.

        * platform/network/soup/SoupNetworkSession.h:

2017-01-15  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for HTMLInputElement, HTMLFrameElement, HTMLMediaElement and HTMLOptionsCollection
        https://bugs.webkit.org/show_bug.cgi?id=167039

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp: Removed.
        * bindings/js/JSHTMLInputElementCustom.cpp: Removed.
        * bindings/js/JSHTMLMediaElementCustom.cpp: Removed.
        Remove files.

        * html/HTMLOptionsCollection.idl:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength): Deleted.
        Remove custom setLength. The bindings generator can handle this now.

        * html/HTMLFrameElement.idl:
        Resort to match spec. Replace custom annotation for location with SetterCallWith=ScriptState.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLFrameElementBase.h:
        Add implementation of setLocation.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectionStartForBindings):
        (WebCore::HTMLInputElement::setSelectionStartForBindings):
        (WebCore::HTMLInputElement::selectionEndForBindings):
        (WebCore::HTMLInputElement::setSelectionEndForBindings):
        (WebCore::HTMLInputElement::selectionDirectionForBindings):
        (WebCore::HTMLInputElement::setSelectionDirectionForBindings):
        (WebCore::HTMLInputElement::setSelectionRangeForBindings):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        Add variants of the selection properties that throw using the 'forBindings' suffix to differentiate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setControllerForBindings):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::controllerForBindings):
        * html/HTMLMediaElement.idl:
        Add a variant of the controller property that unsets the media group, using the 'forBindings' suffix to differentiate.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        Match other implementations by ignoring attempts to set large lengths (> 10000) rather than clamping.

2017-01-15  Tim Horton  <timothy_horton@apple.com>

        De-duplicate more (nearly) identical code in Editor(Mac|IOS).mm
        https://bugs.webkit.org/show_bug.cgi?id=167063

        Reviewed by Dan Bernstein.

        No new tests, just refactoring.

        * editing/Editor.h:
        Adjust to fontAttributesForSelectionStart returning a RetainPtr.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getTextDecorationAttributesRespectingTypingStyle):
        Make use of more Obj-C literals (for NSNumber).

        (WebCore::Editor::fontAttributesForSelectionStart):
        Merge this from EditorMac and EditorIOS. There are a number of attributes
        that are currently only extracted on Mac, and it's not clear why (and
        probably should be shared).

        (WebCore::Editor::stringSelectionForPasteboard):
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        Merge these functions from EditorMac and EditorIOS. The iOS implementation
        was missing a reasonable bug fix from r161925.

        (WebCore::Editor::createFragmentAndAddResources):
        Merge this from EditorMac and EditorIOS. The Mac implementation was missing
        a reasonable bug fix from r203482.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontAttributesForSelectionStart): Deleted.
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText): Deleted.
        (WebCore::Editor::createFragmentAndAddResources): Deleted.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart): Deleted.
        (WebCore::Editor::stringSelectionForPasteboard): Deleted.
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText): Deleted.
        (WebCore::Editor::createFragmentAndAddResources): Deleted.

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

        [Cocoa] Unify FontPlatformData's hashing and equality operators
        https://bugs.webkit.org/show_bug.cgi?id=167061

        Reviewed by Darin Adler.

        On iOS, we were using CFEqual() and CFHash(), while on macOS
        we were using pointer hashing and pointer equality. Instead,
        we should be consistent about these operators.

        Right now, FontPlatformData holds two internal CTFontRefs, and
        switching to these higher-level CFEqual() and CFHash()
        functions is required for eliminating one of these two
        internal font objects.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hash): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::cascadeToLastResortAttributesDictionary):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/win/FontPlatformDataDirect2D.cpp:
        (WebCore::FontPlatformData::hash):

2017-01-15  Andreas Kling  <akling@apple.com>

        FrameView shouldn't keep dangling pointers into dead render trees.
        <https://webkit.org/b/167011>

        Reviewed by Antti Koivisto.

        Added some pretty paranoid assertions to FrameView that verify all of its raw pointers
        into the render tree are gone after the render tree has been destroyed.
        They immediately caught two bugs, also fixed in this patch.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::willDestroyRenderTree):
        (WebCore::FrameView::didDestroyRenderTree): Added these two callbacks for before/after
        Document tears down its render tree. The former clears the layout root, and detaches
        custom scrollbars. The latter contains a bunch of sanity assertions that pointers into
        the now-destroyed render tree are gone.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree): Notify FrameView before/after teardown.

        * page/animation/AnimationController.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::hasAnimations): Added a helper to check if there are
        any composite animations around, as these contain raw pointers to renderers.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::RenderElement::willBeDestroyed): Moved slow repaint object unregistration
        from willBeRemovedFromTree() to willBeDestroyed(). The willBeRemovedFromTree() callback
        is skipped as an optimization during full tree teardown, but willBeDestroyed() always
        gets called. This fixes a bug where we'd fail to remove dangling pointers.

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

        [Cocoa] Unify font fallback between macOS and iOS for when the font-family list is exhausted
        https://bugs.webkit.org/show_bug.cgi?id=167056

        Reviewed by Darin Adler.

        When performing font fallback, each item in the font-family list is examined.
        If no appropriate fonts are found, WebKit asks the system for an appropriate
        font. As of a few years ago, both macOS and iOS used platform calls to
        produce a font; however, each platform used a different platform call. This
        patch migrates both platforms to use a shared function which uses only
        one of the platform calls (which means the other platform call is never used). 

        There are still some behavior differences between macOS and iOS (which are now
        hidden behind a PLATFORM() guard), but I'd like to minimize and eliminate these
        in the future. Using a shared function is a step toward this goal. 

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::lookupFallbackFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::getSystemFontFallbackForCharacters): Deleted.
        (WebCore::platformLookupFallbackFont): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformLookupFallbackFont): Deleted.

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

        Report CPU usage of tabs after they become non-visible using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=167019
        <rdar://problem/30019773>

        Reviewed by Darin Adler.

        Report CPU usage of tabs after they become non-visible using diagnostic logging.
        We start measure CPU usage 5 seconds after a tab goes to the background, for 5
        minutes and report how much CPU the tab used during those 5 minutes. We will
        not log if the tab gets closed or moved to the foreground during those 5
        minutes.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::didStartProvisionalLoad):
        (WebCore::Page::didFinishLoad):
        (WebCore::foregroundCPUUsageToDiagnosticLogginKey):
        (WebCore::Page::measurePostLoadCPUUsage):
        (WebCore::backgroundCPUUsageToDiagnosticLogginKey):
        (WebCore::Page::measurePostBackgroundingCPUUsage):
        (WebCore::Page::setIsVisibleInternal):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::isPostBackgroundingCPUUsageMeasurementEnabled):
        * page/Settings.h:

2017-01-14  Tim Horton  <timothy_horton@apple.com>

        De-duplicate some (nearly) identical code in Editor(Mac|IOS).mm
        https://bugs.webkit.org/show_bug.cgi?id=167062

        Reviewed by Dan Bernstein.

        No new tests, just refactoring.

        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::styleForSelectionStart):
        (WebCore::Editor::adjustedSelectionRange):
        * editing/Editor.h:
        Move these three functions to Editor and unguard them, because they're
        not Cocoa specific.

        * platform/spi/cocoa/NSAttributedStringSPI.h:
        Move some iOS-only NSAttributedString IPI (so no Internal SDK switch)
        to NSAttributedStringSPI.h.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::replaceSelectionWithAttributedString):
        (WebCore::Editor::createFragmentForImageResourceAndAddResource):
        (WebCore::Editor::dataInRTFDFormat):
        (WebCore::Editor::dataInRTFFormat):
        Move these six functions here.
        selectionInWebArchiveFormat and replaceSelectionWithAttributedString are
        entirely identical; writeSelectionToPasteboard and createFragment...
        both have slightly suspicious-looking differences that I left intact
        and wrote comments about (especially createFragment..., the other one
        is somewhat explicable). The two dataInRTF(D)Format functions used to
        be static functions, but for now are required from both EditorCocoa
        and Editor(Mac|IOS), so we'll make them static member functions.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontForSelection): Deleted.
        (WebCore::Editor::selectionInWebArchiveFormat): Deleted.
        (WebCore::dataInRTFDFormat): Deleted.
        (WebCore::dataInRTFFormat): Deleted.
        (WebCore::Editor::writeSelectionToPasteboard): Deleted.
        (WebCore::Editor::createFragmentForImageResourceAndAddResource): Deleted.
        (WebCore::Editor::replaceSelectionWithAttributedString): Deleted.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection): Deleted.
        (WebCore::Editor::selectionInWebArchiveFormat): Deleted.
        (WebCore::dataInRTFDFormat): Deleted.
        (WebCore::dataInRTFFormat): Deleted.
        (WebCore::Editor::writeSelectionToPasteboard): Deleted.
        (WebCore::Editor::createFragmentForImageResourceAndAddResource): Deleted.
        (WebCore::Editor::replaceSelectionWithAttributedString): Deleted.

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

        Small code cleanup after r210760
        https://bugs.webkit.org/show_bug.cgi?id=167047

        Reviewed by Sam Weinig.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):

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

        Renderers should have a simple way to access Settings.
        https://bugs.webkit.org/show_bug.cgi?id=167048

        Now that RenderObjects can never outlive the Page, we can just access the Settings
        through Page instead of Document::settings/Frame::settings.  

        Reviewed by Andreas Kling.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        (WebCore::RenderBlock::shouldPaintSelectionGaps):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::needsAppleMailPaginationQuirk):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::RenderElement::shouldRespectImageOrientation):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::acceleratedCompositingForOverflowScrollEnabled):
        (WebCore::RenderLayer::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling):
        (WebCore::RenderLayer::getRectToExpose):
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::shouldAggressivelyRetainTiles):
        (WebCore::RenderLayerBacking::shouldTemporarilyRetainTileCohorts):
        (WebCore::RenderLayerBacking::useGiantTiles):
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer):
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::shouldPlaceBlockDirectionScrollbarOnLeft):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::settings):
        * rendering/RenderText.cpp:
        (WebCore::SecureTextTimer::restart):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clientLogicalWidthForFixedPosition):
        (WebCore::RenderView::clientLogicalHeightForFixedPosition):
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):

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

        Align the innerText setter with the HTML spec and Gecko
        https://bugs.webkit.org/show_bug.cgi?id=160971

        Reviewed by Alex Christensen.

        Align the innerText setter and createContextualFragment() with the
        HTML specification and Gecko. In particular, they no longer throw
        when the context element is a void element. This behavior was there
        to match an old IE behavior but Edge dropped this behavior.

        Test: fast/dom/br-set-outerText.html

        * dom/Element.cpp:
        * dom/Element.h:
        * editing/markup.cpp:
        (WebCore::createContextualFragment):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        (WebCore::HTMLElement::setOuterText):

2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(DETAILS_ELEMENT) guards
        https://bugs.webkit.org/show_bug.cgi?id=167042

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::setIsExpanded):
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDetailsElement.idl:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTagNames.in:
        * html/shadow/DetailsMarkerControl.cpp:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isDetailsMarker):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2017-01-13  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r210753.
        https://bugs.webkit.org/show_bug.cgi?id=166730

        * platform/WebGLStateTracker.h:
        WTF::Function apparently needs to explicitly be differentiated from JSC::Attribute Function in PropertySlot.h.

2017-01-13  Brent Fulgham  <bfulgham@apple.com>

        Potential nullptr dereference in RenderLayer::updateLayerPosition()
        https://bugs.webkit.org/show_bug.cgi?id=167036
        <rdar://problem/30023019>

        Reviewed by Dean Jackson.

        A value was being used without nullptr checking, even though it had been checked for null a
        few lines prior.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition): Add missing nullptr check.

2017-01-11  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from more of "platform"
        https://bugs.webkit.org/show_bug.cgi?id=166809

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Removed DeviceMotionClientMock.cpp.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.h:
        Added now-needed include.

        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        Pass a reference instead of a pointer.

        * Modules/speech/SpeechSynthesisUtterance.h: Tweaks, msade a few things
        more private and final.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Detail::getPtrOrRef): Removed no-longer-needed const_cast.
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::wrapped): Ditto.
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::~ScriptModuleLoader): Ditto.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLengthSize): Updated for LengthSize struct.
        (WebCore::convertToCenterCoordinate): Ditto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createPositionListForLayer): Take a reference.
        (WebCore::getBorderRadiusCornerValues): Updated for LengthSize struct.
        (WebCore::getBorderRadiusCornerValue): Ditto.
        (WebCore::getBorderRadiusShorthandValue): Ditto.
        (WebCore::fillSizeToCSSValue): Ditto.
        (WebCore::ComputedStyleExtractor::propertyValue): Updated many properties
        since the layer properties now return references rather than pointers.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::image): Removed
        no-longer-needed const_cast.
        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::item): Ditto.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::init): Updated for LengthSize struct.

        * css/CSSStyleRule.h: Removed no-longer-needed const_cast.

        * css/CSSToStyleMap.cpp:
        (WebCore::convertToLengthSize): Updated for LengthSize struct.

        * css/FontFace.cpp:
        (WebCore::FontFace::family): Removed no-longer-needed const_cast.
        (WebCore::FontFace::style): Ditto.
        (WebCore::FontFace::weight): Ditto.
        (WebCore::FontFace::unicodeRange): Ditto.
        (WebCore::FontFace::variant): Ditto.
        (WebCore::FontFace::featureSettings): Ditto.

        * css/LengthFunctions.cpp:
        (WebCore::sizeForLengthSize): Added.
        (WebCore::floatSizeForLengthSize): Updated for LengthSize struct.
        * css/LengthFunctions.h: Added sizeForLengthSize.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder): Cut down on creation of unused objects.
        We now create only what we actually use.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertRadius): Updated for
        LengthSize struct.
        (WebCore::StyleBuilderConverter::convertShapeValue): Pass references
        when creating ShapeValue.

        * css/StyleBuilderCustom.h:
        (WebCore::forwardInheritedValue): Added. This set of overloaded
        functions allows us to use move semantics for some types, but copy
        them when inheriting. Doing it with special cases here allows us to
        resolve this without adding overloads someone might be tempted to
        call outside the style builder, and without adding special cases to
        the JSON file for each property.
        (WebCore::StyleBuilderCustom::applyValueWebkitDashboardRegion):
        Add WTFMove as needed to work with rvalue references.
        (WebCore::StyleBuilderCustom::applyValueSize): Ditto.
        (WebCore::StyleBuilderCustom::applyInheritTextIndent): Ditto.
        (WebCore::StyleBuilderCustom::applyValueTextIndent): Ditto.
        (WebCore::StyleBuilderCustom::applyInheritLineHeight): Ditto.
        (WebCore::StyleBuilderCustom::applyValueLineHeight): Ditto.
        (WebCore::StyleBuilderCustom::applyInheritClip): Ditto.
        (WebCore::StyleBuilderCustom::applyValueClip): Ditto.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::cacheBorderAndBackground): Use
        references instead of pointers.
        (WebCore::StyleResolver::applyMatchedProperties): Ditto.
        (WebCore::StyleResolver::applyProperty): Update for changes to the
        custom property data in RenderStyle.

        * css/makeprop.pl: Use auto quite a bit more in the generated code.
        Updated special cases for layers to expect references. Added a WTFMove
        so we can get move semantics for converted values that come out in
        an optional. Added call to forwardInheritedValue (see above).

        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels): Use auto and update
        since LengthSize is a struct.

        * dom/EventPath.cpp:
        (WebCore::EventPath::computePathUnclosedToTarget): Use auto.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::ownerNode): Removed no-longer-needed const_cast.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::source): Removed unneeded static_cast.

        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector): Tweaked formatting.

        * dom/Range.h:
        (WebCore::Range::ownerDocument): Removed no-longer-needed const_cast.
        * dom/RegisteredEventListener.h:
        (WebCore::RegisteredEventListener::callback): Ditto.
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::~ScriptRunner): Ditto.
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::ownerNode): Ditto.
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::node): Ditto.

        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused): Cut down on the number
        of different functions here. Also use reference rather than pointer.
        * inspector/PageScriptDebugServer.h: Updated for above change.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveSetProvisionalItem): Removed
        no-longer-needed const_cast.
        (WebCore::HistoryController::recursiveGoToItem): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer): Use auto. Let the is<> function do null
        checking for us.
        (WebCore::Frame::frameForWidget): Take a reference rather than a pointer.
        * page/Frame.h: Updated for the above.

        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect): Use Chrome directly instead of using
        HostWindow. HostWindow is an abstraction for the platform layer, and there
        is no good reason to use it here.
        (WebCore::FrameView::scheduleAnimation): Ditto.
        (WebCore::FrameView::graphicsLayerForPlatformWidget): Updated to use reference
        when calling RenderWidget::find.
        (WebCore::FrameView::scrollContentsFastPath): Use Chrome instead of HostWindow.
        (WebCore::FrameView::hostWindow): Use early return.
        (WebCore::FrameView::updateScrollCorner): Removed unneeded call through to base
        class function, which was empty.
        (WebCore::FrameView::hasCustomScrollbars): Updated since the children set now
        contains Ref rather than RefPtr.
        (WebCore::FrameView::parentFrameView): Use early return.
        (WebCore::FrameView::updateWidgetPositions): Use reference instead of pointer.
        * page/FrameView.h: Use final instead of override. Remove now-unneeded const_cast.

        * page/Page.cpp:
        (WebCore::Page::pluginViews): Updated since the children set now contains
        Ref rather than RefPtr.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty): Updated for LengthSize struct.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded): Updated for changes to
        the types in animation function members.
        (WebCore::AnimationBase::timeToNextService): Ditto.
        (WebCore::AnimationBase::progress): Ditto.
        (WebCore::AnimationBase::getElapsedTime): Ditto.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Updated for LengthSize struct.
        (WebCore::LengthPropertyWrapper::LengthPropertyWrapper): Updated since we now
        use rvalue references and move semantics when setting length properties.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame): Tweaked to
        use auto, pass references.

        * platform/KeyedCoding.h: Return RefPtr instead of PassRefPtr.

        * platform/LengthBox.h: Added a constructor that moves the lengths in, rather
        than always copying them.

        * platform/LengthSize.cpp:
        (WebCore::operator<<): Updated since LengthSize is a struct.
        * platform/LengthSize.h: Turned LengthSize into a struct and removed all the
        getter and setter code.

        * platform/PlatformSpeechSynthesis.h: Removed. Unused.

        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore::PlatformSpeechSynthesisUtterance::create): Return Ref rather than PassRefPtr.
        (WebCore::PlatformSpeechSynthesisUtterance::PlatformSpeechSynthesisUtterance): Take
        a reference. Initialize data members in class definition.
        * platform/PlatformSpeechSynthesisUtterance.h: Updated for the above.

        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore::PlatformSpeechSynthesisVoice::create): Return Ref rather than PassRefPtr.
        * platform/PlatformSpeechSynthesisVoice.h: Updated for the above.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::addChild): Take a reference rather than a PassRefPtr.
        (WebCore::ScrollView::setHasScrollbarInternal): Updated for change to addChild
        (WebCore::ScrollView::scrollContentsFastPath): Deleted. This was never called,
        so made it pure virtual.
        (WebCore::ScrollView::frameRectsChanged): Use a modern for loop.
        (WebCore::ScrollView::clipRectChanged): Ditto.
        (WebCore::ScrollView::updateScrollCorner): Deleted. This was empty so made it pure
        virtual and changed FrameView to not call it.
        (WebCore::ScrollView::setParentVisible): Use a modern for loop.
        (WebCore::ScrollView::show): Ditto.
        (WebCore::ScrollView::hide): Ditto.
        * platform/ScrollView.h: Changed the children set to contain Ref instead of RefPtr.
        Changed functions that were never overridden to either be final or non-virtual,
        Changed functions that were never called to be pure virtual.

        * platform/Theme.h:
        (WebCore::Theme::minimumControlSize): Updated for LengthSize struct.

        * platform/animation/Animation.h: Changed timingFunction and trigger to return
        raw pointers instead of PassRefPtr. Changed setTimingFunction and setTrigger to
        take RefPtr&& and Ref&& instead of PassRefPtr. CHanged initialTimingfunction and
        initialTrigger to return Ref.

        * platform/animation/AnimationList.cpp: Removed redundant check in FILL_UNSET_PROPERTY.
        (WebCore::AnimationList::AnimationList): Use modern for loop, reserveInitialCapacity,
        and uncheckedAppend.
        * platform/animation/AnimationList.h: Changed append to take Ref&& instead of PassRefPtr.
        changed vecto to contain Ref instead of RefPtr. Added move constructor and assignment
        operator.

        * platform/animation/AnimationTrigger.h:
        (WebCore::AutoAnimationTrigger::clone): Return Ref instead of PassRefPtr.
        (WebCore::AutoAnimationTrigger::create): Ditto.
        (WebCore::AutoAnimationTrigger::clone): Ditto.
        (WebCore::ScrollAnimationTrigger::create): Ditto.
        (WebCore::ScrollAnimationTrigger::clone): Ditto.

        * platform/animation/TimingFunction.h:
        (WebCore::LinearTimingFunction::create): Return Ref instead of PassRefPtr.
        (WebCore::CubicBezierTimingFunction::create): Ditto.
        (WebCore::CubicBezierTimingFunction::defaultTimingFunction): Return a reference
        instead of a pointer.
        (WebCore::CubicBezierTimingFunction::createReversed): Return Ref instead of PassRefPtr.
        (WebCore::CubicBezierTimingFunction::clone): Ditto.
        (WebCore::StepsTimingFunction::create): Ditto.
        (WebCore::StepsTimingFunction::clone): Ditto.
        (WebCore::SpringTimingFunction::create): Ditto.
        (WebCore::SpringTimingFunction::clone): Ditto.

        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::channel): Removed no-longer-needed const_cast.

        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoderCF::finishEncoding): Return RefPtr instead of PassRefPtr.
        * platform/cf/KeyedEncoderCF.h: Use final instead of override. Made even more
        private. Changed return value of finishEncoding to Ref instead of PassRefPtr.

        * platform/efl/PlatformSpeechSynthesisProviderEfl.h: Removed include of PassRefPtr.h.

        * platform/glib/KeyedEncoderGlib.cpp:
        (WebCore::KeyedEncoderGlib::finishEncoding): Return RefPtr instead of PassRefPtr.
        * platform/glib/KeyedEncoderGlib.h: Use final instead of override. Made even more
        private. Changed return value of finishEncoding to Ref instead of PassRefPtr.

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::outsetSizeForBlur): Simplified, removing unnecessary floating point math.
        (WebCore::FilterOperations::FilterOperations): Deleted. Let the compiler generate this.
        (WebCore::FilterOperations::operator=): Deleted. Let the compiler generate this.
        (WebCore::FilterOperations::operator==): Streamlined.
        (WebCore::FilterOperations::operationsMatch): Ditto.
        (WebCore::FilterOperations::hasReferenceFilter): Ditto.
        (WebCore::FilterOperations::hasOutsets): Ditto.
        (WebCore::FilterOperations::outsets): Ditto.
        (WebCore::FilterOperations::hasFilterThatAffectsOpacity): Ditto.
        (WebCore::FilterOperations::hasFilterThatMovesPixels): Ditto.
        * platform/graphics/filters/FilterOperations.h: Updated for above changes.

        * platform/graphics/FontCache.h: Removed included of PassRefPtr.h.

        * platform/graphics/FontPlatformData.h: Tweaked formatting. Removed nesting
        from #if since our formatting makes it hard to see nesting. Let the compiler
        generate the default move and copy constructors and assignemnt operators except
        in the USE(FREETYPE) case.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue::AnimationValue): Updated since clone now returns a Ref
        rather than a RefPtr.
        (WebCore::FloatAnimationValue::FloatAnimationValue): Deleted. Let the compiler
        generate the copy constructor without defining it explicitly.
        (WebCore::TransformAnimationValue::TransformAnimationValue): Use a modern for
        loop, reserveInitialCapacity, and unchecked append. Also tell the compiler to
        generate the move constructor, since the special work is only needed for the
        copy constructor.
        (WebCore::FilterAnimationValue::FilterAnimationValue): Ditto.
        (WebCore::KeyframeValueList::KeyframeValueList): Ditto.

        * platform/graphics/LegacyCDMSession.h: Removed include of PassRefPtr.h.

        * platform/graphics/PathUtilities.cpp:
        (WebCore::PathUtilities::pathWithShrinkWrappedRectsForOutline): Updated
        for LengthSize struct.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::CDMSessionAVFoundationCF): Take a reference.
        Don't bother setting m_client since we never use it.
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest): Clean up code a bit
        by using auto a lot more.
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h: Added include
        that is now needed since it was removed from the base class. Tidied the class
        up a bit, marking it final, making everything private, taking a reference, and
        removing an unused data member, m_client.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::createSession): Pass a reference.

        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        added include of WTFString.h, now needed because of removing an unneeded
        include from another header file.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated): Updated since trigger
        is a raw pointer now.
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue): Updated to
        return a reference rather than a pointer.
        (WebCore::GraphicsLayerCA::setAnimationEndpoints): Updated for the above change.
        (WebCore::GraphicsLayerCA::setAnimationKeyframes): Ditto.
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): Ditto.
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): Ditto.
        (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): Ditto.
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): Ditto.
        * platform/graphics/ca/GraphicsLayerCA.h: Ditto.

        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:]): CHanged argument to be a
        RefPtr&& instead of a PassRefPtr.

        * platform/mac/ThemeMac.mm:
        (WebCore::sizeFromNSControlSize): Updated for LenghtSize struct.
        (WebCore::checkboxSize): Ditto.
        (WebCore::radioSize): Ditto.
        (WebCore::ThemeMac::controlSize): Ditto.
        (WebCore::ThemeMac::minimumControlSize): Ditto.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus): Updated to pass a reference.

        * platform/mock/DeviceMotionClientMock.cpp: Removed. Unused.
        * platform/mock/DeviceMotionClientMock.h: Removed. Unused.

        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor): Return a Ref instead of a PassRefPtr.
        (WebCore::loadSharedCursor): Ditto.
        (WebCore::loadCursorByName): Ditto.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::output): Removed a no-longer-needed const_cast.
        (WebCore::FilterEffectRenderer::outputRect): Ditto.

        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::chooseInterpolationQuality): Tweaked formatting.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayers): Updated to take a reference. Also
        used a vector to iterate the linked list in reverse order instead of recursion.
        (WebCore::InlineFlowBox::paintFillLayer): Take a reference.
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h: Updated for the above.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers): Use auto a bit.
        (WebCore::RenderBox::getBackgroundPaintedExtent): Use reference for the layers.
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect): Ditto.
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer): Ditto.
        (WebCore::RenderBox::paintMaskImages): Ditto.
        (WebCore::RenderBox::maskClipRect): Ditto.
        (WebCore::RenderBox::paintFillLayers): Ditto.
        (WebCore::RenderBox::paintFillLayer): Ditto.
        (WebCore::layersUseImage): Ditto.
        (WebCore::RenderBox::repaintLayerRectsForImage): Ditto.
        * rendering/RenderBox.h: Updated for the above.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Use reference for
        the layers.
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Ditto.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Ditto.
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage): Ditto.
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground): Ditto.
        * rendering/RenderBoxModelObject.h: Updated for the above.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement): Use references for the layers.
        (WebCore::RenderElement::adjustStyleDifference): Ditto.
        (WebCore::RenderElement::updateFillImages): Ditto.
        (WebCore::RenderElement::setStyle): Use RenderStyle::replace to replace the
        old style with the new style, and get the old one out at the same time.
        (WebCore::RenderElement::styleDidChange): Use references for the layers.
        (WebCore::mustRepaintFillLayers): Ditto.
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded): Ditto.
        * rendering/RenderElement.h: Updated for the above.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeContentPositionAndDistributionOffset):
        Refactor so we don't need so many functions in RenderStyle.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Ditto.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): Pass widget as reference to addChild.
        Also did a few other tweaks and used more specific types.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::canCreateTiledImage): Updated since layers are references.
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage): Ditto.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar): Pass widget as reference to addChild.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Updated to use
        references for layers.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Use WTFMove to pass a LengthBox.
        (WebCore::RenderTheme::isControlStyled): Updated since LengthSize is a struct,
        more WTFMove, change since layers are ferences.

        * rendering/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustSizeConstraints): Update for Length and
        LengthSize changes.
        (WebCore::RenderThemeEfl::paintThemePart): Use reference instead of pointer.
        (WebCore::RenderThemeEfl::applyPartDescriptionFallback): Update for Length and
        LengthSize changes.
        (WebCore::RenderThemeEfl::applyPartDescription): Ditto.
        (WebCore::RenderThemeEfl::adjustCheckboxStyle): Ditto.
        (WebCore::RenderThemeEfl::adjustRadioStyle): Ditto.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::borderRadiiFromStyle): Update for Length and LengthSize changes.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustCheckboxStyle): Update for Length and
        LengthSize changes.
        (WebCore::RenderThemeIOS::isControlStyled): Ditto.
        (WebCore::RenderThemeIOS::adjustRadioStyle): Ditto.
        (WebCore::RenderThemeIOS::adjustRoundBorderRadius): Ditto.
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations): Ditto.
        (WebCore::RenderThemeIOS::adjustSliderTrackStyle): Ditto.
        (WebCore::RenderThemeIOS::adjustSliderThumbSize): Ditto.

        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets): Use move
        insteead of swap and modern for loop instead of iterators.
        (WebCore::moveWidgetToParentSoon): Take a reference instead of a pointer.
        (WebCore::RenderWidget::setWidget): Update for above change.
        (WebCore::RenderWidget::find): Take a reference instead of a pointer.
        * rendering/RenderWidget.h: Updated for above changes.

        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::reset): Updated since Length is passed as
        rvalue reference now.

        * rendering/mathml/MathMLStyle.cpp:
        (WebCore::MathMLStyle::getMathMLStyle): Updated since mathMLStyle returns
        a reference.
        (WebCore::MathMLStyle::resolveMathMLStyleTree): Ditto.

        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::mathMLStyle): Removed no-longer needed const_cast,
        changed to return a reference rather than a pointer.
        (WebCore::RenderMathMLTable::mathMLStyle): Ditto.

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::fractionParameters): Updated since mathMLStyle
        returns a reference.
        (WebCore::RenderMathMLFraction::stackParameters): Ditto.
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::isLargeOperatorInDisplayStyle): Ditto.
        (WebCore::RenderMathMLOperator::shouldMoveLimits): Ditto.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::verticalParameters): Ditto.
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::updateMathVariantGlyph): Ditto.

        * rendering/style/BasicShapes.cpp:
        (WebCore::floatSizeForLengthSize): Updated for LengthSize struct.
        * rendering/style/BorderData.h:
        (WebCore::BorderData::BorderData): Ditto.
        (WebCore::BorderData::hasBorderRadius): Ditto.

        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::clone): Updated member names.
        * rendering/style/ContentData.h: Ditto.

        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::computeSlices): Use initializer lists so we get
        move optimization without requiring explicit WTFMove.

        * rendering/style/DataRef.h:
        (WebCore::DataRef::DataRef): Removed no-longer needed const_cast.
        (WebCore::DataRef::replace): Added. This function is like Ref::replace, and
        can be used to put a new value in and get an old value out without running into
        the rule Ref has about not being reused once it becomes null because of being
        moved out of. This function is a lot like std::exchange.
        (WebCore::DataRef::operator const T&): Added operator so we can use these
        as references without any function call in read-only contexts.
        (WebCore::DataRef::get): Changed to return a reference rather than pointer.
        (WebCore::DataRef::access): Ditto.

        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeValue::timingFunction): Updated since timingFunction
        returns a raw pointer.
        (WebCore::KeyframeList::~KeyframeList): Removed unneeded call to clear,
        which does things that are redundant since we are about to destroy all the
        data members.
        (WebCore::KeyframeList::operator==): Tweaked codign style a bit.

        * rendering/style/NinePieceImage.h: Updated most functions in this class
        for the changes to DataRef.

        * rendering/style/RenderStyle.cpp: Updated nearly every function in this
        class for the changes to DataRef, to eliminate the peculiar naming and use
        our standard data member naming, m_memberName in a class, and memberName in a
        struct or struct-like class for publicly accessible members, to pass, take,
        and return more references and rvalue references, and to use modern for loops.
        Other changes listed below function by function.
        (WebCore::RenderStyle::defaultStyle): Use NeverDestroyed instead of allocating
        on the heap.
        (WebCore::RenderStyle::RenderStyle): Added a new constructor that performs
        the replace operation, using a combination of DataRef::replace and std::exchange.
        (WebCore::RenderStyle::replace): Added. Calls the above constructor.
        (WebCore::RenderStyle::setScrollSnapType): Use SET_NESTED_VAR so we get equality
        checks on this property, for the normal efficiency benefit.
        (WebCore::RenderStyle::setDashboardRegion): Moved this here from the header.
        (WebCore::RenderStyle::appendContent): Deleted.
        (WebCore::RenderStyle::setContent): Refactored this set of functions to simplify.

        * rendering/style/RenderStyle.h: Updated most functions as mentioned above.
        Also updated macros to use the do/while(0) technique. Removed the long list of
        friend classes with the elaborate comments; turned out none needed friendship
        despite the comments. Made more things private. Moved large functions out of the
        class definition.
        (WebCore::RenderStyle::getTextShadowExtent): Deleted.
        (WebCore::RenderStyle::getTextShadowHorizontalExtent): Deleted.
        (WebCore::RenderStyle::getTextShadowVerticalExtent): Deleted.
        (WebCore::RenderStyle::aspectRatio): Deleted.
        (WebCore::RenderStyle::alignContentPosition): Deleted.
        (WebCore::RenderStyle::alignContentDistribution): Deleted.
        (WebCore::RenderStyle::alignContentOverflowAlignment): Deleted.
        (WebCore::RenderStyle::alignItemsPosition): Deleted.
        (WebCore::RenderStyle::alignItemsOverflowAlignment): Deleted.
        (WebCore::RenderStyle::alignSelfPosition): Deleted.
        (WebCore::RenderStyle::alignSelfOverflowAlignment): Deleted.
        (WebCore::RenderStyle::justifyContentPosition): Deleted.
        (WebCore::RenderStyle::justifyContentDistribution): Deleted.
        (WebCore::RenderStyle::justifyContentOverflowAlignment): Deleted.
        (WebCore::RenderStyle::justifyItemsPosition): Deleted.
        (WebCore::RenderStyle::justifyItemsOverflowAlignment): Deleted.
        (WebCore::RenderStyle::justifyItemsPositionType): Deleted.
        (WebCore::RenderStyle::justifySelfPosition): Deleted.
        (WebCore::RenderStyle::justifySelfOverflowAlignment): Deleted.
        (WebCore::RenderStyle::setAlignContentPosition): Deleted.
        (WebCore::RenderStyle::setAlignContentOverflow): Deleted.
        (WebCore::RenderStyle::setAlignContentDistribution): Deleted.
        (WebCore::RenderStyle::setAlignItemsOverflow): Deleted.
        (WebCore::RenderStyle::setAlignSelfOverflow): Deleted.
        (WebCore::RenderStyle::setJustifyContentOverflow): Deleted.
        (WebCore::RenderStyle::setJustifyContentDistribution): Deleted.
        (WebCore::RenderStyle::setJustifyItemsPosition): Deleted.
        (WebCore::RenderStyle::setJustifyItemsOverflow): Deleted.
        (WebCore::RenderStyle::setJustifyItemsPositionType): Deleted.
        (WebCore::RenderStyle::setJustifySelfPosition): Deleted.
        (WebCore::RenderStyle::setJustifySelfOverflow): Deleted.
        (WebCore::RenderStyle::noninheritedFlagsMemoryOffset): Deleted.

        * rendering/style/SVGRenderStyle.cpp: Similar changes to RenderStyle.cpp above.
        * rendering/style/SVGRenderStyle.h: Ditto.

        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::create): Take a Ref&& instead of a RefPtr.
        (WebCore::ShapeValue::ShapeValue): Ditto.

        * rendering/style/StyleBackgroundData.cpp: Update data member names.
        * rendering/style/StyleBackgroundData.h: Ditto; make them public and remove the
        getter functions.

        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::cssValue): Removed no-longer-needed const_cast.

        * rendering/style/StyleCustomPropertyData.h: Update data member names.
        (WebCore::StyleCustomPropertyData::operator==): Removed unnecessary reference
        count churn.
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue): Take an rvalue
        reference.
        (WebCore::StyleCustomPropertyData::getCustomPropertyValue): Deleted.
        (WebCore::StyleCustomPropertyData::values): Deleted.
        (WebCore::StyleCustomPropertyData::hasCustomProperty): Deleted.
        (WebCore::StyleCustomPropertyData::containsVariables): Deleted.
        (WebCore::StyleCustomPropertyData::setContainsVariables): Deleted.

        * rendering/style/StyleFilterData.cpp: Update data member names.
        * rendering/style/StyleFilterData.h: Ditto.
        * rendering/style/StyleFlexibleBoxData.cpp: Ditto.
        * rendering/style/StyleFlexibleBoxData.h: Ditto.
        * rendering/style/StyleGridData.cpp: Ditto.
        * rendering/style/StyleGridData.h: Ditto.
        * rendering/style/StyleGridItemData.cpp: Ditto.
        * rendering/style/StyleGridItemData.h: Ditto.

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::cssValue): Removed no-longer-needed const_cast.
        (WebCore::StyleGeneratedImage::imageSize): Ditto.
        (WebCore::StyleGeneratedImage::image): Ditto.

        * rendering/style/StyleInheritedData.cpp: Update data member names.
        * rendering/style/StyleInheritedData.h: Ditto.
        * rendering/style/StyleRareInheritedData.cpp: Ditto.
        * rendering/style/StyleRareInheritedData.h: Ditto.
        * rendering/style/StyleMultiColData.cpp: Ditto.
        * rendering/style/StyleMultiColData.h: Ditto.
        * rendering/style/StyleRareNonInheritedData.cpp: Ditto.
        * rendering/style/StyleRareNonInheritedData.h: Ditto.
        * rendering/style/StyleTransformData.cpp: Ditto.
        * rendering/style/StyleTransformData.h: Ditto.
        * rendering/style/StyleVisualData.cpp: Ditto.
        * rendering/style/StyleVisualData.h: Ditto.

        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingResources): Update since layers are references.


2017-01-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Add diagnostic logging to measure WebGL usage
        https://bugs.webkit.org/show_bug.cgi?id=166730
        <rdar://problem/29883469>

        Reviewed by Alex Christensen.

        Add diagnostic logging to measure high performance WebGL usage. We report
        at regular intervals in which WebGL state Safari is:
        - Inactive
        - ActiveInForegroundTab
        - ActiveInBackgroundTabOnly

        This should give us an estimate of:
        - What % of the time is Safari using high performance graphics
        - What % of this time is only due to background tabs

        No new tests, no Web-facing behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::registerWithWebGLStateTracker):
        * html/canvas/WebGLRenderingContextBase.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::inactiveKey):
        (WebCore::DiagnosticLoggingKeys::activeInForegroundTabKey):
        (WebCore::DiagnosticLoggingKeys::activeInBackgroundTabOnlyKey):
        (WebCore::DiagnosticLoggingKeys::stateKey):
        (WebCore::WebCore::DiagnosticLoggingKeys::webGLKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::webGLStateTracker):
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        * platform/WebGLStateTracker.cpp: Copied from Source/WebCore/platform/graphics/GraphicsContext3DAttributes.h.
        (WebCore::WebGLStateTracker::WebGLStateTracker):
        (WebCore::m_stateChangeHandler):
        (WebCore::WebGLStateTracker::updateWebGLState):
        * platform/WebGLStateTracker.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3DAttributes.h.
        * platform/graphics/GraphicsContext3DAttributes.h:

2017-01-13  Brent Fulgham  <bfulgham@apple.com>

        Avoid nullptr frame dereference when scrollTo is called on a disconnected DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=167030
        <rdar://problem/29995070>

        Reviewed by Dean Jackson.

        Correct DOMWindow::scrollTo to match all other functions in the class so that the it
        checks that the current frame is valid before attempting to use it.

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

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

        Use a strong reference when calling callOnMainThread to schedule events in AudioScheduledSourceNode.
        https://bugs.webkit.org/show_bug.cgi?id=166983

        Reviewed by Brent Fulgham.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/AudioScheduledSourceNode.h:

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

        Protect MediaPlayer from being destroyed mid-load()
        https://bugs.webkit.org/show_bug.cgi?id=166976

        Reviewed by Eric Carlson.

        It's possible for a message sent by MediaPlayer to HTMLMediaElement to cause
        MediaPlayer to be destroyed before MediaPlayer::load() completes. We have
        previously protected against this same problem in HTMLMediaElement::loadResource()
        by ref'ing at the beginning of the function and deref'ing on exit. To do the
        same in MediaPlayer, it must become RefCounted.

        To keep the same semantics about m_client in MediaPlayer (always available without
        requiring a null-check), make a new static MediaPlayerClient object which can
        replace the real (HTMLMediaElement) client when the MediaPlayer is invalidated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nullMediaPlayerClient):
        (WebCore::MediaPlayer::create):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::invalidate):
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::inMediaDocument):
        (WebCore::MediaPlayer::fullscreenMode):
        (WebCore::MediaPlayer::requestedRate):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::MediaPlayer::readyStateChanged):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::muteChanged):
        (WebCore::MediaPlayer::timeChanged):
        (WebCore::MediaPlayer::sizeChanged):
        (WebCore::MediaPlayer::repaint):
        (WebCore::MediaPlayer::durationChanged):
        (WebCore::MediaPlayer::rateChanged):
        (WebCore::MediaPlayer::playbackStateChanged):
        (WebCore::MediaPlayer::firstVideoFrameAvailable):
        (WebCore::MediaPlayer::characteristicChanged):
        (WebCore::MediaPlayer::cachedKeyForKeyId):
        (WebCore::MediaPlayer::keyNeeded):
        (WebCore::MediaPlayer::mediaKeysStorageDirectory):
        (WebCore::MediaPlayer::referrer):
        (WebCore::MediaPlayer::userAgent):
        (WebCore::MediaPlayer::graphicsDeviceAdapter):
        (WebCore::MediaPlayer::cachedResourceLoader):
        (WebCore::MediaPlayer::createResourceLoader):
        (WebCore::MediaPlayer::addAudioTrack):
        (WebCore::MediaPlayer::removeAudioTrack):
        (WebCore::MediaPlayer::addTextTrack):
        (WebCore::MediaPlayer::removeTextTrack):
        (WebCore::MediaPlayer::addVideoTrack):
        (WebCore::MediaPlayer::removeVideoTrack):
        (WebCore::MediaPlayer::outOfBandTrackSources):
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        (WebCore::MediaPlayer::handlePlaybackCommand):
        (WebCore::MediaPlayer::sourceApplicationIdentifier):
        (WebCore::MediaPlayer::preferredAudioCharacteristics):
        (WebCore::MediaPlayer::doesHaveAttribute):
        (WebCore::MediaPlayer::mediaPlayerNetworkInterfaceName):
        (WebCore::MediaPlayer::getRawCookies):
        (WebCore::MediaPlayer::shouldDisableSleep):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::platformVolumeConfigurationRequired):
        (WebCore::MediaPlayer::client):

2017-01-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream, Mac] Add mock audio source
        https://bugs.webkit.org/show_bug.cgi?id=166974

        Reviewed by Jer Noble.
        
        Add a mock audio source for testing media streams.

        No new tests, updated webaudio/mediastreamaudiosourcenode.html.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        (WebCore::AVAudioCaptureSource::Observer::~Observer): Deleted.

        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::addObserver):
        (WebCore::AVAudioCaptureSource::removeObserver):
        (WebCore::AVAudioCaptureSource::start):

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: Added.
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: Added.
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac):
        (WebCore::MockRealtimeAudioSource::createMuted):
        (WebCore::MockRealtimeAudioSourceMac::addObserver):
        (WebCore::MockRealtimeAudioSourceMac::removeObserver):
        (WebCore::MockRealtimeAudioSourceMac::start):
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        (WebCore::MockRealtimeAudioSourceMac::render):
        (WebCore::MockRealtimeAudioSourceMac::applySampleRate):
        (WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::create):
        (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
        (WebCore::WebAudioSourceProviderAVFObjC::startProducingData): Deleted.
        (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData): Deleted.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (WebCore::MockRealtimeAudioSource::stopProducingData):
        (WebCore::MockRealtimeAudioSource::elapsedTime):
        (WebCore::MockRealtimeAudioSource::tick):

        * platform/mock/MockRealtimeAudioSource.h:
        (WebCore::MockRealtimeAudioSource::render):
        (WebCore::MockRealtimeAudioSource::renderInterval):
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource): Deleted.

2017-01-13  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for DeviceMotionEvent and DeviceOrientationEvent
        https://bugs.webkit.org/show_bug.cgi?id=167006

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDeviceMotionEventCustom.cpp: Removed.
        * bindings/js/JSDeviceOrientationEventCustom.cpp: Removed.
        Remove Custom bindings files.

        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        (WebCore::DeviceMotionData::Acceleration::create): Deleted.
        (WebCore::DeviceMotionData::Acceleration::Acceleration): Deleted.
        (WebCore::DeviceMotionData::RotationRate::create): Deleted.
        (WebCore::DeviceMotionData::RotationRate::RotationRate): Deleted.
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::Acceleration::create):
        (WebCore::DeviceMotionData::Acceleration::x):
        (WebCore::DeviceMotionData::Acceleration::y):
        (WebCore::DeviceMotionData::Acceleration::z):
        (WebCore::DeviceMotionData::Acceleration::Acceleration):
        (WebCore::DeviceMotionData::RotationRate::create):
        (WebCore::DeviceMotionData::RotationRate::alpha):
        (WebCore::DeviceMotionData::RotationRate::beta):
        (WebCore::DeviceMotionData::RotationRate::gamma):
        (WebCore::DeviceMotionData::RotationRate::RotationRate):
        (WebCore::DeviceMotionData::interval):
        (WebCore::DeviceMotionData::Acceleration::canProvideX): Deleted.
        (WebCore::DeviceMotionData::Acceleration::canProvideY): Deleted.
        (WebCore::DeviceMotionData::Acceleration::canProvideZ): Deleted.
        (WebCore::DeviceMotionData::RotationRate::canProvideAlpha): Deleted.
        (WebCore::DeviceMotionData::RotationRate::canProvideBeta): Deleted.
        (WebCore::DeviceMotionData::RotationRate::canProvideGamma): Deleted.
        (WebCore::DeviceMotionData::canProvideInterval): Deleted.
        Re-work using std::optional rather than an explicit bool/value pair.

        * dom/DeviceMotionEvent.cpp:
        (WebCore::convert):
        (WebCore::DeviceMotionEvent::acceleration):
        (WebCore::DeviceMotionEvent::accelerationIncludingGravity):
        (WebCore::DeviceMotionEvent::rotationRate):
        (WebCore::DeviceMotionEvent::interval):
        (WebCore::DeviceMotionEvent::initDeviceMotionEvent):
        * dom/DeviceMotionEvent.h:
        Implement IDL interface. For now, we have duplicate structs for
        Acceleration and RotationRate (one here, one in DeviceMotionData)
        which can be consolidated in the future.

        * dom/DeviceMotionEvent.idl:
        Add dictionaries for Acceleration and RotationRate, and update IDL to
        specify the correct nullability of attributes and arguments.

        * dom/DeviceOrientationData.cpp:
        (WebCore::DeviceOrientationData::create):
        (WebCore::DeviceOrientationData::DeviceOrientationData):
        (WebCore::DeviceOrientationData::alpha): Deleted.
        (WebCore::DeviceOrientationData::beta): Deleted.
        (WebCore::DeviceOrientationData::gamma): Deleted.
        (WebCore::DeviceOrientationData::absolute): Deleted.
        (WebCore::DeviceOrientationData::canProvideAlpha): Deleted.
        (WebCore::DeviceOrientationData::canProvideBeta): Deleted.
        (WebCore::DeviceOrientationData::canProvideGamma): Deleted.
        (WebCore::DeviceOrientationData::compassHeading): Deleted.
        (WebCore::DeviceOrientationData::compassAccuracy): Deleted.
        (WebCore::DeviceOrientationData::canProvideCompassHeading): Deleted.
        (WebCore::DeviceOrientationData::canProvideCompassAccuracy): Deleted.
        (WebCore::DeviceOrientationData::canProvideAbsolute): Deleted.
        * dom/DeviceOrientationData.h:
        (WebCore::DeviceOrientationData::create):
        (WebCore::DeviceOrientationData::alpha):
        (WebCore::DeviceOrientationData::beta):
        (WebCore::DeviceOrientationData::gamma):
        (WebCore::DeviceOrientationData::compassHeading):
        (WebCore::DeviceOrientationData::compassAccuracy):
        (WebCore::DeviceOrientationData::absolute):
        Re-work using std::optional rather than an explicit bool/value pair.

        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::alpha):
        (WebCore::DeviceOrientationEvent::beta):
        (WebCore::DeviceOrientationEvent::gamma):
        (WebCore::DeviceOrientationEvent::compassHeading):
        (WebCore::DeviceOrientationEvent::compassAccuracy):
        (WebCore::DeviceOrientationEvent::initDeviceOrientationEvent):
        (WebCore::DeviceOrientationEvent::absolute):
        * dom/DeviceOrientationEvent.h:
        Implement IDL interface.

        * dom/DeviceOrientationEvent.idl:
        Update IDL to specify the correct nullability of attributes and arguments.

        * platform/ios/DeviceMotionClientIOS.mm:
        (WebCore::DeviceMotionClientIOS::motionChanged):
        * platform/ios/DeviceOrientationClientIOS.mm:
        (WebCore::DeviceOrientationClientIOS::orientationChanged):
        Update for use of std:optional.

2017-01-13  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Cache the accelerated capability of MediaPlayerClient in MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=167015

        Reviewed by Jer Noble.

        In MediaPlayerPrivateGStreamerBase, avoid continuously querying the MediaPlayerClient
        object about the accelerated compositing capabilities. Instead, cache this information
        when creating the video sink (which is most affected by this information anyway), storing
        it in a new protected boolean member variable in the MediaPlayerPrivateGStreamerBase class.

        All calls to MediaPlayerClient::mediaPlayerRenderingCanBeAccelerated() and
        MediaPlayerClient::mediaPlayerAcceleratedCompositingEnabled() are replaced by tests
        on the value of this new member variable.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2017-01-13  Chris Dumez  <cdumez@apple.com>

        Report post-page load CPU usage using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=166950
        <rdar://problem/30014496>

        Reviewed by Alex Christensen.

        Shortly after page load (5 seconds), we measure the WebContent process'
        CPU usage over 10 seconds and report the percentage back via release
        logging. We also log the percentage using diagnostic logging using the
        following buckets:
        - Below 10%
        - 10 to 20%
        - 20 to 40%
        - 60 to 80%
        - Over 80%

        The logging works on both Mac and iOS. I verified that I get results
        consistent with Activity Monitor or top.

        No new tests, no Web-facing behavior change, only extra logging.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::postPageLoadKey):
        (WebCore::DiagnosticLoggingKeys::cpuUsageKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::didFinishLoad):
        (WebCore::cpuUsageToDiagnosticLogginKey):
        (WebCore::Page::measurePostLoadCPUUsage):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::isPostLoadCPUUsageMeasurementEnabled):
        * page/Settings.h:
        * platform/CPUTime.cpp: Added.
        (WebCore::getCPUTime):
        (WebCore::CPUTime::percentageCPUUsageSince):
        * platform/CPUTime.h: Added.
        * platform/cocoa/CPUTimeCocoa.mm: Added.
        (WebCore::timeValueToMicroseconds):
        (WebCore::getCPUTime):

2017-01-13  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        Caused many layout test timeouts on GTK+ bots

        Reverted changeset:

        "Protect MediaPlayer from being destroyed mid-load()"
        https://bugs.webkit.org/show_bug.cgi?id=166976
        http://trac.webkit.org/changeset/210677

2017-01-13  Konstantin Tokarev  <annulen@yandex.ru>

        Added preprocessor guard for iOS-specific piece of code in GraphicsContext3DOpenGL
        https://bugs.webkit.org/show_bug.cgi?id=167005

        Reviewed by Alex Christensen.

        Variable "boundFrameBuffer" is used only in iOS-specific code

        No new tests needed.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):

2017-01-13  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r210621): [mac-wk2] LayoutTest fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html timing out
        https://bugs.webkit.org/show_bug.cgi?id=166980

        Unreviewed, fix test broken by r210621.

        No new tests, updated fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html
        and results.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
          Drive-by fix: null-check parent.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): Do nothing if the layer
          has changed since the KVO notification.

2017-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Simplify cookie storage handling
        https://bugs.webkit.org/show_bug.cgi?id=166967

        Reviewed by Sergio Villar Senin.

        We currently have a global cookie storage, and several create() methods in SoupNetworkSession to create sessions
        with different cookie jars. This could be simplified by moving the cookie storage handling to
        NetworkStorageSession and removing all create() methods from SoupNetworkSession. This patch also removes the
        default SoupNetworkSession in favor of using the default NetworkStorageSession.

        * platform/network/NetworkStorageSession.h: Add a default cookie storage to be used when the
        NetworkStorageSession doesn't have a platform soup session.
        * platform/network/soup/CookieJarSoup.cpp: Remove the global cookie storage handling.
        (WebCore::setCookiesFromDOM): Use NetworkStorageSession::cookieStorage() instead.
        (WebCore::cookiesForSession): Ditto.
        (WebCore::cookiesEnabled): Check the policy instead like all other ports do, since now we will always have a
        default shared cookie jar.
        (WebCore::getRawCookies): Use NetworkStorageSession::cookieStorage() instead.
        (WebCore::deleteCookie): Ditto.
        (WebCore::addCookie): Ditto.
        (WebCore::getHostnamesWithCookies): Ditto.
        (WebCore::deleteCookiesForHostnames): Ditto.
        (WebCore::deleteAllCookies): Ditto.
        * platform/network/soup/CookieJarSoup.h: Removed.
        * platform/network/soup/CookieStorageSoup.cpp:
        (WebCore::soupCookiesChanged): Use the cookie storage from the NetworkStorageSession::defaultStorageSession().
        (WebCore::startObservingCookieChanges): Ditto.
        (WebCore::stopObservingCookieChanges): Ditto.
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::updateIsUsingProxy): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
        (WebCore::DNSResolveQueue::platformResolve): Ditto.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Create a new SoupNetworkSession without
        providing a cookie storage to ensure it creates its own private one.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Ditto.
        (WebCore::NetworkStorageSession::soupNetworkSession): Create the SoupNetworkSession on demand passing the global
        shared cookie storage.
        (WebCore::NetworkStorageSession::cookieStorage): Return the cookie storage from the SoupNetworkSession if we
        have one, otherwise create the global shared one and return it.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): Remove all create methods and the unused constructor that
        receives a SoupSession. Allow to pass a nullptr SoupCookieJar and create one in such case.
        * platform/network/soup/SoupNetworkSession.h:

2017-01-12  Tim Horton  <timothy_horton@apple.com>

        Keyboard accessory bar can appear on top of full-screen video
        https://bugs.webkit.org/show_bug.cgi?id=166902
        <rdar://problem/29668223>

        Reviewed by Darin Adler.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        Increase the full-screen video window level to one above the keyboard,
        to ensure that the video is never obscured by the keyboard or its
        accessory views.

2017-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary includes of Page.h
        https://bugs.webkit.org/show_bug.cgi?id=166996

        Reviewed by Yusuke Suzuki.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Modules/plugins/YouTubePluginReplacement.cpp:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdriver/NavigatorWebDriver.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        * dom/Range.cpp:
        * dom/ScriptElement.cpp:
        * dom/ViewportArguments.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLFormControlElementWithState.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLLinkElement.cpp:
        * html/PluginDocument.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * loader/LoadTiming.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.cpp:
        * page/DeviceController.cpp:
        * page/TextIndicator.cpp:
        * page/efl/DragControllerEfl.cpp:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/ScrollAnimatorIOS.mm:
        * platform/ios/WidgetIOS.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/win/MainThreadSharedTimerWin.cpp:
        * platform/win/PasteboardWin.cpp:
        * platform/win/PlatformScreenWin.cpp:
        * platform/win/WidgetWin.cpp:
        * rendering/InlineBox.cpp:
        * rendering/RenderAttachment.cpp:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RootInlineBox.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * style/StyleScope.cpp:
        * svg/SVGDocumentExtensions.cpp:
        * svg/graphics/SVGImageCache.cpp:
        * xml/XSLTProcessor.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

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

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=166995

        Reviewed by Jer Noble.

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        as some people are having trouble building without it.

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed, rolling out r210680.

        This change caused LayoutTest timeouts and assertion failures.

        Reverted changeset:

        "Use GenericEventQueue rather than callOnMainThread to
        schedule events in AudioScheduledSourceNode."
        https://bugs.webkit.org/show_bug.cgi?id=166983
        http://trac.webkit.org/changeset/210680

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

        [iOS] HTML form validation popover sometimes does not go away
        https://bugs.webkit.org/show_bug.cgi?id=166990
        <rdar://problem/29985957>

        Reviewed by Tim Horton.

        The issue was that [UIViewController presentViewController:] is asynchronous
        and that we sometimes tried to call [m_popoverController dismissViewControllerAnimated:]
        before presentViewController had completed. This is something that UIKit does
        not handle nicely and the popover just stays visible even though we have
        asked for the controller to be dismissed and destroyed the ValidationBubble
        object.

        To address the issue, I made ValidationBubble RefCounted and make sure the
        ValidationBubble object stays alive at least until the completion handler for
        [UIViewController presentViewController:] has been called. This is done via
        protecting the object using a RefPtr<> and capturing it in the lambda.
        Because dismissViewControllerAnimated is called in the destructor, it is no
        longer possible to call dismissViewControllerAnimated before the call to
        presentViewController has completed.

        No new tests, no easily testable since the popover was staying visible
        after being destroyed (held on by UIKit).

        * platform/ValidationBubble.h:
        (WebCore::ValidationBubble::create):
        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::show):

2017-01-12  Andreas Kling  <akling@apple.com>

        [iOS] Purge GraphicsServices font cache on memory warning.
        <https://webkit.org/b/154343>

        Reviewed by Antti Koivisto.

        The GS font cache was retaining CSS fonts after we stopped using them.
        Call SPI to release them on memory pressure. This is one of multiple
        steps necessary to actually free the fonts.

        * Configurations/WebCore.xcconfig:
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        * platform/spi/ios/GraphicsServicesSPI.h:

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

        Unreviewed EFL/GTK build fix after r210684.

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

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

        REGRESSION (r209977): Crash in UniqueIDBDatabase::executeNextDatabaseTask.
        https://bugs.webkit.org/show_bug.cgi?id=166984

        Reviewed by Alex Christensen.

        No new tests (Unable to reproduce, speculative fix).

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor): If we're not already prefetching for this cursor,
          starting doing so after holding a protector ref.
        (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor): If we're now done prefetching for this cursor,
          schedule the protector ref to be destroyed on the main thread.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

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

        Make ApplicationCacheHost::maybeLoadSynchronously more robust
        https://bugs.webkit.org/show_bug.cgi?id=165192

        Reviewed by Alex Christensen.

        No change of behavior.
        Currently, in case out parameter "data" is not null and shouldLoadResourceFromApplicationCache returns false and resource is null, we might dereference a null pointer when calling maybeLoadSynchronously.
        We refactor the code to ensure that this case cannot happen anymore.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::bufferFromResource):
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously):

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

        Update style of ResourceHandleInternal
        https://bugs.webkit.org/show_bug.cgi?id=166952

        Reviewed by Andreas Kling.

        No change in behavior.  Just un-indent and use initializer lists.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (WebCore::ResourceHandleInternal::client):

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

        Use GenericEventQueue rather than callOnMainThread to schedule events in AudioScheduledSourceNode.
        https://bugs.webkit.org/show_bug.cgi?id=166983

        Reviewed by Brent Fulgham.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/AudioScheduledSourceNode.h:

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

        OneDrive application crashes upon launch
        https://bugs.webkit.org/show_bug.cgi?id=166975

        Reviewed by Brady Eidson.

        Checking whether load is terminated just after calling ResourceLoader::willSendRequestInternal.
        The reason is that delegate call may actually cancel the load at that point.

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

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

        Protect MediaPlayer from being destroyed mid-load()
        https://bugs.webkit.org/show_bug.cgi?id=166976

        Reviewed by Eric Carlson.

        It's possible for a message sent by MediaPlayer to HTMLMediaElement to cause
        MediaPlayer to be destroyed before MediaPlayer::load() completes. We have
        previously protected against this same problem in HTMLMediaElement::loadResource()
        by ref'ing at the beginning of the function and deref'ing on exit. To do the
        same in MediaPlayer, it must become RefCounted.

        To keep the same semantics about m_client in MediaPlayer (always available without
        requiring a null-check), make a new static MediaPlayerClient object which can
        replace the real (HTMLMediaElement) client when the MediaPlayer is invalidated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nullMediaPlayerClient):
        (WebCore::MediaPlayer::create):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::invalidate):
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::inMediaDocument):
        (WebCore::MediaPlayer::fullscreenMode):
        (WebCore::MediaPlayer::requestedRate):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::MediaPlayer::readyStateChanged):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::muteChanged):
        (WebCore::MediaPlayer::timeChanged):
        (WebCore::MediaPlayer::sizeChanged):
        (WebCore::MediaPlayer::repaint):
        (WebCore::MediaPlayer::durationChanged):
        (WebCore::MediaPlayer::rateChanged):
        (WebCore::MediaPlayer::playbackStateChanged):
        (WebCore::MediaPlayer::firstVideoFrameAvailable):
        (WebCore::MediaPlayer::characteristicChanged):
        (WebCore::MediaPlayer::cachedKeyForKeyId):
        (WebCore::MediaPlayer::keyNeeded):
        (WebCore::MediaPlayer::mediaKeysStorageDirectory):
        (WebCore::MediaPlayer::referrer):
        (WebCore::MediaPlayer::userAgent):
        (WebCore::MediaPlayer::graphicsDeviceAdapter):
        (WebCore::MediaPlayer::cachedResourceLoader):
        (WebCore::MediaPlayer::createResourceLoader):
        (WebCore::MediaPlayer::addAudioTrack):
        (WebCore::MediaPlayer::removeAudioTrack):
        (WebCore::MediaPlayer::addTextTrack):
        (WebCore::MediaPlayer::removeTextTrack):
        (WebCore::MediaPlayer::addVideoTrack):
        (WebCore::MediaPlayer::removeVideoTrack):
        (WebCore::MediaPlayer::outOfBandTrackSources):
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        (WebCore::MediaPlayer::handlePlaybackCommand):
        (WebCore::MediaPlayer::sourceApplicationIdentifier):
        (WebCore::MediaPlayer::preferredAudioCharacteristics):
        (WebCore::MediaPlayer::doesHaveAttribute):
        (WebCore::MediaPlayer::mediaPlayerNetworkInterfaceName):
        (WebCore::MediaPlayer::getRawCookies):
        (WebCore::MediaPlayer::shouldDisableSleep):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::platformVolumeConfigurationRequired):
        (WebCore::MediaPlayer::client):

2017-01-12  Sam Weinig  <sam@webkit.org>

        Update bindings test results.

        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlot):
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):
        (WebCore::JSTestEventTarget::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        (WebCore::JSTestInterface::putByIndex):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::getOwnPropertySlot):
        (WebCore::JSTestObj::getOwnPropertySlotByIndex):
        (WebCore::JSTestObj::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlot):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlotByIndex):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:

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

        [GTK] WebKitWebProcess at 100% CPU loading hyphenation dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=165601

        Reviewed by Carlos Garcia Campos.

        In HyphenationLibHyphen, retrieve the canonicalized absolute pathname of the dictionary file
        in order to avoid storing symbolic links as the target files for specific locales. libhyphen
        distributes its dictionary files by linking a set of similar locales files to a single file.
        Not resolving those symbolic links means we'll be opening a single file via multiple
        HyphenationDictionary objects, which is far from optimal.

        To add insult to injury, these HyphenationDictionary objects were stored in a TinyLRUCache
        with a slim capacity of 4. This meant that while already loading one single file through
        multiple symlinks, because of continuous eviciton from this LRU cache the same symlinks
        continued to be processed, in some cases resulting in opening the same dictionary file
        hundreds or thousands of times. The capacity of this TinyLRUCache is increased to 32
        to keep the amount of open libhyphen dictionaries capped at some reasonable number.

        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::scanDirectoryForDicionaries):

2017-01-12  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Make the grid sizing data persistent through layouts
        https://bugs.webkit.org/show_bug.cgi?id=166883

        Reviewed by Darin Adler and Manuel Rego Casasnovas.

        We want to keep the grid sizing data structures through different
        layouts. This will allow to optimize some operations, reusing
        these data while still valid. Additionally, operations like
        determining the baseline position when the grid container is under
        an inline formatting context need these data once the grid has
        been laid out.

        This patch controls the sizing data validity and make the data
        structures persistent after layout.

        Tests: fast/css-grid-layout/grid-add-item-with-positioned-items.html
               fast/css-grid-layout/grid-add-positioned-block-item-after-inline-item.html
               fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child.html
               fast/css-grid-layout/grid-item-change-order-auto-flow.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): Evaluate if the style change made the grid data invalid.
        (WebCore::RenderBox::updateGridPositionAfterStyleChange): Evaluate if the style change made the grid data invalid.
        * rendering/RenderBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::Grid::setNeedsItemsPlacement): The grid must execute the items placement logic before continue processing the layout.
        (WebCore::RenderGrid::addChild): Mark the grid data as dirty.
        (WebCore::RenderGrid::removeChild): Mark the grid data as dirty.
        (WebCore::RenderGrid::styleDidChange): Evaluate grid data validity.
        (WebCore::RenderGrid::explicitGridDidResize): Mark the grid data as dirty.
        (WebCore::RenderGrid::namedGridLinesDefinitionDidChange): Mark the grid data as dirty.
        (WebCore::RenderGrid::layoutBlock): We don't need to clear the grid data anymore.
        (WebCore::RenderGrid::dirtyGrid): Clearing the grid data and mark is as needing to execute the items placement logic.
        (WebCore::RenderGrid::trackSizesForComputedStyle): Assert we don't need to perform the items placement logic.
        (WebCore::RenderGrid::paintChildren): Assert we don't need to perform the items placement logic.
        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::clear): Deleted.

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

        [iOS] Implement support for KeyboardEvent.code
        https://bugs.webkit.org/show_bug.cgi?id=166932
        <rdar://problem/29972518>

        Reviewed by Darin Adler.

        Implement support for KeyboardEvent.code on iOS.

        No new tests, updated existing test.

        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::codeForKeyEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):

2017-01-12  Sam Weinig  <sam@webkit.org>

        [WebIDL] Autogenerate named getters
        https://bugs.webkit.org/show_bug.cgi?id=166835

        Reviewed by Alex Christensen.

        * Modules/mediastream/RTCStatsResponse.idl:
        Update type to be nullable, since generator expects that for now.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp: Removed.
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp: Removed.
        * bindings/js/JSDOMNamedFlowCollectionCustom.cpp: Removed.
        * bindings/js/JSDOMPluginArrayCustom.cpp: Removed.
        * bindings/js/JSDOMPluginCustom.cpp: Removed.
        * bindings/js/JSNamedNodeMapCustom.cpp: Removed.
        * bindings/js/JSRTCStatsResponseCustom.cpp: Removed.
        * bindings/js/JSStyleSheetListCustom.cpp: Removed.
        Remove deleted files.

        * bindings/js/JSSQLStatementErrorCallbackCustom.cpp: 
        Renamed from Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp for consistency.

        * bindings/IDLTypes.h:
        (WebCore::IDLNullable::nullValue):
        (WebCore::IDLNullable::isNullValue):
        (WebCore::IDLNullable::extractValueFromNullable):
        Add Nullable traits for IDLNullable, that call down to the underlying type. This allows
        us to more easily tests for nullability without stripping the IDLNullable off.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate): Deleted.
        (WebCore::JSDOMStringMap::getOwnPropertyNames): Deleted.
        Remove overriden getOwnPropertySlot and getOwnPropertyNames.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter): Deleted.
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Deleted.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::nameGetter): Deleted.
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter): Deleted.
        Remove custom name getters.

        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectElementIndexSetter):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setItem):
        (WebCore::HTMLSelectElement::setLength):
        (WebCore::HTMLSelectElement::setOption): Deleted.
        * html/HTMLSelectElement.h:
        Add implementation of HTMLSelectElement::setItem() that does properly
        removes if the option is null. Re-implement selectElementIndexSetter to
        use it and switch conversion code to use JSDOMConvert.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        (GenerateNamedGetter):
        Extract typed getter generation into their own functions.

        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertySlotBodyByIndex):
        Extract getOwnPropertySlotBody / getOwnPropertySlotBodyByIndex generation
        into their own functions. Add support for generating name getters.

        (GenerateGetOwnPropertyNames):
        Extract getOwnPropertyNames generation into its own function, adding support
        for respecting the LegacyUnenumerableNamedProperties attribute and switching
        the default to not include named properties in the enumerated names.

        (GeneratePut):
        (GeneratePutByIndex):
        Extract put / putByIndex generators into their own functions in preparation
        of supporting namedSetters in the future.

        (GetIndexedSetterFunction):
        (GetNamedSetterFunction):
        (GetNamedDeleterFunction):
        Add helper getter functions to extract named/index setter/deleters.

        (InstanceOverridesPut):
        Add helper predicate to determine if an interface needs an implementation
        of put.

        (GenerateHeader):
        Place custom helper functions (e.g. nameGetter/putDelegate/etc.) together
        in the generated header.

        (GenerateImplementation):
        (GenerateCallbackImplementationContent):
        Replace inline generation with calls to the new helper generator functions.

        (NativeToJSValueUsingReferences):
        (NativeToJSValueUsingPointers):
        (NativeToJSValue):
        Remove unused inFunctionCall parameter, and add new suppressExceptionCheck
        parameter, which is used for nameGetters.

        * bindings/scripts/IDLAttributes.txt:
        Add LegacyUnenumerableNamedProperties.
    
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::namedItem):
        (WebCore::StyleSheetList::getNamedItem): Deleted.
        * css/StyleSheetList.h:
        * css/StyleSheetList.idl:
        Rename getNamedItem to namedItem, and make it return a CSSStyleSheet*
        which is what the bindings specify.

        * dom/DOMNamedFlowCollection.idl:
        Add LegacyUnenumerableNamedProperties to match existing behavior.

        * dom/DOMStringMap.h:
        Switch from typedef to type alias.

        * dom/DOMStringMap.idl:
        Remove CustomEnumerateProperty and JSCustomGetOwnPropertySlotAndDescriptor
        and add the getter. Also add the missing setter and deleter commented out.

        * dom/DatasetDOMStringMap.h:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::supportedPropertyNames):
        (WebCore::DatasetDOMStringMap::names): Deleted.
        Rename names to supportedPropertyNames to support the bindings.

        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::namedItem):
        Add namedItems (to support the bindings), and rework item to return
        an optional rather than using a bool out parameter.

        * dom/NamedNodeMap.idl:
        Add LegacyUnenumerableNamedProperties matching the spec.

        * html/HTMLAllCollection.idl:
        Add CustomNamedGetter and LegacyUnenumerableNamedProperties. Update signatures
        to match the spec. Commenting out ones not implemented yet.

        * html/HTMLCollection.idl:
        Add LegacyUnenumerableNamedProperties matching the spec.

        * html/HTMLFormControlsCollection.idl:
        Add CustomNamedGetter. Update signature of the getter to match the spec.
        The reason this can't be generated yet is that we don't have a good strategy
        for functions with differing return types that shadow each other.

        * html/HTMLFormElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::namedItem):
        (WebCore::HTMLFormElement::supportedPropertyNames):
        Add implementation of namedItem and stub of supportedPropertyNames.

        * html/HTMLFormElement.idl:
        Add LegacyUnenumerableNamedProperties and remove CustomNamedGetter. Update
        the signatures to match the spec.

        * page/DOMWindow.idl:
        Add LegacyUnenumerableNamedProperties matching the spec.

        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        Add LegacyUnenumerableNamedProperties and add nullability to return types.

2017-01-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS][WK1] Fix initialization of CADisplayLink::preferredFramesPerSecond
        https://bugs.webkit.org/show_bug.cgi?id=166956

        Reviewed by Tim Horton.
        
        Set this option to 60fps instead of leaving set to the default.

        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (-[WebDisplayLinkHandler initWithMonitor:]):

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

        Unreviewed, build fix for macOS ports
        https://bugs.webkit.org/show_bug.cgi?id=166925

        * WebCore.xcodeproj/project.pbxproj:

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

        Implement InlineClassicScript
        https://bugs.webkit.org/show_bug.cgi?id=166925

        Reviewed by Ryosuke Niwa.

        As of r210585, ScriptFetcher functionality is decoupled from ScriptElement.
        This patch is a further cleanup. We introduce InlineClassicScript, which is
        similar to LoadableClassicScript / LoadableModuleScript. And we move ScriptFetcher
        functionality from LoadableScript to CachedScriptFetcher, which is the base
        class of InlineClassicScript and LoadableScript.

        And we start setting this CachedScriptFetcher to the member of JSC::SourceOrigin.
        This allows us to examine the ScriptFetcher from the SourceOrigin.
        When dynamic-import operator is called, we need to get the ScriptFetcher from the
        caller script SourceOrigin since the subsequent module loading needs to know the
        metadata about fetching and ScriptFetcher delivers it.

        No behavior change.

        * CMakeLists.txt:
        * bindings/js/CachedModuleScript.cpp:
        (WebCore::CachedModuleScript::load):
        * bindings/js/CachedModuleScript.h:
        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::create):
        (WebCore::CachedModuleScriptLoader::CachedModuleScriptLoader):
        (WebCore::CachedModuleScriptLoader::load):
        * bindings/js/CachedModuleScriptLoader.h:
        * bindings/js/CachedScriptFetcher.cpp: Copied from Source/WebCore/dom/LoadableScript.cpp.
        (WebCore::CachedScriptFetcher::requestScriptWithCache):
        * bindings/js/CachedScriptFetcher.h: Copied from Source/JavaScriptCore/runtime/SourceOrigin.h.
        (WebCore::CachedScriptFetcher::CachedScriptFetcher):
        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::create):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        (WebCore::makeSource): Deleted.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::loadModuleScript):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch):
        (WebCore::ScriptModuleLoader::notifyFinished):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::m_url):
        * dom/InlineClassicScript.cpp: Added.
        (WebCore::InlineClassicScript::create):
        * dom/InlineClassicScript.h: Added.
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::execute):
        * dom/LoadableScript.cpp:
        (WebCore::LoadableScript::requestScriptWithCache): Deleted.
        * dom/LoadableScript.h:
        (WebCore::LoadableScript::LoadableScript):
        (): Deleted.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executePendingScript):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::runScript):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs):

2017-01-11  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream, Mac] Render media stream audio buffers
        https://bugs.webkit.org/show_bug.cgi?id=159836
        <rdar://problem/27380390>

        Reviewed by Jer Noble.

        No new tests, it isn't possible to test audio rendering directly. A follow-up patch will
        add a mock audio source that will enable audio testing.

        * platform/cf/CoreMediaSoftLink.cpp: Include new functions used.
        * platform/cf/CoreMediaSoftLink.h:

        * WebCore.xcodeproj/project.pbxproj: Remove references to the deleted previews.

        * platform/Logging.h: Add MediaCaptureSamples.

        * platform/MediaSample.h: Add outputPresentationTime and outputDuration.

        * platform/cf/CoreMediaSoftLink.cpp: Add CMSampleBufferGetOutputDuration, CMSampleBufferGetOutputPresentationTimeStamp,
        CMTimeConvertScale, CMTimebaseGetEffectiveRate, CMAudioSampleBufferCreateWithPacketDescriptions, 
        CMSampleBufferSetDataBufferFromAudioBufferList, CMSampleBufferSetDataReady, 
        CMAudioFormatDescriptionCreate, CMClockGetHostTimeClock, and CMClockGetTime.
        * platform/cf/CoreMediaSoftLink.h:

        Create and use an AVSampleBufferAudioRenderer each audio stream track, when it is available,
        to render for audio samples. Store the offset between the first sample received from a track's
        output presentation and the synchronizer time so we can adjust sample timestamps to be 
        relative to the synchronizer's timeline regardless of their source. Remove the use of source
        previews because not all sources will have them.

        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        
        Add an ObjC helper to catch renderer status changes.
        (-[WebAVSampleBufferStatusChangeListener initWithParent:]): 
        (-[WebAVSampleBufferStatusChangeListener dealloc]):
        (-[WebAVSampleBufferStatusChangeListener invalidate]):
        (-[WebAVSampleBufferStatusChangeListener beginObservingLayer:]):
        (-[WebAVSampleBufferStatusChangeListener stopObservingLayer:]):
        (-[WebAVSampleBufferStatusChangeListener beginObservingRenderer:]):
        (-[WebAVSampleBufferStatusChangeListener stopObservingRenderer:]):
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::removeOldSamplesFromPendingQueue):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::addSampleToPendingQueue):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateSampleTimes):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForVideoData):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForAudioData):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSourceProvider):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rendererStatusDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSampleBufferFromTrack): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForMediaData): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBuffer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareVideoSampleBufferFromTrack): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::internalSetVolume): Deleted.

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::outputPresentationTime): New.
        (WebCore::MediaSampleAVFObjC::outputDuration): New.
        (WebCore::MediaSampleAVFObjC::dump): Log outputPresentationTime.

        * platform/mediastream/AudioTrackPrivateMediaStream.h: Add timelineOffset.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setEnabled): No more m_preview.
        (WebCore::MediaStreamTrackPrivate::endTrack): Ditto.
        (WebCore::MediaStreamTrackPrivate::preview): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::preview): Deleted.

        * platform/mediastream/RealtimeMediaSourcePreview.h: Removed.

        * platform/mediastream/VideoTrackPrivateMediaStream.h: Add timelineOffset.

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::updateSettings):
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Pass the
        sample buffer up the chain.
        (WebCore::AVAudioSourcePreview::create): Deleted.
        (WebCore::AVAudioSourcePreview::AVAudioSourcePreview): Deleted.
        (WebCore::AVAudioSourcePreview::invalidate): Deleted.
        (WebCore::AVAudioSourcePreview::play): Deleted.
        (WebCore::AVAudioSourcePreview::pause): Deleted.
        (WebCore::AVAudioSourcePreview::setEnabled): Deleted.
        (WebCore::AVAudioSourcePreview::setVolume): Deleted.
        (WebCore::AVAudioSourcePreview::updateState): Deleted.
        (WebCore::AVAudioCaptureSource::createPreview): Deleted.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaSourcePreview): Deleted.
        (WebCore::AVMediaCaptureSource::createWeakPtr): Deleted.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource): No more preview.
        (WebCore::AVMediaCaptureSource::reset):
        (WebCore::AVMediaCaptureSource::preview): Deleted.
        (WebCore::AVMediaCaptureSource::removePreview): Deleted.
        (WebCore::AVMediaSourcePreview::AVMediaSourcePreview): Deleted.
        (WebCore::AVMediaSourcePreview::~AVMediaSourcePreview): Deleted.
        (WebCore::AVMediaSourcePreview::invalidate): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame): Don't set the "display immediately" attachment.
        (WebCore::AVVideoSourcePreview::create): Deleted.
        (WebCore::AVVideoSourcePreview::AVVideoSourcePreview): Deleted.
        (WebCore::AVVideoSourcePreview::backgroundLayerBoundsChanged): Deleted.
        (WebCore::AVVideoSourcePreview::invalidate): Deleted.
        (WebCore::AVVideoSourcePreview::play): Deleted.
        (WebCore::AVVideoSourcePreview::pause): Deleted.
        (WebCore::AVVideoSourcePreview::setPaused): Deleted.
        (WebCore::AVVideoSourcePreview::setEnabled): Deleted.
        (WebCore::AVVideoCaptureSource::createPreview): Deleted.
        (-[WebCoreAVVideoCaptureSourceObserver setParent:]): Deleted.
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): Deleted.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): Use a more typical video
        time scale. Set the sample decode time.
        (WebCore::MockRealtimeVideoSourceMac::pixelBufferFromCGImage): Use a static for colorspace
        instead of fetching it for every frame.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Add outputPresentationTime and outputDuration.

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

        Remove request.formData property until it gets implemented
        https://bugs.webkit.org/show_bug.cgi?id=166920
        <rdar://problem/29971105>

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        * Modules/fetch/FetchBody.idl:

2017-01-11  Ryan Haddad  <ryanhaddad@apple.com>

        Reverting r210598, r210597, and r210591 to fix the iOS simulator build.
        https://bugs.webkit.org/show_bug.cgi?id=166672

        Unreviewed build fix.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontIsSystemFont): Deleted.

2017-01-11  Andreas Kling  <akling@apple.com>

        Crash when WebCore's GC heap grows way too large.
        <https://webkit.org/b/166875>
        <rdar://problem/27896585>

        Reviewed by Mark Lam.

        Cap the common WebCore VM at 4 GB of live JavaScript heap objects.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2017-01-11  Nan Wang  <n_wang@apple.com>

        AX: role=treeitem accessible name not spoken to VoiceOver macOS when using string contained inside element
        https://bugs.webkit.org/show_bug.cgi?id=164950
        <rdar://problem/29337573>

        Reviewed by Chris Fleizach.

        From the spec: https://www.w3.org/TR/wai-aria-practices/#TreeView
        The element with role treeitem missing a label is labeled by its child elements.

        Test: accessibility/mac/aria-tree-item-name.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):

2017-01-11  Brent Fulgham  <bfulgham@apple.com>

        [GTK] Unreviewed build fix after r210600.

        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileDeviceId): Attempting to use proper API here.

2017-01-11  Brent Fulgham  <bfulgham@apple.com>

        [GTK] Unreviewed build fix after r210599.

        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileDeviceId): Revise for new signature.

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

        ASSERTION FAILED: run->m_stop > 0 in *WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment
        https://bugs.webkit.org/show_bug.cgi?id=166030

        Reviewed by Ryosuke Niwa.

        Ordinarily, we don't process empty BiDi runs (because we filter them out).
        However, when using isolates, we invoke extra machinery to create a
        placeholder BiDi run, and replace it with the runs for the isolate. The
        isolate's runs, though, can be empty, and rather than just deleting the
        placeholder run, we will keep it around so that the m_logicallyLastRun is
        still valid. This means that it is possible when all is said and done to
        have empty runs, and computeInlineDirectionPositionsForSegment() needs to
        not ASSERT() in this case.

        Test: fast/text/bidi-isolate-empty-run.html

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

2017-01-11  Brent Fulgham  <bfulgham@apple.com>

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        Revise SecurityOrigin to prevent files from one storage device (volume) from accessing content
        on a different storage device (volume) unless universal access is enabled.

        Pass the current file device as part of the NSURLRequest so that CFNetwork can reject loads
        where the device changes in the midst of a load.

        Also properly reflect that SecurityOrigin is never null by passing as a reference,
        rather than as a pointer.

        Tests: Tools/TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess): Pass argument as reference.
        (WebCore::SecurityOrigin::canDisplay): Add check that files share the same volume.
        (WebCore::SecurityOrigin::isSameSchemeHostPort): Pass argument as reference.
        * page/SecurityOrigin.h:
        * platform/FileSystem.cpp:
        (WebCore::filesHaveSameVolume): Added.
        * platform/FileSystem.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): If loading a file URL, tell CFNetwork
        the storage device at the time of the start of the load so we can trigger a failure if this
        changes during the load operation.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileDeviceId): Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileDeviceId): Added.

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

        [Cocoa] Testing fix after r210597
        https://bugs.webkit.org/show_bug.cgi?id=166672

        Unreviewed.

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

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

        [Cocoa] Testing fix after r210591
        https://bugs.webkit.org/show_bug.cgi?id=166672

        Unreviewed.

        Fixes fast/text/trak-optimizeLegibility.html and
        fast/text/system-font-features.html

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

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

        Iterating over URLSearchParams does not work
        https://bugs.webkit.org/show_bug.cgi?id=166921
        <rdar://problem/29970907>

        Reviewed by Alex Christensen.

        Make URLSearchParams iterable, as per:
        - https://url.spec.whatwg.org/#urlsearchparams

        Test: fast/dom/DOMURL/searchparams-iterable.html

        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::Iterator::next):
        (WebCore::URLSearchParams::Iterator::Iterator):
        * html/URLSearchParams.h:
        (WebCore::URLSearchParams::createIterator):
        * html/URLSearchParams.idl:

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

        [Cocoa] Variation fonts without variations specified are not rendered as if the default variations were specified
        https://bugs.webkit.org/show_bug.cgi?id=166672
        <rdar://problem/29779119>
        <rdar://problem/29848883>

        Reviewed by Simon Fraser.

        CoreText has a bug (<rdar://problem/29859207>) where variation fonts without
        a specified variation value are rendered as if the minimum value is specified,
        rather than the default value. The solution is to apply default values where
        they are omitted.

        Test: fast/text/variations/advances.html

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

2017-01-11  Ryan Haddad  <ryanhaddad@apple.com>

        Attempt to fix the Windows build after r210588.

        Unreviewed build fix.

        * bindings/js/JSBindingsAllInOne.cpp:

2017-01-11  Sam Weinig  <sam@webkit.org>

        Address some feedback from r210567.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Fix typo. robost -> robust.

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

        Rename JSCustomSQLStatementErrorCallback.cpp to JSSQLStatementErrorCallbackCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=166913

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp: Removed.
        * bindings/js/JSSQLStatementErrorCallbackCustom.cpp: Copied from Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp.
        Rename to match conventions.

2017-01-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210571.

        This change broke the 32-bit macOS build and caused LayoutTest
        failures.

        Reverted changeset:

        "File scheme should not allow access of a resource on a
        different volume."
        https://bugs.webkit.org/show_bug.cgi?id=158552
        http://trac.webkit.org/changeset/210571

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

        Decouple module loading initiator from ScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=166888

        Reviewed by Saam Barati and Ryosuke Niwa.

        Previously, we use ScriptElement (JSElement for ScriptElement) as the module loading initiator.
        This element is used to transfer the metadata like charset throughout the module pipeline.
        As a result, our module loader in the browser side is tightly coupled with ScriptElement.
        It is not good since it prevent us from using the module loader in the non-DOM environment like
        Web Workers.

        So we decouple the necessary informations from ScriptElement. We move these information to
        LoadableScript. And we use JSScriptFetcher to transfer LoadableScript through the JS implemented
        module loader pipeline. We select LoadableScript instead of LoadableModuleScript since this initiator
        information will be leveraged even in classic scripts once we implement the dynamic import.

        No behavior change.

        * ForwardingHeaders/runtime/JSScriptFetcher.h: Copied from Source/WebCore/dom/LoadableScript.cpp.
        * ForwardingHeaders/runtime/ScriptFetcher.h: Copied from Source/WebCore/dom/LoadableScript.cpp.
        * bindings/js/CachedModuleScript.cpp:
        (WebCore::CachedModuleScript::create):
        (WebCore::CachedModuleScript::load):
        (WebCore::CachedModuleScript::CachedModuleScript): Deleted.
        * bindings/js/CachedModuleScript.h:
        Now we can merge CachedModuleScript to LoadableScript. But we do not do this in this patch since
        we focus on decoupling the initiator information from ScriptElement.

        (WebCore::CachedModuleScript::nonce): Deleted.
        (WebCore::CachedModuleScript::crossOriginMode): Deleted.
        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::load):
        * bindings/js/CachedModuleScriptLoader.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderResolve):
        (WebCore::JSDOMWindowBase::moduleLoaderFetch):
        (WebCore::JSDOMWindowBase::moduleLoaderEvaluate):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::loadModule):
        (WebCore::JSMainThreadExecState::linkAndEvaluateModule):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::loadModuleScript):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScript):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch):
        * bindings/js/ScriptModuleLoader.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::create):
        (WebCore::LoadableClassicScript::~LoadableClassicScript):
        (WebCore::LoadableClassicScript::isLoaded):
        (WebCore::LoadableClassicScript::error):
        (WebCore::LoadableClassicScript::wasCanceled):
        (WebCore::LoadableClassicScript::notifyFinished):
        (WebCore::LoadableClassicScript::load):
        * dom/LoadableClassicScript.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::create):
        (WebCore::LoadableModuleScript::LoadableModuleScript):
        (WebCore::LoadableModuleScript::load):
        * dom/LoadableModuleScript.h:
        * dom/LoadableScript.cpp:
        (WebCore::LoadableScript::requestScriptWithCache):
        * dom/LoadableScript.h:
        (WebCore::LoadableScript::LoadableScript):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executeModuleScript):
        (WebCore::ScriptElement::requestScriptWithCacheForModuleScript): Deleted.
        (WebCore::ScriptElement::requestScriptWithCache): Deleted.
        * dom/ScriptElement.h:

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

        [GStreamer] Use smart pointers and modernize code in WebKitWebAudioSourceGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=166886

        Reviewed by Xabier Rodriguez-Calvar.

        This patch doesn't change the behavior, so it's covered by existing Web Audio tests. It replaces pointers with
        smart pointers, uses WTF::Vector instead of GSList and simplifies the code to map/unmap GstBuffers.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcFinalize):
        (webKitWebAudioSrcLoop):
        (webKitWebAudioSrcChangeState):
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::derefGPtr<GstBufferList>):
        (WTF::adoptGRef):
        (WTF::refGPtr<GstBufferPool>):
        (WTF::derefGPtr<GstBufferPool>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::mapGstBuffer):
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::createReadBuffer):

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

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

        Caused huge memory leak see https://webkit.org/b/166884
        (Requested by KaL on #webkit).

        Reverted changeset:

        "[GStreamer] Silent WebAudio buffers support"
        https://bugs.webkit.org/show_bug.cgi?id=143869
        http://trac.webkit.org/changeset/182947

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

        Unreviewed, rolling out r210579.

        That was not the right fix

        Reverted changeset:

        "Unreviewed GTK buildfix after r210571."
        http://trac.webkit.org/changeset/210579

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

        Unreviewed. Fix GTK+ build after r210571.

        Add getFileDeviceId implementation to FileSystemGlib.cpp.

        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileDeviceId):

2017-01-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed GTK buildfix after r210571.

        * PlatformGTK.cmake:

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

        Implement JSSourceCode to propagate SourceCode in module pipeline
        https://bugs.webkit.org/show_bug.cgi?id=166861

        Reviewed by Saam Barati.

        Now SourceOrigin is correctly propagated through the module pipeline.
        So the error reported by http/tests/security/contentSecurityPolicy/module-eval-blocked-expected.html
        is updated.

        * ForwardingHeaders/runtime/JSSourceCode.h: Added.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::resolveWithCallback):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::notifyFinished):

2017-01-10  Brent Fulgham  <bfulgham@apple.com>

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        Revise SecurityOrigin to prevent files from one storage device (volume) from accessing content
        on a different storage device (volume) unless universal access is enabled.

        Pass the current file device as part of the NSURLRequest so that CFNetwork can reject loads
        where the device changes in the midst of a load.

        Also properly reflect that SecurityOrigin is never null by passing as a reference,
        rather than as a pointer.

        Tests: Tools/TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess): Pass argument as reference.
        (WebCore::SecurityOrigin::passesFileCheck): Add check that file URLs refer to files in
        the same storage volume.
        (WebCore::SecurityOrigin::canDisplay): Add check that files share the same volume.
        (WebCore::SecurityOrigin::isSameSchemeHostPort): Pass argument as reference.
        * page/SecurityOrigin.h:
        * platform/FileSystem.cpp:
        (WebCore::filesHaveSameVolume): Added.
        * platform/FileSystem.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): If loading a file URL, tell CFNetwork
        the storage device at the time of the start of the load so we can trigger a failure if this
        changes during the load operation.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileDeviceId): Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileDeviceId): Added.

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

        [WebIDL] Remove most of the custom bindings for the WebGL code
        https://bugs.webkit.org/show_bug.cgi?id=166834

        Reviewed by Alex Christensen.

        Removes all but one custom getter (getExtension) from the WebGL code.

        * Modules/indexeddb/IDBKeyRange.idl:
        Replace use of non-standard type, with new OverrideIDLType extended attribute, allowing us
        to stay more consistent with the IDL files spec's provide.

        * WebCore.xcodeproj/project.pbxproj:
        Move JSWebGL2RenderingContextCustom to the GC/Wrapping only group.

        * bindings/IDLTypes.h:
        Add IDLWebGLAny, and simplify IDLIDBKey to not be templatized.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLLong>::convert):
        (WebCore::Converter<IDLFloat>::convert):
        (WebCore::Converter<IDLUnrestrictedFloat>::convert):
        (WebCore::Converter<IDLDouble>::convert):
        (WebCore::Converter<IDLUnrestrictedDouble>::convert):
        Add overloads of convert that convert a double to the numeric type.

        (WebCore::Detail::GenericSequenceConverter::convert):
        Add optimized specialization for JSArrays that does not use the iterator protocol.

        (WebCore::Detail::NumericSequenceConverter::convert):
        Add an even more optimized specialization for numeric types, which checks to see
        if the array's butterfly has an optimized shape, and extracts the numeric values
        from that.

        (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):
        Select the right specialization based on type.

        (WebCore::Converter<IDLSequence<T>>::convert):
        (WebCore::Converter<IDLFrozenArray<T>>::convert):
        Rename converter to be more accurate.

        (WebCore::JSConverter<IDLWebGLAny>::convert):
        Added. Calls through to converter in WebGLAny.h. We should replace this with a
        call to the IDLUnion JSConverter when feasible.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::JSWebGL2RenderingContext::getInternalformatParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getQueryParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getSamplerParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getSyncParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getActiveUniformBlockParameter): Deleted.
        (WebCore::JSWebGL2RenderingContext::getActiveUniformBlockName): Deleted.
        Remove unnecessary custom functions.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::objectParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getAttachedShaders): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getBufferParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getFramebufferAttachmentParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getProgramParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getRenderbufferParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getShaderParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getSupportedExtensions): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getTexParameter): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getUniform): Deleted.
        (WebCore::JSWebGLRenderingContextBase::getVertexAttrib): Deleted.
        (WebCore::toNumberVector): Deleted.
        (WebCore::functionForUniform): Deleted.
        (WebCore::dataFunctionf): Deleted.
        (WebCore::dataFunctioni): Deleted.
        (WebCore::dataFunctionMatrix): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform1fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform1iv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform2fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform2iv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform3fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform3iv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform4fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniform4iv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix2fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix3fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix4fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib1fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib2fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib3fv): Deleted.
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib4fv): Deleted.
        Remove unnecessary custom functions.

        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        Remove specialization of IDBKey.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetBaseIDLType):
        (GetIDLType):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        (NativeToJSValue):
        Allow IDL files to override the type of signature using a new OverrideIDLType
        extended attribute. Currently this only works conversion to JS, but could be
        extended to support more.

        * bindings/scripts/IDLAttributes.txt:
        Add OverrideIDLType.

        * html/canvas/WebGL2RenderingContext.idl:
        Add OverrideIDLType=IDLWebGLAny annotations to remove the need for custom functions.

        * html/canvas/WebGLAny.cpp:
        (WebCore::convertToJSValue):
        (WebCore::toJS): Deleted.
        * html/canvas/WebGLAny.h:
        Rename the toJS function to convertToJSValue to avoid a template specialization issue.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getAttachedShaders):
        Update signature to match IDL, replacing bool return value plus out parameter with an
        optional return value. Modernize the code a bit.

        (WebCore::WebGLRenderingContextBase::uniform2f):
        (WebCore::WebGLRenderingContextBase::uniform3f):
        (WebCore::WebGLRenderingContextBase::uniform4f):
        (WebCore::WebGLRenderingContextBase::uniform1i):
        (WebCore::WebGLRenderingContextBase::uniform3i):
        (WebCore::WebGLRenderingContextBase::uniform4i):
        (WebCore::WebGLRenderingContextBase::uniform1fv):
        (WebCore::WebGLRenderingContextBase::uniform2fv):
        (WebCore::WebGLRenderingContextBase::uniform3fv):
        (WebCore::WebGLRenderingContextBase::uniform4fv):
        (WebCore::WebGLRenderingContextBase::uniform1iv):
        (WebCore::WebGLRenderingContextBase::uniform2iv):
        (WebCore::WebGLRenderingContextBase::uniform3iv):
        (WebCore::WebGLRenderingContextBase::uniform4iv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix2fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix3fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix4fv):
        (WebCore::WebGLRenderingContextBase::vertexAttrib4f):
        (WebCore::WebGLRenderingContextBase::vertexAttrib1fv):
        (WebCore::WebGLRenderingContextBase::vertexAttrib2fv):
        (WebCore::WebGLRenderingContextBase::vertexAttrib3fv):
        (WebCore::WebGLRenderingContextBase::vertexAttrib4fv):
        (WebCore::WebGLRenderingContextBase::validateUniformParameters):
        (WebCore::WebGLRenderingContextBase::validateUniformMatrixParameters):
        (WebCore::WebGLRenderingContextBase::vertexAttribfvImpl):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::TypedList::TypedList):
        (WebCore::WebGLRenderingContextBase::TypedList::data):
        (WebCore::WebGLRenderingContextBase::TypedList::length):
        Re-order/group to match order in the IDL file. Remove overloads taking a pointer and 
        length, and replace it by having the main function take a specialized TypedList. TypedList
        allows the bindings to pass the correct Variant type, but then the code to only think in
        terms of the data() and length() functions.

        * html/canvas/WebGLRenderingContextBase.idl:
        Remove [Custom] annotations and re-order/group to match the spec. Update types of uniform*fv/iv
        functions to take typedef'd unions.

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

        :active and :hover states may not be updated across slots
        https://bugs.webkit.org/show_bug.cgi?id=166881
        <rdar://problem/29944582>

        Reviewed by Antti Koivisto.

        The bug was caused by updateHoverActiveState not updating :hover and :active states on elements
        when nodes are assigned to slots because they were walking up the tree using parentOrShadowHostElement
        and parentNode. Fixed the bug by using parentElementInComposedTree instead since :hover and :active
        states need to be updated in accordance with the render tree, which is created from the "flat tree"
        or the "composed tree" in WebKit's terminology (this is old terminology in the spec).

        Tests: fast/shadow-dom/clear-active-state-in-shadow.html
               fast/shadow-dom/hover-over-nested-slotted-content.html

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState): Fixed the bug.
        * dom/Node.cpp:
        (WebCore::Node::parentElementInComposedTree): Added.
        * dom/Node.h:

2017-01-10  Keith Rollin  <krollin@apple.com>

        Missing logging in IconLoader::startLoading
        https://bugs.webkit.org/show_bug.cgi?id=166904

        Reviewed by Sam Weinig.

        The LOG_ERROR in startLoading references 'resourceRequest', which has
        been WTF::Moved as part of a preceding function call. As such, the
        logging statement doesn't print out a possibly useful URL. Fix this by
        making a copy of the URL before it's affected by the Move.

        No new tests -- change only affects logging code.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):

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

        Implement "proximity" scroll snapping
        https://bugs.webkit.org/show_bug.cgi?id=135994
        <rdar://problem/18162418>

        Reviewed by Dean Jackson.

        Adds support for proximity scroll snapping. To do this, we introduce scroll offset ranges, a list of scroll
        offset ranges that are plumbed alongside the list of scroll snap offsets. Similar to a snap offset, a snap
        offset range contains scroll offsets on which scrolling is allowed to come to a rest within a scroll snapping
        container. However, unlike normal snap offsets, scrolling may only come to rest within a snap offset range if
        the predicted scroll offset already lies within the range. The new algorithm for selecting a target scroll snap
        position given a destination offset is now:

        -   If the scroll destination lies within a snap offset range, return the scroll destination
        -   Otherwise, compute the nearest lower/upper snap offsets and lower/upper snap offset ranges
        -   If scrolling ended with no velocity, return the nearest snap offset
        -   If scrolling ended with positive velocity, choose the upper snap offset only if there is no snap offset
            range in between the scroll destination and the snap offset; else, choose the lower snap offset
        -   If scrolling ended with negative velocity, choose the lower snap offset only if there is no snap offset
            range in between the scroll destination and the snap offset; else, choose the upper snap offset

        The extra rule accounting for scroll offset ranges in between the scroll destination and a potential snap offset
        handles the corner case where the user scrolls with momentum very lightly away from a snap offset, such that the
        predicted scroll destination is still within proximity of the snap offset. In this case, the regular (mandatory
        scroll snapping) behavior would be to snap to the next offset in the direction of momentum scrolling, but
        instead, it is more intuitive to return to the original snap position.

        We also move scrolling prediction logic into ScrollingMomentumCalculator and adopt the platform
        _NSScrollingMomentumCalculator's destinationOrigin property when computing the predicted scroll destination.
        Previously, we were simply multiplying by an empirically-derived constant to approximate the scroll destination,
        but now that we are supporting proximity scroll snapping, we need more exact scroll destinaton prediction in
        order to make sure that scrolling to a snap offset range feels natural.

        Tests: tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-then-proximity.html
               tiled-drawing/scrolling/scroll-snap/scroll-snap-proximity-mainframe.html
               tiled-drawing/scrolling/scroll-snap/scroll-snap-proximity-overflow.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapPropertiesWithFrameView):

        Make boilerplate changes to plumb lists of horizontal and vertical snap offset ranges alongside the lists of
        horizontal and vertical snap offsets.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::snapOffsetRangesToString):
        (WebCore::indicesOfNearestSnapOffsetRanges):
        (WebCore::indicesOfNearestSnapOffsets):
        (WebCore::adjustAxisSnapOffsetsForScrollExtent):
        (WebCore::computeAxisProximitySnapOffsetRanges):
        (WebCore::updateSnapOffsetsForScrollableArea):
        (WebCore::closestSnapOffset):

        Adjust the snap offset selection algorithm to take snap offset ranges into account. See above for more details.
        Additionally, augment snap offset update logic to emit snap offset ranges for proximity scroll snapping. To do
        this, we run the following steps on the final list of processed snap offsets:
        -   Compute the proximity distance, which (for now) is arbitrarily 0.3 * the length or width of the scroll snap
            port, depending on whether scroll snapping is taking place in the X or Y axis.
        -   For each pair of adjacent snap offsets, if they are more than 2 * proximity distance away from each other,
            emit a snap offset range starting from (lower snap offset + proximity distance) and ending on (upper snap
            offset + proximity distance).

        * page/scrolling/AxisScrollSnapOffsets.h:
        (WebCore::closestSnapOffset): Deleted.
        * page/scrolling/ScrollSnapOffsetsInfo.h:

        Introduce ScrollSnapOffsetsInfo, a struct which contains data relevant to scroll snapping. This includes
        vertical and horizontal snap offsets, as well as vertical and horizontal snap offset ranges. Snap offset ranges
        consist of a vector of ranges of scroll offsets.

        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingMomentumCalculator.cpp:
        (WebCore::projectedInertialScrollDistance):
        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
        (WebCore::ScrollingMomentumCalculator::setRetargetedScrollOffset):
        (WebCore::ScrollingMomentumCalculator::predictedDestinationOffset):
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::ScrollingMomentumCalculator::setPlatformMomentumScrollingPredictionEnabled):
        (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator):
        (WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
        (WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
        (WebCore::BasicScrollingMomentumCalculator::initializeSnapProgressCurve):
        * page/scrolling/ScrollingMomentumCalculator.h:
        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffset):
        (WebCore::ScrollingMomentumCalculator::retargetedScrollOffsetDidChange):

        Currently, the ScrollingMomentumCalculator is responsible for taking an initial position, initial velocity, and
        target position and animating the scroll offset from the initial to target position. Now, we refactor the
        ScrollingMomentumCalculator interface to no longer take a target offset upon initialization, and instead compute
        the predicted scroll destination given initial position and velocity; clients of the ScrollingMomentumCalculator
        then use this predicted scroll destination to compute a retargeted scroll offset and then call
        setRetargetedScrollOffset on the calculator, which sets up an animation curve to the new retargeted offset. This
        allows both the AppKit-based scrolling momentum calculator and platform-invariant momentum calculator to be used
        interchangeably, while still allowing them to compute a destination offset from initial parameters of the
        scroll.

        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setHorizontalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::setVerticalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::setHorizontalSnapOffsetRanges):
        (WebCore::ScrollingStateScrollingNode::setVerticalSnapOffsetRanges):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::horizontalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::verticalSnapOffsets):
        (WebCore::ScrollingStateScrollingNode::horizontalSnapOffsetRanges):
        (WebCore::ScrollingStateScrollingNode::verticalSnapOffsetRanges):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::dumpProperties):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::horizontalSnapOffsets):
        (WebCore::ScrollingTreeScrollingNode::verticalSnapOffsets):
        (WebCore::ScrollingTreeScrollingNode::horizontalSnapOffsetRanges):
        (WebCore::ScrollingTreeScrollingNode::verticalSnapOffsetRanges):

        Add more boilerplate support for snap offset ranges.

        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::ScrollingMomentumCalculator::setPlatformMomentumScrollingPredictionEnabled):
        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::predictedDestinationOffset):
        (WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange):
        (WebCore::ScrollingMomentumCalculatorMac::animationDuration):
        (WebCore::ScrollingMomentumCalculatorMac::requiresMomentumScrolling):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):

        Hook into AppKit momentum scroll offset prediction.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::convertToLayoutUnits):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ensureSnapOffsetsInfo):
        (WebCore::ScrollableArea::horizontalSnapOffsets):
        (WebCore::ScrollableArea::horizontalSnapOffsetRanges):
        (WebCore::ScrollableArea::verticalSnapOffsetRanges):
        (WebCore::ScrollableArea::verticalSnapOffsets):
        (WebCore::ScrollableArea::setHorizontalSnapOffsets):
        (WebCore::ScrollableArea::setVerticalSnapOffsets):
        (WebCore::ScrollableArea::setHorizontalSnapOffsetRanges):
        (WebCore::ScrollableArea::setVerticalSnapOffsetRanges):
        (WebCore::ScrollableArea::clearHorizontalSnapOffsets):
        (WebCore::ScrollableArea::clearVerticalSnapOffsets):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::horizontalSnapOffsets): Deleted.
        (WebCore::ScrollableArea::verticalSnapOffsets): Deleted.
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::processWheelEventForScrollSnap):

        Fix an issue where initial scrolling velocity would be set to zero at the end of a drag gesture.

        (WebCore::ScrollController::updateScrollSnapState):
        (WebCore::ScrollController::updateScrollSnapPoints):
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset):
        * platform/cocoa/ScrollSnapAnimatorState.h:
        (WebCore::ScrollSnapAnimatorState::snapOffsetsForAxis):
        (WebCore::ScrollSnapAnimatorState::snapOffsetRangesForAxis):
        (WebCore::ScrollSnapAnimatorState::setSnapOffsetsAndPositionRangesForAxis):
        (WebCore::ScrollSnapAnimatorState::setSnapOffsetsForAxis): Deleted.
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset):
        (WebCore::projectedInertialScrollDistance): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::setPlatformMomentumScrollingPredictionEnabled):

        Add a new hook for layout tests to force scrolling momentum calculators to use the platform-invariant momentum
        scrolling prediction heuristic instead of the platform-dependent one.

        (WebCore::Internals::scrollSnapOffsets):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Make Event.initEvent()'s first parameter mandatory
        https://bugs.webkit.org/show_bug.cgi?id=166894

        Reviewed by Alex Christensen.

        Make Event.initEvent()'s first parameter mandatory. As per the
        specification, all parameters should be mandatory and we are
        currently dicussing the possibility of making them optional in
        the specification. However, having the first parameter optional
        makes little sense as it would set the event's type to the string
        "undefined".

        Test: fast/events/initEvent-parameters.html

        * dom/Event.idl:

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

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

        This change introduced JSC test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Implement JSSourceCode to propagate SourceCode in module
        pipeline"
        https://bugs.webkit.org/show_bug.cgi?id=166861
        http://trac.webkit.org/changeset/210537

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

        REGRESSION(r189555): ImageDocument title no longer includes the size of the image
        https://bugs.webkit.org/show_bug.cgi?id=166876
        <rdar://problem/29939970>

        Reviewed by Ryosuke Niwa.

        Add a code comment to clarify fix that was made in r210536.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):

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

        Add support for MediaKeys.generateRequest().
        https://bugs.webkit.org/show_bug.cgi?id=166880

        Reviewed by Xabier Rodriguez-Calvar.

        Test: media/encrypted-media/mock-MediaKeySession-generateRequest.html

        Implement MediaKeySession::generateRequest(). This requires some additions
        to CDM, CDMPrivate, and CDMInstance to support platform adoption and to
        implement mock support for testing. Additionally, add an InitDataRegistry
        object which can sanitize and extract key data from various initData types.
        (At the moment, only the "keyids" initData type is implemented.)

        Drive-by fixes: Change all instances of initDataType from String -> AtomicString.
        Add "const" flags to all CDMPrivate methods that might be called from a const
        reference.

        * CMakeLists.txt:
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::supportsInitDataType):
        (WebCore::CDM::sanitizeInitData):
        (WebCore::CDM::supportsInitData):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/InitDataRegistry.cpp: Added.
        (WebCore::extractKeyIDsKeyids):
        (WebCore::sanitizeKeyids):
        (WebCore::sanitizeCenc):
        (WebCore::extractKeyIDsCenc):
        (WebCore::sanitizeWebM):
        (WebCore::extractKeyIDsWebM):
        (WebCore::InitDataRegistry::shared):
        (WebCore::InitDataRegistry::InitDataRegistry):
        (WebCore::InitDataRegistry::sanitizeInitData):
        (WebCore::InitDataRegistry::extractKeyIDs):
        (WebCore::InitDataRegistry::registerInitDataType):
        * Modules/encryptedmedia/InitDataRegistry.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::messageEventName):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::enqueueMessage):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setServerCertificate):
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::addKeysToSessionWithID):
        (WebCore::MockCDMFactory::setSupportedDataTypes):
        (WebCore::MockCDM::supportsInitDataType):
        (WebCore::MockCDM::supportsConfiguration):
        (WebCore::MockCDM::supportsConfigurationWithRestrictions):
        (WebCore::MockCDM::supportsSessionTypeWithConfiguration):
        (WebCore::MockCDM::supportsRobustness):
        (WebCore::MockCDM::distinctiveIdentifiersRequirement):
        (WebCore::MockCDM::persistentStateRequirement):
        (WebCore::MockCDM::distinctiveIdentifiersAreUniquePerOriginAndClearable):
        (WebCore::MockCDM::supportsInitData):
        (WebCore::MockCDMInstance::setServerCertificate):
        (WebCore::MockCDMInstance::requestLicense):
        * testing/MockCDMFactory.h:
        (WebCore::MockCDMFactory::supportedDataTypes):
        (WebCore::MockCDMFactory::hasSessionWithID):
        (WebCore::MockCDMFactory::removeSessionWithID):
        (WebCore::MockCDMFactory::setSupportedDataTypes): Deleted.

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

        Add support for MediaKeys.createSession().
        https://bugs.webkit.org/show_bug.cgi?id=166796

        Reviewed by Eric Carlson.

        Test: media/encrypted-media/mock-MediaKeys-createSession.html

        Implement MediaKeys::createSession(). This requires some additions to
        CDM, CDMPrivate, and CDMInstance to support platform adoption and to
        implement mock support for testing. Because the CDMInstance will now
        be shared between MediaKeys and MediaKeySession, it cannot be a unique_ptr.
        Make CDMInterface ref-counted and store it as a Ref.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::createInstance):
        (WebCore::CDM::supportsSessions):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::create):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::sessionId):
        (WebCore::MediaKeySession::expiration):
        (WebCore::MediaKeySession::keyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySessionType.idl:
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        (WebCore::MediaKeys::createSession):
        * Modules/encryptedmedia/MediaKeys.h:
        (WebCore::MediaKeys::create):
        * Modules/encryptedmedia/MediaKeys.idl:

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

        Add support for MediaKeys.setServerCertificate()
        https://bugs.webkit.org/show_bug.cgi?id=166772

        Reviewed by Darin Adler.

        Test: media/encrypted-media/mock-MediaKeys-setServerCertificate.html

        Implement MediaKeys::setServerCertificate(). This requires some additions
        to CDM, CDMPrivate, and CDMInstance to support platform adoption and to
        implement mock support for testing.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::supportsServerCertificates):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setServerCertificate):
        * Modules/encryptedmedia/MediaKeys.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::supportsServerCertificates):
        (WebCore::MockCDMInstance::setServerCertificate):
        * testing/MockCDMFactory.h:
        (WebCore::MockCDMFactory::supportsServerCertificates):
        (WebCore::MockCDMFactory::setSupportsServerCertificates):
        * testing/MockCDMFactory.idl:

2017-01-10  Youenn Fablet  <youenn@apple.com>

        CachedScript cloning does not clone encodedSize
        https://bugs.webkit.org/show_bug.cgi?id=166865

        Reviewed by Darin Adler.

        Covered by updated test.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setBodyDataFrom): set encoded size based on being cloned resource.
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::setBodyDataFrom): Making use of CachedResource::setBodyDataFrom for complete cloning.

2017-01-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Remove the unused gReadyStateTimerInterval global from
        the MediaPlayerPrivateGStreamerMSE implementation file as it's only
        springing up a compiler warning.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:

2017-01-10  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] TextureMapperPlatformLayerProxy is constantly getting activated
        https://bugs.webkit.org/show_bug.cgi?id=166856

        Reviewed by Michael Catanzaro.

        When CoordinatedGraphicsLayer::setContentsNeedsDisplay() is called, currently with
        the threaded CoordinatedGraphics mode the platform layer is marked for synchronizing.
        This means that at flush-time this layer swaps the buffer of the wrapped platform
        layer and updates the layer state to indicate that the underlying
        TextureMapperPlatformLayerProxy object has to be activated on the composition thread.

        This current logic results in the TextureMapperPlatformLayerProxy object being
        reactivated for every display request that arrives via setContentsNeedsDisplay().
        This is pretty wasteful since this activation heap-allocates a RunLoop::Timer object
        which internally also locks up the GLib main context to attach a new source, and
        that's only after the source on the previous RunLoop::Timer was detached before
        that RunLoop::Timer was destroyed.

        To avoid this, CoordinatedGraphicsLayer::setContentsNeedsDisplay() sets a new flag,
        m_shouldUpdatePlatformLayer. During flush, this flag is checked in
        CoordinatedGraphicsLayer::updatePlatformLayer(), with the buffer swap performed in
        case it's set. CoordinatedGraphicsLayer::syncPlatformLayer() now only sets the
        platform layer proxy object for that layer's state.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::syncPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2017-01-10  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Use WTF::Function in TextureMapperPlatformLayerProxy
        https://bugs.webkit.org/show_bug.cgi?id=166853

        Reviewed by Michael Catanzaro.

        Use WTF::Function in the TextureMapperPlatformLayerProxy, instead of
        the std::function bloat.

        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::scheduleUpdateOnCompositorThread):
        (WebCore::TextureMapperPlatformLayerProxy::compositorThreadUpdateTimerFired):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2017-01-10  Zan Dobersek  <zdobersek@igalia.com>

        [TextureMapper] TextureMapperPlatformLayerProxy::swapBuffers() should hold the lock throughout invocation
        https://bugs.webkit.org/show_bug.cgi?id=166852

        Reviewed by Michael Catanzaro.

        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::swapBuffer): Append to previous buffer
        to the m_usedBuffers Vector while the object's lock is held. Everywhere else the
        m_usedBuffers Vector is used under the lock, no reason to not do the same here.

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

        Implement JSSourceCode to propagate SourceCode in module pipeline
        https://bugs.webkit.org/show_bug.cgi?id=166861

        Reviewed by Saam Barati.

        Now SourceOrigin is correctly propagated through the module pipeline.
        So the error reported by http/tests/security/contentSecurityPolicy/module-eval-blocked-expected.html
        is updated.

        * ForwardingHeaders/runtime/JSSourceCode.h: Added.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::resolveWithCallback):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::notifyFinished):

2017-01-09  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r189555): ImageDocument title no longer includes the size of the image
        https://bugs.webkit.org/show_bug.cgi?id=166876
        <rdar://problem/29939970>

        Reviewed by Tim Horton.

        ImageDocument title no longer included the size of the image after r189555.
        This is because Document::setTitle() is a no-op if the document does not
        have a <head> element. To address the issue, we now include a <head>
        element in ImageDocuments so that their title element properly gets added
        to it.

        Test: fast/images/imageDocument-title.html

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):

2017-01-09  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: newLogicalTop >= logicalTop in WebCore::RenderBlockFlow::getClearDelta
        https://bugs.webkit.org/show_bug.cgi?id=151202
        <rdar://problem/27711822>

        Reviewed by Myles C. Maxfield.

        FindNextFloatLogicalBottomAdapter uses LayoutUnit::max() to flag m_nextLogicalBottom uninitialized.        
        However LayoutUnit::max() can also be a valid value for m_nextLogicalBottom.
        FindNextFloatLogicalBottomAdapter::nextLogicalBottom() returns 0 instead of the actual value when
        it sees m_nextLogicalBottom uninitialized. In certain cases, it confuses the caller and we end up
        with a runaway loop.

        Test: fast/block/float/assert-when-line-has-not-enough-space-left.html

        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextShapeLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):

2017-01-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210531.

        This change broke the 32-bit macOS build and caused LayoutTest
        failures.

        Reverted changeset:

        "File scheme should not allow access of a resource on a
        different volume."
        https://bugs.webkit.org/show_bug.cgi?id=158552
        http://trac.webkit.org/changeset/210531

2017-01-09  Chris Dumez  <cdumez@apple.com>

        [iOS] Drop VNodeTracker
        https://bugs.webkit.org/show_bug.cgi?id=166868
        <rdar://problem/29937587>

        Reviewed by Andreas Kling.

        Drop VNodeTracker on iOS. This was introduced a while back to try and
        address vnode exhaustion issues in long running page load tests.
        However, there was no evidence that the VNodeTracker functionality
        helped so there is little point in keeping the extra code complexity.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/SharedBuffer.h:
        * platform/VNodeTracker.cpp: Removed.
        * platform/VNodeTracker.h: Removed.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/cocoa/VNodeTrackerCocoa.cpp: Removed.

2017-01-09  Brent Fulgham  <bfulgham@apple.com>

        File scheme should not allow access of a resource on a different volume.
        https://bugs.webkit.org/show_bug.cgi?id=158552
        <rdar://problem/15307582>

        Reviewed by Alex Christensen.

        Revise SecurityOrigin to prevent files from one storage device (volume) from accessing content
        on a different storage device (volume) unless universal access is enabled.

        Pass the current file device as part of the NSURLRequest so that CFNetwork can reject loads
        where the device changes in the midst of a load.

        Also properly reflect that SecurityOrigin is never null by passing as a reference,
        rather than as a pointer.

        Tests: Tools/TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess): Pass argument as reference.
        (WebCore::SecurityOrigin::passesFileCheck): Add check that file URLs refer to files in
        the same storage volume.
        (WebCore::SecurityOrigin::canDisplay): Add check that files share the same volume.
        (WebCore::SecurityOrigin::isSameSchemeHostPort): Pass argument as reference.
        * page/SecurityOrigin.h:
        * platform/FileSystem.cpp:
        (WebCore::filesHaveSameVolume): Added.
        * platform/FileSystem.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): If loading a file URL, tell CFNetwork
        the storage device at the time of the start of the load so we can trigger a failure if this
        changes during the load operation.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileDeviceId): Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileDeviceId): Added.

2017-01-09  Tim Horton  <timothy_horton@apple.com>

        Unindenting text inside a blockquote can result in the text being reordered
        https://bugs.webkit.org/show_bug.cgi?id=166813

        Reviewed by Darin Adler and Ryosuke Niwa.

        Test: editing/execCommand/unindent-nested-blockquote-with-inner-div.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        Start splitting the tree at the beginning of the content being unindented,
        not at the containing block flow element, which could e.g. contain other
        elements (or even other blockquotes).

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

        [JSC] Prototype dynamic-import
        https://bugs.webkit.org/show_bug.cgi?id=165724

        Reviewed by Saam Barati.

        We do not set a handler for import for now.
        So dynamic import feature is only enabled in the JSC shell right now.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2017-01-09  Youenn Fablet  <youennf@gmail.com>

        Merging ThreadableLoader redundant options on filtering responses

        Merge OpaqueResponseBodyPolicy and ResponseFilteringPolicy ThreadableLoader options
        https://bugs.webkit.org/show_bug.cgi?id=166843

        Reviewed by Darin Adler.

        Covered by existing tests.

        Removing OpaqueResponseBodyPolicy option.
        When ResponseFilteringPolicy is set to Enable, the body is filtered out in DocumentThreadableLoader.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse): Implementing body filtering based on ResponseFilteringPolicy option.
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::LoaderTaskOptions::LoaderTaskOptions):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2017-01-09  Daniel Bates  <dabates@apple.com>

        Evaluating window named element may return wrong result
        https://bugs.webkit.org/show_bug.cgi?id=166792
        <rdar://problem/29801059>

        Reviewed by Chris Dumez.

        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::jsDOMWindowPropertiesGetOwnPropertySlotNamedItemGetter):

2017-01-09  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r178955): Touching Settings.in doesn't cause JSInternalSettingsGenerated.cpp to be updated on first build
        https://bugs.webkit.org/show_bug.cgi?id=166814

        Reviewed by Darin Adler.

        Stop using .INTERMEDIATE in DerivedSources.make was it seems to break dependency
        chains for some reason. We started using .INTERMEDIATE for scripts that generate
        several targets when run a single time. It avoided running the script several
        times (once per target) unnecessarily, and fixed issues with parallel builds.

        To address the same issue without using .INTERMEDIATE, we now use pattern rules
        (i.e. rules that have '%'). As per the documentation [1]:
        "Pattern rules may have more than one target. Unlike normal rules, this does not
         act as many different rules with the same prerequisites and recipe. If a pattern
         rule has multiple targets, make knows that the rule’s recipe is responsible for
         making all of the targets. The recipe is executed only once to make all the
         targets".

         We are therefore solving the same problem as with .INTERMEDIATE. However, I have
         confirmed that using pattern rules does not break dependency chains. For example,
         modifying Settings.in re-generates both InternalSettingsGenerated.idl *and*
         JSInternalSettingsGenerated.cpp.

         [1] https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html#Pattern-Intro

        * DerivedSources.make:

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

        Unreviewed, rolling out r210493 and r210495.
        https://bugs.webkit.org/show_bug.cgi?id=166842

        Causes makeprops.pl to run on every build (Requested by smfr
        on #webkit).

        Reverted changesets:

        "Avoid triggering rebuilds for minor changes of
        CSSProperties.json"
        https://bugs.webkit.org/show_bug.cgi?id=166810
        http://trac.webkit.org/changeset/210493

        "Avoid triggering rebuilds for minor changes of
        CSSProperties.json"
        https://bugs.webkit.org/show_bug.cgi?id=166810
        http://trac.webkit.org/changeset/210495

2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Should support key and code properties on keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=166759

        Reviewed by Carlos Garcia Campos.

        This change fixes a bunch of tests which are currently failing, such as:
        - fast/events/arrow-keys-on-body.html
        - fast/events/constructors/keyboard-event-constructor.html
        - fast/events/key-events-in-input-button.html
        - fast/events/key-events-in-input-text.html
        - fast/events/keyboardevent-code.html
        - fast/events/keyboardevent-key.html

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForGdkKeyCode): match web key value
        to GDK key symbol.
        (WebCore::PlatformKeyboardEvent::keyCodeForHardwareKeyCode): match web key code
        to hardware code as reported by GDK.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): add web key value and
        code to the keyboard event upon creation.

2017-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess from WebKitGtk+ 2.15.2 SIGSEGVs in std::unique_ptr<SoupBuffer, WTF::GPtrDeleter<SoupBuffer> >::get() const () at /usr/include/c++/6/bits/unique_ptr.h:305
        https://bugs.webkit.org/show_bug.cgi?id=165848

        Reviewed by Michael Catanzaro.

        In r208881 several locks were added to ImageDecoder to prevent frameBufferAtIndex() from being called by multiple
        threads at the same time, but I forgot isSizeAvailable() also calls frameBufferAtIndex(). However, what we
        really need to protect is the GIFImageDecoder, to never allow decoding from more than one thread at the same
        time. This patch reverts r208881 and adds a lock to GIFImageDecoder::decode() instead.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::frameIsCompleteAtIndex):
        (WebCore::ImageDecoder::frameDurationAtIndex):
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:

2017-01-09  Alejandro G. Castro  <alex@igalia.com>

        [OWR] Unskip fast/mediastream/MediaStream-video-element-track-stop.html
        https://bugs.webkit.org/show_bug.cgi?id=165316

        Reviewed by Philippe Normand.

        Fixed the ended support of the video element in the OWR player and
        fixed the videoTracks support. Now the OW player properly adds and
        removes the audio and video tracks. Added the getSettings support
        to the mediastream interface. Solved also the size handling in
        some of the enable/muted situations.

        Unskipping fast/mediastream/MediaStream-video-element-track-stop.html.

        * platform/GStreamer.cmake: Added the new
        RealtimeMediaSourceOwr.cpp with the new code handling the
        settings.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::~MediaPlayerPrivateGStreamerOwr):
        Release the new video and audio maps that creates a relationship
        of the mediastream tracks with the mediatracks of the video element.
        (WebCore::MediaPlayerPrivateGStreamerOwr::play): Set ended to
        false when we start playing.
        (WebCore::MediaPlayerPrivateGStreamerOwr::load): Create the media
        tracks to the player so that the videoTracks API returns it, and
        add an entry in the map to be able to restore it using the
        mediastream track.
        (WebCore::MediaPlayerPrivateGStreamerOwr::disableMediaTracks):
        Move some part of the stop function to this one in order to use it
        in pause method and avoid changing the video selection in that
        case.
        (WebCore::MediaPlayerPrivateGStreamerOwr::stop): Now we call the
        function disableMediaTracks and we also change teh selected
        videoTrack.
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded): For
        videoTrack reset the size and the selected element. In case there
        is no media playing we Make sure we set the ended variable to true
        and call the timeChange to modify the state of the player.
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged):
        Handle properly the situation when the user changed the enabled
        value, we disable the media.
        (WebCore::MediaPlayerPrivateGStreamerOwr::setSize): Modify the
        size of the source.
        (WebCore::MediaPlayerPrivateGStreamerOwr::naturalSize): Overrided
        to make sure we return a size even when the sample is not ready
        for gst.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
        Added the ended attribute and the maps.
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::createMutedRemoteSource): Use the new
        realtime video and audio sources classes, this new classes
        implement the settings of each type of media element.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        Use the new audio and video source classes instead of the general
        one in order to handle the settings properly.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.cpp: Added
        (WebCore::RealtimeMediaSourceOwr::settings): Initialize using the
        subclass and return the new currentSettings attribute.
        (WebCore::RealtimeMediaSourceOwr::supportedConstraints): Call the
        subclass initialization of the supportedSettings.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        (WebCore::RealtimeMediaSourceOwr::initializeSettings): Added to
        initialize the settings before returning the value. Implemented in
        the subclass.
        (WebCore::RealtimeMediaSourceOwr::initializeSupportedConstraints):
        Added to initialize the supported settings of the
        media. Implemented in the subclass.
        (WebCore::RealtimeMediaSourceOwr::settings): Moved to the cpp
        file, implemented using the initialize functions of the subclass
        * platform/mediastream/openwebrtc/RealtimeVideoSourceOwr.h: Added
        this new class to handle the settings of the video elements. The
        class initializes the settings and the supportedSettings.
        * platform/mediastream/openwebrtc/RealtimeAudioSourceOwr.h: Added
        this new class to handle the settings of the audio elements. The
        class initializes the settings and the supportedSettings.

2017-01-08  Konstantin Tokarev  <annulen@yandex.ru>

        Introduce CPU(X86_SSE2) instead of various SSE2 checks
        https://bugs.webkit.org/show_bug.cgi?id=166808

        Reviewed by Michael Catanzaro.

        Now copyLCharsFromUCharSource can use SSE2 implementation on non-Darwin
        OSes, and all SSE2 code paths are available for MSVC on x86 if /arch:SSE2
        or higher is enabled, and for MSVC on x86_64.

        No new tests needed.

        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::process):
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsma):
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):
        (WebCore::VectorMath::vmul):
        (WebCore::VectorMath::zvmul):
        (WebCore::VectorMath::vsvesq):
        (WebCore::VectorMath::vmaxmgv):

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

        Avoid triggering rebuilds for minor changes of CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=166810

        Post-review cleanup suggested by Darin Adler.

        * css/makeprop.pl:

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

        Avoid triggering rebuilds for minor changes of CSSProperties.json
        https://bugs.webkit.org/show_bug.cgi?id=166810

        Reviewed by Daniel Bates.

        We expect to make lots of metadata-related changes to CSSProperties.json, and
        these should not trigger rebuilds.
        
        Have makeprop.pl write to temporary files first, then only replace the generated
        files if the contents differ.

        * css/makeprop.pl:
        (replaceFileIfChanged):

2017-01-06  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from "inspector", "platform/sql", and "platform/text"
        https://bugs.webkit.org/show_bug.cgi?id=166797

        Reviewed by Alex Christensen.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify): Pass a reference instead of a pointer.

        * dom/Document.cpp:
        (WebCore::canonicalizedTitle): Map backslashes to currency symbols inside the
        existing loop through the characters instead of calling a function confusingly
        named "displayBuffer" to do it. More straightforward, possibly more efficient,
        one less function.
        (WebCore::Document::displayStringModifiedByEncoding): Call replace to map
        backslashes to currency symbols instead of calling a special displayString
        function. There was no real benefit to using that function; the String::replace
        function has all the same optimizations, and this was also the only call site.

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::invokeRequest): Pass a reference instead of a pointer.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage): Call createEmptyEditorClient instead
        of using the class EmptyEditorClient directly.

        * loader/EmptyClients.cpp: Moved most of the empty clients here from the header.
        Also made lots more things private.
        (WebCore::createEmptyEditorClient): Added.
        (WebCore::emptyDiagnosticLoggingClient): Added.
        * loader/EmptyClients.h: Updated for above changes. Made more things private.

        * page/DatabaseProvider.h: Removed unneeded include.
        * page/MainFrame.cpp: Ditto.

        * page/Page.cpp:
        (WebCore::Page::diagnosticLoggingClient): Call emptyDiagnosticLoggingClient
        instead of using the class EmptyDiagnosticLoggingClient directly.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setAuthorizer): Take a reference instead of a
        PassRefPtr.
        * platform/sql/SQLiteDatabase.h: Updated for above.

        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::BidiContext): Moved this function here from the header.
        (WebCore::copyContextAndRebaselineLevel): Return a Ref instead of a PassRefPtr,
        and take a reference rather than a raw pointer.
        (WebCore::BidiContext::copyStackRemovingUnicodeEmbeddingContexts): Return a
        Ref instead of a PassRefPtr.
        * platform/text/BidiContext.h: Updated for the above changes.

        * platform/text/BidiResolver.h: Simplify initialization, use more references,
        auto, modern for loops, refer to derived class as that rather than the non-C++
        term subclass.

        * platform/text/TextCheckerClient.h: Changd argument from PassRefPtr to a
        reference.

        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::displayString): Deleted.
        (WebCore::TextEncoding::displayBuffer): Deleted.

        * rendering/RootInlineBox.cpp: Style tweaks and use a modern for loop.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Call createEmptyEditorClient instead
        of using the class EmptyEditorClient directly.

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

        [QuickLook] Update quicklook test expectations
        https://bugs.webkit.org/show_bug.cgi?id=166798
        <rdar://problem/26477735>

        Reviewed by Alex Christensen.

        QuickLook uses UUIDs to generate x-apple-ql-id: URLs, so they will differ each time a
        document is previewed. Since these URLs are included in QuickLook layout test results,
        WebArchiveDumpSupport needs to replace them with predictable values when dumping a web
        archive.

        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::quickLookURLReplacements): Created a static Vector of CFStringRef pairs
        to store x-apple-ql-id: URLs and their replacement values.
        (WebCoreTestSupport::normalizeWebResourceURL): If the URL starts with “x-apple-ql-id://”,
        replace the text between the scheme and the file extension with “resource”. Store the
        original URL along with its replacement in quickLookURLReplacements().
        (WebCoreTestSupport::createXMLStringFromWebArchiveData): Replaced all QuickLook URLs in the
        final XML text with their replacement URLs. 

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

        [QuickLook] Consolidate usage of QuickLookHandle into SubresourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=166713

        Reviewed by Alex Christensen.

        QuickLook conversion was originally implemented by intercepting document loads at the
        ResourceHandle level, with separate paths for NSURLConnection and CFURLConnection handles.
        When QuickLook was ported to WebKit2, a third path was added in WebResourceLoader.
        
        This change removes these three separate paths and implements a single conversion path in
        SubresourceLoader, where QuickLook can intercept document loads regardless of the networking
        API being used.

        No change in behavior. Covered by existing tests.

        * loader/ResourceLoader.h: Removed override from didCreateQuickLookHandle() since this
        function is no longer declared in ResourceHandleClient.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::shouldCreateQuickLookHandleForResponse): Added a helper
        function to check if a QuickLookHandle should be created for a response.
        (WebCore::SubresourceLoader::didReceiveResponse): Created a QuickLookHandle if necessary
        and stored it in the DocumentLoader.
        (WebCore::SubresourceLoader::didReceiveData): If there is a QuickLookHandle, call
        QuickLookHandle::didReceiveBuffer(), and return early if QuickLook is converting.
        (WebCore::SubresourceLoader::didReceiveBuffer): Ditto for QuickLookHandle::didReceiveBuffer().
        (WebCore::SubresourceLoader::didFinishLoading): Ditto for QuickLookHandle::didFinishLoading().
        (WebCore::SubresourceLoader::didFail): If there is a QuickLookHandle, call QuickLookHandle::didFail().
        * loader/SubresourceLoader.h: Declared shouldCreateQuickLookHandleForResponse().
        * loader/ios/QuickLook.h: Removed declarations used by the ResourceHandles and declared new
        functions used by SubresourceLoader.
        * loader/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::QuickLookHandle): Removed the NSURLConnection * parameter, since
        we’d now always pass nil.
        (WebCore::QuickLookHandle::create): Removed create() functions used by ResourceHandles.
        (WebCore::QuickLookHandle::didReceiveData): Added. Copies the data into an NSData, wraps it
        in an NSArray, and passes it to didReceiveDataArray().
        (WebCore::QuickLookHandle::didReceiveBuffer): Added. Creates a NSArray of NSData from the
        SharedBuffer and passes it to didReceiveDataArray().
        (-[WebQuickLookHandleAsDelegate initWithConnectionDelegate:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didReceiveDataArray:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didReceiveData:lengthReceived:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connectionDidFinishLoading:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didFailWithError:]): Deleted.
        (-[WebQuickLookHandleAsDelegate detachHandle]): Deleted.
        (WebCore::QuickLookHandle::cfResponse): Deleted.
        (WebCore::QuickLookHandle::didReceiveDataArray): Passed dataArray to m_converter and m_client.
        * platform/SharedBuffer.h: Const-qualified createNSDataArray().
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::createNSDataArray): Ditto.
        * platform/network/ResourceHandle.cpp: Stopped including QuickLook.h.
        * platform/network/ResourceHandle.h: Removed m_quickLook.
        (WebCore::ResourceHandle::quickLookHandle): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didCreateQuickLookHandle): Deleted.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse): Removed QuickLook code.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData): Ditto.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading): Ditto.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFail): Ditto.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::setQuickLookHandle): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Removed QuickLook code.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]): Ditto.

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

        Ensure navigation only allowed for documents not in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=166773
        <rdar://problem/29762809>

        Reviewed by Brent Fulgham.

        It is wise to ensure that navigation is only allowed when initiated from a document that
        is not in- or about to be put in- the page cache. Such a navigation would surprise a
        person that had navigated away from the initiating document among other issues.

        * dom/Document.cpp:
        (WebCore::Document::canNavigate): Only allow navigation if the document is not in the
        page cache.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick): Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::handleClick): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Assert triggering event's document is not in the
        page cache.
        (WebCore::FrameLoader::submitForm): Allow submission if the document is not in the
        page cache.
        (WebCore::FrameLoader::loadFrameRequest): Assert triggering event's document is not in
        the page cache.
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultEventHandler): Only allow navigation if the document is
        not in the page cache.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Ditto.

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

        Crash in WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeWillChangeAtTime(const MediaTime&, const FloatSize&)::block_invoke
        https://bugs.webkit.org/show_bug.cgi?id=166738

        Reviewed by Eric Carlson.

        AVFoundation can potentially call the same boundary time observer multiple times, and
        in that case, it's possible that the observer queue will be empty when we attempt
        to remove the first item from the queue. There's an ASSERT() in Deque for this case,
        but we need to explicitly protect against this case.

        Drive-by fix: Explicitly unregister the observer before releasing it.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeWillChangeAtTime):

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

        REGRESSION(r208886) Web Inspector: Toggling CSS Properties in Styles Sidebar (comment / uncomment)
        https://bugs.webkit.org/show_bug.cgi?id=166786
        <rdar://problem/29767412>

        Reviewed by Brian Burg.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateAllProperties):
        Match earlier behavior and don't send the frontend information about
        disabled (commented out) properties. Follow-up later to send this
        information when implementing proper handling of them in the frontend.

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

        [WebIDL] Remove custom bindings from CanvasRenderingContext2D
        https://bugs.webkit.org/show_bug.cgi?id=166793

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        Move JSCanvasRenderingContext2DCustom.cpp to the GC only group.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS): Deleted.
        (WebCore::toHTMLCanvasStyle): Deleted.
        (WebCore::JSCanvasRenderingContext2D::strokeStyle): Deleted.
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle): Deleted.
        (WebCore::JSCanvasRenderingContext2D::fillStyle): Deleted.
        (WebCore::JSCanvasRenderingContext2D::setFillStyle): Deleted.
        Remove non-GC related custom bindings.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::toStyle):
        (WebCore::CanvasRenderingContext2D::strokeStyle):
        (WebCore::CanvasRenderingContext2D::fillStyle):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        Made existing setStrokeStyle/setFillStyle functions (which take CanvasStyle's) 
        private, and implemented new ones that operate on Variants, matching the spec.

2017-01-05  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from "rendering" directory, other improvements
        https://bugs.webkit.org/show_bug.cgi?id=166717

        Reviewed by Sam Weinig.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue): Use auto.
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image): Use auto. Pass references.
        (WebCore::CSSFilterImageValue::filterImageChanged): Use modern for loop.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertShapeValue): Use overloaded
        ShapeValue::create function instead of differently named functions.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Ditto.

        * platform/graphics/filters/Filter.h: Added a protected constructor that takes
        a filter resolution.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer): Use new constructor so
        we don't have to call setFilterResolution and can initialize m_sourceGraphic.
        (WebCore::FilterEffectRenderer::create): Moved here from the header.
        (WebCore::FilterEffectRenderer::buildReferenceFilter): Take references and not
        PssRefPtr. Use auto and references.
        (WebCore::FilterEffectRenderer::build): Take a reference. Updated to work with
        references rather than pointer. Use auto.
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded): Use early return.
        (WebCore::FilterEffectRenderer::clearIntermediateResults): Use modern for loop.
        (WebCore::FilterEffectRenderer::apply): Use references.
        (WebCore::FilterEffectRenderer::output): Moved here from header.
        (WebCore::FilterEffectRenderer::setMaxEffectRects): Moved here from header.
        (WebCore::FilterEffectRenderer::outputRect): Moved here from header.
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect): Take references.
        (WebCore::FilterEffectRendererHelper::beginFilterEffect): Use auto and references.
        (WebCore::FilterEffectRendererHelper::applyFilterEffect): Ditto.
        * rendering/FilterEffectRenderer.h: Updated for the above changes. Made a lot more
        things private.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::filterPainter): Added. Helper so setupFilters does not
        have to do things twice.
        (WebCore::RenderLayer::hasFilterThatIsPainting): Updated to call filterPainter.
        (WebCore::RenderLayer::setupFilters): Ditto.
        (WebCore::RenderLayer::calculateClipRects): Pass reference.
        * rendering/RenderLayer.h: Updated for the above changes.

        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::clone): Use auto.
        (WebCore::ImageContentData::createContentRenderer): Updated for reference.
        * rendering/style/ContentData.h: Use Ref&& instead of PassRefPtr. Made more
        things private.

        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::defaultData): Made this a static member so it can
        get at the now-private class NinePieceImage::Data.
        (WebCore::NinePieceImage::NinePieceImage): Use RefPtr&& instead of PassRefPtr.
        Use construction instead of calling m_data.access() over and over again.
        (WebCore::NinePieceImage::Data::Data): Renamed from NinePieceImageData.
        Moved initialization to class definition. Added a new overload for the normal
        creation case.
        (WebCore::NinePieceImage::Data::create): Ditto.
        (WebCore::NinePieceImage::Data::copy): Ditto.
        (WebCore::NinePieceImage::Data::operator==): Ditto.
        * rendering/style/NinePieceImage.h: Cut down on includes. Moved the class
        named NinePieceImageData in to become the private struct NinePieceImage::Data.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent): Pass Ref&& instead of RefPtr&& when
        creating ImageContentData.

        * rendering/style/ShapeValue.cpp:
        (WebCore::ShapeValue::isImageValid): Tighten up by using data member directly
        and using a local variabel.
        (WebCore::pointersOrValuesEqual): Deleted.
        (WebCore::ShapeValue::operator==): Use arePointingToEqualData instead the
        above deleted function template. Wrote as a single return statement for clarity.
        * rendering/style/ShapeValue.h: Changed all the create function names to just
        create, using overloading instead of separate names. Use Ref&& instead of PassRefPtr.
        Removed unused constructor that took a type but no data.

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

        Regression(r189230): DOM Callbacks may use wrong global object
        https://bugs.webkit.org/show_bug.cgi?id=166784

        Reviewed by Mark Lam.

        DOM Callbacks could end up using the wrong global object after r189230
        because we were getting the globalObject from the callback object
        instead of the one at the point the callback object was passed in by
        JavaScript. This patch fixes the issue.

        Test: fast/frames/frame-window-as-callback.html

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::globalObject):
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackDataStrong::JSCallbackDataStrong):
        (WebCore::JSCallbackDataStrong::callback):
        (WebCore::JSCallbackDataStrong::invokeCallback):
        (WebCore::JSCallbackDataWeak::JSCallbackDataWeak):
        (WebCore::JSCallbackDataWeak::callback):
        (WebCore::JSCallbackDataWeak::invokeCallback):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementationContent):

2017-01-06  Andy Estes  <aestes@apple.com>

        [Cocoa] Consolidate duplicate copies of WebArchiveDumpSupport in DRT and WKTR into WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=166789

        Reviewed by Alex Christensen.

        There were duplicate implementations of WebArchiveDumpSupport in DumpRenderTree and
        WebKitTestRunner. This change consolidates these into a single implementation in
        WebCoreTestSupport.

        * PlatformMac.cmake: Added WebArchiveDumpSupport.mm to WebCoreTestSupport.
        * WebCore.xcodeproj/project.pbxproj: Ditto. Also made WebArchiveDumpSupport.h a Private header.
        * platform/spi/cf/CFNetworkSPI.h: Moved CFNetwork forward declarations from
        WebArchiveDumpSupport to here.
        * testing/cocoa/WebArchiveDumpSupport.h: Added.
        * testing/cocoa/WebArchiveDumpSupport.mm: Merged WebArchiveDumpSupport.cpp and
        WebArchiveDumpSupport{Cocoa,Mac}.mm into a single file.

2017-01-06  Tim Horton  <timothy_horton@apple.com>

        Minor cleanups to IndentOutdentCommand and related code
        https://bugs.webkit.org/show_bug.cgi?id=166791

        Reviewed by Simon Fraser.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::IndentOutdentCommand):
        (WebCore::IndentOutdentCommand::outdentRegion):
        * editing/IndentOutdentCommand.h:
        (WebCore::IndentOutdentCommand::create):
        Remove the unused m_marginInPixels and fix the copyright header.

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

        Fix WinCairo build after r210319.
        https://bugs.webkit.org/show_bug.cgi?id=166635

        * DerivedSources.cpp:
        A toJS call was ambiguous, but only if the generated IndexedDB bindings are compiled all-in-one in DerivedSources.cpp.
        Compiling these few files separately (which happens automatically in the CMake build) fixes the build and won't increase
        the total object files beyond MSVC's current 2GB limit.
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::JSWebGLRenderingContextBaseOwner::isReachableFromOpaqueRoots):
        Unknown was an ambiguous symbol.  It's also defined in winioctl.h.

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

        Text highlight causes Yoon Gothic webfont to reflow.
        https://bugs.webkit.org/show_bug.cgi?id=166753

        Reviewed by Darin Adler.

        Add word-break: keep-all; support for CJK and breaking NBSPs.

        Add test later. Need to figure out what font file to use.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextBreakablePosition): Use BreakingContext's helper functions
        to figure out the next breakable position.
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Add some missing longhand properties to CSSComputedStyleDeclaration and fix default values
        https://bugs.webkit.org/show_bug.cgi?id=166674
        <rdar://problem/6026159>

        Reviewed by Darin Adler.

        * css/CSSComputedStyleDeclaration.cpp:
        Add some missing longhand properties to the list of all longhand properties.

        (WebCore::counterToCSSValue):
        The default value for counter-increment and counter-reset should be "none"
        not the empty string.

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

        [Form Validation] "character" in maxlength validation message should be singular when maxlength is 1
        https://bugs.webkit.org/show_bug.cgi?id=166712
        <rdar://problem/29872292>

        Reviewed by Darin Adler.

        Fix validation message to use singular form of "character" when maxLength value is 1.

        Test: fast/forms/validation-message-maxLength.html

        * English.lproj/Localizable.strings:
        * English.lproj/Localizable.stringsdict: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * extract-localizable-strings.pl:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::localizedNString):
        (WebCore::localizedString):
        (WebCore::validationMessageTooLongText):

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

        Add support for MediaKeySystemAccess.createMediaKeys()
        https://bugs.webkit.org/show_bug.cgi?id=166749

        Reviewed by Eric Carlson.

        Test: media/encrypted-media/mock-MediaKeySystemAccess.html

        Implement MediaKeySystemAccess::createMediaKeys(). This requires some
        additions to CDM, CDMPrivate, and a new interface CDMInstance to support
        eventual platform adoption and to implement mock support for testing.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::loadAndInitialize):
        (WebCore::CDM::createInstance):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMInstance.h:
        (WebCore::CDMInstance::~CDMInstance):
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        * Modules/encryptedmedia/MediaKeys.h:
        (WebCore::MediaKeys::create):
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::tryNextSupportedConfiguration):
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::MockCDM):
        (WebCore::MockCDM::createInstance):
        (WebCore::MockCDM::loadAndInitialize):
        (WebCore::MockCDMInstance::MockCDMInstance):
        (WebCore::MockCDMInstance::initializeWithConfiguration):
        (WebCore::MockCDMInstance::setDistinctiveIdentifiersAllowed):
        (WebCore::MockCDMInstance::setPersistentStateAllowed):
        * testing/MockCDMFactory.h:
        (WebCore::MockCDMFactory::canCreateInstances):
        (WebCore::MockCDMFactory::setCanCreateInstances):
        (WebCore::MockCDM::factory):
        * testing/MockCDMFactory.idl:

2017-01-06  Andreas Kling  <akling@apple.com>

        Give RenderObject a Page& getter.
        <https://webkit.org/b/166735>

        Reviewed by Darin Adler.

        The render tree should now only ever be live while in a Frame that's connected to a Page.
        Hence we can give RenderObject a Page& getter and simplify a lot of code that previously
        had to get the Page from Document (or Frame) and perform null checks on it.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree): Assert that the Page is present when we tear the render tree down.

        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage): Assert that there's no render tree when we're about to detach from the Page.
        Also added a comment explaining the two main ways that render trees die.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::page): Added. So neat!

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::estimatedLoadingProgress):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::chooseInterpolationQuality):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::layout):
        (WebCore::RenderAttachment::baselinePosition):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::setupWheelEventTestTrigger):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::shouldUnavailablePluginMessageBeButton):
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        (WebCore::RenderEmbeddedObject::getCursor):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::isActive):
        (WebCore::RenderLayer::didStartScroll):
        (WebCore::RenderLayer::didEndScroll):
        (WebCore::RenderLayer::didUpdateScroll):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::shouldAggressivelyRetainTiles):
        (WebCore::RenderLayerBacking::shouldTemporarilyRetainTileCohorts):
        (WebCore::RenderLayerBacking::useGiantTiles):
        (WebCore::RenderLayerBacking::verifyNotPainting):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::scrollingCoordinatorFromLayer): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::updateScrollingLayerWithClient):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush):
        (WebCore::RenderLayerCompositor::notifyFlushBeforeDisplayRefresh):
        (WebCore::RenderLayerCompositor::layerTiledBackingUsageChanged):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::pageScaleFactor):
        (WebCore::RenderLayerCompositor::zoomedOutPageScaleFactor):
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers):
        (WebCore::RenderLayerCompositor::scrollingCoordinator):
        (WebCore::RenderLayerCompositor::graphicsLayerFactory):
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor):
        (WebCore::RenderLayerCompositor::page):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderListBox.cpp:
        (WebCore::setupWheelEventTestTrigger):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::isActive):
        (WebCore::RenderListBox::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::theme):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::page):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::addSearchResult):
        (WebCore::RenderSearchField::showPopup):
        (WebCore::RenderSearchField::valueChanged):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::updateControlStatesForRenderer):
        (WebCore::RenderTheme::isActive):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pageNumberForBlockProgressionOffset):
        (WebCore::RenderView::pageCount):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

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

        TextFragmentIterator::runWidth does not need typename CharacterType<> anymore.
        https://bugs.webkit.org/show_bug.cgi?id=166751

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Finding text doesn't work across shadow boundary
        https://bugs.webkit.org/show_bug.cgi?id=158503

        Reviewed by Antti Koivisto.

        Added a new TextIterator behavior flag, TextIteratorTraversesFlatTree, which makes TextIterator traverse
        the flat tree instead of the DOM tree, and made this behavior default in findPlainText.

        Also added a new find options flag, DoNotTraverseFlatTree, to suppress this behavior in window.find(~)
        and execCommand('FindString', false, ~) as they should not be able to peek information inside shadow trees.
        Unfortunately these APIs have been deprecated in the standards so there is no specification to follow.

        For now, we don't support finding a word or a keyword across a shadow boundary as this would require
        making rangeOfString and other related functions return a Range-like object that can cross shadow boundaries.

        Also added internals.rangeOfString to test Editor::rangeOfString, and replaced the bit-flag arguments
        to internals.countMatchesForText and internals.countFindMatches by an array of strings for better portability.

        Test: editing/text-iterator/find-string-on-flat-tree.html

        * editing/Editor.cpp:
        (WebCore::Editor::rangeOfString): Use the modern containingShadowRoot instead of nonBoundaryShadowTreeRootNode
        since the start container can be a shadow root, which nonBoundaryShadowTreeRootNode asserts not be the case.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeFindString): Don't traverse across shadow boundaries.
        * editing/FindOptions.h: Added DoNotTraverseFlatTree.
        * editing/TextIterator.cpp:
        (WebCore::assignedAuthorSlot): Added.
        (WebCore::authorShadowRoot): Added.
        (WebCore::firstChildInFlatTreeIgnoringUserAgentShadow): Added.
        (WebCore::nextSiblingInFlatTreeIgnoringUserAgentShadow): Added.
        (WebCore::firstChild): Added. Traverses the flat tree when TextIteratorTraversesFlatTree is set.
        (WebCore::nextSibling): Ditto.
        (WebCore::parentNodeOrShadowHost): Ditto.
        (WebCore::TextIterator::advance): Don't set m_handledChildren to true when the current node has display: contents.
        (WebCore::findPlainText): Use TextIteratorTraversesFlatTree unless DoNotTraverseFlatTree is set.
        * editing/TextIteratorBehavior.h: Added TextIteratorTraversesFlatTree.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::find): Don't traverse across shadow boundaries.
        * testing/Internals.cpp:
        (WebCore::parseFindOptions): Added.
        (WebCore::Internals::rangeOfString): Added.
        (WebCore::Internals::countMatchesForText): Replaced the find options by an array of strings instead of a bit mask.
        (WebCore::Internals::countFindMatches): Ditto.
        * testing/Internals.h:
        * testing/Internals.idl: Added rangeOfString, and replaced find options bit-flag in countMatchesForText and
        countFindMatches by an array of strings so that the tests themselves don't rely on a specific value of each bit flag.

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

        [Form Validation] lengthy validation messages should be truncated with an ellipsis
        https://bugs.webkit.org/show_bug.cgi?id=166747
        <rdar://problem/29872021>

        Reviewed by Simon Fraser.

        Lengthy HTML validation messages should be truncated with an ellipsis.
        Previously, they were truncated but there was no ellipsis.

        No new tests, not easily testable. Manually tested on
        - http://codepen.io/cdumez/full/zoOZmZ/ (last field)

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::ValidationBubble):
        * platform/mac/ValidationBubbleMac.mm:
        (WebCore::ValidationBubble::ValidationBubble):

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

        Radio buttons have a fixed border radius making them look square when resized
        https://bugs.webkit.org/show_bug.cgi?id=148676
        rdar://problem/29889892

        Reviewed by Tim Horton.

        Change the 8px border-radius of iOS radio buttons to 50% so they remain circular
        when the page overrides the size.

        Test: fast/forms/ios/large-radio-button-is-round.html

        * css/html.css:
        (#if defined(WTF_PLATFORM_IOS) && WTF_PLATFORM_IOS):

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

        CoreText variation axis identifiers don't work with 64-bit numbers
        https://bugs.webkit.org/show_bug.cgi?id=166745
        <rdar://problem/29856541>
        <rdar://problem/29848883>

        Reviewed by Tim Horton.

        There is a bug where some CFNumbers are getting garbage results when
        being placed into a 64-bit field. Luckily, we don't need the full
        64-bits; 32-bits is sufficient.

        Test: fast/text/international/system-language/hindi-system-font-punctuation.html

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

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

        Start hittesting a clean tree in RenderEmbeddedObject::isReplacementObscured
        https://bugs.webkit.org/show_bug.cgi?id=166743
        <rdar://problem/29024384>

        Reviewed by Simon Fraser.

        Unable to reproduce.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isReplacementObscured):

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

        Crash inside Editor::styleForSelectionStart
        https://bugs.webkit.org/show_bug.cgi?id=166710

        Reviewed by Chris Dumez.

        Added a null pointer check. This crash can happen when the DOM is mutated as editorState tries
        to compute the style at the selection start.

        No new tests since there is no reproducible test case, and I couldn't come up with one either.
        This crash seems to retire some intricate dependency between when DOM is mutated, selection is
        updated, and then performPostLayoutTasks ends up updating the editor state in response to
        the element's editabilty changing.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::styleForSelectionStart):

2017-01-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210370.

        This change caused hundreds of LayoutTest failures on Sierra.

        Reverted changeset:

        "[Cocoa] Variation fonts without variations specified are not
        rendered as if the default variations were specified"
        https://bugs.webkit.org/show_bug.cgi?id=166672
        http://trac.webkit.org/changeset/210370

2017-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network process crash in WebKit::CustomProtocolManagerImpl::didFailWithError
        https://bugs.webkit.org/show_bug.cgi?id=165082

        Reviewed by Alex Christensen.

        Simplified WebKitSoupRequestGenericClient.

        * platform/network/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        (webkitSoupRequestGenericGetRequest):
        * platform/network/soup/WebKitSoupRequestGeneric.h:
        * platform/network/soup/WebKitSoupRequestGenericClient.h:

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

        Turn preferLowPowerWebGLRendering setting on by default
        https://bugs.webkit.org/show_bug.cgi?id=166737
        <rdar://problem/29870033>

        Reviewed by Dean Jackson.

        Temporarily turn preferLowPowerWebGLRendering setting on by default until
        we deal better with WebGL content in background tabs.

        * page/Settings.in:

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

        [Cocoa] Variation fonts without variations specified are not rendered as if the default variations were specified
        https://bugs.webkit.org/show_bug.cgi?id=166672
        <rdar://problem/29779119>
        <rdar://problem/29848883>

        Reviewed by Simon Fraser.

        CoreText has a bug (<rdar://problem/29859207>) where variation fonts without
        a specified variation value are rendered as if the minimum value is specified,
        rather than the default value. The solution is to apply default values where
        they are omitted.

        Test: fast/text/variations/advances.html

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

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

        Mark the dedicated root linebox for trailing floats in empty inlines dirty.
        https://bugs.webkit.org/show_bug.cgi?id=166732
        <rdar://problem/29100419>

        Reviewed by Antti Koivisto.

        We normally attach floating boxes to the last root linebox. However when the floatbox is preceded by a <br>
        we generate a dedicated root linebox (TrailingFloatsRootInlineBox) for the floatbox.
        When this floatbox is a RenderInline descendant and this RenderInline does not generate lineboxes (it's ancestor RenderBlockFlow does)
        we have to make sure that this special root linebox gets marked dirty when the associated floatbox changes.
        (Unfortunately through the recursive calls on dirtyLinesFromChangedChild(), we lose the information about
        the "changed child" since the inlines propagates the marking logic to the RenderBlockFlow, see FIXME.)

        Test: fast/inline/trailing-floats-inline-crash2.html

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2017-01-05  Antoine Quint  <graouts@apple.com>

        [Cocoa] Both modern-media-controls/images/iOS modern-media-controls/images/macOS are installed on both platforms
        https://bugs.webkit.org/show_bug.cgi?id=163871

        Reviewed by Eric Carlson.

        We now only copy modern media controls images, if any, for the current platform.

        * WebCore.xcodeproj/project.pbxproj:

2017-01-05  Keith Rollin  <krollin@apple.com>

        Add WebCore::URL::protocolHostAndPort
        https://bugs.webkit.org/show_bug.cgi?id=166426

        Reviewed by Alex Christensen.

        Added to support record/replay mechanism, which needs it in order to
        implement fuzzy-matching of URLs that are similar to each other but
        that nonetheless come from the same source/host.

        Updated TestWebKitAPI/Tests/WebCore/URL.cpp.

        * platform/URL.cpp:
        (WebCore::URL::protocolHostAndPort):
        * platform/URL.h:

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

        Form validation: Align email validation with the latest HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=166697
        <rdar://problem/29870245>

        Reviewed by Alex Christensen.

        Align email validation with the latest HTML specification:
        - https://html.spec.whatwg.org/#valid-e-mail-address

        It particular, the following changes were made:
        - The first and last character of the domain now needs to be a letter or a digit
        - Parts of the domain can only be 63 characters in length

        No new tests, extended existing test.

        * html/EmailInputType.cpp:

2017-01-05  Enrica Casucci  <enrica@apple.com>

        Support File Promise during drag for macOS.
        https://bugs.webkit.org/show_bug.cgi?id=165204
        rdar://problem/19595567

        Reviewed by Tim Horton.

        Adds the support for handling File Promise type during
        drag. DragData now has the knowledge of the NSFilesPromisePboardType and
        checks for the data type during drag.

        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * platform/DragData.h:
        (WebCore::DragData::setFileNames):
        (WebCore::DragData::fileNames):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsPromise):
        (WebCore::DragData::asURL):

2017-01-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=166726

        Reviewed by Alex Christensen.

        Add include folder.

        * CMakeLists.txt:

2017-01-05  Milan Crha  <mcrha@redhat.com>

        [SOUP] AddressSanitizer: heap-use-after-free under WTF::String::fromUTF8()
        https://bugs.webkit.org/show_bug.cgi?id=166722

        Reviewed by Alex Christensen.

        * platform/soup/PublicSuffixSoup.cpp:
        (WebCore::topPrivatelyControlledDomain):
        Use a variable to hold UTF-8 version of the domain, because
        the soup_tld_get_base_domain() returns a pointer into the passed-in
        string, which could be freed due to the temporary object being freed.

2017-01-05  Andreas Kling  <akling@apple.com>

        Remove some unnecessary page cache checks in render tree code.
        <https://webkit.org/b/166728>

        Reviewed by Antti Koivisto.

        There is no render tree in the page cache, so we don't need to be checking
        for it in renderer code.

        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):
        (WebCore::RenderElement::newImageAnimationFrameAvailable):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderObject.cpp:
        (WebCore::printRenderTreeForLiveDocuments):
        (WebCore::printLayerTreeForLiveDocuments):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::lazyRepaintTimerFired):

2017-01-05  Andreas Kling  <akling@apple.com>

        REGRESSION(r210226): overflow:scroll scroll position not restored on back navigation
        <https://webkit.org/b/166724>

        Reviewed by Antti Koivisto.

        Before r210226, the render tree being torn down and the document being destroyed
        were roughly the same thing, since they would always happen together, from the
        render tree's perspective.

        Changing this caused us to skip over the code that saves the scroll position
        for an element's RenderLayer when going into the page cache. Navigating back to
        that page would then scroll the layer to (0,0) instead of the previous position.

        The fix is simply to remove the check for documentBeingDestroyed() in ~RenderLayer().
        Note that two checks are being removed, there was also a weird "optimization"
        to avoid nulling out EventHandler's m_resizeLayer if it points to this layer.
        That pointer would eventually get nulled out in EventHandler::clear() anyway,
        but it feels better to not let that pointer dangle.

        Test: fast/scrolling/page-cache-back-overflow-scroll-restore.html

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

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

        Disable smooth playhead animation for main content media in the Touch Bar
        https://bugs.webkit.org/show_bug.cgi?id=166715
        <rdar://problem/29870673>

        Reviewed by Eric Carlson.

        Passing in a non-zero playback rate to WebPlaybackControlsManager's timing property causes unintended effects
        further down the stack. Please see the Radar for more details.

        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::updatePlaybackControlsManagerTiming):

2017-01-05  Andreas Kling  <akling@apple.com>

        Fix iOS build due to missing #include's.

        * history/CachedFrame.cpp:

2017-01-05  Andreas Kling  <akling@apple.com>

        Remove ChromeClient::needTouchEvents().
        <https://webkit.org/b/166723>

        Rubber-stamped by Antti Koivisto.

        Remove this hook since it's a no-op in every port.

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore::Document::didRemoveTouchEventHandler):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        * page/ChromeClient.h:

2017-01-05  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from "bindings/scripts", "svg", "testing", and "workers"
        https://bugs.webkit.org/show_bug.cgi?id=166718

        Reviewed by Alex Christensen.

        * bindings/scripts/test/JS/JSFloat64Array.cpp: Removed. Stale unused test
        result expectation file.
        * bindings/scripts/test/JS/JSFloat64Array.h: Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removeEventListener): Fix comment that incorrectly
        mentions PassRefPtr.

        * testing/Internals.cpp:
        (WebCore::Internals::computedStyleIncludingVisitedInfo): Return Ref instead
        of RefPtr.
        (WebCore::Internals::serializeObject): Ditto.
        (WebCore::Internals::deserializeBuffer): Ditto.
        (WebCore::Internals::observeGC): Streamlined code a bit.
        * testing/Internals.h: Updated for above changes.
        * testing/Internals.idl: Marked various function results as nullable.

        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope): Take a RefPtr&&
        instead of a PassRefPtr.
        * workers/DedicatedWorkerThread.h: Updated for above change.

        * workers/Worker.cpp:
        (WebCore::Worker::Worker): Passs a reference to WorkerGlobalScopeProxy::create.
        (WebCore::Worker::~Worker): Updated since m_contentProxy is a reference.
        (WebCore::Worker::postMessage): Ditto.
        (WebCore::Worker::terminate): Ditto.
        (WebCore::Worker::hasPendingActivity): Ditto.
        (WebCore::Worker::notifyNetworkStateChange): Ditto.
        (WebCore::Worker::notifyFinished): Ditto.
        * workers/Worker.h: Made m_contextProxy a reference rather than a pointer.

        * workers/WorkerGlobalScopeProxy.h: Reduced includes. Made destructor
        protected instead of public since this class destroys itself.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerGlobalScopeProxy::create): Take and return a reference.
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy): Moved most initialization
        to the calass definition. Take a reference instead of a pointer.
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope): Use auto.
        (WebCore::WorkerMessagingProxy::workerThreadCreated): Take a reference
        rather than a PassRefPtr.
        * workers/WorkerMessagingProxy.h: Updated for above changes.
        (WebCore::WorkerMessagingProxy::askedToTerminate): Deleted.
        (WebCore::WorkerMessagingProxy::workerObject): Deleted.

        * workers/WorkerThread.h: Take a RefPtr&& instead of a PassRefPtr.

2017-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Addressing post-review comments after r21005.

        Simplify cairo_glyph_t initialization as suggested by Said.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::CairoGlyphToPathTranslator::path):

2017-01-04  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix crash clamping grid lines
        https://bugs.webkit.org/show_bug.cgi?id=166637

        Reviewed by Darin Adler.

        Avoid issues with very big values for the grid lines clamping them on GridPosition.

        Test: fast/css-grid-layout/grid-position-crash.html

        * rendering/style/GridArea.h: Move kGridMaxTracks definition to GridPosition.
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::setExplicitPosition): Use new setIntegerPosition().
        (WebCore::GridPosition::setSpanPosition): Ditto.
        (WebCore::GridPosition::setIntegerPosition): Clamp the position using kGridMaxTracks.

2017-01-04  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "html" directory, other improvements
        https://bugs.webkit.org/show_bug.cgi?id=166635

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Removed the duplicate copies of all the WebGL-specific files
        in the main list of source files; there is no value in listing them twice.
        Replaced WebGLGetInfo.cpp with WebGLAny.cpp.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer): Updates since the tracks functions
        return references now.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime): Removed
        unneeded SourceBufferPrivate* argument.
        (WebCore::SourceBuffer::appendBufferTimerFired): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveRenderingError): Ditto.
        (WebCore::SourceBuffer::videoTracks): Return a reference rather than a pointer.
        (WebCore::SourceBuffer::audioTracks): Ditto.
        (WebCore::SourceBuffer::textTracks): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        Removed unneeded SourceBufferPrivate* argument.
        (WebCore::SourceBuffer::validateInitializationSegment): Updated since tracks
        functions now return a pointer.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Removed unneeded
        SourceBufferPrivate* argument.
        (WebCore::SourceBuffer::sourceBufferPrivateHasAudio): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasVideo): Ditto.
        (WebCore::SourceBuffer::videoTrackSelectedChanged): Take a reference rather than
        a pointer.
        (WebCore::SourceBuffer::audioTrackEnabledChanged): Ditto.
        (WebCore::SourceBuffer::textTrackModeChanged): Ditto.
        (WebCore::SourceBuffer::textTrackAddCue): Ditto.
        (WebCore::SourceBuffer::textTrackAddCues): Ditto.
        (WebCore::SourceBuffer::textTrackRemoveCue): Ditto.
        (WebCore::SourceBuffer::textTrackRemoveCues): Ditto.
        (WebCore::SourceBuffer::textTrackKindChanged): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBuffer::provideMediaData): Ditto.
        (WebCore::SourceBuffer::reenqueueMediaForTime): Ditto.
        * Modules/mediasource/SourceBuffer.h: Updated for above changes.

        * WebCore.xcodeproj/project.pbxproj: Replaced WebGLGetInfo with WebGLAny.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle): Removed explicit cast to CanvasStyle and unneeded
        conversion to a pointer since CanvasStyle constructors now take references.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance): Updated since bindingsInstance now returns a raw pointer.
        (WebCore::pluginScriptObject): Ditto.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::toJS): Moved to WebGLAny.h/cpp.
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter): Updated since the toJS
        function in WebGLAny.h takes references, not pointers.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp: Removed quite a few unneeded
        includes and got rid of a lot of unneeded JSC prefixes.
        (WebCore::toJS): Moved to WebGLAny.h/cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::objectParameter): Renamed from getObjectParameter and also changed to
        take a pointer to member function so we don't need an enum and a switch statement.
        (WebCore::toJS): Changed to take references rather than pointers.
        (WebCore::JSWebGLRenderingContextBase::getAttachedShaders): Use a modern for loop.
        (WebCore::JSWebGLRenderingContextBase::getBufferParameter): Use objectParameter.
        (WebCore::JSWebGLRenderingContextBase::getRenderbufferParameter): Ditto.
        (WebCore::JSWebGLRenderingContextBase::getVertexAttrib): Ditto.
        (WebCore::toNumberVector): Renamed from toVector, since this is specifically for
        vectors of numbers. Use uncheckedAppend instead of assignment.
        (WebCore::functionForUniform): Marked this inline.
        (WebCore::dataFunctionf): Updated for above changes.
        (WebCore::dataFunctioni): Ditto.
        (WebCore::dataFunctionMatrix): Ditto.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch): Moved assertions to the top of the function.
        Also added a FIXME because it's unclear why these assertions are correct. Updated
        to use downcastScriptElement instead of toScriptElementIfPossible.

        * dom/Document.h: Sorted list of forward-declared classes. Removed duplicate
        forward declaration of ScriptModuleLoader.

        * dom/PendingScript.cpp:
        (WebCore::PendingScript::create): Take a ScriptElement instead of an Element.
        (WebCore::PendingScript::PendingScript): Ditto.
        (WebCore::PendingScript::loadableScript): Moved inline to header and made inline.
        (WebCore::PendingScript::setClient): Take a reference instead of a pointer.
        * dom/PendingScript.h: UPdated for above changes.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript): Pass a reference instead of a pointer.
        (WebCore::ScriptElement::ref): Added. Forwards ref/deref to the underlying element
        so we can use Ref and RefPtr with this class.
        (WebCore::ScriptElement::deref): Ditto.
        (WebCore::isScriptElement): Added. Replaces one of the two uses of
        toScriptElementIfPossible, and is similar in style to is<Element>.
        (WebCore::downcastScriptElement): Ditto, but for downcast.
        * dom/ScriptElement.h: Updated for above changes.

        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::queueScriptForExecution): Take reference rather than
        pointer, and pass ScriptElement rather than Element.
        (WebCore::ScriptRunner::notifyFinished): Ditto.
        (WebCore::ScriptRunner::timerFired): Ditto.
        * dom/ScriptRunner.h: Updated for above changes.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::files): Updated since m_fileList is a Ref.
        (WebCore::FileInputType::createFileList): Updated to return a Ref instead of
        a PassRefPtr. Also use reserveInitialCapacity/uncheckedAppend.
        (WebCore::FileInputType::requestIcon): Updated since the updateRendering
        function is now called iconLoaded. Also use references instead of pointers.
        (WebCore::FileInputType::setFiles): Take a RefPtr&& insted of a PassRefPtr.
        Also put some conditional code inside an #if.
        (WebCore::FileInputType::filesChosen): Updated for function name change.
        (WebCore::FileInputType::iconLoaded): Renamed from updateRendering.
        Changed argument to RefPtr&& from PassRefPtr.
        (WebCore::FileInputType::defaultToolTip): Got rid of unneeded local variable
        and used the correct type, unsigned, rather than size_t.
        * html/FileInputType.h: Updated for the above changes, use final instead
        of override, and use Ref instead of RefPtr.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::form): Renamed from virtualForm.
        * html/HTMLElement.h: Replaced the form/virtualForm pair of functions with
        just a form function. The old design dates back before we had "final" for
        virtual functions, and now we can just use that instead.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::virtualForm): Deleted.
        * html/HTMLFormControlElement.h: Mark the form function final, since it's
        now both an inline function in this class, and an override of a virtual
        function inherited from the base class. Deleted the virtualForm function.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Removed use of the
        formForSubmission function, which was just another way to get the same
        thing as the form function; perhaps they were different in the past.
        (WebCore::HTMLInputElement::setFiles): Take a RefPtr&& rather than a PassRefPtr.
        * html/HTMLInputElement.h: Updated for the above.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control): Made this const.
        (WebCore::HTMLLabelElement::form): Made this const, so it can be used to
        override the const form function from the base class.
        * html/HTMLLabelElement.h: Marked the form function final, since we want it
        to override the form function inherited from HTMLElement.

        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::form): Renamed from virtualForm.
        * html/HTMLLegendElement.h: Override form instead of virtualForm and mark it final
        This makes things more efficient if someone calls form directly on this class;
        before it would make an unnecessary virtual function call.

        * html/HTMLMediaElement.cpp:
        (WebCore::TrackDisplayUpdateScope::TrackDisplayUpdateScope): Take a reference
        rather than a pointer.
        (WebCore::TrackDisplayUpdateScope::~TrackDisplayUpdateScope): Ditto.
        (WebCore::eventTimeCueCompare): Compare the cues the same way the cue list would
        rather than using cueIndex.
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Take a reference.
        (WebCore::HTMLMediaElement::textTrackModeChanged): Ditto.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Ditto.
        (WebCore::HTMLMediaElement::textTrackKindChanged): Ditto.
        (WebCore::HTMLMediaElement::textTrackAddCues): Ditto.
        (WebCore::HTMLMediaElement::textTrackRemoveCues): Ditto.
        (WebCore::HTMLMediaElement::textTrackAddCue): Ditto.
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Pass references.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddVideoTrack): Ditto.
        (WebCore::HTMLMediaElement::removeTextTrack): Ditto.
        (WebCore::HTMLMediaElement::forgetResourceSpecificTracks): Ditto.
        (WebCore::HTMLMediaElement::setController): Take a RefPtr&& instead of PassRefPtr.
        * html/HTMLMediaElement.h: Updated for above changes.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::virtualForm): Deleted.
        * html/HTMLObjectElement.h: Made the form function inline and final, which
        achieves the same thing we did before with using, but without requiring the
        separate virtualForm function, now deleted.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::collectOptionInnerText): Use isScriptElement
        instead of toScriptElementIfPossible.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::bindingsInstance): Renamed from getInstance and
        changed the return type to a raw pointer.
        * html/HTMLPlugInElement.h: Updated for the above changes. Also changed the
        updateSnapshot function to take a raw pointer instead of a PassRefPtr.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer): Pass a pointer
        to updateSnapshot.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Updated to take a raw
        pointer instead of a PassRefPtr.
        * html/HTMLPlugInImageElement.h: Updated for above changes.

        * html/HTMLScriptElement.h: Added using to resolve the ambiguity with the
        ref/deref from HTMLElement and from ScriptElement.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selection): Return a RefPtr instead
        of a PassRefPtr.
        * html/HTMLTextFormControlElement.h: Updated for above changes.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::textTrackKindChanged): Take a reference.
        (WebCore::HTMLTrackElement::textTrackModeChanged): Ditto.
        (WebCore::HTMLTrackElement::textTrackAddCues): Ditto.
        (WebCore::HTMLTrackElement::textTrackRemoveCues): Ditto.
        (WebCore::HTMLTrackElement::textTrackAddCue): Ditto.
        (WebCore::HTMLTrackElement::textTrackRemoveCue): Ditto.
        * html/HTMLTrackElement.h: Updated for above changes.

        * html/InputType.cpp:
        (WebCore::InputType::formForSubmission): Deleted.
        (WebCore::InputType::setFiles): Take a RefPtr&& instead of a PassRefPtr.
        * html/InputType.h: Updated for above changes.

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Pass a reference.
        (WebCore::PluginDocument::setPluginElement): Take a reference rather than
        a PassRefPtr.
        * html/PluginDocument.h: Updated for above changes.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle): Pass a reference.
        (WebCore::CanvasRenderingContext2D::setFillStyle): Ditto.
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Ditto.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle): Rewrite all constructors to use the
        m_style variant instead of separate m_type and other data members. Also
        change from PassRefPtr to a reference.
        (WebCore::CanvasStyle::createFromString): Update to use the variant.
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha): Ditto.
        (WebCore::CanvasStyle::isEquivalentColor): Ditto.
        (WebCore::CanvasStyle::isEquivalentRGBA): Ditto.
        (WebCore::CanvasStyle::isEquivalentCMYKA): Ditto.
        (WebCore::CanvasStyle::CanvasStyle): Deleted copy constructor; the compiler
        can now generate a correct copy or move constructor.
        (WebCore::CanvasStyle::~CanvasStyle): Deleted. Compiler generates this
        properly now without help from us.
        (WebCore::CanvasStyle::operator=): Deleted. The compiler can now generate
        a correct copy of move assignment operator.
        (WebCore::CanvasStyle::applyStrokeColor): Updated to take a reference and
        use the variant.
        (WebCore::CanvasStyle::applyFillColor): Ditto.

        * html/canvas/CanvasStyle.h: Redid this class to use a variant instead of
        a type enumeration and a union.

        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::createVertexArrayOES): Updated use of enum
        since it's now an enum class.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext): Use Ref&& instead of
        RefPtr&& for the GraphicsContext3D.
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects): Updated enum
        and also use references.
        (WebCore::WebGL2RenderingContext::getInternalformatParameter): Use nullptr to
        return null rather than the old idiom (default-constructed WebGLGetInfo).
        (WebCore::WebGL2RenderingContext::texStorage2D): Ditto.
        (WebCore::WebGL2RenderingContext::getQueryParameter): Ditto.
        (WebCore::WebGL2RenderingContext::getSamplerParameter): Ditto.
        (WebCore::WebGL2RenderingContext::getSyncParameter): Ditto.
        (WebCore::WebGL2RenderingContext::getIndexedParameter): Ditto.
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter): Ditto.
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName): Ditto.
        (WebCore::WebGL2RenderingContext::createVertexArray): Updated enum and also
        use reference.
        (WebCore::WebGL2RenderingContext::getExtension): Rearranged logic in three ways:
        (1) Moved checks for whether an extension is supported inside the case for that
        extension, rather than combining the extension name check with the extensions
        enabled check. (2) Used the new enableSupportedExtension function to simplify
        many of the checks to avoid repeating the extension name twice. (3) Changed the
        idiom so we set the pointers to nullptr explicitly, preparing for a future where
        we might make the extension pointers use std::optional so we can cache a negative
        for each extension too, not just a positive result.
        (WebCore::WebGL2RenderingContext::getSupportedExtensions): Use ASCIILiteral.
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter): Use nullptr
        as above. For non-null types, return the object without converting, letting the
        WebGLAny class handle things, except for enumerations, which we need to explicitly
        static_cast to an integral type, and things that will be stored in the variant in
        a RefPtr, where we use makeRefPtr.
        (WebCore::WebGL2RenderingContext::validateFramebufferFuncParameters):
        Simplified and clarified the handling of COLOR_ATTACHMENT.
        (WebCore::WebGL2RenderingContext::getParameter): Return WebGLAny, same idiom as
        described above for getFramebufferAttachmentParameter.
        * html/canvas/WebGL2RenderingContext.h: Updated for above changes.

        * html/canvas/WebGLAny.cpp: Added.
        (WebCore::toJS): Handles conversion to JavaScript types. This function is based
        on the existing toJS functions from the two classes that were using WebGLGetInfo.
        Eventually we can probably just get the bindings to automatically generate this,
        but there is some work to do to get to that point.
        * html/canvas/WebGLAny.h: Added. This type, a variant, replaces the WebGLGetInfo
        class. Also includes the toJS function, which is the real point of this type, since
        it's about returning a variant mapped appropriately to JavaScript types.

        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::getAGraphicsContext3D): Changed to return a reference.
        Droped unnecessary local variable with a long type name.
        (WebCore::WebGLContextGroup::addContext): Take a reference.
        (WebCore::WebGLContextGroup::removeContext): Ditto.
        (WebCore::WebGLContextGroup::removeObject): Ditto.
        (WebCore::WebGLContextGroup::addObject): Ditto.
        (WebCore::WebGLContextGroup::detachAndRemoveAllObjects): Dropped unnecessary
        local variable with a long type name.
        * html/canvas/WebGLContextGroup.h: Updated for above changes.

        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::~WebGLContextObject): Pass references.
        (WebCore::WebGLContextObject::detachContext): Ditto.

        * html/canvas/WebGLGetInfo.cpp: Removed.
        * html/canvas/WebGLGetInfo.h: Removed.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Take a Ref&& instead
        of as PassRefPtr.
        (WebCore::WebGLRenderingContext::initializeVertexArrayObjects): Updated enum
        and also use references.
        (WebCore::WebGLRenderingContext::getExtension): Rearranged logic in three ways:
        (1) Moved checks for whether an extension is supported inside the case for that
        extension, rather than combining the extension name check with the extensions
        enabled check. (2) Used the new enableSupportedExtension function to simplify
        many of the checks to avoid repeating the extension name twice. (3) Changed the
        idiom so we set the pointers to nullptr explicitly, preparing for a future where
        we might make the extension pointers use std::optional so we can cache a negative
        for each extension too, not just a positive result.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Use ASCIILiteral.
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Use nullptr
        as above. For non-null types, return the object without converting, letting the
        WebGLAny class handle things, except for enumerations, which we need to explicitly
        static_cast to an integral type, and things that will be stored in the variant in
        a RefPtr, where we use makeRefPtr.
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters):
        Simplified and clarified the handling of COLOR_ATTACHMENT adding a FIXME about
        something questionable.
        (WebCore::WebGLRenderingContext::getParameter): Return WebGLAny, same idiom as
        described above for getFramebufferAttachmentParameter.
        * html/canvas/WebGLRenderingContext.h: Updated for above changes.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create): Updated to pass references
        instead of pointers in a couple cases
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase): Changed graphics
        context argument type from RefPtr&& to Ref&&. Also moved initialization of scalars
        from the constructor to the class definition.
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase): Pass a reference.
        (WebCore::WebGLRenderingContextBase::createBuffer): Pass a reference instead of a pointer.
        (WebCore::WebGLRenderingContextBase::createFramebuffer): Ditto.
        (WebCore::WebGLRenderingContextBase::createTexture): Ditto.
        (WebCore::WebGLRenderingContextBase::createProgram): Ditto.
        (WebCore::WebGLRenderingContextBase::createRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContextBase::createShader): Ditto.
        (WebCore::WebGLRenderingContextBase::deleteBuffer): Ditto.
        (WebCore::WebGLRenderingContextBase::getBufferParameter): Update to use WebGLAny.
        (WebCore::WebGLRenderingContextBase::getProgramParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getRenderbufferParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getShaderParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getTexParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getUniform): Ditto.
        (WebCore::WebGLRenderingContextBase::getVertexAttrib): Ditto.
        (WebCore::WebGLRenderingContextBase::getVertexAttribOffset): Removed unnneed
        type casts.
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer): Pass a reference.
        (WebCore::WebGLRenderingContextBase::removeSharedObject): Take a reference.
        (WebCore::WebGLRenderingContextBase::addSharedObject): Ditto.
        (WebCore::WebGLRenderingContextBase::removeContextObject): Ditto.
        (WebCore::WebGLRenderingContextBase::addContextObject): Ditto.
        (WebCore::WebGLRenderingContextBase::getBooleanParameter): Changed return type;
        connversion to WebGLAny can happen at the point of use.
        (WebCore::WebGLRenderingContextBase::getBooleanArrayParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getFloatParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getIntParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getUnsignedIntParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getInt64Parameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getWebGLFloatArrayParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::getWebGLIntArrayParameter): Ditto.
        (WebCore::WebGLRenderingContextBase::validateBufferDataParameters): Use
        optional to simplify logic and get rid of a boolean.
        (WebCore::WebGLRenderingContextBase::enableSupportedExtension): Added.
        Helper used by the getExtension functions.
        * html/canvas/WebGLRenderingContextBase.h: Updated for the above changes.
        Also changed setBoundVertexArrayObject to take a raw pointer instead of
        as PassRefPtr.

        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::~WebGLSharedObject): Pass a reference.
        (WebCore::WebGLSharedObject::detachContextGroup): Ditto.
        (WebCore::WebGLSharedObject::getAGraphicsContext3D): Updated since the
        underlying getAGraphicsContext3D function now returns a reference.

        * html/canvas/WebGLSharedObject.h: Removed many unused "is" virtual functions.
        * html/canvas/WebGLTransformFeedback.h: Ditto.

        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::create): Updated for new type enumeration.
        (WebCore::WebGLVertexArrayObject::WebGLVertexArrayObject): Ditto.
        (WebCore::WebGLVertexArrayObject::deleteObjectImpl): Ditto.
        * html/canvas/WebGLVertexArrayObject.h: Updated for above changes.

        * html/canvas/WebGLVertexArrayObjectBase.cpp:
        (WebCore::WebGLVertexArrayObjectBase::WebGLVertexArrayObjectBase): Updated for new
        type enumeration and moved initialization to class definition.
        (WebCore::WebGLVertexArrayObjectBase::setElementArrayBuffer): Changed argument to
        raw pointer instead of PassRefPtr.
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribState): Changed argument to
        reference instead of PassRefPtr.
        (WebCore::WebGLVertexArrayObjectBase::unbindBuffer): Changed arugment type to
        reference instead of PassRefPtr.
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribDivisor): Removed unneeded
        local variable.
        * html/canvas/WebGLVertexArrayObjectBase.h: Updated for above changes.
        Replaced VAOType with Type. Used class member initialization.

        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::create): Updated for new type enumeration.
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES): Ditto.
        (WebCore::WebGLVertexArrayObjectOES::~WebGLVertexArrayObjectOES) Ditto.:
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl): Ditto.
        * html/canvas/WebGLVertexArrayObjectOES.h: Updated for above changes.

        * html/forms/FileIconLoader.cpp:
        (WebCore::FileIconLoader::iconLoaded): Renamed from notifyFinished. Also changed
        the name of the function this calls to iconLoaded. Changed the arguemnt to
        RefPtr&& instead of PassRefPtr.
        * html/forms/FileIconLoader.h: Updated for above changes.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater): Use isScriptElement instead of
        toScriptElementIfPossible.
        (WebCore::HTMLConstructionSite::insertForeignElement): Ditto.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Pass script
        element as a Ref rather than RefPtr.
        (WebCore::HTMLDocumentParser::watchForLoad): Pass a reference instead of a pointer.

        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript): Deleted. Moved the code
        into the single call site, execute ParsingBlockingScripts.
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Changed argument
        type to a reference from a RefPtr; this funtion was not taking ownership. Also remove
        call to toScriptElementIfPossible,
        since pending scripts now contains script elements already.
        (WebCore::HTMLScriptRunner::execute): Changed argument type to Ref<ScriptElement>&&
        from PassRefPtr<Element>.
        (WebCore::HTMLScriptRunner::executeParsingBlockingScripts): Moved code here from
        executeParsingBlockingScript. Also pass a reference.
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing): Pass a reference.
        (WebCore::requestPendingScript): Changed argument type to ScriptElement& from
        Element*.
        (WebCore::HTMLScriptRunner::requestParsingBlockingScript): Ditto.
        (WebCore::HTMLScriptRunner::requestDeferredScript): Ditto.
        (WebCore::HTMLScriptRunner::runScript): Ditto.
        * html/parser/HTMLScriptRunner.h: Updated for above changes.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::takeScriptToProcess): Changed return type from
        RefPtr<Element> to RefPtr<ScriptElement>.
        (WebCore::HTMLTreeBuilder::processEndTag): Downcast the script element to
        HTMLScriptElement so we can store it as a ScriptElement.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Downcast the script
        element to SVGScriptElement so we can store it as a script element.
        * html/parser/HTMLTreeBuilder.h: Updated for above changes. Changed the type
        of m_scriptToProcess to RefPtr<ScriptElement>.

        * html/parser/TextDocumentParser.cpp: Added now-needed include.

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport): Changed return type
        to Ref from PassRefPtr.
        * html/parser/XSSAuditorDelegate.h: Updated for above.

        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack): Take references.
        (WebCore::AudioTrack::setPrivate): Ditto.
        (WebCore::AudioTrack::setEnabled): Removed redundant code to do what the
        private setEnabled function is already going to do.
        (WebCore::AudioTrack::inbandTrackIndex): Removed assertion since m_private
        is now a Ref rather than RefPtr.
        (WebCore::AudioTrack::enabledChanged): Added an early exit so we will only
        call audioTrackEnabledChanged if m_enabled is actually changing. Also removed
        the unneeded track private argument.
        (WebCore::AudioTrack::idChanged): Ditto.
        (WebCore::AudioTrack::labelChanged): Ditto.
        (WebCore::AudioTrack::languageChanged): Ditto.
        (WebCore::AudioTrack::willRemove): Ditto.
        * html/track/AudioTrack.h: Updated for above changes.

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::addDataCue): Removed inband text track private
        argument. Use contains instead of find/end.
        (WebCore::InbandDataTextTrack::updateDataCue): Ditto. Use get instead of find/end.
        (WebCore::InbandDataTextTrack::removeDataCue): Ditto.
        * html/track/InbandDataTextTrack.h: Updated for above changes.

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::InbandGenericTextTrack): Take references.
        (WebCore::InbandGenericTextTrack::create): Ditto.
        (WebCore::InbandGenericTextTrack::updateCueFromCueData): Ditto.
        (WebCore::InbandGenericTextTrack::addGenericCue): Ditto. Also removed unused
        track private argument.
        (WebCore::InbandGenericTextTrack::updateGenericCue): Ditto.
        (WebCore::InbandGenericTextTrack::removeGenericCue): Ditto.
        (WebCore::InbandGenericTextTrack::parseWebVTTCueData): Ditto.
        (WebCore::InbandGenericTextTrack::parseWebVTTFileHeader): Ditto.
        (WebCore::InbandGenericTextTrack::newRegionsParsed): Pass a reference.
        * html/track/InbandGenericTextTrack.h: Updated for above changes.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::create): Return a Ref instead of a PassRefPtr. Take
        references.
        (WebCore::InbandTextTrack::InbandTextTrack): Ditto.
        (WebCore::InbandTextTrack::setPrivate): Take a reference instead of a PassRefPtr.
        (WebCore::InbandTextTrack::isClosedCaptions): Removed check for null since m_private
        is now a Ref and so never null.
        (WebCore::InbandTextTrack::isSDH): Ditto.
        (WebCore::InbandTextTrack::containsOnlyForcedSubtitles): Ditto.
        (WebCore::InbandTextTrack::isMainProgramContent): Ditto.
        (WebCore::InbandTextTrack::isEasyToRead): Ditto.
        (WebCore::InbandTextTrack::inbandTrackIndex): Ditto.
        (WebCore::InbandTextTrack::inBandMetadataTrackDispatchType): Ditto.
        (WebCore::InbandTextTrack::idChanged): Removed unneeded track private argument.
        (WebCore::InbandTextTrack::labelChanged): Ditto.
        (WebCore::InbandTextTrack::languageChanged): Ditto.
        (WebCore::InbandTextTrack::willRemove): Ditto.
        (WebCore::InbandTextTrack::updateKindFromPrivate): Improved switch statement
        by removing default so we get a warning if we forget to handle a kind value.
        (WebCore::InbandTextTrack::startTimeVariance): Removed check for null.
        * html/track/InbandTextTrack.h: Updated for above changes. Changed m_private from
        a RefPtr to a Ref.

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::InbandWebVTTTextTrack): Take references.
        (WebCore::InbandWebVTTTextTrack::create): Ditto.
        (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData): Removed unneeded track
        private arguemnt.
        (WebCore::InbandWebVTTTextTrack::newRegionsParsed): Pass a reference.
        * html/track/InbandWebVTTTextTrack.h: Updated for above changes.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable): Pass references.
        (WebCore::LoadableTextTrack::newRegionsAvailable): Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::~TextTrack): Use references.
        (WebCore::TextTrack::setKind): Ditto.
        (WebCore::TextTrack::setMode): Ditto.
        (WebCore::TextTrack::removeAllCues): Ditto.
        (WebCore::TextTrack::activeCues): Ditto.
        (WebCore::TextTrack::addCue): Ditto.
        (WebCore::TextTrack::removeCue): Removed unneeded code to handle a cue
        that points to a track but is not in that track. Added a call to
        setIsActive(false) here instead of having the remove function do it.
        (WebCore::TextTrack::addRegion): Use references.
        (WebCore::TextTrack::removeRegion): Removed unneeded code to handle a
        region that points to a track but is not in that track.
        (WebCore::TextTrack::cueWillChange): Use references.
        (WebCore::TextTrack::cueDidChange): Ditto.
        (WebCore::TextTrack::setLanguage): Ditto.
        * html/track/TextTrack.h: Updated for above changes.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue): Initialized the data members
        in the class definition.
        (WebCore::TextTrackCue::cueIndex): Deleted.
        (WebCore::TextTrackCue::invalidateCueIndex): Deleted.
        * html/track/TextTrackCue.h: Updated for the above. Removed m_cueIndex,
        because it is not a good design to store these and try to keep them up
        to date.

        * html/track/TextTrackCueList.cpp:
        (WebCore::compareCues): Added. Helper for sorting and checking sorting.
        (WebCore::TextTrackCueList::TextTrackCueList): Deleted. Let the compiler
        generate this.
        (WebCore::TextTrackCueList::length): Moved to header.
        (WebCore::TextTrackCueList::cueIndex): Renamed from getCueIndex.
        Changed return type to unsigned rather than unsigned long.
        (WebCore::TextTrackCueList::item): Updated for name change.
        (WebCore::TextTrackCueList::getCueById): Ditto.
        (WebCore::TextTrackCueList::activeCues): Build the vector directly
        rather than wastefully adding with TextTrackCueList::add, which will
        try to sort.
        (WebCore::TextTrackCueList::add): Take a Ref&& instead of a PassRefPtr.
        Also, keep sorted using std::upper_bound instead of the recursive
        binary search this code was using before. Also remove the
        invalidateCueIndexes call since there are no cue indices any more.
        Also remove the boolean return value since no caller was using it.
        (WebCore::TextTrackCueList::remove): Take a reference instead of a
        pointer. Also remove the boolean return value since no caller was using it.
        (WebCore::TextTrackCueList::contains): Deleted. Was unused.
        (WebCore::TextTrackCueList::updateCueIndex): Reimplemented using the
        std::upper_bound and std::rotate operations. The old code that used
        remove and add was inefficient and also could cause a cue to be deallocated
        if something else wasn't holding a reference to the cue. Also changed to take
        a reference.
        (WebCore::TextTrackCueList::clear): Deleted. Was unused.
        (WebCore::TextTrackCueList::invalidateCueIndexes): Deleted. No longer
        needed since we don't store cue indices in the cues any more.
        * html/track/TextTrackCueList.h: Updated for the above changes.

        * html/track/VTTRegionList.cpp:
        (WebCore::VTTRegionList::VTTRegionList): Deleted. Let the compiler
        generate this.
        (WebCore::VTTRegionList::length): Moved to header.
        (WebCore::VTTRegionList::item): Updated for name and type changes.
        (WebCore::VTTRegionList::getRegionById): Ditto.
        (WebCore::VTTRegionList::add): Changed to take a Ref&& instead of a
        PassRefPtr.
        (WebCore::VTTRegionList::remove): Updated.
        (WebCore::VTTRegionList::clear): Deleted. Was unused.
        * html/track/VTTRegionList.h: Updated for the above changes.
        * html/track/VTTRegionList.idl: Made return values nullable to reflect
        the actual semantic of the code.

        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack): Use references.
        (WebCore::VideoTrack::setPrivate): Ditto.
        (WebCore::VideoTrack::setSelected): Ditto.
        (WebCore::VideoTrack::inbandTrackIndex): Removed assertion since m_private
        is now a Ref instead of a RefPtr.
        (WebCore::VideoTrack::selectedChanged): Removed unneeded track private argument.
        (WebCore::VideoTrack::idChanged): Ditto.
        (WebCore::VideoTrack::labelChanged): Ditto.
        (WebCore::VideoTrack::languageChanged): Ditto.
        (WebCore::VideoTrack::willRemove): Ditto.
        (WebCore::VideoTrack::setKind): Updated to use reference.
        (WebCore::VideoTrack::setLanguage): Ditto.
        * html/track/VideoTrack.h: Updated for the above. Changed derivation to private.
        Removed unneeded defaultKindKeyword.

        * loader/EmptyClients.h: Updated to use reference.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport): Take a Ref&& instead of RefPtr&&.
        * loader/PingLoader.h: Updated for above change.

        * page/Chrome.cpp:
        (WebCore::Chrome::loadIconForFiles): Take a reference.
        * page/Chrome.h: Updated for above change.
        * page/ChromeClient.h: Ditto.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation): Use auto.

        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebPlaybackSessionModelMediaElement::selectAudioMediaOption): Simplified
        algorithm by removing unneeded direct call to audioTrackEnabledChanged,
        which will be called by setEnabled and doesn't need to be called again here.
        (WebPlaybackSessionModelMediaElement::selectLegibleMediaOption): Removed
        unhelpful assertion and unnneded initialization.

        * platform/graphics/AudioTrackPrivate.h: Removed unnneeed track private
        argument and initialized data members where they are defined.

        * platform/graphics/InbandTextTrackPrivateClient.h: Use Ref instead of
        PassRefPtr, initialize data members where they are defined, and removed
        the unneeded track private arguments from the client functions.

        * platform/graphics/SourceBufferPrivate.h: Fixed functions that were taking
        AtomicString to take a const& instead. Use Ref&& instead of PassRefPtr.

        * platform/graphics/SourceBufferPrivateClient.h: Removed unneded private pointer
        arguments from client functions.

        * platform/graphics/TrackPrivateBase.h: Removed unneeded private pointers
        from client functions.
        * platform/graphics/VideoTrackPrivate: Ditto.

        * platform/graphics/avfoundation/AudioTrackPrivateAVF.h: Use
        const AtomicString&.

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue): Updated for change to arguments.
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes): Ditto.
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues): Ditto.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Ditto.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues): Ditto.
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Ditto.

        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        Moved initialization of data memebrs to where they are defined.
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::enabled): Deleted. No longer needed.
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled): Changed to use the enabled
        flag from the base class instead of a separate m_enabled in this class.
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        Removed the enabled function and the m_enabled data member.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Marked functions
        final instead of override and updated arguemnts.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset): Updated for change
        to arguments.
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::appendCompleted): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::hasVideo): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::hasAudio): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flush): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.

        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h: Updated for
        changes to arguments.
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample): Ditto.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Ditto.
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample): Ditto.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::append): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::flush): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::notifyReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::stopAskingForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::didReceiveSample): Ditto.
        (WebCore::SourceBufferPrivateGStreamer::didReceiveAllPendingSamples): Ditto.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h: Ditto.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append): Ditto.
        (WebCore::MockSourceBufferPrivate::didReceiveInitializationSegment): Ditto.
        (WebCore::MockSourceBufferPrivate::didReceiveSample): Ditto.
        (WebCore::MockSourceBufferPrivate::enqueuedSamplesForTrackID): Ditto.
        (WebCore::MockSourceBufferPrivate::enqueueSample): Ditto.
        (WebCore::MockSourceBufferPrivate::hasVideo): Ditto.
        (WebCore::MockSourceBufferPrivate::hasAudio): Ditto.
        (WebCore::MockSourceBufferPrivate::fastSeekTimeForMediaTime): Ditto.
        (WebCore::MockSourceBufferPrivate::seekToTime): Ditto.
        * platform/mock/mediasource/MockSourceBufferPrivate.h: Ditto.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Take raw pointer instead
        of PassRefPtr.
        * rendering/RenderSnapshottedPlugIn.h: Updated for above change.

        * svg/SVGScriptElement.h: Added using to resolve the ambiguity with the
        ref/deref from SVGElement and from ScriptElement.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished): Updated to simplify since
        the pending script now has a script element.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs): Use isSciprtElement instead
        of toScriptElementIfPossible.
        (WebCore::XMLDocumentParser::endElementNs): Ditto. Also use downcastScriptElement.

2017-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move editing history scripts to WebCore PrivateHeaders
        https://bugs.webkit.org/show_bug.cgi?id=166709
        <rdar://problem/29876612>

        Reviewed by Dan Bernstein.

        Move editing history scripts out of InternalScripts and into Scripts, and update the WebCore Copy Script build
        phase to copy the editing scripts into PrivateHeaders.

        No new tests, because there should be no behavior change.

        * Scripts/DumpEditingHistory.js: Renamed from Source/WebCore/InternalScripts/DumpEditingHistory.js.
        * Scripts/EditingHistoryUtil.js: Renamed from Source/WebCore/InternalScripts/EditingHistoryUtil.js.
        * WebCore.xcodeproj/project.pbxproj:

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

        Web Inspector: forced pseudo classes aren't cleared from inspected page when Inspector closes
        https://bugs.webkit.org/show_bug.cgi?id=108823
        <rdar://problem/13143550>

        Reviewed by Timothy Hatcher.

        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::documentDetached):
        Clear the document from all of the different Document sets.

        (WebCore::InspectorCSSAgent::didRemoveDocument): Deleted.
        Use documentDetached, which is more direct.

        (WebCore::InspectorCSSAgent::forcePseudoState):
        Update the set of Documents with psuedo element changes. So when we
        reset forced styles we know which documents to refresh styles.

        (WebCore::InspectorCSSAgent::resetPseudoStates):
        Use the list of documents we've already computed.

        (WebCore::InspectorCSSAgent::didRemoveDOMNode):
        (WebCore::InspectorCSSAgent::didModifyDOMAttr):
        Change to take a reference and more data to avoid extra work.

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        Eliminated didRemoveDocument.

        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        Pass a references to the DOM listener client, these are never null.

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

        Remove runtime flag for variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=164251

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change, but updated the following
        tests to stop setting the flag:
        - animations/font-variations/font-variation-settings-order.html:
        - animations/font-variations/font-variation-settings-unlike.html:
        - animations/font-variations/font-variation-settings.html:
        - fast/text/variations/duplicate.html:
        - fast/text/variations/exist.html:
        - fast/text/variations/getComputedStyle.html:
        - fast/text/variations/inheritance.html:
        - fast/text/variations/order.html:
        - fast/text/variations/outofbounds.html:

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContext::completeURL):
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::variationFontsEnabled): Deleted.
        (WebCore::InternalSettings::setVariationFontsEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-01-04  Andy Estes  <aestes@apple.com>

        [Cocoa] Teach SharedBuffer to return an NSArray of data segments to avoid flattening
        https://bugs.webkit.org/show_bug.cgi?id=166696

        Reviewed by Tim Horton.

        Existing methods of extracting NSData from a SharedBuffer require either merging or copying
        data segments. Since data segments are stored in CFDataRefs on Cocoa platforms, it should be
        possible to retrieve an NSArray of the segments without having to first flatten to a single
        buffer.

        This patch implements such a method. This will be used in a follow-on patch, where I will
        need to pass SharedBuffer data to QuickLook via an NSArray of NSData.

        New API test: SharedBufferTest.createNSDataArray.

        * platform/SharedBuffer.h: Declared createNSArrayData(), and exported two functions needed
        by the API test.
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::createNSDataArray): Added. Returns m_cfData or a copy of m_fileData
        if either exist. Otherwise, adds m_buffer (wrapped in a WebCoreSharedBufferData object) and
        the objects in m_dataArray to a NSMutableArray and returns it.

2017-01-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210296.

        This change broke macOS builds.

        Reverted changeset:

        "Check for the existence of
        AVSampleBufferDisplayLayer_Private.h in AVFoundationSPI.h"
        https://bugs.webkit.org/show_bug.cgi?id=166691
        http://trac.webkit.org/changeset/210296

2017-01-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210287.

        This change caused editing test failures on macOS.

        Reverted changeset:

        "Support File Promise during drag for macOS."
        https://bugs.webkit.org/show_bug.cgi?id=165204
        http://trac.webkit.org/changeset/210287

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

        Check for the existence of AVSampleBufferDisplayLayer_Private.h in AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=166691

        Reviewed by Eric Carlson.

        Move the declaration of AVSampleBufferDisplayLayer SPI into AVFoundationSPI.h and key off the presence of the _Private.h header.

        Drive-by Fix: also check for the presence of AVSampleBufferRenderSynchronizer.h before re-declaring AVSampleBufferRenderSynchronizer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/spi/mac/AVFoundationSPI.h:

2017-01-04  Nan Wang  <n_wang@apple.com>

        Many new HTML5 input types still exposed as generic AXTextfield
        https://bugs.webkit.org/show_bug.cgi?id=109017
        <rdar://problem/13658955>

        Reviewed by Chris Fleizach.

        Provided more detailed role description for input types that
        are exposed as standard text fields on the mac.

        Changes are covered in modified test expectation.

        * English.lproj/Localizable.strings:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXDateTimeFieldText):
        (WebCore::AXMonthFieldText):
        (WebCore::AXNumberFieldText):
        (WebCore::AXWeekFieldText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXDateTimeFieldText):
        (WebCore::AXMonthFieldText):
        (WebCore::AXNumberFieldText):
        (WebCore::AXWeekFieldText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXDateTimeFieldText):
        (WebCore::AXMonthFieldText):
        (WebCore::AXNumberFieldText):
        (WebCore::AXWeekFieldText):

2017-01-04  Sam Weinig  <sam@webkit.org>

        Remove bindings/generic and distribute its contents appropriately
        https://bugs.webkit.org/show_bug.cgi?id=166700

        Rubber-stamped by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/IDLTypes.h: Copied from Source/WebCore/bindings/generic/IDLTypes.h.
        * bindings/generic/ActiveDOMCallback.cpp: Removed.
        * bindings/generic/ActiveDOMCallback.h: Removed.
        * bindings/generic/IDLTypes.h: Removed.
        * bindings/generic/RuntimeEnabledFeatures.cpp: Removed.
        * bindings/generic/RuntimeEnabledFeatures.h: Removed.
        * dom/ActiveDOMCallback.cpp: Copied from Source/WebCore/bindings/generic/ActiveDOMCallback.cpp.
        * dom/ActiveDOMCallback.h: Copied from Source/WebCore/bindings/generic/ActiveDOMCallback.h.
        * page/RuntimeEnabledFeatures.cpp: Copied from Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp.
        * page/RuntimeEnabledFeatures.h: Copied from Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h.
        Move files around.

2017-01-04  Sam Weinig  <sam@webkit.org>

        Add Exception accessor to ExceptionOr to remove unnecessary releases
        https://bugs.webkit.org/show_bug.cgi?id=166692

        Reviewed by Alex Christensen.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        Use new exception() function.

        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::exception):
        (WebCore::ExceptionOr<void>::exception):
        Add exception() function which returns the exception without releasing it.

2016-01-04  Brent Fulgham  <bfulgham@apple.com>

        Correct DOMWindow handling during FrameLoader::clear
        https://bugs.webkit.org/show_bug.cgi?id=166357
        <rdar://problem/29741862>

        Reviewed by Andy Estes.

        Make sure that we always clean up the DOM window when clearing Window properties, even if the document will
        remain in the page cache. Since 'clearWindowShell' is only used in FrameLoader, divide it's beahvior into
        two steps:
        
        1. Rename 'clearWindowShell' to 'clearWIndowShellsNotMatchingDOMWindow' to better describe its function.
        Switch to a modern C++ loop. Do not switch to the new DOMWindow here, but detach and clear existing
        DOMWindow connections.

        2. Add a new method 'setDOMWindowForWindowShell'. Complete switch to the new DOMWindow.

        This change allows us to disconnect the old DOMWindow, perform the 'setDocument(nullptr)' operation, and then
        connect to the new Window without leaving the loader in an inconsistent state.

        * loader/bindings/js/ScriptController.cpp:
        (WebCore::clearWindowShellsNotMatchingDOMWindow): Renamed from 'clearWindowShell'
        (WebCore::setDOMWindowForWindowShell): Added.
        * loader/bindings/js/ScriptController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Revise to use the new two-step DOMWindow switch logic.

2017-01-04  Enrica Casucci  <enrica@apple.com>

        Support File Promise during drag for macOS.
        https://bugs.webkit.org/show_bug.cgi?id=165204
        rdar://problem/19595567

        Reviewed by Tim Horton.

        Adds the support for handling File Promise type during
        drag. DragData now has the knowledge of the NSFilesPromisePboardType and
        checks for the data type during drag.

        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * platform/DragData.h:
        (WebCore::DragData::setFileNames):
        (WebCore::DragData::fileNames):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsPromise):
        (WebCore::DragData::asURL):

2017-01-04  Chris Dumez  <cdumez@apple.com>

        Assertion hit on redfin.com: ASSERTION FAILED: collection->length() > 1
        https://bugs.webkit.org/show_bug.cgi?id=166687
        <rdar://problem/29865854>

        Reviewed by Darin Adler.

        We were mistakenly calling Document::addWindowNamedItem() / Document::removeWindowNamedItem()
        for elements in Shadow DOMs. As a result, the windowNamedItem DocumentOrderedMap would
        contain elements in shadow DOMs. This would cause the assertion to be hit in window's
        named property getter because of the length mismatch between the windowNamedItem
        DocumentOrderedMap and the WindowNameCollection.

        Tests: fast/shadow-dom/document-named-property.html
               fast/shadow-dom/window-named-property.html

        * dom/Element.cpp:
        (WebCore::Element::updateNameForDocument):
        (WebCore::Element::updateIdForDocument):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):

2017-01-04  John Wilander  <wilander@apple.com>

        Validate the BCP47-ness of the language string passed to TrackBase::setLanguage()
        https://bugs.webkit.org/show_bug.cgi?id=123926

        Reviewed by Jer Noble.

        Test: media/media-source/only-bcp47-language-tags-accepted-as-valid.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
            Log message now includes the valid BCP 47 language too.
        (WebCore::HTMLMediaElement::setSelectedTextTrack):
            Now sets preferred language to the valid BCP 47 language.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setLanguage):
            Removed fixme and aligned comments with new behavior.
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
            Initializes m_validBCP47Language with language parameter.
        (WebCore::isValidBCP47LanguageTag):
            New convenience function.
        (WebCore::TrackBase::setLanguage):
            Sets m_validBCP47Language if the incoming tag is valid.
            Produces a console warning if the tag is invalid.
            The member m_language is set to the incoming tag regardless.
        (WebCore::TrackBase::validBCP47Language):
            New getter for valid language tag. To be used internally.
        * html/track/TrackBase.h:
            New AtomicString member m_validBCP47Language.
        (WebCore::TrackBase::setLanguage): Deleted.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setLanguage):
            Removed fixme and aligned comments with new behavior.
        * page/CaptionUserPreferences.cpp:
        (WebCore::trackDisplayName):
            Now uses the getter for BCP 47 language.
        (WebCore::CaptionUserPreferences::textTrackLanguageSelectionScore):
            Now uses the getter for BCP 47 language.
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::buildDisplayStringForTrackBase):
            Now uses the getter for BCP 47 language.
        (WebCore::CaptionUserPreferencesMediaAF::textTrackSelectionScore):
            Now uses the getter for BCP 47 language.
        (WebCore::textTrackCompare):
            Now uses the getter for BCP 47 language.
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
            Now uses the getter for BCP 47 language.

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

        Web Inspector: Cross Origin importScripts() scripts lack source URL, causes issues with Inspector showing Resource
        https://bugs.webkit.org/show_bug.cgi?id=165569
        <rdar://problem/29607569>

        Reviewed by Youenn Fablet.

        Test: http/tests/inspector/worker/blob-script-with-cross-domain-imported-scripts.html

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::LoaderTaskOptions::LoaderTaskOptions):
        Add a new ThreadableLoader option to avoid filtering the response.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        Disable filtering of the response. This is an internal load, we
        don't want to filter data that would be valuable later.

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

        Remove final custom binding from IDBRequest
        https://bugs.webkit.org/show_bug.cgi?id=166671

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove JSIDBRequestCustom.cpp

        * bindings/js/JSIDBRequestCustom.cpp: Removed.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::result):
        (WebCore::IDBRequest::setSource):
        (WebCore::IDBRequest::sourceObjectStoreIdentifier):
        (WebCore::IDBRequest::sourceIndexIdentifier):
        (WebCore::IDBRequest::requestedIndexRecordType):
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        (WebCore::IDBRequest::setResultToUndefined):
        (WebCore::IDBRequest::resultCursor):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        (WebCore::IDBRequest::source): Deleted.
        (WebCore::IDBRequest::clearResult): Deleted.
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::source):
        (WebCore::IDBRequest::cursorResult): Deleted.
        (WebCore::IDBRequest::databaseResult): Deleted.
        (WebCore::IDBRequest::scriptResult): Deleted.
        Replace multiple member variables with Variants for source and result. Add a result
        member function that properly sets an exception if not "done".

        * Modules/indexeddb/IDBRequest.idl:
        Remove CustomGetter annotation and add type.

        * bindings/generic/IDLTypes.h:
        (WebCore::IDLAny::nullValue):
        (WebCore::IDLAny::isNullValue):
        (WebCore::IDLAny::extractValueFromNullable):
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLAny>::convert):
        Flesh out IDLAny to be implemented as a Strong<Unknown> when used in aggregate types,
        but still work with JSValue when passing as a parameter.

        * inspector/InspectorIndexedDBAgent.cpp:
        Update for new return value of IDBRequest::result().

2017-01-04  Tim Horton  <timothy_horton@apple.com>

        Provide a setting for clients to always prefer low-power WebGL
        https://bugs.webkit.org/show_bug.cgi?id=166675
        <rdar://problem/29834093>

        Reviewed by Dan Bernstein.

        No new tests; as noted in r204664, we don't know how to reliably test
        automatic graphics switching. One could use the manual test introduced
        in that commit; after this commit, with the setting switched on, on a
        dual-GPU machine that is actively using integrated graphics, that test
        should return the same result for both contexts.

        * page/Settings.in:
        Add a setting to prefer low-power WebGL.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        If said setting is enabled, set preferLowPowerToHighPerformance.

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

        label element with tabindex >= 0 is not focusable
        https://bugs.webkit.org/show_bug.cgi?id=102780
        <rdar://problem/29796608>

        Reviewed by Darin Adler.

        Fixed the bug by removing the override for HTMLLabelElement::isFocusable which always returned false.

        This is a behavior from r5532 but it doesn't match the latest HTML specification or that of Chrome
        and Firefox.

        Also fixed an existing bug in HTMLLabelElement::focus and HTMLLegendElement::focus which focused
        the associated form control when there is one even if the element itself is focusable. Without this fix,
        traversing from control with shift+tab would break since focusing the label would move the focus back
        to the input element inside the label element.

        Finally, fixed a bug in HTMLLegendElement::focus that we can call inFocus without updating layout first.

        The fix was inspired by https://chromium.googlesource.com/chromium/src/+/085ad8697b1be50c4f93e296797a25a43a79bcfb

        Test: fast/events/focus-label-legend-elements-with-tabindex.html

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::focus):
        (WebCore::HTMLLabelElement::isFocusable): Deleted.
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus):

2017-01-03  Tim Horton  <timothy_horton@apple.com>

        NSSpellChecker's recordResponse isn't called for unseen automatic corrections
        https://bugs.webkit.org/show_bug.cgi?id=166450
        <rdar://problem/29447824>

        Reviewed by Darin Adler.

        Test: editing/mac/spelling/accept-unseen-candidate-records-acceptance.html

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::recordAutocorrectionResponse):
        (WebCore::AlternativeTextController::recordAutocorrectionResponseReversed): Deleted.
        * editing/AlternativeTextController.h:
        Add recordAutocorrectionResponse, which takes a AutocorrectionResponseType, instead of having
        a function specifically for reverted autocorrections. Also, get rid of the unnecessary indirection
        of the private overload of recordAutocorrectionResponseReversed, since there's only one caller.

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):
        Call recordAutocorrectionResponse with Accepted when performing an auto-autocorrection.

        (WebCore::Editor::changeBackToReplacedString):
        Adopt recordAutocorrectionResponse.

        * page/AlternativeTextClient.h:
        Add an "AutocorrectionAccepted" response type.

2017-01-03  Nan Wang  <n_wang@apple.com>

        AX: Focus should jump into modal dialogs when one appears
        https://bugs.webkit.org/show_bug.cgi?id=166670

        Reviewed by Chris Fleizach.

        Added a timer to let focus jump into a modal dialog if the web
        author didn't handle the focus movement.

        Test: accessibility/mac/aria-modal-auto-focus.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::firstFocusableChild):
        (WebCore::AXObjectCache::focusAriaModalNode):
        (WebCore::AXObjectCache::focusAriaModalNodeTimerFired):
        (WebCore::AXObjectCache::handleAriaModalChange):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::focusAriaModalNode):

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

        Rename SharedBufferMac.mm to SharedBufferCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=166666

        Reviewed by Tim Horton.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/SharedBufferCocoa.mm: Renamed from Source/WebCore/platform/mac/SharedBufferMac.mm.

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

        Re-implement ExceptionOr on top of WTF::Expected
        https://bugs.webkit.org/show_bug.cgi?id=166668

        Reviewed by Alex Christensen.

        As a first step towards using WTF::Expected instead of ExceptionOr,
        use Expected as an implementation detail, rather than Variant/std::optional. 

        * 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:
        Add missing #include of Variant.h

        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::ExceptionOr):
        (WebCore::ExceptionOr<ReturnType>::hasException):
        (WebCore::ExceptionOr<ReturnType>::releaseException):
        (WebCore::ExceptionOr<ReturnType>::releaseReturnValue):
        (WebCore::ExceptionOr<void>::ExceptionOr):
        (WebCore::ExceptionOr<void>::hasException):
        (WebCore::ExceptionOr<void>::releaseException):
        Re-implement on top of Expected.

2017-01-03  Chris Dumez  <cdumez@apple.com>

        Make setting Event's cancelBubble to false a no-op
        https://bugs.webkit.org/show_bug.cgi?id=166018

        Reviewed by Ryosuke Niwa.

        Align behavior of Event.cancelBubble with the latest DOM specification:
        - https://dom.spec.whatwg.org/#dom-event-cancelbubble

        Setting it to true sets the 'stop propagation' flag to true and setting
        it to false is now a no-op.

        Tests: imported/w3c/web-platform-tests/dom/events/Event-cancelBubble.html
               imported/w3c/web-platform-tests/dom/events/Event-dispatch-bubble-canceled.html
               imported/w3c/web-platform-tests/dom/events/Event-dispatch-multiple-cancelBubble.html

        * Modules/indexeddb/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * dom/Event.h:
        (WebCore::Event::cancelBubble):
        (WebCore::Event::setCancelBubble):
        * dom/EventDispatcher.cpp:
        (WebCore::dispatchEventInDOM):

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

        Check for the existence of AVSampleBufferAudioRenderer.h before redeclaring AVSampleBufferAudioRenderer
        https://bugs.webkit.org/show_bug.cgi?id=166421
        <rdar://problem/29782862>

        Reviewed by Dan Bernstein.

        Follow up after r210099; fix the __has_include directive to include the framework and fix the #import inside #if.

        * platform/spi/mac/AVFoundationSPI.h:

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

        REGRESSION(r210226): fast/history/back-from-page-with-focused-iframe.html crashes under GuardMalloc
        <https://webkit.org/b/166657>
        <rdar://problem/29848806>

        Reviewed by Antti Koivisto.

        The problem was that tearDownRenderers() would cause commit Widget hierarchy updates
        before returning, which is just before Document clears its m_renderView pointer.
        This led to an awkward callback into Page::setActivityState() which ended up trying
        to clear the selection inside a partially dead render tree.

        Fix this by adding a WidgetHierarchyUpdatesSuspensionScope to Document::destroyRenderTree()
        which ensures that Widget updates don't happen until after Document::m_renderView is cleared.

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

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

        Placeholder style mechanism leaks CSSFontSelector for first Document styled.
        <https://webkit.org/b/166652>

        Reviewed by Antti Koivisto.

        The placeholder style is used when we're resolving style for a non-rendered
        element, or any element before stylesheets have loaded.

        An old optimization had us reusing the same style each time, which meant that
        since it was initialized with a font selector the first time, it kept that
        font selector alive forever.

        As we have to clone the style anyway, fix this by just making a new style
        each time, using the current document's font selector.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::makePlaceholderStyle):
        (WebCore::Style::TreeResolver::TreeResolver):
        (WebCore::Style::TreeResolver::styleForElement):
        (WebCore::Style::ensurePlaceholderStyle): Deleted.
        (WebCore::Style::isPlaceholderStyle): Deleted.
        * style/StyleTreeResolver.h:

2017-01-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        A floating element within <li> overlaps with the marker
        https://bugs.webkit.org/show_bug.cgi?id=166528

        Reviewed by Zalan Bujtas.

        Merged from Blink (patch by trobhogan@gmail.com):
        https://crrev.com/c896e79e5ba348d7ed87438cd3a19d0176f3036d
        https://crbug.com/548616

        Establish a list marker's offset before floats have been added to its line.

        Computing the offset for a list marker after the rest of the objects on the line
        it is on have been laid out, means it will avoid floats it ought not to.

        Instead, compute the offset when laying out the marker and cache it for use later.

        Tests: fast/lists/list-marker-before-float-nested-rtl.html
               fast/lists/list-marker-before-float-nested.html
               fast/lists/list-marker-before-float-rtl.html
               fast/lists/list-marker-before-float.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::layout):
        * rendering/RenderListMarker.h:

2017-01-03  Per Arne Vollan  <pvollan@apple.com>

        [Win] Some xmlhttprequest tests are failing.
        https://bugs.webkit.org/show_bug.cgi?id=166638

        Reviewed by Darin Adler.

        The tests are failing because the request timeout is set to zero.
        When the timeout is set to zero, we should use the default timeout.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):

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

        Unreviewed, follow-up fix for r210227
        https://bugs.webkit.org/show_bug.cgi?id=166586

        Suggested in the above bug.

        * bindings/scripts/StaticString.pm:
        (GenerateStrings):

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

        Use StaticStringImpl instead of StaticASCIILiteral
        https://bugs.webkit.org/show_bug.cgi?id=166586

        Reviewed by Darin Adler.

        * bindings/scripts/StaticString.pm:
        (GenerateStrings):

2017-01-02  Andreas Kling  <akling@apple.com>

        Drop the render tree for documents in the page cache.
        <https://webkit.org/b/121798>

        Reviewed by Antti Koivisto.

        To save memory and reduce complexity, have documents tear down their render tree
        when entering the page cache. I've wanted to do this for a long time and it seems
        like we can actually do it now.

        This patch will enable a number of clean-ups since it's no longer valid for renderers
        to exist while the document is in page cache.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree): Remove assertion that we're not in the page cache
        since we will now be tearing down render trees right as they enter the page cache.

        * dom/PageCache.cpp:
        (WebCore::destroyRenderTree):
        (WebCore::PageCache::addIfCacheable): Tear down the render tree right before setting
        the in-cache flag. The render tree is destroyed in bottom-up order to ensure that the
        main frame renderers die last.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didRestoreFromPageCache): Update the scollable area set after restoring
        a frame from the page cache. This dirties the scrolling tree, which was covered by tests.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::cancelAnimations): Make these no-ops if called
        while the render tree is being torn down. This fixes some assertion failures
        on layout tests and avoids pointless style invalidation.

2017-01-02  Andreas Kling  <akling@apple.com>

        Discard media controls JS/CSS caches under memory pressure.
        <https://webkit.org/b/166639>

        Reviewed by Antti Koivisto.

        Add a RenderTheme::purgeCaches() virtual and teach the iOS and macOS implementations
        to drop their cached media controls JS/CSS strings there. The strings are only cleared
        if nothing else is referencing them, which gives us a decent "weak cache" behavior.

        This sheds ~300kB memory on iOS with the current media controls.

        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::purgeCaches):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::purgeCaches):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::purgeCaches):

2017-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Since the memory pressure relief has been activated, my disk has a high usage and the desktop stalls
        https://bugs.webkit.org/show_bug.cgi?id=164052

        Reviewed by Michael Catanzaro.

        Check how much memory is freed by the memory pressure handler and wait for a long time if we didn't free that
        much.

        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::EventFDPoller::EventFDPoller):

2017-01-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Expose block quote level to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=166629
        <rdar://problem/29834793>

        Reviewed by Darin Adler.

        Expose the blockquote level to iOS Accessbility API.
        Change the return type of blockquote level to unsigned.

        Test: accessibility/ios-simulator/blockquote-level.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::blockquoteLevel):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityBlockquoteLevel]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-01-01  Jeff Miller  <jeffm@apple.com>

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

        Reviewed by Dan Bernstein.

        * Info.plist:

2017-01-01  Zan Dobersek  <zdobersek@igalia.com>

        GraphicsContextCairo: setMiterLimit() is missing the DisplayListRecorder diversion
        https://bugs.webkit.org/show_bug.cgi?id=166539

        Reviewed by Michael Catanzaro.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setMiterLimit): Call the setMiterLimit() method on the
        m_displayListRecorder object when the GraphicsContext object is in recording mode.

2017-01-01  Zan Dobersek  <zdobersek@igalia.com>

        Clean up GraphicsContext3D forward declarations, header inclusion
        https://bugs.webkit.org/show_bug.cgi?id=166537

        Reviewed by Alex Christensen.

        Remove two unnecessary GraphicsContext3D forward declarations from the
        EmptyClients and ChromeClient header files, and remove the unnecessary
        GraphicsContext3D.h header inclusion from RenderLayerBacking.

        No changes in behavior.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * rendering/RenderLayerBacking.cpp:

2016-12-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        SecurityOrigin::create triplet constructor does not canonicalize port
        https://bugs.webkit.org/show_bug.cgi?id=166624

        Reviewed by Daniel Bates.

        It is currently possible to create two different unequal SecurityOrigin objects that
        represent the same security origin. The SecurityOrigin create functions that take URL and
        String parameters convert the port to nullopt if it is the default port for the protocol,
        but the separate protocol/host/port constructor doesn't. Change it to parallel the other
        constructors.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::create):
        * page/SecurityOrigin.h: Export isSameOriginAs for use by tests.

2016-12-25  Darin Adler  <darin@apple.com>

        Remove setDOMException and a few custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=166002

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Removed JSFileReaderCustom.cpp.

        * WebCore.xcodeproj/project.pbxproj: Removed JSFileReaderCustom.cpp.

        * bindings/js/CallbackFunction.cpp:
        (WebCore::checkFunctionOnlyCallback): Use throwTypeMismatchError instead
        of calling setDOMException with TYPE_MISMATCH_ERR.

        * bindings/js/JSBindingsAllInOne.cpp: Removed JSFileReaderCustom.cpp.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate): Pass a throw scope in to
        propagateException.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::parseAlgorithmIdentifier):
        Renamed from getAlgorithmIdentifier. Got rid of bool return value, instead
        use a conventional return value and conventional JavaScript exception
        handling. Added a ThrowScope argument.
        (WebCore::optionalHashAlgorithm): Added. Returns an optional hash algorithm.
        Also makes the same changes as above, conventional exception handling and
        ThrowScope argument.
        (WebCore::requiredHashAlgorithm): Added. Like the above but throws an
        exception if the algorithm is omitted.
        (WebCore::getHashAlgorithm): Deleted. Replaced by the two functions above.
        (WebCore::createAesCbcParams): Updated for above changes.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Ditto.
        (WebCore::createRsaOaepParams): Ditto.
        (WebCore::createRsaSsaParams): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Added
        a ThrowScope argument, and changed to use throwNotSupportedError instead
        of setDOMException with NOT_SUPPORTED_ERROR.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Ditto.
        * bindings/js/JSCryptoAlgorithmDictionary.h: Updated for the above changes.

        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue): Got rid of bool return value and
        instead use a conventional return value and conventional JS exception handling.
        Added a ThrowScope argument.
        * bindings/js/JSCryptoOperationData.h: Updated for the above.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create): Use ExceptionOr.
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver): Take a VM&
        rather than an ExecState*.
        * bindings/js/JSCustomXPathNSResolver.h: Updated for the changes above.
        Also marked class final and fixed indentation.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMException): Updated comment.
        (WebCore::throwDOMException): Deleted.
        (WebCore::propagateException): Deleted non-inline overload that does not take
        a throw scope, now that all callers pass a throw scope.
        (WebCore::setDOMExceptionSlow): Deleted.
        (WebCore::setDOMException): Deleted.
        (WebCore::throwNotSupportedError): Added.
        (WebCore::throwDOMSyntaxError): Added.
        (WebCore::throwDataCloneError): Added.
        (WebCore::throwIndexSizeError): Added.
        (WebCore::throwTypeMismatchError): Added.
        * bindings/js/JSDOMBinding.h: Updated for the additions and removals
        above. Also grouped the standard DOM exception throwing functions separately
        from the special ones for getters and setters, and sorted them alphabetically.

        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::createJSDataCue): Added, helper function for the below.
        (WebCore::constructJSDataCue): Tightened and tweaked a bit.

        * bindings/js/JSFileReaderCustom.cpp: Removed.

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength): Use throwIndexSizeError instead
        of setDOMException with INDEX_SIZE_ERR.
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectElementIndexSetter): Use throwTypeMismatchError instead of
        setDOMExceptoin with TYPEMISMATCH_ERR.

        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::result): Pass a throw scope in to
        propagateException.

        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item): Use throwTypeMismatchError and
        throwIndexSizeError instead of setDOMException with TYPE_MISMATCH_ERR and
        INDEX_ERR. This required adding a throw scope.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Use throwDOMSyntaxError and
        throwTypeMismatchError instead of setDOMException with SYNTAX_ERR and
        TYPE_MISMATCH_ERR.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter): Pass a throw scope in to
        propagateException.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters): Use throwNotSupportedError
        instead of setDOMException with NOT_SUPPORTED_ERR.
        (WebCore::createAlgorithm): Deleted.
        (WebCore::supportExportKeyThrow): Added ThrowScope argument and use
        throwNotSupportedError instead of setDOMException with NOT_SUPPORTED_ERR.
        (WebCore::jsSubtleCryptoFunctionEncryptPromise): Updated for above changes,
        throwing a not supported exception at this level rather than in a helper.
        (WebCore::jsSubtleCryptoFunctionDecryptPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionSignPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionVerifyPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionDigestPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionImportKeyPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise): Ditto.
        (WebCore::jsSubtleCryptoFunctionUnwrapKeyPromise): Ditto.

        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::createAlgorithmFromJSValue): Got rid of bool return value and
        instead use a conventional return value and conventional JS exception handling.
        Added a ThrowScope argument.
        (WebCore::cryptoKeyFormatFromJSValue): Ditto.
        (WebCore::cryptoKeyUsagesFromJSValue): Ditto.
        (WebCore::JSWebKitSubtleCrypto::encrypt): Updated for above changes.
        (WebCore::JSWebKitSubtleCrypto::decrypt): Ditto.
        (WebCore::JSWebKitSubtleCrypto::sign): Ditto.
        (WebCore::JSWebKitSubtleCrypto::verify): Ditto.
        (WebCore::JSWebKitSubtleCrypto::digest): Ditto.
        (WebCore::JSWebKitSubtleCrypto::generateKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::importKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::exportKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::wrapKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::unwrapKey): Ditto.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send): Pass a throw scope in to
        propagateException.
        (WebCore::JSXMLHttpRequest::responseText): Ditto.

        * bindings/js/JSXPathNSResolverCustom.cpp:
        (WebCore::JSXPathNSResolver::toWrapped): Updated since
        JSCustomXPathNSResolver::create now uses ExceptionOr.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::maybeThrowExceptionIfSerializationFailed): Updated to take
        a reference instead of a pointer. Fixed the handling of success to be
        simpler; no need to check the code twice. Use throwDataCloneError instead
        of setDOMException with DATA_CLONE_ERR.
        (WebCore::SerializedScriptValue::create): Updated for above.
        (WebCore::SerializedScriptValue::deserialize): Ditto.

        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBuffer): Use throwDataCloneError instead of
        setDOMException with DATA_CLONE_ERR.
        (WebCore::structuredCloneArrayBufferView): Ditto.

        * crypto/CryptoAlgorithmParametersDeprecated.h: Removed unneeded empty
        constructor.
        * crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h: Ditto,
        moving initialization to where the data member is defined.
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h: Ditto.
        * crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h: Ditto.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::result): Added. Returns a combination of optional
        and variant that matches what the ID specifies. Moved the code from the
        two following functions in here.
        (WebCore::FileReader::arrayBufferResult): Deleted.
        (WebCore::FileReader::stringResult): Deleted.
        * fileapi/FileReader.h: Updated for the above.
        * fileapi/FileReader.idl: Removed [Custom] from the result attribute and
        declared it with the type mentioned in the specification, a nullable union.

2016-12-30  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "dom" directory, related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=166569

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Removed DocumentMarker.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state): Pass ExecState by reference.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent): Use auto.

        * dom/DOMAllInOne.cpp: Removed DocumentMarker.cpp.

        * dom/DOMNamedFlowCollection.cpp:
        (WebCore::DOMNamedFlowCollection::DOMNamedFlowCollection): Updated to take
        ownership of the passed in vector.
        (WebCore::DOMNamedFlowCollection::create): Moved here from header.
        (WebCore::DOMNamedFlowCollection::~DOMNamedFlowCollection): Moved here so we
        don't need to include "WebKitNamedFlow.h" in the header.
        (WebCore::DOMNamedFlowCollection::item): Rewrote to use Vector.
        (WebCore::DOMNamedFlowCollection::namedItem): Rewrote to use a HashSet that
        we build from the Vector. Uses a set of hash functions defined right here.
        Note that the privor version of this class had incorrect use of ListHashSet
        with safeToCompareToEmptyOrDeleted inaccurately set to true.
        (WebCore::DOMNamedFlowCollection::supportedPropertyNames): Added this.
        Old version just had an empty placeholder.
        * dom/DOMNamedFlowCollection.h: Changed to no longer use ListHashSet, not
        the right data structure for this. Removed incorrect use of "long" and
        made some other simplifications.
        * dom/DOMNamedFlowCollection.idl: Changed return types of item and namedItem
        to accurately reflect the fact that they return null when the index or name
        not found in the collection.

        * dom/DataTransfer.h: Remove indentation. Remove unimplemented
        incorrect declarations of items for ENABLE(DATA_TRANSFER_ITEMS).
        Will be added back when someone implements that feature, or perhaps
        ENABLE(DATA_TRANSFER_ITEMS) should be entirely removed for now?

        * dom/DataTransferItem.h: Changed return type for getAsFile to
        RefPtr. Again, part of ENABLE(DATA_TRANSFER_ITEMS), so dead code for now.

        * dom/Document.cpp:
        (WebCore::canonicalizedTitle): Removed incorrect comment claiming we
        convert control characters to spaces. Simplified logic, removing two
        extra loops. Changed to work on just a String rather than StringWithDirection.
        (WebCore::Document::updateTitle): Updated to call the function above.
        Also updated since StringWithDirection is now a struct instead of a class.
        Call displayBuffer on the encoding directly instead of calling a member
        function named displayBufferModifiedByEncoding.
        (WebCore::Document::updateTitleFromTitleElement): Updated since
        StringWithDirection is now a struct.
        (WebCore::Document::setTitle): Removed code that unnecessarily calls
        updateTitle twice; once indirectly by calling setTextContent on the
        title elmeent and once by directly calling updateTitle.
        (WebCore::Document::setWindowAttributeEventListener): Take a RefPtr&&.
        (WebCore::Document::statePopped): Take a Ref&&.
        (WebCore::Document::displayStringModifiedByEncoding): Deleted unused overload.
        (WebCore::Document::displayBufferModifiedByEncodingInternal): Deleted.
        (WebCore::Document::requestAnimationFrame): Take a Ref&&.
        * dom/Document.h: Updated for changes above. Also changed the title function
        to return a const String& to slightly cut down on reference count churn.
        (WebCore::Document::displayBufferModifiedByEncoding): Deleted.

        * dom/DocumentMarker.cpp: Removed.
        * dom/DocumentMarker.h: Reworked the DocumentMarker class to use a variant
        instead of a separate reference counted DocumentMarkerDetails object.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarkerToNode): Changed argument
        type to DocumentMarker::Data&&.
        (DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        clearDetails -> clearData
        (DocumentMarkerController::showMarkers): activeMatch -> isActiveMatch
        * dom/DocumentMarkerController.h: Updated for the above.

        * dom/DocumentParser.h: Fixed incorrect reference to PassRefPtr in a comment.

        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute): Use auto.

        * dom/Event.cpp:
        (WebCore::Event::isDragEvent): Deleted. Unused.
        (WebCore::Event::cloneFor): Deleted. Unused function left over from the
        start of an implementation of seamless frames.
        * dom/Event.h: Updated for the above.

        * dom/EventContext.cpp: Tweaked blank lines.
        * dom/EventContext.h: Removed unnecessary includes and forward declarations.
        Changed setRelatedTarget to take a raw pointer instead of PassRefPtr since
        callers aren't passing ownership. Moved TouchEventContext::touchList body
        out of the class definition since it's a bit long. Deleted unused
        toTouchEventContext functions. FIxed incorrect comment.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent): Removed unused overload.
        * dom/MessageEvent.h: Updated for above. Also changed the
        dataAsSerializedScriptValue function to return a raw pointer instead of
        PassRefPtr since it is not passing ownership.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Use raw pointer instead of PassRefPtr for
        data transfer and related target arguments.
        (WebCore::MouseEvent::MouseEvent): Ditto. Also use IntPoint instead of
        separate ints for the various X/Y pairs.
        (WebCore::MouseEvent::initMouseEvent): Take a raw pointer for event target.
        (WebCore::MouseEvent::isDragEvent): Reformatted, sorted alphabetically,
        added comment about why this function probably needs to go.
        (WebCore::adjustedClientX): Deleted.
        (WebCore::adjustedClientY): Deleted.
        (WebCore::MouseEvent::cloneFor): Deleted.
        * dom/MouseEvent.h: Updated for the above. Also made more functions private
        and final and initialized more of the data members.

        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::MutationEvent): Pass related node as a raw pointer.
        (WebCore::MutationEvent::initMutationEvent): Ditto.
        * dom/MutationEvent.h: Updated for the above. Fixed indentation. Removed
        unnecessary explicit destructor; default generated one is fine. Initialize
        m_attrChange in the class definition.

        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observe): Pass reference.
        (WebCore::MutationObserver::disconnect): Call unregisterMutationObserver
        directly instead of calling unregisterAndDelete.

        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup):
        Take an rvalue reference to the HashMap and use move.
        (WebCore::MutationObserverInterestGroup::createIfNeeded): Updated to call
        registeredMutationObservers.
        * dom/MutationObserverInterestGroup.h: Updated for the above.

        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::MutationObserverRegistration):
        Take a reference to the observer instead of PassRefPtr. Also take a
        refererence to the node rather than a pointer.
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        Updated to use references instead of pointers.
        (WebCore::MutationObserverRegistration::clearTransientRegistrations): Ditto.
        (WebCore::MutationObserverRegistration::unregisterAndDelete): Deleted.
        (WebCore::MutationObserverRegistration::shouldReceiveMutationFrom): Ditto.
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet): Ditto.
        * dom/MutationObserverRegistration.h: Updated for above changes. Also added
        a node member function. Changed m_observer to a Ref and m_node to a reference.
        Removed the NodeHashSet typedef.

        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::createCSSOMSnapshot): Pass a vector of Ref
        instead of a vector of raw pointers and pass it as an rvalue reference so
        it can be taken over by the named flow collection wrapper.

        * dom/Node.cpp:
        (WebCore::Node::mutationObserverRegistry): Use auto and nullptr.
        (WebCore::Node::transientMutationObserverRegistry): Ditto.
        (WebCore::collectMatchingObserversForMutation): Use references instead of pointers.
        (WebCore::Node::registeredMutationObservers): Changed to return a map instead of
        filling one in and renamed to remove "get" from name.
        (WebCore::Node::registerMutationObserver): Use references instead of pointers.
        (WebCore::Node::unregisterMutationObserver): Ditto.
        (WebCore::Node::registerTransientMutationObserver): Ditto.
        (WebCore::Node::unregisterTransientMutationObserver): Ditto.
        (WebCore::Node::notifyMutationObserversNodeWillDetach): Ditto.
        * dom/Node.h: Updated for the above.

        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent): Use RefPtr&& instead of PassRefPtr.
        (WebCore::PopStateEvent::create): Use a raw pointer instead of PassRefPtr.
        (WebCore::PopStateEvent::trySerializeState): Take a reference to ExecState.
        * dom/PopStateEvent.h: Updated for the above.

        * dom/Position.cpp:
        (WebCore::Position::Position): Take a raw pointer instead of PassRefPtr.
        (WebCore::Position::moveToPosition): Ditto.
        * dom/Position.h: Updated for the above, also changed createLegacyEditingPosition
        in the same way and got rid of the LegacyEditingPosition class.

        * dom/Range.cpp:
        (WebCore::Range::Range): Changed startContainer and endContainer to RefPtr<Node>&&.
        Later this needs to be changed more, but for now this keeps code changes to a minimum.
        (WebCore::Range::create): Changed startContainer and endContainer to Node*.
        * dom/Range.h: Updated for the above.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent): Removed a comment that talks about
        PassRefPtr, and simplified the code since the comment is no longer valid.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        Take a RefPtr&& instead of a PassRefPtr.
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Moved initialization
        of all the data members up to the class definition.
        (WebCore::ScriptExecutionContext::sanitizeScriptError): Use ASCIILiteral.
        (WebCore::ScriptExecutionContext::reportException): Use WTFMove when passing
        arguments to the PendingException constructor and using a value from the
        PendingException just before destroying it.

        * dom/ScriptExecutionContext.h: Changed addTimeout to take a reference rather
        than a PassRefPtr to the timer. Callers were not passing ownership. Also
        initialize all the data members here in the class definition.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::registerCallback): Take a Ref&&.
        * dom/ScriptedAnimationController.h: Updated for the above.

        * dom/SimulatedClick.cpp:
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent): Updated since MouseEvent
        constructor arguments changed to use IntPoint.
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent): Ditto. Also removed some unneeded initializers
        now that the header does more.
        (WebCore::WheelEvent::initWheelEvent): Tweaed style a bit.
        (WebCore::WheelEvent::initWebKitWheelEvent): Deleted. Moved to the header since it's
        just an inline that forwards to initWheelEvent.
        * dom/WheelEvent.h: Updated for the above.

        * dom/make_event_factory.pl:
        (generateImplementation): Use RefPtr instead of PassRefPtr. A couple other tweaks.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Use the data
        insetad of details.
        (WebCore::AlternativeTextController::removeDictationAlternativesForMarker):
        Ditto, also changed to take reference instead of pointer.
        (WebCore::AlternativeTextController::dictationAlternativesForMarker): Ditto.
        (WebCore::AlternativeTextController::applyDictationAlternative): Ditto.
        * editing/AlternativeTextController.h: Updated for the above.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        Updated since Position now takes a raw pointer.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::joinChildTextNodes): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceSelectedTextInNode): Ditto.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring): Ditto.

        * editing/DictationCommand.cpp:
        (WebCore::DictationMarkerSupplier::addMarkersToTextNode): Updated to use the
        DictationData struct.

        * editing/Editor.cpp:
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Pass a reference.
        (WebCore::Editor::dictationAlternativesForMarker): Take a reference.
        * editing/Editor.h: Updated for the above.

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performOverwrite): Updated since Position now takes
        a raw pointer.
        (WebCore::InsertTextCommand::doApply): Ditto.
        (WebCore::InsertTextCommand::insertTab): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition): Ditto.

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::computedTextWithDirection): Updated since
        StringWithDirection is now a struct.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Use Ref&& for the form submission.
        (WebCore::FrameLoader::receivedFirstData): Updated for change to StringWithDirection.
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::didBeginDocument): Pass a reference.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Pass a Ref to loadArchive.
        (WebCore::FrameLoader::loadArchive): Take a Ref&& for the archive.
        (WebCore::FrameLoader::loadInSameDocument): Take a raw pointer for the
        serialized script value state object. No one was passing ownership.
        But pass it along to statePopped as a Ref since we need to pass ownership
        of the null value, at least for now.
        (WebCore::FrameLoader::loadFrameRequest): Take a raw pointer for form state.
        No one was passing ownership.
        (WebCore::FrameLoader::loadURL): Ditto.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::loadWithNavigationAction): Ditto.
        (WebCore::FrameLoader::loadWithDocumentLoader): Ditto.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Ditto.
        * loader/FrameLoader.h: Updated for the above and to remove an unneeded forward
        declaration of StringWithDirection, which is not used here.

        * loader/FrameLoaderClient.h: Updated forward declaration of StringWithDirection.
        Also sorted the others and removed unneeded conditionals.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::setCurrentItemTitle): Updated to use struct.
        (WebCore::HistoryController::initializeItem): Ditto.
        * loader/HistoryController.h: Updated forward declaration of StringWithDirection.

        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::PolicyCallback): Deleted. Default works fine.
        (WebCore::PolicyCallback::~PolicyCallback): Ditto.
        (WebCore::PolicyCallback::set): Take a raw pointer to form state.
        * loader/PolicyCallback.h: Use raw pointer for form state.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Take a raw pointer for form state.
        (WebCore::PolicyChecker::checkNewWindowPolicy): Ditto.
        * loader/PolicyChecker.h: Updated for the above.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer): Pass reference to addTimeout function.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestAnimationFrame): Use Ref&& for callback.
        (WebCore::DOMWindow::webkitRequestAnimationFrame): Ditto.
        (WebCore::DOMWindow::cancelAnimationFrame): Tweak coding style.
        * page/DOMWindow.h: Updated for the above.

        * platform/PlatformWheelEvent.h: Use pragma once. Tweaked header indentation.
        Simplified constructors by initializing data members.

        * platform/text/StringWithDirection.h: Use pragma once. Use struct instead of class.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::dictationAlternatives): Pass a reference.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker): activeMatch -> isActiveMatch

2016-12-30  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "css" directory, related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=166628

        Reviewed by Alex Christensen.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcBinaryOperation::create): Take RefPtr&& instead of PassRefPtr.
        Also added some checks for null. Code here is really inconsistent about null;
        probably should change from RefPtr to Ref at some point.
        (WebCore::CSSCalcBinaryOperation::createSimplified): Ditto.
        (WebCore::CSSCalcBinaryOperation::CSSCalcBinaryOperation): Take Ref&& instead
        of PassRefPtr.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque): Take a reference instead of a pointer.
        (WebCore::CSSCrossfadeValue::SubimageObserver::SubimageObserver): Moved here
        from the header, and renamed.
        (WebCore::CSSCrossfadeValue::SubimageObserver::imageChanged): Ditto.
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue): Moved here from the header.
        (WebCore::CSSCrossfadeValue::create): Ditto.
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue): Updated for data member name change.
        (WebCore::CSSCrossfadeValue::fixedSize): Take a reference. Also rewrote size math to
        take advantage of FloatSize multiplication and addition operators.
        (WebCore::CSSCrossfadeValue::knownToBeOpaque): Take a reference.
        (WebCore::CSSCrossfadeValue::loadSubimages): Set m_subimagesAreReady rather than
        calling setReady on the subimage observer.
        (WebCore::CSSCrossfadeValue::image): Return a raw pointer rather than a RefPtr.
        Take a reference instead of a pointer.
        (WebCore::CSSCrossfadeValue::crossfadeChanged): Removed unused rect argument.
        Rewrote to use modern for loop.
        * css/CSSCrossfadeValue.h: Updated for above changes.

        * css/CSSGradientValue.cpp:
        (WebCore::createGradient): Added. Helper so the function below can use Ref rather
        than RefPtr, and it's also nice to factor out this "poor man's virtual function".
        (WebCore::CSSGradientValue::image): Take a reference rather than a pointer.
        (WebCore::clone): Added. Helper like createGradient above.
        (WebCore::CSSGradientValue::gradientWithStylesResolved): Take a reference rather
        than a pointer. Simplified by using the helper above.
        (WebCore::CSSGradientValue::knownToBeOpaque): Removed unused argument. Rewrote to
        use a modern for loop.
        * css/CSSGradientValue.h: Updated for above changes.

        * css/CSSImageGeneratorValue.cpp: Moved the CachedGeneratedImage class in here
        from the header. Also changed it to use const and Ref.
        (WebCore::CSSImageGeneratorValue::addClient): Take a reference rather than a pointer.
        (WebCore::CSSImageGeneratorValue::removeClient): Ditto.
        (WebCore::CSSImageGeneratorValue::cachedImageForSize): Updated since image now returns
        a reference rather than a pointer.
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Take a reference rather
        than PassRefPtr.
        (WebCore::CSSImageGeneratorValue::image): Take a reference rather than a pointer.
        (WebCore::CSSImageGeneratorValue::fixedSize): Ditto.
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque): Ditto.
        * css/CSSImageGeneratorValue.h: Updated for above changes.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFaceValue): Return a RefPtr rather than PassRefPtr.
        * css/CSSValuePool.h: Updated for the above.

        * css/StyleBuilderConverter.h: Change convertStyleImage and convertShapeValue to
        return RefPtr instead of PassRefPtr.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueContent): Since gradientWithStylesResolved
        returns a Ref now, no need to dereference it any more. This also removes reference
        count churn since we are now passing a Ref temporary to a Ref&&.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleImage): Ditto.

        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::GradientImage): Pass generator as a reference rather than
        as a PassRefPtr.
        (WebCore::GradientImage::draw): Updated since m_gradient is now a Ref rather than
        a RefPtr.
        (WebCore::GradientImage::drawPattern): Ditto.
        * platform/graphics/GradientImage.h: Updated for the above changes. Make things
        private rather than protected since this class is final.

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize): Pass renderer as a reference. Later, we
        should change the interface to this function, too.
        (WebCore::StyleGeneratedImage::addClient): Ditto.
        (WebCore::StyleGeneratedImage::removeClient): Ditto.
        (WebCore::StyleGeneratedImage::image): Ditto.
        (WebCore::StyleGeneratedImage::knownToBeOpaque): Ditto.

2016-12-30  Olivier Blin  <olivier.blin@softathome.com>

        [EFL] fix buffer over-read in RenderThemeEfl::mediaControlsStyleSheet()
        https://bugs.webkit.org/show_bug.cgi?id=166622

        Reviewed by Gyuyoung Kim.

        This has been detected by a charactersAreAllASCII() assert failure.
        Initially in WebKitForWayland (WPE), but the code was likely borrowed from EFL.

        This is because ASCIILiteral() is wrongly used in mediaControlsStyleSheet().
        mediaControlsBaseUserAgentStyleSheet is a char array, not a null-terminated string.
        It is thus incorrect to use StringImpl::createFromLiteral() that calls
        strlen() to get the string length.

        The String::ConstructFromLiteral constructor can not be used, since it
        skips the last character.

        * rendering/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::mediaControlsStyleSheet):
        Explicitely pass the size to the String constructor.

2016-12-30  Commit Queue  <commit-queue@webkit.org>

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

        Crashes on macOS PLT (Requested by kling on #webkit).

        Reverted changeset:

        "Drop the render tree for documents in the page cache."
        https://bugs.webkit.org/show_bug.cgi?id=121798
        http://trac.webkit.org/changeset/210206

2016-12-28  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Isolate instrinsic size computation from layout
        https://bugs.webkit.org/show_bug.cgi?id=166530

        Reviewed by Darin Adler.

        This is the last patch of the items placement data refactoring. By using a different Grid
        instance in computeIntrinsicLogicalWidths we effectively isolate the intrinsic size
        computation from the layout. They are now using different data structures so they don't
        interfere each other.

        This also means that we no longer reuse the placement of items done in the intrinsic size
        computation. That shouldn't be a big issue once we make m_grid persistent on RenderGrid.

        Last but not least, this patch finally removes the ugly const_cast's we had in
        computeIntrinsicLogicalWidths() as we no longer modify the internal state of RenderGrid.

        Tests: fast/css-grid-layout/grid-auto-repeat-intrinsic.html
               fast/css-grid-layout/grid-change-intrinsic-size-with-auto-repeat-tracks.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths): Use a new instance of Grid.
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat): Fixed a missing m_grid -> grid
        rename.
        (WebCore::RenderGrid::placeItemsOnGrid): Constify it. It nows repositions the items if the
        number of auto repeat tracks has changed.
        * rendering/RenderGrid.h:

2016-12-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve user agent construction
        https://bugs.webkit.org/show_bug.cgi?id=142074

        Reviewed by Carlos Garcia Campos.

        Using the macOS quirk rather than the Chrome quirk for Google domains was a mistake: it
        broke Hangouts in a different way than the Chrome quirk, and also prevents use of the nice
        Earth mode on Google Maps. Google is making it really hard to develop a sane quirk.
        Eventually I settled on the combination of two quirks: (1) Firefox browser, and (2) Linux
        x86_64 platform. See the bug for full discussion on why these quirks are the best way to
        make Google domains work properly in WebKit. This is an extremely sad state of affairs, but
        I'm confident it is the best option. Note this effectively includes a rollout of r210168.

        Also, fix a bug that caused an extra space to be inserted in the middle of the user agent.

        * platform/UserAgentQuirks.cpp:
        (WebCore::isGoogle):
        (WebCore::urlRequiresFirefoxBrowser):
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::urlRequiresLinuxDesktopPlatform):
        (WebCore::UserAgentQuirks::quirksForURL):
        (WebCore::UserAgentQuirks::stringForQuirk):
        (WebCore::UserAgentQuirks::firefoxRevisionString):
        * platform/UserAgentQuirks.h:
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2016-12-30  Andreas Kling  <akling@apple.com>

        Drop the render tree for documents in the page cache.
        <https://webkit.org/b/121798>

        Reviewed by Darin Adler.

        To save memory and reduce complexity, have documents tear down their render tree
        when entering the page cache. I've wanted to do this for a long time and it seems
        like we can actually do it now.

        This patch will enable a number of clean-ups since it's no longer valid for renderers
        to exist while the document is in page cache.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree): Remove assertion that we're not in the page cache
        since we will now be tearing down render trees right as they enter the page cache.

        (WebCore::Document::setPageCacheState): Tear down the render tree right before setting
        the in-cache flag. From now on, there should not exist render objects for documents in
        the page cache.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didRestoreFromPageCache): Update the scollable area set after restoring a
        frame from the page cache. This dirties the scrolling tree, which was covered by tests.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc): Make this a no-op if the render tree is being
        torn down. This fixes assertions firing on animation tests.

2016-12-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Need to expose frames to iOS Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=166571
        <rdar://problem/29823724>

        Reviewed by Darin Adler.

        To support navigation by frame for VoiceOver on iOS, we need to expose the frame ancestor. 

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityFrameAncestor]):

2016-12-09  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Move Grid into GridSizingData
        https://bugs.webkit.org/show_bug.cgi?id=165654

        Reviewed by Darin Adler.

        The grid track sizing algorithm has been using the m_grid attribute from RenderGrid to
        compute the sizes of the tracks unconditionally. However the goal is to make it work against
        a generic instance of the Grid class, so that the intrinsic size computation and the layout
        processes could be effectively decoupled.

        Instead of passing the Grid as a new argument to all the track sizing algorithm methods we
        leverage the existence of GridSizingData which is already passed to all of them. This data
        structure holds from now on a reference to the Grid instance so that the track sizing
        algorithm could use it.

        No new tests as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::GridSizingData::grid):
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight):
        (WebCore::RenderGrid::computeTrackSizesForDirection):
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::guttersSize):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeIntrinsicLogicalHeight):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeFlexSizedTracksGrowth):
        (WebCore::RenderGrid::computeFlexFactorUnitSize):
        (WebCore::RenderGrid::findFlexFactorUnitSize):
        (WebCore::RenderGrid::rawGridTrackSize):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::trackSizesForComputedStyle):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::assumedRowsSizeForOrthogonalChild):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::numTracks):
        (WebCore::RenderGrid::paintChildren):
        * rendering/RenderGrid.h:

2016-12-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve user agent construction
        https://bugs.webkit.org/show_bug.cgi?id=142074

        Reviewed by Carlos Garcia Campos.

        Use the macOS rather than the Chrome quirk for Google domains, to avoid problems with
        Google Calendar and Google Maps.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):
        (WebCore::urlRequiresMacintoshPlatform):

2016-12-26  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: !rect.isEmpty() in WebCore::GraphicsContext::drawRect
        https://bugs.webkit.org/show_bug.cgi?id=163461

        Reviewed by Darin Adler.

        Make sure we don't paint empty rects.

        Test: fast/lists/assert-on-empty-list-marker.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2016-12-25  Chris Fleizach  <cfleizach@apple.com>

        AX: Headers of table not read by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=158693
        <rdar://problem/26771065>

        Reviewed by Darin Adler.

        If a table cell header is hidden, by pushing off screen then the content won't be accessible.
        It seems that unless specifically requested (such as using aria-hidden), we should try to return
        that table cell header.

        Test: accessibility/hidden-th-still-column-header.html

        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):

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

        Propagate the source origin as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=166348

        Reviewed by Darin Adler.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):

2016-12-24  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove (most) custom bindings for the IndexedDB code
        https://bugs.webkit.org/show_bug.cgi?id=166451

        Reviewed by Darin Adler.

        Removes the custom bindings for all but one attribute (IDBRequest.result) in
        the IndexedDB code.
        - Adds a new WebIDL extension type, IDBKey, to represent the complex key conversion
          rules IndexedDB specifies.
        - Replaces custom bindings for IDBCursor.source with use of a union.
        - Replaces custom enum type checking for IDBCursor.direction with a WebIDL enum.
        - Replaces custom code generation for IDBKeyPaths with a union.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::source):
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::directionNext): Deleted.
        (WebCore::IDBCursor::directionNextUnique): Deleted.
        (WebCore::IDBCursor::directionPrev): Deleted.
        (WebCore::IDBCursor::directionPrevUnique): Deleted.
        (WebCore::IDBCursor::stringToDirection): Deleted.
        (WebCore::IDBCursor::directionToString): Deleted.
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::objectStore): Deleted.
        (WebCore::IDBCursor::index): Deleted.
        Replace custom enum checking with direct use of the enum, letting the generator
        handle the checks. Also adds source function which returns a Variant.

        * Modules/indexeddb/IDBCursor.idl:
        Remove custom annotation and use correct types.

        * Modules/indexeddb/IDBCursorDirection.h: Added.
        * Modules/indexeddb/IDBCursorDirection.idl: Added.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        Replace Strings with IDBCursorDirection enums.

        * Modules/indexeddb/IDBKeyRange.idl:
        Remove annotation and use new IDBKey extension type.

        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onSuccess):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::onDeleteDatabaseSuccess):
        Use ReadyState enum in place of the old m_isDone boolean.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::error):
        (WebCore::IDBRequest::source):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::completeRequestAndDispatchEvent):
        (WebCore::IDBRequest::readyState): Deleted.
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::isDone):
        (WebCore::IDBRequest::objectStoreSource): Deleted.
        (WebCore::IDBRequest::indexSource): Deleted.
        (WebCore::IDBRequest::cursorSource): Deleted.
        * Modules/indexeddb/IDBRequest.idl:
        Replace the readyState String with a enum, and the custom source binding with a
        source function that returns a Variant.

        * Modules/indexeddb/IndexedDB.h:
        Add the missing values to CursorDirection to make it comply with the IDL definition.

        * bindings/generic/IDLTypes.h:
        * bindings/js/JSDOMConvert.h:
        (WebCore::JSConverter<IDLIDBKey<T>>::convert):
        Add new extension type IDLIDBKey.

        * bindings/js/JSIDBCursorCustom.cpp:
        (WebCore::JSIDBCursor::source): Deleted.
        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::source): Deleted.
        Remove custom bindings.

        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetBaseIDLType):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        (NativeToJSValue):
        Add support for IDBKey, and remove custom code for IndexedDB in core conversion logic.

        * bindings/scripts/IDLAttributes.txt:
        Remove now unused ImplementationReturnType attribute.

        * inspector/InspectorIndexedDBAgent.cpp:
        Update to work with new functions taking enums rather than strings.

2016-12-23  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r209299): Selection is broken when you zoom in webpage using trackpad
        https://bugs.webkit.org/show_bug.cgi?id=166472
        rdar://problem/29675551

        Reviewed by Tim Horton.

        r209299 broke autoscroll in zoomed pages because it changed RenderLayer::scrollRectToVisible()
        to shrink viewRect by page scale. This is incorrect for all callers of scrollRectToVisible, since
        the "absoluteRect" passed in is actually in zoomed document coordinates for all the callers I tested.

        This code is also fixed to account for headers and footers. getRectToExpose() takes rectangles
        in "scroll view contents" coordinates (i.e. including header, and zoomed document), so doesn't need
        the separate visibleRectRelativeToDocument parameter.

        Tests: fast/events/autoscroll-main-document.html
               fast/events/autoscroll-when-zoomed.html
               fast/events/drag-select-when-zoomed-with-header.html
               fast/events/drag-select-when-zoomed.html
               fast/scrolling/scroll-to-anchor-zoomed-header.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::getRectToExpose):
        * rendering/RenderLayer.h:

2016-12-24  Zalan Bujtas  <zalan@apple.com>

        RenderBlockFlow::moveFloatsTo does not move floats.
        https://bugs.webkit.org/show_bug.cgi?id=166467

        Reviewed by Darin Adler.

        RenderBlockFlow::moveFloatsTo name is misleading. Floats are not moved from "this" to
        the new RenderBlockFlow parent, but rather they are copied so that overhanging floats
        don't get lost.

        Covered by existing tests.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::cloneForNewParent):
        (WebCore::FloatingObject::unsafeClone): Deleted.
        * rendering/FloatingObjects.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addFloatsToNewParent):
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo):
        (WebCore::RenderBlockFlow::moveFloatsTo): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::mergeChildrenWithBase):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):

2016-12-23  Andreas Kling  <akling@apple.com>

        REGRESSION(r209865): Crash when navigating back to some pages with compositing layers.
        <https://webkit.org/b/166469>
        <rdar://problem/29109053>

        Reviewed by Darin Adler.

        Remove the old WK1-era clear/restoreBackingStores optimization from the page cache.
        When enabling it on non-iOS platforms, we started hitting lots of assertions,
        and none of our memory tests showed any significant improvement anyway.

        Test: compositing/page-cache-back-crash.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedFrame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::restoreBackingStores): Deleted.
        * page/FrameView.h:

2016-12-23  Sam Weinig  <sam@webkit.org>

        Add missing std::optional to ApplePayPaymentRequest.lineItems
        https://bugs.webkit.org/show_bug.cgi?id=166468

        Reviewed by Alexey Proskuryakov.

        No functional change, but is more consistent.

        * Modules/applepay/ApplePayPaymentRequest.h:
        Remove unnecessary #include of <heap/Strong.h>, add std::optional to lineItems.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        Update to deal with optional line items, remove unnecessary comment.

        * Modules/applepay/ApplePaySession.h:
        Remove unneeded forward declarations.

2016-12-22  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for WebSQL code
        https://bugs.webkit.org/show_bug.cgi?id=166441

        Reviewed by Darin Adler.

        - Replace custom variant type SQLValue with a type alias of a Variant.
        - Use the newly representable SQLValue to remove custom bindings for 
          SQLResultSetRowList::item and SQLTransaction::executeSql.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSSQLResultSetRowListCustom.cpp: Removed.
        * bindings/js/JSSQLTransactionCustom.cpp: Removed.
        * platform/sql/SQLValue.cpp: Removed.
        Remove files.

        * Modules/webdatabase/SQLResultSetRowList.cpp:
        (WebCore::SQLResultSetRowList::length):
        (WebCore::SQLResultSetRowList::item):
        * Modules/webdatabase/SQLResultSetRowList.h:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        Sink the implementation of item() into the implementation. Use a
        record type to bridge to javascript.

        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * Modules/webdatabase/SQLStatement.h:
        Update to take arguments by rvalue reference.

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSql):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransaction.idl:
        Remove custom annotation, and update signature to match the IDL.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        Remove unneeded #includes of SQLValue.h

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLNull>::convert):
        (WebCore::JSConverter<IDLNull>::convert):
        Implement conversion for the null type so it can be used in the SQLValue union.

        * inspector/InspectorDatabaseAgent.cpp:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindValue):
        (WebCore::SQLiteStatement::getColumnValue):
        * platform/sql/SQLiteStatement.h:
        Replace old switch with a WTF::switchOn that operates on the new variant.

        * platform/sql/SQLValue.h:
        (WebCore::SQLValue::SQLValue): Deleted.
        (WebCore::SQLValue::type): Deleted.
        Replace implementation with a Variant.

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

        [GTK] GLES build broken since r208997
        https://bugs.webkit.org/show_bug.cgi?id=166455

        Unreviewed. Fix the preprocessor guards here; this code is incompatible with GLES2.

        Looks like it's been broken for a month. Typical!

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):

2016-12-23  Zan Dobersek  <zdobersek@igalia.com>

        [EME][GStreamer] Enable various code paths for ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=166054

        Reviewed by Xabier Rodriguez-Calvar.

        Add ENABLE_ENCRYPTED_MEDIA build guards in various places in GStreamer
        code to enable decryption-related GStreamer elements and the proper
        decryptor handling in AppendPipeline.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::registerWebKitGStreamerElements):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        Only call needKey() if LEGACY_ENCRYPTED_MEDIA is enabled, since this is
        the way the legacy EME system expects to be notified of key necessity.
        It's very likely ENCRYPTED_MEDIA will do this differently.
        * 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::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2016-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Eliminate the use of lastChild in TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=166456

        Reviewed by Antti Koivisto.

        Just use the node we just existed in TextIterator::exitNode and in emitting additional new line
        to eliminate the use of Node::lastChild.

        Also initialize member variables in the declaration instead of the constructor to modernize the code.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::exitNode):
        * editing/TextIterator.h:

2016-12-22  Andy Estes  <aestes@apple.com>

        Reduce QuickLook.h include overhead
        https://bugs.webkit.org/show_bug.cgi?id=166454

        Reviewed by Andreas Kling.

        * dom/Document.cpp: Included QuickLook.h for QLPreviewProtocol().
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setQuickLookHandle): Moved from DocumentLoader.h to here.
        * loader/DocumentLoader.h: Stopped including QuickLook.h and forward-declared
        QuickLookHandle.
        (WebCore::DocumentLoader::setQuickLookHandle): Moved definition out-of-line since it
        requires QuickLookHandle to be a complete type.
        * loader/ios/QuickLook.h: Updated to use #pragma once. Cleaned up includes and forward
        declarations.
        * platform/network/ResourceHandle.cpp: Included QuickLook.h so that QuickLookHandle is a
        complete type in the ResourceHandle constructor.
        * platform/network/ResourceHandle.h: Stopped including QuickLook.h and forward-declared
        QuickLookHandle.
        (WebCore::ResourceHandle::setQuickLookHandle): Moved definition out-of-line since it
        requires QuickLookHandle to be a complete type.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::setQuickLookHandle): Moved from ResourceHandle.h to here.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: Included QuickLook.h for
        QuickLookHandle.

2016-12-22  Andy Estes  <aestes@apple.com>

        [iOS] Move QuickLook from WebCore/platform to WebCore/loader
        https://bugs.webkit.org/show_bug.cgi?id=166449

        Reviewed by Darin Adler.

        QuickLook.mm knows about ResourceLoader, so it's a layering violation to have it in
        platform/. Move it to loader/ios/.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ios/QuickLook.h: Renamed from Source/WebCore/platform/network/ios/QuickLook.h.
        * loader/ios/QuickLook.mm: Renamed from Source/WebCore/platform/network/ios/QuickLook.mm.

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

        Unreviewed, fix unused parameter warning in GLES build

        Looks like it's been here since 2012. Impressive!

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):

2016-12-22  Alex Christensen  <achristensen@webkit.org>

        Move GraphicsContext3DWin to GraphicsContext3DOpenGLES
        https://bugs.webkit.org/show_bug.cgi?id=166425

        Reviewed by Tim Horton.

        Move code which is GLES-specific not Windows-specific to the GLES-specific file
        so I can use it on Cocoa, with a temporary PLATFORM macro that I plan to remove once
        all platforms use ANGLE's GLES implementation. There is another copy of this code in
        GraphicsContext3DCairo, which will also be united with this code here soon.
        Also remove the PlatformCALayerWin, which was never used for anything.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/win/GraphicsContext3DWin.cpp: Removed.
        * PlatformMac.cmake:
        Include the egl directory.  I'll need this, too, once Mac starts using ANGLE's EGL implementation.

2016-12-22  Brent Fulgham  <bfulgham@apple.com>

        Nested calls to setDocument can omit firing 'unload' events
        https://bugs.webkit.org/show_bug.cgi?id=166422
        <rdar://problem/29763012>

        Reviewed by Alex Christensen.

        Test: fast/loader/nested-document-handling.html

        Only allow a single document change to be taking place during a given runloop cycle.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL): Block script changing the document
        when we are in the middle of changing the document.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Keep track of document change state.
        * page/Frame.h:

2016-12-22  Tim Horton  <timothy_horton@apple.com>

        TileGrid creates new cohorts even when not using temporarilyRetainTileCohorts mode
        https://bugs.webkit.org/show_bug.cgi?id=166440

        Reviewed by Simon Fraser.

        No new tests.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):
        If we are not temporarily retaining unparented tile cohorts (e.g. on
        iOS WebKit2), instead immediately removing all tiles that would go into
        the new cohort, avoid starting the cohort at all.

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

        Do not destroy the RenderNamedFlowFragment as leftover anonymous block.
        https://bugs.webkit.org/show_bug.cgi?id=166436
        rdar://problem/29772233

        Reviewed by Simon Fraser.

        When as the result of certain style change, the generated anonymous block is not needed anymore, we
        move its descendants up to the parent and destroy the generated box. While RenderNamedFlowFragment is a generated
        block, the cleanup code should just ignore it the same way we ignore boxes like multicolumn, mathml etc. 

        Test: fast/regions/flow-fragment-as-anonymous-block-crash.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):

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

        CSS Scroll Snap does not work if scrollbar is hidden
        https://bugs.webkit.org/show_bug.cgi?id=160442
        <rdar://problem/23317034>

        Reviewed by Simon Fraser.

        Currently, the only reason scroll snapping works in overflow scrolling containers without forcing layout is
        because we would initialize the scrolling container's ScrollAnimator in the process of updating scrollbars. If
        there are no scrollbars to render, we won't bother creating a ScrollAnimator. Without an existing
        ScrollAnimator, ScrollableArea::updateScrollSnapState will simply bail instead of setting up the scroll snap
        state. Instead, we should take setting a non-empty vector of scroll offsets on the ScrollableArea as a cue that
        the ScrollableArea also needs a ScrollAnimator, and initialize it there if necessary.

        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-hidden-scrollbars.html

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setHorizontalSnapOffsets):
        (WebCore::ScrollableArea::setVerticalSnapOffsets):

2016-12-22  Daniel Bates  <dabates@apple.com>

        Bypass pop-up blocker from cross-origin or sandboxed frame
        https://bugs.webkit.org/show_bug.cgi?id=166290
        <rdar://problem/29742039>

        Reviewed by Darin Adler.

        Tests: fast/events/popup-blocked-from-sandboxed-frame-via-window-open-named-sibling-frame.html
               fast/events/popup-blocked-from-sandboxed-frame-via-window-open-named-sibling-frame2.html
               fast/events/popup-blocked-from-unique-frame-via-window-open-named-sibling-frame.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open): Use FrameLoader::findFrameForNavigation() to find the
        target frame to navigate with respect to the active document just as we do in WebCore::createWindow().

2016-12-22  Andy Estes  <aestes@apple.com>

        Make WebCore::EditorInsertAction an enum class
        https://bugs.webkit.org/show_bug.cgi?id=166424

        Reviewed by Brent Fulgham.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyDictationAlternative):
        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainTextWithPasteboard):
        (WebCore::Editor::shouldInsertText):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::transpose):
        (WebCore::Editor::handleAcceptedCandidate):
        * editing/EditorInsertAction.h:
        (): Deleted.
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::replaceNodeFromPasteboard):
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        * page/ContextMenuController.cpp:
        (WebCore::insertUnicodeCharacter):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

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

        Only include those parts of AVFoundation.framework which are strictly needed.
        https://bugs.webkit.org/show_bug.cgi?id=166423

        Reviewed by Eric Carlson.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        * platform/mac/WebVideoFullscreenController.mm:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:

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

        NULL-deref CRASH in WebCore::PlatformMediaSession::mediaType
        https://bugs.webkit.org/show_bug.cgi?id=166407

        Reviewed by Darin Adler.

        In r207688, we added a facility in PlatformMediaSessionManager for safely walking through a
        list of PlatformMediaSessions by replacing entries of deleted sessions with nullptr. We now
        need to use those new iteration falicities in MediaSessionManageriOS.

        In addition to the existing iterators, add one which takes a predicate, and returns the first
        session which matches the predicate, or nullptr, if none do.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::findSession):
        (WebCore::PlatformMediaSessionManager::anyOfSessions):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::sessions): Deleted.
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
        (WebCore::MediaSessionManageriOS::nowPlayingEligibleSession):
        (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):
        (WebCore::MediaSessionManageriOS::applicationDidEnterBackground):
        (WebCore::MediaSessionManageriOS::applicationWillEnterForeground):

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

        Muted media element playback should not interrupt other audio playback
        https://bugs.webkit.org/show_bug.cgi?id=166347

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI/WebKit/ios/AudioSessionCategoryIOS.mm

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):

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

        Check for the existence of AVSampleBufferAudioRenderer.h before redeclaring AVSampleBufferAudioRenderer
        https://bugs.webkit.org/show_bug.cgi?id=166421

        Reviewed by Eric Carlson.

        * platform/spi/mac/AVFoundationSPI.h:

2016-12-22  Eric Carlson  <eric.carlson@apple.com>

        AVPlayerLayer isn't available on every system
        https://bugs.webkit.org/show_bug.cgi?id=166399

        Reviewed by Jer Noble.

        No new tests, prevents a crash that can't be reproduced on a test system.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: Use SOFT_LINK_CLASS_OPTIONAL.

2016-12-21  Tim Horton  <timothy_horton@apple.com>

        TileGrid revalidates tiles twice during flush, first with wrong visible rect
        https://bugs.webkit.org/show_bug.cgi?id=166406

        Reviewed by Simon Fraser.

        No new tests; existing tests cover this code, this is just a perf win,
        specifically reducing the amount of layer churn during zooming.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::setScale):
        Schedule a revalidation, which will happen later in the same flush,
        instead of doing it immediately. Doing it immediately is problematic,
        because we're currently in the middle of a GraphicsLayer tree flush,
        and don't have the complete picture of the new state yet. We're guaranteed
        to get the new scale *before* the flush calls revalidateTiles.

2016-12-21  Tim Horton  <timothy_horton@apple.com>

        TileGrid creates new tiles when there are recyclable tiles about to be removed
        https://bugs.webkit.org/show_bug.cgi?id=166408

        Reviewed by Simon Fraser.

        No new tests; existing tests cover this code, this is just a perf win,
        specifically reducing the amount of layer churn during zooming.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):
        Remove all the tiles that will be removed first, then add new tiles.
        Strictly ordering it this way means that tiles will be removed, go into
        the LayerPool, then be pulled back out of the LayerPool to sit in the
        newly-covered areas. Previously, we would sometimes make new layers
        for newly-covered areas, and then remove unneeded but otherwise recyclable
        tiles, which would then just go sit in the LayerPool (and often get
        pruned, wastefully).

2016-12-21  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Update media-stream-event-constructor test
        https://bugs.webkit.org/show_bug.cgi?id=166398

        Reviewed by Jer Noble.

        No new tests, updated existing test.

        * Modules/mediastream/MediaStreamEvent.idl: Mark eventInitDict as optional.

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

        WebKit should set Original URL of a download request correctly
        https://bugs.webkit.org/show_bug.cgi?id=166394
        <rdar://problem/25391382>

        Reviewed by Alex Christensen.

        WebKit should set Original URL of a download request correctly if the download
        is initiated by clicking on a link with target=_blank.

        Manually tested as the requested test infrastructure doesn't exist yet. We need actual
        loading process for API test such that we could simulate the real situation which
        PolicyDownload is only set when we receive responds. Currently we can only set
        PolicyDownload in a NavigationDelegate when the load starts. Hence we cannot simulate
        the following process: load starts -> PolicyUse -> creates a new WebView ->
        respond receives -> PolicyDownload -> downloads.

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

2016-12-21  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom binding for ErrorEvent
        https://bugs.webkit.org/show_bug.cgi?id=166345

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSErrorEventCustom.cpp: Removed.
        Remove JSErrorEventCustom.cpp

        * ForwardingHeaders/heap/HandleTypes.h: Added.
        Add forwarding header for HandleTypes.h

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        Switch to using JSDOMConvert and call the updated name for the error getter.

        * bindings/js/ScriptController.h:
        * bindings/js/SerializedScriptValue.h:
        Remove unnecessary forward declaration of ScriptValue.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError):
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptExecutionContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        Update type that sanitizeScriptError takes from a ScriptValue to a Strong<Unknown>.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/IDLAttributes.txt:
        Add a new extended attributes option for the CallWith, GlobalObject, that passes the global object.

        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::ErrorEvent):
        (WebCore::ErrorEvent::error):
        (WebCore::ErrorEvent::trySerializeError):
        (WebCore::ErrorEvent::sanitizedErrorValue): Deleted.
        * dom/ErrorEvent.h:
        Store a Strong<Unknown> directly, rather than a ScriptValue. Rename sanitizedErrorValue to 
        just error to match the IDL.

        * dom/ErrorEvent.idl:
        Remove CustomGetter.

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

        Modernize findPlainText
        https://bugs.webkit.org/show_bug.cgi?id=166299

        Reviewed by Sam Weinig.

        Modernized findPlainText by merging the static version of it into it
        and extracting the main nested loop out as findPlainTextOffset.

        No new tests since there should be no behavioral change.

        * editing/TextIterator.cpp:
        (WebCore::findPlainTextOffset):
        (WebCore::findPlainText):

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

        Switch to a blacklist model for restricted Accept headers in simple CORS requests
        https://bugs.webkit.org/show_bug.cgi?id=166363

        Reviewed by Alex Christensen.

        Updated existing tests.

        * platform/network/HTTPParsers.cpp:
        (WebCore::isDelimiterCharacter):
            Convenience function for checking delimiter characters according to:
            https://tools.ietf.org/html/rfc7230#section-3.2.6 
        (WebCore::isValidAcceptHeaderValue):
            Now uses WebCore::isDelimiterCharacter() to blacklist delimiter characters
            instead of a whitelist of accepted non-alphanumeric characters.

2016-12-21  Beth Dakin  <bdakin@apple.com>

        Holding down on candidates in the TouchBar should show panel on screen
        https://bugs.webkit.org/show_bug.cgi?id=166367
        -and corresponding-
        <rdar://problem/28479236>

        Reviewed by Tim Horton.

        Expose the version of setCandidates: that takes a rect.
        * platform/spi/cocoa/NSTouchBarSPI.h:

2016-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Extensions3DOpenGL[ES] constructor should not be explicit
        https://bugs.webkit.org/show_bug.cgi?id=166296

        Reviewed by Darin Adler.

        These constructors used to only have one parameter. Now they have two and they're both
        mandatory.

        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:

2016-12-21  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer can be called before it has a media stream
        https://bugs.webkit.org/show_bug.cgi?id=166344
        <rdar://problem/29763143>

        Reviewed by Jer Noble.

        There is a very narrow window during which a MediaStream player can be asked for its layer 
        before it has a steam, resulting in a NULL dereference and crash. Don't do that.

        Unable to reproduce.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer):

2016-12-21  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [Readable Streams API] Fix test in readableByteStreamCallPullIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=166312

        Reviewed by Youenn Fablet.

        Add a new function to evaluate if calling a pull function is
        required as per specification.

        No new test required.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerShouldCallPull): Added.
        (readableByteStreamControllerCallPullIfNeeded):

2016-12-21  Simon Fraser  <simon.fraser@apple.com>

        Fixed bars are positioned incorrectly when there are header and footer banners
        https://bugs.webkit.org/show_bug.cgi?id=166302
        rdar://problem/29727145

        Reviewed by Tim Horton.
        
        The computation of the visual viewport was wrong in the presence of header and footer
        banners. It needs to take into account the fact that "visibleContentRect" applies to the
        scroll view contents, which includes header and footer (unscaled), and the potentially scaled
        document, and we need to return a rectangle in unscaled document coordinates.
        
        Make a static method in FrameView to do this computation, and call it from FrameView::visualViewportRect()
        and ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition().
        
        layoutViewportForScrollPosition() is only called on Mac, so remove the #ifdeffing related to scaling, 
        and pass in an unscaled scroll position.

        Test: fast/visual-viewport/zoomed-fixed-header-and-footer.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::maxStableLayoutViewportOrigin):
        (WebCore::FrameView::visibleDocumentRect):
        (WebCore::FrameView::visualViewportRect):
        * page/FrameView.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):

2016-12-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Remove remaining INDIE_UI related entries.
        https://bugs.webkit.org/show_bug.cgi?id=165881

        Unreviewed.

        * CMakeLists.txt:

2016-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Conditional jump or move depends on uninitialised value(s)
        https://bugs.webkit.org/show_bug.cgi?id=166058

        Reviewed by Michael Catanzaro.

        Initialize x and y members of cairo_glyph_t struct before passing it to cairo_glyph_path.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::CairoGlyphToPathTranslator::path):

2016-12-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Skia lighter wght variation looks bolder than regular
        https://bugs.webkit.org/show_bug.cgi?id=165948

        Reviewed by Antti Koivisto.

        Test: fast/text/variations/default-value.html

        This patch inspects the font's information regarding variations. It uses this information
        to work around a bug in CoreText where default variation values were not getting applied.
        This workaround is placed behind a version check and the macro name
        "WORKAROUND_CORETEXT_VARIATIONS_DEFAULT_VALUE_BUG" so we know to delete it whenever
        possible. It also uses the minimum and maximum supported values for the axis to clamp our
        variation values to the closest supported point, which is in line with a recent edit to
        the fonts spec:
        https://github.com/w3c/csswg-drafts/commit/52b802ac38619286a30662dceb71b8a29fa72f42
        This clamping behavior also revealed another bug in CoreText, which was worked around
        behind another version check and macro name WORKAROUND_CORETEXT_VARIATIONS_EXTENTS_BUG so
        we know to delete it whenever possible.

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

2016-12-20  Tim Horton  <timothy_horton@apple.com>

        Remove a duplicate reference to ScrollingMomentumCalculatorMac.h in the Xcode project

        Rubber-stamped by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:

2016-12-20  Tim Horton  <timothy_horton@apple.com>

        Remove a duplicate reference to ScrollingMomentumCalculatorMac.mm in the Xcode project

        Rubber-stamped by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:

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

        Remove initEvent quirk
        https://bugs.webkit.org/show_bug.cgi?id=166284

        Reviewed by Dan Bernstein.

        We added this quirk in r207908 and expanded it in r209946 and r210034.
        Many web compatibility issues have been found, which leads us to believe that many more exist.
        This reverts the behavior to match how it was before r203848.
        This change was proposed to the spec in https://github.com/whatwg/dom/issues/387

        * dom/Event.cpp:
        (WebCore::Event::initEventForBindings): Deleted.
        * dom/Event.h:
        * dom/Event.idl:
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::IOSApplication::isBaiduNuomi): Deleted.
        (WebCore::IOSApplication::isAutoNaviAMap): Deleted.
        (WebCore::IOSApplication::isFlipboard): Deleted.

2016-12-20  JF Bastien  <jfbastien@apple.com>

        INDIE_UI: fix cmake build
        https://bugs.webkit.org/show_bug.cgi?id=166288

        Reviewed by Mark Lam.

        Bug #165881 didn't remove a file from cmake.

        * PlatformMac.cmake:

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

        Fix clean Windows build after r210029
        https://bugs.webkit.org/show_bug.cgi?id=165881

        * DerivedSources.cpp:

2016-12-20  Brent Fulgham  <bfulgham@apple.com>

        Address some style problems found by static analysis
        https://bugs.webkit.org/show_bug.cgi?id=165975

        Reviewed by Alex Christensen.

        Correct the const-correctness of functions that are implemented using stricter
        const declarations.

        Avoid passing large ANGLE data structures through the ANGLEWebKitBridge methods.

        * inspector/InspectorCSSAgent.h: Declare the method overrides properly to match
        the stricter const declarations in the implementation files.
        * inspector/InspectorDOMAgent.h: Ditto.
        * inspector/InspectorPageAgent.h: Ditto.
        * inspector/InspectorTimelineAgent.h: Ditto.
        * inspector/PageDebuggerAgent.h: Ditto.
        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::setResources): Pass by const reference.
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEWebKitBridge::getResources): Return a const reference.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::selectSettings): Use a lambda that takes
        a const reference, rather than copying the maps while searching.

2016-12-20  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom binding for WorkerGlobalScope::importScripts
        https://bugs.webkit.org/show_bug.cgi?id=166243

        Reviewed by Alex Christensen.

        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::importScripts): Deleted.
        * workers/WorkerGlobalScope.idl:
        Import scripts can now be trivially generated.

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

        SVG elements should inherit the root's flow thread state.
        https://bugs.webkit.org/show_bug.cgi?id=166173
        rdar://problem/29704862

        Reviewed by Simon Fraser.

        When the <svg> is not part of the multicolumn context (out of flow positioning), its descendants should not be in the flow either.

        Test: fast/multicol/svg-inside-multicolumn.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computedFlowThreadState):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isProgress):
        (WebCore::RenderObject::isRenderSVGBlock):
        * rendering/svg/RenderSVGBlock.h:

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

        Fix yet another app that uses initEvent with fewer than 3 parameters
        https://bugs.webkit.org/show_bug.cgi?id=166257
        <rdar://problem/29420268>

        Reviewed by Sam Weinig.

        * dom/Event.cpp:
        (WebCore::Event::initEventForBindings):
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::IOSApplication::isAutoNaviAMap):
        AutoNavi amap has content that uses initEvent with one parameter. This quirk is needed here, too.

2016-12-20  Dean Jackson  <dino@apple.com>

        Remove INDIE_UI
        https://bugs.webkit.org/show_bug.cgi?id=165881
        <rdar://problem/29672532>

        Reviewed by Simon Fraser.

        The Indie UI work has been discontinued.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/indieui/UIRequestEvent.cpp: Removed.
        * Modules/indieui/UIRequestEvent.h: Removed.
        * Modules/indieui/UIRequestEvent.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::setUIActions): Deleted.
        (WebCore::Element::UIActions): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.in:
        * dom/Node.cpp:
        (WebCore::Node::dispatchUIRequestEvent): Deleted.
        * dom/Node.h:

2016-12-20  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement readableByteStreamControllerCallPullIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=166022

        Reviewed by Youenn Fablet.

        Implemented readableByteStreamControllerCallPullIfNeeded(). This function is
        in particular called when a new ReadableByteStreamController is created; hence,
        ReadableByteStreamController constructor has been updated.

        Added 3 tests to check behaviour in case of success/failure of the start and pull functions
        associated to the underlyingByteSource.

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Updated handling of underlyingByteSource
        start function (especially with call to readableByteStreamControllerCallPullIfNeeded).
        (isReadableStreamBYOBReader): Added.
        (readableStreamHasBYOBReader): Added.
        (readableStreamHasDefaultReader): Added.
        (readableByteStreamControllerCallPullIfNeeded): Added.
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultController): Added missing asserts.
        * bindings/js/WebCoreBuiltinNames.h: Added readIntoRequests.

2016-12-20  Sam Weinig  <sam@webkit.org>

        [DataCue] Un-prefix DataCue and remove custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=166087

        Reviewed by Eric Carlson.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDataCueCustom.cpp: Removed.
        Remove JSDataCueCustom.cpp

        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJSNewlyCreated):
        Remove out of date comment.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        Update constructor generation code to use JSDOMConvert.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue):
        (WebCore::DataCue::~DataCue):
        (WebCore::DataCue::data):
        (WebCore::DataCue::setData):
        (WebCore::DataCue::cueContentsMatch):
        (WebCore::DataCue::value):
        (WebCore::DataCue::setValue):
        (WebCore::DataCue::valueOrNull):
        * html/track/DataCue.h:
        * html/track/DataCue.idl:
        * platform/SerializedPlatformRepresentation.h:
        Remove DATACUE_VALUE define from web exposed classes, so the interface can
        be the same on all platforms. Platforms that don't support DATACUE_VALUE will
        just never have any value. Also remove custom annotations.

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

        Implement the updated port/area-based Scroll Snap Module Level 1 Spec
        https://bugs.webkit.org/show_bug.cgi?id=165317
        <rdar://problem/29490956>

        Reviewed by Dean Jackson.

        Implements the changes drafted in the latest iteration of the Scroll Snap Module Level 1 spec, which uses a
        snap-area and snap-port-based method for determining snap positions in a scroll snapping container.
        Additionally, removes the now-obsolete and prefixed implementation of the scroll snap spec and refactors all
        affected layout tests to use the new CSS properties. Also adds new layout tests covering some behaviors detailed
        in the new version of the spec, such as scroll snapping with transformed child elements.

        See below for more detailed descriptions of the changes.

        Tests: css3/scroll-snap/scroll-snap-2d-change-axis-type.html
               css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html
               css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html
               css3/scroll-snap/scroll-snap-children-with-transforms.html
               css3/scroll-snap/scroll-snap-positions-mainframe.html
               css3/scroll-snap/scroll-snap-positions-overflow-resize.html
               css3/scroll-snap/scroll-snap-positions.html
               css3/scroll-snap/scroll-snap-style-changed-align.html
               css3/scroll-snap/scroll-snap-with-scroll-padding.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):

        Removed use of length repeat.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForScrollSnapType):
        (WebCore::valueForScrollSnapAlignment):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::scrollSnapDestination): Deleted.
        (WebCore::scrollSnapPoints): Deleted.
        (WebCore::scrollSnapCoordinates): Deleted.

        Removed helper functions used to create CSS values for scroll snap coordinates and destination, and added
        helpers for computed scroll snap type (a combination of axis and strictness values) as well as scroll snap align
        (an alignment value per axis).

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):

        Removed usages of the length repeat type, since repeat(*) is no longer being used anywhere.

        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ScrollSnapStrictness):
        (WebCore::CSSPrimitiveValue::operator ScrollSnapAxis):
        (WebCore::CSSPrimitiveValue::operator ScrollSnapAxisAlignType):
        (WebCore::CSSPrimitiveValue::operator ScrollSnapType): Deleted.

        Added CSSPrimitiveValue mappings to ScrollSnapAxisAlignType, ScrollSnapStrictness, and ScrollSnapAxis. Removed
        the old ScrollSnapType mapping.

        * css/CSSProperties.json:

        Replaced the old scroll snap CSS properties with the new ones. Note that scroll-snap-margin and scroll-padding
        have 4 shorthands each, for the individual top/bottom/left/right values.

        * css/CSSValueKeywords.in:

        Added CSS keywords {x, y}, which are necessary to support the new scroll snapping properties.

        * css/LengthRepeat.h: Removed.

        Removed LengthRepeat entirely. This represented the `repeat(<length>)` CSS value, which was only used for the
        scroll-snap-points-x and scroll-snap-points-y values.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertScrollSnapType):
        (WebCore::StyleBuilderConverter::convertScrollSnapAlign):
        (WebCore::StyleBuilderConverter::parseSnapCoordinate): Deleted.
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints): Deleted.
        (WebCore::StyleBuilderConverter::convertSnapCoordinatePair): Deleted.
        (WebCore::StyleBuilderConverter::convertScrollSnapCoordinates): Deleted.

        Added helper functions to convert scroll snap type and scroll snap alignment from parsed CSS values to their
        primary representation in WebCore as ScrollSnapType and ScrollSnapAlign. These methods assume that the given
        CSS values have successfully cleared the parsing step and are represented as CSSValueLists or length 1 or 2.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsX): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsX): Deleted.
        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsY): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsY): Deleted.
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):

        Adds support for the scroll-snap-margin and scroll-padding.

        * css/parser/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::isScrollSnapAxisAlign):
        (WebCore::isScrollSnapStrictness):
        (WebCore::CSSParser::parseScrollSnapAlign):
        (WebCore::CSSParser::parseScrollSnapType):
        (WebCore::CSSParser::parseNonElementSnapPoints): Deleted.
        (WebCore::CSSParser::parseScrollSnapPositions): Deleted.
        (WebCore::CSSParser::parseScrollSnapDestination): Deleted.
        (WebCore::CSSParser::parseScrollSnapCoordinate): Deleted.
        * css/parser/CSSParser.h:

        Removed references to LengthRepeat, and added support for parsing new scroll snapping properties. Scroll snap
        margin and scroll padding, along with their shorthands, are parsed using the same helper functions as normal
        margin and padding. For type and align, I added new helper functions that build up lists of 1 or 2
        CSSPrimitiveValues for each of the properties.

        Parsing scroll-snap-align is straightforward -- we either have one or two values in the set {none, start,
        center, end}. For scroll-snap-type, we allow a single axis value {x, y, inline, block, both}, or a single
        strictness value {none, proximity, mandatory}, or an axis value followed by a non-'none' strictness (i.e. either
        proximity or mandatory).

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):

        Removed references to LengthRepeat.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):
        (WebCore::consumeSnapPointCoordinateList): Deleted.
        (WebCore::consumeScrollSnapCoordinate): Deleted.
        (WebCore::consumeScrollSnapDestination): Deleted.
        (WebCore::consumeScrollSnapPoints): Deleted.
        (WebCore::consumeScrollSnapAlign):
        (WebCore::consumeScrollSnapType):
        (WebCore::CSSPropertyParser::parseSingleValue):

        Added parsing for the longhand properties of scroll-snap-margin and scroll-padding, which use the existing
        consumeLength and consumeLengthOrPercent helpers, respectively. Removed code for parsing scroll snap
        coordinates, destinations and points. Added parsing logic for align and type.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::computeScrollSnapPortOrAreaRect):
        (WebCore::computeScrollSnapAlignOffset):
        (WebCore::snapOffsetsToString):
        (WebCore::snapPortOrAreaToString):
        (WebCore::updateSnapOffsetsForScrollableArea):
        (WebCore::appendChildSnapOffsets): Deleted.
        (WebCore::destinationOffsetForViewSize): Deleted.
        (WebCore::updateFromStyle): Deleted.
        (WebCore::styleUsesElements): Deleted.

        Overhauled updateSnapOffsetsForScrollableArea to work with the new scroll snapping model. In the new way of
        computing scroll snap offsets, we:

        Compute the scroll container's scroll snap port, which is the padding box inset by the scroll padding
        For each child with snap positions (i.e. scroll-snap-align is not none on both axes)
          Compute the child's scroll snap area, which is the bounding box of the transformed border box
            If the container snaps along the horizontal axis and the snap area contributes a horizontal snap offset:
              Emit the distance from the alignment offset in the horizontal of the snap port to the corresponding offset
              in the snap area as a snap position.
            If the container snaps along the vertical axis and the snap area contributes a vertical snap offset:
              Emit the distance from the alignment offset in the vertical of the snap port to the corresponding offset
              in the snap area as a snap position.
        For the snap offsets in each axis, if there is at least one snap offset:
          Clamp the offsets to the min and max scroll offsets
          Ensure that the offsets are sorted and do not contain duplicated offsets

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

        Clear out the ScrollController's snap offsets and state along an axis when its ScrollableArea no longer has snap
        offsets in that axis.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::willBeRemovedFromTree):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::scrollSnapContainerRequiresUpdateForStyleUpdate):
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::registerBoxWithScrollSnapPositions):
        (WebCore::RenderView::unregisterBoxWithScrollSnapPositions):
        (WebCore::RenderView::registerBoxWithScrollSnapCoordinates): Deleted.
        (WebCore::RenderView::unregisterBoxWithScrollSnapCoordinates): Deleted.
        * rendering/RenderView.h:

        Tweaked the scroll snap child registration logic. registerBoxWithScrollSnapCoordinates is renamed to
        unregisterBoxWithScrollSnapPositions, since the notion of scroll snap coordinates no longer exists, and instead
        of checking if the list of scroll snap coordinates is empty for the absence of scroll positions, we instead
        check for a computed scroll snap align that is not none on both axes.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::initialScrollSnapType):
        (WebCore::RenderStyle::initialScrollSnapAlign):
        (WebCore::RenderStyle::scrollSnapArea):
        (WebCore::RenderStyle::scrollSnapPort):
        (WebCore::RenderStyle::scrollSnapType):
        (WebCore::RenderStyle::scrollPadding):
        (WebCore::RenderStyle::scrollPaddingTop):
        (WebCore::RenderStyle::scrollPaddingBottom):
        (WebCore::RenderStyle::scrollPaddingLeft):
        (WebCore::RenderStyle::scrollPaddingRight):
        (WebCore::RenderStyle::scrollSnapAlign):
        (WebCore::RenderStyle::scrollSnapMargin):
        (WebCore::RenderStyle::scrollSnapMarginTop):
        (WebCore::RenderStyle::scrollSnapMarginBottom):
        (WebCore::RenderStyle::scrollSnapMarginLeft):
        (WebCore::RenderStyle::scrollSnapMarginRight):
        (WebCore::RenderStyle::setScrollSnapType):
        (WebCore::RenderStyle::setScrollPaddingTop):
        (WebCore::RenderStyle::setScrollPaddingBottom):
        (WebCore::RenderStyle::setScrollPaddingLeft):
        (WebCore::RenderStyle::setScrollPaddingRight):
        (WebCore::RenderStyle::setScrollSnapAlign):
        (WebCore::RenderStyle::setScrollSnapMarginTop):
        (WebCore::RenderStyle::setScrollSnapMarginBottom):
        (WebCore::RenderStyle::setScrollSnapMarginLeft):
        (WebCore::RenderStyle::setScrollSnapMarginRight):
        (WebCore::RenderStyle::initialScrollSnapDestination): Deleted.
        (WebCore::RenderStyle::initialScrollSnapCoordinates): Deleted.
        (WebCore::RenderStyle::scrollSnapPointsX): Deleted.
        (WebCore::RenderStyle::scrollSnapPointsY): Deleted.
        (WebCore::RenderStyle::scrollSnapDestination): Deleted.
        (WebCore::RenderStyle::scrollSnapCoordinates): Deleted.
        (WebCore::RenderStyle::setScrollSnapPointsX): Deleted.
        (WebCore::RenderStyle::setScrollSnapPointsY): Deleted.
        (WebCore::RenderStyle::setScrollSnapDestination): Deleted.
        (WebCore::RenderStyle::setScrollSnapCoordinates): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialScrollSnapMargin):
        (WebCore::RenderStyle::initialScrollPadding):
        (WebCore::RenderStyle::scrollSnapType): Deleted.
        (WebCore::RenderStyle::setScrollSnapType): Deleted.
        (WebCore::RenderStyle::initialScrollSnapType): Deleted.
        (WebCore::RenderStyle::initialScrollSnapPointsX): Deleted.
        (WebCore::RenderStyle::initialScrollSnapPointsY): Deleted.

        Added boilerplate code for returning various new scroll snap style properties, and removed similar code for
        handling the old scroll snap properties.

        * rendering/style/RenderStyleConstants.h:

        Added three new enum classes:
        - ScrollSnapStrictness represents the strictness of scroll snapping along one or both axes
        - ScrollSnapAxis designates the axes along which scroll snapping should occur
        - ScrollSnapAxisAlignType indicates which offsets along the x or y axes of the snap port and snap area should be
          used to compute the snap position emitted by a snap area.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

        Replaces the StyleScrollSnapPoints object (which, confusingly, was in charge of storing both the scroll
        container's and child elements' scroll snap styles) with StyleScrollSnapPort and StyleScrollSnapArea objects,
        which keep track of the style properties on the scroll container and the child element, respectively.

        * rendering/style/StyleScrollSnapPoints.h:
        (WebCore::operator==):
        (WebCore::StyleScrollSnapPort::copy):
        (WebCore::StyleScrollSnapPort::StyleScrollSnapPort):
        (WebCore::StyleScrollSnapArea::copy):
        (WebCore::StyleScrollSnapArea::StyleScrollSnapArea):
        * rendering/style/StyleScrollSnapping.h: Added.
        (WebCore::operator!=):
        (WebCore::StyleScrollSnapPort::create):
        (WebCore::StyleScrollSnapArea::create):
        (WebCore::StyleScrollSnapArea::hasSnapPosition):

        Overhauled StyleScrollSnapPoints, breaking the logic here into two classes: StyleScrollSnapPort for the scroll
        container, handling the properties `scroll-snap-type` and `scroll-padding` and StyleScrollSnapArea for child
        elements, handling the properties `scroll-snap-align` and `scroll-snap-margin`. The ScrollSnapType itself is
        composed of an axis value and a strictness, while a ScrollSnapAlign keeps track of the alignment modes in each
        axis. By default, these are initialized to {Both, None} and {None, None}, respectively. The rest of the logic is
        boilerplate code for comparing these style objects to one another and copying style representations.

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

        Perform a layout on the document if needed before returning the list of computed snap offsets. The absence of
        this layout pass was causing some layout tests in css3/scroll-snap/ to flake when testing that programmatic
        changes to the scroll snap style properties change the computed snap offsets.

2016-12-19  Dean Jackson  <dino@apple.com>

        Use ENABLE() in place of ENABLE_CSS_SELECTORS_LEVEL4
        https://bugs.webkit.org/show_bug.cgi?id=166043
        <rdar://problems/29743655>

        Reviewed by Alex Christensen.

        This doesn't compile unless the ENABLE_CSS_SELECTORS_LEVEL4 is defined.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isOnlyPseudoClassFunction):
        (WebCore::CSSSelectorParser::consumePseudo):
        (WebCore::CSSSelectorParser::consumeCombinator):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):

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

        Unreviewed, attempt to fix Windows Debug build part 2
        https://bugs.webkit.org/show_bug.cgi?id=166035

        Ensured that this patch passes the build on the GTK port.

        * rendering/RenderElement.cpp:
        * rendering/RenderElement.h:

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

        Unreviewed, fix Windows Debug build
        https://bugs.webkit.org/show_bug.cgi?id=166035

        The size of SameSizeAsRenderElement should be in sync with sizeof(RenderElement).

        * rendering/RenderElement.cpp:

2016-12-20  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        WebRTC: RTCPeerConnection constructor argument should be optional
        https://bugs.webkit.org/show_bug.cgi?id=164057

        Reviewed by Youenn Fablet.

        Modify RTCPeerConnection JSBuiltin constructor to allow RTCPeerConfiguration
        argument to be optional.

        Update existing tests.

        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):

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

        [ES6] Enable ES6 Modules
        https://bugs.webkit.org/show_bug.cgi?id=165849

        Reviewed by Geoffrey Garen.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::determineScriptType):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * page/Settings.in:

2016-12-17  Sam Weinig  <sam@webkit.org>

        Remove a few trivial custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=165999

        Reviewed by Simon Fraser.

        * CMakeLists.txt:
        * bindings/js/JSBindingsAllInOne.cpp:
        Remove files.

        * WebCore.xcodeproj/project.pbxproj:
        Move custom bindings that only exist for GC or wrapping reasons
        to their own group, so we can focus on the ones with custom functions.

        * bindings/js/JSDataTransferCustom.cpp: Removed.
        * bindings/js/JSTrackEventCustom.cpp: Removed.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::types):
        Remove incorrect comment and use a more concise empty initialization syntax.

        * dom/DataTransfer.idl:
        Update IDL to remove [Custom] annotation and match spec better.

        * html/track/TrackEvent.cpp:
        (WebCore::convertToTrackEventTrack):
        (WebCore::TrackEvent::TrackEvent):
        * html/track/TrackEvent.h:
        Switch to store the Track in a Variant to make the binding easier.

        * html/track/TrackEvent.idl:
        Remove [CustomGetter] annotation.

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

        Do not position detached list item marker.
        https://bugs.webkit.org/show_bug.cgi?id=166035
        <rdar://problem/29175235>

        Reviewed by Simon Fraser.

        In certain (non-reproducible) cases, the list item marker can get detached from the tree
        during layout and when in RenderListItem::positionListMarker() we dereference the marker's parent, we crash.
        In addition to the null check, this patch adds an ASSERTION to catch such cases early on.

        Unable to reproduce.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChildInternal):
        * rendering/RenderElement.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::layout):
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:

2016-12-19  Gavin Barraclough  <barraclough@apple.com>

        [CSS Parser] Enable CSS Deferred Parsing
        https://bugs.webkit.org/show_bug.cgi?id=165869

        Unreviewed rollout – looks like this regressed performance.

        * css/parser/CSSParserMode.h:
        * page/Settings.in:

2016-12-18  Brent Fulgham  <bfulgham@apple.com>

        Side effects while restting form elements
        https://bugs.webkit.org/show_bug.cgi?id=165959
        <rdar://problem/29705967>

        Reviewed by Anders Carlsson.

        JavaScript logic can run while resetting FormElement objects. This can
        lead to unintended side-effets and other unwanted behavior. We should
        protect these elements during the reset.

        Test: fast/html/form-mutate.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Switch to C++11 initialization.
        (WebCore::HTMLFormElement::reset): Protect elements until the reset
        operation is finished.
        (WebCore::HTMLFormElement::resetAssociatedFormControlElements): Added to share
        code with 'resumeFromDocument'.
        (WebCore::HTMLFormElement::resumeFromDocument): Protect elements until the
        reset operation is finished.

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

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

        There's intent to support persistent-usage-record (Requested
        by zdobersek on #webkit).

        Reverted changeset:

        "[EME] Remove MediaKeySessionType::persistent-usage-record"
        https://bugs.webkit.org/show_bug.cgi?id=166012
        http://trac.webkit.org/changeset/209983

2016-12-19  Sam Weinig  <sam@webkit.org>

        Move custom files / callback objects into their respective groups.

        Rubber-stamped by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:

2016-12-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom binding for the named Image constructor
        https://bugs.webkit.org/show_bug.cgi?id=166023

        Reviewed by Alex Christensen.

        * bindings/js/JSBindingsAllInOne.cpp:
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove JSImageConstructor.

        * bindings/js/JSImageConstructor.cpp: Removed.
        * bindings/js/JSImageConstructor.h: Removed.
        
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::image): Deleted.
        * page/DOMWindow.idl:
        Remove custom getter for the constructor.

        * html/HTMLImageElement.idl:
        Add NamedConstructor annotation.

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

        Remove RenderObject::requiresForcedStyleRecalcPropagation
        https://bugs.webkit.org/show_bug.cgi?id=166021

        Reviewed by Andreas Kling.

        It is not called. It also makes no sense architecturally.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::requiresForcedStyleRecalcPropagation): Deleted.
        * rendering/RenderProgress.h:
        * rendering/RenderSlider.h:
        * rendering/RenderTextControl.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

            This is the only call site. Combination

                update.change == Style::NoChange && parent().styleChange == Style::Force

            is impossible ('Force' inherits) so requiresForcedStyleRecalcPropagation doesn't ever even get called.

2016-12-19  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Remove MediaKeySessionType::persistent-usage-record
        https://bugs.webkit.org/show_bug.cgi?id=166012

        Reviewed by Xabier Rodriguez-Calvar.

        Remove the "persistent-usage-record" value from the MediaKeySessionType.
        This was removed from the spec as an at-risk feature.
        https://github.com/w3c/encrypted-media/issues/353

        No non-imported tests need to be updated. This is still present in the
        tests imported from the W3C's web-platform-tests repository, but the
        tests haven't yet been updated upstream.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::isPersistentType):
        * Modules/encryptedmedia/MediaKeySessionType.h:
        * Modules/encryptedmedia/MediaKeySessionType.idl:

2016-12-19  Miguel Gomez  <magomez@igalia.com>

        [GTK] GLXBadFBConfig error when creating an OpenGL context
        https://bugs.webkit.org/show_bug.cgi?id=165200

        Reviewed by Carlos Garcia Campos.

        glXCreateContextAttribsARB causes a GLXBadFBConfig X error when it's not able to provide the
        OpenGL version >= 3.2 we are requesting. Due to this, the app crashes instead of falling back to
        the legacy path.
        The patch modifies GLX context creation using a XErrorTrapper, so the first time a context is created
        we don't crash if OpenGL >= 3.2 is not available.
        If the gotten context is not valid, we fall back to whatever version glXCreateContextAttribsARB is
        able to provide.
        The legacy glXCreateContext is only used if the GLX_ARB_create_context extension is not available.

        Covered by existent tests.

        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::tryCreateGLXARBContext):
        (WebCore::GLContextGLX::createWindowContext):
        (WebCore::GLContextGLX::createPbufferContext):

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

        IndexedDB 2.0: Prefetch cursor records in the server.
        https://bugs.webkit.org/show_bug.cgi?id=166014

        Reviewed by Andy Estes.

        No new tests (Covered by existing LayoutTests and PerformanceTests).

        This patch implements the followng:
        1 - After a backing store cursor completes a fetch in the server, it will schedule the next fetch 
            even before the client requests one. It will do this up to a limited number of prefetches.
        2 - Once a client request to advance the cursor comes in, we'll work our way through prefetched
            records instead of reading anything from disk, which might then cause us to continue prefetch.
        3 - If any changes to the object store occur, it will throw away all previously fetched records
            (There's room for future improvement here)

        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::postDatabaseTask):
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRange):
        (WebCore::IDBServer::SQLiteIDBBackingStore::prefetchCursor):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::objectStoreRecordsChanged):
        (WebCore::IDBServer::SQLiteIDBCursor::prefetch):
        (WebCore::IDBServer::SQLiteIDBCursor::advance):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

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

        Changing text direction fires input events with null inputTypes and no data
        https://bugs.webkit.org/show_bug.cgi?id=166007
        <rdar://problem/29557205>

        Reviewed by Sam Weinig.

        Adds support for the "formatSetInlineTextDirection" input type, triggered when using the context menu on Mac in
        an editable area (for both plain and rich text cases) to change paragraph direction. To do this, we add cases
        for EditActionSetWritingDirection in inputTypeNameForEditingAction and inputEventDataForEditingStyleAndAction.

        When changing text direction for a plaintext editable element, we have logic in Editor::setBaseWritingDirection
        that sets the focused element's dir attribute to the requested value (ltr or rtl). We add similar hooks here to
        dispatch input events and handle preventing default.

        Test: fast/events/before-input-events-prevent-text-direction.html

        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):

        Handle the EditActionSetWritingDirection case.

        * editing/Editor.cpp:
        (WebCore::inputEventDataForEditingStyleAndAction):
        (WebCore::Editor::applyParagraphStyle):

        Include input event data when dispatching an input event here.

        (WebCore::Editor::setBaseWritingDirection):
        * testing/Internals.cpp:
        (WebCore::Internals::setBaseWritingDirection):
        * testing/Internals.h:
        * testing/Internals.idl:

        Introduce an internal testing support hook for setting base writing direction (the same codepath taken when
        using the context menu to change paragraph direction). Currently, using testRunner.execCommand creates and
        applies style with an additional `unicode-bidi` attribute, and appears to also be intentionally disabled for
        plaintext editable elements.

2016-12-17  Simon Fraser  <simon.fraser@apple.com>

        Build fix: linking WebCore was failing: you can't export inline functions.

        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType):
        (WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue):
        * css/DeprecatedCSSOMPrimitiveValue.h:
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType): Deleted.
        (WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue): Deleted.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue): Deleted.
        (WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue): Deleted.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue): Deleted.

2016-12-16  Dave Hyatt  <hyatt@apple.com>

        [CSS Values] Make separate wrapper classes for the deprecated CSS Values OM
        https://bugs.webkit.org/show_bug.cgi?id=165968

        Reviewed by Andreas Kling.

        This patch changes the CSS OM for values to use distinct wrapper
        classes instead of cloning the existing classes. By actually wrapping
        values instead of cloning, we are freed up to change our CSS value hierarchy
        however we'd like (such as changing to match the new CSS Values OM that
        is coming soon).

        All of the CSS Values wrapper classes are prefixed with "DeprecatedCSSOM"
        to reflect our desire (ultimately) to remove this API from our tree. We're
        the only ones that support it, and it's not used on the Web, but it is part
        of the WebKitLegacy API and might be used internally.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDeprecatedCSSOMValueOwner::finalize):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots): Deleted.
        (WebCore::JSCSSValueOwner::finalize): Deleted.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSGridLineNamesValue.cpp:
        (WebCore::CSSGridLineNamesValue::cloneForCSSOM): Deleted.
        * css/CSSGridLineNamesValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cloneForCSSOM): Deleted.
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::createDeprecatedCSSOMWrapper):
        (WebCore::CSSImageValue::cloneForCSSOM): Deleted.
        * css/CSSImageValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createDeprecatedCSSOMPrimitiveWrapper):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM): Deleted.
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValue.idl: Removed.
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::traverseSubresources):
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::createDeprecatedCSSOMWrapper):
        (): Deleted.
        (WebCore::CSSValue::cloneForCSSOM): Deleted.
        * css/CSSValue.h:
        (WebCore::CSSValue::CSSValue):
        (WebCore::CSSValue::setCssText): Deleted.
        (WebCore::CSSValue::isCSSOMSafe): Deleted.
        (WebCore::CSSValue::isSubtypeExposedToCSSOM): Deleted.
        * css/CSSValue.idl: Removed.
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::cloneForCSSOM): Deleted.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::separator):
        * css/CSSValueList.idl: Removed.
        * css/Counter.h:
        * css/Counter.idl: Removed.
        * css/DeprecatedCSSOMCounter.h: Added.
        * css/DeprecatedCSSOMCounter.idl: Copied from Source/WebCore/css/Counter.idl.
        * css/DeprecatedCSSOMPrimitiveValue.cpp: Added.
        (WebCore::DeprecatedCSSOMPrimitiveValue::getCounterValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRectValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRGBColorValue):
        * css/DeprecatedCSSOMPrimitiveValue.h: Added.
        (WebCore::DeprecatedCSSOMPrimitiveValue::create):
        (WebCore::DeprecatedCSSOMPrimitiveValue::equals):
        (WebCore::DeprecatedCSSOMPrimitiveValue::cssValueType):
        (WebCore::DeprecatedCSSOMPrimitiveValue::cssText):
        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType):
        (WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::stringValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::DeprecatedCSSOMPrimitiveValue):
        * css/DeprecatedCSSOMPrimitiveValue.idl: Copied from Source/WebCore/css/CSSPrimitiveValue.idl.
        * css/DeprecatedCSSOMRGBColor.h: Added.
        * css/DeprecatedCSSOMRGBColor.idl: Copied from Source/WebCore/css/RGBColor.idl.
        * css/DeprecatedCSSOMRect.h: Added.
        * css/DeprecatedCSSOMRect.idl: Copied from Source/WebCore/css/Rect.idl.
        * css/DeprecatedCSSOMValue.cpp: Added.
        (WebCore::compareCSSOMValues):
        (WebCore::DeprecatedCSSOMValue::equals):
        (WebCore::DeprecatedCSSOMValue::destroy):
        (WebCore::DeprecatedCSSOMValue::cssValueType):
        (WebCore::DeprecatedCSSOMValue::cssText):
        * css/DeprecatedCSSOMValue.h: Added.
        (WebCore::DeprecatedCSSOMValue::deref):
        (WebCore::DeprecatedCSSOMValue::setCssText):
        (WebCore::DeprecatedCSSOMValue::operator==):
        (WebCore::DeprecatedCSSOMValue::isComplexValue):
        (WebCore::DeprecatedCSSOMValue::isPrimitiveValue):
        (WebCore::DeprecatedCSSOMValue::isValueList):
        (WebCore::DeprecatedCSSOMValue::classType):
        (WebCore::DeprecatedCSSOMValue::DeprecatedCSSOMValue):
        (WebCore::DeprecatedCSSOMValue::~DeprecatedCSSOMValue):
        (WebCore::DeprecatedCSSOMComplexValue::create):
        (WebCore::DeprecatedCSSOMComplexValue::equals):
        (WebCore::DeprecatedCSSOMComplexValue::cssText):
        (WebCore::DeprecatedCSSOMComplexValue::cssValueType):
        (WebCore::DeprecatedCSSOMComplexValue::DeprecatedCSSOMComplexValue):
        * css/DeprecatedCSSOMValue.idl: Copied from Source/WebCore/css/CSSValue.idl.
        * css/DeprecatedCSSOMValueList.cpp: Added.
        (WebCore::DeprecatedCSSOMValueList::equals):
        (WebCore::DeprecatedCSSOMValueList::cssText):
        * css/DeprecatedCSSOMValueList.h: Added.
        (WebCore::DeprecatedCSSOMValueList::create):
        (WebCore::DeprecatedCSSOMValueList::cssValueType):
        (WebCore::DeprecatedCSSOMValueList::length):
        (WebCore::DeprecatedCSSOMValueList::item):
        (WebCore::DeprecatedCSSOMValueList::DeprecatedCSSOMValueList):
        * css/DeprecatedCSSOMValueList.idl: Copied from Source/WebCore/css/CSSValueList.idl.
        * css/LengthRepeat.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::wrapForDeprecatedCSSOM):
        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        (WebCore::InlineCSSStyleDeclaration::didMutate):
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM): Deleted.
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RGBColor.cpp:
        (WebCore::RGBColor::red): Deleted.
        (WebCore::RGBColor::green): Deleted.
        (WebCore::RGBColor::blue): Deleted.
        (WebCore::RGBColor::alpha): Deleted.
        * css/RGBColor.h:
        * css/RGBColor.idl: Removed.
        * css/Rect.h:
        (WebCore::RectBase::RectBase):
        * css/Rect.idl: Removed.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getPresentationAttribute):
        * svg/SVGElement.h:
        * svg/SVGElement.idl:

2016-12-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rollout r209860 OWR player shouldn't be selected for normal video playback

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::~MediaPlayerPrivateGStreamerOwr):
        (WebCore::MediaPlayerPrivateGStreamerOwr::play):
        (WebCore::MediaPlayerPrivateGStreamerOwr::pause):
        (WebCore::MediaPlayerPrivateGStreamerOwr::load):
        (WebCore::MediaPlayerPrivateGStreamerOwr::stop):
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded):
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged):
        (WebCore::MediaPlayerPrivateGStreamerOwr::setSize):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::createMutedRemoteSource):
        * platform/mediastream/openwebrtc/RealtimeAudioSourceOwr.h: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.cpp: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        * platform/mediastream/openwebrtc/RealtimeVideoSourceOwr.h: Removed.

2016-12-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        warning: the compiler can assume that the address of 'thisObject' will always evaluate to 'true' [-Waddress] in WebCore::JSHTMLDocument::getOwnPropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=165987

        Reviewed by Mark Lam.

        Work around the warning by passing the JSObject pointer this function receives directly to
        ASSERT_GC_OBJECT_INHERITS, instead of casting it to a reference and then taking the address
        of that, to avoid the -Waddress warning.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):

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

        Add implementation for navigator.requestMediaKeySystemAccess()
        https://bugs.webkit.org/show_bug.cgi?id=165850

        Reviewed by Eric Carlson.

        Test: media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html

        Add an implementation of NavigatorEME::requestMediaKeySystemAccess() as well as the CDM
        object on which it depends.

        * Modules/encryptedmedia/CDM.cpp: Added.
        (WebCore::cdmFactories):
        (WebCore::createCDMPrivateForKeySystem):
        (WebCore::CDM::registerCDMFactory):
        (WebCore::CDM::unregisterCDMFactory):
        (WebCore::CDM::supportsKeySystem):
        (WebCore::CDM::create):
        (WebCore::CDM::CDM):
        (WebCore::CDM::getSupportedConfiguration):
        (WebCore::CDM::doSupportedConfigurationStep):
        (WebCore::CDM::isPersistentType):
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        (WebCore::CDM::getConsentStatus):
        * Modules/encryptedmedia/CDM.h: Added.
        (WebCore::CDMFactory::~CDMFactory):
        (WebCore::CDM::keySystem):
        (WebCore::CDM::createWeakPtr):
        * Modules/encryptedmedia/CDMPrivate.h: Added.
        (WebCore::CDMPrivate::~CDMPrivate):
        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
        (WebCore::tryNextSupportedConfiguration):
        * Modules/encryptedmedia/NavigatorEME.h:
        * Modules/encryptedmedia/NavigatorEME.idl:

        To aid in testing, a new Internals object is added, MockCDMFactory, which can be
        controlled by LayoutTests to change the behavior of the Mock objects it creates.

        * testing/Internals.cpp:
        (WebCore::Internals::registerMockCDM):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockCDMFactory.cpp: Added.
        (WebCore::MockCDMFactory::MockCDMFactory):
        (WebCore::MockCDMFactory::~MockCDMFactory):
        (WebCore::MockCDMFactory::unregister):
        (WebCore::MockCDMFactory::supportsKeySystem):
        (WebCore::MockCDMFactory::createCDM):
        (WebCore::MockCDM::MockCDM):
        (WebCore::MockCDM::supportsInitDataType):
        (WebCore::MockCDM::supportsConfiguration):
        (WebCore::MockCDM::supportsConfigurationWithRestrictions):
        (WebCore::MockCDM::supportsSessionTypeWithConfiguration):
        (WebCore::MockCDM::supportsRobustness):
        (WebCore::MockCDM::distinctiveIdentifiersRequirement):
        (WebCore::MockCDM::persistentStateRequirement):
        (WebCore::MockCDM::distinctiveIdentifiersAreUniquePerOriginAndClearable):
        * testing/MockCDMFactory.h: Added.
        (WebCore::MockCDMFactory::create):
        (WebCore::MockCDMFactory::supportedDataTypes):
        (WebCore::MockCDMFactory::setSupportedDataTypes):
        (WebCore::MockCDMFactory::supportedRobustness):
        (WebCore::MockCDMFactory::setSupportedRobustness):
        (WebCore::MockCDMFactory::distinctiveIdentifiersRequirement):
        (WebCore::MockCDMFactory::setDistinctiveIdentifiersRequirement):
        (WebCore::MockCDMFactory::persistentStateRequirement):
        (WebCore::MockCDMFactory::setPersistentStateRequirement):
        * testing/MockCDMFactory.idl: Added.

        Move the MediaKeySessionType definition out of the MediaKeys.idl file and into its own.
        Move the MediaKeysRequiriment definition out of the MediaKeySystemConfiguration.idl file
        and into its own. Generally fix up the .idl files so that they properly work with their
        implementation files.

        * Modules/encryptedmedia/MediaKeySessionType.idl: Added.
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        (WebCore::MediaKeySystemAccess::create):
        (WebCore::MediaKeySystemAccess::MediaKeySystemAccess):
        (WebCore::MediaKeySystemAccess::keySystem): Deleted.
        (WebCore::MediaKeySystemAccess::getConfiguration): Deleted.
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        (WebCore::MediaKeySystemAccess::keySystem):
        (WebCore::MediaKeySystemAccess::getConfiguration):
        (WebCore::MediaKeySystemAccess::create): Deleted.
        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
        * Modules/encryptedmedia/MediaKeySystemConfiguration.h:
        * Modules/encryptedmedia/MediaKeySystemConfiguration.idl:
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/encryptedmedia/MediaKeysRequirement.idl: Added.
        * Modules/encryptedmedia/MediaKeysRestrictions.h: Added.
        * bindings/js/JSMediaKeySystemAccessCustom.cpp: Removed.

        As some of these enums are referenced in the Internals project, they need to be exported
        from WebCore correctly. Teach the code generator how to export the symbols generated by
        enums.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationHeaderContent):

        Add new files to the project.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2016-12-17  Darin Adler  <darin@apple.com>

        Remove WebCore::Dictionary, which is now unused
        https://bugs.webkit.org/show_bug.cgi?id=165988

        Reviewed by Andreas Kling.

        * CMakeLists.txt: Removed the files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/Dictionary.cpp: Removed.
        * bindings/js/Dictionary.h: Removed.
        * bindings/js/JSBindingsAllInOne.cpp: Removed include of Dictionary.cpp.

2016-12-17  Youenn Fablet  <youenn@apple.com>

        Cloned CachedResource should not have an empty response
        https://bugs.webkit.org/show_bug.cgi?id=165947

        Reviewed by Sam Weinig.

        Test: http/tests/loading/reusing-cached-stylesheet-from-different-domain.html

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setBodyDataFrom): Copying the response to the cloned resource.
        Even though the issue is appearing for stylesheets only, it is safer to do that for all cloned ressources.

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

        IndexedDB: Refactor SQLiteIDBCursor to prepare for cursor prefetching.
        https://bugs.webkit.org/show_bug.cgi?id=165978

        Reviewed by Alex Christensen.

        No new tests (Refactor, no behavior change).
        
        In preparation for cursor prefetching, we need to shift the cursor off of keeping "the current record"
        and onto keeping "a deque of fetched records", the first of which is "the current record".
        
        This patch does just that, but with no behavior change; The deque only ever holds 0 or 1 records.

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::currentData):
        (WebCore::IDBServer::SQLiteIDBCursor::objectStoreRecordsChanged):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::prefetch):
        (WebCore::IDBServer::SQLiteIDBCursor::advance):
        (WebCore::IDBServer::SQLiteIDBCursor::fetch):
        (WebCore::IDBServer::SQLiteIDBCursor::fetchNextRecord):
        (WebCore::IDBServer::SQLiteIDBCursor::markAsErrored):
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        (WebCore::IDBServer::SQLiteIDBCursor::iterate):
        (WebCore::IDBServer::SQLiteIDBCursor::currentKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentPrimaryKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentValue):
        (WebCore::IDBServer::SQLiteIDBCursor::didComplete):
        (WebCore::IDBServer::SQLiteIDBCursor::didError):
        (WebCore::IDBServer::SQLiteIDBCursor::currentRecordRowID):
        (WebCore::IDBServer::SQLiteIDBCursor::advanceUnique): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::advanceOnce): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::internalAdvanceOnce): Deleted.
        
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        (WebCore::IDBServer::SQLiteIDBCursor::SQLiteCursorRecord::isTerminalRecord):
        (WebCore::IDBServer::SQLiteIDBCursor::currentRecordRowID): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::currentKey): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::currentPrimaryKey): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::currentValue): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::didComplete): Deleted.
        (WebCore::IDBServer::SQLiteIDBCursor::didError): Deleted.

2016-12-16  Darin Adler  <darin@apple.com>

        Remove all custom bindings from media streams, using dictionaries instead
        https://bugs.webkit.org/show_bug.cgi?id=165943

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Added and removed files.
        * DerivedSources.make: Ditto.

        * Modules/mediastream/DoubleRange.h: Added. Moved dictionary here so it can be shared
        by both MediaStreamTrack and MediaTrackSupportedConstraints.
        * Modules/mediastream/DoubleRange.idl: Ditto.
        * Modules/mediastream/LongRange.h: Ditto.
        * Modules/mediastream/LongRange.idl: Ditto.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getSupportedConstraints): Changed to return a struct instead
        of a reference counted object.
        * Modules/mediastream/MediaDevices.h: Updated for the above.
        * Modules/mediastream/MediaDevices.idl: Added a conditional on the dictionary in this
        file; not needed because the conditional on the interface automatically affects the
        entire fiel, but for now the style seems to be to put these on all the dictionaries.

        * Modules/mediastream/MediaSourceSettings.cpp: Removed.
        * Modules/mediastream/MediaSourceSettings.h: Removed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getSettings): Changed to return a struct instead of a
        reference counted object.
        (WebCore::capabilityDoubleRange): Added. Helper for getCapabilities.
        (WebCore::capabilityIntRange): Ditto.
        (WebCore::capabilityStringVector): Ditto.
        (WebCore::capabilityBooleanVector): Ditto.
        (WebCore::MediaStreamTrack::getCapabilities): Changed to return a struct instead
        of a reference counted object.
        * Modules/mediastream/MediaStreamTrack.h: Updated for the above changes. Also
        defined the structs here in the class.
        * Modules/mediastream/MediaStreamTrack.idl: Defined the two dictionaries here and
        changed the functions to return them and not use [Custom] any more.

        * Modules/mediastream/MediaTrackConstraints.h: Moved DoubleRange and LongRange out
        of this file and into their own headers. Also removed the currently unimplemented
        latency and channelCount; there are FIXME comments in the IDL file about eventually
        adding these to match the specification.
        * Modules/mediastream/MediaTrackConstraints.idl: Added conditionals, and removed
        the unimplemented latency and channelCount.
        style of marking everything consistently.

        * Modules/mediastream/MediaTrackSupportedConstraints.h: Replaced this class with
        a struct.
        * Modules/mediastream/MediaTrackSupportedConstraints.idl: Replaced this interface
        with a dictionary.

        * WebCore.xcodeproj/project.pbxproj: Added and removed files.

        * bindings/js/JSMediaStreamTrackCustom.cpp: Removed.
        * bindings/js/JSMediaTrackSupportedConstraintsCustom.cpp: Removed.

        * platform/mediastream/MediaStreamTrackPrivate.cpp: Removed include of the
        MediaSourceSettings.h header.
        * platform/mediastream/MediaStreamTrackPrivate.h: Removed forward declaration of
        the MediaSourceSettings class.

2016-12-16  Zalan Bujtas  <zalan@apple.com>

        Possible nullptr dereference when applying pagination to viewport
        https://bugs.webkit.org/show_bug.cgi?id=165926

        Reviewed by Simon Fraser.

        Static analysis found a code path where a null dereference could occur.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::applyPaginationToViewport):

2016-12-16  Ryan Haddad  <ryanhaddad@apple.com>

        Fix the Windows build.

        Unreviewed build fix.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:

2016-12-16  Ryan Haddad  <ryanhaddad@apple.com>

        Yet another attempt to fix the Windows build after r209936.

        Unreviewed build fix.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:

2016-12-16  Alex Christensen  <achristensen@webkit.org>

        Use initEvent quirk added in r207908 for Flipboard
        https://bugs.webkit.org/show_bug.cgi?id=165974
        <rdar://problem/28264190>

        Reviewed by Chris Dumez.

        * dom/Event.cpp:
        (WebCore::Event::initEventForBindings):
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::IOSApplication::isFlipboard):
        Flipboard also has JavaScript content that calls initEvent with not enough arguments.

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

        [iOS] Align HTML from validation popover style with Copy/Paste callout bar
        https://bugs.webkit.org/show_bug.cgi?id=165973
        <rdar://problem/29336638>

        Reviewed by Simon Fraser.

        Tweak font size and padding of the HTML from validation popover to
        match the style of the Copy/Paste callout bar on iOS.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::ValidationBubble):

2016-12-16  Ryan Haddad  <ryanhaddad@apple.com>

        Another attempt to fix the Windows build after r209936.

        Unreviewed build fix.

        * CMakeLists.txt:

2016-12-16  Andy Estes  <aestes@apple.com>

        Add a setting to suppress keyboard input during provisional navigation
        https://bugs.webkit.org/show_bug.cgi?id=165830

        Reviewed by Brent Fulgham.

        Added a setting that suppresses keyboard input during provisional navigation. When the
        setting is enabled, DOM propogation of keyboard input events (KeyboardEvents,
        CompositionEvents, InputEvents, and some TextEvents) is suppressed, and text insertion is
        disabled in the editor.

        Non-editing default event handling still occurs, for instance keyboard scrolling, access
        keys, and focus navigation.

        Test: http/tests/navigation/keyboard-events-during-provisional-navigation.html

        * dom/CompositionEvent.h: Added a type trait specialization.
        * dom/EventDispatcher.cpp:
        (WebCore::shouldSuppressEventDispatchInDOM): Added. Returns true if the event is trusted,
        FrameLoader::shouldSuppressKeyboardInput() returns true, and the event is a
        CompositionEvent, InputEvent, KeyboardEvent, or keyboard/composition TextEvent.
        (WebCore::EventDispatcher::dispatchEvent): Called stopPropogation() on the event if
        shouldSuppressEventDispatchInDOM() returns true.
        * dom/InputEvent.h: Removed the inline no-op destructor so that DataTransfer does not need
        to be a complete type in every translation unit that includes this header. Added a type
        trait specialization.
        * dom/TextEvent.h: Added isKeyboard() to determine if m_inputType is TextEventInputKeyboard.
        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertText): Returned false if
        FrameLoader::shouldSuppressKeyboardInput() returns true and the action is
        EditorInsertActionTyped.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldSuppressKeyboardInput): Added. Returns true if
        Settings::shouldSuppressKeyboardInputDuringProvisionalNavigation() returns true and the
        state is FrameStateProvisional.
        * loader/FrameLoader.h: Declared shouldSuppressKeyboardInput().
        * page/EventHandler.h: Exported accessKeyModifiers().
        * page/Settings.in: Defined shouldSuppressKeyboardInputDuringProvisionalNavigation with an
        initial value of false.
        * testing/Internals.cpp:
        (WebCore::Internals::accessKeyModifiers): Added. Returns a vector of strings representing
        the access key modifiers.
        * testing/Internals.h: Declared accessKeyModifiers().
        * testing/Internals.idl: Exposed accessKeyModifiers() on the internals object.

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

        More SQLiteIDBCursor refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=165956

        Reviewed by Tim Horton.

        No new tests (No behavior change).
        
        This is a simple patch that encapsulates the current state of the cursor in one structure
        which will allow for storing multiple-such states in the future (to support prefetching).

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::currentData):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::advance):
        (WebCore::IDBServer::SQLiteIDBCursor::advanceUnique):
        (WebCore::IDBServer::SQLiteIDBCursor::markAsErrored):
        (WebCore::IDBServer::SQLiteIDBCursor::internalAdvanceOnce):
        (WebCore::IDBServer::SQLiteIDBCursor::iterate):
        
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        (WebCore::IDBServer::SQLiteIDBCursor::currentRecordRowID):
        (WebCore::IDBServer::SQLiteIDBCursor::currentKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentPrimaryKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentValue):
        (WebCore::IDBServer::SQLiteIDBCursor::didComplete):
        (WebCore::IDBServer::SQLiteIDBCursor::didError):

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

        Follow-up build fix after r209936; also rename MockCDM -> LegacyMockCDM in
        CMakeLists.txt.

        * CMakeLists.txt:

2016-12-16  Sam Weinig  <sam@webkit.org>

        [Bindings] Remove use of Dictionary/ArrayValue in CDMSessionClearKey
        https://bugs.webkit.org/show_bug.cgi?id=165961

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Remove ArrayValue.h/cpp

        * bindings/js/ArrayValue.cpp: Removed.
        * bindings/js/ArrayValue.h: Removed.

        * bindings/js/Dictionary.cpp:
        * bindings/js/Dictionary.h:
        Remove support for ArrayValue.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::update):
        Replace use of Dictionary/ArrayValue with direct JSObject functions. This
        should really be replaced with a JSON parser that does not require round
        tripping through JavaScript objects.

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

        Move existing CDM* implementations into modules/encryptedmedia/legacy
        https://bugs.webkit.org/show_bug.cgi?id=165823

        Rubber-stamped by Sam Weinig.

        * Modules/encryptedmedia/legacy/LegacyCDM.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/CDM.cpp.
        (WebCore::CDMFactory::CDMFactory):
        (WebCore::installedCDMFactories):
        (WebCore::CDM::registerCDMFactory):
        (WebCore::CDMFactoryForKeySystem):
        (WebCore::CDM::supportsKeySystem):
        (WebCore::CDM::keySystemSupportsMimeType):
        (WebCore::CDM::create):
        (WebCore::CDM::CDM):
        (WebCore::CDM::~CDM):
        (WebCore::CDM::supportsMIMEType):
        (WebCore::CDM::createSession):
        (WebCore::CDM::mediaPlayer):
        * Modules/encryptedmedia/legacy/LegacyCDM.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDM.h.
        (WebCore::CDMClient::~CDMClient):
        (WebCore::CDM::keySystem):
        (WebCore::CDM::client):
        (WebCore::CDM::setClient):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivate.h.
        (WebCore::CDMPrivateInterface::CDMPrivateInterface):
        (WebCore::CDMPrivateInterface::~CDMPrivateInterface):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateClearKey.cpp.
        (WebCore::CDMPrivateClearKey::supportsKeySystem):
        (WebCore::CDMPrivateClearKey::supportsKeySystemAndMimeType):
        (WebCore::CDMPrivateClearKey::supportsMIMEType):
        (WebCore::CDMPrivateClearKey::createSession):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateClearKey.h.
        (WebCore::CDMPrivateClearKey::CDMPrivateClearKey):
        (WebCore::CDMPrivateClearKey::~CDMPrivateClearKey):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp.
        (WebCore::CDMPrivateMediaPlayer::supportsKeySystem):
        (WebCore::CDMPrivateMediaPlayer::supportsKeySystemAndMimeType):
        (WebCore::CDMPrivateMediaPlayer::supportsMIMEType):
        (WebCore::CDMPrivateMediaPlayer::createSession):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivateMediaPlayer.h.
        (WebCore::CDMPrivateMediaPlayer::CDMPrivateMediaPlayer):
        (WebCore::CDMPrivateMediaPlayer::~CDMPrivateMediaPlayer):
        (WebCore::CDMPrivateMediaPlayer::cdm):
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/CDMSessionClearKey.cpp.
        (WebCore::clearKeyVM):
        (WebCore::CDMSessionClearKey::CDMSessionClearKey):
        (WebCore::CDMSessionClearKey::~CDMSessionClearKey):
        (WebCore::CDMSessionClearKey::generateKeyRequest):
        (WebCore::CDMSessionClearKey::releaseKeys):
        (WebCore::CDMSessionClearKey::update):
        (WebCore::CDMSessionClearKey::cachedKeyForKeyID):
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMSessionClearKey.h.
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/LegacyCDMSession.h: Renamed from Source/WebCore/platform/graphics/CDMSession.h.
        (WebCore::CDMSessionClient::~CDMSessionClient):
        (WebCore::CDMSession::CDMSession):
        (WebCore::CDMSession::~CDMSession):
        (WebCore::CDMSession::type):
        (WebCore::CDMSession::cachedKeyForKeyID):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * testing/Internals.cpp:
        * testing/LegacyMockCDM.cpp: Renamed from Source/WebCore/testing/MockCDM.cpp.
        (WebCore::MockCDMSession::~MockCDMSession):
        (WebCore::MockCDM::supportsKeySystem):
        (WebCore::MockCDM::supportsKeySystemAndMimeType):
        (WebCore::MockCDM::supportsMIMEType):
        (WebCore::MockCDM::createSession):
        (WebCore::initDataPrefix):
        (WebCore::keyPrefix):
        (WebCore::keyRequest):
        (WebCore::generateSessionId):
        (WebCore::MockCDMSession::MockCDMSession):
        (WebCore::MockCDMSession::generateKeyRequest):
        (WebCore::MockCDMSession::releaseKeys):
        (WebCore::MockCDMSession::update):
        * testing/LegacyMockCDM.h: Renamed from Source/WebCore/testing/MockCDM.h.
        (WebCore::MockCDM::MockCDM):
        (WebCore::MockCDM::~MockCDM):

2016-12-16  Andreas Kling  <akling@apple.com>

        Subframes going into page cache don't need to resetScrollbars().
        <https://webkit.org/b/163750>
        <rdar://problem/29273020>

        Reviewed by Antti Koivisto.

        The main frame is the only frame that switches its FrameView when using the page cache,
        subframes just suspend their DOM and wait around to be either killed or restored.

        Thus there is no reason for subframes to reset their FrameView's scrollbars when going
        into page cache, since nothing affects them while cached, and their layout should end up
        identical when restoring.

        This was causing some flakiness with subframe scrollbars jumping between different sizes
        in when restoring from page cache in macOS/WK1. This change makes the behavior consistent
        in both WK1 and WK2, and removes the flakiness.

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

2016-12-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Visual viewports: carets and selection UI are incorrectly positioned when editing fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=165767
        <rdar://problem/29602382>

        Reviewed by Simon Fraser.

        When changing the layout viewport override, mark viewport-constrained objects as needing layout. If only the
        width and height of the old and new layout viewports are compared, EditorState info (namely selection and caret
        rects) that depends on the document location of fixed elements may be stale immediately after the layout
        viewport override changes and before layout occurs.

        This caused one of the tests (fixed-caret-position-after-scroll.html) to occasionally fail.

        Tests: editing/caret/ios/absolute-caret-position-after-scroll.html
               editing/caret/ios/fixed-caret-position-after-scroll.html
               editing/selection/ios/absolute-selection-after-scroll.html
               editing/selection/ios/fixed-selection-after-scroll.html

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

2016-12-14  Sam Weinig  <sam@webkit.org>

        [ApplePay] Remove remaining custom bindings from the ApplePay code
        https://bugs.webkit.org/show_bug.cgi?id=165860

        Reviewed by Darin Adler.

        * DerivedSources.make:
        Add new IDL files.

        * WebCore.xcodeproj/project.pbxproj:
        Add/remove files.

        * bindings/js/JSApplePayPaymentAuthorizedEventCustom.cpp: Removed.
        * bindings/js/JSApplePayPaymentMethodSelectedEventCustom.cpp: Removed.
        * bindings/js/JSApplePayShippingContactSelectedEventCustom.cpp: Removed.
        * bindings/js/JSApplePayShippingMethodSelectedEventCustom.cpp: Removed.
        Remove custom bindings.

        * Modules/applepay/ApplePayLineItem.h: Added.
        * Modules/applepay/ApplePayLineItem.idl: Added.
        * Modules/applepay/ApplePayPayment.h: Added.
        * Modules/applepay/ApplePayPayment.idl: Added.
        * Modules/applepay/ApplePayPaymentContact.h: Added.
        * Modules/applepay/ApplePayPaymentContact.idl: Added.
        * Modules/applepay/ApplePayPaymentMethod.h: Added.
        * Modules/applepay/ApplePayPaymentMethod.idl: Added.
        * Modules/applepay/ApplePayPaymentPass.h: Added.
        * Modules/applepay/ApplePayPaymentPass.idl: Added.
        * Modules/applepay/ApplePayPaymentRequest.h: Added.
        * Modules/applepay/ApplePayPaymentRequest.idl: Added.
        * Modules/applepay/ApplePayShippingMethod.h: Added.
        * Modules/applepay/ApplePayShippingMethod.idl: Added.
        Split out dictionaries and enums into separate files where needed.

        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        (WebCore::ApplePayPaymentAuthorizedEvent::ApplePayPaymentAuthorizedEvent):
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.h:
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.idl:
        Convert the 'payment' property to return an ApplePayPayment dictionary, removing
        the need for custom bindings.

        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp:
        (WebCore::ApplePayPaymentMethodSelectedEvent::ApplePayPaymentMethodSelectedEvent):
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.h:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.idl:
        Convert the 'paymentMethod' property to return an ApplePayPaymentMethod dictionary, removing
        the need for custom bindings.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::ApplePaySession):
        (WebCore::ApplePaySession::completeShippingMethodSelection):
        (WebCore::ApplePaySession::completeShippingContactSelection):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        (WebCore::ApplePaySession::didSelectShippingMethod):
        * Modules/applepay/ApplePaySession.h:
        Update for new names, remove need for ExecState in the create function, and simplify
        billingContact and shippingContact now that they are strongly typed.

        * Modules/applepay/ApplePaySession.idl:
        Move dictionaries and enums to their own files.

        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        (WebCore::ApplePayShippingContactSelectedEvent::ApplePayShippingContactSelectedEvent):
        * Modules/applepay/ApplePayShippingContactSelectedEvent.h:
        * Modules/applepay/ApplePayShippingContactSelectedEvent.idl:
        Convert the 'shippingContact' property to return an ApplePayPaymentContact dictionary, removing
        the need for custom bindings.

        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.h:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.idl:
        Convert the 'shippingMethod' property to return an ApplePayShippingMethod dictionary, removing
        the need for custom bindings.

        * Modules/applepay/Payment.h:
        * Modules/applepay/PaymentContact.h:
        * Modules/applepay/PaymentMethod.h:
        * Modules/applepay/cocoa/PaymentCocoa.mm:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        Replace toJS/fromJS functions with ones that convert to/from the associated dictionary type.

        * bindings/generic/IDLTypes.h:
        (WebCore::IDLJSON::nullValue):
        (WebCore::IDLJSON::isNullValue):
        (WebCore::IDLJSON::extractValueFromNullable):
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLJSON>::convert):
        (WebCore::JSConverter<IDLJSON>::convert):
        Add a new custom type, JSON, which converts from a String to a JS object.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        Add support for the new JSON type, and improve scoped naming to allow for enums
        in dictionary only IDL files.

        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        Update test result for improved scoped naming.

2016-12-16  Zalan Bujtas  <zalan@apple.com>

        Defer certain accessibility callbacks until after layout is finished.
        https://bugs.webkit.org/show_bug.cgi?id=165861
        rdar://problem/29646301

        Reviewed by Chris Fleizach.

        Currently with certain AXObjectCache callbacks, we can end up in a layout while the render tree is being mutated.  
        This patch ensures that such callbacks are deferred until after tree mutation/layout is finished.

        Test: accessibility/accessibility-crash-with-dynamic-inline-content.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::performDeferredIsIgnoredChange):
        (WebCore::AXObjectCache::insertDeferredIsIgnoredChange):
        * accessibility/AXObjectCache.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox):

2016-12-16  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r209897.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::visitChildren):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::visitChildren):

2016-12-15  Brent Fulgham  <bfulgham@apple.com>

        Arguments called in wrong order
        https://bugs.webkit.org/show_bug.cgi?id=165923

        Reviewed by Simon Fraser.

        Correct the ordering of several function calls.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): The 'nearestToPresentationStartTime'
        argument is being checked for validity, but 'nearestToPresentationEndTime' is being used in the
        calculation. This seems like a copy/paste error.
        * page/PrintContext.cpp:
        (WebCore::PrintContext::outputLinkedDestinations): FloatPoint::expandedTo returns a new object that
        has been expanded. This code continued using the 'unexpanded' point.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeImageSizeInBytes): The 'bytesPerComponent' and 'componentsPerPixel'
        variables were being passed in the wrong order.
        * platform/network/CacheValidation.cpp: The 'last-modified' header string was being concatenated with
        the following string, resulting in an incorrect 'last-modifiedproxy-authenticate' string value.
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::firstGlyph): The ASSERT was assigning to the (by-value) input
        parameter 'codePoint', rather than comparing it to the firstGlyph value's codePoint.

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

        [Fetch API] Improve resource loading console logging
        https://bugs.webkit.org/show_bug.cgi?id=160546

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        Adding support for logging of resource loading failures in ThreadableLoader.
        This will allow doing consistent logging for clients such as fetch, XHR, event source...

        Doing logging for Fetch API only at the moment in ThreadableLoader.
        Future patches should migrate XHR to this logging system.

        Logging routine is implemented in ThreadableLoader.
        It is used directly by DocumentThreadableLoader before calling didFail client callback.
        DocumentThreadableLoader has a new option to not log errors, in the case the client is WorkerThreadableLoader::MainBridge.
        In that case, the logging is done in the worker context within WorkerThreadableLoader::MainBridge::didFail

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Enable logging.
        (WebCore::DocumentThreadableLoader::create): Passing logging parameter to constructor.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Adding initialization of logging parameter.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Making use of the new logErrorAndFail helper routine.
        (WebCore::DocumentThreadableLoader::cancel): No need to log error if it is being cancelled.
        (WebCore::DocumentThreadableLoader::redirectReceived): Made the reportXX routines methods of DocumentThreadableLoaders and using logErrorAndFail internally.
        (WebCore::DocumentThreadableLoader::didFail): Wrapper around logErrorAndFail since cancel is not calling it anymore.
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::DocumentThreadableLoader::reportRedirectionWithBadScheme):
        (WebCore::DocumentThreadableLoader::reportContentSecurityPolicyError):
        (WebCore::DocumentThreadableLoader::reportCrossOriginResourceSharingError):
        (WebCore::DocumentThreadableLoader::logErrorAndFail):
        (WebCore::reportContentSecurityPolicyError): Deleted.
        (WebCore::reportCrossOriginResourceSharingError): Deleted.
        (WebCore::reportRedirectionWithBadScheme): Deleted.
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::logError):
        * loader/ThreadableLoader.h:
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::create):
        (WebCore::ThreadableLoaderClientWrapper::initiator):
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):

2016-12-16  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Fix build warning in MediaPlayerPrivateGStreamer.cpp using gcc 6.2
        https://bugs.webkit.org/show_bug.cgi?id=165900

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsCodecs):
        Move the variable asignation out of the if condition.

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

        [Readable Streams API] Implement ReadableByteStreamController cancel internal method
        https://bugs.webkit.org/show_bug.cgi?id=165798

        Reviewed by Youenn Fablet.

        Implemented cancel method of ReadableByteStreamController.
        Also fixed small inconsistency in readableByteStreamControllerClose.

        Added one test to check cancel behaviour. More tests may be added as the API is implemented.

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Define cancel internal method.
        (readableByteStreamControllerCancel): Added.
        (readableByteStreamControllerClose): Fixed behaviour (no value should be dequeued).
        * bindings/js/WebCoreBuiltinNames.h: Removed bytesFilled (previous addition was not needed).

2016-12-16  Youenn Fablet  <youennf@gmail.com>

        svg/as-image/svg-image-with-data-uri-use-data-uri.svg is flaky after r207754
        https://bugs.webkit.org/show_bug.cgi?id=163887
        <rdar://problem/29266436>

        Reviewed by Alex Christensen.

        Test: http/tests/security/cross-origin-cached-images-with-memory-pressure.html

        With the introduction of cached resource cloning, an Image may be referenced by several CachedImage.
        This did not work well with Image observer system as it mandates a one-to-one relationship.

        Introducing CachedImageObserver to restore the one-to-one relationship between Image and its observer.
        CachedImageObserver can keep references for more than one CachedImage.

        In the future, it might be better to split more clearly CachedImageObserver and its API from CachedImage.
        Or remove the concept of CachedResource cloning and find new ways to provide CachedResource origin information to clients.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load): Moved boolean image observer fields to CachedImageObserver.
        (WebCore::CachedImage::setBodyDataFrom): Keeping a reference of the image observer when cloning the resource.
        (WebCore::CachedImage::createImage): Creating the observer when creating the image.
        (WebCore::CachedImage::CachedImageObserver::CachedImageObserver):
        (WebCore::CachedImage::CachedImageObserver::decodedSizeChanged):
        (WebCore::CachedImage::CachedImageObserver::didDraw):
        (WebCore::CachedImage::CachedImageObserver::animationAdvanced):
        (WebCore::CachedImage::CachedImageObserver::changedInRect):
        (WebCore::CachedImage::clearImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setBodyDataFrom): Now that each cached image receives decodedSizeChanged callback, we need to set its size correctly.

2016-12-15  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix debug build break since r209873. Unreviewed.
        https://bugs.webkit.org/show_bug.cgi?id=165945

        No new tests, no new behaviours.

        Use Primitive System Data Type uint64_t instead of unsigned long long.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        * Modules/indexeddb/IDBFactory.h:

2016-12-15  Zalan Bujtas  <zalan@apple.com>

        text-align: justify and word-spacing combine to overflow column
        https://bugs.webkit.org/show_bug.cgi?id=165796
        rdar://problem/29672168

        Reviewed by Myles C. Maxfield.

        The value of the word-spacing property is not applied on the inline-tree boxes (normal line layout)
        with kerning enabled. It causes hittest failures and selection/rendering glitches.
        We normally use the pre-computed 'WordMeasurements' values to figure out the run widths. However
        with kerning on, in some cases we need to re-measure a certain part of the text by calling RenderText::width().
        This function omits the word-spacing value for leading whitespace, so when this text fragment starts with a whitespace,
        (while it's not at the beginning of the run) we have to manually add the word-spacing value back.
        r146087 added this logic with the restriction of applying it only to whitespace-only runs.

        Test: fast/css/word-spacing-with-normal-layout.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
        https://bugs.webkit.org/show_bug.cgi?id=165931

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * editing/TextCheckingHelper.cpp:
        (WebCore::findMisspellings):
        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::isLogicalStartOfWord):
        (WebCore::islogicalEndOfWord):
        (WebCore::visualWordPosition):
        (WebCore::startSentenceBoundary):
        (WebCore::endSentenceBoundary):
        (WebCore::previousSentencePositionBoundary):
        (WebCore::nextSentencePositionBoundary):
        * html/HTMLInputElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/InputType.cpp:
        * html/TextFieldInputType.cpp:
        * html/TextInputType.cpp:
        * platform/graphics/StringTruncator.cpp:
        (WebCore::textBreakAtOrPreceding):
        (WebCore::boundedTextBreakFollowing):
        (WebCore::rightClipToWordBuffer):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/text/TextBoundaries.cpp:
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        (WebCore::findEndWordBoundary):
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findNextWordFromIndex):
        * rendering/BreakLines.h:
        (WebCore::nextBreakablePositionNonLoosely):
        (WebCore::nextBreakablePositionLoosely):
        * rendering/RenderBlock.cpp:
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        (WebCore::RenderText::nextOffset):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        * rendering/line/LineBreaker.h:

2016-12-15  Darin Adler  <darin@apple.com>

        Use asString instead of toWTFString, toString, or getString when we already checked isString
        https://bugs.webkit.org/show_bug.cgi?id=165895

        Reviewed by Yusuke Suzuki.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract): Use asString/value instead of toWTFString.

        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::SDPProcessor::callScript): Use asString/value instead of getString.

        * bindings/js/ArrayValue.cpp:
        (WebCore::ArrayValue::get): Use asString/value instead of toWTFString.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get): Use asString/length instead of toString/length.
        (WebCore::createIDBKeyFromValue): Use asString/value instead of toWTFString.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier): Ditto.
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::constructJSDataCue): Use asString/value instead of getString.
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems): Use asString/value instead of toWTFString.

        * bindings/js/ScriptController.cpp:
        (WebCore::jsValueToModuleKey): Use asString/toIdentifier instead of
        jsCast<JSString*>/value/Identifier::fromString.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal): Streamline by getting rid of local variable.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getDomainList): Use asString instead of jsCast<JSString*>.
        (WebCore::ContentExtensions::loadTrigger): Use asString/value instead of toWTFString.
        (WebCore::ContentExtensions::loadAction): Ditto.

        * css/FontFace.cpp:
        (WebCore::FontFace::create): Use asString/value instead of getString.

2016-12-15  Zalan Bujtas  <zalan@apple.com>

        Change ::computeLogicalHeight's computedValues out argument to the return value.
        https://bugs.webkit.org/show_bug.cgi?id=165789

        Reviewed by Simon Fraser.

        No change in functionality.

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::computeLogicalHeight):
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::RenderImageControlsButton::computeLogicalHeight):
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::RenderImageControls::computeLogicalHeight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::ComputedMarginValues::ComputedMarginValues): Deleted.
        (WebCore::RenderBox::LogicalExtentComputedValues::LogicalExtentComputedValues): Deleted.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::computeLogicalHeight):
        * rendering/RenderFlowThread.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight):
        * rendering/RenderListBox.h:
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::computeLogicalHeight):
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::computeLogicalHeight):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::computeLogicalHeight):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::computeLogicalHeight):
        * rendering/RenderProgress.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/RenderTextControl.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeLogicalHeight):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeLogicalHeight):
        * rendering/svg/RenderSVGForeignObject.h:

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

        Make sure HTML validation bubble's state is updated after layout
        https://bugs.webkit.org/show_bug.cgi?id=165922
        <rdar://problem/29694730>

        Reviewed by Simon Fraser.

        Make sure HTML validation bubble's state is updated after layout.
        In particular, if the validation bubble's associated element has
        moved or is no longer visible, we now hide the bubble.

        Tests: fast/forms/validation-bubble-disappears-when-input-detached.html
               fast/forms/validation-bubble-disappears-when-input-moved.html
               fast/forms/validation-bubble-disappears-when-input-no-longer-visible.html

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        * page/Page.cpp:
        (WebCore::Page::updateValidationBubbleStateIfNeeded):
        * page/Page.h:
        * page/ValidationMessageClient.h:

2016-12-15  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove use of Dictionary from JSCryptoAlgorithmDictionary
        https://bugs.webkit.org/show_bug.cgi?id=165919

        Reviewed by Darin Adler.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.h:
        * bindings/js/JSCryptoOperationData.cpp:
        * bindings/js/JSCryptoOperationData.h:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        Replace simplistic use of Dictionary with simplistic use of direct JSObject
        functions. Also, pass the ExecState by reference.

2016-12-15  Filip Pizlo  <fpizlo@apple.com>

        Get rid of HeapRootVisitor and make SlotVisitor less painful to use
        https://bugs.webkit.org/show_bug.cgi?id=165911

        Reviewed by Geoffrey Garen.

        No new tests because no new behavior.
        
        This updates WebCore code to new JSC API.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMConstructorJSBuiltinObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::visitAggregate):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::visitJSFunction):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:

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

        Move charCode / keyCode / which attributes from UIEvent to KeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=165904

        Reviewed by Sam Weinig.

        Move 'charCode' / 'keyCode' attributes from UIEvent to KeyboardEvent and add
        'which' to KeyboardEvent to match the specification:
        - https://w3c.github.io/uievents/#legacy-interface-KeyboardEvent

        We keep a 'which' attribute on UIEvent even though the specification does
        not say we should because Firefox and Chrome have 'which' on UIEvent still.

        Specification:
        - 'charCode' / 'keyCode' / 'which' on KeyboardEvent only

        Firefox:
        - 'charCode' / 'keyCode' on KeyboardEvent only
        - 'which' on UIEvent only

        Chrome:
        - 'charCode' / 'keyCode' / 'which' on KeyboardEvent
        - 'which' on UIEvent as well

        Old WebKit behavior:
        - 'charCode' / 'keyCode' / 'which' on UIEvent only

        New WebKit behavior:
        - 'charCode' / 'keyCode' / 'which' on KeyboardEvent
        - 'which' on UIEvent as well

        Our new behavior is identical to Chrome, much closer to the specification,
        and closer to Firefox as well.

        No new tests, updated / rebaselined existing tests.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::keyCode):
        (WebCore::KeyboardEvent::charCode):
        (WebCore::KeyboardEvent::which):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::which):
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:
        * dom/UIEvent.idl:

2016-12-15  Brady Eidson  <beidson@apple.com>

        IndexedDB: Add an "IDBCursorRecord" struct.
        https://bugs.webkit.org/show_bug.cgi?id=165929

        Reviewed by Alex Christensen.

        No new tests (Refactor, no behavior change).

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::currentData):
        (WebCore::IDBServer::SQLiteIDBCursor::resetAndRebindStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::advanceUnique):
        (WebCore::IDBServer::SQLiteIDBCursor::internalAdvanceOnce):
        (WebCore::IDBServer::SQLiteIDBCursor::iterate):
        
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        (WebCore::IDBServer::SQLiteIDBCursor::currentKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentPrimaryKey):
        (WebCore::IDBServer::SQLiteIDBCursor::currentValue):

        * Modules/indexeddb/shared/IDBCursorRecord.h: Added.
        (WebCore::IDBCursorRecord::encode):
        (WebCore::IDBCursorRecord::decode):
        
        * WebCore.xcodeproj/project.pbxproj:

2016-12-15  Keith Rollin  <krollin@apple.com>

        Refactor Document::suspend/resume
        https://bugs.webkit.org/show_bug.cgi?id=165921

        Reviewed by Chris Dumez.

        Update Document::suspend to call Document::suspendScheduledTasks
        rather than duplicating the latter's code within itself. Similar
        treatment of Document::resume and Document::resumeScheduledTasks.

        No new tests -- no new functionality, just refactoring existing code.

        * dom/Document.cpp:
        (WebCore::Document::suspend):
        (WebCore::Document::resume):

2016-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove flex and bison build dependencies; commit generated XPath parser
        https://bugs.webkit.org/show_bug.cgi?id=165783

        Reviewed by Brent Fulgham.

        flex and bison are annoying to install and use, especially on Windows.
        Since only XPathGrammar uses them and that's not actively developed, let's just check in the one generated file
        and make building WebKit easier forever!

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/makegrammar.pl: Removed.
        * xml/XPathGrammar.cpp: Added.
        (xpathyylex):
        (xpathyyerror):
        (yysyntax_error):
        * xml/XPathGrammar.h: Added.
        * xml/XPathGrammar.y: Rename TEXT to TEXT_ to fix a build error on Windows.  TEXT is already defined.

2016-12-15  Brady Eidson  <beidson@apple.com>

        Enhance some of the logging statements just added for IndexedDB Operation scheduling.

        Rubberstamped by Tim Horton.

        No new tests (No behavior change).

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestPutOrAdd):
        
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::loggingString):
        
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::loggingString):

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Implement font-synthesis: small-caps
        https://bugs.webkit.org/show_bug.cgi?id=165892

        Reviewed by David Hyatt.

        The CSS Fonts level 4 spec adds a new value to the "font-synthesis"
        property which controls whether or not small-caps is allowed to be
        synthesized. Luckily, we already have an implementation of this
        straightforward, so the implementation is quite simple.

        Tests: css3/font-synthesis-small-caps.html
               fast/text/font-synthesis-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontSynthesisFromStyle):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontSynthesis):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontSynthesis):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontCascadeDescription::initialFontSynthesis):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::shouldSynthesize):
        (WebCore::ComplexTextController::collectComplexTextRuns):

2016-12-15  Brady Eidson  <beidson@apple.com>

        Add a new Logging Channel for IndexedDB Operation scheduling.
        https://bugs.webkit.org/show_bug.cgi?id=165912

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::commit):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::createIndex):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::deleteIndex):
        
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::loggingString):
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp:
        (WebCore::IDBGetAllRecordsData::loggingString):
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:
        
        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        (WebCore::IDBGetRecordData::loggingString):
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::condensedLoggingString):
        * Modules/indexeddb/shared/IDBIndexInfo.h:
        
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::loggingString):
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::condensedLoggingString):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        
        * platform/Logging.h:

2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>

        Added missing override and final specifiers
        https://bugs.webkit.org/show_bug.cgi?id=165903

        Reviewed by Darin Adler.

        No new tests needed.

        * Modules/mediastream/OverconstrainedErrorEvent.h:
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSErrorHandler.h:
        * css/StyleRuleImport.h:
        * dom/SecurityPolicyViolationEvent.h:
        * editing/CreateLinkCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/DictationCommand.h:
        * editing/Editor.cpp:
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.h:
        * editing/InsertLineBreakCommand.h:
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/ModifySelectionListLevel.h:
        * editing/MoveSelectionCommand.h:
        * editing/RemoveFormatCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.h:
        * editing/ReplaceSelectionCommand.h:
        * editing/SimplifyMarkupCommand.h:
        * editing/SplitTextNodeContainingElementCommand.h:
        * editing/UnlinkCommand.h:
        * fileapi/FileReaderLoader.h:
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/WebGLVertexArrayObjectBase.h:
        * loader/SinkDocument.h:
        * loader/archive/mhtml/MHTMLArchive.h:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/audio/MultiChannelResampler.cpp:
        * platform/audio/SincResampler.cpp:
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        * platform/mock/GeolocationClientMock.h:
        * platform/text/TextCodecICU.h:
        * platform/text/TextCodecLatin1.h:
        * platform/text/TextCodecUTF16.h:
        * platform/text/TextCodecUTF8.h:
        * platform/text/TextCodecUserDefined.h:
        * rendering/RenderFullScreen.cpp:
        * storage/StorageEvent.h:
        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        * svg/properties/SVGStaticPropertyTearOff.h:
        * xml/NativeXPathNSResolver.h:
        * xml/XMLHttpRequestProgressEvent.h:
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XPathVariableReference.h:
        * xml/XSLImportRule.h:

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

        Inline Document::existingAXObjectCache()
        https://bugs.webkit.org/show_bug.cgi?id=165906

        Reviewed by Darin Adler.

        Inline Document::existingAXObjectCache() to avoid paying function call
        cost in the common case where AX is disabled.

        * dom/Document.cpp:
        (WebCore::Document::existingAXObjectCacheSlow):
        (WebCore::Document::existingAXObjectCache): Deleted.
        * dom/Document.h:
        (WebCore::Document::existingAXObjectCache):

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

        Rebaseline bindings tests after r209864.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):

2016-12-15  Andreas Kling  <akling@apple.com>

        Always clear RenderLayer backing stores when going into page cache.
        <https://webkit.org/b/165901>

        Reviewed by Simon Fraser.

        We were already doing this for the iOS and GTK+ ports, let's do it everywhere
        for consistency, and a bit of memory usage improvement.

        This patch just removes the setting and always calls FrameView::clearBackingStores()
        when there is composited content going into page cache.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * history/PageCache.h:
        (WebCore::PageCache::shouldClearBackingStores): Deleted.
        (WebCore::PageCache::setShouldClearBackingStores): Deleted.

2016-12-15  Darin Adler  <darin@apple.com>

        Remove custom binding for MediaDevices
        https://bugs.webkit.org/show_bug.cgi?id=165894

        Reviewed by Eric Carlson.

        Removes the explicit code to parse the MediaStreamConstraints and
        MediaTrackConstraints. Next step could be to change the internal
        code to use the structs from bindings directly so we don't need
        code to convert to an internal format.

        * CMakeLists.txt: Added MediaTrackConstraints.idl and MediaTrackConstraints.cpp,
        removed JSMediaDevicesCustom.cpp.

        * DerivedSources.make: Added MediaTrackConstraints.idl.
        Also sorted list of IDL files and fixed use of tabs.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::createMediaConstraintsImpl): Added.
        (WebCore::MediaDevices::getUserMedia): Changed this function to take arguments that
        are generated by the bindings script, and call createMediaConstraintsImpl to convert
        into the internal data structure.
        * Modules/mediastream/MediaDevices.h: Added StreamConstraints struct and changed
        getUserMedia to take that as specified in the IDL.
        * Modules/mediastream/MediaDevices.idl: Added definition of the MediaStreamConstraints
        dictionary. Removed [Custom] from getUserMedia.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Pass a reference to addObserver.
        (WebCore::MediaStream::~MediaStream): Pass a rference to removeObserver.
        (WebCore::MediaStream::internalAddTrack): Ditto.
        (WebCore::MediaStream::internalRemoveTrack): Ditto.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::createMediaConstraintsImpl): Added.
        (WebCore::MediaStreamTrack::applyConstraints): Changed to take an optional
        MediaTrackConstraints argument and call createMediaConstraintsImpl to convert
        into the internal data structure. Also merged the multiple overloads of this
        all into a single function, used auto to make the code easier to read, and
        moved the code that stores new constrains into the success handling, since the
        specification says that's the only case where we should store it.
        (WebCore::MediaStreamTrack::addObserver): Take a reference instead of a pointer.
        (WebCore::MediaStreamTrack::removeObserver): Ditto.
        * Modules/mediastream/MediaStreamTrack.h: Removed many unneeded includes.
        Changed getConstraints to return const MediaTrackConstraints&, applyConstraints
        to take an optional MediaTrackConstraints, add/removeObserver to take a reference
        rather than a pointer, and changed m_constraints to be a MediaTrackConstraints
        instead of a RefPtr<MediaConstraints>.
        * Modules/mediastream/MediaStreamTrack.idl: Removed [Custom] from getConstraints
        and applyConstraints.

        * Modules/mediastream/MediaTrackConstraints.cpp: Added.
        (WebCore::set): Overloaded function to set constriaints in a
        MediaTrackConstraintSetMap.
        (WebCore::convertToInternalForm): Helper function that takes a
        MediaTrackConstraintSet and turns it into a MediaTrackConstraintSetMap.
        (WebCore::convertAdvancedToInternalForm): More of the same, but for vectors.
        (WebCore::createMediaConstraintsImpl): Top level function. Calls the other
        functions and then MediaConstraintsImpl::create.
        * Modules/mediastream/MediaTrackConstraints.h: Added. Contains all the structures
        and type definitions for the dictionaries defined in the IDL file, and also the
        createMediaConstraintsImpl function declaration.
        * Modules/mediastream/MediaTrackConstraints.idl: Added. Contains the
        MediaTrackConstraints and all the other dictionaries and typedefs that are needed
        to define that dictionary.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start): Changed to not depend on MediaDevices::Promise.
        (WebCore::UserMediaRequest::UserMediaRequest): Ditto.
        (WebCore::isSecure): Rearranged to be easier to understand.
        (WebCore::UserMediaRequest::start): Removed a local variable for simplicity.
        (WebCore::UserMediaRequest::document): Removed a redundant null check.
        * Modules/mediastream/UserMediaRequest.h: Reduced includes, changed to not depend
        on MediaDevices::Promise, removing the reason to include MediaDevices.h.

        * WebCore.xcodeproj/project.pbxproj: Updated to remove old files and add new ones.

        * bindings/js/JSBindingsAllInOne.cpp: Removed JSMediaDevicesCustom.cpp.

        * bindings/js/JSMediaDevicesCustom.cpp: Removed.
        * bindings/js/JSMediaDevicesCustom.h: Removed.

        * bindings/js/JSMediaStreamTrackCustom.cpp:
        (WebCore::JSMediaStreamTrack::applyConstraints): Deleted.
        (WebCore::JSMediaStreamTrack::getConstraints): Deleted.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument): Updated to allow multiple standalone dictionaries, as long as
        the name of one of the dictionaries matches the name of the file.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionary): Added "other dictionaries" argument so we can support
        files with multiple dictionaries in them.
        (GenerateDictionariesHeaderContent): Completed support for dictionaries that
        are not named after a top level interface by added one more check for a missing
        $interface in a place that otherwise would not handle it correctly.
        (GenerateImplementation): Removed code that set $currentCachedAttribute and
        $cacheIndex, since no was reading the value of either any longer.
        (GenerateDictionaryHeader): Added "other dictionaries".
        (GenerateDictionaryImplementation): Ditto.
        (WriteData): Removed unnnecessarily indirect code that was using FileNamePrefix
        and a local variable named $prefix instead of just writing "JS".

        * bindings/scripts/generate-bindings.pl: Corrected the use of the fileparse
        function from the Path::Basename module; after reading the documentation for
        this it is clear that there is no need to first call basename, and fileparse
        should also be used instead of basename.

        * platform/mediastream/MediaConstraints.h: Removed unneeded includes.
        (WebCore::StringConstraint::appendExact): Removed an incorrect use of clear
        here that would mess up cases where there is supposed to be more than one
        exact value.

        * platform/mediastream/MediaStreamTrackPrivate.cpp: Remvoed unneeded includes.
        (WebCore::MediaStreamTrackPrivate::clone): Removed code to copy m_constraints.
        (WebCore::MediaStreamTrackPrivate::constraints): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h: Removed the constraints
        function member and the m_constraints data member.

2016-12-15  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Enable CSS Deferred Parsing
        https://bugs.webkit.org/show_bug.cgi?id=165869

        Reviewed by Sam Weinig.

        Enable CSS deferred parsing once again. It's now behind a pref,
        so it's easy to flip off and on.

        To address the memory regression that caused the previous rollout,
        the tokenizer is no longer retained. Instead the sheet text and escaped
        strings are retained by CSSDeferredParser, and then DeferredStyleProperties
        and DeferredStyleGroupRuleList make copies of the tokens from the original
        tokenization process. As the rules get parsed, these tokens get thrown
        away.

        This means that instead of the entire set of tokens staying in memory
        as long as even one unparsed rule remained, now only the tokens that
        still need parsing will remain alive.

        Unparsed rules will consume slightly more memory than parsed rules, but
        the more unparsed rules you have, the bigger the performance win as
        well, so this is a tradeoff. Given that the parsing speed is going up
        by anywhere from 25-40% on cold loads of pages (where all stylesheets
        have to parse), this seems worth it to me.

        * css/parser/CSSParserMode.h:
        * page/Settings.in:

2016-12-15  Alejandro G. Castro  <alex@igalia.com>

        [OWR] Unskip fast/mediastream/MediaStream-video-element-track-stop.html
        https://bugs.webkit.org/show_bug.cgi?id=165316

        Reviewed by Philippe Normand.

        Fixed the ended support of the video element in the OWR player and
        fixed the videoTracks support. Now the OW player properly adds and
        removes the audio and video tracks. Added the getSettings support
        to the mediastream interface. Solved also the size handling in
        some of the enable/muted situations.

        Unskipping fast/mediastream/MediaStream-video-element-track-stop.html.

        * platform/GStreamer.cmake: Added the new
        RealtimeMediaSourceOwr.cpp with the new code handling the
        settings.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::~MediaPlayerPrivateGStreamerOwr):
        Release the new video and audio maps that creates a relationship
        of the mediastream tracks with the mediatracks of the video element.
        (WebCore::MediaPlayerPrivateGStreamerOwr::play): Set ended to
        false when we start playing.
        (WebCore::MediaPlayerPrivateGStreamerOwr::load): Create the media
        tracks to the player so that the videoTracks API returns it, and
        add an entry in the map to be able to restore it using the
        mediastream track.
        (WebCore::MediaPlayerPrivateGStreamerOwr::disableMediaTracks):
        Move some part of the stop function to this one in order to use it
        in pause method and avoid changing the video selection in that
        case.
        (WebCore::MediaPlayerPrivateGStreamerOwr::stop): Now we call the
        function disableMediaTracks and we also change teh selected
        videoTrack.
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded): For
        videoTrack reset the size and the selected element. In case there
        is no media playing we Make sure we set the ended variable to true
        and call the timeChange to modify the state of the player.
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged):
        Handle properly the situation when the user changed the enabled
        value, we disable the media.
        (WebCore::MediaPlayerPrivateGStreamerOwr::setSize): Modify the
        size of the source.
        (WebCore::MediaPlayerPrivateGStreamerOwr::naturalSize): Overrided
        to make sure we return a size even when the sample is not ready
        for gst.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
        Added the ended attribute and the maps.
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::createMutedRemoteSource): Use the new
        realtime video and audio sources classes, this new classes
        implement the settings of each type of media element.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        Use the new audio and video source classes instead of the general
        one in order to handle the settings properly.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.cpp: Added
        (WebCore::RealtimeMediaSourceOwr::settings): Initialize using the
        subclass and return the new currentSettings attribute.
        (WebCore::RealtimeMediaSourceOwr::supportedConstraints): Call the
        subclass initialization of the supportedSettings.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        (WebCore::RealtimeMediaSourceOwr::initializeSettings): Added to
        initialize the settings before returning the value. Implemented in
        the subclass.
        (WebCore::RealtimeMediaSourceOwr::initializeSupportedConstraints):
        Added to initialize the supported settings of the
        media. Implemented in the subclass.
        (WebCore::RealtimeMediaSourceOwr::settings): Moved to the cpp
        file, implemented using the initialize functions of the subclass
        * platform/mediastream/openwebrtc/RealtimeVideoSourceOwr.h: Added
        this new class to handle the settings of the video elements. The
        class initializes the settings and the supportedSettings.
        * platform/mediastream/openwebrtc/RealtimeAudioSourceOwr.h: Added
        this new class to handle the settings of the audio elements. The
        class initializes the settings and the supportedSettings.


2016-12-15  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r208902) Null pointer dereference in wkIsPublicSuffix
        https://bugs.webkit.org/show_bug.cgi?id=165885
        <rdar://problem/29476917>

        Reviewed by Darin Adler.

        wkIsPublicSuffix crashes if you give it a nil NSString*.
        This was possible before IDN2008 adoption, but it's more common now
        because domains like "r4---asdf.example.com" fail in uidna_nameToASCII but not in uidna_IDNToASCII.
        decodeHostName can return a nil NSString.  We can't use it unchecked, so instead we use an algorithm that allows
        for decoding failures while still finding top privately controlled domains correctly.

        Tested by new API tests which crash before this change and verify the behavior matches behavior before r208902.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::isPublicSuffix):
        (WebCore::topPrivatelyControlledDomain):

2016-12-15  Alex Christensen  <achristensen@webkit.org>

        Fix Windows WebGL build after r209832

        * CMakeLists.txt:

2016-12-14  Hunseop Jeong  <hs85.jeong@samsung.com>

        Unreviewed build fix after r209832

        * platform/graphics/PlatformDisplay.cpp: 
        (WebCore::PlatformDisplay::sharedDisplay): Added the guard for the clang

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

        [GTK] Support latest SubtleCrypto HMAC APIs
        https://bugs.webkit.org/show_bug.cgi?id=165863

        Reviewed by Sam Weinig.

        SubtleCrypto spec is updated, and new delegate implementations are required to support these interfaces.
        This patch implements platformSign and platformVerify with WorkQueues for gcrypt backend.

        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):

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

        Unreviewed, rolling out r209415.

        This workaround is no longer needed now that
        <rdar://problem/29518605> has been fixed

        Reverted changeset:

        "Add HTML interactive form validation blacklist for some
        WebKit-specific sites"
        https://bugs.webkit.org/show_bug.cgi?id=165470
        http://trac.webkit.org/changeset/209415

2016-12-14  Dean Jackson  <dino@apple.com>

        Update prefers-reduced-motion syntax
        https://bugs.webkit.org/show_bug.cgi?id=165880
        <rdar://problems/29671807>

        Reviewed by Sam Weinig.

        After discussion in:
        https://github.com/w3c/csswg-drafts/issues/442
        ... the syntax of prefers-reduced-motion was changed
        to accept "reduce" or "no-preference".

        Updated the tests in fast/media.

        * css/CSSValueKeywords.in: Add no-preference keyword.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersReducedMotionEvaluate):

2016-12-14  Sam Weinig  <sam@webkit.org>

        REGRESSION (204679): Google notifications never load (expecting DOMStringList rather than JS array for Location.ancestorOrigins)
        <rdar://problem/29573563>
        https://bugs.webkit.org/show_bug.cgi?id=165872

        Reviewed by Chris Dumez.

        Revert the Location.ancestorOrigins part of r204679 because google.com is relying on
        it returning a DOMStringList (or at least something with a .item() function), rather
        than a frozen javascript array.
        
        Spec changes are tracked with https://github.com/whatwg/html/issues/2179.

        * page/Location.cpp:
        (WebCore::Location::ancestorOrigins):
        * page/Location.h:
        * page/Location.idl:
        Change Location.ancestorOrigins back to returning a DOMStringList.

2016-12-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Rename StyleKeyframe to StyleRuleKeyframe
        https://bugs.webkit.org/show_bug.cgi?id=165876

        Reviewed by Simon Fraser.

        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleRuleKeyframe::StyleRuleKeyframe):
        (WebCore::StyleRuleKeyframe::~StyleRuleKeyframe):
        (WebCore::StyleRuleKeyframe::mutableProperties):
        (WebCore::StyleRuleKeyframe::keyText):
        (WebCore::StyleRuleKeyframe::setKeyText):
        (WebCore::StyleRuleKeyframe::cssText):
        (WebCore::CSSKeyframeRule::CSSKeyframeRule):
        (WebCore::StyleKeyframe::StyleKeyframe): Deleted.
        (WebCore::StyleKeyframe::~StyleKeyframe): Deleted.
        (WebCore::StyleKeyframe::mutableProperties): Deleted.
        (WebCore::StyleKeyframe::keyText): Deleted.
        (WebCore::StyleKeyframe::setKeyText): Deleted.
        (WebCore::StyleKeyframe::cssText): Deleted.
        * css/CSSKeyframeRule.h:
        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::keyframes):
        (WebCore::StyleRuleKeyframes::parserAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperAppendKeyframe):
        (WebCore::CSSKeyframesRule::appendRule):
        (WebCore::CSSKeyframesRule::item):
        * css/CSSKeyframesRule.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        * css/StyleRule.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseKeyframeRule):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseDeferredKeyframeList):
        (WebCore::CSSParserImpl::consumeKeyframesRule):
        (WebCore::CSSParserImpl::consumeKeyframeStyleRule):
        * css/parser/CSSParserImpl.h:

2016-12-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make deferred parsing retain the sheet text. Fix invalidation to avoid deferred parsing.
        https://bugs.webkit.org/show_bug.cgi?id=165868

        Reviewed by Simon Fraser.

        With this new model of token copying, the sheet text needs to be retained. The tokenizer did this,
        but we're no longer keeping it around.

        StyleInvalidation is also aggressively crawling media rules, even unsupported ones, so fix it
        to avoid deferred parsing.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):
        * css/parser/CSSDeferredParser.cpp:
        (WebCore::CSSDeferredParser::CSSDeferredParser):
        * css/parser/CSSDeferredParser.h:
        (WebCore::CSSDeferredParser::create):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::CSSParserImpl):

2016-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: An element with tabindex is not focusable unless there is no mouse event handler
        https://bugs.webkit.org/show_bug.cgi?id=165843

        Reviewed by Antti Koivisto.

        The bug was caused by ancestorRespondingToClickEvents not checking the precense of tabindex attribute.
        Check that condition along with event listeners.

        Test: fast/events/focusing-element-with-tabindex-by-tap-or-click.html

        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):

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

        Progress towards using ANGLE to do WebGL rendering
        https://bugs.webkit.org/show_bug.cgi?id=165864

        Reviewed by Dean Jackson.

        No new tests, no change in behavior.
        Just compile fixes for a configuration that will soon be standard
        that can be landed now without breaking anything.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::sharedDisplay):
        Ignore some clang warnings that will cause problems when this is compiled on Mac.

2016-12-14  Dean Jackson  <dino@apple.com>

        [iOS] MediaDocuments have controls on the bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=165865
        <rdar://problem/28757268>

        Reviewed by Jon Lee.

        MediaDocuments on iOS are incorrectly placing the controls at
        the bottom of the page. This is due to the <video> element
        getting a height of 100%. It should be "auto" instead.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2016-12-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Implement deferred parsing of properties, @media, @supports and @keyframes
        https://bugs.webkit.org/show_bug.cgi?id=165743

        Reviewed by Dean Jackson.

        Added new tests in fast/css/deferred-parsing.

        This patch implements deferred parsing in CSS. By default, when parsing
        author stylesheets, the parser goes into a deferred mode where it leaves
        the declaration block of all style rules unparsed initially. Instead of
        creating and setting an ImmutableStyleProperties object on the StyleRule,
        the parser creates a DeferredStyleProperties object instead that is
        capable of calling into CSSDeferredParser to parse the properties and values
        only when the properties are finally asked for.

        In addition, this patch defers the parsing of the interior of @media,
        @supports, and @keyframes rules. @media blocks that are never matched will
        never parse any of the rules inside. @supports conditions for unsupported
        features will also not be parsed. For @keyframes, if the animation is never
        referenced/used, then the @keyframes child rules will never be parsed.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add CSSDeferredParser to the build.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::matchingFaces):
        Patched to drop the StyleSheetContents* argument from parseValue, since it
        is no longer needed.

        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::StyleRuleKeyframes):
        (WebCore::StyleRuleKeyframes::parseDeferredRulesIfNeeded):
        (WebCore::StyleRuleKeyframes::keyframes):
        (WebCore::StyleRuleKeyframes::wrapperAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperRemoveKeyframe):
        (WebCore::StyleRuleKeyframes::findKeyframeIndex):
        * css/CSSKeyframesRule.h:
        Keyframes now hold both a keyframes Vector and a DeferredStyleGroupRuleList
        object. The keyframes vector won't be populated until it is needed, and the
        population is done by DeferredStyleGroupRuleList, which holds both the original
        tokens of the keyframes rule interior, and a references to the
        CSSDeferredParser that will do the parsing.

        * css/DOMCSSNamespace.cpp:
        (WebCore::DOMCSSNamespace::supports):
        Patched to drop the StyleSheetContents* argument from parseValue, since it
        is no longer needed.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        ElementRuleCollector tests to see if a rule is empty by counting properties(),
        but we don't want to initiate deferred parsing just to check this. Instead we
        invoke propertiesWithoutDeferredParsing, which will hand back a nullptr if
        the properties haven't been parsed yet. In order to ensure this optimization
        continues to work, any rules whose interiors consist of only whitespace do
        not get deferred.

        * css/FontFace.cpp:
        (WebCore::FontFace::setVariant):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        Patched to drop the StyleSheetContents* argument from parseValue, since it
        is no longer needed.

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::MutableStyleProperties):
        (WebCore::MutableStyleProperties::setProperty):
        (WebCore::DeferredStyleProperties::create):
        (WebCore::DeferredStyleProperties::DeferredStyleProperties):
        (WebCore::DeferredStyleProperties::~DeferredStyleProperties):
        (WebCore::DeferredStyleProperties::parseDeferredProperties):
        * css/StyleProperties.h:
        (WebCore::StylePropertiesBase::type):
        (WebCore::StylePropertiesBase::cssParserMode):
        (WebCore::StylePropertiesBase::StylePropertiesBase):
        (WebCore::StyleProperties::isMutable):
        (WebCore::StyleProperties::StyleProperties):
        (WebCore::StylePropertiesBase::deref):
        (isType):
        (WebCore::StyleProperties::cssParserMode): Deleted.
        (WebCore::StyleProperties::deref): Deleted.
        Right now StyleProperties has two subclasses, ImmutableStyleProperties (which
        is created by the parser when not deferring), and MutableStyleProperties (used
        when making changes and doing DOM Manipulations).

        This patch adds a new base class called StylePropertiesBase, and StyleProperties
        now derives from it. DeferredStyleProperties derives from this base. The members
        of StyleProperties have been moved up into StylePropertiesBase.

        The m_isMutable bit, used to determine the type for downcasting has been enhanced
        to m_type (2 bits), since there are now three possible subclasses.

        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::properties):
        (WebCore::StyleRule::mutableProperties):
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        Patched to ensure that when properties() are accessed, that if the current
        stored StylePropertyBase in the rule is a DeferredStyleProperties, we then
        parse and replace DeferredStyleProperties with ImmutableStyleProperties on the
        rule. By using a common base class, we avoid increasing memory usage in
        StyleRule.

        (WebCore::DeferredStyleGroupRuleList::create):
        (WebCore::DeferredStyleGroupRuleList::DeferredStyleGroupRuleList):
        (WebCore::DeferredStyleGroupRuleList::parseDeferredRules):
        (WebCore::DeferredStyleGroupRuleList::parseDeferredKeyframes):
        DeferredStyleGroupList is used to handle deferred parsing of objects with
        child rules. These include @media, @supports and @keyframes.

        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleGroup::childRules):
        (WebCore::StyleRuleGroup::wrapperInsertRule):
        (WebCore::StyleRuleGroup::wrapperRemoveRule):
        (WebCore::StyleRuleGroup::parseDeferredRulesIfNeeded):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        StyleRuleGroup now holds both a child rules Vector and a
        DeferredStyleGroupRuleList. If DeferredStyleGroupRuleList is set, then
        when the childRules are finally accessed, we will populate the childRules
        Vector and then null out the DeferredStyleGroupRuleList.

        * css/StyleRule.h:
        (WebCore::StyleRule::propertiesWithoutDeferredParsing):
        (WebCore::StyleRuleGroup::childRulesWithoutDeferredParsing):
        (WebCore::StyleRuleGroup::childRules): Deleted.
        Add new accesors for fetching properties and child rules without causing
        deferred parsing to happen.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        Patched to turn on deferred parsing for author sheets and for all
        non-UA stylesheets parsed from a string (e.g., <style>).

        (WebCore::traverseSubresourcesInRules):
        The broken resource check was aggressively accessing properties(). Patch
        it to call propertiesWithoutDeferredParsing() instead so that it doesn't
        defeat the new optimization.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        Patched to drop the StyleSheetContents* argument from parseValue, since it
        is no longer needed.

        * css/parser/CSSDeferredParser.cpp: Added.
        (WebCore::CSSDeferredParser::CSSDeferredParser):
        (WebCore::CSSDeferredParser::parseDeclaration):
        (WebCore::CSSDeferredParser::parseRuleList):
        (WebCore::CSSDeferredParser::parseKeyframeList):
        * css/parser/CSSDeferredParser.h: Added.
        (WebCore::CSSDeferredParser::create):
        (WebCore::CSSDeferredParser::tokenizer):
        (WebCore::CSSDeferredParser::mode):
        (WebCore::CSSDeferredParser::context):
        (WebCore::CSSDeferredParser::styleSheet):
        The CSSDeferredParser. It caches the original tokenizer's' escaped strings. Because
        the CSSDeferredParser is referenced by all the rules that have yet to parse,
        it will stay alive until all rules in the stylesheet has been fully parsed.

        The parser receives CSSParserTokenRanges from DeferredStyleProperties or
        DeferredStyleGroupRuleList and feeds them to CSSParserImpl, which then
        is able to do the parsing as it would have occurred originally had the
        range not been deferred.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::parseSingleValue):
        (WebCore::CSSParser::parseValue):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParserFastPaths::maybeParseValue):
        * css/parser/CSSParserFastPaths.h:
        Drop the StyleSheetContents* argument from the methods that no longer need
        them.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::CSSParserImpl):
        (WebCore::CSSParserImpl::tokenizer):
        (WebCore::CSSParserImpl::parseValue):
        (WebCore::CSSParserImpl::parseCustomPropertyValue):
        (WebCore::CSSParserImpl::parseDeclarationList):
        (WebCore::CSSParserImpl::parseInlineStyleDeclaration):
        (WebCore::CSSParserImpl::parseRule):
        (WebCore::CSSParserImpl::parseStyleSheet):
        (WebCore::CSSParserImpl::parseDeclarationListForInspector):
        (WebCore::CSSParserImpl::parseStyleSheetForInspector):
        (WebCore::CSSParserImpl::consumeQualifiedRule):
        (WebCore::CSSParserImpl::consumeMediaRule):
        (WebCore::CSSParserImpl::consumeSupportsRule):
        (WebCore::CSSParserImpl::consumeKeyframesRule):
        (WebCore::CSSParserImpl::consumeStyleRule):
        Drop the StyleSheetContents* argument from the methods that no longer need
        them.

        (WebCore::CSSParserImpl::createDeferredStyleProperties):
        (WebCore::CSSParserImpl::parseDeferredDeclaration):
        (WebCore::CSSParserImpl::parseDeferredRuleList):
        (WebCore::CSSParserImpl::parseDeferredKeyframeList):
        The methods that handle deferred parsing. They make sure to initialize
        new CSSParserImpls with the original deferred parser, and then call existing
        methods to do the parsing.

        * css/parser/CSSParserImpl.h:
        Patched to remove StyleSheetContents* arguments from some methods and
        to add the new deferred parsing methods.

        * css/parser/CSSParserTokenRange.cpp:
        (WebCore::CSSParserTokenRange::consumeBlockCheckingForEditability):
        * css/parser/CSSParserTokenRange.h:
        In order to preserve the editability optimization from r180867, when
        a style rule's block is consumed, we use a special method that looks
        for -webkit-user-modify tokens. If one is seen, then the editability
        optimization is turned off. Because we do this at the token level,
        the optimization keeps working even if properties don't get parsed.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::CSSPropertyParser::parseShorthand):
        Patched to remove StyleSheetContents* arguments now that the editability
        check is in CSSTokenizer instead.

        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::tokenRange):
        * css/parser/CSSTokenizer.h:
        Make tokenRange() const.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        Patched to drop the StyleSheetContents* argument.

        * testing/Internals.cpp:
        (WebCore::deferredStyleRulesCountForList):
        (WebCore::Internals::deferredStyleRulesCount):
        (WebCore::deferredGroupRulesCountForList):
        (WebCore::Internals::deferredGroupRulesCount):
        (WebCore::deferredKeyframesRulesCountForList):
        (WebCore::Internals::deferredKeyframesRulesCount):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add new testing methods that can count the deferred style rules and
        group child rule lists. These methods are used by the new layout tests.

2016-12-14  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Massively speedup IDBIndex.get().
        https://bugs.webkit.org/show_bug.cgi?id=165802

        Reviewed by Alex Christensen.

        No new tests (No behavior change to Javascript, table upgrade change covered by API test).

        This change upgrades the IndexRecords schema to include the ObjectStore record ID for the referenced record.
        It also adds a SQLite Index-by-key on IndexRecords.

        This speeds up PerformanceTests/IndexedDB/index-get.html by 15-20x.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::v3IndexRecordsTableSchema):
        (WebCore::IDBServer::v3IndexRecordsTableSchemaAlternate):
        (WebCore::IDBServer::v1IndexRecordsIndexSchema):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsTable):
        (WebCore::IDBServer::SQLiteIDBBackingStore::ensureValidIndexRecordsIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateOneIndexForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::markAsErrored):
        (WebCore::IDBServer::SQLiteIDBCursor::internalAdvanceOnce):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:
        (WebCore::IDBServer::SQLiteIDBCursor::currentRecordRowID):

2016-12-14  Sam Weinig  <sam@webkit.org>

        Actually set the shipping contact when validating the payment request

        Reviewed by Anders Carlsson.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        Fix typo.

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

        Handle key generation with empty challenge string
        https://bugs.webkit.org/show_bug.cgi?id=165835
        <rdar://problem/29128710>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=160945 didn't set the challenge length to
        1 for empty challenge strings. Thus the null terminator was not included. Empty
        challenge strings are allowed:
        "If the element has a challenge attribute, then let challenge be that attribute's
        value. Otherwise, let challenge be the empty string."
        https://www.w3.org/TR/html5/forms.html#the-keygen-element (fetched 2016-12-13)

        Email certificate generation at
        https://www.comodo.com/home/email-security/free-email-certificate.php broke
        because of https://bugs.webkit.org/show_bug.cgi?id=160945.

        No new tests. The original patch did not have tests and the breakage was in the
        produced key material so a test would have to validate the crypto output.

        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):
            Now adds 1 to the length of the challenge to account for its null terminator.
            This matches the old behavior.

2016-12-14  Daniel Bates  <dabates@apple.com>

        CSP: Allow HTTPS URL to match HTTP source expression
        https://bugs.webkit.org/show_bug.cgi?id=159520
        <rdar://problem/27287177>

        Reviewed by Brent Fulgham.

        Test: http/tests/security/contentSecurityPolicy/script-src-parsing-implicit-and-explicit-port-number.html

        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::schemeMatches):
        (WebCore::ContentSecurityPolicySource::portMatches):

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

        REGRESSION (r209776): [ios-simulator] LayoutTest http/tests/xmlhttprequest/on-network-timeout-error-during-preflight.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=165836

        Reviewed by Brady Eidson.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        Use the platform default timeout for CORS preflight requests.

2016-12-14  Antti Koivisto  <antti@apple.com>

        WebContent crash under WebCore::CachedResource::load in WebCore::FrameLoader::outgoingReferrer const
        https://bugs.webkit.org/show_bug.cgi?id=165852
        <rdar://problem/27297153>

        Reviewed by Chris Dumez.

        There appears to be some path where we get here with a null frame.
        No test, don't know how exactly this happens.

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

            Null check the frame.

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

        Unreviewed, rolling out r209766.

        Regressed Dromaeo JSLib by ~50%

        Reverted changeset:

        "Make opaque root scanning truly constraint-based"
        https://bugs.webkit.org/show_bug.cgi?id=165760
        http://trac.webkit.org/changeset/209766

2016-12-14  Andy Estes  <aestes@apple.com>

        EventDispatcher::dispatchEvent() should take its Node by reference
        https://bugs.webkit.org/show_bug.cgi?id=165840

        Reviewed by Andreas Kling.

        No new tests. No change in behavior.

        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent): Dereferenced |this| when calling
        EventDispatcher::dispatchEvent().
        (WebCore::Element::dispatchKeyEvent): Ditto.
        (WebCore::Element::dispatchFocusEvent): Ditto.
        (WebCore::Element::dispatchBlurEvent): Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Changed |origin| from a Node* to a Node&, renamed
        it to |node|, and protected it with a Ref called |protectedNode| to match our preferred
        style.
        * dom/EventDispatcher.h: Changed dispatchEvent's first parameter type from Node* to Node&.
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Dereferenced |this| when calling
        EventDispatcher::dispatchEvent().
        (WebCore::Node::dispatchTouchEvent): Ditto.
        (WebCore::Node::dispatchUIRequestEvent): Ditto.
        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent): Dereferenced |node| when calling
        EventDispatcher::dispatchEvent().
        * dom/SimulatedClick.cpp:
        (WebCore::simulateMouseEvent): Passed |element| as a reference to
        EventDispatcher::dispatchEvent().

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

        Remove Unicode case-insensitive matching for usemap=""
        https://bugs.webkit.org/show_bug.cgi?id=163894

        Reviewed by Antti Koivisto.

        Remove Unicode case-insensitive matching for usemap="" as this no longer
        matches the specification [1] or Firefox. Also align our parsing logic for
        the usemap attribute to match the specification [2].

        This simplifies the code a bit, is more efficient and the compatibility
        risk should be low based on Firefox's behavior and Chome's usage data.

        [1] https://github.com/whatwg/html/commit/6acdb2122298d2bb7bb839c0a61b4e1f9b0f9bc9
        [2] https://html.spec.whatwg.org/#rules-for-parsing-a-hash-name-reference

        Test: fast/images/image-usemap-parsing.html

        * dom/Document.cpp:
        (WebCore::Document::addImageElementByUsemap):
        (WebCore::Document::removeImageElementByUsemap):
        (WebCore::Document::imageElementByUsemap):
        * dom/Document.h:
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::getElementByUsemap):
        * dom/DocumentOrderedMap.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getImageMap):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedInto):
        (WebCore::HTMLImageElement::removedFrom):
        (WebCore::HTMLImageElement::matchesUsemap):
        * html/HTMLImageElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        (WebCore::HTMLMapElement::parseAttribute):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLHashNameReference):
        * html/parser/HTMLParserIdioms.h:

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

        Attempt to fix the Windows build after r209805.

        Unreviewed build fix.

        * css/CSSAllInOne.cpp:

2016-12-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Remove WebkitCSSTransformValue
        https://bugs.webkit.org/show_bug.cgi?id=165844

        Reviewed by Zalan Bujtas.

        Remove WebkitCSSTransformValue and just use a CSSFunctionValue instead. No other
        browsers support it, and the information it provides is easily obtainable from cssText.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::matrixTransformValue):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isSpringTimingFunctionValue):
        (WebCore::CSSValue::isWebKitCSSTransformValue): Deleted.
        * css/StyleResolver.cpp:
        * css/TransformFunctions.cpp:
        (WebCore::transformOperationType):
        (WebCore::transformsForValue):
        * css/TransformFunctions.h:
        * css/WebKitCSSTransformValue.cpp: Removed.
        * css/WebKitCSSTransformValue.h: Removed.
        * css/WebKitCSSTransformValue.idl: Removed.
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseTransformNumberArguments):
        (WebCore::parseSimpleTransformValue):
        (WebCore::parseSimpleTransformList):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTranslate3d):
        (WebCore::consumeNumbers):
        (WebCore::consumePerspective):
        (WebCore::consumeTransformValue):
        (WebCore::transformOperationForCSSValueID): Deleted.

2016-12-14  Antti Koivisto  <antti@apple.com>

        Make Style::Update const in RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=165845

        Reviewed by Andreas Kling.

        Moving style away from unique_ptrs leaves them in weird state.

        * style/RenderTreeUpdater.cpp:
        (WebCore::findRenderingRoots):
        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::updateElementRenderer):

            Clone the style instead of moving it. This is not meaningfully more expensive.
            Remove null checks, style is never null.

        * style/RenderTreeUpdater.h:

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

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::namedItem):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionDirection):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/testbindings.cpp:
        (main):

2016-12-14  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix debug build break since r207192. Unreviewed.
        https://bugs.webkit.org/show_bug.cgi?id=165847

        No new tests, no new behaviours.

        In JSDOMBinding.h, JSClass::info() returns each js class's
        "static const JSC::ClassInfo s_info"'s address.
        It's static variable's address, so always non-null.

        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::callPromiseOperation):
        (WebCore::BindingCaller::callOperation):
        (WebCore::BindingCaller::setAttribute):
        (WebCore::BindingCaller::attribute):

2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
        https://bugs.webkit.org/show_bug.cgi?id=164022

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by existing tests.

        * page/Settings.cpp:
        Added new setting to disable GStreamer players, so the selection of
        MockMediaPlayerMediaSource can be forced for some tests, just like
        it's already being done for the AVFoundation player in Mac.
        (WebCore::Settings::setGStreamerEnabled):
        * page/Settings.h:
        (WebCore::Settings::isGStreamerEnabled):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        Don't register GStreamer players when they're disabled.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime):
        Use doubles instead of floats.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Use doubles instead of floats for m_durationAtEOS.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Don't reset m_sample on videoSink drain, it causes too many problems.
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Removed unused methods.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        Keep releasing m_sample on drain, but don't report the event
        externally via signal anymore. The base player private isn't
        listening to it anymore.
        (webkitVideoSinkEvent):
        (webkit_video_sink_class_init):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        Check if the demuxer caps correspond to a supported codec.
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        Empty m_track is now legal and means unsupported codec.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        Warn about more than one stream, but "support" it by ignoring it using
        a black hole probe.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        Also report the duration when it's detected for the first time. Invalid
        stream types now mean that unsupported codecs have been detected.
        Complete init segment processing in that case.
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        Disconnect black hole probe.
        (WebCore::appendPipelineDemuxerBlackHolePadProbe): Ignore buffers.
        (WebCore::appendPipelineDemuxerPadRemoved): New parameter used.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsCodecs):
        Check supported codecs by matching against wildcard expressions.
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
        Check for supported codecs.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        New supportsCodecs() method.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::resetParserState):
        Implemented parser resetting by aborting the AppendPipeline.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        Added resetParserState().
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::resetParserState):
        Implemented it.
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):
        Disable the GStreamer players when initializing the mock media source,
        like it's already done for the AVFoundation player to force the
        selection of MockMediaPlayerMediaSource.

2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Fix player private selection when MSE is enabled
        https://bugs.webkit.org/show_bug.cgi?id=164116

        Reviewed by Philippe Normand.

        Covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):

2016-12-13  Commit Queue  <commit-queue@webkit.org>

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

        Cause build failures (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "Use JSValue::toWTFString instead of calling toString(exec)
        and value(exec)"
        https://bugs.webkit.org/show_bug.cgi?id=165795
        http://trac.webkit.org/changeset/209792

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

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        (WebCore::getNthValueOnKeyPath): Deleted.
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath): Deleted.
        (WebCore::ensureNthValueOnKeyPath): Deleted.
        (WebCore::canInjectNthValueOnKeyPath): Deleted.
        (WebCore::injectIDBKeyIntoScriptValue): Deleted.
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath): Deleted.
        (WebCore::canInjectIDBKeyIntoScriptValue): Deleted.
        (WebCore::deserializeIDBValueToJSValue): Deleted.
        (WebCore::scriptValueToIDBKey): Deleted.
        (WebCore::idbKeyDataToScriptValue): Deleted.
        (WebCore::createKeyPathArray): Deleted.
        (WebCore::generateIndexKeyForValue): Deleted.
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::virtualisAttribute): Deleted.
        (WebCore::JSEventListener::operator==): Deleted.
        (WebCore::eventHandlerAttribute): Deleted.
        (WebCore::createEventListenerForEventHandlerAttribute): Deleted.
        (WebCore::setEventHandlerAttribute): Deleted.
        (WebCore::windowEventHandlerAttribute): Deleted.
        (WebCore::setWindowEventHandlerAttribute): Deleted.
        (WebCore::documentEventHandlerAttribute): Deleted.
        (WebCore::setDocumentEventHandlerAttribute): Deleted.
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::namedItem):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionDirection):
        (WebCore::JSHTMLInputElement::setSelectionRange): Deleted.
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):
        (WebCore::JSInspectorFrontendHost::showContextMenu): Deleted.
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::responseText): Deleted.
        (WebCore::JSXMLHttpRequest::retrieveResponse): Deleted.
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/testbindings.cpp:
        (main):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

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

        ASSERTION FAILED: hasParserBlockingScript() seen with js/dom/modules/module-will-fire-beforeload.html
        https://bugs.webkit.org/show_bug.cgi?id=164883

        Reviewed by Ryosuke Niwa.

        This is *attempt to fix* patch since I cannot reproduce the crash reported in this issue.
        One possible scenario of this crash is the following.

        1. There is pending deferred scripts, that is not fetched yet.
        2. Then, we start watching on the script. And stop document parser.
        3. The document parser is stopped/detached by calling finishJSTest in beforeload.
        4. At this critical timing, (2)'s script is fetched, and notifyFinished is called since it is watched.

        In this patch, we ignore the script execution if the document parser is stopped / detached.
        Previously, it goes into the wrong path. And it causes assertion failure.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::notifyFinished):

2016-12-13  Keith Rollin  <krollin@apple.com>

        Memory warning logging appears to capture resident footprint, missing compress/swap.
        https://bugs.webkit.org/show_bug.cgi?id=165533
        <rdar://problem/29318410>

        Reviewed by Daniel Bates.

        Fix GTK build by adding an explicit constructor.

        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::MemoryUsage::MemoryUsage):

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

        CSP: ws: and wss: blocked with connect-src *
        https://bugs.webkit.org/show_bug.cgi?id=165804
        <rdar://problem/28563643>

        Reviewed by David Kilzer.

        Allow * to match ws: and wss:. This will make our behavior of * more closely conform
        the behavior of * in the Content Security Policy Level 3 spec.,
        <https://w3c.github.io/webappsec-csp/#match-url-to-source-expression> (Editor's Draft, 2 December 2016).

        Tests: http/tests/security/contentSecurityPolicy/connect-src-star-secure-websocket-allowed.html
               http/tests/security/contentSecurityPolicy/connect-src-star-websocket-allowed.html
               http/tests/security/contentSecurityPolicy/default-src-star-secure-websocket-allowed.html
               http/tests/security/contentSecurityPolicy/default-src-star-websocket-allowed.html

        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::isProtocolAllowedByStar):

2016-12-13  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make CSSFunctionValue derive from CSSValueList
        https://bugs.webkit.org/show_bug.cgi?id=165832

        Reviewed by Dean Jackson.

        With the old parser gone, we can now shrink CSSFunctionValue a bit by
        having it derive from CSSValueList instead of having an extra member
        that holds a value list of arguments. This is similar to the trick
        already employed by WebkitCSSTransformValue.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackSize):
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::customCSSText):
        (WebCore::CSSFunctionValue::CSSFunctionValue): Deleted.
        (WebCore::CSSFunctionValue::equals): Deleted.
        (WebCore::CSSFunctionValue::append): Deleted.
        * css/CSSFunctionValue.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints):
        (WebCore::StyleBuilderConverter::createGridTrackSize):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isGridTrackFixedSized):

2016-12-13  Chris Dumez  <cdumez@apple.com>

        Make Document a FrameDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=165810
        <rdar://problem/29157645>

        Reviewed by Ryosuke Niwa.

        Make Document a FrameDestructionObserver to make sure Document::m_frame
        is properly nulled out when a Frame gets destroyed.
        Document::disconnectFromFrame() is supposed to be called before the Frame
        gets destroyed so this also adds an assertion to try and identify places
        where we fail to call it.

        No new tests, no known reproduction case.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::disconnectFromFrame):
        (WebCore::Document::frameDestroyed):
        * dom/Document.h:
        (WebCore::Document::frame): Deleted.

2016-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r204163): Web Inspector: Page crashes when Inspector tries to load insecure SourceMap
        https://bugs.webkit.org/show_bug.cgi?id=165806
        <rdar://problem/28169025>

        Reviewed by Alex Christensen.

        Test: http/tests/inspector/network/loadResource-insecure-resource.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::loadResource):
        DocumentThreadableLoader now triggers the ThreadableLoaderClient's didFail
        callback, so this didFailLoaderCreation is now redundent and incorrect.

2016-12-13  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Enhance fast path translate transforms to allow percentages
        https://bugs.webkit.org/show_bug.cgi?id=165822

        Reviewed by Simon Fraser.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseTransformTranslateArguments):

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

        :hover rule causes a single tap to not activate a slotted anchor element
        https://bugs.webkit.org/show_bug.cgi?id=165551

        Reviewed by Antti Koivisto.

        Fixed a bug in ancestorRespondingToClickEvents that we were traversing the ancestor nodes without taking
        shadow roots and slots into account. This prevented tapping on a text node assigned to a slot inside
        an anchor element to activate the hyperlink on iOS.

        This bug was supposed to be fixed in r206605, and it was still broken on iOS due to the bug in
        ancestorRespondingToClickEvents. It is now tested by click-text-inside-linked-slot.html.

        Tests: fast/shadow-dom/click-on-slotted-anchor-with-hover.html
               fast/shadow-dom/click-text-inside-linked-slot.html

        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToClickEvents):
        (WebCore::Frame::qualifyingNodeAtViewportLocation):

2016-12-13  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Eliminate SVGPaint and SVGColor
        https://bugs.webkit.org/show_bug.cgi?id=165819

        Reviewed by Dean Jackson.

        Remove SVGColor and SVGPaint CSS values from the tree. The new parser
        already stopped making these values when parsing, so all that's left
        is to make sure computed style doesn't use these values either.

        We are the only browser engine to support these CSS values, they see no use
        on the Web, and they're already gone at the parsing level, so it's time
        to remove these interfaces from our tree.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isSubtypeExposedToCSSOM):
        (WebCore::CSSValue::isSVGColor): Deleted.
        (WebCore::CSSValue::isSVGPaint): Deleted.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::adjustSVGPaintForCurrentColor):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSVGColor):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperSVGPaint::PropertyWrapperSVGPaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fillPaintType):
        (WebCore::RenderStyle::setFillPaintColor):
        (WebCore::RenderStyle::strokePaintType):
        (WebCore::RenderStyle::setStrokePaintColor):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialFillPaintType):
        (WebCore::SVGRenderStyle::initialStrokePaintType):
        (WebCore::SVGRenderStyle::setFillPaint):
        (WebCore::SVGRenderStyle::setStrokePaint):
        (WebCore::SVGRenderStyle::fillPaintType):
        (WebCore::SVGRenderStyle::strokePaintType):
        (WebCore::SVGRenderStyle::visitedLinkFillPaintType):
        (WebCore::SVGRenderStyle::visitedLinkStrokePaintType):
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::hasFill):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/SVGResources.cpp:
        (WebCore::paintingResourceFromSVGPaint):
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString):
        (WebCore::parseColorFromString):
        (WebCore::SVGAnimatedColorAnimator::calculateDistance):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::setValueAsString):
        * svg/SVGAnimatedType.h:
        * svg/SVGColor.cpp: Removed.
        * svg/SVGColor.h: Removed.
        * svg/SVGColor.idl: Removed.
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGPaint.cpp: Removed.
        * svg/SVGPaint.h: Removed.
        * svg/SVGPaint.idl: Removed.

2016-12-13  Alex Christensen  <achristensen@webkit.org>

        Restore NSURLRequest's default time interval to match behavior before NSURLSession adoption
        https://bugs.webkit.org/show_bug.cgi?id=165821
        <rdar://problem/28492939>

        Reviewed by Brady Eidson.

        Before adopting NSURLSession, iOS used CFURLConnection, not NSURLConnection.
        iOS used to have a default timeout of INT_MAX and it now has a default timeout of 0, which means use the 
        default NSURLRequest timeout, which is 60 seconds.  This is not enough for some slow mobile networks,
        so we want to match behavior of our CFURLConnection code here.

        * platform/network/ResourceRequestBase.cpp:
        Use INT_MAX as the default timeout of requests on iOS.

2016-12-13  Filip Pizlo  <fpizlo@apple.com>

        Make opaque root scanning truly constraint-based
        https://bugs.webkit.org/show_bug.cgi?id=165760

        Reviewed by Saam Barati.

        No new tests yet. I think that writing tests for this is a big investigation:
        https://bugs.webkit.org/show_bug.cgi?id=165808
        
        Remove the previous advancing wavefront DOM write barrier. I don't think this will scale
        very well. It's super confusing.
        
        This change makes it so that visitChildren can become a GC constraint that executes as
        part of the fixpoint. This changes all WebCore visitChildren methods that do opaque
        roots into constraints.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        (WebCore::writeBarrierOpaqueRootSlow): Deleted.
        * bindings/js/CommonVM.h:
        (WebCore::writeBarrierOpaqueRoot): Deleted.
        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitAdditionalChildren):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren):
        * bindings/js/JSIDBCursorCustom.cpp:
        (WebCore::JSIDBCursor::visitAdditionalChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitAdditionalChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitAdditionalChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitAdditionalChildren):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCue::visitAdditionalChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitAdditionalChildren):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::visitAdditionalChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitAdditionalChildren):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitAdditionalChildren):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyChildNodeRemoved):

2016-12-12  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove use of Dictionary in ApplePaySession
        https://bugs.webkit.org/show_bug.cgi?id=165787

        Reviewed by Anders Carlsson.

        First take at generating the bindings for ApplePaySession and removing
        all use of Dictionary.
        
        - Removes all use of Dictionary!
        - Removes use of logging errors to the console with improved Exception messages.
        - Use ExceptionOr extensively to pass exception state.
        
        Still to do:
            - Reconcile / merge ApplePaySession::PaymentRequest with WebCore::PaymentRequest
              and all the sub-objects held within.
            - Remove PaymentRequestValidator entirely, merging validation into the validation
              we already do in ApplePaySession.cpp
            - Make ApplePayEvents use generated dictionary creation code.

        Test: http/tests/ssl/applepay/ApplePaySession.html

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::canCallApplePaySessionAPIs):
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::ApplePaySession):
        (WebCore::ApplePaySession::supportsVersion):
        (WebCore::ApplePaySession::canMakePayments):
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard):
        (WebCore::ApplePaySession::openPaymentSetup):
        (WebCore::ApplePaySession::begin):
        (WebCore::ApplePaySession::completeMerchantValidation):
        (WebCore::ApplePaySession::completeShippingMethodSelection):
        (WebCore::ApplePaySession::completeShippingContactSelection):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        (WebCore::ApplePaySession::didSelectShippingMethod):
        (WebCore::createContactFields): Deleted.
        (WebCore::toLineItemType): Deleted.
        (WebCore::isValidLineItemPropertyName): Deleted.
        (WebCore::createLineItem): Deleted.
        (WebCore::createLineItems): Deleted.
        (WebCore::createMerchantCapabilities): Deleted.
        (WebCore::createSupportedNetworks): Deleted.
        (WebCore::toShippingType): Deleted.
        (WebCore::isValidShippingMethodPropertyName): Deleted.
        (WebCore::createShippingMethod): Deleted.
        (WebCore::createShippingMethods): Deleted.
        (WebCore::isValidPaymentRequestPropertyName): Deleted.
        (WebCore::createPaymentRequest): Deleted.
        * Modules/applepay/ApplePaySession.h:
        Replace hand written dictionary extraction code with autogenerated code
        and hand written additional validation.

        * Modules/applepay/ApplePaySession.idl:
        Add helper dictionaries and enums.

        * Modules/applepay/PaymentRequestValidator.cpp:
        (WebCore::PaymentRequestValidator::validate):
        (WebCore::PaymentRequestValidator::validateTotal):
        (WebCore::validateCountryCode):
        (WebCore::validateCurrencyCode):
        (WebCore::validateMerchantCapabilities):
        (WebCore::validateSupportedNetworks):
        (WebCore::validateShippingMethod):
        (WebCore::validateShippingMethods):
        (WebCore::PaymentRequestValidator::PaymentRequestValidator): Deleted.
        (WebCore::PaymentRequestValidator::~PaymentRequestValidator): Deleted.
        (WebCore::PaymentRequestValidator::validateCountryCode): Deleted.
        (WebCore::PaymentRequestValidator::validateCurrencyCode): Deleted.
        (WebCore::PaymentRequestValidator::validateMerchantCapabilities): Deleted.
        (WebCore::PaymentRequestValidator::validateShippingMethod): Deleted.
        (WebCore::PaymentRequestValidator::validateSupportedNetworks): Deleted.
        (WebCore::PaymentRequestValidator::validateShippingMethods): Deleted.
        * Modules/applepay/PaymentRequestValidator.h:
        Instead of reporting the validation errors to the console, pass them in the exception.
        This allows us to remove the window member, and move the helpers to the implementation
        file as statics.

        * WebCore.xcodeproj/project.pbxproj:
        Remove file.

        * bindings/generic/IDLTypes.h:
        (WebCore::IDLObject::nullValue):
        (WebCore::IDLObject::isNullValue):
        (WebCore::IDLObject::extractValueFromNullable):
        Add nullability traits for IDLObject.
        
        * bindings/js/JSApplePaySessionCustom.cpp:
        Removed.

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

        CSP: Teach the preload scanner about the 'nonce' attribute
        https://bugs.webkit.org/show_bug.cgi?id=161192
        <rdar://problem/28010354>

        Reviewed by Darin Adler.

        This patch was inspired by a similar Blink change:
        <https://chromium.googlesource.com/chromium/src/+/dde5487f380cf774e4c0e96ba7f88ea68e723907>

        Preload external scripts and stylesheets whose HTML script and link elements have a nonce
        attribute that is listed in the Content Security Policy (CSP) of the page.

        Currently the preload scanner ignores the nonce attribute on HTML script and link elements.
        So, WebKit does not preload their associated subresources unless the value of the src
        attribute or href attribute is whitelisted in the CSP of the page for script and link
        elements, respectively. Instead the preload scanner should recognize the nonce attribute on
        script and link elements and query the CSP of the page with it. If the nonce attribute is
        whitelisted then the request should be preloaded.

        Tests: http/tests/loading/do-not-preload-css-blocked-by-csp.html
               http/tests/loading/do-not-preload-script-src-blocked-by-csp.html
               http/tests/loading/preload-css-with-csp-nonce.html
               http/tests/loading/preload-script-src-with-csp-nonce.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest): Set the nonce on the
        PreloadRequest to the nonce that we found during the scan.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): For script and link tag names,
        save the value of the nonce attribute (if it has one).
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest): Skip CSP policy check if the nonce is listed in
        the CSP of the page.
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::setNonce): Added.

2016-12-13  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Rename CSSPrimitiveValue::UnitTypes to CSSPrimitiveValue::UnitType
        https://bugs.webkit.org/show_bug.cgi?id=165776

        Reviewed by Zalan Bujtas.

        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::hasDoubleValue):
        (WebCore::determineCategory):
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        * css/CSSCalculationValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::unitCategory):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble):
        (WebCore::CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor):
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::doubleValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::doubleValueInternal):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontRelativeLength):
        (WebCore::CSSPrimitiveValue::isLength):
        (WebCore::CSSPrimitiveValue::isResolution):
        (WebCore::CSSPrimitiveValue::createAllowingMarginQuirk):
        * css/CSSValue.h:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createValue):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue):
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithValidDensity):
        (WebCore::MediaQueryExpression::MediaQueryExpression):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseSimpleLength):
        (WebCore::parseSimpleLengthValue):
        (WebCore::parseColorIntOrPercentage):
        (WebCore::fastParseColorInternal):
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseTransformNumberArguments):
        * css/parser/CSSParserToken.cpp:
        (WebCore::cssPrimitiveValueUnitFromTrie):
        (WebCore::stringToUnitType):
        (WebCore::CSSParserToken::CSSParserToken):
        (WebCore::CSSParserToken::convertToPercentage):
        * css/parser/CSSParserToken.h:
        (WebCore::CSSParserToken::unitType):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):
        (WebCore::consumeCounter):
        (WebCore::consumeAnimationName):
        (WebCore::consumePerspective):
        (WebCore::consumePositionLonghand):
        (WebCore::consumeCounterContent):
        (WebCore::consumeReflect):
        (WebCore::consumeGridBreadth):
        (WebCore::CSSPropertyParser::consumeFlex):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
        (WebCore::CSSPropertyParserHelpers::consumeString):
        (WebCore::CSSPropertyParserHelpers::consumeUrl):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientPoint):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):
        (WebCore::CSSPropertyParserHelpers::consumeImageSet):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::readFeatureValue):
        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::computeLength):
        * css/parser/SizesAttributeParser.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addPropertyToPresentationAttributeStyle):
        * dom/StyledElement.h:
        * svg/SVGLengthValue.cpp:
        (WebCore::SVGLengthValue::toCSSPrimitiveValue):

2016-12-13  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Youenn Fablet.

        No new tests, fixes an API test.

        * page/Settings.in: Delete mediaStreamEnabled and peerConnectionEnabled, we don't need a
        setting and a runtime feature.

2016-12-13  Antti Koivisto  <antti@apple.com>

        REGRESSION (r198990): Cannot edit content inside <details> in wysiwyg editor
        https://bugs.webkit.org/show_bug.cgi?id=165757

        Reviewed by Andreas Kling.

        Test: fast/html/details-edit.html

        -webkit-user-modify is reset on shadow boundary so it doesn't go through <details> shadow tree.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle):
        (WebCore::Node::computeEditability):

            Make -webkit-user-modify (which we would want to get rid of completely eventually) have no effect in shadow trees.
            Check for contenteditable directly instead.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createInnerTextStyle):
        * html/shadow/TextControlInnerElements.cpp:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::createFlowThreadStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
        (WebCore::RenderStyle::createStyleInheritingFromPseudoStyle):
        (WebCore::RenderStyle::inheritFrom):

            Let -webkit-user-modify inherit through shadow boundary as normal.

        * rendering/style/RenderStyle.h:

2016-12-12  Darin Adler  <darin@apple.com>

        Remove bindings generation support for legacy WebCore::Dictionary
        https://bugs.webkit.org/show_bug.cgi?id=165762

        Reviewed by Sam Weinig.

        After this patch, all use of legacy WebCore::Dictionary is within custom bindings or
        inside the DOM code itself. Bindings generation machinery no longer has a special
        type named "Dictionary" but has increasingly good support for IDL-defined dictionaries.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create): Take ExecState and a JSValue rather than a Dictionary.
        (WebCore::ApplePaySession::completeMerchantValidation): Ditto.
        * Modules/applepay/ApplePaySession.h: Updated for the above changes.
        * Modules/applepay/ApplePaySession.idl: For this last file using Dictionary in IDL, move
        to "[CallWith=ScriptState]" and "any" as a stopgap. Later we can return and use IDL
        dictionaries or other more modern solutions.

        * Modules/mediastream/MediaDevices.idl: For the custom binding written in JavaScript,
        use the type mentioned in the specification rather than Dictionary. The bindings generator
        ignores the type, so this is more like changing a comment rather than changing source code.

        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection): Refer to a non-object as not a valid "dictionary", lowercase
        rather than "Dictionary".
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        (callbacksAndDictionaryOverload): Ditto.

        * bindings/generic/IDLTypes.h: Removed IDLLegacyDictionary.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getHashAlgorithm): Fixed a comment.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLLegacyDictionary<T>>::convert): Deleted.

        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType): Removed special case for "Dictionary".
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType): Ditto.
        (AreTypesDistinguishableForOverloadResolution): Ditto.
        (GenerateOverloadedFunctionOrConstructor): Ditto.
        (GenerateParametersCheck): Ditto.
        (GetBaseIDLType): Ditto.

        * bindings/scripts/test/JS/JSTestObj.cpp: Regenerated results.
        * bindings/scripts/test/TestObj.idl: Removed test case for Dictionary.

2016-12-12  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary null check in removeDetachedChildrenInContainer()
        https://bugs.webkit.org/show_bug.cgi?id=165778

        Reviewed by Alex Christensen.

        Drop unnecessary null check in removeDetachedChildrenInContainer().
        Node cannot be null but we do an implicit null check.

        No new tests, no Web-exposed behavior change.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::removeDetachedChildrenInContainer):

2016-12-12  Chris Dumez  <cdumez@apple.com>

        Add Document.onvisibilitychange event handler attribute
        https://bugs.webkit.org/show_bug.cgi?id=165784

        Reviewed by Daniel Bates.

        Add Document.onvisibilitychange event handler attribute as per Page
        Visibility Level 2 API:
        - http://w3c.github.io/page-visibility/#onvisiblitychange-event-handler

        Test: fast/events/page-visibility-onvisibilitychange.html

        * dom/Document.idl:

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

        [iOS] MediaDocument "Done" button should navigate the page back
        https://bugs.webkit.org/show_bug.cgi?id=165779

        Reviewed by Sam Weinig.

        Detect if the exit from fullscreen was caused by the Done button,
        and if so, tell the page to navigate back.

        Unfortunately this is not yet testable. It's waiting on the
        UI-based device testing in development by the media team.

        * platform/cocoa/WebVideoFullscreenModel.h: Add a finishedWithMedia parameter to
        requestFullscreenMode, to indicate if the change in mode is associated with
        the closing of the media document.
        * platform/cocoa/WebVideoFullscreenModelVideoElement.h:
        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::requestFullscreenMode): If we're a media
        document, and we say we're finished with the media, tell the document
        to navigate back a page.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::requestFullscreenMode):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):

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

        Infinite recursion when viewport is set to the size of the content but the content overflows the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=165775
        rdar://problem/29366628

        Reviewed by Simon Fraser.

        In certain cases when the viewport is sized to accomodate the content and
        the content always overflows the viewport, we might end up in recursive FrameView::layout calls.
        This is specific to content with viewport units, because we always invalidate elements with vw/vh units on
        viewport size change. However if this viewport size change is in response to content size change (layout), 
        invalidating elements could trigger synchronous layout, while we are still inside this current layout.
        This is very similar to the m_setNeedsLayoutWasDeferred case and they should eventually be merged.
        It also means that we might be behind by one layout on elements with vw/vh units (fixed layout only though).

        Currently not testable.

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

2016-12-12  Keith Rollin  <krollin@apple.com>

        Memory warning logging appears to capture resident footprint, missing compress/swap.
        https://bugs.webkit.org/show_bug.cgi?id=165533
        <rdar://problem/29318410>

        Reviewed by Andreas Kling.

        Have platformMemoryUsage return both resident and resident + swapped
        values. This is now returned as a struct in a std::optional to better
        support cases where values cannot or are not returned. Report these
        values in logMemoryUsageChange.

        Remove most of the ReliefLogger instances and their messages. We no
        longer free up fastMalloc memory after each memory-release operation,
        so there are no memory regions returned to the OS. Instead, we now
        free up fastMalloc memory regions at the end of all memory-releasing
        operations in one fell swoop and report a grand total of memory
        returned.

        No new tests -- no changes to user accessible functionality.

        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
        (WebCore::MemoryPressureHandler::ReliefLogger::logMemoryUsageChange):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::~ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::loggingEnabled):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        * platform/linux/MemoryPressureHandlerLinux.cpp:
        * platform/win/MemoryPressureHandlerWin.cpp:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2016-12-12  Chris Dumez  <cdumez@apple.com>

        Document.visibilityState should use an IDL string enumeration
        https://bugs.webkit.org/show_bug.cgi?id=165774

        Reviewed by Daniel Bates.

        Document.visibilityState should use an IDL string enumeration:
        - http://w3c.github.io/page-visibility/#extensions-to-the-document-interface

        No new tests, there should be no Web-exposed behavior change.

        * CMakeLists.txt:
        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::hidden):
        (WebCore::Document::pageVisibilityState): Deleted.
        (WebCore::Document::visibilityState): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * page/Page.cpp:
        (WebCore::Page::visibilityState):
        * page/PageVisibilityState.cpp: Removed.
        * page/PageVisibilityState.h:
        (): Deleted.

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

        Remove implementation of legacy Mozilla-based Fullscreen API.
        https://bugs.webkit.org/show_bug.cgi?id=165689

        Reviewed by Eric Carlson.

        Alias the legacy webkitRequestFull_S_creen() function on Element to webkitRequestFull_s_creen().
        Remove the custom behavior in Document::requestFullScreenForElement() to handle the legacy path.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullscreen):
        (WebCore::Element::webkitRequestFullScreen): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):

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

        The CSS 'columns' property when set on the <body> element makes short columns
        https://bugs.webkit.org/show_bug.cgi?id=164891

        Reviewed by Darin Adler and David Hyatt.

        Currently when the body has auto height, we use the height of the viewport as
        the available height for the columns defined on the body element.
        This is the desired behaviour for paginated content.
        However in case of a simple, non-paginated multicolumn context, we should let the columns grow beyond
        the viewport vertically. This is also what other browsers do.
        This patch sets the available height on columns (in non-paginated context) only if the logical height
        is defined (we are right before layout, so applying non-defined values does not make much sense anyway).
        The reason why it is only broken on the <body> is because it stretches to the viewport by
        default (see stretchesToViewport()) while other block renderers do not.

        Test: fast/multicol/columns-on-body.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):

2016-12-09  Dean Jackson  <dino@apple.com>

        Autoplay isn't working in iPhone MediaDocuments
        https://bugs.webkit.org/show_bug.cgi?id=165710
        <rdar://problems/29606761>

        Reviewed by Darin Adler.

        Our silent video autoplay detection disabled autoplay
        of videos in MediaDocuments.

        Test: media/ios/autoplay-only-in-main-document.html

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        Return true if we're in a top-level media document.

2016-12-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing build breakage in GStreamer's WebKitCommonEncryptionDecryptorGStreamer.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace):
        WTF::Seconds should be used instead of std::chrono::seconds.

2016-12-11  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r200283): Transform, overflow hidden and filter combination completely hides the element
        https://bugs.webkit.org/show_bug.cgi?id=161509

        Reviewed by David Hyatt.
        
        When the filter painting code needs to recompute a paintDirtyRect, it was using selfClipRect() 
        which is obviously wrong because it returns a rect in absolute coordinates. Use code factored
        out of localClipRect() instead, which returns a rect relative to the painting root.

        Test: css3/filters/filter-on-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2016-12-11  Saam Barati  <sbarati@apple.com>

        We should be able to throw exceptions from Wasm code and when Wasm frames are on the stack
        https://bugs.webkit.org/show_bug.cgi?id=165429

        Reviewed by Keith Miller.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::GetCallerGlobalObjectFunctor::operator()):

2016-12-11  Darin Adler  <darin@apple.com>

        Remove uses of Dictionary in WebRTC IDL files
        https://bugs.webkit.org/show_bug.cgi?id=165736

        Reviewed by Sam Weinig.

        Also removed quite a bit of unused code. There were some mocks that were out of date and
        no longer matched the types used in the real code, that also were no longer hooked up,
        and other types of dead code. We will have to implement anew when we want to restore tests
        like the ones these were intended to enable.

        * CMakeLists.txt: Updated for all the removed files.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp: Moved some types in here
        that don't need to be in the header.
        (WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection): Use make_unique.
        (WebCore::MediaEndpointPeerConnection::setConfiguration): Changed argument type,
        obviating the need for most of the code that was here.
        * Modules/mediastream/MediaEndpointPeerConnection.h: Updated for the above. Made more
        things private and final. Marked the constructor explicit. Removed unneeded includes.

        * Modules/mediastream/PeerConnectionBackend.h: Removed unneeded includes and forward
        declarations. Changed the argument type for setConfiguration (see above).

        * Modules/mediastream/RTCConfiguration.cpp: Removed.
        None of the code here was needed except for the ICE server validation, and that was
        moved into RTCPeerConnection::setConfiguration.
        * Modules/mediastream/RTCConfiguration.h: Changed this from a class to a struct since
        this is now a dictionary rather than an interface.
        * Modules/mediastream/RTCConfiguration.idl: Changed this from an interface to a dictionary.

        * Modules/mediastream/RTCDTMFSender.cpp: Removed some of the code from this file. This
        class currently isn't implemented, but was depending on RTCPeerConnectionHandler. I removed
        some of the dead code. Someone will have to straighten this out so we can turn it back on.
        * Modules/mediastream/RTCDTMFSender.h: Ditto.

        * Modules/mediastream/RTCDataChannel.cpp: Updated includes.

        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create): Removed most of the code, since this now takes
        a structure rather than a WebCore::Dictionary, and so the bindings take care of the work.
        * Modules/mediastream/RTCIceCandidate.h: Updated for the above.
        * Modules/mediastream/RTCIceCandidate.idl: Changed the constructor to take a
        RTCIceCandidateInit instead of a Dictionary.

        * Modules/mediastream/RTCIceServer.h: Changed this from a class to a struct since
        this is now a dictionary rather than an interface.
        * Modules/mediastream/RTCIceServer.idl: Changed this from an interface to a dictionary.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::initializeWith): Take an RTCConfiguration rather than
        a Dictionary.
        (WebCore::RTCPeerConnection::getConfiguration): Moved to header, now an inline.
        (WebCore::RTCPeerConnection::setConfiguration): Use the configuration dictionary now instead
        of the configuration class. Also moved validation of server URLs here, formerly in the
        RTCConfiguration RTCConfiguration::initialize function. Also moved code to convert from
        RTCConfiguration to MediaEndpointConfiguration here, formerly in
        MediaEndpointPeerConnection::setConfiguration.
        * Modules/mediastream/RTCPeerConnection.h: Updated for the above.
        * Modules/mediastream/RTCPeerConnection.idl: Changed argument to initializeWith and
        setConfiguration from Dictionary to RTCConfiguration.

        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::parseTypeString): Deleted.
        (WebCore::RTCSessionDescription::create): Changed to take struct instead of Dictionary.
        * Modules/mediastream/RTCSessionDescription.h: Added Init struct and changed create to
        take it.
        * Modules/mediastream/RTCSessionDescription.idl: Changed constructor argument to take
        RTCSessionDescriptionInit dictionary instead of Dictionary.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: Updated includes.

        * WebCore.xcodeproj/project.pbxproj: Updated for all the removed files.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent): Fixed convertDictionaryToJS to work with other
        nullable types besides RefPtr.
        * bindings/scripts/test/JS/JSTestObj.cpp: Regenerated.

        * platform/mediastream/RTCConfigurationPrivate.h: Removed.
        * platform/mediastream/RTCIceServerPrivate.h: Removed.
        * platform/mediastream/RTCPeerConnectionHandler.cpp: Removed.
        * platform/mediastream/RTCPeerConnectionHandler.h: Removed.
        * platform/mock/RTCDTMFSenderHandlerMock.cpp: Removed.
        * platform/mock/RTCDTMFSenderHandlerMock.h: Removed.

        * platform/mock/RTCDataChannelHandlerMock.h: Updated includes, made more things private and final.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp: Removed.
        * platform/mock/RTCPeerConnectionHandlerMock.h: Removed.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Removed call to enableMockRTCPeerConnectionHandler.
        (WebCore::Internals::enableMockRTCPeerConnectionHandler): Deleted.

2016-12-11  Darin Adler  <darin@apple.com>

        Use std::vsnprintf instead of vasprintf
        https://bugs.webkit.org/show_bug.cgi?id=165740

        Reviewed by Sam Weinig.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::printf): Use vsnprintf, including StringExtras.h to
        ensure compatibility with older versions of the Visual Studio library,
        and Vector for the buffer. Use inline capacity in the vector so we normally
        don't need to allocate any memory on the heap.
        * xml/XSLTUnicodeSort.cpp:
        (xsltTransformErrorTrampoline): Ditto.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error): Ditto.

2016-12-11  Darin Adler  <darin@apple.com>

        Make some refinements to HTMLPlugInImageElement
        https://bugs.webkit.org/show_bug.cgi?id=165742

        Reviewed by Sam Weinig.

        * html/HTMLPlugInImageElement.cpp: Removed many unneeded includes.
        (WebCore::titleText): Use HashMap::ensure, correct argument types.
        (WebCore::subtitleText): Ditto.
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Moved
        initialization of most scalars to the class definition.
        (WebCore::HTMLPlugInImageElement::isImageType): Use auto.
        (WebCore::HTMLPlugInImageElement::wouldLoadAsPlugIn): Removed
        unneeded local variable and if statement.
        (WebCore::HTMLPlugInImageElement::willDetachRenderers): Use auto.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Do not call
        renderer twice unnecessarily.
        (WebCore::plugInImageElementIsolatedWorld): Use auto.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Use auto.
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay): Use auto.
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns): Got rid of
        unnecessary typedef.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Take a
        reference rather than PassRefPtr.
        (WebCore::documentHadRecentUserGesture): Removed unneeded if.
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting): Use auto.
        (WebCore::isSmallerThanTinySizingThreshold): Use auto.
        (WebCore::HTMLPlugInImageElement::isTopLevelFullPagePlugin): Use auto.
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus): Use auto.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Got rid
        of unnecessary local variable. Use auto.
        (WebCore::HTMLPlugInImageElement::requestObject): Got rid of unnecessary
        local variable.
        * html/HTMLPlugInImageElement.h: Updated for the above. Removed incorrect
        use of const. Initialized all scalars. Made function private and final.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Pass reference instead
        of pointer.

2016-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleanup some InspectorInstrumentation network loading notifications
        https://bugs.webkit.org/show_bug.cgi?id=165688

        Reviewed by Brian Burg.

        Eliminate InspectorInstrumentation::willReceiveResourceResponse by folding
        it into InspectorInstrumentation::didReceiveResourceResponse. Simplify other
        related InspectorInstrumentation calls by using references and using more
        consistent InspectorInstrumentation patterns.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl): Deleted.
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl): Deleted.
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl): Deleted.
        (WebCore::InspectorInstrumentation::continueWithPolicyDownloadImpl): Deleted.
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnoreImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse): Deleted.
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):

2016-12-11  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Protect MediaDevicesRequest during callback
        https://bugs.webkit.org/show_bug.cgi?id=165711
        <rdar://problem/28400468>

        Reviewed by Sam Weinig.

        No new tests, I was unable to create a reproducible test but this fix avoids
        an occasional crash in existing tests.

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::start): Take a reference to the object
        before calling the controller in case the completion handler is called synchronously.

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        The DOM should have an advancing wavefront opaque root barrier
        https://bugs.webkit.org/show_bug.cgi?id=165712

        Reviewed by Yusuke Suzuki.

        No new tests because this was covered by crashing tests.
        
        Consider these two cases:
        
           Removal:
           1) DOM at start: D->X->Y
           2) Mark X, X->visitChildren, addOpaqueRoot(D)
           3) remove X
           4) Y thinks it's not reachable (its opaque root, X, is not in the set).
           
           Insertion:
           1) DOM at start: D, X->Y
           2) Mark X, X->visitChildren, addOpaqueRoot(X)
           3) insert X into D
           4) Y thinks it's not reachable (its opaque root, D, is not in the set).
        
        We can fix this with two barriers:
        
           Removal: add X (the removed child) to the opaque root set.
           Insertion: add D (the insertion point) to the opaque root set.
        
        Thanks Rysosuke for coming up with this idea!
        
        Both barriers advance the wavefront. We could consider retreating wavefront barriers in
        the future (where we cause visitChildren to be called again on wrappers that belonged to
        roots that got affected by insertion/removal) but those would probably require more
        bookkeeping.
        
        To make this barrier very fast, the WebCore caches the JSC VM's barrier state in
        its own global variable for very fast access. This variable will be false most of the
        time. It's false when there is no VM, so triggering the barrier won't cause the VM to be
        created. It's only true when GC is running, which is rare by design.
        
        To make that caching more sensible, I finally gave WebCore a central header for
        the common VM (CommonVM.h).

        * CMakeLists.txt:
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::SDPProcessor::callScript):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CommonVM.cpp: Added.
        (WebCore::commonVMSlow):
        (WebCore::writeBarrierOpaqueRootSlow):
        * bindings/js/CommonVM.h: Added.
        (WebCore::commonVM):
        (WebCore::writeBarrierOpaqueRoot):
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::mainThreadNormalWorld):
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::garbageCollectSoon):
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::garbageCollectNowIfNotDoneRecently):
        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
        (WebCore::GCController::deleteAllCode):
        (WebCore::GCController::deleteAllLinkedCode):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::addImpureProperty):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        (WebCore::JSDOMWindowBase::commonVM): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSNodeCustom.h:
        (WebCore::root):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::createWorld):
        (WebCore::ScriptController::getAllWorlds):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::cacheableBindingRootObject):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::clearScriptObjects):
        * dom/CollectionIndexCache.cpp:
        (WebCore::reportExtraMemoryAllocatedForCollectionIndexCache):
        * dom/ContainerNode.cpp:
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyChildNodeRemoved):
        * dom/Document.cpp:
        (WebCore::Document::shouldBypassMainWorldContentSecurityPolicy):
        * dom/Node.h:
        (WebCore::Node::opaqueRoot):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::vm):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseAfterDetachedTask):
        (WebCore::HTMLMediaElement::ensureIsolatedWorld):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::plugInImageElementIsolatedWorld):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::vm):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::memoryUsageStatistics):
        (WebCore::PerformanceLogging::javaScriptObjectCounts):
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::createThreadIfNeeded):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::reportApproximateMemoryCost):
        * testing/MemoryInfo.h:
        (WebCore::MemoryInfo::MemoryInfo):

2016-12-11  Dan Bernstein  <mitz@apple.com>

        [Cocoa] NSAttributedString representation of text copied from -webkit-nbsp-mode:space element contains non-breaking space characters, but shouldn’t
        https://bugs.webkit.org/show_bug.cgi?id=165515
        <rdar://problem/4108460>

        Reviewed by Darin Adler.

        Test: platform/mac/fast/text/attributed-substring-from-range.html

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processText): Emit a space instead of a non-breaking space if the text node
          is styled with -webkit-nbsp-mode:space.
        (WebCore::editingAttributedStringFromRange): Replace all non-breaking spaces with spaces if
          they come from a text node with -webkit-nbsp-mode:space.

2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, add KHR include dir to fix ANGLE build after r209665
        https://bugs.webkit.org/show_bug.cgi?id=165686

        * CMakeLists.txt:

2016-12-10  Dave Hyatt  <hyatt@apple.com>

        Rolling out 165737, since it broke layout tests. I need to find a 
        different place to put the init.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::isValidSelector):

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

        Support the deprecated dictionary constructor for DOMPointReadOnly and DOMPoint
        https://bugs.webkit.org/show_bug.cgi?id=165732

        Reviewed by Sam Weinig.
        
        For compatibility with other browsers, support the DOMPointInit constructor to
        DOMPoint and DOMPointReadOnly per <https://www.w3.org/TR/geometry-1/#DOMPoint>

        Extended geometry/DOMPoint-001.html to test.

        * dom/DOMPoint.h:
        * dom/DOMPoint.idl:
        * dom/DOMPointReadOnly.h:
        (WebCore::DOMPointReadOnly::create):
        * dom/DOMPointReadOnly.idl:

2016-12-10  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure content extensions initialize AtomicString
        https://bugs.webkit.org/show_bug.cgi?id=165737

        Reviewed by Simon Fraser.

        Fixes two broken tests in TestWebkitAPI.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::isValidSelector):

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

        Animation followed by transition doesn't always fire transitionend event
        https://bugs.webkit.org/show_bug.cgi?id=165731
        rdar://problem/28471240

        Reviewed by Zalan Bujtas.
        
        After r200047, a keyframe animation of an accelerated property followed by a
        transition didn't always fire a transitionend event.
        
        This happened if CompositeAnimation::timeToNextService() happend to be called
        when the transitions's timeToNextService() returned a positive value, but the
        keyframe animation still existed, but its timeToNextService() returned -1. In
        this case that -1 would clobber the positing minT.

        Fix by just continuing in each loop when the timeToNextService() returns -1.

        This code should probably be rewritten to use std::optional<double> rather than
        magic values.

        Test: animations/animation-followed-by-transition.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::timeToNextService):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::pauseAnimation):
        (WebCore::GraphicsLayerCA::removeAnimation):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationEnded):

2016-12-10  Sam Weinig  <sam@webkit.org>

        [WebIDL] Merge JSDictionary into Dictionary, and remove unused bits
        https://bugs.webkit.org/show_bug.cgi?id=165641

        Reviewed by Dan Bernstein.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Remove JSDictionary.h/cpp

        * Modules/mediastream/RTCDataChannel.cpp:
        Remove unused #include of Dictionary.h

        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        Replace unnecessary #include of Dictionary in a header with forward declaration.

        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::Dictionary):
        (WebCore::Dictionary::tryGetProperty):
        (WebCore::Dictionary::getOwnPropertyNames):
        (WebCore::Dictionary::convertValue):
        (WebCore::Dictionary::asJSObject<Notification>): Deleted.
        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap): Deleted.
        (WebCore::Dictionary::getWithUndefinedOrNullCheck): Deleted.
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::isObject):
        (WebCore::Dictionary::isUndefinedOrNull):
        (WebCore::Dictionary::execState):
        (WebCore::Dictionary::initializerObject):
        (WebCore::Dictionary::isValid):
        (WebCore::Dictionary::convertValue):
        (WebCore::Dictionary::get):
        (WebCore::Dictionary::tryGetPropertyAndResult):
        (WebCore::Dictionary::getEventListener): Deleted.
        Merge JSDictionary into Dictionary. Remove all unused functions (some getters, lots
        of convertValue overrides). Modernize to taste.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        (WebCore::getHashAlgorithm):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::createRsaKeyGenParams):
        (WebCore::createRsaOaepParams):
        (WebCore::createRsaSsaParams):
        Update for rename. JSDictionary is now Dictionary.

        * bindings/js/JSDictionary.cpp: Removed.
        * bindings/js/JSDictionary.h: Removed.

        * dom/MutationObserver.cpp:
        Remove unused #include of Dictionary.h

2016-12-10  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Move CSSParserValues.h/.cpp to CSSParserSelector.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=165730

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCustomPropertyValue.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSSelectorList.cpp:
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/parser/CSSParserImpl.cpp:
        * css/parser/CSSParserSelector.cpp: Copied from Source/WebCore/css/parser/CSSParserValues.cpp.
        * css/parser/CSSParserSelector.h: Copied from Source/WebCore/css/parser/CSSParserValues.h.
        * css/parser/CSSParserValues.cpp: Removed.
        * css/parser/CSSParserValues.h: Removed.
        * css/parser/CSSSelectorParser.h:

2016-12-10  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Remove the pseudoclass/element hacks
        https://bugs.webkit.org/show_bug.cgi?id=165729

        Reviewed by Sam Weinig.

        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/SelectorPseudoElementTypeMap.in:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

2016-12-09  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=165625

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add/remove files.

        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::GeoNotifier):
        (WebCore::GeoNotifier::hasZeroTimeout):
        (WebCore::GeoNotifier::startTimerIfNeeded):
        * Modules/geolocation/GeoNotifier.h:
        (WebCore::GeoNotifier::create):
        (WebCore::GeoNotifier::options):
        Update to store PositionOptions as a value, and pass the PositionCallback
        as a Ref, rather than a RefPtr, since it is not optional.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeoposition):
        Use auto, to get the good type for Coordinates (Ref).

        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        (WebCore::Geolocation::startUpdating):
        * Modules/geolocation/Geolocation.h:
        Update to pass PositionOptions itself now that it is a plain struct.

        * Modules/geolocation/Geolocation.idl:
        Remove [Custom] extended attribute and add FIXME about nullable annotation. 

        * Modules/geolocation/Geoposition.h:
        Pass/store Coordinates as a Ref.
 
        * Modules/geolocation/PositionOptions.h:
        Convert to be a simple struct.

        * Modules/geolocation/PositionOptions.idl:
        Added.
        
        * bindings/js/JSGeolocationCustom.cpp:
        Removed.

2016-12-09  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Remove the old CSS Parser
        https://bugs.webkit.org/show_bug.cgi?id=165645

        Reviewed by Daniel Bates.

        Remove the old CSS parser code. In doing so, code that used documentless
        CSSParserContexts is now going through the new parser. This resulted in
        some additional changes. These include:

        (1) Canvas color parsing switched to new parser's code. This resulted in
        progressions on canvas tests.

        (2) Support for CSSNamespaceRule in the CSS OM, since the Inspector's
        creation of CSS OM wrappers made it necessary to add this in. The old parser
        did not create style rules for namespaces, but the new one (and other browsers)
        did.

        (3) <font face="X"> now uses the new parser's font-family parsing code. This
        change was made in createFontFaceValue in CSSValuePool.

        (4) FontFace now uses a new function on the new parser called
        parseFontFaceDescriptor. This function sets things up so that parsing occurs
        as though you are inside a @font-face. The old parser let you call parseValue
        to parse "properties", but descriptors need to be handled differently in the
        new parser.

        (5) Illegal CSS rules in mediaControlsApple/ios.css forced me to add a quirk
        to handle chained shadow DOM pseudo-elements. This should not be allowed, but
        for now it is.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::hasDoubleValue):
        (WebCore::checkDepthAndIndexDeprecated): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseCalc): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::operatorValue): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseValue): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseValueTerm): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseValueMultiplicativeExpression): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseAdditiveValueExpression): Deleted.
        (WebCore::CSSCalcExpressionNodeParserDeprecated::parseValueExpression): Deleted.
        * css/CSSCalculationValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackSize):
        * css/CSSCustomPropertyValue.cpp:
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles):
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences):
        * css/CSSCustomPropertyValue.h:
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::CSSFunctionValue):
        (WebCore::CSSFunctionValue::customCSSText):
        (WebCore::CSSFunctionValue::append):
        (WebCore::CSSFunctionValue::buildParserValueSubstitutingVariables): Deleted.
        * css/CSSFunctionValue.h:
        * css/CSSGrammar.y.in: Removed.
        * css/CSSGrammar.y.includes: Removed.
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::insertRule):
        * css/CSSKeyframeRule.h:
        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::appendRule):
        * css/CSSNamespaceRule.cpp: Added.
        (WebCore::CSSNamespaceRule::CSSNamespaceRule):
        (WebCore::CSSNamespaceRule::~CSSNamespaceRule):
        (WebCore::CSSNamespaceRule::namespaceURI):
        (WebCore::CSSNamespaceRule::prefix):
        (WebCore::CSSNamespaceRule::cssText):
        (WebCore::CSSNamespaceRule::reattach):
        * css/CSSNamespaceRule.h: Added.
        * css/CSSNamespaceRule.idl: Added.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::isStringType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        (WebCore::CSSPrimitiveValue::buildParserValue): Deleted.
        * css/CSSPrimitiveValue.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCustomPropertyValue):
        (WebCore::CSSValue::hasVariableReferences):
        (WebCore::CSSValue::isVariableDependentValue): Deleted.
        (WebCore::CSSValue::isVariableValue): Deleted.
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::customCSSText):
        (WebCore::CSSValueList::containsVariables): Deleted.
        (WebCore::CSSValueList::checkVariablesForCycles): Deleted.
        (WebCore::CSSValueList::buildParserValueSubstitutingVariables): Deleted.
        (WebCore::CSSValueList::buildParserValueListSubstitutingVariables): Deleted.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::createSlashSeparated):
        (WebCore::CSSValueList::createFromParserValueList): Deleted.
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFaceValue):
        * css/CSSVariableData.cpp:
        * css/CSSVariableDependentValue.cpp: Removed.
        * css/CSSVariableDependentValue.h: Removed.
        * css/CSSVariableValue.cpp: Removed.
        * css/CSSVariableValue.h: Removed.
        * css/DOMCSSNamespace.cpp:
        * css/FontFace.cpp:
        (WebCore::FontFace::parseString):
        * css/InspectorCSSOMWrappers.cpp:
        * css/MediaQueryExp.cpp:
        (WebCore::isFeatureValidWithIdentifier): Deleted.
        (WebCore::isFeatureValidWithNonNegativeLengthOrNumber): Deleted.
        (WebCore::isFeatureValidWithDensity): Deleted.
        (WebCore::isFeatureValidWithNonNegativeInteger): Deleted.
        (WebCore::isFeatureValidWithNonNegativeNumber): Deleted.
        (WebCore::isFeatureValidWithZeroOrOne): Deleted.
        (WebCore::isFeatureValidWithNumberWithUnit): Deleted.
        (WebCore::isFeatureValidWithNumber): Deleted.
        (WebCore::isSlash): Deleted.
        (WebCore::isPositiveIntegerValue): Deleted.
        * css/MediaQueryExp.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        * css/SelectorPseudoTypeMap.h:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::getPropertyCSSValue):
        (WebCore::MutableStyleProperties::setCustomProperty):
        (WebCore::MutableStyleProperties::parseDeclaration):
        (WebCore::StyleProperties::asText):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        (WebCore::StyleSheetContents::completeURL):
        (WebCore::StyleSheetContents::parseStringAtPosition): Deleted.
        * css/StyleSheetContents.h:
        * css/WebKitCSSMatrix.cpp:
        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseSystemColor):
        (WebCore::CSSParser::parseSingleValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseCustomPropertyValue):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseValueWithVariableReferences):
        (WebCore::CSSParser::parseKeyframeKeyList):
        (WebCore::CSSParser::parseFontFaceDescriptor):
        (WebCore::equalLettersIgnoringASCIICase): Deleted.
        (WebCore::hasPrefix): Deleted.
        (WebCore::createPrimitiveValuePair): Deleted.
        (WebCore::AnimationParseContext::commitFirstAnimation): Deleted.
        (WebCore::AnimationParseContext::hasCommittedFirstAnimation): Deleted.
        (WebCore::AnimationParseContext::commitAnimationPropertyKeyword): Deleted.
        (WebCore::AnimationParseContext::animationPropertyKeywordAllowed): Deleted.
        (WebCore::AnimationParseContext::hasSeenAnimationPropertyKeyword): Deleted.
        (WebCore::AnimationParseContext::sawAnimationPropertyKeyword): Deleted.
        (): Deleted.
        (WebCore::convertToASCIILowercaseInPlace): Deleted.
        (WebCore::CSSParserString::convertToASCIILowercaseInPlace): Deleted.
        (WebCore::CSSParser::setupParser): Deleted.
        (WebCore::isColorPropertyID): Deleted.
        (WebCore::CSSParser::isValidSystemColorValue): Deleted.
        (WebCore::validPrimitiveValueColor): Deleted.
        (WebCore::parseColorValue): Deleted.
        (WebCore::isSimpleLengthPropertyID): Deleted.
        (WebCore::parseSimpleLength): Deleted.
        (WebCore::parseSimpleLengthValue): Deleted.
        (WebCore::isValidKeywordPropertyAndValue): Deleted.
        (WebCore::isUniversalKeyword): Deleted.
        (WebCore::isKeywordPropertyID): Deleted.
        (WebCore::parseKeywordValue): Deleted.
        (WebCore::parseTransformTranslateArguments): Deleted.
        (WebCore::parseTranslateTransformValue): Deleted.
        (WebCore::CSSParser::parseFontFaceValue): Deleted.
        (WebCore::CSSParser::parseColorFromString): Deleted.
        (WebCore::CSSParser::parseDeclarationDeprecated): Deleted.
        (WebCore::filterProperties): Deleted.
        (WebCore::CSSParser::createStyleProperties): Deleted.
        (WebCore::CSSParser::addProperty): Deleted.
        (WebCore::CSSParser::rollbackLastProperties): Deleted.
        (WebCore::CSSParser::clearProperties): Deleted.
        (WebCore::CSSParser::completeURL): Deleted.
        (WebCore::CSSParser::validateCalculationUnit): Deleted.
        (WebCore::CSSParser::shouldAcceptUnitLessValues): Deleted.
        (WebCore::CSSParser::validateUnit): Deleted.
        (WebCore::CSSParser::createPrimitiveNumericValue): Deleted.
        (WebCore::CSSParser::createPrimitiveStringValue): Deleted.
        (WebCore::isComma): Deleted.
        (WebCore::isForwardSlashOperator): Deleted.
        (WebCore::CSSParser::isValidSize): Deleted.
        (WebCore::CSSParser::parseValidPrimitive): Deleted.
        (WebCore::CSSParser::addExpandedPropertyForValue): Deleted.
        (WebCore::isImageSetFunctionValue): Deleted.
        (WebCore::CSSParser::addFillValue): Deleted.
        (WebCore::isContentDistributionKeyword): Deleted.
        (WebCore::isContentPositionKeyword): Deleted.
        (WebCore::isBaselinePositionKeyword): Deleted.
        (WebCore::isAlignmentOverflowKeyword): Deleted.
        (WebCore::isItemPositionKeyword): Deleted.
        (WebCore::CSSParser::parseLegacyPosition): Deleted.
        (WebCore::CSSParser::parseContentDistributionOverflowPosition): Deleted.
        (WebCore::CSSParser::parseItemPositionOverflowPosition): Deleted.
        (WebCore::parseBackgroundClip): Deleted.
        (WebCore::CSSParser::useLegacyBackgroundSizeShorthandBehavior): Deleted.
        (WebCore::CSSParser::parseNonElementSnapPoints): Deleted.
        (WebCore::CSSParser::parseScrollSnapPositions): Deleted.
        (WebCore::CSSParser::parseScrollSnapDestination): Deleted.
        (WebCore::CSSParser::parseScrollSnapCoordinate): Deleted.
        (WebCore::CSSParser::parseFillShorthand): Deleted.
        (WebCore::CSSParser::addAnimationValue): Deleted.
        (WebCore::CSSParser::parseAnimationShorthand): Deleted.
        (WebCore::CSSParser::parseColumnWidth): Deleted.
        (WebCore::CSSParser::parseColumnCount): Deleted.
        (WebCore::CSSParser::parseColumnsShorthand): Deleted.
        (WebCore::CSSParser::parseTransitionShorthand): Deleted.
        (WebCore::CSSParser::parseShorthand): Deleted.
        (WebCore::CSSParser::parse4Values): Deleted.
        (WebCore::CSSParser::parsePage): Deleted.
        (WebCore::CSSParser::parseSize): Deleted.
        (WebCore::CSSParser::parseSizeParameter): Deleted.
        (WebCore::CSSParser::parseQuotes): Deleted.
        (WebCore::CSSParser::parseAlt): Deleted.
        (WebCore::CSSParser::parseCustomPropertyDeclaration): Deleted.
        (WebCore::CSSParser::parseContent): Deleted.
        (WebCore::CSSParser::parseAttr): Deleted.
        (WebCore::CSSParser::parseBackgroundColor): Deleted.
        (WebCore::CSSParser::parseFillImage): Deleted.
        (WebCore::CSSParser::parsePositionX): Deleted.
        (WebCore::CSSParser::parsePositionY): Deleted.
        (WebCore::CSSParser::parseFillPositionComponent): Deleted.
        (WebCore::isValueConflictingWithCurrentEdge): Deleted.
        (WebCore::isFillPositionKeyword): Deleted.
        (WebCore::CSSParser::parse4ValuesFillPosition): Deleted.
        (WebCore::CSSParser::parse3ValuesFillPosition): Deleted.
        (WebCore::CSSParser::isPotentialPositionValue): Deleted.
        (WebCore::CSSParser::parseFillPosition): Deleted.
        (WebCore::CSSParser::parse2ValuesFillPosition): Deleted.
        (WebCore::CSSParser::parseFillRepeat): Deleted.
        (WebCore::CSSParser::parseFillSize): Deleted.
        (WebCore::CSSParser::parseFillProperty): Deleted.
        (WebCore::CSSParser::parseAnimationDelay): Deleted.
        (WebCore::CSSParser::parseAnimationDirection): Deleted.
        (WebCore::CSSParser::parseAnimationDuration): Deleted.
        (WebCore::CSSParser::parseAnimationFillMode): Deleted.
        (WebCore::CSSParser::parseAnimationIterationCount): Deleted.
        (WebCore::CSSParser::parseAnimationName): Deleted.
        (WebCore::CSSParser::parseAnimationPlayState): Deleted.
        (WebCore::CSSParser::parseAnimationTrigger): Deleted.
        (WebCore::CSSParser::parseAnimationProperty): Deleted.
        (WebCore::CSSParser::parseTransformOriginShorthand): Deleted.
        (WebCore::CSSParser::isSpringTimingFunctionEnabled): Deleted.
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue): Deleted.
        (WebCore::CSSParser::parseSpringTimingFunctionValue): Deleted.
        (WebCore::CSSParser::parseAnimationTimingFunction): Deleted.
        (WebCore::isValidGridPositionCustomIdent): Deleted.
        (WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition): Deleted.
        (WebCore::CSSParser::parseGridPosition): Deleted.
        (WebCore::gridMissingGridPositionValue): Deleted.
        (WebCore::CSSParser::parseGridItemPositionShorthand): Deleted.
        (WebCore::CSSParser::parseGridGapShorthand): Deleted.
        (WebCore::CSSParser::parseGridTemplateColumns): Deleted.
        (WebCore::CSSParser::parseGridTemplateRowsAndAreasAndColumns): Deleted.
        (WebCore::CSSParser::parseGridTemplateShorthand): Deleted.
        (WebCore::parseImplicitAutoFlow): Deleted.
        (WebCore::CSSParser::parseGridShorthand): Deleted.
        (WebCore::CSSParser::parseGridAreaShorthand): Deleted.
        (WebCore::CSSParser::parseSingleGridAreaLonghand): Deleted.
        (WebCore::CSSParser::parseGridLineNames): Deleted.
        (WebCore::isGridTrackFixedSized): Deleted.
        (WebCore::CSSParser::parseGridTrackList): Deleted.
        (WebCore::CSSParser::parseGridTrackRepeatFunction): Deleted.
        (WebCore::CSSParser::parseGridTrackSize): Deleted.
        (WebCore::CSSParser::parseGridBreadth): Deleted.
        (WebCore::isValidGridAutoFlowId): Deleted.
        (WebCore::CSSParser::parseGridAutoFlow): Deleted.
        (WebCore::skipCommaInDashboardRegion): Deleted.
        (WebCore::CSSParser::parseDashboardRegions): Deleted.
        (WebCore::parseGridTemplateAreasColumnNames): Deleted.
        (WebCore::CSSParser::parseGridTemplateAreasRow): Deleted.
        (WebCore::CSSParser::parseGridTemplateAreas): Deleted.
        (WebCore::CSSParser::parseCounterContent): Deleted.
        (WebCore::CSSParser::parseClipShape): Deleted.
        (WebCore::completeBorderRadii): Deleted.
        (WebCore::CSSParser::parseInsetRoundedCorners): Deleted.
        (WebCore::CSSParser::parseBasicShapeInset): Deleted.
        (WebCore::CSSParser::parseShapeRadius): Deleted.
        (WebCore::CSSParser::parseBasicShapeCircle): Deleted.
        (WebCore::CSSParser::parseBasicShapeEllipse): Deleted.
        (WebCore::CSSParser::parseBasicShapePolygon): Deleted.
        (WebCore::CSSParser::parseBasicShapePath): Deleted.
        (WebCore::isBoxValue): Deleted.
        (WebCore::CSSParser::parseBasicShapeAndOrBox): Deleted.
        (WebCore::CSSParser::parseShapeProperty): Deleted.
        (WebCore::CSSParser::parseClipPath): Deleted.
        (WebCore::CSSParser::parseBasicShape): Deleted.
        (WebCore::CSSParser::parseFont): Deleted.
        (WebCore::CSSParser::parseSystemFont): Deleted.
        (WebCore::FontFamilyValueBuilder::FontFamilyValueBuilder): Deleted.
        (WebCore::FontFamilyValueBuilder::add): Deleted.
        (WebCore::FontFamilyValueBuilder::commit): Deleted.
        (WebCore::valueIsCSSKeyword): Deleted.
        (WebCore::CSSParser::parseFontFamily): Deleted.
        (WebCore::CSSParser::parseLineHeight): Deleted.
        (WebCore::CSSParser::parseFontSize): Deleted.
        (WebCore::createFontWeightValueKeyword): Deleted.
        (WebCore::CSSParser::parseFontWeight): Deleted.
        (WebCore::CSSParser::parseFontSynthesis): Deleted.
        (WebCore::CSSParser::parseFontFaceSrcURI): Deleted.
        (WebCore::CSSParser::parseFontFaceSrcLocal): Deleted.
        (WebCore::CSSParser::parseFontFaceSrc): Deleted.
        (WebCore::CSSParser::parseFontFaceUnicodeRange): Deleted.
        (WebCore::checkForValidDouble): Deleted.
        (WebCore::parseDouble): Deleted.
        (WebCore::parseColorIntOrPercentage): Deleted.
        (WebCore::isTenthAlpha): Deleted.
        (WebCore::parseAlphaValue): Deleted.
        (WebCore::mightBeRGBA): Deleted.
        (WebCore::mightBeRGB): Deleted.
        (WebCore::fastParseColorInternal): Deleted.
        (WebCore::CSSParser::fastParseColor): Deleted.
        (WebCore::CSSParser::parsedDouble): Deleted.
        (WebCore::CSSParser::isCalculation): Deleted.
        (WebCore::isPercent): Deleted.
        (WebCore::CSSParser::parseColorInt): Deleted.
        (WebCore::CSSParser::parseColorDouble): Deleted.
        (WebCore::CSSParser::parseRGBParameters): Deleted.
        (WebCore::CSSParser::parseColorFunctionParameters): Deleted.
        (WebCore::CSSParser::parseHSLParameters): Deleted.
        (WebCore::CSSParser::parseColorFromValue): Deleted.
        (WebCore::ShadowParseContext::ShadowParseContext): Deleted.
        (WebCore::ShadowParseContext::allowLength): Deleted.
        (WebCore::ShadowParseContext::commitValue): Deleted.
        (WebCore::ShadowParseContext::commitLength): Deleted.
        (WebCore::ShadowParseContext::commitColor): Deleted.
        (WebCore::ShadowParseContext::commitStyle): Deleted.
        (WebCore::CSSParser::parseShadow): Deleted.
        (WebCore::CSSParser::parseReflect): Deleted.
        (WebCore::CSSParser::parseFlex): Deleted.
        (WebCore::BorderImageParseContext::BorderImageParseContext): Deleted.
        (WebCore::BorderImageParseContext::canAdvance): Deleted.
        (WebCore::BorderImageParseContext::setCanAdvance): Deleted.
        (WebCore::BorderImageParseContext::allowCommit): Deleted.
        (WebCore::BorderImageParseContext::allowImage): Deleted.
        (WebCore::BorderImageParseContext::allowImageSlice): Deleted.
        (WebCore::BorderImageParseContext::allowRepeat): Deleted.
        (WebCore::BorderImageParseContext::allowForwardSlashOperator): Deleted.
        (WebCore::BorderImageParseContext::requireWidth): Deleted.
        (WebCore::BorderImageParseContext::requireOutset): Deleted.
        (WebCore::BorderImageParseContext::commitImage): Deleted.
        (WebCore::BorderImageParseContext::commitImageSlice): Deleted.
        (WebCore::BorderImageParseContext::commitForwardSlashOperator): Deleted.
        (WebCore::BorderImageParseContext::commitBorderWidth): Deleted.
        (WebCore::BorderImageParseContext::commitBorderOutset): Deleted.
        (WebCore::BorderImageParseContext::commitRepeat): Deleted.
        (WebCore::BorderImageParseContext::commitWebKitBorderImage): Deleted.
        (WebCore::BorderImageParseContext::commitBorderImage): Deleted.
        (WebCore::BorderImageParseContext::commitBorderImageProperty): Deleted.
        (WebCore::CSSParser::parseBorderImage): Deleted.
        (WebCore::isBorderImageRepeatKeyword): Deleted.
        (WebCore::CSSParser::parseBorderImageRepeat): Deleted.
        (WebCore::BorderImageSliceParseContext::BorderImageSliceParseContext): Deleted.
        (WebCore::BorderImageSliceParseContext::allowNumber): Deleted.
        (WebCore::BorderImageSliceParseContext::allowFill): Deleted.
        (WebCore::BorderImageSliceParseContext::allowFinalCommit): Deleted.
        (WebCore::BorderImageSliceParseContext::top): Deleted.
        (WebCore::BorderImageSliceParseContext::commitNumber): Deleted.
        (WebCore::BorderImageSliceParseContext::commitFill): Deleted.
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice): Deleted.
        (WebCore::CSSParser::parseBorderImageSlice): Deleted.
        (WebCore::BorderImageQuadParseContext::BorderImageQuadParseContext): Deleted.
        (WebCore::BorderImageQuadParseContext::allowNumber): Deleted.
        (WebCore::BorderImageQuadParseContext::allowFinalCommit): Deleted.
        (WebCore::BorderImageQuadParseContext::top): Deleted.
        (WebCore::BorderImageQuadParseContext::commitNumber): Deleted.
        (WebCore::BorderImageQuadParseContext::setAllowFinalCommit): Deleted.
        (WebCore::BorderImageQuadParseContext::setTop): Deleted.
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad): Deleted.
        (WebCore::CSSParser::parseBorderImageQuad): Deleted.
        (WebCore::CSSParser::parseBorderImageWidth): Deleted.
        (WebCore::CSSParser::parseBorderImageOutset): Deleted.
        (WebCore::CSSParser::parseBorderRadius): Deleted.
        (WebCore::CSSParser::parseAspectRatio): Deleted.
        (WebCore::CSSParser::parseCounter): Deleted.
        (WebCore::parseDeprecatedGradientPoint): Deleted.
        (WebCore::parseDeprecatedGradientColorStop): Deleted.
        (WebCore::CSSParser::parseDeprecatedGradient): Deleted.
        (WebCore::valueFromSideKeyword): Deleted.
        (WebCore::parseGradientColorOrKeyword): Deleted.
        (WebCore::CSSParser::parseDeprecatedLinearGradient): Deleted.
        (WebCore::CSSParser::parseDeprecatedRadialGradient): Deleted.
        (WebCore::CSSParser::parseLinearGradient): Deleted.
        (WebCore::CSSParser::parseRadialGradient): Deleted.
        (WebCore::CSSParser::parseGradientColorStops): Deleted.
        (WebCore::CSSParser::isGeneratedImageValue): Deleted.
        (WebCore::CSSParser::parseGeneratedImage): Deleted.
        (WebCore::CSSParser::parseFilterImage): Deleted.
        (WebCore::CSSParser::parseCrossfade): Deleted.
        (WebCore::CSSParser::parseCanvas): Deleted.
        (WebCore::CSSParser::parseNamedImage): Deleted.
        (WebCore::CSSParser::parseImageResolution): Deleted.
        (WebCore::CSSParser::parseImageSet): Deleted.
        (WebCore::TransformOperationInfo::TransformOperationInfo): Deleted.
        (WebCore::TransformOperationInfo::type): Deleted.
        (WebCore::TransformOperationInfo::argCount): Deleted.
        (WebCore::TransformOperationInfo::unit): Deleted.
        (WebCore::TransformOperationInfo::unknown): Deleted.
        (WebCore::TransformOperationInfo::hasCorrectArgCount): Deleted.
        (WebCore::CSSParser::parseTransform): Deleted.
        (WebCore::CSSParser::parseTransformValue): Deleted.
        (WebCore::CSSParser::isBlendMode): Deleted.
        (WebCore::CSSParser::isCompositeOperator): Deleted.
        (WebCore::isValidPrimitiveFilterFunction): Deleted.
        (WebCore::CSSParser::parseBuiltinFilterArguments): Deleted.
        (WebCore::cssValueKeywordIDForFunctionName): Deleted.
        (WebCore::CSSParser::parseFilter): Deleted.
        (WebCore::validFlowName): Deleted.
        (WebCore::CSSParser::isTextAutosizingEnabled): Deleted.
        (WebCore::CSSParser::isCSSGridLayoutEnabled): Deleted.
        (WebCore::CSSParser::parseFlowThread): Deleted.
        (WebCore::CSSParser::parseRegionThread): Deleted.
        (WebCore::CSSParser::parseTransformOrigin): Deleted.
        (WebCore::CSSParser::parsePerspectiveOrigin): Deleted.
        (WebCore::CSSParser::addTextDecorationProperty): Deleted.
        (WebCore::CSSParser::parseTextDecoration): Deleted.
        (WebCore::CSSParser::parseTextDecorationSkip): Deleted.
        (WebCore::CSSParser::parseTextUnderlinePosition): Deleted.
        (WebCore::CSSParser::parseTextEmphasisStyle): Deleted.
        (WebCore::CSSParser::parseTextEmphasisPosition): Deleted.
        (WebCore::CSSParser::parseTextIndent): Deleted.
        (WebCore::CSSParser::parseHangingPunctuation): Deleted.
        (WebCore::CSSParser::parseLineBoxContain): Deleted.
        (WebCore::CSSParser::parseFontFeatureTag): Deleted.
        (WebCore::CSSParser::parseFontFeatureSettings): Deleted.
        (WebCore::CSSParser::parseFontVariationTag): Deleted.
        (WebCore::CSSParser::parseFontVariationSettings): Deleted.
        (WebCore::CSSParser::parseFontVariantLigatures): Deleted.
        (WebCore::CSSParser::parseFontVariantNumeric): Deleted.
        (WebCore::CSSParser::parseFontVariantEastAsian): Deleted.
        (WebCore::CSSParser::parseFontVariant): Deleted.
        (WebCore::isValidWillChangeAnimatableFeature): Deleted.
        (WebCore::CSSParser::parseWillChange): Deleted.
        (WebCore::CSSParser::parseCalculation): Deleted.
        (WebCore::isCSSLetter): Deleted.
        (WebCore::isCSSEscape): Deleted.
        (WebCore::isURILetter): Deleted.
        (WebCore::isIdentifierStartAfterDash): Deleted.
        (WebCore::isCustomPropertyIdentifier): Deleted.
        (WebCore::isEqualToCSSIdentifier): Deleted.
        (WebCore::isEqualToCSSCaseSensitiveIdentifier): Deleted.
        (WebCore::checkAndSkipEscape): Deleted.
        (WebCore::skipWhiteSpace): Deleted.
        (WebCore::CSSParserString::characters<LChar>): Deleted.
        (WebCore::CSSParserString::characters<UChar>): Deleted.
        (WebCore::CSSParser::currentCharacter<LChar>): Deleted.
        (WebCore::CSSParser::currentCharacter<UChar>): Deleted.
        (WebCore::CSSParser::currentCharacter16): Deleted.
        (WebCore::CSSParser::tokenStart<LChar>): Deleted.
        (WebCore::CSSParser::tokenStart<UChar>): Deleted.
        (WebCore::CSSParser::currentLocation): Deleted.
        (WebCore::CSSParser::isIdentifierStart): Deleted.
        (WebCore::checkAndSkipString): Deleted.
        (WebCore::CSSParser::parseEscape): Deleted.
        (WebCore::CSSParser::UnicodeToChars<LChar>): Deleted.
        (WebCore::CSSParser::UnicodeToChars<UChar>): Deleted.
        (WebCore::CSSParser::parseIdentifierInternal): Deleted.
        (WebCore::CSSParser::parseIdentifier): Deleted.
        (WebCore::CSSParser::parseStringInternal): Deleted.
        (WebCore::CSSParser::parseString): Deleted.
        (WebCore::CSSParser::findURI): Deleted.
        (WebCore::CSSParser::parseURIInternal): Deleted.
        (WebCore::CSSParser::parseURI): Deleted.
        (WebCore::CSSParser::parseUnicodeRange): Deleted.
        (WebCore::CSSParser::parseNthChild): Deleted.
        (WebCore::CSSParser::parseNthChildExtra): Deleted.
        (WebCore::CSSParser::detectFunctionTypeToken): Deleted.
        (WebCore::CSSParser::detectMediaQueryToken): Deleted.
        (WebCore::CSSParser::detectNumberToken): Deleted.
        (WebCore::CSSParser::detectDashToken): Deleted.
        (WebCore::CSSParser::detectAtToken): Deleted.
        (WebCore::CSSParser::detectSupportsToken): Deleted.
        (WebCore::CSSParser::realLex): Deleted.
        (WebCore::CSSParser::createImportRule): Deleted.
        (WebCore::CSSParser::createMediaRule): Deleted.
        (WebCore::CSSParser::createEmptyMediaRule): Deleted.
        (WebCore::CSSParser::createSupportsRule): Deleted.
        (WebCore::CSSParser::markSupportsRuleHeaderStart): Deleted.
        (WebCore::CSSParser::markSupportsRuleHeaderEnd): Deleted.
        (WebCore::CSSParser::popSupportsRuleData): Deleted.
        (WebCore::CSSParser::processAndAddNewRuleToSourceTreeIfNeeded): Deleted.
        (WebCore::CSSParser::addNewRuleToSourceTree): Deleted.
        (WebCore::CSSParser::popRuleData): Deleted.
        (WebCore::CSSParser::syntaxError): Deleted.
        (WebCore::CSSParser::isLoggingErrors): Deleted.
        (WebCore::CSSParser::logError): Deleted.
        (WebCore::CSSParser::createKeyframesRule): Deleted.
        (WebCore::CSSParser::createStyleRule): Deleted.
        (WebCore::CSSParser::createFontFaceRule): Deleted.
        (WebCore::CSSParser::addNamespace): Deleted.
        (WebCore::CSSParser::determineNameInNamespace): Deleted.
        (WebCore::CSSParser::rewriteSpecifiersWithNamespaceIfNeeded): Deleted.
        (WebCore::CSSParser::rewriteSpecifiersWithElementName): Deleted.
        (WebCore::CSSParser::rewriteSpecifiers): Deleted.
        (WebCore::CSSParser::createPageRule): Deleted.
        (WebCore::CSSParser::createSelectorVector): Deleted.
        (WebCore::CSSParser::recycleSelectorVector): Deleted.
        (WebCore::CSSParser::createRegionRule): Deleted.
        (WebCore::CSSParser::createMarginAtRule): Deleted.
        (WebCore::CSSParser::startDeclarationsForMarginBox): Deleted.
        (WebCore::CSSParser::endDeclarationsForMarginBox): Deleted.
        (WebCore::CSSParser::createKeyframe): Deleted.
        (WebCore::CSSParser::invalidBlockHit): Deleted.
        (WebCore::CSSParser::updateLastMediaLine): Deleted.
        (WebCore::fixUnparsedProperties): Deleted.
        (WebCore::CSSParser::fixUnparsedPropertyRanges): Deleted.
        (WebCore::CSSParser::markRuleHeaderStart): Deleted.
        (WebCore::CSSParser::setRuleHeaderEnd): Deleted.
        (WebCore::CSSParser::markRuleHeaderEnd): Deleted.
        (WebCore::CSSParser::markSelectorStart): Deleted.
        (WebCore::CSSParser::markSelectorEnd): Deleted.
        (WebCore::CSSParser::markRuleBodyStart): Deleted.
        (WebCore::CSSParser::markRuleBodyEnd): Deleted.
        (WebCore::CSSParser::markPropertyStart): Deleted.
        (WebCore::CSSParser::markPropertyEnd): Deleted.
        (WebCore::CSSParser::createViewportRule): Deleted.
        (WebCore::CSSParser::parseViewportProperty): Deleted.
        (WebCore::CSSParser::parseViewportShorthand): Deleted.
        (WebCore::isAppleLegacyCSSPropertyKeyword): Deleted.
        (WebCore::cssPropertyID): Deleted.
        (WebCore::cssPropertyNameIOSAliasing): Deleted.
        (WebCore::isAppleLegacyCSSValueKeyword): Deleted.
        (WebCore::cssValueKeywordID): Deleted.
        (WebCore::isValidNthToken): Deleted.
        * css/parser/CSSParser.h:
        (): Deleted.
        (WebCore::CSSParser::ValueWithCalculation::ValueWithCalculation): Deleted.
        (WebCore::CSSParser::ValueWithCalculation::value): Deleted.
        (WebCore::CSSParser::ValueWithCalculation::operator CSSParserValue&): Deleted.
        (WebCore::CSSParser::ValueWithCalculation::calculation): Deleted.
        (WebCore::CSSParser::ValueWithCalculation::setCalculation): Deleted.
        (WebCore::CSSParser::hasProperties): Deleted.
        (WebCore::CSSParser::startNestedSelectorList): Deleted.
        (WebCore::CSSParser::endNestedSelectorList): Deleted.
        (WebCore::CSSParser::resetPropertyRange): Deleted.
        (WebCore::CSSParser::isExtractingSourceData): Deleted.
        (WebCore::CSSParser::lex): Deleted.
        (WebCore::CSSParser::token): Deleted.
        (WebCore::CSSParser::markViewportRuleBodyStart): Deleted.
        (WebCore::CSSParser::markViewportRuleBodyEnd): Deleted.
        (WebCore::CSSParser::setCustomPropertyName): Deleted.
        (WebCore::CSSParser::is8BitSource): Deleted.
        (WebCore::CSSParser::setStyleSheet): Deleted.
        (WebCore::CSSParser::inStrictMode): Deleted.
        (WebCore::CSSParser::inQuirksMode): Deleted.
        (WebCore::CSSParser::setupParser): Deleted.
        (WebCore::CSSParser::inShorthand): Deleted.
        (WebCore::CSSParser::inViewport): Deleted.
        (WebCore::CSSParser::operator|): Deleted.
        (WebCore::CSSParser::validateUnit): Deleted.
        (WebCore::ShorthandScope::ShorthandScope): Deleted.
        (WebCore::ShorthandScope::~ShorthandScope): Deleted.
        (WebCore::CSSParser::setTokenStart<LChar>): Deleted.
        (WebCore::CSSParser::setTokenStart<UChar>): Deleted.
        (WebCore::CSSParser::tokenStartOffset): Deleted.
        (WebCore::CSSParser::currentCharacterOffset): Deleted.
        (WebCore::CSSParser::tokenStartChar): Deleted.
        (WebCore::isCustomPropertyName): Deleted.
        (WebCore::cssyylex): Deleted.
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setSelectorList):
        (WebCore::destroy): Deleted.
        (WebCore::CSSParserValueList::~CSSParserValueList): Deleted.
        (WebCore::CSSParserValueList::addValue): Deleted.
        (WebCore::CSSParserValueList::insertValueAt): Deleted.
        (WebCore::CSSParserValueList::extend): Deleted.
        (WebCore::CSSParserValueList::containsVariables): Deleted.
        (WebCore::CSSParserValue::createCSSValue): Deleted.
        (WebCore::CSSParserSelector::parsePseudoElementSelector): Deleted.
        (WebCore::CSSParserSelector::parsePseudoElementCueFunctionSelector): Deleted.
        (WebCore::CSSParserSelector::parsePseudoElementSlottedFunctionSelector): Deleted.
        (WebCore::CSSParserSelector::parsePseudoClassHostFunctionSelector): Deleted.
        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector): Deleted.
        (WebCore::CSSParserSelector::setPseudoClassValue): Deleted.
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserString::init): Deleted.
        (WebCore::CSSParserString::clear): Deleted.
        (WebCore::CSSParserString::is8Bit): Deleted.
        (WebCore::CSSParserString::characters8): Deleted.
        (WebCore::CSSParserString::characters16): Deleted.
        (WebCore::CSSParserString::length): Deleted.
        (WebCore::CSSParserString::setLength): Deleted.
        (WebCore::CSSParserString::operator[]): Deleted.
        (WebCore::CSSParserString::operator String): Deleted.
        (WebCore::CSSParserString::operator AtomicString): Deleted.
        (WebCore::CSSParserString::toStringView): Deleted.
        (): Deleted.
        (WebCore::CSSParserValueList::CSSParserValueList): Deleted.
        (WebCore::CSSParserValueList::size): Deleted.
        (WebCore::CSSParserValueList::currentIndex): Deleted.
        (WebCore::CSSParserValueList::current): Deleted.
        (WebCore::CSSParserValueList::next): Deleted.
        (WebCore::CSSParserValueList::previous): Deleted.
        (WebCore::CSSParserValueList::setCurrentIndex): Deleted.
        (WebCore::CSSParserValueList::valueAt): Deleted.
        (WebCore::CSSParserValueList::clear): Deleted.
        (WebCore::CSSParserValue::setFromValueList): Deleted.
        (WebCore::equalLettersIgnoringASCIICase): Deleted.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isCustomPropertyName):
        (WebCore::cssPropertyNameIOSAliasing):
        * css/parser/CSSPropertyParser.h:
        * css/parser/SVGCSSParser.cpp: Removed.
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleSourceData):
        * page/animation/AnimationController.cpp:
        * rendering/style/RenderStyle.cpp:
        * svg/SVGAnimateElementBase.cpp:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGElement.cpp:

2016-12-10  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Include WTF, JSC, and WebCore headers automatically to targers using them
        https://bugs.webkit.org/show_bug.cgi?id=165686

        Reviewed by Michael Catanzaro.

        This change reduces duplication of include path lists between modules,
        and reduces future need for fixes like r209605 (broken build because of
        WebCore header suddenly becoming used in WebKit2).

        No new tests needed.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWinCairo.cmake:

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

        Replace isUnclosedNode by isClosedShadowHidden
        https://bugs.webkit.org/show_bug.cgi?id=165722

        Reviewed by Antti Koivisto.

        Replaced Node::isUnclosedNode by Node::isClosedShadowHidden and negated the semantics as done in the spec:
        https://dom.spec.whatwg.org/#concept-closed-shadow-hidden
        https://github.com/whatwg/dom/pull/306

        Also added a version which follows the spec text for a debug assertion.

        No new tests since this has no behavioral change.

        * dom/EventContext.h:
        (WebCore::EventContext::isUnreachableNode):
        * dom/EventPath.cpp:
        (WebCore::EventPath::computePathUnclosedToTarget):
        (WebCore::RelatedNodeRetargeter::checkConsistency):
        * dom/Node.cpp:
        (WebCore::isClosedShadowHiddenUsingSpecDefinition): Added to assert our implementation matches the spec text.
        (WebCore::Node::isClosedShadowHidden): Renamed from Node::isUnclosedNode and negated the return value.
        * dom/Node.h:

2016-12-10  Antti Koivisto  <antti@apple.com>

        CrashTracer: com.apple.WebKit.WebContent.Development at com.apple.WebCore: WTF::match_constness<WebCore::CSSValue, WebCore::CSSContentDistributionValue>::type& WTF::downcast<WebCore::CSSContentDistributionValue, WebCore::CSSValue> + 65
        https://bugs.webkit.org/show_bug.cgi?id=165652
        rdar://problem/28465278

        Reviewed by Darin Adler.

        No, test don't know how to get here.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertContentAlignmentData):

        Add type checks.

2016-12-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] RSA algorithms should allow importing keys without usages
        https://bugs.webkit.org/show_bug.cgi?id=165680
        <rdar://problem/29601354>

        Reviewed by Brent Fulgham.

        Tests: crypto/subtle/rsa-oaep-import-jwk-public-key-empty-usages.html
               crypto/subtle/rsa-oaep-import-spki-key-empty-usages.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-public-key-empty-usages.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-spki-key-empty-usages.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-empty-usages.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-spki-key-empty-usages.html

        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):

2016-12-10  Frederic Wang  <fred.wang@free.fr>

        Add STIX Two Math to the list of math fonts in mathml.css
        https://bugs.webkit.org/show_bug.cgi?id=165676

        Reviewed by Darin Adler.

        No new tests, this is just changing default style.

        * css/mathml.css:
        (math):

2016-12-09  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableByteStreamController desiredSize
        https://bugs.webkit.org/show_bug.cgi?id=165599

        Reviewed by Darin Adler.

        Implemented ReadableByteStreamController attribute desiredSize.

        Added test to check desiredSize value.

        * Modules/streams/ReadableByteStreamController.js:
        (desiredSize):
        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerGetDesiredSize):

2016-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        document.pointerLockElement exposes a node inside a shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=165702

        Reviewed by Simon Fraser.

        Expose pointerLockElement on ShadowRoot as spec'ed (DocumentOrShadowRoot):
        https://w3c.github.io/pointerlock/#extensions-to-the-documentorshadowroot-mixin

        Use ancestorElementInThisScope to find the correct node in pointerLockElement.

        Tests: fast/shadow-dom/pointerlockelement-in-shadow-tree.html
               fast/shadow-dom/pointerlockelement-in-slot.html

        * dom/Document.cpp:
        (WebCore::Document::pointerLockElement): Moved to TreeScope.
        * dom/Document.h:
        * dom/Document.idl: Moved ointerLockElement to DocumentOrShadowRoot.idl.
        * dom/DocumentOrShadowRoot.idl: Ditto.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedElementInScope): Use documentScope instead of acessing it via m_rootNode.
        (WebCore::TreeScope::pointerLockElement): Moved from Document.
        * dom/TreeScope.h:

2016-12-09  Daniel Bates  <dabates@apple.com>

        Add reflected nonce attribute to HTML Link element IDL
        https://bugs.webkit.org/show_bug.cgi?id=165709

        Reviewed by Ryosuke Niwa.

        Add the reflected nonce attribute to the HTML Link element IDL definition
        as per the HTML standard <https://html.spec.whatwg.org/multipage/semantics.html#the-link-element> (9 December 2016).

        Test: fast/dom/nonce-attribute-reflection.html

        * html/HTMLLinkElement.idl:

2016-12-09  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Dean Jackson.

        Based on a patch by Dr Alex Gouaillard <agouaillard@gmail.com>
        No new tests, covered by existing tests.

        * Modules/mediastream/MediaStreamEvent.idl: Add "EnabledAtRuntime".
        * Modules/mediastream/NavigatorMediaDevices.idl: Ditto.
        * Modules/mediastream/NavigatorUserMedia.idl: Ditto.
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl: Ditto.
        * Modules/mediastream/RTCIceCandidate.idl: Ditto.
        * Modules/mediastream/RTCPeerConnection.idl: Ditto.
        * Modules/mediastream/RTCRtpReceiver.idl: Ditto.
        * Modules/mediastream/RTCRtpSender.idl: Ditto.
        * Modules/mediastream/RTCRtpTransceiver.idl: Ditto.
        * Modules/mediastream/RTCSessionDescription.idl: Ditto.
        * Modules/mediastream/RTCTrackEvent.idl: Ditto.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures): Set m_isMediaStreamEnabled in the
          constructor instead of in reset() because the later is called by the Internals constructor,
          making it impossible to override the runtime flag from WTR or DRT.
        (WebCore::RuntimeEnabledFeatures::reset): Don't set m_isMediaStreamEnabled.
        * page/Settings.in: Add peerConnectionEnabled.

2016-12-09  Daniel Bates  <dabates@apple.com>

        Remove QuickLook scheme from the list of secure schemes
        https://bugs.webkit.org/show_bug.cgi?id=165699

        Reviewed by Andy Estes.

        Following r207155 we use a unique origin for QuickLook documents. Unique origins are not
        subject to mixed content restrictions. Prior to r207155 QuickLook documents used the
        origin from which they were served. We added the QuickLook scheme to the list of secure
        schemes as a workaround to avoid mixed content errors when loading subresources in a
        QuickLook document served over HTTPS. Now that we use a unique origin for QuickLook
        documents we no longer need this workaround.

        * platform/SchemeRegistry.cpp:
        (WebCore::secureSchemes):

2016-12-09  Brady Eidson  <beidson@apple.com>

        Re-landing:
        Add _WKIconLoadingDelegate SPI.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Reviewed by Alex Christensen.

        No new tests (Manual testing possible in MiniBrowser now, WKTR tests coming soon in https://bugs.webkit.org/show_bug.cgi?id=164895).

        With this client, WebCore will ask the FrameLoaderClient about each icon found in the <head>.

        WebKit2 will then ask the embedding app - for each icon - if it wants that icon to load.

        For icons the app decides to load, WebKit will pass the data to the app without storing locally.

        * WebCore.xcodeproj/project.pbxproj:

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

        * html/LinkIconCollector.cpp:
        (WebCore::iconSize):
        (WebCore::compareIcons):
        * html/LinkIconCollector.h:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon):
        (WebCore::DocumentLoader::finishedLoadingIcon):
        * loader/DocumentLoader.h:

        * loader/FrameLoaderClient.h:

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::IconLoader):
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:

        * platform/LinkIcon.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        (WebCore::LinkIcon::encode):
        (WebCore::LinkIcon::decode):

2016-12-06  Jiewen Tan  <jiewen_tan@apple.com>

        [Part 2 of 2] Add support for PKCS8 format while doing SubtleCrypto.importKey/exportKey
        https://bugs.webkit.org/show_bug.cgi?id=129978
        <rdar://problem/21799829>

        Reviewed by Brent Fulgham.

        This is part 2 of Bug 129978. In this patch, it adds the PKCS8 format support for
        SubtleCrypto.importKey/exportKey. Currently support algorithms are RSAES-PKCS1-v1_5,
        RSASSA-PKCS1-v1_5 and RSA-OAEP.

        Tests: crypto/subtle/rsa-import-jwk-key-export-pkcs8-key.html
               crypto/subtle/rsa-import-pkcs8-key-export-jwk-key.html
               crypto/subtle/rsa-import-pkcs8-key-export-pkcs8-key.html
               crypto/subtle/rsa-oaep-generate-export-key-pkcs8.html
               crypto/subtle/rsa-oaep-import-pkcs8-key.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-export-key-pkcs8.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-pkcs8-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-pkcs8.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-pkcs8-key.html
               crypto/workers/subtle/rsa-export-pkcs8-key.html
               crypto/workers/subtle/rsa-import-pkcs8-key.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::toKeyData):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::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/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportPkcs8):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportPkcs8):

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        Deploy OrdinalNumber in JSC::SourceCode
        https://bugs.webkit.org/show_bug.cgi?id=165687

        Reviewed by Michael Saboff.

        Updated for interface changes.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateModule):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::startLine):

2016-12-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some resources fetched via Fetch API do not have data
        https://bugs.webkit.org/show_bug.cgi?id=165230
        <rdar://problem/29449220>

        Reviewed by Alex Christensen.

        Tests: http/tests/inspector/network/fetch-response-body.html
               http/tests/inspector/network/xhr-response-body.html

        * platform/network/ResourceRequestBase.h:
        Distinguish Fetch requests.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        Set the requester type as Fetch.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        * loader/DocumentThreadableLoader.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveThreadableLoaderResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponseImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveThreadableLoaderResponse):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponse): Deleted.
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveThreadableLoaderResponse):
        (WebCore::InspectorNetworkAgent::didFinishXHRLoading):
        (WebCore::InspectorNetworkAgent::didReceiveXHRResponse): Deleted.
        Add a generic way for a ThreadableLoader load to update the type of a network request.
        This will include both XHR and Fetch requests.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::hasTextContent):
        (WebCore::createXHRTextDecoder):
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceType):
        (WebCore::InspectorPageAgent::createTextDecoder):
        (WebCore::textContentForCachedResource):
        * inspector/InspectorPageAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::createOtherResourceTextDecoder): Deleted.
        Share the logic that creates a Text Decoders for XHR with other non-buffered requests
        (like Fetch). This moves us to identical behavior for now.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedJSONMIMEType):
        (WebCore::MIMETypeRegistry::isTextMIMEType):
        * platform/MIMETypeRegistry.h:
        Better detect different JSON content based on MIME Type.

2016-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        document.webkitFullscreenElement leaks elements inside a shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=158471

        Reviewed by Chris Dumez.

        Fixed the bug by calling the newly added ancestorElementInThisScope in webkitCurrentFullScreenElementForBindings
        and webkitFullscreenElementForBinding.

        The specification (https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement) uses "the result of
        retargeting fullscreen element" and returns null if the result is not in the same tree as the context object.

        This is equivalent to the algorithm implemented by ancestorElementInThisScope. Observe that the retargeting
        algorithm (https://dom.spec.whatwg.org/#retarget) finds the lowest common tree scope of the retargetee and
        the context object. There are two cases to consider.

        1. The context object's tree scope is the lowest common tree scope: In this case, an ancestor shadow host or
        the retargetee itself is in this tree scope. It's sufficient traverse every shadow host to find the one that
        resides in the same tree scope as the context object. This is precisely what ancestorElementInThisScope does.

        2. The context object's tree scope is not the lowest common tree scope: In this case, the context object is
        inside a shadow tree whose ancestor shadow host is in the lowest common tree scope. In this case, retargeting
        algorithm finds a node which is not in the same tree as the context object. Thus, the result is null.
        ancestorElementInThisScope traveres ancestor shadow hosts and returns null if no shadow host's tree scope
        matches that of the context object's tree scope. Thus, it would return null in this case as desired.

        Also renamed TreeScope::focusedElement to focusedElementInScope for clarity since Document which inherits
        from TreeScope also has a distinct member function named focusedElement called by TreeScope::focusedElement,
        and used ancestorElementInThisScope since it uses the same algorithm.

        Tests: fast/shadow-dom/activeElement-for-focused-element-in-another-shadow.html
               fast/shadow-dom/blur-on-shadow-host-with-focused-shadow-content.html
               fast/shadow-dom/fullscreen-in-shadow-fullscreenElement.html
               fast/shadow-dom/fullscreen-in-shadow-webkitCurrentFullScreenElement.html
               fast/shadow-dom/fullscreen-in-slot-fullscreenElement.html
               fast/shadow-dom/fullscreen-in-slot-webkitCurrentFullScreenElement.html

        * dom/Document.cpp:
        (WebCore::Document::removeFocusedNodeOfSubtree):
        (WebCore::Document::activeElement):
        * dom/Document.h:
        (WebCore::Document::webkitCurrentFullScreenElementForBindings): Added.
        (WebCore::Document::webkitFullscreenElementForBindings): Added.
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::blur):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::activeElement):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::ancestorNodeInThisScope): Renamed from ancestorInThisScope for clarity.
        (WebCore::TreeScope::ancestorElementInThisScope):
        (WebCore::TreeScope::focusedElementInScope): Renamed from focusedElement to disambiguate it from Document's
        focusedElement.
        * dom/TreeScope.h:
        * editing/VisibleSelection.cpp:
        (WebCore::adjustPositionForEnd):
        (WebCore::adjustPositionForStart):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions):
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        * page/DOMSelection.cpp:
        (WebCore::selectionShadowAncestor):
        (WebCore::DOMSelection::shadowAdjustedNode):
        (WebCore::DOMSelection::shadowAdjustedOffset):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult): Added a FIXME here since this is clearly wrong for
        shadow trees created by author scripts.

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        TextPosition and OrdinalNumber should be more like idiomatic numbers
        https://bugs.webkit.org/show_bug.cgi?id=165678

        Reviewed by Filip Pizlo.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::sourcePosition):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::create):
        * dom/ScriptElement.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::uninitializedPositionValue1):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo): Adopt
        default construtor.

        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::XMLErrors):
        (WebCore::XMLErrors::handleError):
        * xml/XMLErrors.h: Use std::optional instead of belowRangePosition()
        because in-band signaling is harder to reason about.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::textPosition): Adopt default constructor.

2016-12-09  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Validation message for required checkbox doesn’t conform the the Apple Style Guide
        https://bugs.webkit.org/show_bug.cgi?id=165661

        Reviewed by Dan Bernstein.

        Update validation message as per Apple Style Guide.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):

2016-12-09  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: !beforeChild->isRubyRun() in WebCore::RenderRubyAsBlock::addChild
        https://bugs.webkit.org/show_bug.cgi?id=141433
        <rdar://problem/27711351>

        Reviewed by Dean Jackson.

        Do not try to inject the list marker into a block ruby subtree. Have it as the sibling
        of the ruby instead (with an anonymous block wrapper ofc).

        Test: fast/ruby/assert-with-listitem-and-block-ruby.html

        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):

2016-12-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Implement the pageScaleFactor property
        https://bugs.webkit.org/show_bug.cgi?id=165660

        Reviewed by Dean Jackson.

        We implement the pageScaleFactor property on MediaController. This property is set
        by the HTMLMediaElement when the page scale factor changes, and we only choose to handle
        it on iOS by setting controlsDependOnPageScaleFactor to true on the MediaControlsHost.

        To do so, we now size the media controls by multiplying the layout size of the media by
        the page scale factor, and apply an inverse CSS zoom on the media controls themselves.

        Test: media/modern-media-controls/media-controller/media-controller-scale-factor.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container,):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get scaleFactor):
        (MediaControls.prototype.set scaleFactor):
        (MediaControls.prototype.commitProperty):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.set pageScaleFactor):
        (MediaController.prototype._updateControlsSize):
        * html/HTMLMediaElement.cpp:
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::setControllerJSProperty):

        We no longer hit a JSC assertion when trying to set the pageScaleFactor property before
        the JS controller was actually created.

2016-12-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mac CMake build following <http://trac.webkit.org/changeset/209549>
        (https://bugs.webkit.org/show_bug.cgi?id=165572)

        Add directory html/canvas to the list of forwarding headers directories so that
        the Legacy WebKit Objective-C DOM binding DOMHTMLCanvasElement.mm can ultimately
        include header WebGLContextAttributes.h.

        * PlatformMac.cmake:

2016-12-09  Brady Eidson  <beidson@apple.com>

        LinkIconCollector refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=165657

        Reviewed by Dean Jackson.

        No new tests (Refactor, no behavior change)

        * WebCore.xcodeproj/project.pbxproj:

        * html/LinkIconCollector.cpp:
        (WebCore::iconSize):
        (WebCore::compareIcons):
        * html/LinkIconCollector.h:

        * platform/LinkIcon.h: Move outside of LinkIconCollector for future expandability.

2016-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r209574.

        This change broke the Windows build.

        Reverted changeset:

        "[WebIDL] Remove custom bindings for Geolocation"
        https://bugs.webkit.org/show_bug.cgi?id=165625
        http://trac.webkit.org/changeset/209574

2016-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Custom Elements from a different document are not customized when created with innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=165617

        Reviewed by Antti Koivisto.

        The bug was caused by a superflous null check on window in createHTMLElementOrFindCustomElementInterface.
        Removed the nullcheck to fix the bug.

        Test: fast/custom-elements/adopting-from-frameless-document.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):

2016-12-09  Daniel Bates  <dabates@apple.com>

        [CSP] Policy of window opener not applied to about:blank window
        https://bugs.webkit.org/show_bug.cgi?id=165531
        <rdar://problem/29426639>

        Reviewed by Brent Fulgham.

        Fixes an issue where the content security policy of the opener document was not applied to
        an about:blank window.

        An about:blank window inherits its security origin from its opener document. It should also
        copy (inherit) the ContentSecurityPolicy from its opener document. When copying the ContentSecurityPolicy
        state from the opener document to the about:blank document we must take care to avoid copying
        any upgrade-insecure-request directive because new windows should not inherit it by definition.
        With respect to upgrade-insecure-requests, new windows should only inherit the insecure navigation set
        from their opener document.

        Test: http/tests/security/contentSecurityPolicy/image-blocked-in-about-blank-window.html

        * dom/Document.cpp:
        (WebCore::Document::initContentSecurityPolicy): Copy the ContentSecurityPolicy state from the
        owner document to this document when it inherits its security origin from its owner. An about:blank
        window is one example of a document that inherits its security origin from its owner.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Call ContentSecurityPolicy::copyUpgradeInsecureRequestStateFrom()
        to copy the upgrade insecure requests state from the owner document to the worker now that
        ContentSecurityPolicy::copyStateFrom() no longer does this.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom): Do not copy the upgrade insecure request state.
        Callers are now responsible for calling ContentSecurityPolicy::copyUpgradeInsecureRequestStateFrom()
        to copy this state.
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::parse): Ignore directive upgrade-insecure-requests when
        inheriting ContentSecurityPolicy state as this directive as the Upgrade Insecure Requests feature has
        its own inheritance semantics that differ from the semantics of copying a ContentSecurityPolicy object.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Call ContentSecurityPolicy::copyUpgradeInsecureRequestStateFrom()
        to copy the upgrade insecure requests state from the original document to the transformed document now
        that ContentSecurityPolicy::copyStateFrom() no longer does this.

2016-12-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Remaining time label first appears way to the left
        https://bugs.webkit.org/show_bug.cgi?id=165637

        Reviewed by Dean Jackson.

        We would sometimes see the remaining time label be laid out in an incorrect position
        when a video would start playing. This happened because the time label was being committed
        from a previous value before, in the same frame, we would call the layout() function
        of MacOSInlineMediaControls. This would set the newly computed location for the
        remaining time label, but because we would reset the list of dirty properties after
        calling all layout functions, the new value set in MacOSInlineMediaControls.layout()
        would be disregarded and the wrong, committed value would persist until it was reset
        in a much later frame.

        We now correctly clear the list of dirty nodes before laying them out, giving all nodes
        a chance to become dirty again during layout, and updated again in the next frame.

        Test: media/modern-media-controls/layout-node/node-made-dirty-during-layout.html

        * Modules/modern-media-controls/controls/layout-node.js:
        (performScheduledLayout):

2016-12-09  Per Arne Vollan  <pvollan@apple.com>

        Fix compile errors on Windows when building with .proj files.

        Unreviewed build fix.

        Fix include paths.

        * platform/graphics/win/IntPointWin.cpp:
        * platform/graphics/win/IntRectWin.cpp:
        * platform/graphics/win/IntSizeWin.cpp:

2016-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r209570.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):

2016-12-01  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Pass Grid as argument to items' placement methods
        https://bugs.webkit.org/show_bug.cgi?id=165250

        Reviewed by Darin Adler.

        In order to constify computeIntrinsicLogicalWidths() it is required to constify
        placeItemsOnGrid() first, which is the base method of the grid items' positioning logic. The
        first step is to constify all the methods invoked by the latter, which basically means to
        pass the Grid as argument to all of them instead of directly using the m_grid attribute from
        RenderGrid. As this is an intermediate step, a new const_cast<> was required in the
        intrinsic size computation. However it will be promptly removed after the const-ification of
        placeItemsOnGrid().

        After this, only the methods used by the track sizing algorithm will directly access
        m_grid. All those would get a reference to the Grid via GridSizingData, but that's a matter
        of a follow up patch.

        Apart from that, m_gridIsDirty was removed because it was always too confusing. It was
        replaced by Grid's m_needsItemsPlacement which is much more concise. The clearGrid() call
        was indeed only forcing a new placement of the grid items.

        No new tests as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::Grid::setNeedsItemsPlacement): New method to flag the Grid whenever
        grid items' placement algorithm needs to be run.
        (WebCore::RenderGrid::canPerformSimplifiedLayout):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Constified. Got Grid as
        argument.
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid): Ditto.
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): Ditto.
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid): Ditto.
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid): Ditto.
        (WebCore::RenderGrid::clearGrid):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::numTracks):
        * rendering/RenderGrid.h:

2016-12-09  Gavin Barraclough  <barraclough@apple.com>

        Revert - Add _WKIconLoadingDelegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Unreviewed rollout due to performance regression.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * html/LinkIconCollector.cpp:
        (WebCore::iconSize):
        (WebCore::compareIcons):
        * html/LinkIconCollector.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading): Deleted.
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon): Deleted.
        (WebCore::DocumentLoader::finishedLoadingIcon): Deleted.
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::IconLoader):
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:
        * platform/LinkIcon.h: Removed.

2016-12-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Remove NoInterfaceObject attribute from SubtleCrypto Interface
        https://bugs.webkit.org/show_bug.cgi?id=165629
        <rdar://problem/29586203>

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * crypto/SubtleCrypto.idl:

2016-12-08  Keith Rollin  <krollin@apple.com>

        FileHandle::printf doesn't build on Windows
        https://bugs.webkit.org/show_bug.cgi?id=165642

        Reviewed by Ryosuke Niwa.

        Fix the build -- vasprintf does not exist on Windows, so make
        FileHandle::printf a no-op on that platform.

        No new tests -- affected facility is currently only used in testing
        code and is not user reachable.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::printf):

2016-12-08  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Exiting fullscreen with paused media shows the start button
        https://bugs.webkit.org/show_bug.cgi?id=165640

        Reviewed by Dean Jackson.

        Like all supporting objects, the StartSupport instance gets recreated when creating controls
        for new layout traits, which happens when going from fullscreen to inline. Due to this, the
        "_isPlayed" property is not longer set to true, even if the media has played prior to being
        paused in fullscreen. We now also check the media's played range to identify whether media
        has been played.

        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport.prototype._shouldShowStartButton):
        (StartSupport):

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

        ASSERTION FAILED: locale in WebCore::lastHyphenLocation
        https://bugs.webkit.org/show_bug.cgi?id=164182

        Reviewed by Zalan Bujtas.

        Our hyphenation code assumes the locale is in a small set of known locales.
        However, web content can put whatever string it wants in the locale field.

        Test: fast/text/hyphenation-unknown-locale.html

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::lastHyphenLocation):
        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth): When computing the minimum preferred width of
        an element, we want to know the size of the widest nonbreakable unit. When
        hyphenation is enabled, we have to measure the width of each fragment of each
        word (where "fragment" is determined by a substring between two successive
        hyphenation points, appended with a hyphen character). A hyphenation point at
        string offset 0 is irrelevant for this purpose, because it would lead to an
        empty fragment. Therefore, skip this situation.

2016-12-08  David Kilzer  <ddkilzer@apple.com>

        Always check the return value of pthread_key_create()
        <https://webkit.org/b/165274>

        Reviewed by Darin Adler.

        * platform/ios/wak/WebCoreThread.mm:
        (InitThreadContextKey): Call CRASH() if pthread_key_create()
        returns an error.  The error code will be stored in a register
        available in a crash log, so no need to log the value
        explicitly.

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Reduce PassRefPtr use in platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=165636

        Reviewed by Dean Jackson.

        No change in behavior.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:
        (WebCore::DisplayRefreshMonitorMac::create):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::createForCurrentGLContext):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):

2016-12-08  Keith Rollin  <krollin@apple.com>

        Move FileHandle to WebCore FileHandle.h
        https://bugs.webkit.org/show_bug.cgi?id=165562

        Reviewed by Alex Christensen.

        Add FileHandle, a small wrapper around FileSystem facilities to manage
        the lifetime of an open file and give the facilities a C++ interface.

        No new tests -- affected facility is currently only used in testing
        code and is not user reachable.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FileHandle.cpp: Added.
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::~FileHandle):
        (WebCore::FileHandle::operator=):
        (WebCore::FileHandle::operator bool):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::read):
        (WebCore::FileHandle::write):
        (WebCore::FileHandle::printf):
        (WebCore::FileHandle::close):
        * platform/FileHandle.h: Added.

2016-12-07  Ryosuke Niwa  <rniwa@webkit.org>

        ASSERTION FAILED: m_items.isEmpty() in CustomElementReactionQueue destructor
        https://bugs.webkit.org/show_bug.cgi?id=162029
        <rdar://problem/28945851>

        Reviewed by Chris Dumez.

        The bug was caused by Document::removedLastRef enqueuing disconnectedCallback during a tear down.
        Don't enqueue a disconnectedCallback while a document is getting torn down since that should not be
        observable to author scripts. The connected, adopted, and attributeChanged callbacks are immune from
        this problem since they don't happen during a document destruction.

        Note that this was also the case prior to this patch since the disconnectedCallback would have been
        added to the current CustomElementReactionQueue which will be destructed without invoking callbacks
        (or hit a release assertion added in r208785 and r209426 for now).

        Tests: fast/custom-elements/disconnected-callback-in-detached-iframe.html
               fast/custom-elements/element-queue-during-document-destruction.html

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueConnectedCallbackIfNeeded): Added an assertion that
        document's refCount hasn't reached zero yet.
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded): Fixed the bug.
        (WebCore::CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded): Added the same assertion.
        (WebCore::CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded): Ditto.

2016-12-08  Daniel Bates  <dabates@apple.com>

        Add Strict Mixed Content Checking and Upgrade Insecure Requests to WebKit Feature Status dashboard
        https://bugs.webkit.org/show_bug.cgi?id=165635

        Rubber-stamped by Ryosuke Niwa.

        * features.json:

2016-12-08  Daniel Bates  <dabates@apple.com>

        Implement Strict Mixed Content Checking
        https://bugs.webkit.org/show_bug.cgi?id=165438
        <rdar://problem/26103867>

        Reviewed by Brent Fulgham and Andy Estes.

        Add support for the CSP directive block-all-mixed-content to enable strict mixed content checking
        as per <https://www.w3.org/TR/2016/CR-mixed-content-20160802/#strict-checking> (2 August 2016).

        Currently WebKit only blocks blockable content as such content can contaminate the security origin
        that loaded it. Optionally-blockable content, including images, would be allowed to load as mixed
        content. When strict mixed content checking is enabled all mixed content is blocked. That is, both
        blockable and optionally-blockable content will be blocked. A web site can opt into strict mixed
        content checking by adding the directive block-all-mixed-content to their content security policy.

        Tests: http/tests/security/contentSecurityPolicy/block-all-mixed-content/data-url-iframe-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/duplicate-directive.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-css-in-iframe-report-only.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-css-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-css-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-iframe-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-iframe-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-blob-url-iframe-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-iframe-with-enforced-and-report-policies.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-iframe-with-inherited-policy.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-javascript-url-iframe-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-image-in-xslt-document-in-iframe-with-inherited-policy.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-plugin-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-plugin-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-script-in-iframe-with-inherited-policy.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-script-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-script-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-xhr-asynchronous-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-xhr-asynchronous-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-xhr-synchronous-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-xhr-synchronous-in-main-frame.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/secure-image-after-upgrade-in-iframe.html
               http/tests/security/contentSecurityPolicy/block-all-mixed-content/secure-image-after-upgrade-redirect-in-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Inherit strict mixed content checking mode from parent document.
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::isStrictMixedContentMode): Added.
        (WebCore::SecurityContext::setStrictMixedContentMode): Added.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Check mixed content policy with respect to the current frame.
        The document in the current frame may have opted into strict mixed content checking or inherited it from
        its parent document.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): Inherit the strict mixed content checking mode from the owner document
        when loading a JavaScript URL in a frame (e.g. <iframe src="javascript:...">) because such URLs inherit
        the security origin of their parent document.
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::canDisplayInsecureContent): Check the content security policy of the document
        and the strict mixed content checking mode bit on the document (in that order) to determine if we are in
        strict mode. Block display of insecure content when in strict mode. Modified to take enum AlwaysDisplayInNonStrictMode (defaults
        to AlwaysDisplayInNonStrictMode::No) as to whether to allow our current relaxed behavior of displaying insecure
        content in non-strict mode.
        (WebCore::MixedContentChecker::canRunInsecureContent): Check the content security policy of the document
        and the strict mixed content checking mode bit on the document (in that order) to determine if we are in
        strict mode. Block running of insecure content when in strict mode.
        * loader/MixedContentChecker.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::checkInsecureContent): Always check mixed content policy with respect to
        the current frame. The document in the current frame may have opted into strict mixed content checking or
        inherited it from its parent document. Also renamed a local variable f to frame to better describe its
        purpose.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowRunningOrDisplayingInsecureContent): Added. Iterate through all the
        policies and report violations with respect to policies that have directive block-all-mixed-content.
        (WebCore::ContentSecurityPolicy::didReceiveHeader): Move logic to set eval() error message from here...
        (WebCore::ContentSecurityPolicy::applyPolicyToScriptExecutionContext): ...to here so that we only perform
        it once we are ready to apply the CSP policy to the script execution context. Additionally, enable
        strict mixed content checking on the script execution context if applicable.
        (WebCore::ContentSecurityPolicy::reportViolation): Added overrides that take a string and a directive list
        object (ContentSecurityPolicyDirectiveList) for the effective violated directive and its associated directive
        list, respectively. We make use of these overrides so as to support reporting block-all-mixed-content
        violations, which are not implemented using a ContentSecurityPolicyDirective object as it seemed sufficient
        to implement it as a boolean on ContentSecurityPolicyDirectiveList.
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::setBlockAllMixedContentEnabled): Added.
        (WebCore::ContentSecurityPolicyDirectiveList::addDirective): Parse the directive block-all-mixed-content.
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        (WebCore::ContentSecurityPolicyDirectiveList::hasBlockAllMixedContentDirective): Added.
        * page/csp/ContentSecurityPolicyDirectiveNames.cpp:
        * page/csp/ContentSecurityPolicyDirectiveNames.h: Add constant for "block-all-mixed-content".

2016-12-08  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=165625

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add/remove files.

        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::GeoNotifier):
        (WebCore::GeoNotifier::hasZeroTimeout):
        (WebCore::GeoNotifier::startTimerIfNeeded):
        * Modules/geolocation/GeoNotifier.h:
        (WebCore::GeoNotifier::create):
        (WebCore::GeoNotifier::options):
        Update to store PositionOptions as a value, and pass the PositionCallback
        as a Ref, rather than a RefPtr, since it is not optional.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeoposition):
        Use auto, to get the good type for Coordinates (Ref).

        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        (WebCore::Geolocation::startUpdating):
        * Modules/geolocation/Geolocation.h:
        Update to pass PositionOptions itself now that it is a plain struct.

        * Modules/geolocation/Geolocation.idl:
        Remove [Custom] extended attribute and add FIXME about nullable annotation. 

        * Modules/geolocation/Geoposition.h:
        Pass/store Coordinates as a Ref.
 
        * Modules/geolocation/PositionOptions.h:
        Convert to be a simple struct.

        * Modules/geolocation/PositionOptions.idl:
        Added.
        
        * bindings/js/JSGeolocationCustom.cpp:
        Removed.

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (URL parser): Relative URLs aren’t resolved correctly when the base URL is an applewebdata: URL
        https://bugs.webkit.org/show_bug.cgi?id=165621

        Reviewed by Dan Bernstein.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        URLs with nonspecial schemes and no slash after the host get no slash as the path to maintain compatibility with all browsers.
        This was proposed to the URL spec in https://github.com/whatwg/url/issues/148
        When such as URL is used as a base URL with a relative path, in order to maintain compatibility with URL::parse we need to prepend
        a slash to the path.  For completeness I added tests with a relative path, a relative query, a relative fragment, and a relative empty string,
        and because the fate of the spec is unclear in this case, I decided to maintain compatibility with URL::parse in all these cases.

2016-12-06  Filip Pizlo  <fpizlo@apple.com>

        Concurrent GC should be stable enough to land enabled on X86_64
        https://bugs.webkit.org/show_bug.cgi?id=164990

        Reviewed by Geoffrey Garen.
        
        Made WebCore down with concurrent marking by adding some locking and adapting to some new API.

        This has new test modes in run-sjc-stress-tests. Also, the way that LayoutTests run is already
        a fantastic GC test.

        * ForwardingHeaders/heap/DeleteAllCodeEffort.h: Added.
        * ForwardingHeaders/heap/LockDuringMarking.h: Added.
        * bindings/js/GCController.cpp:
        (WebCore::GCController::deleteAllCode):
        (WebCore::GCController::deleteAllLinkedCode):
        * bindings/js/GCController.h:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMStructure):
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::DeferredPromise):
        (WebCore::DeferredPromise::clear):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitAdditionalChildren):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::clear):
        (WebCore::EventListenerMap::replace):
        (WebCore::EventListenerMap::add):
        (WebCore::EventListenerMap::remove):
        (WebCore::EventListenerMap::find):
        (WebCore::EventListenerMap::removeFirstEventListenerCreatedFromMarkup):
        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
        (WebCore::EventListenerIterator::EventListenerIterator):
        * dom/EventListenerMap.h:
        (WebCore::EventListenerMap::lock):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::visitJSEventListeners):
        * dom/EventTarget.h:
        (WebCore::EventTarget::visitJSEventListeners): Deleted.
        * dom/Node.cpp:
        (WebCore::Node::eventTargetDataConcurrently):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::clearEventTargetData):
        * dom/Node.h:
        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        (WebCore::registerMemoryReleaseNotifyCallbacks):

2016-12-08  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add strict checking for right parens to selector functions like :matches, :not etc.
        https://bugs.webkit.org/show_bug.cgi?id=165624

        Reviewed by Dean Jackson.

        Unskipped fast/selectors/invalid-functional-pseudo-class.html.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        Bail if we don't actually consume a right parenthesis.

2016-12-08  Jeremy Jones  <jeremyj@apple.com>

        Exit fullscreen on escape key down, not up.
        https://bugs.webkit.org/show_bug.cgi?id=165618
        rdar://problem/29581688

        This problem was introduced by https://bugs.webkit.org/show_bug.cgi?id=165416
        The fix to only exit fullscreen on key down, not key up.

        Reviewed by Jer Noble.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):

2016-12-08  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Unskip background parsing tests
        https://bugs.webkit.org/show_bug.cgi?id=165619

        Reviewed by Zalan Bujtas.

        Change background-position so that the origin being set is tracked
        on a per-x/y basis instead of as a single boolean. The single boolean
        caused lousy computed style dumping, since we would switch into verbose
        mode for both x and y, even if only one of them had a pair set for it.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createPositionListForLayer):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertPositionComponent):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::fillUnsetProperties):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::isBackgroundXOriginSet):
        (WebCore::FillLayer::isBackgroundYOriginSet):
        (WebCore::FillLayer::setBackgroundXOrigin):
        (WebCore::FillLayer::setBackgroundYOrigin):
        (WebCore::FillLayer::clearXPosition):
        (WebCore::FillLayer::clearYPosition):
        (WebCore::FillLayer::isBackgroundOriginSet): Deleted.

2016-12-08  Jeremy Jones  <jeremyj@apple.com>

        pointer lock should exit when a js alert is shown
        https://bugs.webkit.org/show_bug.cgi?id=165423
        rdar://problem/29430803

        Reviewed by Jer Noble.

        Test: pointer-lock/lock-lost-on-alert.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):

2016-12-07  Sam Weinig  <sam@webkit.org>

        [WebIDL] WebGLContextAttributes should be a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=165572

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove unused files.

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        (WebCore::attributesFor3DContext): Deleted.
        Re-work getContext to use JSDOMConvert and use the WebGLContextAttributes dictionary.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Add missing inclusion of dictionaries.

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxActivePixelMemory):
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::is2dType):
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::shouldEnableWebGL):
        (WebCore::HTMLCanvasElement::is3dType):
        (WebCore::HTMLCanvasElement::getContextWebGL):
        * html/HTMLCanvasElement.h:
        Refactor context creation of 2d and WebGL contexts into their own functions. Make the 
        WebGL one take a WebGLContextAttributes struct.

        * html/HTMLCanvasElement.idl:
        No functionality change. Make IDL match the latest spec.

        * html/canvas/CanvasContextAttributes.cpp: Removed.
        * html/canvas/CanvasContextAttributes.h: Removed.
        Remove unneeded base class.

        * html/canvas/WebGLContextAttributes.cpp: Removed.
        * html/canvas/WebGLContextAttributes.h:
        Instead of a class, we can use a type alias of GraphicsContext3D::Attributes for
        WebGLContextAttributes.

        * html/canvas/WebGLContextAttributes.idl:
        Convert to a dictionary.

        * html/canvas/WebGL2RenderingContext.cpp:
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::clearIfComposited):
        (WebCore::WebGLRenderingContextBase::getContextAttributes):
        (WebCore::WebGLRenderingContextBase::applyStencilTest):
        * html/canvas/WebGLRenderingContextBase.h:
        Update to WebGLContextAttributes by value, since it is a simple struct now. Update getContextAttributes
        to return a std::optional<WebGLContextAttributes>.

        * html/canvas/WebGLRenderingContextBase.idl:
        Make getContextAttributes return a nullable WebGLContextAttributes, as per spec.
        
        * platform/graphics/GraphicsContext3D.h:
        Sort attributes into categories, one that match WebGLContextAttributes, and the remainder.

2016-12-08  Zalan Bujtas  <zalan@apple.com>

        Do not create multicolumn context for certain type of renderers.
        https://bugs.webkit.org/show_bug.cgi?id=135601
        <rdar://problem/27686300>

        Reviewed by David Hyatt.

        Certain type of renderers including forms should not initialize multicolumn context for
        their inner (shadow) content. It just does not makes sense and is inline with what other browsers do.

        Test: fast/multicol/no-multicol-for-textareas.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns):
        (WebCore::RenderBlockFlow::requiresColumns):
        * rendering/RenderBlockFlow.h:

2016-12-08  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] REGRESSION: Values of 0 should not be allowed for -webkit-aspect-ratio
        https://bugs.webkit.org/show_bug.cgi?id=165607

        Reviewed by Simon Fraser.

        Unskipped fast/css/aspect-ratio-parsing-tests.html.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitAspectRatio):
        Don't allow 0 as either the left or right value of the ratio.

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

        ::after and ::before don't work on :host
        https://bugs.webkit.org/show_bug.cgi?id=164675
        <rdar://problem/29231874>

        Reviewed by Andreas Kling.

        We didn't allow combining :host with any other selectors. Pseudo elements should be allowed.

        Test: fast/shadow-dom/shadow-host-with-before-after.html

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

            Allow pseudo element matching.

        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):

            Use the normal collectMatchingRulesForList path instead of a direct call to SelectorChecker::matchHostPseudoClass.
            This path supports pseudo elements.

            Pass the information that we are matching :host rules with m_isMatchingHostPseudoClass bit
            similarly to how this is done with slots.

        (WebCore::ElementRuleCollector::ruleMatches):
        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:

            Collect :host rules similarly to other rules.

        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:

            Rename didMoveToShadowHost->mayMatchHostPseudoClass for clarity.

        (WebCore::SelectorChecker::match):

            Enable :host matching in the current context immediately if needed.

        (WebCore::SelectorChecker::matchHostPseudoClass):

            The check for illegal combinations with :host is now done in checkOne().

        (WebCore::localContextForParent):
        (WebCore::SelectorChecker::checkOne):

            In context where :host matches nothing else can match, except pseudo elements.

        * css/SelectorChecker.h:

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:
        Add PerformanceLoggingCocoa.mm after r209181.

2016-12-08  Per Arne Vollan  <pvollan@apple.com>

        [Win] Some versions of Cygwin Perl generate incorrect C++ code.
        https://bugs.webkit.org/show_bug.cgi?id=165524
        rdar://problem/29508043

        Reviewed by Daniel Bates.

        Perl strings with variables seems to be handled differently, depending on which version of
        Cygwin Perl you are running. To make sure they are handled identically, specify variables
        in strings as "${var}" instead of "$var".

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2016-12-08  Alex Christensen  <achristensen@webkit.org>

        Fix EFL build after r209526
        https://bugs.webkit.org/show_bug.cgi?id=165594

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        nullptr is being automatically converted to false everywhere but EFL.
        It should be false.  This function returns a bool.

2016-12-07  Dave Hyatt  <hyatt@apple.com>

        REGRESSION: font shorthand parsing is broken
        https://bugs.webkit.org/show_bug.cgi?id=165594

        Reviewed by Zalan Bujtas.

        Unskipping fast/css/font-calculated-value.html.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeight):
        The new parser did not support calc() in the font-weight property.
        In order to support a positive integer, add new functions to consume
        and handle positive integers without making a CSSPrimitiveValue out of
        the number. These correspond to consumeNumberRaw but are limited to positive
        integers.

        (WebCore::CSSPropertyParser::consumeFont):
        The implicit bool was incorrectly set to true when properties were
        defined because releaseNonNull() cleared the variables being null
        checked. Add separate booleans to avoid this.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        * css/parser/CSSPropertyParserHelpers.h:
        Add the new helpers that consume positive integers without creating
        CSSPrimitiveValues out of them.

2016-12-07  Jeremy Jones  <jeremyj@apple.com>

        Exit pointer lock when page goes into page cache.
        https://bugs.webkit.org/show_bug.cgi?id=165425
        rdar://problem/29430834

        Reviewed by Jer Noble.

        Test: pointer-lock/lock-lost-on-navigation.html

        Cancel pointer lock when page goes into page cache and add methods to Internals
        so it can be tested.

        * dom/Document.cpp:
        (WebCore::Document::setPageCacheState):
        * page/PointerLockController.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pageHasPendingPointerLock):
        (WebCore::Internals::pageHasPointerLock):
        * testing/Internals.h:
        * testing/Internals.idl:

2016-12-07  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Tracks panel does not display in the right location in fullscreen and cannot be dismissed
        https://bugs.webkit.org/show_bug.cgi?id=165575

        Reviewed by Dean Jackson.

        We position the tracks panel programmatically based on the current bounds of the fullscreen button in fullscreen.
        This allows for the tracks panel to be shown in the right spot even after dragging the controls bar. We also use
        the fullscreen media controls as the target for tracking "mousedown" events when the tracks panel is shown in a
        fullscreen presentation.

        Tests: media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html
               media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen .scrubber):
        (.media-controls.mac.fullscreen .tracks-panel): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.showTracksPanel):
        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype.presentInParent):
        (TracksPanel.prototype.hide):
        (TracksPanel.prototype.get bottomY):
        (TracksPanel.prototype.set bottomY):
        (TracksPanel.prototype.commitProperty):
        (TracksPanel.prototype._mousedownTarget):

2016-12-07  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Use a small picture-in-picture button in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=165587

        Reviewed by Dean Jackson.

        Use a newer, smaller asset for picture-in-picture in fullscreen.

        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@2x.png: Added.

2016-12-07  Dean Jackson  <dino@apple.com>

        Remove runtime toggle for pointer-lock
        https://bugs.webkit.org/show_bug.cgi?id=165577
        <rdar://problems/29566996>

        Reviewed by Jon Lee.

        Remove any runtime calls to check if pointer-lock is enabled. It's
        either compiled in or out.

        Covered by existing tests.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPointerLockEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::pointerLockEnabled): Deleted.
        * dom/Document.idl:
        * dom/Element.idl:
        * page/Page.h:
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        (WebCore::PointerLockController::requestPointerUnlockAndForceCursorVisible):

2016-12-07  John Wilander  <wilander@apple.com>

        Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS
        https://bugs.webkit.org/show_bug.cgi?id=165566
        <rdar://problem/29560983>

        Reviewed by Alex Christensen.

        Updated the existing tests.

        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidAcceptHeaderValue):
            Now also accepts ','.
        (WebCore::isValidLanguageHeaderValue):
            Ditto.

2016-12-07  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Stop skipping tests in the css3 LayoutTests subdirectory
        https://bugs.webkit.org/show_bug.cgi?id=165574

        Reviewed by Dean Jackson.

        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::insertRule):
        The old parser didn't support the creation of @namespace rules in the
        CSS OM, but the new parser does. We need to ensure that just like for
        @import rules, that the insertion of a @namespace rule inside a
        @supports rule is not allowed. This test passed in the old parser because
        the rule just didn't get created, but in the new parser, we need to
        add a check along with the @import rule check to ensure it isn't allowed.

2016-12-07  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Remove aspect ratio button
        https://bugs.webkit.org/show_bug.cgi?id=165571

        Reviewed by Dean Jackson.

        Since we do not have a way to toggle letterboxing on an HTMLMediaElement, we remove the
        corresponding button in the media controls.

        * Modules/modern-media-controls/controls/aspect-ratio-button.js: Removed.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        * Modules/modern-media-controls/js-files:

2016-12-07  Jeremy Jones  <jeremyj@apple.com>

        One esc to exit fullscreen and pointer lock
        https://bugs.webkit.org/show_bug.cgi?id=165416
        rdar://problem/29430711

        Reviewed by Jer Noble.

        Test: pointer-lock/lock-lost-on-esc-in-fullscreen.html

        When handling escape, also exit fullscreen on escape.
        This also means that escape can exit fullscreen in TestRunner.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):

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

        [JSC] Drop translate phase in module loader
        https://bugs.webkit.org/show_bug.cgi?id=164861

        Reviewed by Saam Barati.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2016-12-07  Keith Rollin  <krollin@apple.com>

        Network event record/replay
        https://bugs.webkit.org/show_bug.cgi?id=164527
        <rdar://problem/29168157>

        Reviewed by Alex Christensen.

        Export parseURLEncodedForm.

        No new tests -- no functionality added, changed, or removed.

        * platform/URLParser.h:

2016-12-07  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Consolidate string/ident/url serialization functions
        https://bugs.webkit.org/show_bug.cgi?id=165552

        Reviewed by Zalan Bujtas.

        Right now CSSParser has string, ident and url serialization functions
        called quoteCSStringIfNeeded (which actually serializes both strings and
        identifiers), as well as quoteCSSURLIfNeeded.

        CSSMarkup already has serialization functions that exist outside of the
        CSSParser and that handle serialization of strings, idents and URLs. This
        patch eliminates the CSSParser functions and consolidates all of the
        serialization to use CSSMarkup's functions.

        Note that we are not spec-compliant at all here, and so I had to amend
        the functions to support our non-spec-compliant serialization. The goal
        of this patch is consolidation and not to fix our broken serialization.

        Notable changes include parameterizing string serialization so that
        both single and double quotes are supported, since in the existing code
        we're sometimes spec-compliant (CSSSelectors) and sometimes not
        (CSSPrimitiveValue).

        We also overload CSS_STRING primitive value type and have it act as both
        a string and a custom identifier. This is lame, since the parser should
        have made two different types of objects instead, but since our parser
        doesn't do that yet, I added a serializeAsStringOrCustomIdent that
        preserves our old behavior of "quote the string only if needed." In this
        case what that really meant was "Try to guess that we were originally a
        custom ident and leave off quotes if so." This function will go away
        once we properly create CSSStringValues and CSSCustomIdentValues instead
        of turning the latter into strings.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildPathString):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::customCSSText):
        * css/CSSMarkup.cpp:
        (WebCore::isCSSTokenizerURL):
        (WebCore::serializeString):
        (WebCore::serializeURL):
        (WebCore::serializeAsStringOrCustomIdent):
        (WebCore::serializeURI): Deleted.
        * css/CSSMarkup.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/parser/CSSParser.cpp:
        (WebCore::isCSSTokenizerIdent): Deleted.
        (WebCore::isCSSTokenizerURL): Deleted.
        (WebCore::quoteCSSStringInternal): Deleted.
        (WebCore::quoteCSSString): Deleted.
        (WebCore::quoteCSSStringIfNeeded): Deleted.
        (WebCore::quoteCSSURLIfNeeded): Deleted.
        * css/parser/CSSParser.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):

2016-12-07  Dean Jackson  <dino@apple.com>

        Expose internal API to detect media documents
        https://bugs.webkit.org/show_bug.cgi?id=165559
        <rdar://problems/29564054>

        Reviewed by Antoine Quint.

        Expose via MediaControlsHost whether or not we're in
        a MediaDocument.

        Since MediaControlsHost is only exposed to our
        internal controls, it's not possible to test this
        directly. However, a subsequent test for media documents
        with audio-only content will cover this change.

        * Modules/mediacontrols/MediaControlsHost.cpp: Add isInMediaDocument and put const on
        various methods that should have it.
        (WebCore::MediaControlsHost::captionDisplayMode):
        (WebCore::MediaControlsHost::supportsFullscreen):
        (WebCore::MediaControlsHost::isVideoLayerInline):
        (WebCore::MediaControlsHost::isInMediaDocument):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl: Add isInMediaDocument.

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

        ASSERTION FAILED: count >= 1 in WebCore::RenderMultiColumnSet::columnCount
        https://bugs.webkit.org/show_bug.cgi?id=136365
        <rdar://problem/27686727>

        Reviewed by Simon Fraser.

        Margin value overflow ends up confusing the column count computing logic.

        Test: fast/multicol/assert-on-column-count-when-zoomed-in.html

        * css/StyleResolver.cpp:
        (WebCore::addIntrinsicMargins):

2016-12-07  Ryosuke Niwa  <rniwa@webkit.org>

        document.caretRangeFromPoint doesn't retarget the resultant Range correctly.
        https://bugs.webkit.org/show_bug.cgi?id=165146

        Reviewed by Sam Weinig.

        The bug was caused by caretRangeFromPoint not retargeting the resultant Range correctly.
        Namely, it's possible for RenderObject::positionForPoint to move across shadow boundary
        even if node was identically equal to ancestorInThisScope(node).

        Fixed the bug by directly retargeting the range's container node and its offset as done
        for elementFromPoint in r206795.

        Test: fast/shadow-dom/caret-range-from-point-in-shadow-tree.html

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

2016-12-07  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Entering fullscreen and returning to inline shows fullscreen controls
        https://bugs.webkit.org/show_bug.cgi?id=165536

        Reviewed by Tim Horton.

        We regressed when we implemented the fix for webkit.org/b/165494 and we started to rely solely
        on the "webkitpresentationmodechanged" event to identify presention mode changes. As it turns out,
        when the "webkitpresentationmodechanged" event is dispatched when exiting fullscreen and returning
        to the inline presentation mode, querying the "webkitPresentationMode" property says "inline" while
        "webkitDisplayingFullscreen" still returns true (raised as webkit.org/b/165538).
        
        We now use the "webkitPresentationMode" property when that property is supported and we're using the
        "webkitpresentationmodechanged" event, and we use the "webkitDisplayingFullscreen" property otherwise.

        Test: media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-inline.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits):

2016-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll position jumps to the origin when scrolling without momentum at the end of a scroll snapping container
        https://bugs.webkit.org/show_bug.cgi?id=165474
        <rdar://problem/29534305>

        Reviewed by Simon Fraser.

        When initializing an AppKit _NSScrollingMomentumCalculator, if the initial and target positions are the same and
        the initial velocity is (0, 0), the momentum calculator will output (0, 0) as the animated scroll position when
        animating. This causes the scroll position to jump to the top left in some cases when scrolling in scroll snap
        containers. To fix this, we teach the ScrollingMomentumCalculatorMac to return an animation duration of 0 and
        an animated scroll position equal to the final scroll position when this is the case.

        Test: tiled-drawing/scrolling/scroll-snap/scrolling-jumps-to-top.html

        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::animationDuration):

2016-12-07  Nan Wang  <n_wang@apple.com>

        AX: menu type toolbar should be mapped correctly on Mac
        https://bugs.webkit.org/show_bug.cgi?id=165537

        Reviewed by Chris Fleizach.

        The menu tag with a toolbar type should have the corresponding role.

        Test: accessibility/mac/menu-type-toolbar.html

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

2016-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new project for recording and playing back editing commands in editable web content
        https://bugs.webkit.org/show_bug.cgi?id=165114
        <rdar://problem/29408135>

        Reviewed by Beth Dakin.

        Adds new scripts used to record and play back editing, as well as a new Xcode Copy files phase that pushes these
        scripts to the internal system directory when installing. See the Tools ChangeLog and individual comments below
        for more details. Covered by 3 new unit tests in the EditingHistory project.

        * InternalScripts/DumpEditingHistory.js: Added.
        (beginProcessingTopLevelUpdate):
        (endProcessingTopLevelUpdate):
        (appendDOMUpdatesFromRecords):
        (appendSelectionUpdateIfNecessary):

        Adds new entries into the top-level list of DOM updates captured when editing. Respectively, these are input
        events and selection changes.

        (EditingHistory.getEditingHistoryAsJSONString):
        * InternalScripts/EditingHistoryUtil.js: Added.
        (prototype._scramble):
        (prototype.applyToText):
        (prototype.applyToFilename):
        (prototype._scrambedNumberIndexForCode):
        (prototype._scrambedLowercaseIndexForCode):
        (prototype._scrambedUppercaseIndexForCode):

        Naive implementation of an obfuscator. Currently, this only affects alphanumeric characters. Obfuscation is off
        by default, but can be toggled on in JavaScript.

        (elementFromMarkdown):
        (GlobalNodeMap):
        (GlobalNodeMap.prototype.nodesForGUIDs):
        (GlobalNodeMap.prototype.guidsForTNodes):
        (GlobalNodeMap.prototype.nodeForGUID):
        (GlobalNodeMap.prototype.guidForNode):
        (GlobalNodeMap.prototype.hasGUIDForNode):
        (GlobalNodeMap.prototype.nodes):
        (GlobalNodeMap.prototype.toObject):
        (GlobalNodeMap.fromObject):
        (GlobalNodeMap.dataForNode):
        (GlobalNodeMap.elementFromTagName):
        (GlobalNodeMap.nodeAttributesToObject):
        (GlobalNodeMap.prototype.descriptionHTMLForGUID):
        (GlobalNodeMap.prototype.descriptionHTMLForNode):

        The GlobalNodeMap keeps track of every node that has appeared in the DOM, assigning each node a globally unique
        identifier (GUID). This GUID is used when reconstructing the DOM, as well as unapplying or applying editing.

        (SelectionState):
        (SelectionState.prototype.isEqual):
        (SelectionState.prototype.applyToSelection):
        (SelectionState.fromSelection):
        (SelectionState.prototype.toObject):
        (SelectionState.fromObject):

        Represents a snapshot of the Selection state (determined by getSelection()).

        (DOMUpdate):
        (DOMUpdate.prototype.apply):
        (DOMUpdate.prototype.unapply):
        (DOMUpdate.prototype.targetNode):
        (DOMUpdate.prototype.detailsElement):
        (DOMUpdate.ofType):
        (DOMUpdate.fromRecords):

        A DOMUpdate is an abstract object representing a change in the DOM that may be applied and unapplied. These are
        also serializable as hashes, which may then be converted to JSON when generating editing history data.

        (ChildListUpdate):
        (ChildListUpdate.prototype.apply):
        (ChildListUpdate.prototype.unapply):
        (ChildListUpdate.prototype._nextSibling):
        (ChildListUpdate.prototype._removedNodes):
        (ChildListUpdate.prototype._addedNodes):
        (ChildListUpdate.prototype.toObject):
        (ChildListUpdate.prototype.detailsElement):
        (ChildListUpdate.fromObject):

        These three update types correspond to the three types of DOM mutations. These may appear as top-level updates
        if they are not captured during an input event, but for the majority of user-input-driven changes, they will be
        children of an input event.

        (CharacterDataUpdate):
        (CharacterDataUpdate.prototype.apply):
        (CharacterDataUpdate.prototype.unapply):
        (CharacterDataUpdate.prototype.detailsElement):
        (CharacterDataUpdate.prototype.toObject):
        (CharacterDataUpdate.fromObject):
        (AttributeUpdate):
        (AttributeUpdate.prototype.apply):
        (AttributeUpdate.prototype.unapply):
        (AttributeUpdate.prototype.detailsElement):
        (AttributeUpdate.prototype.toObject):
        (AttributeUpdate.fromObject):
        (SelectionUpdate):
        (SelectionUpdate.prototype.apply):
        (SelectionUpdate.prototype.unapply):
        (SelectionUpdate.prototype.toObject):
        (SelectionUpdate.fromObject):
        (SelectionUpdate.prototype._rangeDescriptionHTML):
        (SelectionUpdate.prototype._anchorDescriptionHTML):
        (SelectionUpdate.prototype._focusDescriptionHTML):
        (SelectionUpdate.prototype.detailsElement):

        Represents a change in the Selection. While no changes to the DOM structure occur as a result of a
        SelectionUpdate, the information contained in these updates is used to determine where the selection should be
        when rewinding or playing back the editing history.

        (InputEventUpdate):
        (InputEventUpdate.prototype._obfuscatedData):
        (InputEventUpdate.prototype.apply):
        (InputEventUpdate.prototype.unapply):
        (InputEventUpdate.prototype.toObject):
        (InputEventUpdate.fromObject):
        (InputEventUpdate.prototype.detailsElement):

        Represents an update due to user input, which consists of some number of child DOM mutation updates.

        * WebCore.xcodeproj/project.pbxproj:

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

        ASSERT crash while running media-source/mediasource-activesourcebuffers.html under Stress GC bot.
        https://bugs.webkit.org/show_bug.cgi?id=165514

        Reviewed by Eric Carlson.

        If a track associated with MSE is disabled after a SourceBuffer begins parsing a queued
        append operation, SourceBuffer can get into a state where it asks SourceBufferPrivateAVFObjC
        if it is ready to accept data for that disabled track. This causes an ASSERT_NOT_REACHED in
        isReadyForMoreData().

        However, this seems to be a valid condition; we can safely just return "false" from
        isReadyForMoreSamples() (and also bail from notifyClientWhenReadyForMoreSamples()) when asked
        about a disabled track.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples):

2016-12-07  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Eliminate the Scope class and fold it into CSSTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=165532

        Reviewed by Dean Jackson.

        The Scope class, nested inside CSSTokenizer, is both poorly named and serves
        no purpose. It's especially weird that it was the entry point into tokenization
        instead of CSSTokenizer.

        Eliminate the class, fold its members and functions into CSSTokenizer, and have
        callers just make a CSSTokenizer instead.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::parseSelector):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseValue):
        (WebCore::CSSParserImpl::parseCustomPropertyValue):
        (WebCore::CSSParserImpl::parseInlineStyleDeclaration):
        (WebCore::CSSParserImpl::parseDeclarationList):
        (WebCore::CSSParserImpl::parseRule):
        (WebCore::CSSParserImpl::parseStyleSheet):
        (WebCore::CSSParserImpl::parseKeyframeKeyList):
        (WebCore::CSSParserImpl::parseDeclarationListForInspector):
        (WebCore::CSSParserImpl::parseStyleSheetForInspector):
        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::CSSTokenizer):
        (WebCore::CSSTokenizer::tokenRange):
        (WebCore::CSSTokenizer::tokenCount):
        (WebCore::CSSTokenizer::registerString):
        (WebCore::CSSTokenizer::Scope::Scope): Deleted.
        (WebCore::CSSTokenizer::Scope::tokenRange): Deleted.
        (WebCore::CSSTokenizer::Scope::tokenCount): Deleted.
        * css/parser/CSSTokenizer.h:
        (WebCore::CSSTokenizer::Scope::storeString): Deleted.
        * css/parser/CSSTokenizerInputStream.cpp:
        (WebCore::CSSTokenizerInputStream::CSSTokenizerInputStream):
        * css/parser/CSSTokenizerInputStream.h:
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::parseMediaQuerySet):
        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::SizesAttributeParser):

2016-12-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused and mostly untested Page domain commands and events
        https://bugs.webkit.org/show_bug.cgi?id=165507

        Reviewed by Brian Burg.

        Remove any code associated with the commands/events being removed.

        * inspector/DOMPatchSupport.cpp:
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::handleJavaScriptDialog): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::scriptsEnabledImpl): Deleted.
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialogImpl): Deleted.
        (WebCore::InspectorInstrumentation::didRunJavaScriptDialogImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::scriptsEnabled): Deleted.
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialog): Deleted.
        (WebCore::InspectorInstrumentation::didRunJavaScriptDialog): Deleted.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::archive):
        (WebCore::createXHRTextDecoder): Deleted.
        (WebCore::InspectorPageAgent::getScriptExecutionStatus): Deleted.
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled): Deleted.
        (WebCore::InspectorPageAgent::willRunJavaScriptDialog): Deleted.
        (WebCore::InspectorPageAgent::didRunJavaScriptDialog): Deleted.
        (WebCore::InspectorPageAgent::scriptsEnabled): Deleted.
        (WebCore::InspectorPageAgent::handleJavaScriptDialog): Deleted.
        * inspector/InspectorPageAgent.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        * page/Settings.cpp:
        (WebCore::Settings::setScriptEnabled):

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

        [pointer-lock] Cursor should become visible when exiting pointer-lock via ESC key.
        https://bugs.webkit.org/show_bug.cgi?id=165377

        Reviewed by Eric Carlson.

        Follow up to previous patch; clear the m_forceCursorVisibleUponUnlock flag upon losing
        pointer lock, so that subsequent unlocks don't erroneously cause the cursor to become
        visible. 

        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::didLosePointerLock):

2016-12-06  Geoffrey Garen  <ggaren@apple.com>

        performance.now() should truncate to 100us
        https://bugs.webkit.org/show_bug.cgi?id=165503
        <rdar://problem/29544531>

        Reviewed by Mark Lam.

        * page/Performance.cpp:
        (WebCore::Performance::reduceTimeResolution):

2016-12-07  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Turn back on a bunch of layout tests
        https://bugs.webkit.org/show_bug.cgi?id=165529

        Reviewed by Zalan Bujtas.

        Fixes fast/css/transform-origin-parsing.html.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):
        The implicit check was relying on a null check of the z value, but
        we called releaseNonNull on it already. This meant all z properties were
        marked as implicit incorrectly. Fix by storing whether or not we had a z
        value in a local variable.

2016-12-07  Andreas Kling  <akling@apple.com>

        [iOS] Remove bitrotted FrameLoader attempt to limit page caching under memory pressure.
        <https://webkit.org/b/165527>

        Reviewed by Antti Koivisto.

        This code no longer does anything, as the page cache is hard capped
        at 0 entries while under memory pressure.

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

2016-12-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Use tap and pinch gestures on iOS
        https://bugs.webkit.org/show_bug.cgi?id=165518

        Reviewed by Dean Jackson.

        We now use touch events to identify taps and pinches on media controls to respond immediately
        to user interaction on buttons and enter fullscreen when pinching out.

        * Modules/modern-media-controls/controls/button.css:
        (button):
        * Modules/modern-media-controls/controls/button.js:
        (Button):
        (Button.prototype.handleEvent):
        (Button.prototype.gestureRecognizerStateDidChange):
        (Button.prototype._notifyDelegateOfActivation):
        (Button.prototype._handleUIEvent): Deleted.
        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set fadesWhileIdle):
        (ControlsBar.prototype.gestureRecognizerStateDidChange):
        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype._updateImage):
        (IconButton):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.gestureRecognizerStateDidChange):
        * Modules/modern-media-controls/gesture-recognizers/gesture-recognizer.js: Added.
        (GestureRecognizer):
        (GestureRecognizer.prototype.get state):
        (GestureRecognizer.prototype.set state):
        (GestureRecognizer.prototype.get target):
        (GestureRecognizer.prototype.set target):
        (GestureRecognizer.prototype.get numberOfTouches):
        (GestureRecognizer.prototype.get enabled):
        (GestureRecognizer.prototype.set enabled):
        (GestureRecognizer.prototype.reset):
        (GestureRecognizer.prototype.locationInElement):
        (GestureRecognizer.prototype.locationInClient):
        (GestureRecognizer.prototype.locationOfTouchInElement):
        (GestureRecognizer.prototype.touchesBegan):
        (GestureRecognizer.prototype.touchesMoved):
        (GestureRecognizer.prototype.touchesEnded):
        (GestureRecognizer.prototype.touchesCancelled):
        (GestureRecognizer.prototype.gestureBegan):
        (GestureRecognizer.prototype.gestureChanged):
        (GestureRecognizer.prototype.gestureEnded):
        (GestureRecognizer.prototype.enterPossibleState):
        (GestureRecognizer.prototype.enterBeganState):
        (GestureRecognizer.prototype.enterEndedState):
        (GestureRecognizer.prototype.enterCancelledState):
        (GestureRecognizer.prototype.enterFailedState):
        (GestureRecognizer.prototype.enterChangedState):
        (GestureRecognizer.prototype.enterRecognizedState):
        (GestureRecognizer.prototype.handleEvent):
        (GestureRecognizer.prototype._initRecognizer):
        (GestureRecognizer.prototype._updateBaseListeners):
        (GestureRecognizer.prototype._removeTrackingListeners):
        (GestureRecognizer.prototype._updateTargetTouches):
        (GestureRecognizer.prototype._updateKeyboardModifiers):
        * Modules/modern-media-controls/gesture-recognizers/pinch.js: Added.
        (PinchGestureRecognizer):
        (PinchGestureRecognizer.prototype.get velocity):
        (PinchGestureRecognizer.prototype.touchesBegan):
        (PinchGestureRecognizer.prototype.touchesMoved):
        (PinchGestureRecognizer.prototype.touchesEnded):
        (PinchGestureRecognizer.prototype.gestureBegan):
        (PinchGestureRecognizer.prototype.gestureChanged):
        (PinchGestureRecognizer.prototype.gestureEnded):
        (PinchGestureRecognizer.prototype.reset):
        (PinchGestureRecognizer.prototype._recordGesture):
        (PinchGestureRecognizer.prototype._updateStateWithEvent):
        (PinchGestureRecognizer.prototype._distance):
        * Modules/modern-media-controls/gesture-recognizers/tap.js: Added.
        (TapGestureRecognizer):
        (TapGestureRecognizer.prototype.touchesBegan):
        (TapGestureRecognizer.prototype.touchesMoved):
        (TapGestureRecognizer.prototype.touchesEnded):
        (TapGestureRecognizer.prototype.reset):
        (TapGestureRecognizer.prototype.locationInElement):
        (TapGestureRecognizer.prototype.locationInClient):
        (TapGestureRecognizer.prototype._clearTimer):
        (TapGestureRecognizer.prototype._rewindTimer):
        (TapGestureRecognizer.prototype._timerFired):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/airplay-support.js:
        (AirplaySupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport):
        (ControlsVisibilitySupport.prototype.handleEvent):
        (ControlsVisibilitySupport.prototype.syncControl): Deleted.
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport):
        (FullscreenSupport.prototype.iOSInlineMediaControlsRecognizedPinchInGesture):
        (FullscreenSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport):
        (MediaControllerSupport.prototype.handleEvent):
        (MediaControllerSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/mute-support.js:
        (MuteSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/playback-support.js:
        (PlaybackSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/skip-back-support.js:
        (SkipBackSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.buttonWasClicked): Deleted.

2016-12-06  Dean Jackson  <dino@apple.com>

        Apply styling to media documents with modern controls
        https://bugs.webkit.org/show_bug.cgi?id=165499
        <rdar://problems/29543847>

        Reviewed by Antoine Quint.

        Forgot to commit most of the changes in MediaDocument.cpp :(

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2016-12-06  Simon Fraser  <simon.fraser@apple.com>

        Two tiled drawing tests failing with visual viewports enabled.
        https://bugs.webkit.org/show_bug.cgi?id=165489

        Reviewed by Dean Jackson.

        computeLayoutViewportOrigin() gets called for iframes when the layout viewport
        is zero-sized, but the visual viewport is non-zero. It doesn't really make sense
        to compute a layout viewport when the visual viewport is larger than the layout
        viewport, but if this happens just anchor the layout viewport at the origin
        of the visual viewport.

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

2016-12-04  Darin Adler  <darin@apple.com>

        Remove various stray uses of WebCore::Dictionary
        https://bugs.webkit.org/show_bug.cgi?id=165358

        Reviewed by Sam Weinig.

        I discovered three completely unused classes in the MediaStream code:
        MediaTrackConstraint, MediaTrackConstraintSet, and MediaTrackConstraints.
        While there is some chance we may implement these at some point, they are
        likely to be dictionaries or some other kind of data structure rather than
        clases, and there is no reason to keep the current classes.

        * CMakeLists.txt: Removed MediaTrackConstraint, MediaTrackConstraintSet,
        and MediaTrackConstraints.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.

        * Modules/indexeddb/IDBDatabase.h: Removed include of Dictionary.h.
        * Modules/indexeddb/IDBObjectStore.cpp: Added include of HeapInlines.h.
        * Modules/indexeddb/IDBRequest.cpp: Added include of StrongInlines.h.
        * Modules/indexeddb/IDBTransaction.cpp: Added include of SerializedScriptValue.h.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getConstraints): Deleted.
        This function is implemented entirely in the bindings layer.
        * Modules/mediastream/MediaStreamTrack.h: Removed getConstraints.

        * Modules/mediastream/MediaTrackConstraint.cpp: Removed.
        * Modules/mediastream/MediaTrackConstraint.h: Removed.
        * Modules/mediastream/MediaTrackConstraint.idl: Removed.
        * Modules/mediastream/MediaTrackConstraintSet.cpp: Removed.
        * Modules/mediastream/MediaTrackConstraintSet.h: Removed.
        * Modules/mediastream/MediaTrackConstraintSet.idl: Removed.
        * Modules/mediastream/MediaTrackConstraints.cpp: Removed.
        * Modules/mediastream/MediaTrackConstraints.h: Removed.
        * Modules/mediastream/MediaTrackConstraints.idl: Removed.

        * Modules/mediastream/NavigatorUserMedia.idl: Use the type names from the latest
        getUserMedia specification for the arguments to webkitGetUserMedia; not sure they
        are precisely correct for this legacy function, but since this is a JSBuiltin,
        it's all ignored anyway. Just important not to call anything "Dictionary".

        * WebCore.xcodeproj/project.pbxproj: Removed MediaTrackConstraint, MediaTrackConstraintSet,
        and MediaTrackConstraints.

        * bindings/js/JSApplePaySessionCustom.cpp:
        (WebCore::JSApplePaySession::completeShippingMethodSelection): Use uncheckedArgument, since
        the code explicitly checks the number of arguments.
        (WebCore::JSApplePaySession::completeShippingContactSelection): Ditto.
        (WebCore::JSApplePaySession::completePaymentMethodSelection): Ditto.

        * bindings/js/JSFontFaceCustom.cpp: Removed include of Dictionary.h.
        * dom/Document.cpp: Ditto.
        * dom/Element.cpp: Ditto.

        * dom/Element.h: Removed forward declaration of Dictionary.

2016-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        After preventing a beforeinput event, an input event is fired when formatting rich text
        https://bugs.webkit.org/show_bug.cgi?id=165435
        <rdar://problem/29522314>

        Reviewed by Ryosuke Niwa.

        This regressed after I refactored some input event event dispatch logic when formatting text in r208461.
        I moved the logic for dispatching input events when applying styles into Editor::applyStyle, but left out an
        early return after firing the beforeinput event if the default behavior was prevented, which caused us to
        continue on and dispatch an input event. The fix is to bail from applyStyle if default was prevented.

        Augmented an existing layout test to cover this case.

        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):

2016-12-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Instantiate iOS media controls
        https://bugs.webkit.org/show_bug.cgi?id=165498

        Reviewed by Dean Jackson.

        Add support for the modern media controls runtime flags in RenderThemeIOS and, when instantiating iOS controls,
        return an IOSInlineMediaControls class.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._controlsClass):
        (MediaController):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet):
        (WebCore::RenderThemeIOS::mediaControlsScript):
        (WebCore::RenderThemeIOS::mediaControlsBase64StringForIconAndPlatform):

2016-12-06  Dean Jackson  <dino@apple.com>

        Apply styling to media documents with modern controls
        https://bugs.webkit.org/show_bug.cgi?id=165499
        <rdar://problems/29543847>

        Reviewed by Antoine Quint.

        Existing MediaDocuments got styling from the injected style
        sheet, which had rules for such documents. The modern media controls
        use a scoped style rule, so we can't touch the document style. Instead,
        inline the style directly from MediaDocument.

        Test: media/modern-media-controls/media-documents/background-color-and-centering.html

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2016-12-06  Zalan Bujtas  <zalan@apple.com>

        Move RenderElement::rendererForRootBackground to RenderView.
        https://bugs.webkit.org/show_bug.cgi?id=165454

        Reviewed by Simon Fraser.

        Currently RenderElement::rendererForRootBackground can only be called on document element's renderer.
        This patch removes this limitation and moves the functionality from RenderElement to RenderView.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::calculateExtendedBackgroundMode):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::rendererForRootBackground): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::rendererBackgroundColor):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::rendererForRootBackground):
        (WebCore::rendererObscuresBackground):
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::rootBackgroundIsEntirelyFixed):
        * rendering/RenderView.h:

2016-12-05  Jiewen Tan  <jiewen_tan@apple.com>

        [Part 1 of 2] Add support for SPKI format while doing SubtleCrypto.importKey/exportKey
        https://bugs.webkit.org/show_bug.cgi?id=129978
        <rdar://problem/21799829>

        This is part 1 of Bug 129978. In this patch, it adds the SPKI format support for
        SubtleCrypto.importKey/exportKey. Currently support algorithms are RSAES-PKCS1-v1_5,
        RSASSA-PKCS1-v1_5 and RSA-OAEP.

        Reviewed by Brent Fulgham.

        Tests: crypto/subtle/rsa-import-jwk-key-export-spki-key.html
               crypto/subtle/rsa-import-spki-key-export-jwk-key.html
               crypto/subtle/rsa-import-spki-key-export-spki-key.html
               crypto/subtle/rsa-import-spki-small-key.html
               crypto/subtle/rsa-oaep-generate-export-key-spki.html
               crypto/subtle/rsa-oaep-import-spki-key.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-export-key-spki.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-spki-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-spki.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-spki-key.html
               crypto/workers/subtle/rsa-export-spki-key.html
               crypto/workers/subtle/rsa-import-spki-key.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::toKeyData):
        * crypto/CommonCryptoUtilities.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::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/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::exportSpki):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::bytesUsedToEncodedLength):
        (WebCore::bytesNeededForEncodedLength):
        (WebCore::addEncodedASN1Length):
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::exportSpki):

2016-12-06  Simon Fraser  <simon.fraser@apple.com>

        Fix editing text flakiness introduced in r209411
        https://bugs.webkit.org/show_bug.cgi?id=165500

        Reviewed by Dean Jackson.

        The "insideFixed" out param was left uninitialized sometimes. This affected FrameSelection's 
        m_caretInsidePositionFixed, which caused problems in these tests.

        Tested by editing tests in WK1.

        * editing/htmlediting.cpp:
        (WebCore::absoluteBoundsForLocalCaretRect):

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-12-06  Saam Barati  <sbarati@apple.com>

        Remove old Wasm object model
        https://bugs.webkit.org/show_bug.cgi?id=165481

        Reviewed by Keith Miller and Mark Lam.

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

2016-12-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media controls use the fullscreen layout after going from inline to fullscreen to PiP to inline
        https://bugs.webkit.org/show_bug.cgi?id=165494

        Reviewed by Dean Jackson.

        We would only call _updateControlsIfNeeded() when entering or leaving fullscreen, so we going from fullscreen to PiP to
        inline would retain fullscreen controls since we would not check for the event that indicates we went back from PiP to
        inline. On platforms that support it, we listen to the "webkitpresentationmodechanged" event
        to update the controls, and only "webkitfullscreenchange" on others (ie. Yosemite).

        Test: media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-pip-to-inline.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._returnMediaLayerToInlineIfNeeded):

2016-12-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Rendering issues with controls bar when captions are on
        https://bugs.webkit.org/show_bug.cgi?id=165390

        Reviewed by Dean Jackson.

        We would face some layout issues with captions due to RenderImage::layoutShadowControls()
        expecting a single RenderBox in the media controls shadow root, which was the case with
        legacy media controls, but no longer the case with modern media controls. We now host
        both the captions and the media controls elements under a single container, and add
        an asertion in RenderImage to check that a single RenderBox child exists.

        Test: media/modern-media-controls/media-controller/media-controller-single-container.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container):
        (.media-controls-container,):
        (.media-controls-container > *):
        (.media-controls):
        * Modules/modern-media-controls/controls/text-tracks.css:
        (video::-webkit-media-text-track-container):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype._updateControlsIfNeeded):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layoutShadowControls):

2016-12-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Automatically hide the controls bar when the mouse is idle
        https://bugs.webkit.org/show_bug.cgi?id=165492

        Reviewed by Dean Jackson.

        We now automatically hide the controls bar. When the media is no longer paused, the controls remain
        visible for 4 seconds, regardless of where the mouse pointer is located. When the user mouses over the
        media, the controls become visible and automatically hide 4 seconds after the last time the user has
        moved his mouse over the media. When the user mouses out of the media, the controls automatically hide.
        When the mouse is over the controls bar, it remains visible. When the media is paused, the controls bar
        remain visible regardless of the mouse position.

        Tests: media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-enter-and-mouse-leave.html
               media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-enter-over-controls-bar.html
               media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html
               media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html
               media/modern-media-controls/media-controller/media-controller-auto-hide-rewind-with-mouse-enter.html
               media/modern-media-controls/media-controller/media-controller-auto-hide.html

        * Modules/modern-media-controls/controls/controls-bar.css: Added.
        (.controls-bar):
        (.controls-bar.faded):
        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.get userInteractionEnabled):
        (ControlsBar.prototype.set userInteractionEnabled):
        (ControlsBar.prototype.get fadesWhileIdle):
        (ControlsBar.prototype.set fadesWhileIdle):
        (ControlsBar.prototype.get visible):
        (ControlsBar.prototype.set visible):
        (ControlsBar.prototype.get faded):
        (ControlsBar.prototype.set faded):
        (ControlsBar.prototype.handleEvent):
        (ControlsBar.prototype.commitProperty):
        (ControlsBar.prototype._cancelAutoHideTimer):
        (ControlsBar.prototype._rewindAutoHideTimer):
        (ControlsBar.prototype._autoHideTimerFired):
        * Modules/modern-media-controls/controls/media-controls.js:
        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get mediaEvents):
        (ControlsVisibilitySupport.prototype.syncControl):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):

2016-12-06  Zalan Bujtas  <zalan@apple.com>

        Can not select whole line when using flexbox
        https://bugs.webkit.org/show_bug.cgi?id=165299

        Reviewed by David Hyatt.

        RootInlineBox::selectionTopAdjustedForPrecedingBlock assumes that the preceding block is
        always above the current line. However in certain layout contexts (flex as an example) the block before
        could just be on the same line as the current one.

        This patch checks if we actually need to adjust the selection top to avoid vertical selection overlap.

        Test: fast/flexbox/flexbox-fail-to-select-same-line.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockBeforeWithinSelectionRoot): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::blockBeforeWithinSelectionRoot):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):

2016-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Add more assertions to ElementQueue diagnose a bug
        https://bugs.webkit.org/show_bug.cgi?id=164814

        Reviewed by Alexey Proskuryakov.

        Set m_invoking in release builds now that assertions are also run in release builds.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll):

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

        YouTube sometimes pauses when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=165468

        Reviewed by Eric Carlson.

        Test: media/media-session-restrictions.html

        The bitfield which represents the restrictions for "VideoAudio" media type was unititialized,
        leading to what was effectively a random set of restrictions at runtime.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::resetRestrictions):
        * testing/Internals.cpp:
        (WebCore::mediaTypeFromString):
        (WebCore::Internals::setMediaSessionRestrictions):
        (WebCore::Internals::mediaSessionRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2016-12-06  Mark Lam  <mark.lam@apple.com>

        Introduce the concept of Immutable Prototype Exotic Objects to comply with the spec.
        https://bugs.webkit.org/show_bug.cgi?id=165227
        <rdar://problem/29442665>

        Reviewed by Saam Barati.

        Make all objects in window.__proto__'s prototype chain immutable prototype exotic
        objects.  This gives us roughly equivalent behavior to other browsers.  

        Firefox's behavior differ slightly in that Firefox will fail any attempted
        assignment their __proto__, while the immutable prototype exotic objects will
        only fail if the assignment is of a different value.  See
        https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects.

        Chrome differs in that assignment to window.__proto__ is also handled like an
        immutable prototype exotic object.  Instead we adhere to the current HTML spec
        that says that the assignment should fail unconditionally.  See
        https://html.spec.whatwg.org/#the-windowproxy-exotic-object and
        https://html.spec.whatwg.org/#windowproxy-setprototypeof.

        If the HTML spec is changed to make the WindowProxy and Location objects into
        immutable prototype exotic objects later, we can update to match the spec then.

        Test: js/prototype-assignment.html

        * bindings/js/JSDOMWindowProperties.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/IDLAttributes.txt:
        * dom/EventTarget.idl:
        * page/DOMWindow.idl:

2016-12-06  Andreas Kling  <akling@apple.com>

        [Cocoa] Add some memory usage related information to sysdiagnose state dumps
        <https://webkit.org/b/165375>
        <rdar://problem/29057243>

        Reviewed by Darin Adler.

        Follow-up to address two more review comments.

        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::javaScriptObjectCounts): Use WTFMove() when returning the
        HashCountedSet to avoid making an extra copy.

2016-12-06  Dave Hyatt  <hyatt@apple.com>

        REGRESSION (Safari 10): Scrolling not working inside height 100% table
        https://bugs.webkit.org/show_bug.cgi?id=164366
        <rdar://problem/29095535>

        Reviewed by Zalan Bujtas.

        Added fast/table/overflow-percent-height-regression.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        This patch wasn't merged correctly from Blink. The value returned needed
        to be 0, not unset.

2016-12-06  Sam Weinig  <sam@webkit.org>

        REGRESSION: media/track LayoutTests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=165432

        Reviewed by Antoine Quint.

        RenderThemeMac was caching the media controls script / style sheets
        and not being invalidated when the RuntimeEnabledFeatures changed. So,
        we can just cache both.

        * bindings/generic/RuntimeEnabledFeatures.h:
        Initialize m_areModernMediaControlsEnabled to false.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):
        Have separate caches for the modern and legacy media control scripts/style sheets.

2016-12-06  Sam Weinig  <sam@webkit.org>

        DumpRenderTree crashed in com.apple.WebCore: WebCore::MockMediaEndpoint::generateDtlsInfo const + 23
        https://bugs.webkit.org/show_bug.cgi?id=165486
        <rdar://problem/29149588>

        Reviewed by Tim Horton.

        The MockMediaEndpoint can be destroyed before the task created in MockMediaEndpoint::generateDtlsInfo()
        gets a chance to run, so guard it with a weak pointer.

        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::MockMediaEndpoint):
        (WebCore::MockMediaEndpoint::generateDtlsInfo):
        * platform/mock/MockMediaEndpoint.h:

2016-12-06  Chris Dumez  <cdumez@apple.com>

        Add HTML interactive form validation blacklist for some WebKit-specific sites
        https://bugs.webkit.org/show_bug.cgi?id=165470
        <rdar://problem/29509424>

        Reviewed by Simon Fraser.

        Add HTML interactive form validation blacklist for some WebKit-specific sites
        expecting our old behavior, until they get a chance to be updated.

        * html/HTMLFormElement.cpp:
        (WebCore::isURLBlacklistedForInteractiveFormValidation):
        (WebCore::HTMLFormElement::prepareForSubmission):

2016-12-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rollout r209050.

        This change may impact other popovers than the HTML validation one.
        The previous code is safer.

        * platform/ValidationBubble.h:
        * platform/ios/ValidationBubbleIOS.mm:
        (-[WebValidationBubbleDelegate adaptivePresentationStyleForPresentationController:traitCollection:]):
        (WebCore::ValidationBubble::setAnchorRect):
        * platform/spi/ios/UIKitSPI.h:

2016-12-05  Simon Fraser  <simon.fraser@apple.com>

        Improve the behavior of scroll-into-view when the target is inside position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=165354

        Reviewed by Zalan Bujtas.
        
        The existing RenderLayer::scrollRectToVisible() code paid no heed to whether the 
        target was inside position:fixed, resulting in unwanted scrolls.
        
        Fix this by plumbing through from the call sites a "insideFixed" flag which we get
        when we call localToAbsolute(), and use this flag to avoid scrolling at all if
        unzoomed.
        
        If zoomed and we're focussing something inside position:fixed, and if visual viewports
        are enabled, we can compute the visual viewport required to reveal the target rect,
        which gives us the ideal scroll position.
        
        Fix a bug on non-iOS platforms when zoomed, which is to scale the viewRect since
        frameView.visibleContentRect() gives an unscaled rect on those platforms.
        
        Not all callers of scrollRectToVisible() are fixed, but those that are not will get
        the current behavior.

        Tests: fast/overflow/scroll-anchor-in-position-fixed.html
               fast/visual-viewport/zoomed-scroll-into-view-fixed.html
               fast/visual-viewport/zoomed-scroll-to-anchor-in-position-fixed.html

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        (WebCore::Element::scrollIntoViewIfNotVisible):
        (WebCore::Element::updateFocusAppearance):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::absoluteCaretBounds):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteCaretBounds):
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::absoluteBoundsForLocalCaretRect):
        * editing/htmlediting.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollElementToRect):
        (WebCore::FrameView::scrollToAnchor):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::outputLinkedDestinations):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner):
        (WebCore::RenderElement::getTrailingCorner):
        (WebCore::RenderElement::absoluteAnchorRect):
        (WebCore::RenderElement::anchorRect): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::getRectToExpose):
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scrollRectToVisible):
        * rendering/RenderObject.h:

2016-12-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION(r205396): Intermediate CTRuns with initial advances get double counted when glyph origins are enabled
        https://bugs.webkit.org/show_bug.cgi?id=165084

        Reviewed by Simon Fraser.

        When glyph origins are not enabled, an intermediate CTRun's initial advance is simply added
        to the previous glyph's advance. However, when glyph origins are enabled, this shouldn't
        occur.

        Test: fast/text/initial-advance-in-intermediate-run-complex.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2016-12-06  Simon Fraser  <simon.fraser@apple.com>

        Enable visual viewports by default on Mac, and iOS Wk2
        https://bugs.webkit.org/show_bug.cgi?id=165452

        Reviewed by Zalan Bujtas.

        Some tests revealed an issue where, during scrollbar updates, the visual viewport would be
        15px wider than the layout viewport, which results in the layout viewport shifting 15px to the
        right. Prevent this by disallowing viewport updates during the AdjustViewSize phase; we'll
        be called again in postLayoutTasks.

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

2016-12-06  Daniel Bates  <dabates@apple.com>

        Cleanup: Rename some HTTP 0.9-specific functions to conform to WebKit Code Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=165451

        Reviewed by Alex Christensen.

        Rename Document::shouldEnforceHTTP0_9Sandbox() and ResourceResponseBase::isHttpVersion0_9()
        to Document::shouldEnforceHTTP09Sandbox() and ResourceResponseBase::isHTTP09, respectively,
        to conform to the WebKit Code Style Guidelines.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::shouldEnforceHTTP09Sandbox): Renamed; formerly named shouldEnforceHTTP0_9Sandbox
        * dom/Document.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isHTTP09): Renamed; formerly named isHttpVersion0_9.
        * platform/network/ResourceResponseBase.h:

2016-12-06  Daniel Bates  <dabates@apple.com>

        Use Vector::uncheckedAppend() in more places
        https://bugs.webkit.org/show_bug.cgi?id=164952

        Reviewed by Darin Adler.

        We can use Vector::uncheckedAppend() whenever the number of items that will be appended
        to a vector is equal to or less than its capacity. Using Vector::uncheckedAppend() is
        more efficient than Vector::append() as it avoids checking the capacity of the vector
        before appending a value to the end of it.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::extractJumpTable):
        * contentextensions/DFAMinimizer.cpp:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::copyPropertiesInSet): Use Vector::uncheckedAppend() and inline
        the assignment of the temporary variable value into the if condition to limit its scope
        as it is referenced exactly once in the loop body.
        * css/StyleRule.cpp:
        (WebCore::StyleRuleGroup::StyleRuleGroup): Use Vector::uncheckedAppend() and write for-loop
        using a C++11 range-based for-loop.
        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChildOf):
        * dom/DocumentMarkerController.cpp:
        (WebCore::updateRenderedRectsForMarker):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::convertToLayoutUnits):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::AudioBus):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/PathUtilities.cpp:
        (WebCore::polygonsForRect):
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::bestSourcesForTypeAndConstraints):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formCreate):

2016-12-04  Darin Adler  <darin@apple.com>

        Use ASCIICType more, and improve it a little bit
        https://bugs.webkit.org/show_bug.cgi?id=165360

        Reviewed by Sam Weinig.

        * css/CSSGrammar.y.in: Use isASCIIDigit.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceUnicodeRange): Use isASCIIHexDigit and
        toASCIIHexValue.
        (WebCore::isEqualToCSSIdentifier): Use isASCIILower.
        * html/FormController.cpp:
        (WebCore::isNotFormControlTypeCharacter): Use isASCIILower.
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::tokenize): Use isASCIIAlpha.
        * platform/Decimal.cpp:
        (WebCore::Decimal::fromString): Use isASCIIDigit.
        * platform/FileSystem.cpp:
        (WebCore::decodeFromFilename): Use isASCIIHexDigit and toASCIIHexValue.
        * platform/URL.cpp:
        (WebCore::isLetterMatchIgnoringCase): Deleted.
        (WebCore::isSchemeCharacterMatchIgnoringCase): Deleted.
        (WebCore::assertProtocolIsGood): Use isASCIIUpper.
        (WebCore::URL::protocolIs): Use isASCIIAlphaCaselessEqual.
        (WebCore::URL::parse): Ditto.
        (WebCore::protocolIs): Ditto.
        (WebCore::protocolIsInHTTPFamily): Ditto.
        * platform/URLParser.cpp:
        (WeCore::URLParser::parseIPv4Piece): Use isASCIIDigit.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isRussianDomainNameCharacter): Use isASCIIDigit.
        (WebCore::allCharactersAllowedByTLDRules): Ditto.
        (WebCore::dataWithUserTypedString): Use upperNibbleToASCIIHexDigit and
        lowerNibbleToASCIIHexDigit.
        (WebCore::dataForURLComponentType): Ditto.
        (WebCore::createStringWithEscapedUnsafeCharacters): Ditto.
        (WebCore::userVisibleString): Use isASCIIHexDigit, toASCIIHexValue,
        upperNibbleToASCIIHexDigit, and lowerNibbleToASCIIHexDigit.
        (WebCore::isUserVisibleURL): Use isASCIIHexDigit and toASCIIHexValue.

        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodeStringAsFormData): Use isASCIIAlphanumeric.

        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::mathVariant): Use isASCIIUpper, isASCIILower, and isASCIIDigit.

        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber): Use isASCIIDigit.
        * svg/SVGPathStringSource.cpp:
        (WebCore::nextCommandHelper): Ditto.
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::lexNumber): Ditto.
        (WebCore::XPath::Parser::nextTokenInternal): Ditto.

2016-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r209390.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestObj.h:

2016-12-06  Tim Horton  <timothy_horton@apple.com>

        PDF markup/annotations visible in Mail on macOS but not on iOS
        https://bugs.webkit.org/show_bug.cgi?id=165444
        <rdar://problem/28942896>

        Reviewed by Simon Fraser.

        No new tests, but enabled an existing test for this feature.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/spi/cg/CoreGraphicsSPI.h:
        Make use of CGContextDrawPDFPageWithAnnotations where available,
        to paint the page with annotations.

2016-12-06  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Turn on the new CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=165213

        Reviewed by Zalan Bujtas.

        * page/Settings.in:

2016-12-06  Dan Bernstein  <mitz@apple.com>

        Tried to fix the USE(APPLE_INTERNAL_SDK) build after r209385.

        * platform/spi/cocoa/NSTouchBarSPI.h:

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

        [pointer-lock] Cursor should become visible when exiting pointer-lock via ESC key.
        https://bugs.webkit.org/show_bug.cgi?id=165377

        Reviewed by Darin Adler.

        Introduce the concept of "force cursor to become visible" when requesting the pointer be
        unlocked.  ESC events will cause the pointer to become visible, while normal key events
        will not.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerUnlock):
        (WebCore::PointerLockController::requestPointerUnlockAndForceCursorVisible):
        (WebCore::PointerLockController::documentDetached):
        (WebCore::PointerLockController::didLosePointerLock):
        * page/PointerLockController.h:

        Drive-by fix: apply Darin's feedback to existing functions:

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::elementRemoved):
        (WebCore::PointerLockController::documentDetached):


2016-12-06  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for converting dictionaries to JS
        https://bugs.webkit.org/show_bug.cgi?id=165367

        Reviewed by Darin Adler and Alex Christensen.

        - Adds support for converting dictionary types to JSValues via JSDOMConvert.
        - Adopts that functionality to correct the CryptoKeyPair implementation, which
          is supposed to be a dictionary.
          (While doing this, I also update places that were passing both a CryptoKey 
          and CryptoKeyPair to use a Variant, since they always only wanted one.)
        - Re-works DOMPromise and DeferredPromise to be based on JSDOMConvert and IDLTypes.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Remove JSCryptoKeyPairCustom.cpp and CryptoKeyPair.cpp.

        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * bindings/js/JSMediaDevicesCustom.cpp:
        * html/MediaController.cpp:
        * html/track/TextTrack.cpp:
        Add some missing includes.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard):
        (WebCore::ApplePaySession::openPaymentSetup):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::text):
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::loadingFailed):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolveWithData):
        (WebCore::FetchBodyConsumer::resolve):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::text):
        * Modules/fetch/FetchResponse.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/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::replaceTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::deny):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::whenDefinedPromise):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::resolve):
        (WebCore::ScriptModuleLoader::notifyFinished):
        * css/FontFace.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::load):
        * css/FontFaceSet.h:
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::addElementDefinition):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rejectPendingPlayPromises):
        * html/HTMLMediaElement.h:
        Update to use new IDLType based promises.

        * bindings/generic/IDLTypes.h:
        Add a new type, ParameterType, to use as the parameter to 
        DOMPromise/DeferredPromise.

        * bindings/js/JSCryptoKeyPairCustom.cpp:
        Removed.

        * bindings/js/JSDOMConvert.h:
        (WebCore::JSConverter<IDLDictionary<T>>::convert):
        Add JSConverter specialization for IDLDictionary. Have it simply forward to a generated 
        convertDictionaryToJS function, following the convention set in place by IDLEnumeration.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        Re-write to be based on IDLTypes and JSDOMConvert, simplifying the implementation.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        Update for variant based KeyOrKeyPair.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryHeaderContent):
        (GenerateDictionaryImplementationContent):
        Add generation of the convertDictionaryToJS function. I made it require the JSGenerateToJSObject
        extended attribute for now, as the majority of dictionaries do not need this code generated for them.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        Add JSGenerateToJSObject to a dictionary to test generation in bindings tests.

        * crypto/CryptoAlgorithm.h:
        Change KeyOrKeyPairCallback to take a Variant<RefPtr<CryptoKey>, CryptoKeyPair>, rather
        than two separate arguments.

        * crypto/CryptoKeyPair.cpp:
        Removed.

        * crypto/CryptoKeyPair.h:
        Convert to a struct.

        * crypto/CryptoKeyPair.idl:
        Convert to a dictionary.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        Update for new signature of KeyOrKeyPairCallback.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Reject invalid hex colors on the fast path
        https://bugs.webkit.org/show_bug.cgi?id=165461

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::fastParseColorInternal):
        Make sure to check for success. There was even a FIXME in the code about this!
        Matches our old parser's behavior.

2016-12-05  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls bar in fullscreen cannot be dragged
        https://bugs.webkit.org/show_bug.cgi?id=165448

        Reviewed by Simon Fraser.

        We weren't listening to mousemove and mouseup events on the right event target, window in the context
        of a fullscreen shadow root makes no sense. We now listen to those events on the media controls, which
        we size to fit the whole of the media element's bounds. We then apply a transform to the controls bar
        to apply the dragging distance.

        Test: media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-drag.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.get translation):
        (ControlsBar.prototype.set translation):
        (ControlsBar.prototype.commitProperty):
        (ControlsBar): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen):
        (.media-controls.mac.fullscreen > .controls-bar):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype._handleMousedown):
        (MacOSFullscreenMediaControls.prototype._handleMousemove):
        (MacOSFullscreenMediaControls.prototype._handleMouseup):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Allow calc in SVG attributes
        https://bugs.webkit.org/show_bug.cgi?id=165459

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeLength):

2016-12-05  Brady Eidson  <beidson@apple.com>

        Build fix followup to r209379:

        STP 19 fails to launch on 16B255
        https://bugs.webkit.org/show_bug.cgi?id=165388
        -and corresponding-
        rdar://problem/29514476

        Rubberstamped by Tim Horton.

        No new tests (No behavior change).

        * platform/spi/cocoa/NSTouchBarSPI.h: Strategically relocate NS_ASSUME_NONNULL* macros.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure the SVGPaint URI and currentColor style still paints using the URI
        https://bugs.webkit.org/show_bug.cgi?id=165457

        Reviewed by Zalan Bujtas.

        * rendering/svg/SVGResources.cpp:
        (WebCore::paintingResourceFromSVGPaint):
        Add support for this paint type. The old parser doesn't use it.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix dashboard region parsing
        https://bugs.webkit.org/show_bug.cgi?id=165456

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitDashboardRegion):
        Make sure to reject whitespace by itself as well as unclosed dashboard-region functions.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Properly reject large numeric values
        https://bugs.webkit.org/show_bug.cgi?id=165455

        Reviewed by Zalan Bujtas.

        The new parser clamped numeric values in both the slow and fast paths to the max
        and min float values. The old parser simply allowed the values to be inf, and then
        had std::isinf checks to reject.

        Blink rejects also even though it clamps, but I could not discern the mechanism by
        which they did so. Therefore I am changing the new parser to exactly match the old
        parser. Numeric values are no longer clamped, but instead are allowed to be inf, and
        isinf checks now exist in the new parser in the same places they do in the old parser.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseSimpleLength):
        (WebCore::parseSimpleLengthValue):
        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::CSSParserToken):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):

2016-12-05  Ricky Mondello  <rmondello@apple.com>

        STP 19 fails to launch on 16B255
        https://bugs.webkit.org/show_bug.cgi?id=165388
        -and corresponding-
        rdar://problem/29514476

        Reviewed by Tim Horton.

        * platform/spi/cocoa/NSTouchBarSPI.h: Re-declare the SPI symbols as weak. The cited crash itself is for a
            symbol we weren't handling here, but is part of the same group. Re-declare all four of these symbols to
            be safe.

2016-12-05  Antoine Quint  <graouts@apple.com>

        ERROR: post-layout: dirty renderer(s) - Encountered with LayoutTest media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html
        https://bugs.webkit.org/show_bug.cgi?id=165312

        Reviewed by Simon Fraser.

        Reverting part of the code added in https://bugs.webkit.org/show_bug.cgi?id=165287 that triggered
        an assertion. We go back to removing previous media controls as we add new ones when the fullscreen
        status changes, and simply hide the controls during the animated transition using a CSS pseudo-class.
        This also fixes an issue where we wouldn't have removed the previous controls should we have entered
        fullscreen in a different way than clicking on the fullscreen button in the media controls.

        We restore testing coverage that was fixed due to this assertion.

        * Modules/modern-media-controls/controls/media-controls.css:
        (:host(:-webkit-animating-full-screen-transition) .media-controls):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.fadeIn):
        (MediaControls.prototype.presentInElement): Deleted.
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.buttonWasClicked):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):

2016-12-05  Dean Jackson  <dino@apple.com>

        MediaDocuments crash with modern media controls
        https://bugs.webkit.org/show_bug.cgi?id=165446
        <rdar://problem/29524959>

        Reviewed by Antoine Quint.

        The modern media controls inject a <style> element into
        the document, which exposed a bug when used in MediaDocuments.
        Such documents were not getting a charset, and the hash table
        for the CSSParserContexts was crashing.

        Test: media/modern-media-controls/media-documents/insert-style-should-not-crash.html

        * css/parser/CSSParserMode.h: Guard against an empty charset.
        (WebCore::CSSParserContextHash::hash):
        * dom/InlineStyleSheetOwner.cpp: Ask for the charset with fallback.
        (WebCore::parserContextForElement):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] shape-rendering supports crispEdges rather than crisp-edges
        https://bugs.webkit.org/show_bug.cgi?id=165443

        Reviewed by Tim Horton.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support setting of custom properties from the CSS OM
        https://bugs.webkit.org/show_bug.cgi?id=165442

        Reviewed by Tim Horton.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomPropertyValue):
        Call in to a new function in CSSParserImpl that can handle
        custom property parsing.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseCustomPropertyValue):
        New function that is similar to parseValue, but handling custom
        properties.

        (WebCore::CSSParserImpl::consumeDeclaration):
        (WebCore::CSSParserImpl::consumeCustomPropertyValue):
        (WebCore::CSSParserImpl::consumeVariableValue): Deleted.
        * css/parser/CSSParserImpl.h:
        Rename consumeVariableValue to consumeCustomPropertyValue, since that
        is more clear. consumeVariableValue sounds like you might be resolving
        a variable reference rather than parsing a custom property's value.

2016-12-05  Tim Horton  <timothy_horton@apple.com>

        Adopt CAMachPort-as-layer-contents
        https://bugs.webkit.org/show_bug.cgi?id=141687
        <rdar://problem/19393233>

        Reviewed by Darin Adler.

        No new tests, just a performance bump.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add some SPI.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] calcs on column-width that resolve to 0 should be discarded
        https://bugs.webkit.org/show_bug.cgi?id=165439

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeColumnWidth):

2016-12-05  Dean Jackson  <dino@apple.com>

        pointer lock needs to be feature detectable
        https://bugs.webkit.org/show_bug.cgi?id=165426
        <rdar://problem/29486715>

        Reviewed by Antoine Quint.

        Annotate the public-facing API for pointer-lock, so
        that it is hidden when not available.

        Also move the Setting to a RuntimeEnabledFeature, since
        pointer-lock is exposed from WebKit as a feature.

        Tests: pointer-lock/pointerlock-interface-disabled.html
               pointer-lock/pointerlock-interface.html

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPointerLockEnabled):
        (WebCore::RuntimeEnabledFeatures::pointerLockEnabled):
        * dom/Document.idl:
        * dom/Element.idl:
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        * page/Settings.in:

2016-12-05  Keith Rollin  <krollin@apple.com>

        Reduce number of platformMemoryUsage calls
        https://bugs.webkit.org/show_bug.cgi?id=164375

        Reviewed by Darin Adler.

        Removed the calls to WTF::releaseFastMallocFreeMemory (it's already
        called elsewhere in the free-all-memory pipeline) and
        malloc_zone_pressure_relief (it should be called by the OS on its own
        terms).

        No new tests -- no new or changed features.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Leave the Animation type alone when the property is invalid
        https://bugs.webkit.org/show_bug.cgi?id=165418

        Reviewed by Dean Jackson.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationProperty):

2016-12-05  Antti Koivisto  <antti@apple.com>

        keyframes do not work when defined inside a style in a shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=164608
        <rdar://problem/29210251>

        Reviewed by Darin Adler.

        With :host and ::slotted rules a keyframe animation affecting an element can be
        defined in a style scope different from the element's own scope. Style resolver
        loses the scope information when building the RenderStyle so there is no way
        to find out the correct scope.

        Fix by passing style scope through to style builder and including a scope association
        with the animation name. Find the correct scope when resolving keyframes.

        Test: fast/shadow-dom/shadow-host-animation.html

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationName):

            Include scope with the name.

        * css/ElementRuleCollector.cpp:
        (WebCore::MatchRequest::MatchRequest):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::ElementRuleCollector::matchSlottedPseudoElementRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):

            Replace treeContextOrdinal int with Style::ScopeOrdinal enum carrying the same information.
            Simplify the code removing unnecessary use of MatchRequest struct.

        (WebCore::compareRules):
        * css/ElementRuleCollector.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::CascadedProperties::setPropertyInternal):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::CascadedProperties::setDeferred):

            Pass styleScopeOrdinal through the cascade mechanism

        (WebCore::cascadeLevelForIndex):
        (WebCore::StyleResolver::CascadedProperties::addMatch):
        (WebCore::StyleResolver::CascadedProperties::addImportantMatches):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Set styleScopeOrdinal in State when applying style.

        (WebCore::StyleResolver::CascadedProperties::addStyleProperties): Deleted.

            Move the code to the only caller.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::styleScopeOrdinal):
        (WebCore::StyleResolver::State::setStyleScopeOrdinal):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::resolveKeyframeStyles):

            Find the correct scope for resolving keyframes based on the scope ordinal.

        * platform/animation/Animation.cpp:
        * platform/animation/Animation.h:

            Add m_nameStyleScopeOrdinal that tells the scope where the name is defined.

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

            Find the scope for ordinal.

        * style/StyleScope.h:

            Define ScopeOrdinal types.

        (WebCore::Style::operator++):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support glyph-orientation-horizontal and glyph-orientation-vertical
        https://bugs.webkit.org/show_bug.cgi?id=165414

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGlyphOrientation):
        (WebCore::CSSPropertyParser::parseSingleValue):
        Add support for the glyph-orientation-horizontal and glyph-orientation-vertical
        properties. They take an angle and allow unitless values.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        Fix a bug in the handling of unitless values for angles. Make sure to
        actually pass in the value instead of always doing 0. Blink does not
        accept unitless values for angles at all, so this is another difference
        to investigate for SVG in the future.

2016-12-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r209299.

        This change appears to have caused LayoutTest failures on
        Sierra WK1.

        Reverted changeset:

        "Improve the behavior of scroll-into-view when the target is
        inside position:fixed"
        https://bugs.webkit.org/show_bug.cgi?id=165354
        http://trac.webkit.org/changeset/209299

2016-12-05  Andreas Kling  <akling@apple.com>

        [Cocoa] Add some memory usage related information to sysdiagnose state dumps
        <https://webkit.org/b/165375>
        <rdar://problem/29057243>

        Reviewed by Darin Adler.

        Add a flag to memoryUsageStatistics() to allow gathering of slightly more expensive information.
        This mode is used when capturing a state dump for sysdiagnose.

        The more expensive information added in this patch relates to information about live objects
        and memory on the JavaScript heap.

        * WebCore.xcodeproj/project.pbxproj:
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::memoryUsageStatistics):
        (WebCore::PerformanceLogging::javaScriptObjectCounts):
        (WebCore::PerformanceLogging::didReachPointOfInterest):
        * page/PerformanceLogging.h:

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure the transform fast path uses WebKitCSSTransformValue
        https://bugs.webkit.org/show_bug.cgi?id=165399

        Reviewed by Dean Jackson.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseTransformTranslateArguments):
        (WebCore::parseTransformNumberArguments):
        (WebCore::parseSimpleTransformValue):
        (WebCore::parseSimpleTransformList):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix calc() with -webkit-line-clamp
        https://bugs.webkit.org/show_bug.cgi?id=165398

        Reviewed by Zalan Bujtas.

        Remove the aggressive token type checking up front, since it was causing calc() to not
        be allowed.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeLineClamp):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-text-decoration
        https://bugs.webkit.org/show_bug.cgi?id=165391

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseShorthand):

2016-12-05  Beth Dakin  <bdakin@apple.com>

        STP 19 fails to launch on 16B255
        https://bugs.webkit.org/show_bug.cgi?id=165388
        -and corresponding-
        rdar://problem/29514476

        Rubber-stamped by Brady Eidson. 

        * platform/spi/cocoa/NSTouchBarSPI.h:

2016-12-05  Beth Dakin  <bdakin@apple.com>

        STP 19 fails to launch on 16B255
        https://bugs.webkit.org/show_bug.cgi?id=165388
        -and corresponding-
        rdar://problem/29514476

        Reviewed by Tim Horton.

        Speculative fix.
        * platform/spi/cocoa/NSTouchBarSPI.h:

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the 'alphabetic' keyword for text-underline-position
        https://bugs.webkit.org/show_bug.cgi?id=165387

        Reviewed by Simon Fraser.

        Fixes fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix assert when unknown properties are encountered.
        https://bugs.webkit.org/show_bug.cgi?id=165385

        Reviewed by Zalan Bujtas.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationProperty):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix rx and ry parsing
        https://bugs.webkit.org/show_bug.cgi?id=165383

        Reviewed by Dean Jackson.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        rx and ry can be negative in the slow path, so make sure they can be negative in the
        fast path too.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeRxOrRy):
        Disallow auto as a value since we are not equipped to handle it, and it's not clear if it's
        even valid.

2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>

        Add __STDC_FORMAT_MACROS before inttypes.h is included
        https://bugs.webkit.org/show_bug.cgi?id=165374

        We need formatting macros like PRIu64 to be available in all places where
        inttypes.h header is used. All these usages get inttypes.h definitions
        via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
        macros are not used anymore since r185129.

        This patch fixes multiple build errors with MinGW and reduces number of
        independent __STDC_FORMAT_MACROS uses in the code base.

        Reviewed by Darin Adler.

        No new tests needed.

        * platform/sql/SQLiteFileSystem.cpp: Removed unused inttypes.h
        inclusion.

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Properly fail on bad values for -webkit-clip-path
        https://bugs.webkit.org/show_bug.cgi?id=165382

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapeOrBox):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] The page-break-* properties are only keyword props for old parser.
        https://bugs.webkit.org/show_bug.cgi?id=165381

        Reviewed by Dean Jackson.

        * css/parser/CSSParser.cpp:
        (WebCore::isKeywordPropertyID):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Don't use CSS_PARSER_INTEGER unit for resolved integer calcs.
        https://bugs.webkit.org/show_bug.cgi?id=165379

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumber):

2016-12-05  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add parseValue support to new parser. Use new parser for UA sheet too if useNewParser is set.
        https://bugs.webkit.org/show_bug.cgi?id=165376

        Reviewed by Zalan Bujtas.

        * css/StyleColor.cpp:
        (WebCore::StyleColor::isColorKeyword):
        Include system colors when using the fast parseValue path.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::setupParser):
        Add an assert to catch any code path using the old parser when the new parser flag is set.

        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::parseDeclaration):
        Patched to use the new parser in UASheetMode as well as other modes when the new parser flag
        is set. parseValue is patched to use the new parser's fast paths and to call into CSSParserImpl's
        parseValue.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        Support CSSPropertyShapeMargin in the fast path since the old parser did in its fast path.

        (WebCore::parseSimpleLengthValue):
        Don't ever return unitless numbers. If we accept a unitless number, convert the unit to PX still.

        (WebCore::CSSParserFastPaths::parseColor):
        Use the CSSValuePool when creating colors on the fast path.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseValue):
        * css/parser/CSSParserImpl.h:
        Change the return type to be compatible with the old parser's ParseResult flag.

2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>

        Removed MediaPlayerPrivateTaskTimer
        https://bugs.webkit.org/show_bug.cgi?id=165373

        Reviewed by Sam Weinig.

        It is not used anywhere since QTSDK removal in r165476.

        No new tests needed.

        * platform/graphics/win/MediaPlayerPrivateTaskTimer.cpp: Removed.
        * platform/graphics/win/MediaPlayerPrivateTaskTimer.h: Removed.

2016-12-04  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Eliminate in-place lowercasing in the parser.
        https://bugs.webkit.org/show_bug.cgi?id=165368

        Reviewed by Darin Adler.

        Replace the in-place lowercasing that the parser does with new
        mechanisms. In-place lowercasing ruins serialization and doesn't
        work on CSS parsed from static strings. It also has the side effect
        of mutating strings passed in from JavaScript like for querySelectorAll.

        For class/id selectors, we now check if the string is lowercase or not.
        If it contains uppercase ASCII characters, then we allocate the RareData
        for the selector. RareData now has two fields instead of one for the value,
        a matching value (all lowercase in quirks mode), and a serializing value (the
        original string). Because this is done at the CSSSelector level, the old
        parser has been patched as well for these cases.

        In addition, in-place lowercasing was done for pseudo-elements, for
        media query features, and for attr(). In all of these cases we do
        lowercase converting by first checking if it's needed. Serialization will
        not retain the original string in these cases, so we may want to revisit
        these cases in the future and apply a solution similar to what we did for
        selectors.

        * css/CSSGrammar.y.in:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::RareData::RareData):
        (WebCore::CSSSelector::RareData::~RareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::RareData::create):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::value):
        (WebCore::CSSSelector::serializingValue):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExpression::MediaQueryExpression):
        * css/parser/CSSParserToken.cpp:
        (WebCore::convertToASCIILowercaseInPlace): Deleted.
        (WebCore::CSSParserToken::convertToASCIILowercaseInPlace): Deleted.
        * css/parser/CSSParserToken.h:
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::setValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAttr):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeId):
        (WebCore::CSSSelectorParser::consumeClass):
        (WebCore::CSSSelectorParser::consumePseudo):
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::readFeature):

2016-12-04  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Fix a build break on EFL since r209303.

        Unreviewed build fix.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::exceptionForSerializationFailure): Add a return in the end of function.

2016-12-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose InjectedBundlePageEditorClient via the Objective-C bundle SPI
        https://bugs.webkit.org/show_bug.cgi?id=165276
        <rdar://problem/29467040>

        Reviewed by Darin Adler.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Make sure to put the client data on the pasteboard,
          like we do on macOS.

2016-12-03  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Remove line numbers from StyleRule.
        https://bugs.webkit.org/show_bug.cgi?id=165361

        Reviewed by Simon Fraser.

        StyleRules have a concept of a source line that is eventually passed
        to the inspector. This was only ever used by normal rules, i.e., ones with
        selectors, and set to 0 for all other rules. This line was set to the line number
        at which the end of the selector text occurred.

        Because Inspector already computes the start and end range for the selector
        text, storing a source line on StyleRule ends up being redundant. This patch
        gets rid of the source line and uses the end line of the selector text
        instead.

        * css/CSSGrammar.y.in:
        Remove the code that updates the last seen selector line.

        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::StyleKeyframe):
        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::StyleRuleKeyframes):
        No longer need to pass in a 0 line number.

        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::create):
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        (WebCore::StyleRuleFontFace::StyleRuleFontFace):
        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleCharset::StyleRuleCharset):
        (WebCore::StyleRuleNamespace::StyleRuleNamespace):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::StyleRuleBase):
        (WebCore::StyleRuleBase::sourceLine): Deleted.
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::StyleRuleImport):
        Remove m_sourceLine and change the create methods and constructors to not
        require a line number.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::createStyleRule):
        Line number no longer needed.

        (WebCore::CSSParser::updateLastSelectorLineAndPosition): Deleted.
        * css/parser/CSSParser.h:
        Got rid of the function that tracks and updates the last seen selector line.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeStyleRule):
        Fix the rule creation in the new parser to not pass in a 0 line number.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        * inspector/InspectorStyleSheet.h:
        Patch the methods that build up the selector range to return the end line
        information for selector text so that it can be set as the source line
        for the rule (thus eliminating the need to store the line number on the style
        rule itself).

2016-12-02  Sam Weinig  <sam@webkit.org>

        optional sequence values not handled correctly by binding generator
        https://bugs.webkit.org/show_bug.cgi?id=142562

        Also fixes:
            Remove non-standard postMessage overload
            https://bugs.webkit.org/show_bug.cgi?id=161911
        and
            Wrong argument order in window.postMessage
            https://bugs.webkit.org/show_bug.cgi?id=63141

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        Remove no longer needed files.

        * bindings/generic/IDLTypes.h:
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLObject>::convert):
        Add support for the WebIDL object type.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMException):
        Add support for throwing stack overflow errors.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage): Deleted.
        (WebCore::JSDOMWindow::postMessage): Deleted.
        * bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp: Removed.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::postMessage): Deleted.
        (WebCore::extractTransferables): Deleted.
        * bindings/js/JSMessagePortCustom.h: Removed.
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage): Deleted.
        Remove custom bindings for postMessage.

        * bindings/js/SerializedScriptValue.h:
        Switch to using enum class.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        Add new create function that takes the transfer list, processes it, and returns
        MessagePorts and SerializedScriptValue / exception.

        (WebCore::CloneBase::throwStackOverflow): Deleted.
        (WebCore::CloneDeserializer::throwValidationError): Deleted.
        Remove uncalled functions.

        * bindings/scripts/CodeGenerator.pm:
        (IsRefPtrType):
        (IsBuiltinType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GetBaseIDLType):
        Add support for the WebIDL 'object' type.

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

        * dom/ExceptionCode.h:
        Add two new ExceptionCodes:
          - ExistingExceptionError, to indicate that implementation code threw a JS exception.
          - StackOverflowError, to indicate that a stack overflow exception should be thrown.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        * dom/MessagePort.h:
        * dom/MessagePort.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        Update to call new SerializedScriptValue create function.

2016-12-03  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support Dashboard Regions
        https://bugs.webkit.org/show_bug.cgi?id=165357

        Reviewed by Daniel Bates.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitDashboardRegion):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-12-02  Simon Fraser  <simon.fraser@apple.com>

        Improve the behavior of scroll-into-view when the target is inside position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=165354

        Reviewed by Zalan Bujtas.
        
        The existing RenderLayer::scrollRectToVisible() code paid no heed to whether the 
        target was inside position:fixed, resulting in unwanted scrolls.
        
        Fix this by plumbing through from the call sites a "insideFixed" flag which we get
        when we call localToAbsolute(), and use this flag to avoid scrolling at all if
        unzoomed.
        
        If zoomed and we're focussing something inside position:fixed, and if visual viewports
        are enabled, we can compute the visual viewport required to reveal the target rect,
        which gives us the ideal scroll position.
        
        Fix a bug on non-iOS platforms when zoomed, which is to scale the viewRect since
        frameView.visibleContentRect() gives an unscaled rect on those platforms.
        
        Not all callers of scrollRectToVisible() are fixed, but those that are not will get
        the current behavior.

        Tests: fast/overflow/scroll-anchor-in-position-fixed.html
               fast/visual-viewport/zoomed-scroll-into-view-fixed.html
               fast/visual-viewport/zoomed-scroll-to-anchor-in-position-fixed.html

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        (WebCore::Element::scrollIntoViewIfNotVisible):
        (WebCore::Element::updateFocusAppearance):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::absoluteCaretBounds):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteCaretBounds):
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::absoluteBoundsForLocalCaretRect):
        * editing/htmlediting.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollElementToRect):
        (WebCore::FrameView::scrollToAnchor):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::outputLinkedDestinations):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getLeadingCorner):
        (WebCore::RenderElement::getTrailingCorner):
        (WebCore::RenderElement::absoluteAnchorRect):
        (WebCore::RenderElement::anchorRect): Renamed to absoluteAnchorRect().
        * rendering/RenderElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::getRectToExpose):
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scrollRectToVisible):
        * rendering/RenderObject.h:

2016-11-30  Simon Fraser  <simon.fraser@apple.com>

        localToAbsolute() does incorrect conversion for elements inside position:fixed with zooming
        https://bugs.webkit.org/show_bug.cgi?id=165244

        Reviewed by Zalan Bujtas.
        
        RenderView::mapLocalToContainer() and RenderView::mapAbsoluteToLocalPoint() handle the coordinate
        mapping through the RenderView's transform (when zoomed), and apply the scroll offset for position:fixed
        elements.
        
        They did this in the wrong order; "local to absolute" applied the zoom scale, and then adjusted for the scroll position,
        and "absolute to local" applied the scroll position and then the transform.
        
        However that scroll position adjustment should be in unzoomed coordinates, since it's accounting for the
        layout adjustment that position:fixed receives (which actually occurs via the localToAbsolute() call
        in RenderLayer's accumulateOffsetTowardsAncestor()). "local to absolute" should therefore apply the scroll
        adjustment first before the transform, and "absolute to local" the reverse.
        
        In both visual viewport mode, and legacy drifty fixed mode FrameView::scrollPositionForFixedPosition()
        returns a scroll offset that is unaffected by zoom, which is correct and confirms this change.
        
        [Confusingly, ScrollView scroll positions _are_ affected by zoom, as the entire document gets bigger.]
        
        RenderGeometryMap::mapToContainer(), which is an optimization on top of RenderView::mapLocalToContainer(),
        gets a similar fix.
        
        Test: fast/zooming/client-rect-in-fixed-zoomed.html

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):

2016-12-02  Simon Fraser  <simon.fraser@apple.com>

        Put names on layers in release builds
        https://bugs.webkit.org/show_bug.cgi?id=165347

        Reviewed by Tim Horton.

        Put names on GraphicsLayers (and therefore CALayers) in release builds. Release names
        are a simpler, truncated version of debug names, with <tagname> id class names.

        Non-primary layer names converted to lowercase and "layer" removed.

        Fix comments that refer to gdb.

        Use ENABLE(TREE_DEBUGGING) in more places.

        * dom/Node.h:
        * dom/Position.h:
        * dom/Range.h:
        * editing/FrameSelection.h:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.h:
        * history/HistoryItem.h:
        * page/FrameTree.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::updateNames):
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateClippingStrategy):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileGridContainerLayerName):
        (WebCore::TileController::zoomedOutTileGridContainerLayerName):
        (WebCore::TileController::createTileLayer):
        * rendering/CounterNode.h:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderCounter.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateAncestorClippingLayer):
        (WebCore::RenderLayerBacking::updateDescendantClippingLayer):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        (WebCore::RenderLayerBacking::updateMaskingLayer):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderObject.h:

2016-12-02  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Update the media controls size as the media element is resized
        https://bugs.webkit.org/show_bug.cgi?id=165346

        Reviewed by Dean Jackson.

        The "resize" event dispatched by HTMLMediaElement indicates a change in the media's
        intrinsic size, while the "resize" event dispatched by the HTMLMediaElement's ShadowRoot
        indicates that the layout size of the media element has changed. We now use the latter.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.handleEvent):

2016-12-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
        https://bugs.webkit.org/show_bug.cgi?id=164492

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * Info.plist: Changed CFBundleIdentifier's value from com.apple.${PRODUCT_NAME} to
        ${PRODUCT_BUNDLE_IDENTIFIER}.

2016-12-02  Chris Dumez  <cdumez@apple.com>

        HTML Interactive Form Validation popovers do not show in iOS WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=165340
        <rdar://problem/29489966>

        Reviewed by Simon Fraser.

        HTML Interactive Form Validation popovers do not show in iOS WKWebViews,
        only in MobileSafari. To address the issue try to find an appropriate
        UIViewController to present the popover when the client does not provide
        a presenting view controller.

        * platform/ValidationBubble.h:
        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::fallbackViewController):
        (WebCore::ValidationBubble::setAnchorRect):
        * platform/spi/ios/UIKitSPI.h:

2016-12-02  Zalan Bujtas  <zalan@apple.com>

        Remove redundant LayoutUnit conversions.
        https://bugs.webkit.org/show_bug.cgi?id=165338

        Reviewed by Simon Fraser.

        RenderBlockFlow::computeColumnCountAndWidth has some redundant LayoutUnti <-> unsigned conversions.

        No change in functionality.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeColumnCountAndWidth):

2016-12-02  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add rewind and fast-forward support
        https://bugs.webkit.org/show_bug.cgi?id=165294

        Reviewed by Dean Jackson.

        We implement support for rewinding and fast-forwarding the media by pressing dedicated
        buttons in fullscreen on macOS. We introduce a new SeekButton class that the existing
        RewindButton and ForwardButton classes now extend and which provides handling of
        "mousedown" and "mouseup" events to indicate that a button is being pressed to the
        UI delegate.

        We also introduce a new SeekSupport class from which SeekBackwardSupport and
        SeekForwardSupport inherit to integrate with those controls and update the media
        time.

        Tests: media/modern-media-controls/layout-node/layout-node-parent-of-type.html
               media/modern-media-controls/seek-backward-support/seek-backward-support.html
               media/modern-media-controls/seek-forward-support/seek-forward-support.html

        * Modules/modern-media-controls/controls/forward-button.js:
        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.parentOfType):
        * Modules/modern-media-controls/controls/rewind-button.js:
        * Modules/modern-media-controls/controls/seek-button.js: Added.
        (SeekButton):
        (SeekButton.prototype.handleEvent):
        (SeekButton.prototype._didStartPressing):
        (SeekButton.prototype._didStopPressing):
        (SeekButton.prototype._notifyDelegateOfPressingState):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):
        * Modules/modern-media-controls/media/seek-backward-support.js: Added.
        (SeekBackwardSupport.prototype.get control):
        (SeekBackwardSupport.prototype.get multiplier):
        (SeekBackwardSupport):
        * Modules/modern-media-controls/media/seek-forward-support.js: Added.
        (SeekForwardSupport.prototype.get control):
        (SeekForwardSupport.prototype.get multiplier):
        (SeekForwardSupport):
        * Modules/modern-media-controls/media/seek-support.js: Added.
        (SeekSupport.prototype.get multiplier):
        (SeekSupport.prototype.buttonPressedStateDidChange):
        (SeekSupport.prototype._startSeeking):
        (SeekSupport.prototype._stopSeeking):
        (SeekSupport.prototype._seek):
        (SeekSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Need to set edit flags properly when user-modify/select are used.
        https://bugs.webkit.org/show_bug.cgi?id=165334

        Reviewed by Dean Jackson.

        The old parser calls parserSetUsesStyleBasedEditability on
        StyleSheetContents* from inside isValidKeywordPropertyAndValue. This
        is pretty lame, but we have to do the same in order to pass editing
        layout tests.

        All of the functions below have been patched with the sole purpose of
        propagating StyleSheetContents* through to isValidKeywordPropertyAndValue
        in the new parser.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParserFastPaths::maybeParseValue):
        * css/parser/CSSParserFastPaths.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeDeclarationValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::CSSPropertyParser):
        (WebCore::CSSPropertyParser::parseValue):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSPropertyParser.h:

2016-12-02  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r208802): TouchBar pause button doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=165333
        -and corresponding-
        rdar://problem/29487187

        Reviewed by Wenson Hsieh.

        The previous code got this right by using self.playing. _playing was totally un-
        used, so this patch just removes it.

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager setPlaying:]):

2016-12-02  John Wilander  <wilander@apple.com>

        Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language
        https://bugs.webkit.org/show_bug.cgi?id=165178
        <rdar://problem/18792250>

        Reviewed by Youenn Fablet.

        Fetch currently only restricts the header Content-Type for simple requests:
        https://fetch.spec.whatwg.org/#cors-safelisted-request-header

        This means simple CORS requests can send unexpected characters in Accept, 
        Accept-Language, and Content-Language header values.

        RFC 7231 implies restrictions on these header values:
        - Accept https://tools.ietf.org/html/rfc7231#section-5.3.2
        - Accept-Language https://tools.ietf.org/html/rfc7231#section-5.3.5
        - Content-Language https://tools.ietf.org/html/rfc7231#section-3.1.3.2

        As per discussions in the W3C WebAppSec group we should try to restrict 
        these header values to help protect servers that do not expect simple CORS 
        requests.

        Non-standard, safelisted header values should trigger a preflight and require
        the headers to be whitelisted in the response's Access-Control-Allow-Headers.
        For Fetch in no-cors mode this change means non-standard header values are not
        allowed to be set.

        Test: http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isSimpleCrossOriginAccessRequest):
            Now calls WebCore::isCrossOriginSafeRequestHeader() instead of
            WebCore::isOnAccessControlSimpleRequestHeaderWhitelist().
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist): Deleted.
            It was a duplicate of WebCore::isCrossOriginSafeRequestHeader().
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
            Now calls WebCore::isCrossOriginSafeRequestHeader() instead of
            WebCore::isOnAccessControlSimpleRequestHeaderWhitelist().
        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidAcceptHeaderValue):
            Basic check that the characters are all ASCII alphanumeric, ' ', '*', '.',
            '/', ';', or '='.
        (WebCore::isValidLanguageHeaderValue):
            Basic check that the characters are all ASCII alphanumeric, ' ', '*', '-',
            '.', ';', or '='.
        (WebCore::isSimpleHeader):
            Removed duplicate code. Now calls WebCore::isCrossOriginSafeRequestHeader().
        (WebCore::isCrossOriginSafeRequestHeader):
            Now makes a call to WebCore::isValidAcceptHeaderValue() for Accept
            headers and WebCore::isValidLanguageHeaderValue() for Accept-Language
            and Content-Language headers.
        * platform/network/HTTPParsers.h:

2016-12-02  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: flowThread->regionInRange(region, startRegion, endRegion) in WebCore::RenderBox::borderBoxRectInRegion
        https://bugs.webkit.org/show_bug.cgi?id=152113
        <rdar://problem/27720221>

        Reviewed by David Hyatt.

        In a nested column context, do not process a spanner if it belongs to an inner column.

        While populating a flow, we search for possible spanners and construct multicolumnsets accordingly.
        However due to the top-down nature of populating flows, a descendant spanner could belong to an inner
        flow which hasn't been populated yet.
        This patch checks if a potential spanner has an ancestor (which is also a descendant
        of the flow that we are populating -> nested) that will eventually create a flow context. 

        Test: fast/multicol/assert-with-nested-columns-and-spanner.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeColumnCountAndWidth):
        (WebCore::RenderBlockFlow::willCreateColumns):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure the z-component of transform-origin can be implicit
        https://bugs.webkit.org/show_bug.cgi?id=165326

        Reviewed by Tim Horton.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix :any/:host to allow pseudo-elements. Support -webkit-border-radius.
        https://bugs.webkit.org/show_bug.cgi?id=165323

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

2016-12-02  Chris Dumez  <cdumez@apple.com>

        [iOS] Tapping on an HTML validation bubble should dismiss it
        https://bugs.webkit.org/show_bug.cgi?id=165122
        <rdar://problem/29429372>

        Reviewed by Simon Fraser.

        Tapping on an HTML validation bubble should dismiss it. Previously it did
        nothing.

        No new tests, I tried writing one but the validation popover does not
        show in the simulator, only on device. I believe at least one reason is that
        _presentingViewControllerForWebView() is required and is currently not
        implemented by WKTR. I'll look into this issue separately.

        * platform/ValidationBubble.h:
        * platform/ios/ValidationBubbleIOS.mm:
        (-[WebValidationBubbleTapRecognizer initWithPopoverController:withPopoverView:]):
        (-[WebValidationBubbleTapRecognizer dismissPopover]):
        (WebCore::ValidationBubble::ValidationBubble):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for the SVG 'kerning' property
        https://bugs.webkit.org/show_bug.cgi?id=165315

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeKerning):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-12-02  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove support for the 'Nondeterministic' extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=165307

        Reviewed by Chris Dumez.

        We are not currently using the WebReplay functionality that the Nondeterministic
        extended attribute is intended to aide. If we come back to WebReplay in the future,
        we can bring it back.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateImplementationFunctionCall):
        (GetNativeTypeForMemoization): Deleted.
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Removed.
        * bindings/scripts/test/JS/JSTestNondeterministic.h: Removed.
        * bindings/scripts/test/TestNondeterministic.idl: Removed.
        * page/Navigator.idl:
        * page/Screen.idl:

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the -webkit-letterpress value for text-decoration
        https://bugs.webkit.org/show_bug.cgi?id=165313

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTextDecorationLine):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix the color-gamut media query evaluator
        https://bugs.webkit.org/show_bug.cgi?id=165309

        Reviewed by Zalan Bujtas).

        * css/MediaQueryEvaluator.cpp:
        (WebCore::colorGamutEvaluate):
        Unknown values should result in a failed match, not a successful match.

2016-12-02  Darin Adler  <darin@apple.com>

        Remove use of WebCore::Dictionary in MediaSession
        https://bugs.webkit.org/show_bug.cgi?id=165296

        Reviewed by Chris Dumez.

        I am not exactly sure of the status of this code. When I enabled it to test my
        changes it did not compile until I fixed some things, and it's far out of date
        of the latest draft of the Media Session Standard. But despite that I updated it.

        * DerivedSources.make: Removed a line that was breaking the build for some
        configurations, perhaps only for programmers from Apple, after r209198.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Fixed so it compiles.
        (WebCore::MediaSession::setMetadata): Changed argument to use a struct rather
        htan a WebCore::Dictionary.
        * Modules/mediasession/MediaSession.h: Added a Metadata struct, and used it.
        Also fixed the arguments to the constructor.
        * Modules/mediasession/MediaSession.idl: Added MediaMetadata and used it instead
        of Dictionary.

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure margin and font set the implicit flag properly
        https://bugs.webkit.org/show_bug.cgi?id=165306

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::CSSPropertyParser::consume4Values):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure the templatized consumeIdent uses CSSValuePool
        https://bugs.webkit.org/show_bug.cgi?id=165302

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParserHelpers.h:
        (WebCore::CSSPropertyParserHelpers::consumeIdent):

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix font-variant parsing 
        https://bugs.webkit.org/show_bug.cgi?id=165301

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariantEastAsian):
        (WebCore::CSSPropertyParser::consumeFontVariantShorthand):
        Fix a bug with font-variant-east-asian parsing where the id
        was getting improperly consumed even when it didn't match.

2016-12-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix animation property parsing
        https://bugs.webkit.org/show_bug.cgi?id=165305

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationPropertyList):
        Match the old parser by only creating a list for animation properties if there
        are two or more comma-separated values. Otherwise just return the CSSValue for
        the singleton without creating a list.

2016-12-02  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Fix build break when disabling some features.
        https://bugs.webkit.org/show_bug.cgi?id=165254

        Reviewed by Michael Catanzaro.

        If we disable SVG_FONTS or XSLT, then
        WebCore::CachedResource::isCORSSameOrigin() would have assertions
        on non-existent members. These should be isolated within "#if" as
        the other places.

        If we're in DEVELOPER_MODE but did not provide
        TEST_HYPHENATAION_PATH, then we must mark UNUSED_PARAM() if we're
        not on GTK port (ie: EFL).

        No new tests as this is a build fix.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::isCORSSameOrigin):
         - missing #if ENABLED(SVG_FONTS)
         - missing #if ENABLED(XSLT)
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::scanTestDictionariesDirectoryIfNecessary):
         - missing UNUSED_PARAM()


2016-12-02  Miguel Gomez  <magomez@igalia.com>

        [GTK] Use an OpenGL < 3.0 compliant way to request the OpenGL version
        https://bugs.webkit.org/show_bug.cgi?id=165253

        Reviewed by Carlos Garcia Campos.

        Use glGetString(GL_VERSION) to get the OpenGL version, as glGetIntegerv with GL_MAJOR_VERSION
        and GL_MINOR_VERSION is only supported from 3.0 on.

        Covered by existent tests.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::version):

2016-12-02  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r208997
        https://bugs.webkit.org/show_bug.cgi?id=165283

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/GLContext.cpp:
        glGetIntegerv is defined in gl2.h.
        GL_MAJOR_VERSION is defined in gl3.h.
        These are not included in the WinCairo build.

2016-11-30  Darin Adler  <darin@apple.com>

        Stop using WebCore::Dictionary in bindings for Fetch
        https://bugs.webkit.org/show_bug.cgi?id=165241

        Reviewed by Chris Dumez.

        * Modules/fetch/DOMWindowFetch.idl: Use RequestInit instead of Dictionary.
        No effect on code generated since this is a JSBuiltin.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setReferrerPolicy): Deleted. Bindings handle this now.
        (WebCore::setMode): Ditto.
        (WebCore::setCredentials): Ditto.
        (WebCore::setCache): Ditto.
        (WebCore::setRedirect): Ditto.
        (WebCore::setReferrer): Changed argument from Dictionary to String.
        (WebCore::buildOptions): Changed argument from Dictionary to FetchRequest::Init,
        and simplified the code accordingly.
        (WebCore::FetchRequest::initializeOptions): Ditto.
        (WebCore::FetchRequest::initializeWith): Ditto.
        * Modules/fetch/FetchRequest.h: Updated for above changes. Also added the Init struct.

        * Modules/fetch/FetchRequest.idl: Added missing "only-if-cached" value to RequestCache.
        Added RequestInit dictionary and used it instead of Dictionary. Used more-specific string
        types for the method and referrer attributes; no effect at runtime, since the code for
        getters is the same for ByteString, USVString, and DOMString and these are read-only.

        * Modules/fetch/WorkerGlobalScopeFetch.idl: Use RequestInit instead of Dictionary.
        No effect on code generated since this is a JSBuiltin.

2016-12-01  Jiewen Tan  <jiewen_tan@apple.com>

        Add a runtime flag for SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=164982

        Reviewed by Brent Fulgham.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSubtleCryptoEnabled):
        (WebCore::RuntimeEnabledFeatures::subtleCryptoEnabled):
        * page/Crypto.idl:

2016-12-01  Saam Barati  <sbarati@apple.com>

        Rename CallFrame::callee() to CallFrame::jsCallee()
        https://bugs.webkit.org/show_bug.cgi?id=165293

        Reviewed by Keith Miller.

        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSBuiltinConstructor<JSClass>::construct):
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::constructJSDataCue):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::construct):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::constructJSMutationObserver):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::constructJSWorker):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64ArrayConstructor::constructJSFloat64Array):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::construct):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::construct):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors1):
        (WebCore::constructJSTestOverloadedConstructors2):
        (WebCore::constructJSTestOverloadedConstructors3):
        (WebCore::constructJSTestOverloadedConstructors4):
        (WebCore::constructJSTestOverloadedConstructors5):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::constructJSTestOverloadedConstructorsWithSequence1):
        (WebCore::constructJSTestOverloadedConstructorsWithSequence2):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):

2016-12-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Fade controls in when entering and exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=165287

        Reviewed by Dean Jackson.

        Fade controls in when we enter and leave fullscreen.

        Test: media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls.fade-in):
        (@keyframes fade-in):
        (to):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.presentInElement):
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.buttonWasClicked):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):

2016-12-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Show and populate the tracks panel
        https://bugs.webkit.org/show_bug.cgi?id=165284

        Reviewed by Dean Jackson.

        We added a TracksPanel in https://bugs.webkit.org/show_bug.cgi?id=165239 which allows to
        show a list of media tracks and text tracks to choose from. We now show this panel when
        clicking on the tracks button in the controls bar and populate its content with the
        list of audio and text tracks for the media element. As an item is picked from the tracks
        panel, we toggle the represented track's enabled state and dismiss the panel.

        We also pick up the text track container display mostly unchanged from current media controls.

        Tests: media/modern-media-controls/tracks-support/tracks-support-click-track-in-panel.html
               media/modern-media-controls/tracks-support/tracks-support-show-and-populate-panel.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.showTracksPanel):
        * Modules/modern-media-controls/controls/text-tracks.css: Added.
        (video::-webkit-media-text-track-container):
        (video::cue):
        (video::-webkit-media-text-track-display):
        (video::-webkit-media-text-track-display-backdrop):
        (video::cue(:future)):
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):
        (video::-webkit-media-text-track-container .hidden):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport):
        (TracksSupport.prototype.destroy):
        (TracksSupport.prototype.buttonWasClicked):
        (TracksSupport.prototype.tracksPanelNumberOfSections):
        (TracksSupport.prototype.tracksPanelTitleForSection):
        (TracksSupport.prototype.tracksPanelNumberOfTracksInSection):
        (TracksSupport.prototype.tracksPanelTitleForTrackInSection):
        (TracksSupport.prototype.tracksPanelIsTrackInSectionSelected):
        (TracksSupport.prototype.tracksPanelSelectionDidChange):
        (TracksSupport.prototype.syncControl):
        (TracksSupport.prototype._textTracks):
        (TracksSupport.prototype._audioTracks):
        (TracksSupport.prototype._canPickAudioTracks):
        (TracksSupport.prototype._canPickTextTracks):
        (TracksSupport.prototype._sortedTrackList):

2016-12-01  Brent Fulgham  <bfulgham@apple.com>

        Rare crash when preparing to print
        https://bugs.webkit.org/show_bug.cgi?id=165280
        <rdar://problem/28240254>

        Reviewed by Dean Jackson.

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Only manipulate the FrameView if it is non-null.
        (WebCore::Frame::documentAtPoint): Drive-by fix to change a 0 return to nullptr.

2016-12-01  Simon Fraser  <simon.fraser@apple.com>

        Put an obvious debug border on layers with backdrop filters
        https://bugs.webkit.org/show_bug.cgi?id=165291

        Reviewed by Tim Horton.

        Put a wide magenta border on layers with backdrop filters, to highlight their performance impact.
        
        Change the "contents layer" color (used by WebGL, video etc) to blue.
        
        Make the clipping layer border slightly narrower.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setBackdropFilters):

2016-12-01  Brian Burg  <bburg@apple.com>

        Fix the Windows Release build after r209198
        https://bugs.webkit.org/show_bug.cgi?id=165285

        Unreviewed build fix.

        * Modules/webdriver/NavigatorWebDriver.cpp:
        Brute force include all the inlines to work around a JSC issue.

2016-12-01  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Only allow a single font-family in @font-face
        https://bugs.webkit.org/show_bug.cgi?id=165278

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFamilyDescriptor):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):

2016-12-01  Beth Dakin  <bdakin@apple.com>

        Blacklist Netflix for TouchBar support
        https://bugs.webkit.org/show_bug.cgi?id=165104

        Rubber-stamped by Tim Horton.

        Meant to not have the www. in the first case because that is covered by the second 
        case.

        * html/HTMLMediaElement.cpp:
        (WebCore::needsPlaybackControlsManagerQuirk):

2016-12-01  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-overflow-scrolling: touch
        https://bugs.webkit.org/show_bug.cgi?id=165275

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-12-01  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::unwrapKey to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164747
        <rdar://problem/29258198>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::unwrapKey method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-unwrapKey.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-unwrapKey.
        2. It implements unwrapKey operations of the following algorithms: AES-KW.

        Tests: crypto/subtle/aes-cbc-import-key-unwrap-jwk-rsa-key-private.html
               crypto/subtle/aes-cbc-import-key-uwrap-jwk-rsa-key-public.html
               crypto/subtle/aes-kw-generate-key-wrap-key-unwrap-key.html
               crypto/subtle/aes-kw-import-key-unwrap-raw-key.html
               crypto/subtle/rsa-oaep-import-key-unwrap-jwk-oct-key.html
               crypto/subtle/unwrapKey-malformed-parameters.html
               crypto/workers/subtle/aes-cbc-import-key-unwrap-key.html
               crypto/workers/subtle/aes-kw-import-key-unwrap-key.html
               crypto/workers/subtle/rsa-oaep-import-key-unwrap-key.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise):
        Add some comments.
        (WebCore::jsSubtleCryptoFunctionUnwrapKeyPromise):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::unwrapKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::unwrapKeyAES_KW):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):

2016-12-01  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix font-variant parsing
        https://bugs.webkit.org/show_bug.cgi?id=165266

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariantEastAsian):
        (WebCore::consumeFontVariantAlternates):
        (WebCore::consumeFontVariantPosition):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeFontVariantShorthand):
        (WebCore::consumeFontVariantList): Deleted.

2016-12-01  Brian Burg  <bburg@apple.com>

        Web Automation: expose navigator.webdriver if the page is controlled by automation
        https://bugs.webkit.org/show_bug.cgi?id=165245
        <rdar://problem/29449874>

        Reviewed by Joseph Pecoraro.

        Move the implementation into OpenSource. It's in Modules/webdriver/.

        * CMakeLists.txt:
        * DerivedSources.make:
        Add new paths and files.

        * Modules/webdriver/NavigatorWebDriver.cpp: Added.
        (WebCore::NavigatorWebDriver::NavigatorWebDriver):
        (WebCore::NavigatorWebDriver::~NavigatorWebDriver):
        (WebCore::NavigatorWebDriver::supplementName):
        (WebCore::NavigatorWebDriver::isControlledByAutomation):
        (WebCore::NavigatorWebDriver::from):
        (WebCore::JSNavigator::webdriver):
        * Modules/webdriver/NavigatorWebDriver.h: Added.
        * Modules/webdriver/NavigatorWebDriver.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:

2016-12-01  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Implement IDBObjectStore.getKey().
        https://bugs.webkit.org/show_bug.cgi?id=165256

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbobjectstore-getkey-1-private.html
               storage/indexeddb/modern/idbobjectstore-getkey-1.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::getKey):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::createObjectStoreGet):
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::requestedObjectStoreRecordType):
        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::didGetRecordOnServer):

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetRecord):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        (WebCore::IDBGetRecordData::isolatedCopy):
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        (WebCore::IDBGetRecordData::encode):
        (WebCore::IDBGetRecordData::decode):

2016-12-01  Joseph Pecoraro  <pecoraro@apple.com>

        Misc. cleanup in Modules/fetch
        https://bugs.webkit.org/show_bug.cgi?id=165240

        Reviewed by Darin Adler.

        * Modules/fetch/DOMWindowFetch.h:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        * Modules/fetch/FetchBodyOwner.cpp:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchInternals.js:
        (consumeStream):
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchResponse.h:
        Remove unnecessary includes and forward declarations.

        * Modules/fetch/DOMWindowFetch.js:
        (fetch):
        * Modules/fetch/FetchResponse.js:
        (initializeFetchResponse):
        * Modules/fetch/WorkerGlobalScopeFetch.js:
        (fetch):
        Improve style.

2016-12-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn off text selection
        https://bugs.webkit.org/show_bug.cgi?id=165261

        Reviewed by Dean Jackson.

        We turn off text selection and force a non-text cursor for all text in media controls.

        Tests: media/modern-media-controls/airplay-placard/airplay-placard-text-section.html
               media/modern-media-controls/pip-placard/pip-placard-text-section.html
               media/modern-media-controls/status-label/status-label-text-selection.html

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

2016-12-01  Chris Dumez  <cdumez@apple.com>

        Parameter to DOMStringList.contains() should be mandatory
        https://bugs.webkit.org/show_bug.cgi?id=165257

        Reviewed by Alex Christensen.

        Parameter to DOMStringList.contains() should be mandatory.
        Gecko and Blink have it mandatory but WebKit had it optional and the
        string 'undefined" was used by default, which is not helpful.

        No new tests, updated existing test.

        * dom/DOMStringList.idl:

2016-12-01  Jiewen Tan  <jiewen_tan@apple.com>

        SubtleCrypto::deriveBits always return NOT_SUPPORTED_ERR for now
        https://bugs.webkit.org/show_bug.cgi?id=164745
        <rdar://problem/29258118>

        Reviewed by Darin Adler.

        Since we don't support any cryptography algorithms that has deriveBits operations,
        SubtleCrypto::deriveBits will always return NOT_SUPPORTED_ERR for now.

        Test: crypto/subtle/deriveBits-malformed-parameters.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionDeriveBitsPromise):
        (WebCore::JSSubtleCrypto::deriveBits):
        * crypto/SubtleCrypto.idl:

2016-12-01  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream][Mac] Video presets sometimes don't work
        https://bugs.webkit.org/show_bug.cgi?id=165214
        <rdar://problem/29444533>

        Reviewed by Jer Noble.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setPreset): Set videoSettings width and height.
        (WebCore::AVVideoCaptureSource::setupCaptureSession): Store videoSettings object for later use.
          Set videoSettings width and height.
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions):
        (WebCore::AVVideoCaptureSource::sizeForPreset): New.

2016-12-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Promote the "on" property from AirPlayButton to IconButton
        https://bugs.webkit.org/show_bug.cgi?id=165260

        Reviewed by Dean Jackson.

        With the fix for https://bugs.webkit.org/show_bug.cgi?id=165239 we now set the "on"
        property for the TracksButton as well, so it makes sense to provide that property
        for all IconButton subclasses, not just AirplayButton.

        Test: media/modern-media-controls/icon-button/icon-button-on.html

        * Modules/modern-media-controls/controls/airplay-button.css:
        (button.airplay.on):
        * Modules/modern-media-controls/controls/airplay-button.js:
        (AirplayButton):
        (AirplayButton.prototype.get on): Deleted.
        (AirplayButton.prototype.set on): Deleted.
        * Modules/modern-media-controls/controls/icon-button.css:
        (button.icon:active,):
        (button.icon:active): Deleted.
        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype.get on):
        (IconButton.prototype.set on):

2016-11-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for File and Blob constructors
        https://bugs.webkit.org/show_bug.cgi?id=165218

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add/remove new files.

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::constructJSBlob): Deleted.
        * bindings/js/JSFileCustom.cpp: Removed.
        Remove custom constructors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateDictionaryImplementationContent):
        (GenerateParametersCheck):
        Add support for optional sequences without default values. Move string default value
        optimizations into GenerateDefaultValue.

        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        * fileapi/Blob.idl:
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:
        * fileapi/File.idl:
        Add support for the generated constructors.

        * fileapi/BlobBuilder.cpp: Copied from Source/WebCore/fileapi/WebKitBlobBuilder.cpp.
        * fileapi/BlobBuilder.h: Copied from Source/WebCore/fileapi/WebKitBlobBuilder.h.
        * fileapi/WebKitBlobBuilder.cpp: Removed.
        * fileapi/WebKitBlobBuilder.h: Removed.
        Rename WebKitBlobBuilder to BlobBuilder, and update to work with generated constructor.

        * fileapi/BlobPropertyBag.h: Added.
        * fileapi/BlobPropertyBag.idl: Added.
        Added.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/BlobRegistryImpl.h:
        Avoid copies of the BlobPart Vector.

        * platform/network/BlobPart.h:
        Replace header-guards with #pragma once.

2016-12-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Provide a UI object to show a list of tracks
        https://bugs.webkit.org/show_bug.cgi?id=165239

        Reviewed by Dean Jackson.

        We add a new TracksPanel object which we will be using to display a list of
        audio and text tracks. The tracks panel can be shown by calling showTracksPanel()
        on a MacOSMediaControls object and will be dismissed by hitting the Escape key
        or mousing down outside of the panel's bounds. While the tracks panel is up,
        arrows can be used to focus individual tracks which can be activated by either
        pressing the Space bar or Enter key.

        Activating a track will briefly animate its background to indicate selection and
        dismissing the tracks panel is also animated with a quick fade-out animation.

        Data for the tracks panel is provided by specifying a dataSource property and
        implementing the required methods to provide the number of sections in the panel,
        the number of tracks in each section, etc.

        Tests: media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside.html
               media/modern-media-controls/tracks-panel/tracks-panel-hide-esc-key.html
               media/modern-media-controls/tracks-panel/tracks-panel-hide.html
               media/modern-media-controls/tracks-panel/tracks-panel-population.html
               media/modern-media-controls/tracks-panel/tracks-panel-right-x.html
               media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-keyboard.html
               media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-mouse.html
               media/modern-media-controls/tracks-panel/tracks-panel.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen):
        (.media-controls.mac.fullscreen > .controls-bar):
        (.media-controls.mac.fullscreen .tracks-panel):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline .tracks-panel):
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.showTracksPanel):
        (MacOSMediaControls.prototype.hideTracksPanel):
        (MacOSMediaControls):
        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls):
        * Modules/modern-media-controls/controls/placard.css:
        (.placard):
        * Modules/modern-media-controls/controls/status-label.css:
        (.status-label):
        * Modules/modern-media-controls/controls/tracks-panel.css: Added.
        (.tracks-panel):
        (.tracks-panel *):
        (.tracks-panel.fade-out):
        (.tracks-panel-section):
        (.tracks-panel-section:first-of-type):
        (.tracks-panel-section > h3):
        (.tracks-panel-section > ul):
        (.tracks-panel-section > ul > li):
        (.tracks-panel-section > ul > li:focus):
        (.tracks-panel-section > ul > li.selected:before):
        (.tracks-panel-section > ul > li.animated):
        (@keyframes tracks-panel-item-selection):
        (22.22%):
        * Modules/modern-media-controls/controls/tracks-panel.js: Added.
        (TracksPanel.prototype.get presented):
        (TracksPanel.prototype.presentInParent):
        (TracksPanel.prototype.hide):
        (TracksPanel.prototype.get rightX):
        (TracksPanel.prototype.set rightX):
        (TracksPanel.prototype.trackNodeSelectionAnimationDidEnd):
        (TracksPanel.prototype.mouseMovedOverTrackNode):
        (TracksPanel.prototype.mouseExitedTrackNode):
        (TracksPanel.prototype.commitProperty):
        (TracksPanel.prototype.handleEvent):
        (TracksPanel.prototype._childrenFromDataSource.):
        (TracksPanel.prototype._childrenFromDataSource):
        (TracksPanel.prototype._handleMousedown):
        (TracksPanel.prototype._handleKeydown):
        (TracksPanel.prototype._dismiss):
        (TracksPanel.prototype._focusTrackNode):
        (TracksPanel.prototype._focusPreviousTrackNode):
        (TracksPanel.prototype._focusNextTrackNode):
        (TracksPanel.prototype._focusFirstTrackNode):
        (TracksPanel.prototype._focusLastTrackNode):
        (TrackNode):
        (TrackNode.prototype.activate):
        (TrackNode.prototype.handleEvent):
        (TrackNode.prototype._animationDidEnd):
        * Modules/modern-media-controls/js-files:
        * WebCore.xcodeproj/project.pbxproj:

2016-12-01  Andreas Kling  <akling@apple.com>

        Log some basic memory usage stats at interesting points in time
        <https://webkit.org/b/165206>

        Reviewed by Antti Koivisto.

        This patch adds a mechanism to mark points of interests where we might
        want to do performance-related logging:

            class PerformanceLogging {
                enum PointOfInterest {
                    MainFrameLoadStarted,
                    MainFrameLoadCompleted,
                }
                void didReachPointOfInterest(PointOfInterest)
            }

        You get to this object via MainFrame::performanceLogging().

        We respond to these callbacks by logging some basic data about memory usage
        to the PerformanceLogging channel.

        More PointOfInterest values will be added soon.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::setState):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame):
        * page/MainFrame.h:
        * page/PerformanceLogging.cpp: Added.
        (WebCore::toString):
        (WebCore::getMemoryUsageStatistics):
        (WebCore::PerformanceLogging::PerformanceLogging):
        (WebCore::writeLog):
        (WebCore::PerformanceLogging::didReachPointOfInterest):
        (WebCore::PerformanceLogging::getPlatformMemoryUsageStatistics):
        * page/PerformanceLogging.h: Added.
        * page/cocoa/PerformanceLoggingCocoa.mm: Added.
        (WebCore::PerformanceLogging::getPlatformMemoryUsageStatistics):
        * platform/Logging.h:

2016-11-28  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Move more attributes from RenderGrid to the new Grid class
        https://bugs.webkit.org/show_bug.cgi?id=165094

        Reviewed by Darin Adler.

        Moved more attributes from RenderGrid to Grid as they are not really part of the state of
        the RenderGrid object. In particular m_autoRepeat{Columns|Rows},
        m_autoRepeatEmpty{Columns|Rows} and m_orderIterator. All of them are now private attributes
        of the Grid class so clients should use the getters/setters provided by this patch.

        This change allows to definitely remove the grid{Column|Row}Count() methods from
        RenderGrid. These two became Grid::numTracks() which returns the number of tracks in the
        data structure used to represent the grid (currently a matrix). Contrary to that,
        RenderGrid::numTracks() returns the actual size of the grid.

        No new tests as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::Grid::numTracks):
        (WebCore::RenderGrid::Grid::ensureGridSize):
        (WebCore::RenderGrid::Grid::setAutoRepeatTracks):
        (WebCore::RenderGrid::Grid::autoRepeatTracks):
        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyColumns):
        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyRows):
        (WebCore::RenderGrid::Grid::hasAutoRepeatEmptyTracks):
        (WebCore::RenderGrid::Grid::isEmptyAutoRepeatTrack):
        (WebCore::RenderGrid::Grid::autoRepeatEmptyTracks):
        (WebCore::RenderGrid::Grid::gridItemSpan):
        (WebCore::RenderGrid::Grid::clear):
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::computeTrackSizesForDirection):
        (WebCore::RenderGrid::guttersSize):
        (WebCore::RenderGrid::computeIntrinsicLogicalHeight):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::rawGridTrackSize):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::trackSizesForComputedStyle):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::assumedRowsSizeForOrthogonalChild):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::numTracks):
        (WebCore::RenderGrid::paintChildren):
        (WebCore::RenderGrid::gridColumnCount): Deleted.
        (WebCore::RenderGrid::gridRowCount): Deleted.
        (WebCore::RenderGrid::hasAutoRepeatEmptyTracks): Deleted.
        (WebCore::RenderGrid::isEmptyAutoRepeatTrack): Deleted.
        (WebCore::RenderGrid::cachedGridSpan): Deleted.
        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::autoRepeatCountForDirection): Deleted.

2016-11-30  Brady Eidson  <beidson@apple.com>

        Unreviewed, rolling out r209168.

        Caused 2 API tests to fail

        Reverted changeset:

        "IndexedDB: When doing puts, don't
        "updateAllIndexesForAddRecord" if there are no indexes."
        https://bugs.webkit.org/show_bug.cgi?id=165215
        http://trac.webkit.org/changeset/209168

2016-11-30  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Build break when using --minimal
        https://bugs.webkit.org/show_bug.cgi?id=165238

        Reviewed by Darin Adler.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo): Use #if ENABLE(VIDEO_TRACK) guard.

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add support for right-to-left layouts
        https://bugs.webkit.org/show_bug.cgi?id=165229

        Reviewed by Dean Jackson.

        We implement the "usesLTRUserInterfaceLayoutDirection" property which is set by HTMLMediaElement
        and set a CSS class when the layout is left-to-right, flipping the fullscreen volume slider in the
        case that it would not be present (right-to-left).

        Test: media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen:not(.uses-ltr-user-interface-layout-direction) .volume.slider):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get usesLTRUserInterfaceLayoutDirection):
        (MediaControls.prototype.set usesLTRUserInterfaceLayoutDirection):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.set usesLTRUserInterfaceLayoutDirection):
        (MediaController.prototype._updateControlsIfNeeded):

2016-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused parameter of InspectorInstrumentation::didFinishXHRLoading
        https://bugs.webkit.org/show_bug.cgi?id=165233

        Reviewed by Brian Burg.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didFinishXHRLoading):
        * inspector/InspectorNetworkAgent.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        Remove unused ThreadableLoaderClient parameter.

2016-11-30  Brady Eidson  <beidson@apple.com>

        IndexedDB: When doing puts, don't "updateAllIndexesForAddRecord" if there are no indexes.
        https://bugs.webkit.org/show_bug.cgi?id=165215

        Reviewed by Alex Christensen.

        No new tests (No observable behavior change).

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord): Don't "updateAllIndexesForAddRecord" if there are no indexes.
          Avoiding this saved us some IDBKey serialization and Javascript object manipulation.

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] LayoutNode: only mark properties as dirty if different than current value
        https://bugs.webkit.org/show_bug.cgi?id=165236

        Reviewed by Simon Fraser.

        Check that the new value is different than the current value before marking the property as dirty.

        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.set x):
        (LayoutNode.prototype.set y):
        (LayoutNode.prototype.set width):
        (LayoutNode.prototype.set height):
        (LayoutNode.prototype.set visible):
        (performScheduledLayout):
        * Modules/modern-media-controls/controls/scheduler.js:
        (const.scheduler.new.prototype.get hasScheduledLayoutCallbacks):

2016-11-30  Jiewen Tan  <jiewen_tan@apple.com>

        SubtleCrypto::deriveKey always return NOT_SUPPORTED_ERR for now
        https://bugs.webkit.org/show_bug.cgi?id=164744
        <rdar://problem/29258083>

        Reviewed by Darin Adler.

        Since we don't support any cryptography algorithms that has deriveKey operations,
        SubtleCrypto::deriveKey will always return NOT_SUPPORTED_ERR for now.

        Test: crypto/subtle/deriveKey-malformed-parameters.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionDeriveKeyPromise):
        (WebCore::JSSubtleCrypto::deriveKey):
        * crypto/SubtleCrypto.idl:

2016-11-26  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::digest to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164742
        <rdar://problem/29258037>

        Reviewed by Darin Adler.

        This patch updates the SubtleCrypto::digest method to match the latest spec:
        https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-digest.
        It also refers to the latest Editor's Draft to a certain degree:
        https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-digest.
        Currently supported digest algorithms are SHA-1, SHA-224, SHA-256, SHA-384,
        and SHA-512.

        Tests: crypto/subtle/digest-malformed-parameters.html
               crypto/subtle/sha1-digest.html
               crypto/subtle/sha224-digest.html
               crypto/subtle/sha256-digest.html
               crypto/subtle/sha384-digest.html
               crypto/subtle/sha512-digest.html
               crypto/workers/subtle/sha1-digest.html
               crypto/workers/subtle/sha224-digest.html
               crypto/workers/subtle/sha256-digest.html
               crypto/workers/subtle/sha384-digest.html
               crypto/workers/subtle/sha512-digest.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionDigestPromise):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::digest):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] UI Library: <audio> controls
        https://bugs.webkit.org/show_bug.cgi?id=164619
        <rdar://problem/29207215>

        Reviewed by Dean Jackson.

        Add a default size for <audio> elements (200x50).

        Tests: media/modern-media-controls/audio/audio-controls-buttons.html
               media/modern-media-controls/audio/audio-controls-metrics.html

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

2016-11-30  Brady Eidson  <beidson@apple.com>

        REGRESSION (r209144): API test IndexedDB.DeleteRecovery failing.
        https://bugs.webkit.org/show_bug.cgi?id=165216

        Rubberstamped by Tim Horton.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::closeSQLiteDB): Change invalid ASSERT into a null check.

2016-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add separate settings and preferences to enable/disable async decoding for large images and animated images
        https://bugs.webkit.org/show_bug.cgi?id=165177

        Reviewed by Simon Fraser.

        Instead of having the async image decoding be controlled by one setting,
        two separate settings are added:
            largeImageAsyncDecodingEnabled
            animatedImageAsyncDecodingEnabled
            
        And an existing setting is removed:
            asyncImageDecodingEnabled

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load):
        * loader/cache/CachedImage.h:
        * page/Settings.in:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalStartAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageObserver.h:

2016-11-30  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: layoutState->m_renderer == this in WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage
        https://bugs.webkit.org/show_bug.cgi?id=155364
        <rdar://problem/27720461>

        Reviewed by David Hyatt.

        RenderNamedFlowThread is considered to be a root for the current renderer context so
        we need to bail out from the containing block traversal here (like we do for the RenderView). 

        Test: fast/replaced/replaced-element-with-percentage-width-inside-flow-asserts.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):

2016-11-30  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Send operations off to the server in batches instead of one at a time.
        https://bugs.webkit.org/show_bug.cgi?id=165221

        Reviewed by Myles C. Maxfield.

        No new tests (No observable behavior change).

        On a profile of "Lots of writes to an IndexedDB", timer scheduling/firing presented as over 10% of the time.

        This patch negates much of that.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::pendingOperationTimerFired): Send 100 operations off to the server
          before spinning the runloop, instead of only 1.

2016-11-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls are not visible when returning from picture-in-picture playback
        https://bugs.webkit.org/show_bug.cgi?id=165183

        Reviewed by Dean Jackson.

        We need to call MediaControlsHost::setPreparedToReturnVideoLayerToInline() when we return from
        picture-in-picture playback such that the video layer is correctly stacked under the media controls.
        We call that function in a rAF call to ensure it's performed in sync with the next scheduled layout
        or the media controls would not appear in sync with the video layer.

        We also fix an error from a previous commit in ControlsVisibilitySupport.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.syncControl):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._returnMediaLayerToInlineIfNeeded):

2016-11-30  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::wrapKey to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164746
        <rdar://problem/29258160>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::wrapKey method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-wrapKey.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-wrapKey.
        2. It implements wrapKey operations of the following algorithms: AES-KW.
        3. It also replaces JSSubtleCrypto* with auto in all promise functions.

        Tests: crypto/subtle/aes-cbc-import-key-wrap-jwk-rsa-key-private.html
               crypto/subtle/aes-cbc-import-key-wrap-jwk-rsa-key-public.html
               crypto/subtle/aes-kw-import-key-wrap-raw-key.html
               crypto/subtle/aes-kw-wrap-key-malformed-parameters.html
               crypto/subtle/rsa-oaep-import-key-wrap-jwk-oct-key.html
               crypto/subtle/wrapKey-malformed-parameters.html
               crypto/workers/subtle/aes-cbc-import-key-wrap-key.html
               crypto/workers/subtle/aes-kw-import-key-wrap-key.html
               crypto/workers/subtle/rsa-oaep-import-key-wrap-key.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::supportExportKeyThrow):
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise):
        (WebCore::JSSubtleCrypto::wrapKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::wrapKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::wrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::wrapKeyAES_KW):
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):

2016-11-29  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for more missing / exotic IDLTypes
        https://bugs.webkit.org/show_bug.cgi?id=165156

        Reviewed by Alex Christensen.

        - Adds JSDOMConvert support for WebIDL's 'callback interface' and 'callback function'.
        - Adds JSDOMConvert support for WebIDL extensions for SerializedScriptValue, Dictionary, 
          EventListener and XPathNSResolver (moving much of their special casing out of perl and
          into JSDOMConvert).

        * DerivedSources.make:
        Adds $(WebCore)/testing to the list of available IDL directories to keep internals
        compiling.

        * Modules/webaudio/WaveShaperNode.cpp:
        * Modules/webaudio/WaveShaperNode.h:
        Update to take curve by reference.

        * bindings/generic/IDLTypes.h:
        (WebCore::IDLWrapper):
        Add helper type, IDLWrapper, which serves as a base type for all IDLTypes that are
        RefCounted.

        * bindings/js/JSDOMConvert.h:
        (WebCore::convert):
        (WebCore::Converter<IDLNullable<T>>::convert):
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        (WebCore::JSConverter<IDLCallbackFunction<T>>::convert):
        (WebCore::JSConverter<IDLCallbackFunction<T>>::convertNewlyCreated):
        (WebCore::Converter<IDLCallbackInterface<T>>::convert):
        (WebCore::JSConverter<IDLCallbackInterface<T>>::convert):
        (WebCore::JSConverter<IDLCallbackInterface<T>>::convertNewlyCreated):
        (WebCore::Converter<IDLSerializedScriptValue<T>>::convert):
        (WebCore::JSConverter<IDLSerializedScriptValue<T>>::convert):
        (WebCore::Converter<IDLLegacyDictionary<T>>::convert):
        (WebCore::Converter<IDLEventListener<T>>::convert):
        (WebCore::Converter<IDLXPathNSResolver<T>>::convert):
        (WebCore::JSConverter<IDLXPathNSResolver<T>>::convert):
        (WebCore::JSConverter<IDLXPathNSResolver<T>>::convertNewlyCreated):
        Add converters for the new types. IDLSerializedScriptValue, IDLLegacyDictionary, IDLEventListener and IDLXPathNSResolver
        have been templatized to avoid including their implementation classes everywhere. We can improve this in the future by
        splitting JSDOMConvert up into to separate files.

        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        (IsInterfaceType):
        (IsWrapperType):
        (ComputeIsCallbackInterface):
        (ComputeIsCallbackFunction):
        Add new predicates, IsBuiltinType and IsInterfaceType, and re-work IsWrapperType to determine all types that
        have a JS wrapper (and consequently a JS{name}.h file).

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        Update to add include for EventListener.

        (GetArgumentExceptionFunction):
        (GetArgumentExceptionThrower):
        (GetAttributeExceptionFunction):
        (GetAttributeExceptionThrower):
        Add support for exceptions for callbacks.

        (PassArgumentExpression):
        Factor out logic on how to pass arguments to C++.

        (GenerateHeader):
        Make toWrapped and JSDOMWrapperConverterTraits work with XPathNSResolver.

        (GenerateImplementation):
        Update to use PassArgumentExpression and pass a global object reference to JSValueToNative.

        (GenerateParametersCheck):
        Remove special casing for callbacks.

        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        Simplify toJS functions. State and global object are not necessary.

        (GetBaseIDLType):
        Add support for new types. Add assertion so that unknown types can't get through.

        (ShouldPassArgumentByReference):
        Rename from ShouldPassWrapperByReference, and merge in CodeGenerator's ShouldPassWrapperByReference.

        (JSValueToNativeDOMConvertNeedsThisObject):
        Added. Predicate to determine types that need a this object for conversion.

        (JSValueToNativeDOMConvertNeedsGlobalObject):
        Added. Predicate to determine types that need a global object for conversion.

        (JSValueToNative):
        Remove special cases for new types.

        (NativeToJSValueDOMConvertNeedsState):
        Add SerializedScriptValue and XPathNSResolver.

        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Add SerializedScriptValue and XPathNSResolver.

        (NativeToJSValueUsingReferences):
        (NativeToJSValueUsingPointers):
        (NativeToJSValue):
        Remove unused $statePointer and replace $globalObject with $globalObjectReference. Remove
        special cases for new types.

        (GenerateConstructorDefinition):
        Use PassArgumentExpression.

        * 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/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        Update tests. Remove test for a readonly attribute returning a Promise, which is not supported
        yet (this was caught by the assertion added to GetBaseIDLType). Add tests for passing and returning 
        SerializedScriptValues from functions.

2016-11-30  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::verify to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164741
        <rdar://problem/29257935>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::verify method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-verify.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-verify.
        2. It implements verify operations of the following algorithms: HMAC, and
           RSASSA-PKCS1-V1_5.

        Tests: crypto/subtle/hmac-generate-key-sign-verify.html
               crypto/subtle/hmac-import-key-verify-sha1.html
               crypto/subtle/hmac-import-key-verify-sha224.html
               crypto/subtle/hmac-import-key-verify-sha256.html
               crypto/subtle/hmac-import-key-verify-sha384.html
               crypto/subtle/hmac-import-key-verify-sha512.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-key-sign-verify.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-verify-sha1.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-verify-sha224.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-verify-sha256.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-verify-sha384.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-verify-sha512.html
               crypto/subtle/verify-malformed-parameters.html
               crypto/workers/subtle/hmac-import-key-verify.html
               crypto/workers/subtle/rsassa-pkcs1-v1_5-import-key-verify.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionVerifyPromise):
        (WebCore::JSSubtleCrypto::verify):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::verify):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::verifyRSASSA_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):

2016-11-30  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix columns shorthand parsing
        https://bugs.webkit.org/show_bug.cgi?id=165210

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeColumns):
        (WebCore::consumeColumnWidthOrCount): Deleted.
        Bring over the old parser code, since it was actually better at creating implicit values for auto.

2016-11-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Pass the embedding app's bundle ID to new instances of NEFilterSource
        https://bugs.webkit.org/show_bug.cgi?id=165168
        <rdar://problem/29003618>

        Reviewed by Simon Fraser.

        * platform/RuntimeApplicationChecks.h: Declared applicationBundleIdentifier().
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::applicationBundleIdentifier): Made non-static.
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize): If the new NEFilterSource instance
        responds to -setSourceAppBundleID:, call it with applicationBundleIdentifier().
        * platform/spi/cocoa/NEFilterSourceSPI.h: Moved NEFilterSourceOptionsRedirectURL into the
        !USE(APPLE_INTERNAL_SDK) section and unconditionally declared @property sourceAppBundleID in
        a new category on NEFilterSource.

2016-11-30  Brent Fulgham  <bfulgham@apple.com>

        Use 'childOfType' template when retrieving Shadow DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=165145
        <rdar://problem/29331830>

        Reviewed by Antti Koivisto.

        Tests: fast/shadow-dom/color-input-element-shadow-manipulation.html
               fast/shadow-dom/file-input-element-shadow-manipulation.html
               fast/shadow-dom/keygen-shadow-manipulation.html
               fast/shadow-dom/media-shadow-manipulation.html
               fast/shadow-dom/range-input-element-shadow-manipulation.html
               fast/shadow-dom/textarea-shadow-manipulation.html

        Switch to using 'childOfType' when retrieving Shadow DOM elements, rather
        than relying on expected element positions, as these can be changed by
        JavaScript.

        Drive by fix: Make more use of is<> and downcast<> templates rather than blindly casting.

        * dom/Element.h:
        (WebCore::Element::isUploadButton): Added.
        (WebCore::Element::isSliderContainerElement): Added.
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::shadowColorSwatch): Use 'childOfType' rather than assuming
        the first child is the one we want.
        * html/FileInputType.cpp:
        (isType): Added.
        (WebCore::FileInputType::disabledAttributeChanged): Use 'childOfType' rather than assuming
        the first child is the one we want.
        (WebCore::FileInputType::multipleAttributeChanged): Ditto.
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::shadowSelect): Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls): Ditto.
        (WebCore::HTMLMediaElement::hasMediaControls): Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement): Ditto.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::sliderTrackElement): Ditto.
        * html/shadow/SliderThumbElement.h:
        (isType): Added.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::targetClone): Use 'childOfType' rather than assuming
        the first child is the one we want.

2016-11-30  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Cache and reuse SQLiteStatements in the SQLite backend.
        https://bugs.webkit.org/show_bug.cgi?id=164974

        Reviewed by Alex Christensen.

        No new tests (No behavior change other than being faster).

        Instead of building new SQLiteStatements from scratch each time they're needed and then
        finalizing them after they're used for a single operation, we cache them.

        For tests that do puts and/or gets in tight loops, this shows up as a 5%-20% speedup on profiles.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::~SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteUnusedBlobFileRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        (WebCore::IDBServer::SQLiteIDBBackingStore::closeSQLiteDB):
        (WebCore::IDBServer::queryForGetAllObjectStoreRecords): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

2016-11-30  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure -webkit-background-size coalesces identical values.
        https://bugs.webkit.org/show_bug.cgi?id=165207

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBackgroundSize):

2016-11-30  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Sync video preview layer and parent layer sizes
        https://bugs.webkit.org/show_bug.cgi?id=165139

        Reviewed by Jer Noble.

        CALayer auto-resizing doesn't work on iOS, so manually reize the video capture preview layer
        whenever the background layer's bounds change.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoSourcePreview::AVVideoSourcePreview): Create layer observer.
        (WebCore::AVVideoSourcePreview::backgroundLayerBoundsChanged): Sync preview layer and background
          layer sizes.
        (WebCore::AVVideoSourcePreview::invalidate): Invalidate and clear observer.
        (-[WebCoreAVVideoCaptureSourceObserver initWithParent:]):
        (-[WebCoreAVVideoCaptureSourceObserver setParent:]): Add KVO bounds observer.
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): Call
        parent when "bounds" changes.
        (-[WebCoreAVVideoCaptureSourceObserver actionForKey:]): Return nil to disable all animations.

2016-11-30  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix crash in -webkit-shape-outside parsing
        https://bugs.webkit.org/show_bug.cgi?id=165202

        Reviewed by Dean Jackson.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildSerializablePositionOffset):
        The old parser never passed in a singleton value ID for top/right/bottom/left.
        The new parser does, and it exposed a bug in the serialization code for
        shapes that didn't properly create the offset primitive value as a percentage
        in those cases.

2016-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] IndexedDB: Switch to use new encoder for IDBKeyData
        https://bugs.webkit.org/show_bug.cgi?id=165191

        Reviewed by Sergio Villar Senin.

        Instead of using KeyedEncoder.

        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::isLegacySerializedIDBKeyData): Helper function to check whether the given data were encoded with
        KeyedEncoder or not.
        (WebCore::serializedTypeForKeyType): Remove #ifdefs for CF and always use the new encoder.
        (WebCore::encodeKey): Ditto.
        (WebCore::serializeIDBKeyData): Ditto.
        (WebCore::decodeKey): Ditto.
        (WebCore::deserializeIDBKeyData): Ditto.

2016-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Null ResourceResponse Preflight requests cause crash
        https://bugs.webkit.org/show_bug.cgi?id=165120
        <rdar://problem/27911350>

        Reviewed by Brian Burg.

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        Only inform Web Inspector about successful responses. Informing with a
        null response would break the expected Inspector API contract when
        notifying about did receive response. Also, when informing Web Inspector
        include a didFinishLoading event so the frontend knows this pre-flight
        request is complete.

2016-11-30  Brady Eidson  <beidson@apple.com>

        REGRESSION (209086): IDB tests crash under GuardMalloc.
        https://bugs.webkit.org/show_bug.cgi?id=165201

        Reviewed by Chris Dumez.

        No new tests (Covered by literally every IDB test when run under GuardMalloc).

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::commitOnServer): "Commit on Server" operations are special, in that they
          are the last operation a transaction does, and they remove themselves from the protector map right away.
          So when we remove them from the protector map we also need to remove their raw-pointer from the 
          "in-progress" queue.

2016-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Some animated image do not animate after reseting their animations
        https://bugs.webkit.org/show_bug.cgi?id=165131

        Reviewed by Simon Fraser.

        Test: fast/images/reset-image-animation.html

        The bug happens because the ImageFrameCache does not reset its cached
        frames properly when the BitmapImage rests its animation.

        -- We need to ignore caching the new NativeImage of an ImageFrame if the
        decoding thread is terminated after asynchronously calling  
        cacheFrameNativeImageAtIndex() on the main thread through callOnMainThread().
        Although the decoding thread was terminated this call is still scheduled
        to be executed later on the main thread.

        -- We need to open the m_frameRequestQueue before starting a new decoding
        thread. Opening m_frameRequestQueue clears the enqueued requests from the 
        previous decoding thread and allows enqueueing requests for the new thread.

        -- We need to clear the ImageFrames which were being decoded at the time
        the decoding queue was closing and their new NativeImages were not cached.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheFrameNativeImageAtIndex): Assert the NativeImage
        is cached for an ImageFrame which is still being decoded.

        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Open the m_frameRequestQueue
        before starting the decoding thread. Don't cache the NativeImage of an ImageFrame
        unless the decoding thread is still alive and it the same as the one that makes
        the asynchronous call to cacheFrameNativeImageAtIndex().
        
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Don't request an
        image frame to be be asynchronously decoded if it is already being decoded.
        
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): Clear the ImageFrames that
        were being decoded when the decoding thread terminates.
        
        * testing/Internals.cpp:
        (WebCore::Internals::resetImageAnimation):
        * testing/Internals.h:
        * testing/Internals.idl:
        Expose BitmapImage::resetAnimation() through Internals so tests can force it.

2016-11-30  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        Reviewed by Sam Weinig.

        Profiling Speedometer on my iMac showed the tokenizer as one of the
        hottest functions. This patch streamlines the segmented string class,
        removing various unused features, and also improves some other functions
        seen on the Speedometer profile. On my iMac I measured a speedup of
        about 3%. Changes include:

        - Removed m_pushedChar1, m_pushedChar2, and m_empty data members from the
          SegmentedString class and all the code that used to handle them.

        - Simplified the SegmentedString advance functions so they are small
          enough to get inlined in the HTML tokenizer.

        - Updated callers to call the simpler SegmentedString advance functions
          that don't handle newlines in as many cases as possible.

        - Cut down on allocations of SegmentedString and made code move the
          segmented string and the strings that are moved into it rather than
          copying them whenever possible.

        - Simplified segmented string functions, removing some branches, mostly
          from the non-fast paths.

        - Removed small unused functions and small functions used in only one
          or two places, made more functions private and renamed for clarity.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite): Moved a little more of the common code in here
        from the two functions belwo. Removed obsolete comment saying this was not
        following the DOM specification because it is. Removed unneeded special
        cases for 1 argument and no arguments. Take a reference instead of a pointer.
        (WebCore::JSHTMLDocument::write): Updated for above.
        (WebCore::JSHTMLDocument::writeln): Ditto.

        * css/parser/CSSTokenizer.cpp: Added now-needed include.
        * css/parser/CSSTokenizer.h: Removed unneeded include.

        * css/parser/CSSTokenizerInputStream.h: Added definition of kEndOfFileMarker
        here; this is now separate from the use in the HTMLParser. In the long run,
        unclear to me whether it is really needed in either.

        * dom/Document.cpp:
        (WebCore::Document::prepareToWrite): Added. Helper function used by the three
        different variants of write. Using this may prevent us from having to construct
        a SegmentedString just to append one string after future refactoring.
        (WebCore::Document::write): Updated to take an rvalue reference and move the
        value through.
        (WebCore::Document::writeln): Use a single write call instead of two.

        * dom/Document.h: Changed write to take an rvalue reference to SegmentedString
        rather than a const reference.

        * dom/DocumentParser.h: Changed insert to take an rvalue reference to
        SegmentedString. In the future, should probably overload to take a single
        string since that is the normal case.

        * dom/RawDataDocumentParser.h: Updated for change to DocumentParser.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::append): Refactored a bit, just enough
        so that we don't need an assignment operator for SegmentedString that can
        copy a String.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert): Updated to take an rvalue reference,
        and move the value through.
        * html/parser/HTMLDocumentParser.h: Updated for the above.

        * html/parser/HTMLEntityParser.cpp:
        (WebCore::HTMLEntityParser::consumeNamedEntity): Updated for name changes.
        Changed the twao calls to advance here to call advancePastNonNewline; no
        change in behavior, but asserts what the code was assuming before, that the
        character was not a newline.

        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::appendToEnd): Updated to take an rvalue reference,
        and move the value through.
        (WebCore::HTMLInputStream::insertAtCurrentInsertionPoint): Ditto.
        (WebCore::HTMLInputStream::markEndOfFile): Removed the code to construct a
        SegmentedString, overkill since we can just append an individual string.
        (WebCore::HTMLInputStream::splitInto): Rewrote the move idiom here to actually
        use move, which will reduce reference count churn and other unneeded work.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): Removed unneeded
        construction of a SegmentedString, just to append a string.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::HTMLSourceTracker): Moved to the class definition.
        (WebCore::HTMLSourceTracker::source): Updated for function name change.
        * html/parser/HTMLSourceTracker.h: Updated for above.

        * html/parser/HTMLTokenizer.cpp: Added now-needed include.
        (WebCore::HTMLTokenizer::emitAndResumeInDataState): Use advancePastNonNewline,
        since this function is never called in response to a newline character.
        (WebCore::HTMLTokenizer::commitToPartialEndTag): Ditto.
        (WebCore::HTMLTokenizer::commitToCompleteEndTag): Ditto.
        (WebCore::HTMLTokenizer::processToken): Use ADVANCE_PAST_NON_NEWLINE_TO macro
        instead of ADVANCE_TO in cases where the character we are advancing past is
        known not to be a newline, so we can use the more efficient advance function
        that doesn't check for the newline character.

        * html/parser/InputStreamPreprocessor.h: Moved kEndOfFileMarker to
        SegmentedString.h; not sure that's a good place for it either. In the long run,
        unclear to me whether this is really needed.
        (WebCore::InputStreamPreprocessor::peek): Added UNLIKELY for the empty check.
        Added LIKELY for the not-special character check.
        (WebCore::InputStreamPreprocessor::advance): Updated for the new name of the
        advanceAndUpdateLineNumber function.
        (WebCore::InputStreamPreprocessor::advancePastNonNewline): Added. More
        efficient than advance for cases where the last characer is known not to be
        a newline character.
        (WebCore::InputStreamPreprocessor::skipNextNewLine): Deleted. Was unused.
        (WebCore::InputStreamPreprocessor::reset): Deleted. Was unused except in the
        constructor; added initial values for the data members to replace.
        (WebCore::InputStreamPreprocessor::processNextInputCharacter): Removed long
        FIXME comment that didn't really need to be here. Reorganized a bit.
        (WebCore::InputStreamPreprocessor::isAtEndOfFile): Renamed and made static.

        * html/track/BufferedLineReader.cpp:
        (WebCore::BufferedLineReader::nextLine): Updated to not use the poorly named
        scanCharacter function to advance past a newline. Also renamed from getLine
        and changed to return Optional<String> instead of using a boolean to indicate
        failure and an out argument.

        * html/track/BufferedLineReader.h:
        (WebCore::BufferedLineReader::BufferedLineReader): Use the default, putting
        initial values on each data member below.
        (WebCore::BufferedLineReader::append): Updated to take an rvalue reference,
        and move the value through.
        (WebCore::BufferedLineReader::scanCharacter): Deleted. Was poorly named,
        and easy to replace with two lines of code at its two call sites.
        (WebCore::BufferedLineReader::reset): Rewrote to correctly clear all the
        data members of the class, not just the segmented string.

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::parseWebVTTFileHeader): Updated to take
        an rvalue reference and move the value through.
        * html/track/InbandGenericTextTrack.h: Updated for the above.

        * html/track/InbandTextTrack.h: Updated since parseWebVTTFileHeader now
        takes an rvalue reference.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFileHeader): Updated to take an rvalue reference
        and move the value through.
        (WebCore::WebVTTParser::parseBytes): Updated to pass ownership of the string
        in to the line reader append function.
        (WebCore::WebVTTParser::parseCueData): Use auto and WTFMove for WebVTTCueData.
        (WebCore::WebVTTParser::flush): More of the same.
        (WebCore::WebVTTParser::parse): Changed to use nextLine instead of getLine.
        * html/track/WebVTTParser.h: Updated for the above.

        * html/track/WebVTTTokenizer.cpp:
        (WebCore::advanceAndEmitToken): Use advanceAndUpdateLineNumber by its new
        name, just advance. No change in behavior.
        (WebCore::WebVTTTokenizer::WebVTTTokenizer): Pass a String, not a
        SegmentedString, to add the end of file marker.

        * platform/graphics/InbandTextTrackPrivateClient.h: Updated since
        parseWebVTTFileHeader takes an rvalue reference.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::Substring::appendTo): Moved here from the header.
        The only caller is SegmentedString::toString, inside this file.
        (WebCore::SegmentedString::SegmentedString): Deleted the copy constructor.
        No longer needed.
        (WebCore::SegmentedString::operator=): Defined a move assignment operator
        rather than an ordinary assignment operator, since that's what the call
        sites really need.
        (WebCore::SegmentedString::length): Simplified since we no longer need to
        support pushed characters.
        (WebCore::SegmentedString::setExcludeLineNumbers): Simplified, since we
        can just iterate m_otherSubstrings without an extra check. Also changed to
        write directly to the data member of Substring instead of using a function.
        (WebCore::SegmentedString::updateAdvanceFunctionPointersForEmptyString):
        Added. Used when we run out of characters.
        (WebCore::SegmentedString::clear): Removed code to clear now-deleted members.
        Updated for changes to other member names.
        (WebCore::SegmentedString::appendSubstring): Renamed from just append to
        avoid ambiguity with the public append function. Changed to take an rvalue
        reference, and move in, and added code to set m_currentCharacter properly,
        so the caller doesn't have to deal with that.
        (WebCore::SegmentedString::close): Updated to use m_isClosed by its new name.
        Also removed unneeded comment about assertion that fires when trying to close
        an already closed string.
        (WebCore::SegmentedString::append): Added overloads for rvalue references of
        both entire SegmentedString objects and of String. Streamlined to just call
        appendSubstring and append to the deque.
        (WebCore::SegmentedString::pushBack): Tightened up since we don't allow empty
        strings and changed to take just a string, not an entire segmented string.
        (WebCore::SegmentedString::advanceSubstring): Moved logic into the
        advancePastSingleCharacterSubstringWithoutUpdatingLineNumber function.
        (WebCore::SegmentedString::toString): Simplified now that we don't need to
        support pushed characters.
        (WebCore::SegmentedString::advancePastNonNewlines): Deleted.
        (WebCore::SegmentedString::advance8): Deleted.
        (WebCore::SegmentedString::advanceWithoutUpdatingLineNumber16): Renamed from
        advance16. Simplified now that there are no pushed characters. Also changed to
        access data members of m_currentSubstring directly instead of calling a function.
        (WebCore::SegmentedString::advanceAndUpdateLineNumber8): Deleted.
        (WebCore::SegmentedString::advanceAndUpdateLineNumber16): Ditto.
        (WebCore::SegmentedString::advancePastSingleCharacterSubstringWithoutUpdatingLineNumber):
        Renamed from advanceSlowCase. Removed uneeded logic to handle pushed characters.
        Moved code in here from advanceSubstring.
        (WebCore::SegmentedString::advancePastSingleCharacterSubstring): Renamed from
        advanceAndUpdateLineNumberSlowCase. Simplified by calling the function above.
        (WebCore::SegmentedString::advanceEmpty): Broke assertion up into two.
        (WebCore::SegmentedString::updateSlowCaseFunctionPointers): Updated for name changes.
        (WebCore::SegmentedString::advancePastSlowCase): Changed name and meaning of
        boolean argument. Rewrote to use the String class less; it's now used only when
        we fail to match after the first character rather than being used for the actual
        comparison with the literal.

        * platform/text/SegmentedString.h: Moved all non-trivial function bodies out of
        the class definition to make things easier to read. Moved the SegmentedSubstring
        class inside the SegmentedString class, making it a private struct named Substring.
        Removed the m_ prefix from data members of the struct, removed many functions from
        the struct and made its union be anonymous instead of naming it m_data. Removed
        unneeded StringBuilder.h include.
        (WebCore::SegmentedString::isEmpty): Changed to use the length of the substring
        instead of a separate boolean. We never create an empty substring, nor leave one
        in place as the current substring unless the entire segmented string is empty.
        (WebCore::SegmentedString::advancePast): Updated to use the new member function
        template instead of a non-template member function. The new member function is
        entirely rewritten and does the matching directly rather than allocating a string
        just to do prefix matching.
        (WebCore::SegmentedString::advancePastLettersIgnoringASCIICase): Renamed to make
        it clear that the literal must be all non-letters or lowercase letters as with
        the other "letters ignoring ASCII case" functions. The three call sites all fit
        the bill. Implement by calling the new function template.
        (WebCore::SegmentedString::currentCharacter): Renamed from currentChar.
        (WebCore::SegmentedString::Substring::Substring): Use an rvalue reference and
        move the string in.
        (WebCore::SegmentedString::Substring::currentCharacter): Simplified since this
        is never used on an empty substring.
        (WebCore::SegmentedString::Substring::incrementAndGetCurrentCharacter): Ditto.
        (WebCore::SegmentedString::SegmentedString): Overload to take an rvalue reference.
        Simplified since there are now fewer data members.
        (WebCore::SegmentedString::advanceWithoutUpdatingLineNumber): Renamed from
        advance, since this is only safe to use if there is some reason it is OK to skip
        updating the line number.
        (WebCore::SegmentedString::advance): Renamed from advanceAndUpdateLineNumber,
        since doing that is the normal desired behavior and not worth mentioning in the
        public function name.
        (WebCore::SegmentedString::advancePastNewline): Renamed from
        advancePastNewlineAndUpdateLineNumber.
        (WebCore::SegmentedString::numberOfCharactersConsumed): Greatly simplified since
        pushed characters are no longer supported.
        (WebCore::SegmentedString::characterMismatch): Added. Used by advancePast.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::unconsumeCharacters): Use toString rather than toStringPreserveCapacity
        because the SegmentedString is going to take ownership of the string.
        (WebCore::consumeCharacterReference): Updated to use the pushBack that takes just
        a String, not a SegmentedString. Also use advancePastNonNewline.

        * xml/parser/MarkupTokenizerInlines.h: Added ADVANCE_PAST_NON_NEWLINE_TO.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insert): Updated since this takes an rvalue reference.
        (WebCore::XMLDocumentParser::append): Removed unnecessary code to create a
        SegmentedString.
        * xml/parser/XMLDocumentParser.h: Updated for above. Also fixed indentation
        and initialized most data members.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Moved most data member
        initialization into the class definition.
        (WebCore::XMLDocumentParser::resumeParsing): Removed code that copied a
        segmented string, but converted the whole thing into a string before using it.
        Now we convert to a string right away.

2016-11-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative cmake buildfix after r209070.

        * PlatformMac.cmake: New sources added.

2016-11-29  Philippe Normand  <pnormand@igalia.com>

        [WebRTC][OpenWebRTC] Temporary device selection support
        https://bugs.webkit.org/show_bug.cgi?id=165141

        Reviewed by Alejandro G. Castro.

        Make sure the player handles only one audio and video track at
        most for now. The device choice can be influenced with the
        WEBKIT_VIDEO_DEVICE and WEBKIT_AUDIO_DEVICE environment variables.
        Each variable optionally holds the name of the device to use.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::play):
        (WebCore::MediaPlayerPrivateGStreamerOwr::load):

2016-11-29  Claudio Saavedra  <csaavedra@igalia.com>

        Build fix with !HAVE(ACCESSIBILITY)

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

        Add dummy implementations.

2016-11-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209058 and r209074.
        https://bugs.webkit.org/show_bug.cgi?id=165188

        These changes caused API test StringBuilderTest.Equal to crash
        and/or fail. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Streamline and speed up tokenizer and segmented string
        classes"
        https://bugs.webkit.org/show_bug.cgi?id=165003
        http://trac.webkit.org/changeset/209058

        "REGRESSION (r209058): API test StringBuilderTest.Equal
        crashing"
        https://bugs.webkit.org/show_bug.cgi?id=165142
        http://trac.webkit.org/changeset/209074

2016-11-29  Nan Wang  <n_wang@apple.com>

        AX: ARIA tree & treeitem roles & aria-expanded state not spoken to VoiceOver iOS 10
        https://bugs.webkit.org/show_bug.cgi?id=164936
        <rdar://problem/29334274>

        Reviewed by Chris Fleizach.

        Added a new container type on iOS for trees. Also, since the treeitem role is ignored
        on iOS, we should expose the expanded status of a treeitem to its accessible children.

        Test: accessibility/ios-simulator/treeitem-expanded.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTreeAncestor]):
        (-[WebAccessibilityObjectWrapper treeItemParentForObject:]):
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAExpanded]):
        (-[WebAccessibilityObjectWrapper accessibilityIsExpanded]):

2016-11-29  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209096, r209104, and r209114.

        Caused over 200 layout test failures on the bots

        Reverted changesets:

        "IndexedDB 2.0: Cache and reuse SQLiteStatements in the SQLite
        backend."
        https://bugs.webkit.org/show_bug.cgi?id=164974
        http://trac.webkit.org/changeset/209096

        "Followup to:"
        https://bugs.webkit.org/show_bug.cgi?id=164974
        http://trac.webkit.org/changeset/209104

        "REGRESSION (r209104): storage/indexeddb/modern/gc-closes-
        database(-private).html timeout."
        https://bugs.webkit.org/show_bug.cgi?id=165186
        http://trac.webkit.org/changeset/209114

2016-11-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Localization
        https://bugs.webkit.org/show_bug.cgi?id=165176

        Reviewed by Dean Jackson.

        We add a new localization file for the purpose of modern media controls, since we may
        require different strings than the legacy one.

        * English.lproj/modern-media-controls-localized-strings.js: Added.
        * Modules/modern-media-controls/controls/airplay-placard.js:
        (AirplayPlacard):
        * Modules/modern-media-controls/controls/pip-placard.js:
        (PiPPlacard):
        * Modules/modern-media-controls/main.js:
        (UIString):
        * Modules/modern-media-controls/media/status-support.js:
        (StatusSupport.prototype.syncControl):
        (StatusSupport):
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsScript):

2016-11-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Show an invalid placard when we fail to load a media file
        https://bugs.webkit.org/show_bug.cgi?id=165180

        Reviewed by Dean Jackson.

        We now show a placard with an "invalid" icon when we fail to load the media file.

        Tests: media/modern-media-controls/invalid-placard/invalid-placard.html
               media/modern-media-controls/placard-support/placard-support-error.html

        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/invalid-placard.js: Added.
        (InvalidPlacard):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get showsStartButton):
        (MediaControls.prototype.set showsStartButton):
        (MediaControls.prototype.get showsPlacard):
        (MediaControls.prototype.hidePlacard):
        (MediaControls.prototype._invalidateChildren):
        * Modules/modern-media-controls/controls/placard.css:
        (.placard .icon):
        * Modules/modern-media-controls/images/iOS/invalid-placard@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/invalid-placard@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/invalid-placard@3x.png: Added.
        * Modules/modern-media-controls/images/macOS/invalid-placard@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/invalid-placard@2x.png: Added.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype.get mediaEvents):
        (PlacardSupport.prototype._updatePlacard):
        (PlacardSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Only show controls when the controls attribute is set
        https://bugs.webkit.org/show_bug.cgi?id=165175

        We now respect the value of the media's "controls" attribute so that the start button and the controls
        bar are only shown when that attribute is set to "true".

        Reviewed by Dean Jackson.

        Tests: media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-off-audio.html
               media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-off.html
               media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html
               media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html
               media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html

        * Modules/modern-media-controls/controls/controls-bar.js: Added.
        (ControlsBar):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.): Deleted.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/controls-visibility-support.js: Added.
        (ControlsVisibilitySupport):
        (ControlsVisibilitySupport.prototype.destroy):
        (ControlsVisibilitySupport.prototype.get mediaEvents):
        (ControlsVisibilitySupport.prototype.syncControl):
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport):
        (MediaControllerSupport.prototype.handleEvent):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-29  Brady Eidson  <beidson@apple.com>

        Followup to:
        IndexedDB 2.0: Cache and reuse SQLiteStatements in the SQLite backend.
        https://bugs.webkit.org/show_bug.cgi?id=164974

        Unreviewed.

        * Modules/indexeddb/IDBTransaction.h: Until I can explore further why these operations
          are not protected in the map, change these raw pointers to RefPtrs.
          This fixes issues seen under GuardMalloc.

2016-11-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Inline controls show when entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=165161

        Reviewed by Dean Jackson.

        We would error when entering fullscreen due to the TracksSupport having its destroy() method
        called when tearing down the inline controls and the `mediaController` reference being incorrect.

        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.destroy):

2016-11-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Status text stuck saying "Loading" after media starts playing
        https://bugs.webkit.org/show_bug.cgi?id=165162

        Reviewed by Dean Jackson.

        We forgot to handle the case where none of the special messages need to be set and the
        status text should be just an empty string, meaning there is no status text shown in the
        controls bar and the scrubber appears instead.

        Test: media/modern-media-controls/status-support/status-support-playing.html

        * Modules/modern-media-controls/media/status-support.js:
        (StatusSupport.prototype.syncControl):
        (StatusSupport):

2016-11-29  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Cache and reuse SQLiteStatements in the SQLite backend.
        https://bugs.webkit.org/show_bug.cgi?id=164974

        Reviewed by Alex Christensen.

        No new tests (No behavior change other than being faster).

        Instead of building new SQLiteStatements from scratch each time they're needed and then
        finalizing them after used for a single operation, cache them.

        For tests that do puts and/or gets in tight loops, this shows up as a 5%-20% speedup on profiles.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteUnusedBlobFileRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        (WebCore::IDBServer::SQLiteIDBBackingStore::closeSQLiteDB):
        (WebCore::IDBServer::queryForGetAllObjectStoreRecords): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

2016-11-22  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::sign to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164740
        <rdar://problem/29257864>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::sign method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-sign.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-sign.
        2. It implements sign operations of the following algorithms: HMAC, and
           RSASSA-PKCS1-V1_5.
        3. It also replaces promise.copyRef() with WTFMove(promise) for all the
           capture lists of exception callbacks in promise functions.

        Tests: crypto/subtle/hmac-import-key-sign-sha1.html
               crypto/subtle/hmac-import-key-sign-sha224.html
               crypto/subtle/hmac-import-key-sign-sha256.html
               crypto/subtle/hmac-import-key-sign-sha384.html
               crypto/subtle/hmac-import-key-sign-sha512.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-sign-sha1.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-sign-sha224.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-sign-sha256.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-sign-sha384.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-key-sign-sha512.html
               crypto/subtle/sign-malformed-parameters.html
               crypto/workers/subtle/hmac-import-key-sign.html
               crypto/workers/subtle/rsassa-pkcs1-v1_5-import-key-sign.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        Fix a minor bug.
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        (WebCore::jsSubtleCryptoFunctionSignPromise):
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        (WebCore::jsSubtleCryptoFunctionImportKeyPromise):
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::JSSubtleCrypto::sign):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::sign):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::commonCryptoHMACAlgorithm):
        (WebCore::calculateSignature):
        Remove a null guardance since the depending bug is resolved.
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::signRSASSA_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):

2016-11-29  Chris Dumez  <cdumez@apple.com>

        Can't download move.simple.com direct deposit transition PDF: Non user-triggered activations of anchors that have a download attribute are ignored
        https://bugs.webkit.org/show_bug.cgi?id=165148
        <rdar://problem/29421771>

        Reviewed by Daniel Bates.

        We were ignoring non user-triggered activations of anchors that have a
        download attribute which is stricter than Chrome and Firefox and breaks
        downloads on move.simple.com. This patch relaxes our policy to allow
        simulated clicks on such links, similarly to other browsers.

        Web authors can anyway already trigger downloads using script by setting
        window.location to a specific URL and serving to right HTTP headers to
        trigger a download.

        Note that our previous behavior matches the current version of the
        specification so I also filed a bug against the HTML specification to
        see if we can get it changed to match the behavior of browsers:
        - https://github.com/whatwg/html/issues/2116

        No new tests, updated existing test.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.

2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address post-review feedback following r209070 (AppKit momentum scrolling adoption for scroll snapping)
        https://bugs.webkit.org/show_bug.cgi?id=165147

        Reviewed by Simon Fraser.

        Addresses some additional review feedback after r209070, which adopts _NSScrollingMomentumCalculator for scroll
        snapping. See individual changes below for more details. No new tests, since there is no behavior change.

        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/Page.cpp:
        (WebCore::Page::ensureTestTrigger):
        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::filteredVelocity):
        * page/WheelEventDeltaFilter.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView):

        Rather than force a complete layout pass when the Page first acquires a WheelEventTestTrigger, we now simply
        have the scrolling coordinator update its frame node to expect a wheel event test trigger.

        * page/scrolling/ScrollingMomentumCalculator.cpp:
        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator):
        (WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime):
        (WebCore::BasicScrollingMomentumCalculator::animationDuration):
        (WebCore::BasicScrollingMomentumCalculator::initializeSnapProgressCurve):
        (WebCore::BasicScrollingMomentumCalculator::animationProgressAfterElapsedTime):
        * page/scrolling/ScrollingMomentumCalculator.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculator::create):
        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::animationDuration):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyWithDeltasAndVelocity):
        (WebCore::PlatformWheelEvent::scrollingVelocity):

        Change scrolling velocity in PlatformWheelEvent to be a FloatSize instead of a FloatPoint. This change
        propagates to the ScrollController, where state variables and arguments pertaining to scrolling velocity are
        also now sizes instead of points.

        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        * platform/cocoa/ScrollSnapAnimatorState.h:
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::ScrollSnapAnimatorState::transitionToGlideAnimationState):
        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::teardownAnimationForState):
        (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset):

        Refactor elapsed time to be Seconds instead of double. Additionally, use MonotonicTime::now() instead of
        monotonicallyIncreasingTime(), and MonotonicTime instead of double for keeping track of the start time.

        * platform/spi/mac/NSScrollingMomentumCalculatorSPI.h:

2016-11-29  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: The client's transaction operation queue should flush as much to the server as possible.
        https://bugs.webkit.org/show_bug.cgi?id=164932

        Reviewed by Alex Christensen.

        No new tests (No new test necessary, covered extensively by all existing tests).

        Profiles showed that on tests with lots of rapid IDBRequests in a row, both the main thread and database 
        threads were largely idle.

        The explanation was simple. Currently the client IDBTransaction queues up operations and only vends them out 
        to the server 1 at a time, waiting for the previous operation to complete.

        While some operations do need to wait for the server to reply, by making the change to send most operations 
        (all operations with an associated IDBRequest) to the server without waiting we get rid of most of the idleness.

        It is possible we can find a few other types of operations to send without waiting, but we haven't yet seen any
        test case where they would show up on profiles.

        Sending more than one operation at a time was actually a very small part of this change.
        As many "edge case" regression tests revealed, we also needed to start having IDBTransaction track all of their
        "in progress" operations such that they could be aborted on the client side in exceptional circumstances.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::abortInProgressOperations): Abort's all in-progress operations (ones that have already
          been sent to the server)
        (WebCore::IDBTransaction::abortOnServerAndCancelRequests): Abort in-progress operations before pending ones.
        (WebCore::IDBTransaction::operationTimerFired): If we just started an operation with an associated IDBRequest,
          schedule the timer to send another one right away.
        (WebCore::IDBTransaction::operationDidComplete):
        (WebCore::IDBTransaction::connectionClosedFromServer): Abort in-progress operations before pending ones.
        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/client/TransactionOperation.cpp:
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::completed):
        (WebCore::IDBClient::TransactionOperation::hasIDBRequest):

2016-11-29  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix ::cue parsing
        https://bugs.webkit.org/show_bug.cgi?id=165152

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::setPseudoElementType):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isOnlyPseudoClassFunction):
        (WebCore::isOnlyPseudoElementFunction):
        (WebCore::CSSSelectorParser::consumePseudo):
        (WebCore::isPseudoClassFunction): Deleted.
        (WebCore::isPseudoElementFunction): Deleted.

2016-11-28  Gavin Barraclough  <barraclough@apple.com>

        HTMLMediaElement::updateVolume should updateIsPlayingMedia
        https://bugs.webkit.org/show_bug.cgi?id=165132

        Reviewed by Darin Adler & Jer Noble.

        HTMLMediaElement::mediaState takes the volume into account when determining whether media
        is playing (audio is not considered to be playing if volume is 0). As such, any change to
        the volume may require mediaState to be recomputed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateVolume):

2016-11-29  Daniel Bates  <dabates@apple.com>

        Avoid ref-count churn in ShadowParseContext::commitColor()
        https://bugs.webkit.org/show_bug.cgi?id=165125

        Reviewed by Simon Fraser.

        Avoid ref-count churn in ShadowParseContext::commitColor() by moving the passed
        color into its instance variable.

        Also modified ShadowParseContext::commitColor() to take a Ref<> instead of a
        RefPtr<> because it is never passed a nullptr.

        * css/parser/CSSParser.cpp:
        (WebCore::ShadowParseContext::commitColor):

2016-11-29  Daniel Bates  <dabates@apple.com>

        Avoid ref-count churn in CSSParser::ValueWithCalculation::setCalculation()
        https://bugs.webkit.org/show_bug.cgi?id=165127

        Reviewed by Simon Fraser.

        Use WTFMove() to move the passed RefPtr into CSSParser::ValueWithCalculation::m_calculation
        instead of copying it.

        * css/parser/CSSParser.h:
        (WebCore::CSSParser::ValueWithCalculation::setCalculation):

2016-11-29  Daniel Bates  <dabates@apple.com>

        CryptoAlgorithm::generateKey() should take lvalue reference to const CryptoAlgorithmParameters
        https://bugs.webkit.org/show_bug.cgi?id=165111

        Reviewed by Darin Adler.

        CryptoAlgorithm::generateKey() and its overrides always expect to receive a non-null pointer
        to a CryptoAlgorithmParameter object and never take ownership of it. This kind of relationship
        is best expressed by modifying CryptoAlgorithm::generateKey() to take a lvalue reference to
        a const CryptoAlgorithmParameter object.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::generateKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:

2016-11-29  Andy Estes  <aestes@apple.com>

        window.name leaks information across domains
        https://bugs.webkit.org/show_bug.cgi?id=158216
        <rdar://problem/14548481>

        Reviewed by Brent Fulgham.

        When updating the history after a cross-origin navigation, the HTML Standard says:

        "If the browsing context is a top-level browsing context, but not an auxiliary browsing
        context, then set the browsing context's name to the empty string."

        https://html.spec.whatwg.org/multipage/browsers.html#resetBCName

        Tests: http/tests/security/window-name-after-cross-origin-aux-frame-navigation.html
               http/tests/security/window-name-after-cross-origin-main-frame-navigation.html
               http/tests/security/window-name-after-cross-origin-sub-frame-navigation.html
               http/tests/security/window-name-after-same-origin-aux-frame-navigation.html
               http/tests/security/window-name-after-same-origin-main-frame-navigation.html
               http/tests/security/window-name-after-same-origin-sub-frame-navigation.html

        * loader/FrameLoader.cpp:
        (WebCore::shouldClearWindowName): Returns true if frame is a main frame with no opener and
        newDocument does not have the same origin as the frame's current document.
        (WebCore::FrameLoader::clear): Changed to set m_frame's name to nullAtom if
        clearWindowProperties and shouldClearWindowName() are true.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccessStorage): Changed to call isSameOriginAs() and check
        m_universalAccess.
        (WebCore::SecurityOrigin::isSameOriginAs): Renamed from isThirdParty(); removed the check
        for m_universalAccess.
        (WebCore::SecurityOrigin::isThirdParty): Renamed to isSameOriginAs().
        * page/SecurityOrigin.h: Renamed isThirdParty() to isSameOriginAs() and made it public.

2016-11-29  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix parsing of "all" in transitions
        https://bugs.webkit.org/show_bug.cgi?id=165144

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTransitionProperty):

2016-11-29  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix @page rule parsing
        https://bugs.webkit.org/show_bug.cgi?id=165143

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):

2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build after r209070

        -[ScrollingMomentumCalculatorMac calculateToReachDestination] is only available on Sierra.

        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):
        * platform/spi/mac/NSScrollingMomentumCalculatorSPI.h:

2016-11-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll snapping on Mac should use AppKit animations
        https://bugs.webkit.org/show_bug.cgi?id=147261
        <rdar://problem/29395293>

        Reviewed by Brent Fulgham.

        Refactors the scroll snapping animation logic to support arbitrary scrolling momentum calculators and
        introduces ScrollingMomentumCalculatorMac, which wraps AppKit's _NSScrollingMomentumCalculator. On macOS El
        Capitan and later, we use the platform scrolling momentum calculator and for all other cases, we fall back to
        the preexissting platform-invariant momentum calculator.

        Previously, the scroll snapping animation logic was shared between the ScrollSnapAnimatorState and
        ScrollController -- namely, the ScrollController would update various parameters of the ScrollSnapAnimatorState
        and then tell it to compute animation-specific constants and coefficients. After this patch, ScrollController
        will no longer directly set the ScrollSnapAnimatorState's member variables. Instead, it will tell the animator
        state to transition to a new ScrollSnapState with the necessary parameters, and the ScrollSnapAnimatorState is
        responsible for modifying itself accordingly. Furthermore, logic pertaining to computing animated scroll offsets
        is now split out into a new ScrollingMomentumCalculator, which may have different platform-dependent
        implementations. The correct calculator is initialized via ScrollingMomentumCalculator::create, which currently
        returns a ScrollingMomentumCalculatorMac on El Capitan and later, and a BasicScrollingMomentumCalculator
        otherwise.

        The new abstracted ScrollingMomentumCalculator is initialized with various parameters describing the scrolled
        content and viewport, as well as the initial and target scrolling offsets. The momentum calculator is then able
        to compute the animated scroll offset at any given elapsed time, as well as the total duration of the snapping
        animation. The ScrollController's scroll snap timer uses this information (via the ScrollSnapAnimatorState) to
        animate its client's scroll offset during a snap or glide.

        Also reenables 8 failing and/or flaky scroll snapping tests and adds a new layout test. This patch addresses
        two causes for failures and flakiness in these scroll snapping tests:

        1.  When starting or stopping the scroll snap animation timer, we call deferTestsForReason and
            removeTestDeferralForReason, respectively. These were actually noops for the first simulated scroll gesture
            on each of the failing mainframe scrolling tests due to m_expectsWheelEventTestTrigger being false. This
            member variable is updated when AsyncScrollingCoordinator::frameViewLayoutUpdated is invoked, wherein we
            call ScrollingStateFrameScrollingNode::setExpectsWheelEventTestTrigger(true) when the test has started
            monitoring wheel events. However, if this does not happen before scrolling begins in the test (which is the
            case here), then the mainframe scrolling node will not expect a wheel event test trigger even though
            eventSender.monitorWheelEvents() has been called. To fix this, we simply make the Page trigger a layout of
            the main FrameView when first ensuring the wheel event test trigger on the Page.

        2.  The second reason for flakiness affects both overflow and mainframe scrolling. Previously, due to the way
            we would wait for multiple momentum scroll events before starting to glide, we would end up starting the
            scroll snap timer for a snapping animation, stopping it, and then starting it again for the glide animation.
            Thus, if the wheel event test trigger's timer fires right after the scroll snap timer stops and before it
            starts again due to a glide animation, it will erroneously think that scroll snapping is complete, even
            though it's only just about to begin! Now that we know scrolling velocity when we receive the initial
            "momentum begin", we now directly transition the scroll snap state from a snapping state to a gliding state
            and no longer stop and start the timer during this transition, which means that the test trigger will be
            deferred for at least the entire duration of the scroll snapping animation (starting right after the first
            "drag end" wheel event).

        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-vertical-then-horizontal.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/Page.cpp:
        (WebCore::Page::ensureTestTrigger):

        Addresses test failures by forcing the mainframe scrolling node to expect wheel event test triggers.

        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::create):
        (WebCore::WheelEventDeltaFilter::filteredVelocity):
        * page/WheelEventDeltaFilter.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta):

        Add support for plumbing filtered scrolling velocity over to the ScrollController.

        * page/scrolling/ScrollingMomentumCalculator.cpp: Copied from Source/WebCore/platform/cocoa/ScrollSnapAnimatorState.mm.
        (WebCore::ScrollingMomentumCalculator::ScrollingMomentumCalculator):
        (WebCore::ScrollingMomentumCalculator::create):

        Creates a platform-independent BasicScrollingMomentumCalculator.

        (WebCore::BasicScrollingMomentumCalculator::BasicScrollingMomentumCalculator):
        (WebCore::BasicScrollingMomentumCalculator::linearlyInterpolatedOffsetAtProgress):
        (WebCore::BasicScrollingMomentumCalculator::cubicallyInterpolatedOffsetAtProgress):
        (WebCore::BasicScrollingMomentumCalculator::scrollOffsetAfterElapsedTime):
        (WebCore::BasicScrollingMomentumCalculator::animationDuration):
        (WebCore::BasicScrollingMomentumCalculator::initializeInterpolationCoefficientsIfNecessary):
        (WebCore::BasicScrollingMomentumCalculator::initializeSnapProgressCurve):
        (WebCore::BasicScrollingMomentumCalculator::animationProgressAfterElapsedTime):

        Interpolation logic ported over from ScrollSnapAnimatorState.

        * page/scrolling/ScrollingMomentumCalculator.h: Added.
        (WebCore::ScrollingMomentumCalculator::~ScrollingMomentumCalculator):
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h: Copied from Source/WebCore/page/WheelEventDeltaFilter.h.
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm: Added.
        (WebCore::ScrollingMomentumCalculator::create):

        Creates a ScrollingMomentumCalculatorMac.

        (WebCore::ScrollingMomentumCalculatorMac::ScrollingMomentumCalculatorMac):
        (WebCore::ScrollingMomentumCalculatorMac::scrollOffsetAfterElapsedTime):
        (WebCore::ScrollingMomentumCalculatorMac::animationDuration):
        (WebCore::ScrollingMomentumCalculatorMac::ensurePlatformMomentumCalculator):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffset):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::viewportSize):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Deleted.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyWithDeltasAndVelocity):
        (WebCore::PlatformWheelEvent::scrollingVelocity):
        (WebCore::PlatformWheelEvent::copyWithDeltas): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollOffset):
        (WebCore::ScrollAnimator::viewportSize):
        (WebCore::ScrollAnimator::scrollOffsetOnAxis): Deleted.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::otherScrollEventAxis):
        (WebCore::ScrollController::ScrollController):
        (WebCore::ScrollController::shouldOverrideInertialScrolling):
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        (WebCore::ScrollController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollController::startDeferringTestsDueToScrollSnapping):
        (WebCore::ScrollController::stopDeferringTestsDueToScrollSnapping):
        (WebCore::ScrollController::processWheelEventForScrollSnap):
        (WebCore::ScrollController::updateScrollSnapState):
        (WebCore::ScrollController::updateScrollSnapPoints):

        Update the ScrollController's ScrollSnapAnimationState for both vertical and horizontal axes. If both axes lack
        any snap points, the pointer to the animation state will be nulled out; otherwise, the animation state will
        exist.

        (WebCore::ScrollController::startScrollSnapTimer):
        (WebCore::ScrollController::stopScrollSnapTimer):
        (WebCore::ScrollController::scrollSnapTimerFired):
        (WebCore::ScrollController::activeScrollSnapIndexForAxis):
        (WebCore::ScrollController::setActiveScrollSnapIndexForAxis):
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset):
        (WebCore::ScrollController::scrollSnapPointState): Deleted.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Deleted.
        (WebCore::ScrollController::shouldOverrideWheelEvent): Deleted.
        (WebCore::projectedInertialScrollDistance): Deleted.
        (WebCore::ScrollController::beginScrollSnapAnimation): Deleted.
        (WebCore::ScrollController::endScrollSnapAnimation): Deleted.
        (WebCore::ScrollController::initializeScrollSnapAnimationParameters): Deleted.
        (WebCore::ScrollController::isSnappingOnAxis): Deleted.
        * platform/cocoa/ScrollSnapAnimatorState.h:
        (WebCore::ScrollSnapAnimatorState::snapOffsetsForAxis):
        (WebCore::ScrollSnapAnimatorState::setSnapOffsetsForAxis):
        (WebCore::ScrollSnapAnimatorState::currentState):
        (WebCore::ScrollSnapAnimatorState::activeSnapIndexForAxis):
        (WebCore::ScrollSnapAnimatorState::setActiveSnapIndexForAxis):
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::projectedInertialScrollDistance):
        (WebCore::ScrollSnapAnimatorState::transitionToSnapAnimationState):
        (WebCore::ScrollSnapAnimatorState::transitionToGlideAnimationState):
        (WebCore::ScrollSnapAnimatorState::transitionToUserInteractionState):
        (WebCore::ScrollSnapAnimatorState::transitionToDestinationReachedState):

        These methods are used to update the ScrollSnapAnimationState. These state transitions should (and do)
        encapsulate all changes that need to be made to the animation state; in other words, the ScrollController should
        no longer be reaching directly into the ScrollSnapAnimatorState to change member variables.

        (WebCore::ScrollSnapAnimatorState::setupAnimationForState):
        (WebCore::ScrollSnapAnimatorState::teardownAnimationForState):
        (WebCore::ScrollSnapAnimatorState::currentAnimatedScrollOffset):
        (WebCore::ScrollSnapAnimatorState::targetOffsetForStartOffset):
        (WebCore::ScrollSnapAnimatorState::ScrollSnapAnimatorState): Deleted.
        (WebCore::ScrollSnapAnimatorState::pushInitialWheelDelta): Deleted.
        (WebCore::ScrollSnapAnimatorState::averageInitialWheelDelta): Deleted.
        (WebCore::ScrollSnapAnimatorState::clearInitialWheelDeltaWindow): Deleted.
        (WebCore::ScrollSnapAnimatorState::isSnapping): Deleted.
        (WebCore::ScrollSnapAnimatorState::canReachTargetWithCurrentInitialScrollDelta): Deleted.
        (WebCore::ScrollSnapAnimatorState::wheelDeltaTrackingIsInProgress): Deleted.
        (WebCore::ScrollSnapAnimatorState::hasFinishedTrackingWheelDeltas): Deleted.
        (WebCore::ScrollSnapAnimatorState::interpolatedOffsetAtProgress): Deleted.
        (WebCore::ScrollSnapAnimationCurveState::initializeSnapProgressCurve): Deleted.
        (WebCore::ScrollSnapAnimationCurveState::initializeInterpolationCoefficientsIfNecessary): Deleted.
        (WebCore::ScrollSnapAnimationCurveState::interpolatedPositionAtProgress): Deleted.
        (WebCore::ScrollSnapAnimationCurveState::shouldCompleteSnapAnimationImmediatelyAtTime): Deleted.
        (WebCore::ScrollSnapAnimationCurveState::animationProgressAtTime): Deleted.

        The ScrollSnapAnimatorState now tracks state across both axes. This simplifies coordinating scroll snapping in
        both horizontal and vertical axes and fixes the issue of the scroll offset not snapping when performing a scroll
        in one direction without momentum, then scrolling with momentum in the other direction in a single gesture.

        * platform/spi/mac/NSScrollingMomentumCalculatorSPI.h: Added.

2016-11-29  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Queue up completed requests in the client, handle them one by one.
        https://bugs.webkit.org/show_bug.cgi?id=165000

        Reviewed by Alex Christensen.

        No new tests (Covered extensively by every existing test).

        Currently when a TransactionOperation completes on the server, it immediately completes
        itself on the client side, including scheduling an event dispatch if necessary.
        
        This patch changes it so that "server completed operations" instead queue up in the 
        IDBTransaction and are "client-side completed" asynchronously, 1-by-1.
        
        Currently this is a "no behavior change" because only one operation is ever sent to
        the server at a time.
        
        But that will change with https://webkit.org/b/164932
        And this patch is a pre-requisite for that.
        
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        (WebCore::IDBRequest::completeRequestAndDispatchEvent):
        (WebCore::IDBRequest::requestCompleted): Deleted.
        * Modules/indexeddb/IDBRequest.h:
        
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::abortOnServerAndCancelRequests):
        (WebCore::IDBTransaction::scheduleOperation):
        (WebCore::IDBTransaction::schedulePendingOperationTimer):
        (WebCore::IDBTransaction::pendingOperationTimerFired):
        (WebCore::IDBTransaction::operationCompletedOnServer):
        (WebCore::IDBTransaction::scheduleCompletedOperationTimer):
        (WebCore::IDBTransaction::completedOperationTimerFired):
        (WebCore::IDBTransaction::completeNoncursorRequest):
        (WebCore::IDBTransaction::completeCursorRequest):
        (WebCore::IDBTransaction::finishedDispatchEventForRequest):
        (WebCore::IDBTransaction::didStart):
        (WebCore::IDBTransaction::didOpenCursorOnServer):
        (WebCore::IDBTransaction::didIterateCursorOnServer):
        (WebCore::IDBTransaction::didGetAllRecordsOnServer):
        (WebCore::IDBTransaction::didGetRecordOnServer):
        (WebCore::IDBTransaction::didGetCountOnServer):
        (WebCore::IDBTransaction::didDeleteRecordOnServer):
        (WebCore::IDBTransaction::didClearObjectStoreOnServer):
        (WebCore::IDBTransaction::putOrAddOnServer):
        (WebCore::IDBTransaction::didPutOrAddOnServer):
        (WebCore::IDBTransaction::operationCompletedOnClient):
        (WebCore::IDBTransaction::deactivate):
        (WebCore::IDBTransaction::connectionClosedFromServer):
        (WebCore::IDBTransaction::scheduleOperationTimer): Deleted.
        (WebCore::IDBTransaction::operationTimerFired): Deleted.
        (WebCore::IDBTransaction::operationDidComplete): Deleted.
        * Modules/indexeddb/IDBTransaction.h:
        
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::completeOperation):
        
        * Modules/indexeddb/client/TransactionOperation.cpp:
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::transitionToCompleteOnThisThread):
        (WebCore::IDBClient::TransactionOperation::transitionToComplete):
        (WebCore::IDBClient::TransactionOperation::doComplete):
        (WebCore::IDBClient::TransactionOperation::idbRequest):
        (WebCore::IDBClient::TransactionOperation::performCompleteOnOriginThread): Deleted.
        (WebCore::IDBClient::TransactionOperation::completed): Deleted.

2016-11-29  Zalan Bujtas  <zalan@apple.com>

        Safari (WebKit) doesn't wrap element within flex when width comes below min-width
        https://bugs.webkit.org/show_bug.cgi?id=136041
        <rdar://problem/25569370>

        Reviewed by Darin Adler.

        While figuring out whether a particular flex item fits the current line, we need to take
        the min-width into account too. This matches both FF and Chrome behaviour.

        Tests: fast/flexbox/flex-wrap-when-min-widht-is-set-1.html
               fast/flexbox/flex-wrap-when-min-widht-is-set-2.html

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

2016-11-29  Antti Koivisto  <antti@apple.com>

        Try to fix win/gtk build.

        * style/StyleUpdate.h:
        (WebCore::Style::ElementUpdate::ElementUpdate):

            Add explicit constructor for compilers that don't support C++14 list initialization correctly.

2016-11-28  Antti Koivisto  <antti@apple.com>

        Slotted nodes ignore transition
        https://bugs.webkit.org/show_bug.cgi?id=160866
        <rdar://problem/29231901>

        Reviewed by Sam Weinig.

        The problem is that slot (display:contents) always triggers full render tree rebuild when something
        changes in the slotted subtree. This causes animation to jump to end (may be another bug).

        Test: fast/shadow-dom/shadow-host-transition.html

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::updateBeforeOrAfterPseudoElement):
        * style/StyleChange.h:

            Rearrange so the strongest ('Detach') is the highest.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            If style was display:contents and stays that way, use 'Inherit' StyleChange which doesn't force render tree rebuild.
            Refactor more of the functionality to createAnimatedElementUpdate.

        * style/StyleTreeResolver.h:

2016-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in WebCore::PlatformDisplayX11::supportsXComposite when running under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=164917

        Reviewed by Michael Catanzaro.

        WebKitGTK+ appplications are expected to call gtk_init(), because WebKitGTK+, like GTK+ itself, requires a
        display to work. We currently fallback to create a X11 display when X11 is enabled in cases where GTK+ doesn't
        have a default display (gtk_init() wasn't called or failed). That's why we end up creating an X11 display under
        Wayland when both Wayland and X11 option are enabled. The code assumes X11 display creation will always work if
        X11 is enabled, but that's not true now that we support also Wayland at runtime. So, we should try to get a
        native display before creating the PlatformDisplay. Rendering will not work in any case when gtk_init() is not
        called, but in most of the cases those applications are not actually going to render anything, so this way at
        least we will not crash.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay): Use create() method for X11 and Wayland if we couldn't get a
        native display from GTK+. If everything fails create a display with no native.
        (WebCore::PlatformDisplay::PlatformDisplay): Add NativeDisplayOwned parameter.
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create): Try to create a native Wayland display or return nullptr.
        (WebCore::PlatformDisplayWayland::PlatformDisplayWayland): Initialize NativeDisplayOwned parameter.
        (WebCore::PlatformDisplayWayland::~PlatformDisplayWayland): Destroy the display if owned.
        (WebCore::PlatformDisplayWayland::initialize): Return early if native display is nullptr.
        * platform/graphics/wayland/PlatformDisplayWayland.h:
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::create): Try to create a native X11 display or return nullptr.
        (WebCore::PlatformDisplayX11::PlatformDisplayX11): Use NativeDisplayOwned now.
        (WebCore::PlatformDisplayX11::~PlatformDisplayX11): Ditto.
        * platform/graphics/x11/PlatformDisplayX11.h:

2016-11-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Debugger should have an option for showing asynchronous call stacks
        https://bugs.webkit.org/show_bug.cgi?id=163230
        <rdar://problem/28698683>

        Reviewed by Joseph Pecoraro.

        Test: inspector/debugger/async-stack-trace.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::didScheduleAsyncCall):
        Helper function used by by instrumentation hooks. Informs the debugger
        agent that an asynchronous call was scheduled for the current script
        execution state.

        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        Asynchronous stack trace plumbing for timers (setTimeout, setInterval).
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didFireAnimationFrameImpl):
        Asynchronous stack trace plumbing for requestAnimationFrame.

2016-11-28  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, followup patch after r209059.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2016-11-28  Jiewen Tan  <jiewen_tan@apple.com>

        ASSERTION FAILED: m_scriptExecutionContext->isContextThread() seen with LayoutTest crypto/subtle/rsa-oaep-generate-key-encrypt-decrypt.html
        https://bugs.webkit.org/show_bug.cgi?id=165124
        <rdar://problem/29413805>

        Reviewed by Daniel Bates.

        We should only dereference callbacks after being back to the Document/Worker threads as
        it might destroy promises in the work queue which will then trigger the assertion.

        Covered by existing tests.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2016-11-28  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        Reviewed by Sam Weinig.

        Profiling Speedometer on my iMac showed the tokenizer as one of the
        hottest functions. This patch streamlines the segmented string class,
        removing various unused features, and also improves some other functions
        seen on the Speedometer profile. On my iMac I measured a speedup of
        about 3%. Changes include:

        - Removed m_pushedChar1, m_pushedChar2, and m_empty data members from the
          SegmentedString class and all the code that used to handle them.

        - Simplified the SegmentedString advance functions so they are small
          enough to get inlined in the HTML tokenizer.

        - Updated callers to call the simpler SegmentedString advance functions
          that don't handle newlines in as many cases as possible.

        - Cut down on allocations of SegmentedString and made code move the
          segmented string and the strings that are moved into it rather than
          copying them whenever possible.

        - Simplified segmented string functions, removing some branches, mostly
          from the non-fast paths.

        - Removed small unused functions and small functions used in only one
          or two places, made more functions private and renamed for clarity.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite): Moved a little more of the common code in here
        from the two functions belwo. Removed obsolete comment saying this was not
        following the DOM specification because it is. Removed unneeded special
        cases for 1 argument and no arguments. Take a reference instead of a pointer.
        (WebCore::JSHTMLDocument::write): Updated for above.
        (WebCore::JSHTMLDocument::writeln): Ditto.

        * css/parser/CSSTokenizer.cpp: Added now-needed include.
        * css/parser/CSSTokenizer.h: Removed unneeded include.

        * css/parser/CSSTokenizerInputStream.h: Added definition of kEndOfFileMarker
        here; this is now separate from the use in the HTMLParser. In the long run,
        unclear to me whether it is really needed in either.

        * dom/Document.cpp:
        (WebCore::Document::prepareToWrite): Added. Helper function used by the three
        different variants of write. Using this may prevent us from having to construct
        a SegmentedString just to append one string after future refactoring.
        (WebCore::Document::write): Updated to take an rvalue reference and move the
        value through.
        (WebCore::Document::writeln): Use a single write call instead of two.

        * dom/Document.h: Changed write to take an rvalue reference to SegmentedString
        rather than a const reference.

        * dom/DocumentParser.h: Changed insert to take an rvalue reference to
        SegmentedString. In the future, should probably overload to take a single
        string since that is the normal case.

        * dom/RawDataDocumentParser.h: Updated for change to DocumentParser.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::append): Refactored a bit, just enough
        so that we don't need an assignment operator for SegmentedString that can
        copy a String.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert): Updated to take an rvalue reference,
        and move the value through.
        * html/parser/HTMLDocumentParser.h: Updated for the above.

        * html/parser/HTMLEntityParser.cpp:
        (WebCore::HTMLEntityParser::consumeNamedEntity): Updated for name changes.
        Changed the twao calls to advance here to call advancePastNonNewline; no
        change in behavior, but asserts what the code was assuming before, that the
        character was not a newline.

        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::appendToEnd): Updated to take an rvalue reference,
        and move the value through.
        (WebCore::HTMLInputStream::insertAtCurrentInsertionPoint): Ditto.
        (WebCore::HTMLInputStream::markEndOfFile): Removed the code to construct a
        SegmentedString, overkill since we can just append an individual string.
        (WebCore::HTMLInputStream::splitInto): Rewrote the move idiom here to actually
        use move, which will reduce reference count churn and other unneeded work.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): Removed unneeded
        construction of a SegmentedString, just to append a string.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::HTMLSourceTracker): Moved to the class definition.
        (WebCore::HTMLSourceTracker::source): Updated for function name change.
        * html/parser/HTMLSourceTracker.h: Updated for above.

        * html/parser/HTMLTokenizer.cpp: Added now-needed include.
        (WebCore::HTMLTokenizer::emitAndResumeInDataState): Use advancePastNonNewline,
        since this function is never called in response to a newline character.
        (WebCore::HTMLTokenizer::commitToPartialEndTag): Ditto.
        (WebCore::HTMLTokenizer::commitToCompleteEndTag): Ditto.
        (WebCore::HTMLTokenizer::processToken): Use ADVANCE_PAST_NON_NEWLINE_TO macro
        instead of ADVANCE_TO in cases where the character we are advancing past is
        known not to be a newline, so we can use the more efficient advance function
        that doesn't check for the newline character.

        * html/parser/InputStreamPreprocessor.h: Moved kEndOfFileMarker to
        SegmentedString.h; not sure that's a good place for it either. In the long run,
        unclear to me whether this is really needed.
        (WebCore::InputStreamPreprocessor::peek): Added UNLIKELY for the empty check.
        Added LIKELY for the not-special character check.
        (WebCore::InputStreamPreprocessor::advance): Updated for the new name of the
        advanceAndUpdateLineNumber function.
        (WebCore::InputStreamPreprocessor::advancePastNonNewline): Added. More
        efficient than advance for cases where the last characer is known not to be
        a newline character.
        (WebCore::InputStreamPreprocessor::skipNextNewLine): Deleted. Was unused.
        (WebCore::InputStreamPreprocessor::reset): Deleted. Was unused except in the
        constructor; added initial values for the data members to replace.
        (WebCore::InputStreamPreprocessor::processNextInputCharacter): Removed long
        FIXME comment that didn't really need to be here. Reorganized a bit.
        (WebCore::InputStreamPreprocessor::isAtEndOfFile): Renamed and made static.

        * html/track/BufferedLineReader.cpp:
        (WebCore::BufferedLineReader::nextLine): Updated to not use the poorly named
        scanCharacter function to advance past a newline. Also renamed from getLine
        and changed to return Optional<String> instead of using a boolean to indicate
        failure and an out argument.

        * html/track/BufferedLineReader.h:
        (WebCore::BufferedLineReader::BufferedLineReader): Use the default, putting
        initial values on each data member below.
        (WebCore::BufferedLineReader::append): Updated to take an rvalue reference,
        and move the value through.
        (WebCore::BufferedLineReader::scanCharacter): Deleted. Was poorly named,
        and easy to replace with two lines of code at its two call sites.
        (WebCore::BufferedLineReader::reset): Rewrote to correctly clear all the
        data members of the class, not just the segmented string.

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::parseWebVTTFileHeader): Updated to take
        an rvalue reference and move the value through.
        * html/track/InbandGenericTextTrack.h: Updated for the above.

        * html/track/InbandTextTrack.h: Updated since parseWebVTTFileHeader now
        takes an rvalue reference.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFileHeader): Updated to take an rvalue reference
        and move the value through.
        (WebCore::WebVTTParser::parseBytes): Updated to pass ownership of the string
        in to the line reader append function.
        (WebCore::WebVTTParser::parseCueData): Use auto and WTFMove for WebVTTCueData.
        (WebCore::WebVTTParser::flush): More of the same.
        (WebCore::WebVTTParser::parse): Changed to use nextLine instead of getLine.
        * html/track/WebVTTParser.h: Updated for the above.

        * html/track/WebVTTTokenizer.cpp:
        (WebCore::advanceAndEmitToken): Use advanceAndUpdateLineNumber by its new
        name, just advance. No change in behavior.
        (WebCore::WebVTTTokenizer::WebVTTTokenizer): Pass a String, not a
        SegmentedString, to add the end of file marker.

        * platform/graphics/InbandTextTrackPrivateClient.h: Updated since
        parseWebVTTFileHeader takes an rvalue reference.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::Substring::appendTo): Moved here from the header.
        The only caller is SegmentedString::toString, inside this file.
        (WebCore::SegmentedString::SegmentedString): Deleted the copy constructor.
        No longer needed.
        (WebCore::SegmentedString::operator=): Defined a move assignment operator
        rather than an ordinary assignment operator, since that's what the call
        sites really need.
        (WebCore::SegmentedString::length): Simplified since we no longer need to
        support pushed characters.
        (WebCore::SegmentedString::setExcludeLineNumbers): Simplified, since we
        can just iterate m_otherSubstrings without an extra check. Also changed to
        write directly to the data member of Substring instead of using a function.
        (WebCore::SegmentedString::updateAdvanceFunctionPointersForEmptyString):
        Added. Used when we run out of characters.
        (WebCore::SegmentedString::clear): Removed code to clear now-deleted members.
        Updated for changes to other member names.
        (WebCore::SegmentedString::appendSubstring): Renamed from just append to
        avoid ambiguity with the public append function. Changed to take an rvalue
        reference, and move in, and added code to set m_currentCharacter properly,
        so the caller doesn't have to deal with that.
        (WebCore::SegmentedString::close): Updated to use m_isClosed by its new name.
        Also removed unneeded comment about assertion that fires when trying to close
        an already closed string.
        (WebCore::SegmentedString::append): Added overloads for rvalue references of
        both entire SegmentedString objects and of String. Streamlined to just call
        appendSubstring and append to the deque.
        (WebCore::SegmentedString::pushBack): Tightened up since we don't allow empty
        strings and changed to take just a string, not an entire segmented string.
        (WebCore::SegmentedString::advanceSubstring): Moved logic into the
        advancePastSingleCharacterSubstringWithoutUpdatingLineNumber function.
        (WebCore::SegmentedString::toString): Simplified now that we don't need to
        support pushed characters.
        (WebCore::SegmentedString::advancePastNonNewlines): Deleted.
        (WebCore::SegmentedString::advance8): Deleted.
        (WebCore::SegmentedString::advanceWithoutUpdatingLineNumber16): Renamed from
        advance16. Simplified now that there are no pushed characters. Also changed to
        access data members of m_currentSubstring directly instead of calling a function.
        (WebCore::SegmentedString::advanceAndUpdateLineNumber8): Deleted.
        (WebCore::SegmentedString::advanceAndUpdateLineNumber16): Ditto.
        (WebCore::SegmentedString::advancePastSingleCharacterSubstringWithoutUpdatingLineNumber):
        Renamed from advanceSlowCase. Removed uneeded logic to handle pushed characters.
        Moved code in here from advanceSubstring.
        (WebCore::SegmentedString::advancePastSingleCharacterSubstring): Renamed from
        advanceAndUpdateLineNumberSlowCase. Simplified by calling the function above.
        (WebCore::SegmentedString::advanceEmpty): Broke assertion up into two.
        (WebCore::SegmentedString::updateSlowCaseFunctionPointers): Updated for name changes.
        (WebCore::SegmentedString::advancePastSlowCase): Changed name and meaning of
        boolean argument. Rewrote to use the String class less; it's now used only when
        we fail to match after the first character rather than being used for the actual
        comparison with the literal.

        * platform/text/SegmentedString.h: Moved all non-trivial function bodies out of
        the class definition to make things easier to read. Moved the SegmentedSubstring
        class inside the SegmentedString class, making it a private struct named Substring.
        Removed the m_ prefix from data members of the struct, removed many functions from
        the struct and made its union be anonymous instead of naming it m_data. Removed
        unneeded StringBuilder.h include.
        (WebCore::SegmentedString::isEmpty): Changed to use the length of the substring
        instead of a separate boolean. We never create an empty substring, nor leave one
        in place as the current substring unless the entire segmented string is empty.
        (WebCore::SegmentedString::advancePast): Updated to use the new member function
        template instead of a non-template member function. The new member function is
        entirely rewritten and does the matching directly rather than allocating a string
        just to do prefix matching.
        (WebCore::SegmentedString::advancePastLettersIgnoringASCIICase): Renamed to make
        it clear that the literal must be all non-letters or lowercase letters as with
        the other "letters ignoring ASCII case" functions. The three call sites all fit
        the bill. Implement by calling the new function template.
        (WebCore::SegmentedString::currentCharacter): Renamed from currentChar.
        (WebCore::SegmentedString::Substring::Substring): Use an rvalue reference and
        move the string in.
        (WebCore::SegmentedString::Substring::currentCharacter): Simplified since this
        is never used on an empty substring.
        (WebCore::SegmentedString::Substring::incrementAndGetCurrentCharacter): Ditto.
        (WebCore::SegmentedString::SegmentedString): Overload to take an rvalue reference.
        Simplified since there are now fewer data members.
        (WebCore::SegmentedString::advanceWithoutUpdatingLineNumber): Renamed from
        advance, since this is only safe to use if there is some reason it is OK to skip
        updating the line number.
        (WebCore::SegmentedString::advance): Renamed from advanceAndUpdateLineNumber,
        since doing that is the normal desired behavior and not worth mentioning in the
        public function name.
        (WebCore::SegmentedString::advancePastNewline): Renamed from
        advancePastNewlineAndUpdateLineNumber.
        (WebCore::SegmentedString::numberOfCharactersConsumed): Greatly simplified since
        pushed characters are no longer supported.
        (WebCore::SegmentedString::characterMismatch): Added. Used by advancePast.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::unconsumeCharacters): Use toString rather than toStringPreserveCapacity
        because the SegmentedString is going to take ownership of the string.
        (WebCore::consumeCharacterReference): Updated to use the pushBack that takes just
        a String, not a SegmentedString. Also use advancePastNonNewline.

        * xml/parser/MarkupTokenizerInlines.h: Added ADVANCE_PAST_NON_NEWLINE_TO.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insert): Updated since this takes an rvalue reference.
        (WebCore::XMLDocumentParser::append): Removed unnecessary code to create a
        SegmentedString.
        * xml/parser/XMLDocumentParser.h: Updated for above. Also fixed indentation
        and initialized most data members.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Moved most data member
        initialization into the class definition.
        (WebCore::XMLDocumentParser::resumeParsing): Removed code that copied a
        segmented string, but converted the whole thing into a string before using it.
        Now we convert to a string right away.

2016-11-28  Chris Dumez  <cdumez@apple.com>

        [iOS] Use UIKit SPI to force popover presentation style on iPhone for html validation popovers
        https://bugs.webkit.org/show_bug.cgi?id=165107

        Reviewed by Simon Fraser.

        Use UIKit SPI to force popover presentation style on iPhone for html validation
        popovers as this results in simpler code and achieves the same behavior.

        * platform/ValidationBubble.h:
        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::setAnchorRect):
        (-[WebValidationBubbleDelegate adaptivePresentationStyleForPresentationController:traitCollection:]): Deleted.
        * platform/spi/ios/UIKitSPI.h:

2016-11-28  Chris Dumez  <cdumez@apple.com>

        [Mac] Clicking on an HTML validation bubble should dismiss it
        https://bugs.webkit.org/show_bug.cgi?id=165117
        <rdar://problem/29409837>

        Reviewed by Simon Fraser.

        Clicking on an HTML validation bubble should dismiss it. It previously
        did nothing.

        No new tests, this is not easily testable as EventSender.keyDown() sends
        the event to the view, not to a particular screen location.

        * platform/mac/ValidationBubbleMac.mm:
        (-[WebValidationPopover mouseDown:]):
        (WebCore::ValidationBubble::ValidationBubble):

2016-11-27  Sam Weinig  <sam@webkit.org>

        Make CanvasRenderingContext2D use WebIDL unions / Variants for createPattern and drawImage
        https://bugs.webkit.org/show_bug.cgi?id=165086

        Reviewed by Darin Adler.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        Add overloads of size for each type of CanvasSource.
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        Use variants to reduce code duplication and match spec language in drawImage and createPattern.

2016-11-28  Beth Dakin  <bdakin@apple.com>

        Blacklist Netflix for TouchBar support
        https://bugs.webkit.org/show_bug.cgi?id=165104
        -and corresponding-
        rdar://problem/29404778

        Reviewed by Tim Horton.

        This patch moves the algorithm to 
        bestMediaElementForShowingPlaybackControlsManager() so that Now Playing can also 
        use it.
        * html/HTMLMediaElement.cpp:
        (WebCore::needsPlaybackControlsManagerQuirk):
        (WebCore::HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager):
        (WebCore::HTMLMediaElement::updatePlaybackControlsManager):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in more miscellaneous files.
        https://bugs.webkit.org/show_bug.cgi?id=165102

        Reviewed by Saam Barati.

        No new tests because these are fixes to failures detected by existing tests when
        exception check verification is enabled.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::buildJSONForRSAComponents):
        (WebCore::addUsagesToJSON):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::put):

2016-11-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix bugs in the @supports parser
        https://bugs.webkit.org/show_bug.cgi?id=165115

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        Clean up the display property to match the old parser to ensure
        that @supports conditions on display are the same.

        * css/parser/CSSSupportsParser.cpp:
        (WebCore::CSSSupportsParser::consumeCondition):
        (WebCore::CSSSupportsParser::consumeNegation):
        (WebCore::CSSSupportsParser::consumeConditionInParenthesis):
        * css/parser/CSSSupportsParser.h:
        What follows are all bugs in Blink that need to be fixed to pass our
        tests.

        Fix the supports parser to allow the whitespace after not/or/and to
        be optional. Allow the whitespace following parenthetical conditions
        to be optional.

        With whitespace being optional, this means that "not(" will parse
        as a FunctionToken type, as will "or(" and "and(". Handle this situation
        by checking for FunctionToken along with IdentToken and parameterizing
        consumeConditionInParenthesis to do the right thing when it starts with
        a FunctionToken instead of an IdentToken.

        Fix the general enclosure FunctionToken for forward compatibility to require that
        the function still be enclosed within parentheses.

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ObjectConstructor.cpp and ObjectPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165051

        Reviewed by Saam Barati.

        No new tests because this is covered by the existing test
        http/tests/security/cross-frame-access-object-prototype.html with the help of a
        new ASSERT in ObjectPrototype.cpp.

        Fixed jsDOMWindowGetOwnPropertySlotRestrictedAccess() to return false when it
        throws an exception.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):

2016-11-28  Tim Horton  <timothy_horton@apple.com>

        Obvious change in saturation/color when swiping to a previously visited page
        https://bugs.webkit.org/show_bug.cgi?id=165112
        <rdar://problem/29257229>

        Reviewed by Simon Fraser.

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::createFromImage):
        IOSurface::createFromImage should take into account the colorspace of the
        originating image, instead of just hardcoding sRGB.

        Otherwise, on a non-sRGB display, the display-space snapshot that we take
        for back-forward swipe is converted to sRGB, then the colorspace information
        is lost (without a way to maintain it inside the IOSurface), and displayed
        as layer contents interpreted as display space (instead of sRGB).

2016-11-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix crashes on Yosemite after r209009

        NSTextField's maximumNumberOfLines was introduced in ElCapitan so
        disable it at compile-time on previous OSes for now.

        * platform/mac/ValidationBubbleMac.mm:
        (WebCore::ValidationBubble::ValidationBubble):

2016-11-28  Keith Rollin  <krollin@apple.com>

        Unreviewed, rolling out r208607.

        The actual changes aren't inline with what was requested.

        Reverted changeset:

        "Reduce number of platformMemoryUsage calls"
        https://bugs.webkit.org/show_bug.cgi?id=164375
        http://trac.webkit.org/changeset/208607

2016-11-28  Beth Dakin  <bdakin@apple.com>

        Blacklist Netflix for TouchBar support
        https://bugs.webkit.org/show_bug.cgi?id=165104
        -and corresponding-
        rdar://problem/29404778

        Reviewed by Darin Adler.

        * html/HTMLMediaElement.cpp:
        (WebCore::needsPlaybackControlsManagerQuirk):
        (WebCore::HTMLMediaElement::updatePlaybackControlsManager):

2016-11-28  Chris Dumez  <cdumez@apple.com>

        Limit HTML Form validation popovers to 4 lines
        https://bugs.webkit.org/show_bug.cgi?id=165098
        <rdar://problem/29403286>

        Reviewed by Darin Adler.

        Limit HTML Form validation popovers to 4 lines as per recent feedback.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::ValidationBubble):
        * platform/mac/ValidationBubbleMac.mm:
        (WebCore::ValidationBubble::ValidationBubble):

2016-11-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Filters and Reflections Fixes
        https://bugs.webkit.org/show_bug.cgi?id=165103

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeReflect):
        Support the "none" keyword for box-reflect.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::isValidPrimitiveFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        Don't rely on range checking, since invert isn't grouped with the other
        function values. Actually check every keyword.

2016-11-28  Brent Fulgham  <bfulgham@apple.com>

        ImageData does not match specification
        https://bugs.webkit.org/show_bug.cgi?id=164663

        Reviewed by Simon Fraser.

        The W3C specification https://www.w3.org/TR/2dcontext/ clearly states that
        the width and height attributes of the ImageData type should be unsigned.
        Our current implementation has signed integer values.

        In practice, we have enforced the unsigned requirement by throwing a TypeError
        if you attempt to construct an ImageData with negative width or height.

        This change simply updates the IDL and impelemntation to match the spec.

        Test coverage is already provided by fast/canvas/canvas-imageData.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal): Serialize as uint32_t values.
        * html/ImageData.idl: Revise width and height to be unsigned long.

2016-11-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] flex-basis should be pixel units not percentages.
        https://bugs.webkit.org/show_bug.cgi?id=165100

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeFlex):

2016-11-28  Daniel Bates  <dabates@apple.com>

        Replace CSSPropertyNames.in with a JSON file
        https://bugs.webkit.org/show_bug.cgi?id=164691

        Reviewed by Simon Fraser.

        Convert CSSPropertyNames.in to a structured JSON file. This is the first step towards
        exposing a CSS feature status dashboard and generating more of the boilerplate code
        for a CSS property.

        A side effect of this change is that makeprop.pl no longer detects duplicate CSS property
        definitions. We will look to bring such duplication detection back in a subsequent
        commit.

        * CMakeLists.txt: Substitute CSSProperties.json for CSSPropertyNames.in and update the
        invocation of makeprop.pl as we no longer need to pass the bindings/scripts/preprocessor.pm
        Perl module. Makeprop.pl supports conditional CSS properties and values without the need
        to preprocess CSSProperties.json using the C preprocessor.
        * DerivedSources.make: Ditto. Pass WTF_PLATFORM_IOS to makeprop.pl when building for iOS
        as we no longer make use of bindings/scripts/preprocessor.pm.
        * css/CSSProperties.json: Added.
        * css/CSSPropertyNames.in: Removed.
        * css/StyleResolver.cpp: Remove variable lastHighPriorityProperty as we now generate it.
        * css/makeprop.pl: Extracted the input file name, now CSSProperties.json, into a global variable
        and referenced this variable throughout this script instead of hardcoding the input file name at
        each call site. Updated code to handle CSS longhand names being encoded in a JSON array as opposed
        to a string of '|'-separated values. I added a FIXME comment to do the same for the codegen property
        "custom". Fixed Perl uninitialized variable warnings when die()-ing with error "Unknown CSS property
        used in all shorthand ..." or "Unknown CSS property used in longhands ...".
        (isPropertyEnabled): Added. Determine whether code should be generated for a property.
        (addProperty): Added.
        (sortByDescendingPriorityAndName): Added.
        (getScopeForFunction): Lowercase option names so that we can use a consistent case throughout
        the JSON file.
        (getNameForMethods): Ditto.
        (generateColorValueSetter):
        (generateAnimationPropertyInitialValueSetter): Ditto.
        (generateAnimationPropertyInheritValueSetter): Ditto.
        (generateFillLayerPropertyInitialValueSetter): Ditto.
        (generateFillLayerPropertyInheritValueSetter): Ditto.
        (generateSetValueStatement): Ditto.
        (generateInitialValueSetter): Ditto.
        (generateInheritValueSetter): Ditto.
        (generateValueSetter): Ditto.

2016-11-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-animation-trigger
        https://bugs.webkit.org/show_bug.cgi?id=165095

        Reviewed by Zalan Bujtas.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitAnimationTrigger):
        (WebCore::consumeAnimationValue):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-28  Antti Koivisto  <antti@apple.com>

        Remove FIRST_LINE_INHERITED fake pseudo style
        https://bugs.webkit.org/show_bug.cgi?id=165071

        Reviewed by Andreas Kling.

        These are create during layout an then cached to the RenderStyle. Cache computed first line style to
        RenderObject rare data instead, avoiding style mutation an other confusing messiness.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::computeFirstLineStyle):
        (WebCore::RenderElement::firstLineStyle):

            Cache the first line style.

        (WebCore::RenderElement::invalidateCachedFirstLineStyle):
        (WebCore::RenderElement::styleWillChange):

            Invalidate subtree if we have cached first line style.

        (WebCore::RenderElement::getUncachedPseudoStyle):
        (WebCore::RenderElement::uncachedFirstLineStyle): Deleted.
        (WebCore::RenderElement::cachedFirstLineStyle): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::rareDataMap):
        (WebCore::RenderObject::rareData):
        (WebCore::RenderObject::ensureRareData):
        * rendering/RenderObject.h:

            Stop copying rare data objects.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):

            Use the normal mechanism for invalidating layout for first-line instead of a hack in pseudoStyleCacheIsInvalid.

        * rendering/style/RenderStyleConstants.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::pseudoStyleCacheIsInvalid):

            Simplify.

2016-11-28  Miguel Gomez  <magomez@igalia.com>

        [GTK] Dramatic increase on memory usage since 2.14.x
        https://bugs.webkit.org/show_bug.cgi?id=164049

        Reviewed by Žan Doberšek.

        Use OpenGL version 3.2 Core for rendering when available.
        Update some operations that have changed when using 3.2 Core:
        - Use glGetStringi to get the extensions list.
        - Do not use GL_POINT_SPRITE.
        - Always use a VAO when rendering.
        - Use a GLSL 1.50 compatible shader.

        No new tests needed.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::version):
        Add a method to get OpenGL version we are using.
        * platform/graphics/GLContext.h:
        Ditto.
        * platform/graphics/GraphicsContext3D.h:
        Add an attribute to store the VAO used for rendering.
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        Add glGetStringi to the list of functions.
        * platform/graphics/OpenGLShims.h:
        Ditto.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        Set appropriate output to the shader compiler and initalize the VAO if needed.
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        Delete the VAO if needed.
        (WebCore::GraphicsContext3D::getExtensions):
        Use glGetExtensionsi for OpenGL versions >= 3.2.
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::hasGLXARBCreateContextExtension):
        Check whether the GLX_ARB_create_context extension is available.
        (WebCore::GLContextGLX::createWindowContext):
        Use glXCreateContextAttribsARB() if possible to request an OpenGL 3.2 context.
        (WebCore::GLContextGLX::createPbufferContext):
        Ditto.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        Enable glGetStringi for GTK.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        Do not use default getExtensions() method for GTK.
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        Ditto.

2016-11-24  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Move attributes from RenderGrid to the new Grid class
        https://bugs.webkit.org/show_bug.cgi?id=165065

        Reviewed by Darin Adler.

        A new class called Grid was added in 208973. This is the first of a couple of patches moving
        private attributes from RenderGrid to Grid.

        Apart from that this is adding a couple of new helper functions that will decouple the
        existence of in-flow items from the actual data structures storing that information.

        Last but not least, the Grid::insert() method does not only insert the item in the m_grid
        data structure, but also stores the GridArea associated to that item, so there is no need to
        do it in two different calls.

        No new tests required as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::Grid::insert): Added a new parameter.
        (WebCore::RenderGrid::Grid::setSmallestTracksStart):
        (WebCore::RenderGrid::Grid::smallestTrackStart):
        (WebCore::RenderGrid::Grid::gridItemArea):
        (WebCore::RenderGrid::Grid::setGridItemArea):
        (WebCore::RenderGrid::Grid::clear): Clear the newly added attributes.
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::rawGridTrackSize):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::clearGrid):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::cachedGridSpan):
        (WebCore::RenderGrid::cachedGridArea): Deleted.
        * rendering/RenderGrid.h:

2016-11-27  Sam Weinig  <sam@webkit.org>

        Remove unused DOMRequestState
        https://bugs.webkit.org/show_bug.cgi?id=165085

        Reviewed by Simon Fraser.

        Remove DOMRequestState. It was unused.

        * Modules/fetch/FetchBody.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMRequestState.h: Removed.

2016-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        Fix various --minimal build issues
        https://bugs.webkit.org/show_bug.cgi?id=165060

        Reviewed by Darin Adler.

        * css/parser/CSSPropertyParser.cpp:
        * dom/Document.cpp:
        * loader/EmptyClients.cpp:

2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Import std::optional reference implementation as WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=164199

        Reviewed by Saam Barati and Sam Weinig.

        Rename valueOr to value_or. This is specified in C++17 proposal.

        Use Optional::emplace. C++17 Optional::operator=(Optional&&) requires
        either copy assignment operator or move assignment operator. But
        DFG::JSValueOperand etc. only defines move constructors and drop
        implicit copy assignment operators.

        It was OK in the previous WTF::Optional since it always uses move
        constructors. But it is not valid in C++17 Optional. We use Optional::emplace
        instead. This function has the same semantics to the previous WTF::Optional's
        operator=.

        No behavior change.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::parseAmount):
        (WebCore::createContactFields):
        (WebCore::toLineItemType):
        (WebCore::createLineItem):
        (WebCore::createLineItems):
        (WebCore::createMerchantCapabilities):
        (WebCore::createSupportedNetworks):
        (WebCore::toShippingType):
        (WebCore::createShippingMethod):
        (WebCore::createShippingMethods):
        (WebCore::createPaymentRequest):
        (WebCore::toPaymentAuthorizationStatus):
        * Modules/applepay/PaymentContact.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::completeShippingMethodSelection):
        (WebCore::PaymentCoordinator::completeShippingContactSelection):
        (WebCore::PaymentCoordinator::completePaymentMethodSelection):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/PaymentMerchantSession.h:
        * Modules/applepay/PaymentRequest.h:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::PaymentContact::fromJS):
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm:
        (WebCore::PaymentMerchantSession::fromJS):
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp:
        (WebCore::MediaKeyStatusMap::Iterator::next):
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::FetchBodyOwner):
        (WebCore::FetchBodyOwner::loadBlob):
        (WebCore::FetchBodyOwner::finishBlobLoading):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::FetchHeaders::Iterator::next):
        * Modules/fetch/FetchHeaders.h:
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setReferrerPolicy):
        (WebCore::setMode):
        (WebCore::setCredentials):
        (WebCore::setCache):
        (WebCore::setRedirect):
        (WebCore::setMethod):
        (WebCore::setReferrer):
        (WebCore::buildOptions):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchRequest.h:
        (WebCore::FetchRequest::FetchRequest):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::FetchResponse):
        (WebCore::FetchResponse::cloneForJS):
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::BodyLoader::stop):
        * Modules/fetch/FetchResponse.h:
        * Modules/geolocation/Coordinates.cpp:
        (WebCore::Coordinates::altitude):
        (WebCore::Coordinates::altitudeAccuracy):
        (WebCore::Coordinates::heading):
        (WebCore::Coordinates::speed):
        * Modules/geolocation/Coordinates.h:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::stringToDirection):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::getAllKeys):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBKeyPath.h:
        (WebCore::isolatedCopy):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::getAllKeys):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyPath):
        (WebCore::deserializeIDBKeyPath):
        * Modules/indexeddb/server/IDBSerialization.h:
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::getAllRecords):
        * Modules/indexeddb/server/MemoryIndex.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::getAllRecords):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::objectStoreCleared):
        (WebCore::IDBServer::MemoryObjectStoreCursor::keyDeleted):
        (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/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::createNewObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::IDBObjectStoreInfo):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        (WebCore::IDBObjectStoreInfo::keyPath):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::displayNameForTrack):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::endOfStream):
        (WebCore::MediaSource::streamEndedWithError):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * 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::stop):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::insertDTMF):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        (WebCore::RTCIceCandidate::RTCIceCandidate):
        * Modules/mediastream/RTCIceCandidate.h:
        (WebCore::RTCIceCandidate::sdpMLineIndex):
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::iceCandidateFromJSON):
        * Modules/proximity/DeviceProximityEvent.h:
        * Modules/streams/ReadableStreamSource.h:
        (WebCore::ReadableStreamSource::startFinished):
        (WebCore::ReadableStreamSource::pullFinished):
        (WebCore::ReadableStreamSource::clean):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::start):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webdatabase/SQLResultSet.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::close):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveSocketStreamData):
        * Modules/websockets/WebSocketChannel.h:
        * bindings/generic/IDLTypes.h:
        (WebCore::IDLType::nullValue):
        * bindings/js/CachedModuleScript.h:
        (WebCore::CachedModuleScript::error):
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::get):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMConvert.h:
        (WebCore::Detail::VariadicConverterBase::convert):
        (WebCore::Detail::VariadicConverterBase<IDLInterface<T>>::convert):
        (WebCore::convertVariadicArguments):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::next):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DOMPromise::DOMPromise):
        (WebCore::DOMPromise::operator=):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSFileCustom.cpp:
        (WebCore::constructJSFile):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::toDataURL):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::construct):
        * bindings/js/JSMediaDevicesCustom.cpp:
        (WebCore::createStringConstraint):
        (WebCore::createBooleanConstraint):
        (WebCore::createDoubleConstraint):
        (WebCore::createIntConstraint):
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::importKey):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setupModuleScriptHandlers):
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::executeScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationHeaderContent):
        (GenerateDefaultValue):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::put):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::parseEnumeration<TestObj::EnumType>):
        (WebCore::parseEnumeration<TestObj::Optional>):
        (WebCore::parseEnumeration<AlternateEnumName>):
        (WebCore::parseEnumeration<TestObj::EnumA>):
        (WebCore::parseEnumeration<TestObj::EnumB>):
        (WebCore::parseEnumeration<TestObj::EnumC>):
        (WebCore::parseEnumeration<TestObj::Kind>):
        (WebCore::parseEnumeration<TestObj::Size>):
        (WebCore::parseEnumeration<TestObj::Confidence>):
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::JSTestObj::getOwnPropertySlot):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecordCaller):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Caller):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentCaller):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::parseEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        (WebCore::parseEnumeration<TestStandaloneEnumeration>):
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadowCaller):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampCaller):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::put):
        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::identifier):
        * crypto/CryptoAlgorithmRegistry.h:
        * crypto/CryptoKeySerialization.h:
        * crypto/JsonWebKey.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::calculateSignature):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        (WebCore::CryptoKeySerializationRaw::reconcileAlgorithm):
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::commonCryptoHMACAlgorithm):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::cryptoDigestAlgorithm):
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::calculateStyleMask):
        (WebCore::CSSFontFace::calculateWeightMask):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp:
        (WebCore::computeFontTraitsMask):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::doubleValue):
        (WebCore::CSSPrimitiveValue::doubleValueInternal):
        * css/CSSPrimitiveValue.h:
        * css/CSSPropertyNames.in:
        * css/CSSSegmentedFontFace.cpp:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::addRule):
        * css/CSSStyleSheet.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::fontStateChanged):
        * css/FontFace.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::completedLoading):
        * css/FontFaceSet.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::doubleValue):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGridPosition):
        (WebCore::StyleBuilderConverter::convertWordSpacing):
        (WebCore::StyleBuilderConverter::convertPerspective):
        (WebCore::StyleBuilderConverter::convertMarqueeIncrement):
        (WebCore::StyleBuilderConverter::convertFilterOperations):
        (WebCore::StyleBuilderConverter::convertLineHeight):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueLineHeight):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue):
        (WebCore::CSSParser::parseSpringTimingFunctionValue):
        (WebCore::CSSParser::parseColorFunctionParameters):
        (WebCore::CSSParser::parseColorFromValue):
        * css/parser/CSSParser.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAddStyleRelationIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAddStyleRelation):
        * dom/CustomElementReactionQueue.cpp:
        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        * dom/Element.cpp:
        (WebCore::Element::scrollBy):
        (WebCore::Element::getIntegralAttribute):
        (WebCore::Element::getUnsignedIntegralAttribute):
        (WebCore::Element::resolveCustomStyle):
        * dom/Element.h:
        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::dropEventDispatchAssertion):
        (WebCore::ElementIteratorAssertions::clear):
        * dom/ExceptionOr.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::makeInlineStyleSheetCacheKey):
        * dom/KeyboardEvent.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::error):
        * dom/LoadableClassicScript.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::error):
        * dom/LoadableModuleScript.h:
        * dom/LoadableScript.h:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observe):
        * dom/MutationObserver.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::resolveCustomStyle):
        * dom/PseudoElement.h:
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::setToBeforeChild):
        (WebCore::RangeBoundaryPoint::setToAfterChild):
        (WebCore::RangeBoundaryPoint::setToEndOfNode):
        (WebCore::RangeBoundaryPoint::invalidateOffset):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::determineScriptType):
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::executeScriptAndDispatchEvent):
        * dom/ScriptElement.h:
        * dom/TextDecoder.cpp:
        (WebCore::TextDecoder::decode):
        * dom/TextDecoder.h:
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        * dom/UserGestureIndicator.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * fileapi/File.h:
        * history/CachedFrame.h:
        (WebCore::CachedFrame::hasInsecureContent):
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::toggle):
        * html/DOMTokenList.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        * html/HTMLCanvasElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseBorderWidthAttribute):
        (WebCore::HTMLElement::parseAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createForJSConstructor):
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::findClosestTickMarkValue):
        (WebCore::HTMLInputElement::maxLengthAttributeChanged):
        (WebCore::HTMLInputElement::minLengthAttributeChanged):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        (WebCore::HTMLLinkElement::iconType):
        * html/HTMLLinkElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::setLength):
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::maxLengthAttributeChanged):
        (WebCore::HTMLTextAreaElement::minLengthAttributeChanged):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::height):
        (WebCore::ImageInputType::width):
        * html/InputType.cpp:
        (WebCore::InputType::findClosestTickMarkValue):
        * html/InputType.h:
        * html/LinkIconCollector.cpp:
        * html/LinkRelAttribute.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::findClosestTickMarkValue):
        * html/RangeInputType.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::restore):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        (WebCore::CanvasRenderingContext2D::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2D::isPointInStrokeInternal):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::fillText):
        (WebCore::CanvasRenderingContext2D::strokeText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::arrayBufferViewElementSize):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateArrayBufferType):
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::indexOfFirstUnopenFormattingElement):
        (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLIntegerInternal):
        (WebCore::parseHTMLInteger):
        (WebCore::parseHTMLNonNegativeInteger):
        (WebCore::parseValidHTMLNonNegativeIntegerInternal):
        (WebCore::parseValidHTMLNonNegativeInteger):
        (WebCore::parseValidHTMLFloatingPointNumberInternal):
        (WebCore::parseValidHTMLFloatingPointNumber):
        (WebCore::parseHTTPRefreshInternal):
        * html/parser/HTMLParserIdioms.h:
        (WebCore::limitToOnlyHTMLNonNegative):
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::parseDescriptors):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        (WebCore::SliderThumbElement::resolveCustomStyle):
        (WebCore::SliderContainerElement::resolveCustomStyle):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        (WebCore::TextControlInnerTextElement::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::resolveCustomStyle):
        * html/shadow/TextControlInnerElements.h:
        * html/track/TrackEvent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setInstruments):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        (WebCore::DocumentThreadableLoader::clearResource):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * loader/DocumentThreadableLoader.h:
        * loader/EmptyClients.cpp:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        (WebCore::FrameLoader::clearTestingOverrides):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::resourceTypeFromAsAttribute):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::notifyDone):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setLoadPriority):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::priority):
        * mathml/MathMLElement.h:
        (WebCore::MathMLElement::specifiedDisplayStyle):
        (WebCore::MathMLElement::specifiedMathVariant):
        * mathml/MathMLFractionElement.cpp:
        (WebCore::MathMLFractionElement::cachedFractionAlignment):
        (WebCore::MathMLFractionElement::parseAttribute):
        * mathml/MathMLFractionElement.h:
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::specifiedDisplayStyle):
        (WebCore::MathMLMathElement::parseAttribute):
        * mathml/MathMLMathElement.h:
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::parseAttribute):
        * mathml/MathMLMencloseElement.h:
        * mathml/MathMLOperatorDictionary.cpp:
        (WebCore::MathMLOperatorDictionary::search):
        * mathml/MathMLOperatorDictionary.h:
        * mathml/MathMLOperatorElement.cpp:
        (WebCore::MathMLOperatorElement::computeOperatorFlag):
        (WebCore::MathMLOperatorElement::childrenChanged):
        (WebCore::attributeNameToPropertyFlag):
        (WebCore::MathMLOperatorElement::parseAttribute):
        * mathml/MathMLOperatorElement.h:
        * mathml/MathMLPaddedElement.cpp:
        (WebCore::MathMLPaddedElement::parseAttribute):
        * mathml/MathMLPaddedElement.h:
        * mathml/MathMLPresentationElement.cpp:
        (WebCore::MathMLPresentationElement::cachedBooleanAttribute):
        (WebCore::MathMLPresentationElement::cachedMathMLLength):
        (WebCore::MathMLPresentationElement::specifiedDisplayStyle):
        (WebCore::MathMLPresentationElement::specifiedMathVariant):
        (WebCore::MathMLPresentationElement::parseAttribute):
        * mathml/MathMLPresentationElement.h:
        (WebCore::MathMLPresentationElement::toOptionalBool):
        * mathml/MathMLScriptsElement.cpp:
        (WebCore::MathMLScriptsElement::parseAttribute):
        * mathml/MathMLScriptsElement.h:
        * mathml/MathMLSpaceElement.cpp:
        (WebCore::MathMLSpaceElement::parseAttribute):
        * mathml/MathMLSpaceElement.h:
        * mathml/MathMLTokenElement.cpp:
        (WebCore::MathMLTokenElement::convertToSingleCodePoint):
        * mathml/MathMLTokenElement.h:
        * mathml/MathMLUnderOverElement.cpp:
        (WebCore::MathMLUnderOverElement::parseAttribute):
        * mathml/MathMLUnderOverElement.h:
        * page/ChromeClient.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::alignedFireTime):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollBy):
        * page/DOMWindow.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStream):
        (WebCore::EventSource::parseEventStreamLine):
        * page/EventSource.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle):
        (WebCore::FrameView::setLayoutViewportOverrideRect):
        (WebCore::FrameView::setViewExposedRect):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::takeAnyMediaCanStartListener):
        * page/Page.h:
        (WebCore::Page::eventThrottlingBehaviorOverride):
        (WebCore::Page::setEventThrottlingBehaviorOverride):
        * page/ScrollToOptions.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::port):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::debugString):
        (WebCore::SecurityOriginData::databaseIdentifier):
        (WebCore::SecurityOriginData::fromDatabaseIdentifier):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::SecurityOriginData):
        (WebCore::SecurityOriginData::isEmpty):
        (WebCore::SecurityOriginDataHash::hash):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * page/WindowFeatures.cpp:
        (WebCore::parseDialogFeatures):
        (WebCore::boolFeature):
        (WebCore::floatFeature):
        * page/WindowFeatures.h:
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::ContentSecurityPolicySource):
        (WebCore::ContentSecurityPolicySource::portMatches):
        * page/csp/ContentSecurityPolicySource.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parse):
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        (WebCore::ContentSecurityPolicySourceList::parsePort):
        * page/csp/ContentSecurityPolicySourceList.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        * platform/DragImage.cpp:
        * platform/LinkIcon.h:
        * platform/MemoryPressureHandler.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::handleDeferredScrollUpdateAfterContentSizeChange):
        * platform/ScrollView.h:
        * platform/Theme.h:
        (WebCore::Theme::controlFont):
        * platform/Timer.h:
        (WebCore::TimerBase::alignedFireTime):
        * platform/URL.cpp:
        (WebCore::URL::port):
        (WebCore::defaultPortForProtocol):
        (WebCore::portAllowed):
        * platform/URL.h:
        * platform/URLParser.cpp:
        (WebCore::URLParser::defaultPortForProtocol):
        (WebCore::findLongestZeroSequence):
        (WebCore::URLParser::parseIPv4Piece):
        (WebCore::URLParser::parseIPv4Host):
        (WebCore::URLParser::parseIPv4PieceInsideIPv6):
        (WebCore::URLParser::parseIPv4AddressInsideIPv6):
        (WebCore::URLParser::parseIPv6Host):
        (WebCore::URLParser::domainToASCII):
        (WebCore::URLParser::formURLDecode):
        * platform/URLParser.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        (WebCore::colorWithOverrideAlpha):
        * platform/graphics/DisplayRefreshMonitorClient.h:
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText):
        (WebCore::FontCascade::drawEmphasisMarks):
        (WebCore::FontCascade::adjustSelectionRectForText):
        (WebCore::FontCascade::getEmphasisMarkGlyphData):
        (WebCore::FontCascade::emphasisMarkAscent):
        (WebCore::FontCascade::emphasisMarkDescent):
        (WebCore::FontCascade::emphasisMarkHeight):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawEmphasisMarks):
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/GraphicsContext.h:
        (WebCore::InterpolationQualityMaintainer::InterpolationQualityMaintainer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setPosition):
        (WebCore::GraphicsLayer::setApproximatePosition):
        * platform/graphics/Image.h:
        (WebCore::Image::hotSpot):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::clearMetadata):
        (WebCore::ImageFrameCache::metadata):
        (WebCore::ImageFrameCache::frameMetadataAtIndex):
        (WebCore::ImageFrameCache::hotSpot):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::hotSpot):
        * platform/graphics/PathUtilities.cpp:
        (WebCore::rectFromPolygon):
        (WebCore::PathUtilities::pathWithShrinkWrappedRectsForOutline):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::flush):
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setLayoutViewportRect):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::encodeImage):
        (WebCore::dataURL):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::hotSpot):
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::openTypeFeature):
        (WebCore::advanceForColorBitmapFont):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::localBounds):
        (WebCore::DisplayList::DrawLine::localBounds):
        (WebCore::DisplayList::DrawLinesForText::localBounds):
        (WebCore::DisplayList::DrawLineForDocumentMarker::localBounds):
        (WebCore::DisplayList::DrawFocusRingPath::localBounds):
        (WebCore::DisplayList::DrawFocusRingRects::localBounds):
        (WebCore::DisplayList::StrokeRect::localBounds):
        (WebCore::DisplayList::StrokePath::localBounds):
        (WebCore::DisplayList::StrokeEllipse::localBounds):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawingItem::localBounds):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::updateItemExtent):
        (WebCore::DisplayList::Recorder::ContextState::rotate):
        (WebCore::DisplayList::Recorder::ContextState::concatCTM):
        * platform/graphics/efl/ImageBufferEfl.cpp:
        (WebCore::encodeImageJPEG):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::mapAbsolutePointToLocalPoint):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::selectionRect):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::capitalized):
        (WebCore::shouldSynthesize):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::replicaTransform):
        (WebCore::TextureMapperLayer::mapScrollOffset):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::transformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::inverse):
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::mappedPoint):
        (WebCore::TransformState::mappedSecondaryQuad):
        (WebCore::TransformState::mapQuad):
        (WebCore::TransformState::flattenWithTransform):
        * platform/graphics/transforms/TransformState.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::inverse):
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::hotSpot):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::supportsXDamage):
        * platform/graphics/x11/PlatformDisplayX11.h:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::hotSpot):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::hotSpot):
        (WebCore::ICOImageDecoder::hotSpotAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):
        * platform/image-encoders/JPEGImageEncoder.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setOverrideVisibleRect):
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]):
        * platform/linux/MemoryPressureHandlerLinux.cpp:
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlFont):
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::MediaTrackConstraintSetMap::set):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaTrackConstraintSetMap::width):
        (WebCore::MediaTrackConstraintSetMap::height):
        (WebCore::MediaTrackConstraintSetMap::sampleRate):
        (WebCore::MediaTrackConstraintSetMap::sampleSize):
        (WebCore::MediaTrackConstraintSetMap::aspectRatio):
        (WebCore::MediaTrackConstraintSetMap::frameRate):
        (WebCore::MediaTrackConstraintSetMap::volume):
        (WebCore::MediaTrackConstraintSetMap::echoCancellation):
        (WebCore::MediaTrackConstraintSetMap::facingMode):
        (WebCore::MediaTrackConstraintSetMap::deviceId):
        (WebCore::MediaTrackConstraintSetMap::groupId):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeMediaSource::applySizeAndFrameRate):
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::applySizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions):
        (WebCore::AVVideoCaptureSource::supportsSizeAndFrameRate):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        * platform/network/CacheValidation.h:
        * platform/network/DataURLDecoder.h:
        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::HTTPHeaderMapConstIterator::updateKeyValue):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPDate):
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::cacheControlMaxAge):
        (WebCore::parseDateValueInHeader):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::certificateInfo):
        * platform/network/SocketStreamHandle.h:
        * platform/network/SocketStreamHandleClient.h:
        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::readStreamCallback):
        (WebCore::SocketStreamHandleImpl::platformSend):
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::platformSend):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesInPartitionForURL):
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::readBytes):
        (WebCore::SocketStreamHandleImpl::platformSend):
        * rendering/BreakLines.h:
        (WebCore::nextBreakablePositionNonLoosely):
        (WebCore::nextBreakablePositionLoosely):
        (WebCore::isBreakable):
        * rendering/HitTestingTransformState.cpp:
        (WebCore::HitTestingTransformState::flattenWithTransform):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::interpolationQualityFromStyle):
        (WebCore::ImageQualityController::chooseInterpolationQuality):
        * rendering/ImageQualityController.h:
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::moveTo):
        (WebCore::InlineIterator::nextBreakablePosition):
        (WebCore::InlineIterator::setNextBreakablePosition):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::substringToRender):
        (WebCore::InlineTextBox::hyphenatedStringForTextRun):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::substringToRender):
        (WebCore::InlineTextBox::hyphenatedStringForTextRun):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::reset):
        * rendering/OrderIterator.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBaseline):
        (WebCore::RenderBlock::inlineBlockBaseline):
        (WebCore::RenderBlock::setCachedFlowThreadContainingBlockNeedsUpdate):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeIntrinsicLogicalContentHeightUsing):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstLineBaseline):
        (WebCore::RenderBox::inlineBlockBaseline):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::computeTextOrigin):
        * rendering/RenderCombineText.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::baselinePosition):
        (WebCore::RenderFlexibleBox::firstLineBaseline):
        (WebCore::RenderFlexibleBox::inlineBlockBaseline):
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild):
        (WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing):
        (WebCore::RenderFlexibleBox::adjustChildSizeForAspectRatioCrossAxisMinAndMax):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::setGrowthLimit):
        (WebCore::GridTrack::setGrowthLimitCap):
        (WebCore::GridTrack::growthLimitCap):
        (WebCore::RenderGrid::GridSizingData::freeSpace):
        (WebCore::RenderGrid::GridSizingData::availableSpace):
        (WebCore::RenderGrid::GridSizingData::setAvailableSpace):
        (WebCore::RenderGrid::GridSizingData::setFreeSpace):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeIntrinsicLogicalHeight):
        (WebCore::RenderGrid::computeIntrinsicLogicalContentHeightUsing):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::overrideContainingBlockContentSizeForChild):
        (WebCore::setOverrideContainingBlockContentSizeForChild):
        (WebCore::RenderGrid::logicalHeightForChild):
        (WebCore::RenderGrid::minSizeForChild):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::computeAutoRepeatTracksCount):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::layoutGridItems):
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItem):
        (WebCore::RenderListBox::listIndexIsVisible):
        (WebCore::RenderListBox::computeFirstIndexesVisibleInPaddingTopBottomAreas):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::baselinePosition):
        (WebCore::RenderTable::inlineBlockBaseline):
        (WebCore::RenderTable::firstLineBaseline):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBaseline):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::stringView):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::getSelection):
        (WebCore::RenderView::clearSelection):
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::SelectionSubtreeData):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStartPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEndPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionStartPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionEndPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::clearSelection):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::lastFragment):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/line/BreakingContext.h:
        (WebCore::WordTrailingSpace::width):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::InlineIteratorHistory::nextBreakablePosition):
        (WebCore::BreakingContext::InlineIteratorHistory::moveTo):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::computeAdditionalBetweenWordsWidth):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):
        * rendering/mathml/MathMLStyle.cpp:
        (WebCore::MathMLStyle::resolveMathMLStyle):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition):
        (WebCore::RenderMathMLTable::firstLineBaseline):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::ascentForChild):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::firstLineBaseline):
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLPadded.cpp:
        (WebCore::RenderMathMLPadded::firstLineBaseline):
        * rendering/mathml/RenderMathMLPadded.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::firstLineBaseline):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::validateAndGetReferenceChildren):
        (WebCore::RenderMathMLScripts::firstLineBaseline):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::firstLineBaseline):
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::updateMathVariantGlyph):
        (WebCore::RenderMathMLToken::firstLineBaseline):
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::setupNonScalingStrokeContext):
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        (WebCore::RenderSVGShape::calculateStrokeBoundingBox):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::intersectRepaintRectWithShadows):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::Parent::Parent):
        * style/RenderTreeUpdater.h:
        * style/StyleScope.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute):
        (WebCore::SVGElement::resolveCustomStyle):
        * svg/SVGElement.h:
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::transcodeGlyphPaths):
        (WebCore::SVGToOTFFontConverter::processGlyphElement):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):
        (WebCore::convertSVGToOTFFont):
        * svg/SVGToOTFFontConversion.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setEventThrottlingBehaviorOverride):
        (WebCore::Internals::eventThrottlingBehaviorOverride):
        * testing/Internals.h:
        * workers/Worker.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::prepareToSend):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2016-11-26  Csaba Osztrogonác  <ossy@webkit.org>

        Fix build warnings in WebCore/Modules/indexeddb/server/IDBSerialization.cp
        https://bugs.webkit.org/show_bug.cgi?id=165070

        Reviewed by Brady Eidson.

        * Modules/indexeddb/server/IDBSerialization.cpp:

2016-11-26  Sam Weinig  <sam@webkit.org>

        Convert IntersectionObserver over to using RuntimeEnabledFeatures so it can be properly excluded from script
        https://bugs.webkit.org/show_bug.cgi?id=164965

        Reviewed by Simon Fraser.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::reset):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIntersectionObserverEnabled):
        (WebCore::RuntimeEnabledFeatures::intersectionObserverEnabled):
        Add intersection observer setting.

        * page/IntersectionObserver.idl:
        * page/IntersectionObserverEntry.idl:
        Convert to use EnabledAtRuntime extended attribute.

        * page/Settings.in:
        Remove the old intersection observer setting.

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=164992

        Reviewed by Darin Adler.

        std::chrono::milliseconds -> Seconds.
        
        Rename Document::elapsedTime() to timeSinceDocumentCreation() which is more explicit.
        
        Replace INSTRUMENT_LAYOUT_SCHEDULING with LOG(Layout...).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose):
        (WebCore::Document::isLayoutTimerActive):
        (WebCore::Document::minimumLayoutDelay):
        (WebCore::Document::timeSinceDocumentCreation):
        (WebCore::Document::elapsedTime): Deleted.
        * dom/Document.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::unscheduleRelayout):
        * page/Settings.cpp:
        (WebCore::Settings::setLayoutInterval):
        * page/Settings.h:
        (WebCore::Settings::layoutInterval):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::removePendingSheet):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Composited negative z-index elements are hidden behind the body sometimes
        https://bugs.webkit.org/show_bug.cgi?id=165080
        rdar://problem/22260229

        Reviewed by Zalan Bujtas.

        If the <body> falls into the "directly composited background color" code path
        (say, because it's composited because of composited negative z-index children,
        and has content of its own), then we failed to take root background propagation
        into account, and put the opaque root background color on the body's layer.

        Fix by sharing some code from RenderBox related to whether the body's renderer
        paints its background.
        
        Tests cover the buggy case, and the case where the <html> has its own background color.

        Tests: compositing/backgrounds/negative-z-index-behind-body-non-propagated.html
               compositing/backgrounds/negative-z-index-behind-body.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintsOwnBackground):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect):
        (WebCore::skipBodyBackground): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor):

2016-11-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [CSS Font Loading] FontFace.load() promises don't always fire
        https://bugs.webkit.org/show_bug.cgi?id=165037

        Reviewed by Simon Fraser.

        We currently handle web fonts in two phases. The first phase is building up
        StyleRuleFontFace objects which reflect the style on the page. The second is creating
        CSSFontFace objects from those StyleRuleFontFace objects. When script modifies the
        style on the page, we can often update the CSSFontFace objects, but there are some
        modifications which we don't know how to model. For these operations, we destroy the
        CSSFontFace objects and rebuild them from the newly modified StyleRuleFontFace objects.

        Normally, this is fine. However, with the CSS font loading API, the CSSFontFaces back
        Javascript objects which will persist across the rebuilding step mentioned above. This
        means that the FontFace objects need to adopt the new CSSFontFace objects and forget
        the old CSSFontFace objects.

        This gets a little tricky because the operation which caused the rebuild may actually
        be a modification to the specific @font-face block which backs a Javascript FontFace
        object. Because the CSSOM can be used to change the src: attribute of the FontFace
        object, I decided in r201971 to clear the FontFace's promise in case an old load would
        cause the promise to resolve. However, this would never happen because the old
        CSSFontFace is unparented during the FontFace::adopt()ion of the new CSSFontFace.
        Therefore, old loads may still complete, but the signal would never make it to the
        FontFace and therefore would not cause the promise to resolve. In addition, clearing
        the promise during a rebuild is problematic because that rebuild may be caused by
        operations which have nothing to do with the specific FontFace object in question (so
        the FontFace object should be observably uneffected.)

        Because of the above reasons, this patch simply stops clearing the promise during the
        rebuild phase.

        Tests: fast/text/fontface-rebuild-during-loading.html
               fast/text/fontface-rebuild-during-loading-2.html

        * css/FontFace.cpp:
        (WebCore::FontFace::adopt):

2016-11-25  Andreas Kling  <akling@apple.com>

        MemoryPressureHandler should only trigger synchronous GC on iOS
        <https://webkit.org/b/165043>
        <rdar://problem/29312684>

        Reviewed by Sam Weinig.

        On iOS we know that there is really only one web process in play at a time,
        so it's okay to do a synchronous GC immediately in response to high memory pressure.

        On other platforms, we may have tens or hundreds of web processes, and if they
        all start doing full GCs at the same time, it can easily bring a system to its knees
        if it's already under pressure.

        Fix this by using garbageCollectSoon() on non-iOS platforms.

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

2016-11-23  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Convert grid representation into a class
        https://bugs.webkit.org/show_bug.cgi?id=165042

        Reviewed by Manuel Rego Casasnovas.

        So far grids are represented as Vectors of Vectors. There are a couple of issues associated
        to that decision. First or all, the source code in RenderGrid assumes the existence of that
        data structure, meaning that we cannot eventually change it without changing a lot of
        code. Apart from the coupling there is another issue, RenderGrid is full of methods to
        access and manipulate that data structure.

        Instead, it'd be much better to have a Grid class encapsulating both the data structures and
        the methods required to access/manipulate it. Note that follow-up patches will move even
        more data and procedures into this new class from the RenderGrid code.

        No new tests required as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::Grid::ensureGridSize): Moved from RenderGrid.
        (WebCore::RenderGrid::Grid::insert): Ditto.
        (WebCore::RenderGrid::Grid::clear): Ditto.
        (WebCore::RenderGrid::GridIterator::GridIterator):
        (WebCore::RenderGrid::gridColumnCount): Use Grid's methods.
        (WebCore::RenderGrid::gridRowCount): Ditto.
        (WebCore::RenderGrid::placeItemsOnGrid): Use Grid's methods to insert children.
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Ditto.
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): Ditto.
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid): Ditto.
        (WebCore::RenderGrid::numTracks): Use Grid's methods.
        (WebCore::RenderGrid::ensureGridSize): Deleted. Moved to Grid class.
        (WebCore::RenderGrid::insertItemIntoGrid): Deleted. Moved to Grid class.
        * rendering/RenderGrid.h:

2016-11-24  Antti Koivisto  <antti@apple.com>

        Remove unused bool return from Element::willRecalcStyle
        https://bugs.webkit.org/show_bug.cgi?id=165059

        Reviewed by Andreas Kling.

        It is always true.

        * dom/Element.cpp:
        (WebCore::Element::willRecalcStyle):
        * dom/Element.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::willRecalcStyle):
        * html/HTMLFrameSetElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        * html/HTMLPlugInImageElement.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::willRecalcStyle):
        * svg/SVGElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::willRecalcStyle):
        * svg/SVGUseElement.h:

2016-11-22  Antti Koivisto  <antti@apple.com>

        CrashTracer: [USER] com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::ExtensionStyleSheets::pageUserSheet + 14
        https://bugs.webkit.org/show_bug.cgi?id=165030

        Reviewed by Darin Adler.

        We failed to reset the style scope when an element was moved to a different document. This could lead to having dangling
        document pointers in style scope and style resolver.

        Test: fast/shadow-dom/shadow-host-move-to-different-document.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::didMoveToNewDocument):

            Reset style scope.

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

            Some more assertions.

        * style/StyleScope.h:
        (WebCore::Style::Scope::document):

2016-11-22  Darin Adler  <darin@apple.com>

        Make normal case fast in the input element limitString function
        https://bugs.webkit.org/show_bug.cgi?id=165023

        Reviewed by Dan Bernstein.

        When running Speedometer, the limitLength function was showing up as hot.
        Fixed a couple obvious problems with that function's performance.

        * html/TextFieldInputType.cpp:
        (WebCore::isASCIILineBreak): Deleted. The isHTMLLineBreak function does
        the same thing, but faster.
        (WebCore::limitLength): Added a FIXME comment explaining that the function
        isn't really a good idea. Don't call through to numCharactersInGraphemeClusters
        at all for 8-bit strings since we don't allow CR or LF characters in the string
        anyway, so there are no grapheme clusters more than a single code unit. Removed
        optimization when the length is the string's length that String::left already does.
        (WebCore::TextFieldInputType::sanitizeValue): Use isHTMLLineBreak instead of
        isASCIILineBreak.
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent): Ditto.

        * platform/LocalizedStrings.cpp: Use auto a lot more rather than writing out
        RetainPtr.
        (WebCore::truncatedStringForLookupMenuItem): Removed unneeded special case for
        empty strings. Removed unneeded string with the ellipsis character in it, since
        the makeString function already knows how to append a character to a string.

        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode): Updated for change to LineBreakIteratorMode.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextBreakablePosition): Ditto.

2016-11-21  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Isolate size of internal representation from actual grid size
        https://bugs.webkit.org/show_bug.cgi?id=165006

        Reviewed by Manuel Rego Casasnovas.

        RenderGrid has an internal representation of a grid used to place grid items, compute grid
        positions, run the track sizing algorithm etc. That data structure normally has exactly the
        same size as the actual grid specified using the grid-template-xxx properties (or any other
        shorthand). But in some cases, like for example when the grid is empty, the internal data
        structure does not really match the actual grid. In the particular case of empty grids no
        memory allocations are done to create a grid representation as it is not needed.

        From now on both gridColumnCount() and gridRowCount() will always return the size of the
        data structure representing the grid whereas the newly added numTracks() will always return
        the actual size of the grid.

        This is the first required step of the process of isolating the data used by the grid track
        sizing algorithm from the actual internal state of the LayoutGrid object.

        No new tests as this is just a code refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridColumnCount): Always return the number of columns of the internal
        data structure to represent the grid.
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths): Use the actual size of the grid to
        create the GridSizingData structure.
        (WebCore::RenderGrid::placeItemsOnGrid): Use the actual size of the grid to create the
        GridSizingData structure.
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::numTracks): New method which returns the actual size of the grid.
        * rendering/RenderGrid.h:

2016-11-21  Konstantin Tokarev  <annulen@yandex.ru>

        Disable #line markers in bison output on Windows
        https://bugs.webkit.org/show_bug.cgi?id=164973

        Reviewed by Darin Adler.

        New bison versions since 3.0 have bug that causes unescaped paths
        to be printed in #line directives. On Windows CMake passes absolute
        paths to bison that have backslashes in them, leading to compiler
        errors or warnings because of unrecognized escape sequences.

        No new tests needed.

        * css/makegrammar.pl:

2016-11-21  Olivier Blin  <olivier.blin@softathome.com>

        [cmake][OpenWebRTC] Move SDPProcessorScriptResource rules to common WebCore
        https://bugs.webkit.org/show_bug.cgi?id=164937

        Reviewed by Youenn Fablet.

        SDPProcessorScriptResource has been moved in common mediastream directory (bug 163940).

        Since it is not specific to the GTK port, the matching cmake rules should be
        moved out from PlatformGTK.cmake to the main WebCore CMakeLists.txt.

        This is needed to build OpenWebRTC support in other ports, WPE in my case,
        probably Mac, EFL and Qt as well.

        This also fixes the path in SDP scripts dependencies, the old openwebrtc subdir
        was still being used.

        No new tests, build fix only

        * CMakeLists.txt:
        * PlatformGTK.cmake:

2016-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add URL::hostAndPort()
        https://bugs.webkit.org/show_bug.cgi?id=164907

        Reviewed by Alex Christensen.

        As a convenient way of getting the host and port (if any) as a string.

        * html/URLUtils.h:
        (WebCore::URLUtils<T>::host): Use URL::hostAndPort().
        * page/Location.cpp:
        (WebCore::Location::host): Ditto.
        * platform/URL.cpp:
        (WebCore::URL::hostAndPort): Return host:port or just host if there isn't a port.
        * platform/URL.h:
        * platform/network/CredentialStorage.cpp:
        (WebCore::originStringFromURL): Use URL::hostAndPort().
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::host): Ditto.

2016-11-21  Philippe Normand  <pnormand@igalia.com>

        [WebRTC][OpenWebRTC] parse turns urls
        https://bugs.webkit.org/show_bug.cgi?id=164587

        Reviewed by Alejandro G. Castro.

        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):
        Hook turns servers between the RTCConfiguration and the underlying
        OpenWebRTC layer.

2016-11-21  Philippe Normand  <pnormand@igalia.com>

        [Gstreamer] Add volume and mute support to the WebRTC mediaplayer
        https://bugs.webkit.org/show_bug.cgi?id=153828

        Reviewed by Darin Adler.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::setVolume): New implementation setting the OWR source volume property.
        (WebCore::MediaPlayerPrivateGStreamerOwr::setMuted): New implementation setting the OWR source mute property.
        (WebCore::MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState): Also set audio OWR source mute state depending on the track enabled state.
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged): chain to maybeHandleChangeMuteState.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:

2016-11-21  Alejandro G. Castro  <alex@igalia.com> and Philippe Normand  <pnormand@igalia.com>

        [WebRTC][OpenWebRTC] RTP bundling support
        https://bugs.webkit.org/show_bug.cgi?id=162333

        Reviewed by Alejandro G. Castro.

        Configure the OpenWebRTC transport agent bundle policy according
        to the RTCConfiguration and pass the receive SSRCs over to
        OpenWebRTC as well. Those are needed so the agent is aware of the
        bundle layout.

        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::updateReceiveConfiguration):
        (WebCore::MediaEndpointOwr::updateSendConfiguration):
        (WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):

2016-11-20  Zan Dobersek  <zdobersek@igalia.com>

        [EncryptedMedia] Make EME API runtime-enabled
        https://bugs.webkit.org/show_bug.cgi?id=164927

        Reviewed by Jer Noble.

        Update the EME API IDL definitions to use the EnabledAtRuntime
        attribute on the relevant interfaces, attributes and operations.
        EncryptedMediaAPI is used as the attribute value.

        The corresponding getter, setter and member boolean are added to
        the RuntimeEnabledFeatures class.

        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeyStatusMap.idl:
        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/encryptedmedia/NavigatorEME.idl:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setEncryptedMediaAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::encryptedMediaAPIEnabled):
        * html/HTMLMediaElement.idl:
        * html/MediaEncryptedEvent.idl:

2016-11-20  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r208606?): LayoutTest fast/mediastream/enumerating-crash.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=164715
        <rdar://problem/29277180>

        Reviewed by Alexey Proskuryakov.

        No new tests, fixes an existing test crash.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::contextDestroyed): Call base class method before clearing m_controller
          because it nullifies the security context.

2016-11-19  Chris Dumez  <cdumez@apple.com>

        Update HTML form validation messages
        https://bugs.webkit.org/show_bug.cgi?id=164957
        <rdar://problem/29338669>

        Reviewed by Darin Adler.

        Update HTML form validation messages as per recent feedback:
        - Drop the "Please".
        - Drop the period at the end.
        - Drop the "if you want to proceed" that was used only for the checkbox.

        No new tests, rebaselined existing tests.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooShortText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageBadInputForNumberText):

2016-11-19  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Implement selection interface and states for elements supporting aria-selected and for menu roles
        https://bugs.webkit.org/show_bug.cgi?id=164865

        Reviewed by Chris Fleizach.

        Implement AtkSelection and support ATK_STATE_SELECTABLE and ATK_STATE_SELECTED
        for elements supporting aria-selected and for menu-related roles. Also enable the
        equivalent support for the Mac because NSAccessibilitySelectedChildrenAttribute is
        included as supported on the same roles.

        In addition, fix several bugs discovered along the way: Call isSelected() on role
        tab, because tab supports aria-selected; not aria-checked. Correct ATK mapping
        of ListBoxRole and ListBoxOptionRole for combobox descendants. Always defer to
        WebCore for inclusion/exclusion decisions related to elements with an explicit
        ARIA role.

        Tests: accessibility/aria-combobox-hierarchy.html
               accessibility/aria-selected-menu-items.html
               accessibility/aria-selected.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        (WebCore::AccessibilityNodeObject::canSetSelectedAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isDescendantOfRole):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::canHaveSelectedChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isSelected):
        (WebCore::AccessibilityRenderObject::canHaveSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionGetSelectionCount):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        (getInterfaceMaskFromObject):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2016-11-19  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When zoomed in and panning on pages with fixed bars, parts of the bars are sometimes missing
        https://bugs.webkit.org/show_bug.cgi?id=164855

        Reviewed by Sam Weinig.

        During UI-process panning and zooming, we send visible rect updates to the web process
        with inStableState=false, and don't update GraphicsLayers until we get into a stable state.

        This causes a problem where the web process has a stale notion of where the GraphicsLayers
        for position:fixed elements are, but is then told to update tiling coverage with an up-to-date
        visible rect. The existing "sync layer positions" path isn't useful to fix this, because it
        breaks the relationship between the GraphicsLayer positions and their FixedPositionViewportConstraints
        in the scrolling tree.

        To address this, add the notion of an Optional<> approximatePosition on GraphicsLayers. This is used
        only by the coverageRect computation code path, and is cleared by a setPosition(). ApproximatePositions
        are pushed onto GraphicsLayers via the syncViewportConstrainedLayerPositions() code path (renamed to
        reconcileViewportConstrainedLayerPositions).

        This allows us to remmove "viewportIsStable" from GraphicsLayer flushing, and FrameView.

        SetOrSyncScrollingLayerPosition is made into an enum class.

        Tested by scrollingcoordinator/ios/non-stable-viewport-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions):
        (WebCore::AsyncScrollingCoordinator::syncViewportConstrainedLayerPositions): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::reconcileScrollingState):
        (WebCore::ScrollingCoordinator::reconcileViewportConstrainedLayerPositions):
        (WebCore::ScrollingCoordinator::syncViewportConstrainedLayerPositions): Deleted.
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::reconcileLayerPositionForViewportRect):
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect): Deleted.
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::reconcileLayerPositionForViewportRect):
        (WebCore::ScrollingStateNode::syncLayerPositionForViewportRect): Deleted.
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect):
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect): Deleted.
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setPosition):
        (WebCore::GraphicsLayer::approximatePosition):
        (WebCore::GraphicsLayer::setApproximatePosition):
        (WebCore::GraphicsLayer::flushCompositingState):
        (WebCore::GraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): No longer bail for viewportConstained layers when the viewport is unstable.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::CommitState::CommitState): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2016-11-19  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose aria-busy via ATK_STATE_BUSY
        https://bugs.webkit.org/show_bug.cgi?id=164909

        Reviewed by Chris Fleizach.

        Expose aria-busy via ATK_STATE_BUSY. Also rename ariaLiveRegionBusy()
        to isBusy() because in ARIA 1.1 aria-busy is no longer limited to live
        regions.

        Test: accessibility/aria-busy.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isBusy):
        (WebCore::AccessibilityObject::ariaLiveRegionBusy): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isBusy):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionBusy): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityARIAIsBusy]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2016-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r200964): Tab focus navigation is broken on results.en.voyages-sncf.com
        https://bugs.webkit.org/show_bug.cgi?id=164888

        Reviewed by Antti Koivisto.

        The bug was caused by FocusNavigationScope::parentInScope incorrectly returning nullptr when moving out of
        a user agent shadow tree of a SVG use element. Fixed the bug by explicitly checking against the focus scope's
        root node or its slot element. Also removed a superfluous early return when the parent node is a focus scope.

        Tests: fast/shadow-dom/focus-navigation-out-of-slot.html
               fast/shadow-dom/focus-navigation-passes-shadow-host.html
               fast/shadow-dom/focus-navigation-passes-svg-use-element.html

        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::parentInScope):

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Eliminate a source of flakiness in layout tests by forcing WebPage into "responsive" mode for all tests, with an internals override
        https://bugs.webkit.org/show_bug.cgi?id=164980

        Reviewed by Chris Dumez.

        WebPage::eventThrottlingDelay() uses a latency estimate based on the round-trip time from the UI process
        to affect behavior, including whether scroll events are fired. This also affects the FrameView "scrolledByUser"
        flag that impacts tile coverage.

        During testing, latency falling above or below the 16ms threshold could affect behavior. Fix by forcing
        WebPage into "responsive" mode while running tests, via InjectedBundlePage::prepare().

        Add a nullable internals property so that a test can specify responsive, unresponsive or default behavior.

        Tests: fast/scrolling/ios/scroll-events-default.html
               fast/scrolling/ios/scroll-events-responsive.html
               fast/scrolling/ios/scroll-events-unresponsive.html

        * page/Page.h:
        (WebCore::Page::eventThrottlingBehaviorOverride):
        (WebCore::Page::setEventThrottlingBehaviorOverride):
        * testing/Internals.cpp:
        (WebCore::Internals::setEventThrottlingBehaviorOverride):
        (WebCore::Internals::eventThrottlingBehaviorOverride):
        * testing/Internals.h:
        * testing/Internals.idl:

2016-11-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the build after r208917.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll):

2016-11-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the build after r208917.

        * dom/CustomElementReactionQueue.cpp:

2016-11-18  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::decrypt to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164739
        <rdar://problem/29257848>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::decrypt method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-decrypt.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-decrypt.
        2. It implements decrypt operations of the following algorithms: AES-CBC,
           RSAES-PKCS1-V1_5, and RSA-OAEP.

        Tests: crypto/subtle/aes-cbc-decrypt-malformed-parameters.html
               crypto/subtle/aes-cbc-generate-key-encrypt-decrypt.html
               crypto/subtle/aes-cbc-import-key-decrypt.html
               crypto/subtle/decrypt-malformed-parameters.html
               crypto/subtle/rsa-oaep-decrypt-malformed-parameters.html
               crypto/subtle/rsa-oaep-generate-key-encrypt-decrypt-label.html
               crypto/subtle/rsa-oaep-generate-key-encrypt-decrypt.html
               crypto/subtle/rsa-oaep-import-key-decrypt-label.html
               crypto/subtle/rsa-oaep-import-key-decrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-key-encrypt-decrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-key-decrypt.html
               crypto/workers/subtle/aes-cbc-import-key-decrypt.html
               crypto/workers/subtle/rsa-oaep-import-key-decrypt.html
               crypto/workers/subtle/rsaes-pkcs1-v1_5-import-key-decrypt.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::toCryptoKey):
        (WebCore::toVector):
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::jsSubtleCryptoFunctionDecryptPromise):
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::JSSubtleCrypto::decrypt):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::decrypt):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::decryptRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::decryptRSA_OAEP):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2016-11-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r208837.

        The bots did not show a progression

        Reverted changeset:

        "REGRESSION(r208082): 1% Speedometer regression on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=164852
        http://trac.webkit.org/changeset/208837

2016-11-18  Simon Fraser  <simon.fraser@apple.com>

        Remove use of std::chrono in WebPage and entrained code
        https://bugs.webkit.org/show_bug.cgi?id=164967

        Reviewed by Tim Horton.

        Replace std::chrono with Seconds and Monotonic Time.

        Use more C++11 initialization for WebPage data members.

        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::setScrollVelocity):
        * page/FrameView.h:
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::augmentRepeatInterval):
        * platform/graphics/TiledBacking.h:
        (WebCore::VelocityData::VelocityData):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::adjustTileCoverageRect):

2016-11-18  Dean Jackson  <dino@apple.com>

        AX: "(inverted-colors)" media query only matches on page reload; should match on change
        https://bugs.webkit.org/show_bug.cgi?id=163564
        <rdar://problem/28807350>

        Reviewed by Simon Fraser.

        Mark some media queries as responding to notifications that
        system accessibility settings have changed. When Page gets told
        that has happened, check if any of the results have changed.

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

        * css/MediaQueryEvaluator.cpp:
        (WebCore::isAccessibilitySettingsDependent):
        (WebCore::MediaQueryEvaluator::evaluate):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::addAccessibilitySettingsDependentMediaQueryResult):
        (WebCore::StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasAccessibilitySettingsDependentMediaQueries):
        * page/Page.cpp:
        (WebCore::Page::accessibilitySettingsDidChange):
        * page/Page.h:

2016-11-18  Anders Carlsson  <andersca@apple.com>

        Rename the 'other' Apple Pay Button type to 'donate'
        https://bugs.webkit.org/show_bug.cgi?id=164978

        Reviewed by Dean Jackson.

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

2016-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGL2] Implement texStorage2D()
        https://bugs.webkit.org/show_bug.cgi?id=164493

        Reviewed by Dean Jackson.

        Create a new validation function which only accepts sized internalFormats.
        After running texStorage2D(), we also texSubImage2D() to zero-fill it. This
        is to compensate for potentially buggy drivers.

        Because glTexStorage2D() was only added to OpenGL in version 4.2, not all
        OpenGL 3.2+ contexts can implement this command. However, according to
        https://developer.apple.com/opengl/capabilities/ all Apple GPUs have the
        GL_ARB_texture_storage which implements this call. In the future, we could
        implement texStorage2D() on top of texImage2D() if there are any ports which
        want WebGL2 but don't have 4.2 and don't have the extension.

        Also, when calling texStorage2D, callers specify an internalFormat but not a
        type/format pair. This means that storing the texture's type is only valid
        for WebGL 1 contexts. This patch surrounds all calls to reading the texture
        type with guards and adds an ASSERT() at the read site to make sure the
        right thing is happening.

        Test: fast/canvas/webgl/webgl2-texStorage.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateTexStorageFuncParameters):
        (WebCore::WebGL2RenderingContext::texStorage2D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateTexFunc):
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::getType):
        (WebCore::WebGLTexture::needToUseBlackTexture):
        (WebCore::WebGLTexture::canGenerateMipmaps):
        (WebCore::internalFormatIsFloatType):
        (WebCore::internalFormatIsHalfFloatType):
        (WebCore::WebGLTexture::update):
        * html/canvas/WebGLTexture.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::extractImageData):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texStorage2D):
        (WebCore::GraphicsContext3D::texStorage3D):

2016-11-18  Alex Christensen  <achristensen@webkit.org>

        TextDecoder constructor should not accept replacement encodings
        https://bugs.webkit.org/show_bug.cgi?id=164903

        Reviewed by Chris Dumez.

        Covered by newly passing web platform tests.

        * dom/TextDecoder.cpp:
        (WebCore::TextDecoder::create):
        https://encoding.spec.whatwg.org/#textdecoder says about the constructor:
        "If label is either not a label or is a label for replacement, throws a RangeError."
        See https://bugs.webkit.org/show_bug.cgi?id=159180 for the mapping of the replacement
        codec names to "replacement".

2016-11-18  Chris Dumez  <cdumez@apple.com>

        Assertion failures in ActiveDOMObject::~ActiveDOMObject under Database destructor
        https://bugs.webkit.org/show_bug.cgi?id=164955
        <rdar://problem/29336715>

        Reviewed by Brady Eidson.

        Make sure the Database's DatabaseContext object is destroyed on the context
        thread given that DatabaseContext is an ActiveDOMObject and there is an
        assertion in the ActiveDOMObject destructor that it should be destroyed on
        on the context thread.

        No new tests, already covered by existing tests.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):

2016-11-18  Enrica Casucci  <enrica@apple.com>

        Refactor drag and drop for WebKit2 to encode DragData message exchange.
        https://bugs.webkit.org/show_bug.cgi?id=164945

        Reviewed by Tim Horton.

        No new tests. No change in functionality.

        * loader/EmptyClients.h:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::dragIsMove):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::dispatchTextInputEventFor):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
        * page/DragController.h:
        * page/efl/DragControllerEfl.cpp:
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::isCopyKeyDown):
        * platform/DragData.h:
        (WebCore::DragData::DragData):

2016-11-18  Jeremy Jones  <jeremyj@apple.com>

        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
        https://bugs.webkit.org/show_bug.cgi?id=163801

        Reviewed by Simon Fraser.

        These tests now pass with DumpRenderTree.
        LayoutTests/pointer-lock/lock-already-locked.html
        LayoutTests/pointer-lock/lock-element-not-in-dom.html
        LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom.html
        LayoutTests/pointer-lock/mouse-event-api.html

        PointerLockController::requestPointerLock now protects against synchronous callback
        to allowPointerLock().

        Add pointerLockEnabled setting.

        * Configurations/FeatureDefines.xcconfig:
        * dom/Document.cpp:
        (WebCore::Document::exitPointerLock): Fix existing typo.
        (WebCore::Document::pointerLockElement):
        * features.json:
        * page/EventHandler.cpp:
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        (WebCore::PointerLockController::requestPointerUnlock):
        * page/Settings.in:

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        Support IDN2008 with UTS #46 instead of IDN2003
        https://bugs.webkit.org/show_bug.cgi?id=144194

        Reviewed by Darin Adler.

        Use uidna_nameToASCII instead of the deprecated uidna_IDNToASCII.
        It uses IDN2008 instead of IDN2003, and it uses UTF #46 when used with a UIDNA opened with uidna_openUTS46.
        This follows https://url.spec.whatwg.org/#concept-domain-to-ascii except we do not use Transitional_Processing
        to prevent homograph attacks on german domain names with "ß" and "ss" in them.  These are now treated as separate domains.
        Firefox also doesn't use Transitional_Processing. Chrome and the current specification use Transitional_processing,
        but https://github.com/whatwg/url/issues/110 might change the spec.
        
        In addition, http://unicode.org/reports/tr46/ says:
        "implementations are encouraged to apply the Bidi and ContextJ validity criteria"
        Bidi checks prevent domain names with bidirectional text, such as latin and hebrew characters in the same domain.  Chrome and Firefox do this.

        ContextJ checks prevent code points such as U+200D, which is a zero-width joiner which users would not see when looking at the domain name.
        Firefox currently enables ContextJ checks and it is suggested by UTS #46, so we'll do it.

        ContextO checks, which we do not use and neither does any other browser nor the spec, would fail if a domain contains code points such as U+30FB,
        which looks somewhat like a dot.  We can investigate enabling these checks later.

        Covered by new API tests and rebased LayoutTests.
        The new API tests verify that we do not use transitional processing, that we do apply the Bidi and ContextJ checks, but not ContextO checks.

        * platform/URLParser.cpp:
        (WebCore::URLParser::domainToASCII):
        (WebCore::URLParser::internationalDomainNameTranscoder):
        * platform/URLParser.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::mapHostNameWithRange):

2016-11-18  Dean Jackson  <dino@apple.com>

        Better testing for accessibility media queries
        https://bugs.webkit.org/show_bug.cgi?id=164954
        <rdar://problem/29338292>

        Reviewed by Myles Maxfield.

        Provide an override mode for the accessibility media queries
        that rely on system settings. This way we can test that they
        are least responding to something.

        Tests: fast/media/mq-inverted-colors-forced-value.html
               fast/media/mq-monochrome-forced-value.html

        * css/MediaQueryEvaluator.cpp: Query the Settings to see if we're
        forcing a value.
        (WebCore::monochromeEvaluate):
        (WebCore::invertedColorsEvaluate):
        (WebCore::prefersReducedMotionEvaluate):
        * page/Settings.h:
        * testing/InternalSettings.cpp: Add new forcing values for inverted-colors
        and monochrome.
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::settingsToInternalSettingsValue):
        (WebCore::internalSettingsToSettingsValue):
        (WebCore::InternalSettings::forcedColorsAreInvertedAccessibilityValue):
        (WebCore::InternalSettings::setForcedColorsAreInvertedAccessibilityValue):
        (WebCore::InternalSettings::forcedDisplayIsMonochromeAccessibilityValue):
        (WebCore::InternalSettings::setForcedDisplayIsMonochromeAccessibilityValue):
        (WebCore::InternalSettings::forcedPrefersReducedMotionAccessibilityValue):
        (WebCore::InternalSettings::setForcedPrefersReducedMotionAccessibilityValue):
        (WebCore::InternalSettings::forcedPrefersReducedMotionValue): Deleted.
        (WebCore::InternalSettings::setForcedPrefersReducedMotionValue): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2016-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Unsupported emoji are invisible
        https://bugs.webkit.org/show_bug.cgi?id=164944
        <rdar://problem/28591608>

        Reviewed by Dean Jackson.

        In WidthIterator, we explicitly skip characters which the OS has no font
        to render with. However, for emoji, we should draw something to show that
        there is missing content. Because we have nothing to draw, we can draw
        the .notdef glyph (empty box, or "tofu").

        Test: fast/text/emoji-draws.html

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

2016-11-18  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for record types
        https://bugs.webkit.org/show_bug.cgi?id=164935

        Reviewed by Tim Horton.

        Add support for WebIDLs record types. We map them to HashMap<String, {OtherType}>.

        * bindings/generic/IDLTypes.h:
        - Add IDLRecord type and helper predicate.
        - Remove IDLRegExp which is no longer in WebIDL and we never supported.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::stringToByteString):
        (WebCore::identifierToByteString):
        (WebCore::valueToByteString):
        (WebCore::hasUnpairedSurrogate):
        (WebCore::stringToUSVString):
        (WebCore::identifierToUSVString):
        (WebCore::valueToUSVString):
        * bindings/js/JSDOMBinding.h:
        Refactor ByteString and USVString conversion to support converting from
        either a JSValue or Identifier.

        * bindings/js/JSDOMConvert.h:
        (WebCore::DetailConverter<IDLRecord<K, V>>):
        (WebCore::JSConverter<IDLRecord<K, V>>):
        Add conversion support for record types. Use Detail::IdentifierConverter helper
        to convert identifiers to strings using the correct conversion rules.

        (WebCore::Converter<IDLUnion<T...>>::convert):
        Update comments in union conversion to match current spec. Remove check
        for regular expressions and add support for record types.

        * bindings/scripts/CodeGenerator.pm:
        (IsRefPtrType):
        Add record and union types to the list of things that aren't RefPtrs.

        (IsRecordType):
        Add predicate for testing if a type is a record.

        (IsWrapperType):
        Remove check for union. This is now handled in the IsRefPtrType check.

        (SkipIncludeHeader): Deleted.
        (GetSequenceInnerType): Deleted.
        (GetFrozenArrayInnerType): Deleted.
        (GetSequenceOrFrozenArrayInnerType): Deleted.
        Remove no longer necessary functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForImplementationType):
        Remove check for includes to skip. This is now only called for interfaces, which should be included
        unconditionally.

        (AddToIncludesForIDLType):
        Add includes and recursive includes for record types.

        (GenerateOverloadedFunctionOrConstructor):
        Update to account for records.

        (GetGnuVTableRefForInterface):
        (GetGnuVTableNameForInterface):
        (GetGnuMangledNameForInterface):
        (GetWinVTableNameForInterface):
        (GetWinMangledNameForInterface):
        Strength-reduce GetNativeTypeForConversions and GetNamespaceForInterface into their callers.

        (GetBaseIDLType):
        Add support for IDLRecord. Remove call to GetIDLInterfaceName now that is simply the type name.

        (GetNativeType):
        Simplify sequence/FrozenArray support and add record support.

        (GetNativeInnerType):
        Generalize GetNativeVectorInnerType to work for record types as well.

        (ShouldPassWrapperByReference):
        Moved so native type accessors can be together.

        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Add record support.

        (GetNativeTypeForConversions): Deleted.
        (GetNamespaceForInterface): Deleted.
        (GetNativeVectorType): Deleted.
        (GetIDLInterfaceName): Deleted.
        (GetNativeVectorInnerType): Deleted.
        Remove unneeded functions.

        * bindings/scripts/IDLParser.pm:
        (typeDescription):
        Add helper useful for debugging, that constructs the string form of a type.

        (typeByApplyingTypedefs):
        Add missing call to typeByApplyingTypedefs (this is noted by a fix in JSTestCallbackFunctionWithTypedefs.h)

        (parseNonAnyType):
        Remove unused $subtypeName variables and add support for parsing record types.

        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:
        Add tests for records and update results.

        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testLongRecord):
        (WebCore::TypeConversions::setTestLongRecord):
        (WebCore::TypeConversions::testNodeRecord):
        (WebCore::TypeConversions::setTestNodeRecord):
        (WebCore::TypeConversions::testSequenceRecord):
        (WebCore::TypeConversions::setTestSequenceRecord):
        * testing/TypeConversions.idl:
        Add record types so it can be tested from layout tests.

2016-11-18  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support font-variation-settings
        https://bugs.webkit.org/show_bug.cgi?id=164947

        Reviewed by Myles Maxfield.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontVariationTag):
        (WebCore::consumeFontVariationSettings):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-17  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::encrypt to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164738
        <rdar://problem/29257812>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::encrypt method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-encrypt.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-encrypt.
        2. It implements encrypt operations of the following algorithms: AES-CBC,
           RSAES-PKCS1-V1_5, and RSA-OAEP.
        3. It addes ASSERT(parameters) for every method that accepts a
           std::unique_ptr<CryptoAlgorithmParameters>&& type parameter.
        4. It changes RefPtr<CryptoKey>&& to Ref<CryptoKey>&& for every method that
           accepts a CryptoKey.

        Tests: crypto/subtle/aes-cbc-encrypt-malformed-parameters.html
               crypto/subtle/aes-cbc-import-key-encrypt.html
               crypto/subtle/encrypt-malformed-parameters.html
               crypto/subtle/rsa-oaep-encrypt-malformed-parameters.html
               crypto/subtle/rsa-oaep-import-key-encrypt-label.html
               crypto/subtle/rsa-oaep-import-key-encrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-key-encrypt.html
               crypto/workers/subtle/aes-cbc-import-key-encrypt.html
               crypto/workers/subtle/rsa-oaep-import-key-encrypt.html
               crypto/workers/subtle/rsaes-pkcs1-v1_5-import-key-encrypt.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::BufferSource):
        Add a default constructor for initializing an empty BufferSource object.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionEncryptPromise):
        (WebCore::JSSubtleCrypto::encrypt):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::exportKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::SubtleCrypto):
        * crypto/SubtleCrypto.h:
        (WebCore::SubtleCrypto::workQueue):
        * crypto/SubtleCrypto.idl:
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        * crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        (WebCore::CryptoAlgorithmAES_KW::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::encryptRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::encryptRSA_OAEP):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/parameters/AesCbcParams.idl: Added.
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h: Added.
        * crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h: Added.
        * crypto/parameters/RsaOaepParams.idl: Added.

2016-11-18  Ryan Haddad  <ryanhaddad@apple.com>

        Attempt to fix iOS build again.
        <rdar://problem/29312689>

        Unreviewed build fix.

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

2016-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [CSS Font Loading] FontFaceSet.load() promises don't always fire
        https://bugs.webkit.org/show_bug.cgi?id=164902

        Reviewed by David Hyatt.

        Test: fast/text/fontfaceset-rebuild-during-loading.html

        We currently handle web fonts in two phases. The first phase is building up
        StyleRuleFontFace objects which reflect the style on the page. The second is creating
        CSSFontFace objects from those StyleRuleFontFace objects. When script modifies the
        style on the page, we can often update the CSSFontFace objects, but there are some
        modifications which we don't know how to model. For these operations, we destroy the
        CSSFontFace objects and rebuild them from the newly modified StyleRuleFontFace objects.

        Normally, this is fine. However, with the CSS font loading API, the CSSFontFaces back
        Javascript objects which will persist across the rebuilding step mentioned above. This
        means that the FontFace objects need to adopt the new CSSFontFace objects and forget
        the old CSSFontFace objects.

        There was one bit of state which I forgot to update during this rebuilding phase. The
        FontFaceSet object contains an internal HashMap where a reference to a CSSFontFace
        is used as a key. After the rebuilding phase, this reference wasn't updated to point
        to the new CSSFontFace.

        The solution is to instead use a reference to the higher-level FontFace as the key to
        the HashMap. This object is persistent across the rebuilding phase (and it adopts
        the new CSSFontFaces). There is not a lifetime problem because the FontFace holds a
        strong reference to its backing CSSFontFace object.

        This bug didn't cause a memory problem because the HashMap was keeping the old
        CSSFontFace alive because the key was a strong reference.

        This patch also adds a lengthy comment explaining how the migration works.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::initializeWrapper): This is another bit of state which didn't
        survive the rebuilding phase. Moving it here causes it to survive.
        (WebCore::CSSFontFace::wrapper):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::load):
        (WebCore::FontFaceSet::faceFinished):
        * css/FontFaceSet.h:

2016-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Font Converter] Fonts advances are not internally consistent inside the generated font file
        https://bugs.webkit.org/show_bug.cgi?id=164846
        <rdar://problem/29031509>

        Reviewed by Darin Adler.

        The fonts I'm generating in the SVG -> OTF converter have fractional FUnit values for their advances.
        The CFF table can encode that, but hmtx can't, which means the font isn't internally consistent.

        Covered by existing tests.

        * svg/SVGToOTFFontConversion.cpp:

2016-11-18  Ryan Haddad  <ryanhaddad@apple.com>

        Attempt to fix iOS build.
        <rdar://problem/29312689>

        Unreviewed build fix.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):

2016-11-18  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Hook up InspectorStyleSheet to the new CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=164886

        Reviewed by Dean Jackson.

        * css/CSSGrammar.y.in:
        Get rid of the CSSRuleSourceData type enum, since StyleRule's type
        enum is exactly the same.

        * css/CSSPropertySourceData.cpp:
        (WebCore::CSSPropertySourceData::CSSPropertySourceData):
        * css/CSSPropertySourceData.h:
        Add a concept of disabled to CSSPropertySourceData. This is used for
        commented out properties.

        (WebCore::CSSRuleSourceData::create):
        (WebCore::CSSRuleSourceData::createUnknown):
        (WebCore::CSSRuleSourceData::CSSRuleSourceData):
        Get rid of the CSSRuleSourceData type enum, since StyleRule's type
        enum is exactly the same.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::CSSParser::parseSheetForInspector):
        (WebCore::CSSParser::parseDeclarationForInspector):
        (WebCore::CSSParser::markSupportsRuleHeaderStart):
        (WebCore::CSSParser::markRuleHeaderStart):
        (WebCore::CSSParser::markPropertyEnd):
        * css/parser/CSSParser.h:
        Add functions that represent the new API for inspector sheet
        and declaration parsing. Patch the old parse code to use StyleRule::Type
        now that the CSSRuleSourceData type is gone.

        * css/parser/CSSParserObserver.h:
        Tweak the API for our memory management.

        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::parserContextForDocument):
        (WebCore::StyleSheetHandler::StyleSheetHandler):
        (WebCore::StyleSheetHandler::startRuleHeader):
        (WebCore::StyleSheetHandler::setRuleHeaderEnd):
        (WebCore::StyleSheetHandler::endRuleHeader):
        (WebCore::StyleSheetHandler::observeSelector):
        (WebCore::StyleSheetHandler::startRuleBody):
        (WebCore::StyleSheetHandler::endRuleBody):
        (WebCore::StyleSheetHandler::popRuleData):
        (WebCore::fixUnparsedProperties):
        (WebCore::StyleSheetHandler::fixUnparsedPropertyRanges):
        (WebCore::StyleSheetHandler::observeProperty):
        (WebCore::StyleSheetHandler::observeComment):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::isValidSelectorListString):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::ensureParsedDataReady):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleSourceData):
        (WebCore::createCSSParser): Deleted.
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges): Deleted.
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyleProperty::setRawTextFromStyleDeclaration):
        Add the new implementation. This involves duplicating most of the old
        parser code for this into a new class, StyleSheetHandler, that implements
        the observer interface and builds up the same data structures as the old
        parser did in response to the callbacks.

2016-11-18  Dan Bernstein  <mitz@apple.com>

        Tried to fix some non-macOS builds.
        <rdar://problems/29331425&29331438&29331722>

        * platform/mac/WebPlaybackControlsManager.h:

2016-11-18  Per Arne Vollan  <pvollan@apple.com>

        [Win32] Start releasing memory earlier when memory is running low.
        https://bugs.webkit.org/show_bug.cgi?id=164862

        Reviewed by Brent Fulgham.

        On Windows, 32-bit processes have 2GB of memory available, where some is used by the system.
        Debugging has shown that allocations might fail and cause crashes when memory usage is > ~1GB.
        We should start releasing memory before we reach 1GB.

        * platform/win/MemoryPressureHandlerWin.cpp:
        (WebCore::CheckMemoryTimer::fired):

2016-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r208511): ImageDecoders: Crash decoding GIF images since r208511
        https://bugs.webkit.org/show_bug.cgi?id=164864

        Reviewed by Simon Fraser.

        This happens sometimes since r208511 because the same decoder is used by more than one thread at the same
        time and the decoders are not thread-safe. Several methods in ImageDecoder need to decode partially the image,
        so it's possible that one method calls frameBufferAtIndex at the same times as createFrameImageAtIndex that now
        can be called from the image decoder thread. Use a Lock in ImageDecoder to protect calls to frameBufferAtIndex.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::frameIsCompleteAtIndex):
        (WebCore::ImageDecoder::frameDurationAtIndex):
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ImageDecoder.h:

2016-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add an experimental API to find elements across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=164851
        <rdar://problem/28220092>

        Reviewed by Sam Weinig.

        Add window.collectMatchingElementsInFlatTree(Node node, DOMString selectors)
        as an experimental API which finds a list of elements that matches the given CSS selectors
        and expose it to a JSWorld on which WKBundleScriptWorldMakeAllShadowRootsOpen was called.

        No new tests. More test cases are added to WebKit2.InjectedBundleMakeAllShadowRootsOpen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck): Added. Abstracts checks for EnabledAtRuntime and EnabledForWorld.
        (OperationShouldBeOnInstance):
        (GeneratePropertiesHashTable):
        (GetRuntimeEnableFunctionName): Use worldForDOMObject(this).condition() for EnabledForWorld.
        Also split the line for EnabledAtRuntime and EnabledAtRuntime for a better readability.
        (GenerateImplementation):
        (addIterableProperties):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttribute):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::finishCreation):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorld):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldCaller):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethod):
        (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethodCaller):
        * bindings/scripts/test/TestGlobalObject.idl: Added a test case.
        * bindings/scripts/test/TestObj.idl: Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::collectMatchingElementsInFlatTree): Added. Implements the feature by
        calling SelectorQuery's matches on a node yielded by ComposedTreeIterator.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2016-11-17  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for ByteString
        https://bugs.webkit.org/show_bug.cgi?id=164901

        Reviewed by Darin Adler.

        * bindings/generic/IDLTypes.h:
        Make IDLByteString a IDLString.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::valueToByteString):
        (WebCore::valueToUSVString):
        * bindings/js/JSDOMBinding.h:
        Add conversion function for ByteString and fix valueToUSVString to take an ExecState reference.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLByteString>::convert):
        (WebCore::JSConverter<IDLByteString>::convert):
        Add conversion functions for ByteString, using valueToByteString.

        (WebCore::Converter<IDLUSVString>::convert):
        Update to pass the ExecState by reference.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        Update to pass the ExecState by reference.

        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::importScripts):
        Update to pass the ExecState by reference.

        * bindings/scripts/CodeGenerator.pm:
        Add ByteString as a string type.

        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testByteString):
        (WebCore::TypeConversions::setTestByteString):
        * testing/TypeConversions.idl:
        Add a testByteString attribute for testing.

2016-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled should keep text replacement enabled
        https://bugs.webkit.org/show_bug.cgi?id=164857
        <rdar://problem/27721742>

        Reviewed by Wenson Hsieh.

        It turns out that some users want text replacement to be always enabled so change the semantics of
        WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled to only disable everything else.

        Instead of completely disabling spellchecking, remove all text checking options but text replacement
        when the user types into an input element on which this API is used to disable spellchecking.

        No new tests since we don't have a good facility to test text replacement.

        * dom/Element.h:
        (WebCore::Element::isSpellCheckingEnabled): Made this non-virtual now that there is no override.
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Don't call resolveTextCheckingTypeMask twice.
        (WebCore::Editor::resolveTextCheckingTypeMask): Filter out the text checking options if the root editable
        element is inside an input element on which isSpellcheckDisabledExceptTextReplacement is set to true.
        * editing/Editor.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::isSpellCheckingEnabled): Deleted.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::setSpellcheckDisabledExceptTextReplacement): Renamed from setSpellcheckEnabled
        to reflect the new semantics.
        (WebCore::HTMLInputElement::isSpellcheckDisabledExceptTextReplacement): Ditto.

2016-11-17  John Wilander  <wilander@apple.com>

        Resource load statistics: Cover further data records, count removed data records, and only fire handler when needed
        https://bugs.webkit.org/show_bug.cgi?id=164659

        Reviewed by Andy Estes.

        No new tests. This feature is behind a flag and off by default. Tests require real domain names.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
            All three functions are now more conservative in calls to
            m_store->fireDataModificationHandler(). They only fire when an important statistic has
            changed or data records have previously been removed for the domain in question.
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode):
            Added the dataRecordsRemoved statistic.
        (WebCore::ResourceLoadStatistics::decode):
            Now takes a version parameter to control which keys to expect.
            Added the dataRecordsRemoved statistic.
        (WebCore::appendHashCountedSet):
            Removed stray linefeed.
        (WebCore::ResourceLoadStatistics::toString):
            Added the dataRecordsRemoved statistic.
        (WebCore::ResourceLoadStatistics::merge):
            Added the dataRecordsRemoved statistic.
        * loader/ResourceLoadStatistics.h:
            Added the dataRecordsRemoved statistic.
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData):
            Now encodes a version number for the statistics model.
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now tries to decode a version number and passes it on to statistics decoding.
        (WebCore::ResourceLoadStatisticsStore::processStatistics):
            No longer gates processing on the number of data captured.
        (WebCore::ResourceLoadStatisticsStore::updateStatisticsForRemovedDataRecords):
            Update function for the new dataRecordsRemoved statistic.
        (WebCore::ResourceLoadStatisticsStore::hasEnoughDataForStatisticsProcessing): Deleted.
            No longer needed since we no longer gate processing on the number of data captured.
        * loader/ResourceLoadStatisticsStore.h:

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r208740
        https://bugs.webkit.org/show_bug.cgi?id=164749

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::getExtensions):
        Use more references instead of pointers, like Myles did in r208740

2016-11-17  Alex Christensen  <achristensen@webkit.org>

        Implement TextDecoder and TextEncoder
        https://bugs.webkit.org/show_bug.cgi?id=163771

        Reviewed by Sam Weinig.

        This API is already implemented by Chrome and Firefox
        as specified in https://encoding.spec.whatwg.org/

        Covered by newly passing web platform tests.

        * features.json:
        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/TextDecoder.cpp: Added.
        (WebCore::isEncodingWhitespace):
        (WebCore::TextDecoder::create):
        (WebCore::TextDecoder::TextDecoder):
        (WebCore::TextDecoder::ignoreBOMIfNecessary):
        (WebCore::TextDecoder::prependBOMIfNecessary):
        (WebCore::codeUnitByteSize):
        (WebCore::TextDecoder::decode):
        (WebCore::TextDecoder::encoding):
        * dom/TextDecoder.h: Added.
        (WebCore::TextDecoder::fatal):
        (WebCore::TextDecoder::ignoreBOM):
        * dom/TextDecoder.idl: Added.
        * dom/TextEncoder.cpp: Added.
        (WebCore::TextEncoder::TextEncoder):
        (WebCore::TextEncoder::encoding):
        (WebCore::TextEncoder::encode):
        * dom/TextEncoder.h: Added.
        (WebCore::TextEncoder::create):
        * dom/TextEncoder.idl: Added.

2016-11-17  Sam Weinig  <sam@webkit.org>

        Try to fix the windows build again.

        * svg/SVGStringList.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::SVGStaticListPropertyTearOff):

2016-11-17  Sam Weinig  <sam@webkit.org>

        Try to fix the windows build.

        * svg/SVGStringList.h:
        Remove unnecessary using declarations.

2016-11-17  Chris Dumez  <cdumez@apple.com>

        Regression(r208672?): ASSERTION FAILED: isMainThread() in WebCore::Node::ref()
        https://bugs.webkit.org/show_bug.cgi?id=164887
        <rdar://problem/29319497>

        Reviewed by Brady Eidson.

        Restore pre-r208672 behavior where we do not ref the script execution context in the
        background thread since this is unsafe. We use WTFMove(m_scriptExecutionContext)
        instead of m_scriptExecutionContext.copyRef(). Before r208672, it was calling
        m_scriptExecutionContext.releaseNonNull() because m_scriptExecutionContext was a
        RefPtr instead of a Ref. Note that copyRef() causes 2 issues here:
        1. It refs the scriptExecutionContext in a non-main thread which is unsafe and asserts.
        2. The point of this postTask in the destructor is to make sure the scriptExecutionContext
           gets destroyed in the main thread so we definitely want to *transfer* ownership of
           m_scriptExecutionContext to the main thread, not ref it to pass it to the main thread.

        No new tests, already covered by storage/websql/multiple-transactions-on-different-handles.html.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):

2016-11-17  Brady Eidson  <beidson@apple.com>

        Add _WKIconLoadingDelegate SPI.
        https://bugs.webkit.org/show_bug.cgi?id=164894

        Reviewed by Alex Christensen.

        No new tests (Manual testing possible in MiniBrowser now, WKTR tests coming soon in https://bugs.webkit.org/show_bug.cgi?id=164895).

        With this client, WebCore will ask the FrameLoaderClient about each icon found in the <head>.

        WebKit2 will then ask the embedding app - for each icon - if it wants that icon to load.

        For icons the app decides to load, WebKit will pass the data to the app without storing locally.

        * WebCore.xcodeproj/project.pbxproj:

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

        * html/LinkIconCollector.cpp:
        (WebCore::iconSize):
        (WebCore::compareIcons):
        * html/LinkIconCollector.h:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon):
        (WebCore::DocumentLoader::finishedLoadingIcon):
        * loader/DocumentLoader.h:

        * loader/FrameLoaderClient.h:

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::IconLoader):
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:

        * platform/LinkIcon.h: Copied from Source/WebCore/html/LinkIconCollector.h.
        (WebCore::LinkIcon::encode):
        (WebCore::LinkIcon::decode):

2016-11-15  Sam Weinig  <sam@webkit.org>

        [SVG] Moving more special casing of SVG out of the bindings - SVG lists
        https://bugs.webkit.org/show_bug.cgi?id=164790

        Reviewed by Alex Christensen.

        - Make SVGLengthList, SVGNumberList, SVGPointList, SVGStringList, SVGPathSegList and SVGTransformList
          real classes and stop special casing them in the bindings generator. This 
          removes the remaining SVG specializations for tear offs from the bindings generator.
        - Renamed existing SVGLengthList, SVGNumberList, SVGPointList, SVGStringList, SVGPathSegList, 
          SVGPathSegList and SVGTransformList to SVG<Type>ListValues, to make way for the new classes.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        Add new files.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        Remove SVG tear off specific code!

        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGRadialGradientElement.cpp:
        Remove unnecessary #includes.

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::updateCharacterData):
        (WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString):
        (WebCore::parseLengthListFromString):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedLengthListAnimator::calculateDistance):
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedNumberListAnimator::calculateDistance):
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString):
        (WebCore::SVGAnimatedPointListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedPointListAnimator::calculateDistance):
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createLengthList):
        (WebCore::SVGAnimatedType::createNumberList):
        (WebCore::SVGAnimatedType::createPointList):
        (WebCore::SVGAnimatedType::createTransformList):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::lengthList):
        (WebCore::SVGAnimatedType::numberList):
        (WebCore::SVGAnimatedType::pointList):
        (WebCore::SVGAnimatedType::transformList):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGParserUtilities.cpp:
        (WebCore::pointsListFromSVGData):
        * svg/SVGParserUtilities.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPathSegListBuilder.cpp:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.cpp:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::buildSVGPathByteStreamFromSVGPathSegListValues):
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::buildSVGPathSegListValuesFromByteStream):
        (WebCore::buildStringFromSVGPathSegListValues):
        (WebCore::buildSVGPathByteStreamFromSVGPathSegList): Deleted.
        (WebCore::buildSVGPathSegListFromByteStream): Deleted.
        (WebCore::buildStringFromSVGPathSegList): Deleted.
        * svg/SVGPathUtilities.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::pointList):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseAttribute):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):
        * svg/SVGTransformable.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::viewTarget):
        (WebCore::SVGViewElement::parseAttribute):
        * svg/SVGViewElement.h:
        * svg/SVGViewElement.idl:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::transformString):
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
        (WebCore::SVGViewSpec::reset):
        * svg/SVGViewSpec.h:
        Update for name changes.
        
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::create):
        (WebCore::SVGAngle::SVGAngle):
        * svg/SVGLength.h:
        (WebCore::SVGLength::create):
        (WebCore::SVGLength::SVGLength):
        * svg/SVGMatrix.h:
        (WebCore::SVGMatrix::create):
        (WebCore::SVGMatrix::SVGMatrix):
        * svg/SVGNumber.h:
        (WebCore::SVGNumber::create):
        (WebCore::SVGNumber::SVGNumber):
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::create):
        (WebCore::SVGPoint::SVGPoint):
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::create):
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        * svg/SVGRect.h:
        (WebCore::SVGRect::create):
        (WebCore::SVGRect::SVGRect):
        * svg/SVGTransform.h:
        (WebCore::SVGTransform::create):
        (WebCore::SVGTransform::SVGTransform):
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::create):
        Pass the SVGAnimatedProperty parameter by reference.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::requiredFeatures):
        (WebCore::SVGAnimationElement::requiredExtensions):
        (WebCore::SVGAnimationElement::systemLanguage):
        * svg/SVGAnimationElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::requiredFeatures):
        (WebCore::SVGCursorElement::requiredExtensions):
        (WebCore::SVGCursorElement::systemLanguage):
        * svg/SVGCursorElement.h:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::requiredFeatures):
        (WebCore::SVGGraphicsElement::requiredExtensions):
        (WebCore::SVGGraphicsElement::systemLanguage):
        * svg/SVGGraphicsElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::requiredFeatures):
        (WebCore::SVGMaskElement::requiredExtensions):
        (WebCore::SVGMaskElement::systemLanguage):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        (WebCore::SVGPatternElement::requiredFeatures):
        (WebCore::SVGPatternElement::requiredExtensions):
        (WebCore::SVGPatternElement::systemLanguage):
        * svg/SVGPatternElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::synchronizeAttribute):
        (WebCore::SVGTests::synchronizeRequiredFeatures):
        (WebCore::SVGTests::synchronizeRequiredExtensions):
        (WebCore::SVGTests::synchronizeSystemLanguage):
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        * svg/SVGTests.h:
        * svg/SVGTests.idl:
        Make SVGTests SVGStringLists work by adding implementations of functions
        on the SVGElements that implement SVGTests, passing *this down to SVGTests.

        * svg/SVGLengthList.cpp: Removed.
        * svg/SVGLengthList.h:
        * svg/SVGLengthList.idl:
        * svg/SVGLengthListValues.cpp: Copied from svg/SVGLengthList.cpp.
        * svg/SVGLengthListValues.h: Copied from svg/SVGLengthList.h.
        Rename SVGLengthList to SVGLengthListValues and add an explicit implementation of
        the SVGLengthList interface inheriting from SVGListPropertyTearOff<SVGLengthListValues>.

        * svg/SVGNumberList.cpp: Removed.
        * svg/SVGNumberList.h:
        * svg/SVGNumberListValues.cpp: Copied from svg/SVGNumberList.cpp.
        * svg/SVGNumberListValues.h: Copied from svg/SVGNumberList.h.
        Rename SVGNumberList to SVGNumberListValues and add an explicit implementation of
        the SVGNumberList interface inheriting from SVGListPropertyTearOff<SVGNumberListValues>.

        * svg/SVGPathSegList.cpp:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegListValues.cpp: Copied from svg/SVGPathSegList.cpp.
        * svg/SVGPathSegListValues.h: Copied from svg/SVGPathSegList.h.
        * svg/properties/SVGPathSegListPropertyTearOff.cpp: Removed.
        * svg/properties/SVGPathSegListPropertyTearOff.h: Removed.
        Rename SVGPathSegList to SVGPathSegListValues and add an explicit implementation of
        the SVGPathSegList interface inheriting from SVGListProperty<SVGPathSegListValues>.

        * svg/SVGPointList.cpp: Removed.
        * svg/SVGPointList.h:
        * svg/SVGPointListValues.cpp: Copied from svg/SVGPointList.cpp.
        * svg/SVGPointListValues.h: Copied from svg/SVGPointList.h.
        Rename SVGPointList to SVGPointListValues and add an explicit implementation of
        the SVGPointList interface inheriting from SVGListPropertyTearOff<SVGPointListValues>.

        * svg/SVGStringList.cpp: Removed.
        * svg/SVGStringList.h:
        * svg/SVGStringListValues.cpp: Copied from svg/SVGStringList.cpp.
        * svg/SVGStringListValues.h: Copied from svg/SVGStringList.h.
        Rename SVGStringList to SVGStringListValues and add an explicit implementation of
        the SVGStringList interface inheriting from SVGStaticListPropertyTearOff<SVGStringListValues>.

        * svg/SVGTransformList.cpp: Removed.
        * svg/SVGTransformList.h:
        * svg/SVGTransformListValues.cpp: Copied from svg/SVGTransformList.cpp.
        * svg/SVGTransformListValues.h: Copied from svg/SVGTransformList.h.
        * svg/properties/SVGTransformListPropertyTearOff.h: Removed.
        Rename SVGTransformList to SVGTransformListValues and add an explicit implementation of
        the SVGTransformList interface inheriting from SVGListPropertyTearOff<SVGTransformListValues>.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        Convert to return fully specialized types for baseVal and animVal, removing many unnecessary casts
        around the codebase. Also add some uses of Ref.

        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::create):
        (WebCore::SVGListPropertyTearOff::SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::~SVGListPropertyTearOff):
        Store the AnimatedListPropertyTearOff as a Ref, and pass it around by reference.

        * svg/properties/SVGStaticPropertyTearOff.h:
        Update to take the ContextElement by reference.

2016-11-17  Brent Fulgham  <bfulgham@apple.com>

        Improve URL length handling
        https://bugs.webkit.org/show_bug.cgi?id=164884
        <rdar://problem/5909143>

        Reviewed by David Kilzer.

        Make sure the result of re-encoding and other fix-up stays within
        expected parameters.

        No new tests. No change in behavior.

        * platform/URL.cpp:
        (WebCore::URL::parse):

2016-11-17  Zalan Bujtas  <zalan@apple.com>

        Render tree should be all clean by the end of FrameView::layout().
        https://bugs.webkit.org/show_bug.cgi?id=162834

        Reviewed by Simon Fraser.

        This is a preventive patch to ensure we don't introduce new bugs through
        dirty renderers. There are still 3 failing cases and they are skipped for now (debug only).

        * page/FrameView.cpp:
        (WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker):

2016-11-17  Brent Fulgham  <bfulgham@apple.com>

        keygen element should not support < 2048 RSA key lengths
        https://bugs.webkit.org/show_bug.cgi?id=164874
        <rdar://problem/22618141>

        Reviewed by Dean Jackson.

        Remove the two insecure RSA choices (512-bit and 1024-bit) so that users
        do not accidentally select a bad key length.

        Tested by fast/html/keygen.html

        * platform/LocalizedStrings.cpp:
        (WebCore::keygenMenuItem512): Deleted.
        (WebCore::keygenMenuItem1024): Deleted.
        * platform/LocalizedStrings.h:
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString): ASSERT on bad key size.
        (WebCore::getSupportedKeySizes): Remove bad key sizes.
        (WebCore::signedPublicKeyAndChallengeString): Ditto.
        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::WebCore::getSupportedKeySizes): Ditto.

2016-11-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream][Mac] Use AVCapturePreview object for camera/microphone rendering
        https://bugs.webkit.org/show_bug.cgi?id=164837
        <rdar://problem/29297727>

        Reviewed by Jer Noble.

        No new tests, the real capture devices can not be used in layout tests.

        * WebCore.xcodeproj/project.pbxproj:
        
        Drive-by fix: clear m_settingMediaStreamSrcObject when the media player is destroyed unless
        that happens as a side effect of setting video.srcObject.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrcObject):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        * html/HTMLMediaElement.h:

        Add support for realtime media source that vend a preview interface, while keeping support
        for those that do not (e.g. the mock capture devices).
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBuffer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareVideoSampleBufferFromTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::internalSetVolume):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::platformLayer): Deleted, no longer used.
        * platform/mediastream/MediaStreamPrivate.h:

        Enable/disable the preview when available.
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setEnabled):
        (WebCore::MediaStreamTrackPrivate::endTrack):
        (WebCore::MediaStreamTrackPrivate::preview):
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::preview):
        (WebCore::RealtimeMediaSource::createWeakPtr):
        (WebCore::RealtimeMediaSource::platformLayer): Deleted.

        Define a realtime media source preview interface.
        * platform/mediastream/RealtimeMediaSourcePreview.h: Added.
        (WebCore::RealtimeMediaSourcePreview::~RealtimeMediaSourcePreview):
        (WebCore::RealtimeMediaSourcePreview::invalidate):
        (WebCore::RealtimeMediaSourcePreview::createWeakPtr):
        (WebCore::RealtimeMediaSourcePreview::RealtimeMediaSourcePreview):

        Implement the preview interface.
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioSourcePreview::create):
        (WebCore::AVAudioSourcePreview::AVAudioSourcePreview):
        (WebCore::AVAudioSourcePreview::invalidate):
        (WebCore::AVAudioSourcePreview::play):
        (WebCore::AVAudioSourcePreview::pause):
        (WebCore::AVAudioSourcePreview::setEnabled):
        (WebCore::AVAudioSourcePreview::setVolume):
        (WebCore::AVAudioSourcePreview::updateState):
        (WebCore::AVAudioCaptureSource::createPreview):
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaCaptureSource::createWeakPtr):
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::reset):
        (WebCore::AVMediaCaptureSource::preview):
        (WebCore::AVMediaCaptureSource::removePreview):
        (WebCore::AVMediaSourcePreview::AVMediaSourcePreview):
        (WebCore::AVMediaSourcePreview::~AVMediaSourcePreview):
        (WebCore::AVMediaSourcePreview::invalidate):
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoSourcePreview::create):
        (WebCore::AVVideoSourcePreview::AVVideoSourcePreview):
        (WebCore::AVVideoSourcePreview::invalidate):
        (WebCore::AVVideoSourcePreview::play):
        (WebCore::AVVideoSourcePreview::pause):
        (WebCore::AVVideoSourcePreview::setPaused):
        (WebCore::AVVideoSourcePreview::setEnabled):
        (WebCore::AVVideoCaptureSource::shutdownCaptureSession):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        (WebCore::AVVideoCaptureSource::createPreview):
        (WebCore::AVVideoCaptureSource::platformLayer): Deleted.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::platformLayer): Deleted.
        (WebCore::MockRealtimeVideoSourceMac::updatePlatformLayer): Deleted.
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::applyFrameRate):
        (WebCore::MockRealtimeVideoSource::applySize):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::updatePlatformLayer): Deleted.

2016-11-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix build after r208839.

        * dom/Node.h:
        (WebCore::Node::isDescendantOf):

2016-11-16  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add @supports, @keyframe and media query parsing options
        https://bugs.webkit.org/show_bug.cgi?id=164821

        Reviewed by Sam Weinig and Zalan Bujtas.

        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::setKeyText):
        * css/CSSKeyframeRule.h:
        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::findKeyframeIndex):
        Changed to call into CSSParserImpls implementation. The new parser
        is now always used when parsing the key list.

        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::create):
        (WebCore::MediaQuerySet::MediaQuerySet):
        (WebCore::MediaQuerySet::set):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        (WebCore::MediaList::setMediaText):
        (WebCore::parseMediaDescriptor): Deleted.
        (WebCore::MediaQuerySet::internalParse): Deleted.
        (WebCore::MediaQuerySet::parse): Deleted.
        * css/MediaList.h:
        Rewritten to remove fallback descriptor support/parsing, since no other
        browser supports it, and this was part of our initial 2005 landing that
        nobody else appears to use.  Media queries now call into the new parser always.

        * css/MediaQueryExp.cpp:
        (WebCore::featureWithValidDensity):
        (WebCore::featureWithPositiveNumber):
        (WebCore::MediaQueryExpression::MediaQueryExpression):
        Make sure to support transform2d, animation and transition.

        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        Call the normal create now that fallback descriptor syntax is gone.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        (WebCore::CSSParser::parseDeclarationDeprecated):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseKeyframeKeyList):
        (WebCore::CSSParser::parseMediaQuery): Deleted.
        (WebCore::CSSParser::parseKeyframeSelector): Deleted.
        * css/parser/CSSParser.h:
        Patched the old parser to have flags to call into the new parser
        for supports conditions and keyframes. Rename the parseDeclaration that
        is only used by the old parser to have the word Deprecated in it. Removed
        the media query and key list parsing functions, since the new parser
        now does it always.

        * css/parser/CSSParserIdioms.cpp:
        (WebCore::convertToASCIILowercaseInPlace): Deleted.
        * css/parser/CSSParserIdioms.h:
        * css/parser/CSSParserToken.cpp:
        (WebCore::convertToASCIILowercaseInPlace):
        (WebCore::CSSParserToken::convertToASCIILowercaseInPlace):
        * css/parser/CSSParserToken.h:
        (WebCore::CSSParserToken::value):
        (WebCore::CSSParserToken::initValueFromStringView):
        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoElementSelectorFromStringView):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAttr):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeId):
        (WebCore::CSSSelectorParser::consumeClass):
        (WebCore::CSSSelectorParser::consumePseudo):
        Moving convertToASCIILowercase to be a CSSParserToken member function instead
        of operating on StringView. This saves an extra step, since the token itself
        already had all the correct members. Note that converting in-place is bad,
        and we'll be removing it once the new parser turns on.

        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::readMediaType):
        (WebCore::MediaQueryParser::readFeature):
        (WebCore::MediaQueryParser::readFeatureEnd):
        Require the closing ")" on features. Fix the in-place lowercasing to only
        be done for features, not for types. This matches the old parser.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::parseAttribute):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::mediaAttributeMatches):
        Patched to call the normal MediaQuerySet::create and not the one that had fallback
        descriptor support.

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix link error after r208841 part2

        Use static_cast to avoid referencing static storage.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItemIgnoringQuota):

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix link error after r208841

        * storage/StorageMap.h:

2016-11-17  Saam Barati  <sbarati@apple.com>

        Remove async/await compile time flag and enable tests
        https://bugs.webkit.org/show_bug.cgi?id=164828
        <rdar://problem/28639334>

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] WTF::TemporaryChange with WTF::SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=164761

        Reviewed by Saam Barati.

        No behavior change.

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateModule):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchSlottedPseudoElementRules):
        * css/StyleResolver.cpp:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseBorderRadius):
        * css/parser/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * dom/CustomElementRegistry.h:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        (WebCore::Document::destroyRenderTree):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::performMicrotaskCheckpoint):
        * history/PageCache.cpp:
        (WebCore::PageCache::pruneToSizeNow):
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::updateAssociatedAttributeFromTokens):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan):
        * html/parser/HTMLConstructionSite.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::handleProvisionalLoadFailure):
        * loader/SubresourceLoader.cpp:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        * page/Chrome.cpp:
        (WebCore::Chrome::runModal):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::applyRecursivelyWithVisibleRect):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeaders):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::commitLayerChangesAfterSublayers):
        * platform/graphics/opengl/TemporaryOpenGLSetting.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        * platform/graphics/win/GraphicsLayerDirect2D.cpp:
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::writeClipboardContents):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * rendering/RenderBlock.cpp:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::pushMappingsToAncestor):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest):
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::dispatchInput):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItemIgnoringQuota):
        * svg/SVGPathBlender.cpp:
        (WebCore::SVGPathBlender::addAnimatedPath):

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore] Clean up script loading code in XML
        https://bugs.webkit.org/show_bug.cgi?id=161651

        Reviewed by Ryosuke Niwa.

        This patch cleans up XML document script handling by using PendingScript.
        Previously, we directly used CachedScript. But it is not good since we
        have PendingScript wrapper.

        We also disable ES6 modules for non HTML document. While ES6 modules tag
        requires "defer" semantics, "defer" semantics is not implemented in non
        HTML documents. And ES6 module tag is only specified in whatwg HTML spec.

        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::execute):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::determineScriptType):
        (WebCore::ScriptElement::prepareScript):
        (WebCore::ScriptElement::executeClassicScript):
        (WebCore::ScriptElement::executePendingScript):
        (WebCore::ScriptElement::executeScript): Deleted.
        (WebCore::ScriptElement::executeScriptForScriptRunner): Deleted.
        * dom/ScriptElement.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::runScript):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Add Node::isDescendantOf() overload that takes in a reference
        https://bugs.webkit.org/show_bug.cgi?id=164854

        Reviewed by Ryosuke Niwa.

        Add Node::isDescendantOf() overload that takes in a reference as a lot
        of call sites have a reference or a pointer they know is not null.

        No new tests, no Web-exposed behavior change.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        * dom/Document.cpp:
        (WebCore::isNodeInSubtree):
        (WebCore::Document::removeFullScreenElementOfSubtree):
        (WebCore::Document::setAnimatingFullScreen):
        * dom/Node.cpp:
        (WebCore::Node::isDescendantOf):
        (WebCore::Node::isDescendantOrShadowDescendantOf):
        (WebCore::Node::contains):
        * dom/Node.h:
        (WebCore::Node::isDescendantOf):
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::updateForNodeRemoval):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeFastPathForIdSelector):
        (WebCore::filterRootById):
        * dom/TypedElementDescendantIterator.h:
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::beginAt):
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::from):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::beginAt):
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::from):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirectionForSelection):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::honorEditingBoundaryAtOrBefore):
        (WebCore::VisiblePosition::honorEditingBoundaryAtOrAfter):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::selectionForParagraphIteration):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        * html/CachedHTMLCollection.h:
        (WebCore::traversalType>::namedItem):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestContextualWordOrLinkFromMouseEvent):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):

2016-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Fix build on macOS Sierra when WEB_PLAYBACK_CONTROLS_MANAGER is enabled
        https://bugs.webkit.org/show_bug.cgi?id=164845

        Reviewed by Dan Bernstein.

        Revert r208833 and fix the build by declaring AVFunctionBarMediaSelectionOption and AVThumbnail in AVKitSPI.h

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager generateFunctionBarAudioAmplitudeSamples:completionHandler:]):
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::seekableRangesChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::setPlayBackControlsManager):
        * platform/spi/cocoa/AVKitSPI.h:

2016-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r208082): 1% Speedometer regression on iOS
        https://bugs.webkit.org/show_bug.cgi?id=164852

        Reviewed by Chris Dumez.

        Temporarily disable CEReactions entirely to recover the regression in Speedometer since
        reverting r208082 wouldn't remove CEReactions from other DOM APIs and if r208082 was a regression,
        then they're likely causing a regression on Speedometer as well.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionStack::ElementQueue::add): Removed the release assert added in r208785
        since reactions can be inserted into the backup queue while the queue is running.
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll): Ditto.
        * dom/CustomElementReactionQueue.h:
        (WebCore::CustomElementReactionStack::CustomElementReactionStack): Removed all the code so that this
        constructor would be optimized away by clang.
        (WebCore::CustomElementReactionStack::~CustomElementReactionStack): Ditto.

2016-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Fix build on macOS Sierra when WEB_PLAYBACK_CONTROLS_MANAGER is enabled
        https://bugs.webkit.org/show_bug.cgi?id=164845

        Reviewed by Wenson Hsieh.

        Fix builds after r208802 by wrapping code inside USE(APPLE_INTERNAL_SDK).

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::seekableRangesChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::setPlayBackControlsManager):

2016-11-16  Chris Dumez  <cdumez@apple.com>

        ScriptExecutionContext::processMessagePortMessagesSoon() should only post task when necessary
        https://bugs.webkit.org/show_bug.cgi?id=164812
        <rdar://problem/29148465>

        Reviewed by Geoffrey Garen.

        ScriptExecutionContext::processMessagePortMessagesSoon() should only post task when necessary,
        meaning when there is not already one pending.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon):
        (WebCore::ScriptExecutionContext::dispatchMessagePortEvents):
        * dom/ScriptExecutionContext.h:

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Use more references in TreeScope / TreeScopeAdopter
        https://bugs.webkit.org/show_bug.cgi?id=164836

        Reviewed by Ryosuke Niwa.

        Use more references in TreeScope / TreeScopeAdopter and avoid some
        unnecessary null checks.

        No new tests, no Web-exposed behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
        (WebCore::ContainerNode::parserAppendChild):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::addChildNodesToDeletionQueue):
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::removeShadowRoot):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::setAttributeNodeNS):
        (WebCore::Element::ensureAttr):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        (WebCore::TreeScope::adoptIfNeeded):
        * dom/TreeScope.h:
        (WebCore::TreeScope::documentScope):
        (WebCore::TreeScope::setDocumentScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveShadowTreeToNewDocument):
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::updateTreeScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * dom/TreeScopeAdopter.h:
        (WebCore::TreeScopeAdopter::ensureDidMoveToNewDocumentWasCalled):
        (WebCore::TreeScopeAdopter::TreeScopeAdopter):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::didMoveToNewDocument):
        * html/FormAssociatedElement.h:
        * 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):
        * 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:

2016-11-16  Jon Davis  <jond@apple.com>

        Added Web App Manifest to the Feature Status page.
        https://bugs.webkit.org/show_bug.cgi?id=162675
        
        Reviewed by Timothy Hatcher.

        * features.json:

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Use more references for Document::removeFocusedNodeOfSubtree()
        https://bugs.webkit.org/show_bug.cgi?id=164839

        Reviewed by Andreas Kling.

        Use more references for Document::removeFocusedNodeOfSubtree().

        No new tests, no Web-exposed behavior change.

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

2016-11-16  Brent Fulgham  <bfulgham@apple.com>

        Clear track client when removing a track
        https://bugs.webkit.org/show_bug.cgi?id=164842
        <rdar://problem/29213621>

        Reviewed by Eric Carlson.

        Call 'clearClient' when removing a track from an HTMLMediaElement.

        Test: media/track/audio-track-add-remove.html
              media/track/video-track-add-remove.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeAudioTrack): Call 'clearClient'
        (WebCore::HTMLMediaElement::removeVideoTrack): Ditto.

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=164827

        Reviewed by Ryosuke Niwa.

        Use Settings.in. And intentionally do not use RuntimeEnabledFeatures.
        According to the pointer lock's issue[1], we should use Settings.

        [1]: https://bugs.webkit.org/show_bug.cgi?id=163801

        * Configurations/FeatureDefines.xcconfig:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::determineScriptType):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * page/Settings.in:
        A bit unfortunate thing is that the setter is named `setEs6ModulesEnabled`
        if we use `es6ModulesEnabled` here.

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, remove outdated comment about using PassRefPtr.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserAppendChild):

2016-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        slotchange event should bubble and dispatched once
        https://bugs.webkit.org/show_bug.cgi?id=164770

        Reviewed by Antti Koivisto.

        Updated our implementation of slotchange event to match the latest specification after:
        https://github.com/w3c/webcomponents/issues/571
        https://dom.spec.whatwg.org/#signal-a-slot-change
        The new behavior matches that of Google Chrome Canary.

        In the latest specification, we no longer dispatch a separate event on ancestor slots.
        Instead, we fire a single slotchange event to which a new node is assigned or from which
        an existing assigned node is removed. This patch mostly removes the code that existed to
        locate ancestor slot elements, and makes the event bubble up by changing a single line in
        HTMLSlotElement::dispatchSlotChangeEvent.

        Test: fast/shadow-dom/slotchange-event-bubbling.html

        * dom/ShadowRoot.h:
        * dom/SlotAssignment.cpp:
        (WebCore::recursivelyFireSlotChangeEvent): Deleted.
        (WebCore::SlotAssignment::didChangeSlot): Removed ChangeType from the arguments since we
        no longer notify the ancestor slot elements.
        (WebCore::SlotAssignment::hostChildElementDidChange):
        * dom/SlotAssignment.h:
        (WebCore::ShadowRoot::didRemoveAllChildrenOfShadowHost):
        (WebCore::ShadowRoot::didChangeDefaultSlot):
        (WebCore::ShadowRoot::hostChildElementDidChangeSlotAttribute):
        (WebCore::ShadowRoot::innerSlotDidChange): Deleted.
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSlotAssignment::hostChildElementDidChange):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::dispatchSlotChangeEvent): Make slotchange event bubble.

2016-11-16  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r207162): [debug] loader/stateobjects LayoutTests timing out
        https://bugs.webkit.org/show_bug.cgi?id=163307

        Reviewed by Alexey Proskuryakov.

        * platform/URLParser.cpp:
        Removed some unnecessary and redundant assertions in iterators, which are inside inner loops.
        (WebCore::URLParser::parsedDataView):
        (WebCore::URLParser::parse):
        Add a parsedDataView that just returns a UChar instead of a StringView for 1-length views.
        This speeds up debug builds considerably, which spent most of the time parsing the path
        making and destroying these 1-length StringViews.  It can't hurt release builds.
        * platform/URLParser.h:

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Micro-optimize ContainerNode::removeBetween()
        https://bugs.webkit.org/show_bug.cgi?id=164832

        Reviewed by Sam Weinig.

        Micro-optimize ContainerNode::removeBetween() by updating pointers only
        when strictly needed and reducing branching.

        No new tests, no Web-exposed behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):

2016-11-16  Chris Dumez  <cdumez@apple.com>

        Micro-optimize AtomicHTMLToken::initializeAttributes()
        https://bugs.webkit.org/show_bug.cgi?id=164826

        Reviewed by Sam Weinig.

        Micro-optimize AtomicHTMLToken::initializeAttributes():
        - Use uncheckedAppend() instead of append() since we reserve capacity
          before the loop.
        - Use a more efficient findAttribute() that only checks the local names
          since this function only adds attributes that have to namespace or
          prefix.

        No new tests, no Web-exposed behavior change.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::hasAttribute):
        (WebCore::AtomicHTMLToken::initializeAttributes):

2016-11-16  Beth Dakin  <bdakin@apple.com>

        Another build fix.

        * platform/mac/WebPlaybackSessionInterfaceMac.mm:

2016-11-16  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::durationChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::currentTimeChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::rateChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::beginScrubbing):
        (WebCore::WebPlaybackSessionInterfaceMac::seekableRangesChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::ensureControlsManager):

2016-11-16  Brady Eidson  <beidson@apple.com>

        Re-indent some old headers.

        Rubberstamped by Alex Christensen 

        No new tests (No behavior change).

        (Also #pragma once a few of them)

        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        * page/Frame.h:
        * page/FrameTree.h:
        * page/PageGroup.h:
        * platform/Cursor.h:

2016-11-16  Darin Adler  <darin@apple.com>

        REGRESSION (r208672): Crash in com.apple.WebCore: WebCore::DatabaseContext::stopDatabases + 34
        https://bugs.webkit.org/show_bug.cgi?id=164820

        Reviewed by Sam Weinig.

        Crash seen in existing regression tests; reliably reproducible in some test configurations.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::contextDestroyed): Call through to base class before calling
        stopDatabases, since that might cause this object to be deallocated.
        (WebCore::DatabaseContext::stopDatabases): Be sure not to clear the possibly-last reference
        to this database context until after all code that accesses data members, since it might
        cause this object to be deallocated.

2016-11-16  Beth Dakin  <bdakin@apple.com>

        Implement WebPlaybackControlsManager
        https://bugs.webkit.org/show_bug.cgi?id=164789
        -and corresponding-
        rdar://problem/29275082

        Reviewed by Dan Bernstein.

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager dealloc]):
        (-[WebPlaybackControlsManager cancelThumbnailAndAudioAmplitudeSampleGeneration]):
        (-[WebPlaybackControlsManager generateFunctionBarThumbnailsForTimes:size:completionHandler:]):
        (-[WebPlaybackControlsManager generateFunctionBarAudioAmplitudeSamples:completionHandler:]):
        (-[WebPlaybackControlsManager canBeginFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager beginFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager endFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager audioFunctionBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setAudioFunctionBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentAudioFunctionBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentAudioFunctionBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager legibleFunctionBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setLegibleFunctionBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentLegibleFunctionBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentLegibleFunctionBarMediaSelectionOption:]):
        (mediaSelectionOptions):
        (-[WebPlaybackControlsManager setAudioMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager setLegibleMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager webPlaybackSessionInterfaceMac]):
        (-[WebPlaybackControlsManager setWebPlaybackSessionInterfaceMac:]):
        (-[WebPlaybackControlsManager togglePlayback]):
        (-[WebPlaybackControlsManager setPlaying:]):
        (-[WebPlaybackControlsManager isPlaying]):
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::durationChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::currentTimeChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::rateChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::playBackControlsManager):

2016-11-16  Jiewen Tan  <jiewen_tan@apple.com>

        Add more tests for SubtleCrypto::importKey and SubtleCrypto::exportKey
        https://bugs.webkit.org/show_bug.cgi?id=164815
        <rdar://problem/29281660>

        Reviewed by Brent Fulgham.

        Tests: crypto/subtle/aes-import-jwk-key-export-jwk-key.html
               crypto/subtle/aes-import-jwk-key-export-raw-key.html
               crypto/subtle/aes-import-raw-key-export-jwk-key.html
               crypto/subtle/aes-import-raw-key-export-raw-key.html
               crypto/subtle/hmac-import-jwk-key-export-jwk-key.html
               crypto/subtle/hmac-import-jwk-key-export-raw-key.html
               crypto/subtle/hmac-import-raw-key-export-jwk-key.html
               crypto/subtle/hmac-import-raw-key-export-raw-key.html
               crypto/subtle/rsa-import-jwk-key-export-jwk-key-private.html
               crypto/subtle/rsa-import-jwk-key-export-jwk-key-public.html

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create):
        Add a comment.

2016-11-16  Antti Koivisto  <antti@apple.com>

        Remove getMutableCachedPseudoStyle
        https://bugs.webkit.org/show_bug.cgi?id=164819

        Reviewed by Zalan Bujtas.

        It is only used by styleForFirstLetter.

        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter):

            Clone the original style before mutations.

        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):

            Since we have a clone already just move it in place.

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

2016-11-16  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableByteStreamController close()
        https://bugs.webkit.org/show_bug.cgi?id=164413

        Reviewed by Darin Adler.

        Implemented close() method of ReadableByteStreamController.

        Updated test expectations for close() tests and added tests
        to ensure errors are thrown in various cases defined by spec.

        * Modules/streams/ReadableByteStreamController.js:
        (close): Added.
        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerClose): Added.
        * bindings/js/WebCoreBuiltinNames.h: Added bytesFilled.

2016-11-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][GL] build broken when using gst-plugins-bad from git
        https://bugs.webkit.org/show_bug.cgi?id=164776

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::requestGLContext): The
        GStreamer GL context GType was renamed, add an ifdef taking this
        into account.

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Integrate ES6 Modules into WebCore
        https://bugs.webkit.org/show_bug.cgi?id=148897

        Reviewed by Ryosuke Niwa.

        This patch introduces ES6 Modules into WebCore. We integrate JSC's JSModuleLoader into WebCore.
        JSC constructs the module loader pipeline by the chains of the promises. To handle this,
        the following components are added.

            1. CachedModuleScript

                CachedModuleScript wraps the promise based JSModuleLoader pipeline and offers
                similar APIs to CachedScript. ScriptElement and PendingScript interact with
                CachedModuleScript when the script tag is the module tag instead of CachedScript.
                ScriptElement and PendingScript will receive the notification from
                CachedModuleScript by implementing CachedModuleScriptClient.

            2. ScriptModuleLoader

                This is the module loader instantiated per document. It manages fetching and
                offers the callbacks for the JSC's JSModuleLoader implementation. ScriptModuleLoader
                will fetch the resource by creating CachedModuleScriptLoader per resource. ScriptModuleLoader
                will receive the notification by implementing CachedModuleScriptLoaderClient. When the
                resource is fetched, the module loader will drive the promise resolve/reject chain.

            3. CachedModuleScriptLoader

                This fetches the resource by using CachedScript. Using CachedScript means that it
                automatically reports the resource to the inspector. CachedModuleScriptLoader notify to
                ScriptModuleLoader when the resource is fetched.

        One tricky point is that the fetch requests issued from one module-graph should share the same
        nonce, crossorigin attributes etc.

            Here, we wrote the module graph like `A -> B (A depends on B)`.

            <script tag> -> A -> B -> C -> D

        When fetching A, B, C, and D modules, we need to set the same nonce, crossorigin etc. configuration
        derived from the original script tag. So per module-graph information should be shared throughout
        the module loader pipeline. To do so, JSC's module loader implementation can take the value called
        `initiator`. Since the loader will propagate & share this `initiator` throughout the pipeline,
        we can transfer and share some metadata. Currently, we pass the JSWrapper of the script tag as the
        initiator. Each fetch request is created by using this initiator script element.

        More integration into the inspector should be done in the subsequent patch.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedModuleScript.cpp: Added.
        CachedModuleScript offers similar interface to CachedScript to make ScriptElement things easier. It encapsulates the
        detail of the JSC JSModuleLoader that this module loader is driven by the chain of the promises. CachedModuleScript's
        callbacks are called from the promise's handlers configured in ScriptController::loadModuleScript.
        (WebCore::CachedModuleScript::create):
        (WebCore::CachedModuleScript::CachedModuleScript):
        (WebCore::CachedModuleScript::load):
        (WebCore::CachedModuleScript::notifyLoadCompleted):
        (WebCore::CachedModuleScript::notifyLoadFailed):
        (WebCore::CachedModuleScript::notifyLoadWasCanceled):
        (WebCore::CachedModuleScript::notifyClientFinished):
        (WebCore::CachedModuleScript::addClient):
        (WebCore::CachedModuleScript::removeClient):
        * bindings/js/CachedModuleScript.h: Added.
        (WebCore::CachedModuleScript::moduleKey):
        (WebCore::CachedModuleScript::error):
        (WebCore::CachedModuleScript::wasCanceled):
        (WebCore::CachedModuleScript::isLoaded):
        (WebCore::CachedModuleScript::nonce):
        (WebCore::CachedModuleScript::crossOriginMode):
        Save nonce and crossorigin attributes when we start ScriptElement::prepareScript.
        * bindings/js/CachedModuleScriptClient.h: Copied from Source/WebCore/dom/LoadableScript.h.
        (WebCore::CachedModuleScriptClient::~CachedModuleScriptClient):
        * bindings/js/CachedModuleScriptLoader.cpp: Added.
        CachedModuleScriptLoader is responsible to fetching the resource for the module script. It uses propagated `initiator`
        to create the request. This initiator is the JS wrapper of the script element issuing this fetching request. The name
        `initiator` is derived from the request.setInitiator(). Once the resource is fetched, the fetcher will notify to the
        client. Currently, ScriptModuleLoader implements this client interface.
        (WebCore::CachedModuleScriptLoader::create):
        (WebCore::CachedModuleScriptLoader::CachedModuleScriptLoader):
        (WebCore::CachedModuleScriptLoader::~CachedModuleScriptLoader):
        (WebCore::CachedModuleScriptLoader::load):
        Create the request. We call ScriptElement::requestCachedScript to initiate a new fetching request. At that time,
        nonce and crossorigin (and charset) attributes of this element are applied to the new request.
        (WebCore::CachedModuleScriptLoader::notifyFinished):
        * bindings/js/CachedModuleScriptLoader.h: Copied from Source/WebCore/bindings/js/ScriptModuleLoader.h.
        * bindings/js/CachedModuleScriptLoaderClient.h: Copied from Source/WebCore/dom/LoadableScript.h.
        (WebCore::CachedModuleScriptLoaderClient::~CachedModuleScriptLoaderClient):
        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::create):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        (WebCore::makeSource):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::retrieveErrorMessage):
        (WebCore::reportException):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::loadModule):
        (WebCore::JSMainThreadExecState::linkAndEvaluateModule):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::loadModuleScript):
        This just performs loading and not executing the module graph. Once the module graph is loaded, it is notified to
        the given CachedModuleScript.
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScript):
        This executes the linking and evaluation of the already instantiated module graph. After loading the module graph,
        we call this function for the module to evaluate it. This is called from ScriptElement::executeModuleScript.
        (WebCore::ScriptController::evaluateModule):
        Every time we evaluate the module, the ScriptModuleLoader::evaluate hook is called. So the loader calls this function
        to actually evaluate the module.
        (WebCore::jsValueToModuleKey):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        The JSC's module loader is driven by the chain of the promise. So here, we convert this to CachedModuleScript /
        CachedModuleScriptClient style and encapsulate the details. This encapsulation makes CachedModuleScript similar
        to CachedScript and it makes things simple in the rest of WebCore. If the propagated error is already reported
        to the inspector, we receive moduleLoaderAlreadyReportedErrorSymbol as the error value. So at that case, we
        don't report it twice. If the rejection is caused due to the canceled fetching, moduleLoaderFetchingIsCanceledSymbol
        appears as the error value. In that case, we will call CachedModuleScript::notifyLoadWasCanceled.
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::moduleLoaderAlreadyReportedErrorSymbol):
        (WebCore::ScriptController::moduleLoaderFetchingIsCanceledSymbol):
        * bindings/js/ScriptModuleLoader.cpp:
        We use DeferredWrapper to resolve promises used for the module pipeline. Thus, once the active DOM objects are
        suspended, the module loader propagation stops.
        (WebCore::ScriptModuleLoader::~ScriptModuleLoader):
        Clear the clients of the fetchers issued from this loader.
        (WebCore::isRootModule):
        (WebCore::ScriptModuleLoader::resolve):
        Resolve the module specifier (that is written in `import from "XXX"`) to the unique module key. We use URL
        string as module key. The edge case is that the module is inlined one. In that case, we don't have any URL
        for that. Instead of URL, we use symbol at that time.
        (WebCore::ScriptModuleLoader::fetch):
        Start fetching for the requested module. It returns the promise that is resolved when the fetching is done.
        The loader creates the fetcher, and the fetcher start loading the resource. Once the fetcher loads the resource,
        it notify to the loader through CachedModuleScriptLoaderClient interface. Since we pass the original script
        element as the `initiator` here, the fetcher can use this initiator to create the request. While the result of
        CachedResource has 3 variations (loaded, canceled, error occurred), Promise only tells us whether it is resolved
        or rejected. When CachedModuleScript gets the result from the promise chain, it needs to know which the result is.
        To transfer the canceled information, we reject the promise with the special symbol `moduleLoaderAlreadyReportedErrorSymbol`.
        This offers the way to distinguish the canceled error from the other errors.
        (WebCore::ScriptModuleLoader::evaluate):
        This is the hook function that is called when JSC's JSModuleLoader attempts to execute each module.
        (WebCore::ScriptModuleLoader::notifyFinished):
        This function is called when the fetcher completes. We will resolve the promise with the result of the fetching.
        The module loader pipeline is constructed as a chain of promises.
        Rejecting a promise when some error occurs is important because the execution flow of
        the promise chain is driven by "rejected" or "fulfilled" events.
        If the promise is not rejected while error occurs, reject handler won't be executed
        and all the subsequent promise chain will wait the result forever.
        As a result, even if the error is already reported to the inspector elsewhere,
        it should be propagated in the pipeline. For example, the error of loading
        CachedResource is already reported to the inspector by the loader. But we still need
        to reject the promise to propagate this error to the script element.
        At that time, we don't want to report the same error twice. When we propagate the error
        that is already reported to the inspector, we throw moduleLoaderAlreadyReportedErrorSymbol
        symbol instead. By comparing the thrown error with this symbol, we can distinguish errors raised
        when checking syntax of a module script from errors reported already.
        In the reject handler of the promise, we only report a error that is not this symbol.
        And mime type checking is done here since the module script always require this check.
        * bindings/js/ScriptModuleLoader.h:
        (WebCore::ScriptModuleLoader::document): Deleted.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::error):
        (WebCore::LoadableClassicScript::execute):
        (WebCore::LoadableClassicScript::wasErrored): Deleted.
        * dom/LoadableClassicScript.h:
        * dom/LoadableModuleScript.cpp: Copied from Source/WebCore/dom/LoadableScript.h.
        This is the derived class from LoadableScript. It is used for the script module graphs.
        (WebCore::LoadableModuleScript::create):
        (WebCore::LoadableModuleScript::LoadableModuleScript):
        (WebCore::LoadableModuleScript::~LoadableModuleScript):
        (WebCore::LoadableModuleScript::isLoaded):
        (WebCore::LoadableModuleScript::error):
        (WebCore::LoadableModuleScript::wasCanceled):
        (WebCore::LoadableModuleScript::notifyFinished):
        (WebCore::LoadableModuleScript::execute):
        * dom/LoadableModuleScript.h: Copied from Source/WebCore/dom/LoadableScript.h.
        (isType):
        * dom/LoadableScript.h:
        (WebCore::LoadableScript::isModuleScript):
        (WebCore::LoadableScript::isModuleGraph): Deleted.
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::error):
        (WebCore::PendingScript::wasErrored): Deleted.
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::determineScriptType):
        (WebCore::ScriptElement::prepareScript):
        prepareScript is aligned to whatwg spec: the last sequence to setup flags has one-on-one correspondence to
        the spec now. And prepareScript recognizes the type="module" case and call the requestModuleScript to setup
        the CachedModuleScript.
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::requestModuleScript):
        We use the nonce and crossorigin attributes at the time of preparing the script tag. To do so, we store the
        above values in CachedModuleScript.
        Since inlined module scripts does not have "src" attribute, it is also affected by Content Security Policy's
        inline script rules.
        (WebCore::ScriptElement::requestScriptWithCacheForModuleScript):
        The module loader will construct the fetching request by calling this function. This should be here since we
        would like to set this Element to the initiator of the request. And nonce and crossorigin attributes of this
        script tag will be used.
        (WebCore::ScriptElement::requestScriptWithCache):
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::executeModuleScript):
        The entry point to execute the module graph. Since the module graph is beyond the multiple CachedScript code,
        we have the different entry point from ScriptElement::executeScript.
        (WebCore::ScriptElement::executeScriptAndDispatchEvent):
        (WebCore::ScriptElement::executeScriptForScriptRunner):
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::scriptType):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        According to the spec, the module tag ignores the "charset" attribute as the same to the worker's
        importScript. But WebKit supports the "charset" for importScript intentionally. So to be consistent,
        even for the module tags, we handle the "charset" attribute. We explicitly note about it in the preloader.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * html/parser/HTMLScriptRunner.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):

2016-11-15  Alejandro G. Castro  <alex@igalia.com>

        Warning added in r208542
        https://bugs.webkit.org/show_bug.cgi?id=164636

        Reviewed by Eric Carlson.

        Deleted the copy constructor, we now explicitly copy the object in
        the clone method.

        * platform/mediastream/MediaStreamTrackPrivate.cpp: Delete the
        copy constructor.
        (WebCore::MediaStreamTrackPrivate::clone): Copy the relevant
        information for the clone operation in the API.
        * platform/mediastream/MediaStreamTrackPrivate.h: Delete the copy
        constructor.

2016-11-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add more assertions to ElementQueue diagnose a bug
        https://bugs.webkit.org/show_bug.cgi?id=164814

        Reviewed by Yusuke Suzuki.

        Add more assertions to check the sanity of the element queue.
        Also made them all release assertions so that we can catch them better.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionStack::ElementQueue::add):
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll):

2016-11-15  Chris Dumez  <cdumez@apple.com>

        Simplify Element::stripScriptingAttributes()
        https://bugs.webkit.org/show_bug.cgi?id=164785

        Reviewed by Ryosuke Niwa.

        Simplify Element::stripScriptingAttributes() by leveraging
        Vector::removeAllMatching().

        No new tests, no Web-exposed behavior change.

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

2016-11-15  Jon Lee  <jonlee@apple.com>

        Report active video and audio capture devices separately
        https://bugs.webkit.org/show_bug.cgi?id=164769

        Reviewed by Eric Carlson.

        For UI purposes, separate the notion of any active capture device to
        an active audio and video capture device.

        * page/MediaProducer.h: Replace HasActiveMediaCaptureDevice with
        HasActiveAudioCaptureDevice and HasActiveVideoCaptureDevice.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Update the logic for mediaState().
        Since it is possible to arbitrarily add tracks from various sources,
        check specifically for a local AV source (meaning a capture device) that
        is producing data.
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::hasLocalVideoSource): Iterate over the tracks
        and look for video sources that are not remote.
        (WebCore::MediaStreamPrivate::hasLocalAudioSource): Ditto for audio.
        * platform/mediastream/MediaStreamPrivate.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Update internals reporting.

2016-11-15  Chris Dumez  <cdumez@apple.com>

        Avoid copying vector of attributes as much as possible in the HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=164778

        Reviewed by Ryosuke Niwa.

        Avoid copying vector of attributes as much as possible in the HTML parser by moving
        AtomicHTMLToken around and making it obvious it is safe to move its attributes
        vector as well.

        No new tests, no Web-exposed behavior change.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::findAttribute):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertFormattingElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        (WebCore::HTMLConstructionSite::createElementFromSavedToken):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::HTMLStackItem):
        (WebCore::HTMLStackItem::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::CustomElementConstructionData::CustomElementConstructionData):
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::processFakeEndTag):
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::insertGenericHTMLElement):
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
        (WebCore::hasAttribute):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        (WebCore::HTMLTreeBuilder::parseError):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):

2016-11-15  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API test assertion after r208534
        https://bugs.webkit.org/show_bug.cgi?id=164751

        Reviewed by Geoffrey Garen.

        This removes a firing assertion in the WebKit1.AudioSessionCategoryIOS API test on the iOS simulator.

        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setLowMemoryHandler):
        This assertion is no longer valid because we are using m_installed to determine if m_lowMemoryHandler xor m_releaseMemoryBlock is set,
        and we should be setting both right now on iOS and they are both useful in freeing memory. These should be united.

2016-11-15  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Key collation during SQLite lookups is insanely slow.
        https://bugs.webkit.org/show_bug.cgi?id=164754

        Reviewed by Alex Christensen.

        No new tests (Covered by *all* existing tests, and unskips a previously-too-slow test)

        The new serialization format is straight forward enough to get back with minimal documentation
        in a comment with the code itself being the rest of the documentation.
        
        It handles all current IDB key types and leaves room for future key types.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::setBinaryValue):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::binary):
        
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializedTypeForKeyType):
        (WebCore::writeLittleEndian):
        (WebCore::readLittleEndian):
        (WebCore::writeDouble):
        (WebCore::readDouble):
        (WebCore::encodeKey):
        (WebCore::serializeIDBKeyData):
        (WebCore::decodeKey):
        (WebCore::deserializeIDBKeyData):
        * Modules/indexeddb/server/IDBSerialization.h:
        
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexKey): Verify that Type == Invalid 
          keys don't get into the database. This was happening before and the previous serialization
          supported it, but there's clearly no point in supporting it with the new serialization.

2016-11-15  Brent Fulgham  <bfulgham@apple.com>

        Ensure sufficient buffer for worst-case URL encoding
        https://bugs.webkit.org/show_bug.cgi?id=164794
        <rdar://problem/5905510>

        Reviewed by David Kilzer.

        Slightly increase the default allocation size for URL parsing to account for
        the worst-case parsing case. Under these assumptions, we might need three times
        the byte length of the URL, plus nine bytes for fix-up characters.

        In short, increase the default buffer size by 9 bytes.

        No new tests. No change in behavior.

        * platform/URL.cpp:
        (WebCore::URL::parse): Slightly increase the default buffer size.

2016-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused and untested Page.setTouchEmulationEnabled command
        https://bugs.webkit.org/show_bug.cgi?id=164793

        Reviewed by Matt Baker.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::updateTouchEventEmulationInPage): Deleted.
        (WebCore::InspectorPageAgent::setTouchEmulationEnabled): Deleted.
        * inspector/InspectorPageAgent.h:

2016-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, quick fix for r208751

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):

2016-11-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix build after r208710.

        Inline functions should not be marked as WEBCORE_EXPORT.

        * dom/QualifiedName.h:

2016-11-15  Brent Fulgham  <bfulgham@apple.com>

        strncpy may leave unterminated string in WebCore::URL::init
        https://bugs.webkit.org/show_bug.cgi?id=74473
        <rdar://problem/10576626>

        Reviewed by David Kilzer.

        Reviving an old patch by David Kilzer! This should have been integrated years ago.

        No new tests. No change in behavior.

        * platform/URL.cpp:
        (WebCore::URL::init): Make sure we always enter 'parse' with a
        null-terminated string.

2016-11-15  Jiewen Tan  <jiewen_tan@apple.com>

        Followup patch for r208737

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):

2016-11-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Implement support for visual viewports
        https://bugs.webkit.org/show_bug.cgi?id=164765

        Reviewed by Tim Horton.

        Adopt the visual viewport scrolling model in iOS WK2.

        This is more complex than the Mac implementation for two primary reasons. First,
        WKWebView needs to to able to control the rectangle used for fixed position layout
        to get the correct behavior when zooming all the way out, and because iOS displays
        pages scaled down, exposing document overflow such that the layout viewport rectangle
        has to get larger than the initial containing block size (which does not happen on Mac).

        This is achieved by pushing a "layoutViewportOverrideRect" down onto FrameView, in
        a similar way to the customFixedPositionRect that's used now. We share that name
        for now in code that is agnostic to its use (e.g. VisibleContentRectUpdateInfo).

        I tried so hard to write tests, but ran into various problems (webkit.org/b/164762,
        webkit.org/b/164764). Will add tests via webkit.org/b/164764.

        * page/FrameView.cpp:
        (WebCore::FrameView::fixedScrollableAreaBoundsInflatedForScrolling): layoutViewportOrigin()
        was removed.
        (WebCore::FrameView::setBaseLayoutViewportOrigin): Rename with "base" to make it clearer that
        it can be overridden.
        (WebCore::FrameView::setLayoutViewportOverrideRect):
        (WebCore::FrameView::baseLayoutViewportSize): Renamed.
        (WebCore::FrameView::updateLayoutViewport): Logging.
        (WebCore::FrameView::layoutViewportRect):
        (WebCore::FrameView::scrollPositionForFixedPosition):
        (WebCore::FrameView::unscaledMaximumScrollPosition): During page transitions on iOS, it
        was possible for unscaledDocumentRect to be empty, but visibleSize() to be non-empty, leading
        to odd negative max scroll offsets, so clamp to 0,0.
        (WebCore::FrameView::setLayoutViewportOrigin): Deleted.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState): scrollPositionForFixedPosition() already does the
        visualViewportEnabled() check.
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::constrainedBetween): Added for consistency with the other geometry types.
        * platform/graphics/FloatSize.h:
        * platform/graphics/LayoutSize.cpp:
        (WebCore::LayoutSize::constrainedBetween): Ditto.
        * platform/graphics/LayoutSize.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clientLogicalWidthForFixedPosition): If we have an override layout viewport, its size might be different
        from the RenderView's size (the initial containing block), so we need to use the layoutViewportRect here.
        (WebCore::RenderView::clientLogicalHeightForFixedPosition):

2016-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGL] Remove unused Chromium-specific OpenGL extensions
        https://bugs.webkit.org/show_bug.cgi?id=164782

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        (WebCore::WebGL2RenderingContext::clear):
        (WebCore::WebGL2RenderingContext::getExtension):
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::supported):
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::onAccess):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::clear):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::setupFlags):
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateDrawArrays):
        (WebCore::WebGLRenderingContextBase::validateDrawElements):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::isGLES2NPOTStrict):
        (WebCore::WebGLRenderingContextBase::isErrorGeneratedOnOutOfBoundsAccesses): Deleted.
        (WebCore::WebGLRenderingContextBase::isResourceSafe): Deleted.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::isResourceSafe): Deleted.

2016-11-14  Brent Fulgham  <bfulgham@apple.com>

        Correct handling of changing input type
        https://bugs.webkit.org/show_bug.cgi?id=164759
        <rdar://problem/29211174>

        Reviewed by Darin Adler.

        Test: fast/forms/search-cancel-button-change-input.html

        It is possible for JavaScript to change the type property of an input field. WebKit
        needs to gracefully handle this case.

        Add a type traits specialization so we can properly downcast InputType elements.
        Use this to only call search functions on actual search input types.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::onSearch): Only perform search functions if the
        input type is actually a search field.
        * html/InputType.h: Add type traits specialization for 'downcast' template.
        * html/SearchInputType.h: Ditto.

2016-11-15  Zalan Bujtas  <zalan@apple.com>

        CounterNode::insertAfter and ::removeChild should take references.
        https://bugs.webkit.org/show_bug.cgi?id=164780

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::updateCounters):

2016-11-15  Antti Koivisto  <antti@apple.com>

        slot doesn't work as a flex container
        https://bugs.webkit.org/show_bug.cgi?id=160740
        <rdar://problem/28605080>

        Reviewed by Ryosuke Niwa.

        Test: fast/shadow-dom/css-scoping-slot-flex.html

        The style adjustment for flex children needs to be based on their parent box style rather
        than the composed tree parent. This can be different when display:contents is involved.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentElementUserAgentStyle):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::styleForElement):

            Optionally provide parent box style so we can do adjustments based on it when computing style for rendering.

        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::equivalentBlockDisplay):

            Avoid boolean parameters.

        (WebCore::StyleResolver::adjustRenderStyle):

            Do the display:contents adjustment first and treat 'content' like 'none' later'. We never want to override
            'contents' with adjustments.
            Use parent box style for flex/grid adjustments instead of the DOM parent style.

        * css/StyleResolver.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::styleForElement):

            Call with parent box style.

        (WebCore::Style::TreeResolver::parentBoxStyle):

            Find the parent box style if any.

        * style/StyleTreeResolver.h:
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::overrideComputedStyle):

2016-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Misc Inspector backend cleanup
        https://bugs.webkit.org/show_bug.cgi?id=164768

        Reviewed by Brian Burg.

        * inspector/DOMPatchSupport.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::ClearObjectStoreListener::create): Deleted.
        (WebCore::ClearObjectStoreListener::~ClearObjectStoreListener): Deleted.
        (WebCore::ClearObjectStoreListener::ClearObjectStoreListener): Deleted.
        (WebCore::ClearObjectStore::create): Deleted.
        (WebCore::ClearObjectStore::ClearObjectStore): Deleted.
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorNetworkAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        * inspector/InspectorTimelineAgent.h:
        * inspector/PageRuntimeAgent.h:

2016-11-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGL] Migrate construction functions from pointers to references
        https://bugs.webkit.org/show_bug.cgi?id=164749

        Reviewed by Zalan Bujtas.

        Mechanical find/replace.

        No new tests because there is no behavior change.

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        (WebCore::ANGLEInstancedArrays::supported):
        (WebCore::ANGLEInstancedArrays::drawArraysInstancedANGLE):
        (WebCore::ANGLEInstancedArrays::drawElementsInstancedANGLE):
        (WebCore::ANGLEInstancedArrays::vertexAttribDivisorANGLE):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/EXTBlendMinMax.cpp:
        (WebCore::EXTBlendMinMax::EXTBlendMinMax):
        * html/canvas/EXTBlendMinMax.h:
        * html/canvas/EXTFragDepth.cpp:
        (WebCore::EXTFragDepth::EXTFragDepth):
        * html/canvas/EXTFragDepth.h:
        * html/canvas/EXTShaderTextureLOD.cpp:
        (WebCore::EXTShaderTextureLOD::EXTShaderTextureLOD):
        * html/canvas/EXTShaderTextureLOD.h:
        * html/canvas/EXTTextureFilterAnisotropic.cpp:
        (WebCore::EXTTextureFilterAnisotropic::EXTTextureFilterAnisotropic):
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/EXTsRGB.cpp:
        (WebCore::EXTsRGB::EXTsRGB):
        * html/canvas/EXTsRGB.h:
        * html/canvas/OESElementIndexUint.cpp:
        (WebCore::OESElementIndexUint::OESElementIndexUint):
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.cpp:
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.cpp:
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.cpp:
        (WebCore::OESTextureHalfFloat::OESTextureHalfFloat):
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.cpp:
        (WebCore::OESTextureHalfFloatLinear::OESTextureHalfFloatLinear):
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::createVertexArrayOES):
        (WebCore::OESVertexArrayObject::deleteVertexArrayOES):
        (WebCore::OESVertexArrayObject::isVertexArrayOES):
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGL2RenderingContext::initializeShaderExtensions):
        (WebCore::WebGL2RenderingContext::drawBuffers):
        (WebCore::WebGL2RenderingContext::createVertexArray):
        (WebCore::WebGL2RenderingContext::isVertexArray):
        (WebCore::WebGL2RenderingContext::bindVertexArray):
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::create):
        (WebCore::WebGLBuffer::WebGLBuffer):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.cpp:
        (WebCore::WebGLCompressedTextureATC::WebGLCompressedTextureATC):
        (WebCore::WebGLCompressedTextureATC::supported):
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.cpp:
        (WebCore::WebGLCompressedTexturePVRTC::WebGLCompressedTexturePVRTC):
        (WebCore::WebGLCompressedTexturePVRTC::supported):
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::WebGLContextObject):
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLDebugRendererInfo.cpp:
        (WebCore::WebGLDebugRendererInfo::WebGLDebugRendererInfo):
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::WebGLDebugShaders):
        (WebCore::WebGLDebugShaders::getTranslatedShaderSource):
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::WebGLDepthTexture):
        (WebCore::WebGLDepthTexture::supported):
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::supported):
        (WebCore::WebGLDrawBuffers::drawBuffersWEBGL):
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLDrawBuffers.h:
        * html/canvas/WebGLExtension.cpp:
        (WebCore::WebGLExtension::WebGLExtension):
        * html/canvas/WebGLExtension.h:
        (WebCore::WebGLExtension::ref):
        (WebCore::WebGLExtension::deref):
        (WebCore::WebGLExtension::context):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::create):
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.cpp:
        (WebCore::WebGLLoseContext::WebGLLoseContext):
        (WebCore::WebGLLoseContext::loseContext):
        (WebCore::WebGLLoseContext::restoreContext):
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::WebGLObject):
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::create):
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLQuery.cpp:
        (WebCore::WebGLQuery::create):
        (WebCore::WebGLQuery::WebGLQuery):
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::create):
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::setupFlags):
        (WebCore::WebGLRenderingContextBase::checkObjectToBeBound):
        (WebCore::WebGLRenderingContextBase::createBuffer):
        (WebCore::WebGLRenderingContextBase::createFramebuffer):
        (WebCore::WebGLRenderingContextBase::createTexture):
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::createRenderbuffer):
        (WebCore::WebGLRenderingContextBase::createShader):
        (WebCore::WebGLRenderingContextBase::deleteObject):
        (WebCore::WebGLRenderingContextBase::validateWebGLObject):
        (WebCore::WebGLRenderingContextBase::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContextBase::framebufferTexture2D):
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::supportsDrawBuffers):
        * html/canvas/WebGLSampler.cpp:
        (WebCore::WebGLSampler::create):
        (WebCore::WebGLSampler::WebGLSampler):
        * html/canvas/WebGLSampler.h:
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::WebGLSharedObject):
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLSync.cpp:
        (WebCore::WebGLSync::create):
        (WebCore::WebGLSync::WebGLSync):
        * html/canvas/WebGLSync.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::create):
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLTransformFeedback.cpp:
        (WebCore::WebGLTransformFeedback::create):
        (WebCore::WebGLTransformFeedback::WebGLTransformFeedback):
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::create):
        (WebCore::WebGLVertexArrayObject::WebGLVertexArrayObject):
        * html/canvas/WebGLVertexArrayObject.h:
        * html/canvas/WebGLVertexArrayObjectBase.cpp:
        (WebCore::WebGLVertexArrayObjectBase::WebGLVertexArrayObjectBase):
        * html/canvas/WebGLVertexArrayObjectBase.h:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::create):
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::convertFormat):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::validateDepthStencil):
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):

2016-11-15  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Need to update implicit/default values for aria-valuemin, aria-valuenow, and aria-valuemax
        https://bugs.webkit.org/show_bug.cgi?id=164773

        Reviewed by Chris Fleizach.

        Return the values stated in the ARIA 1.1 spec, namely:
        - aria-valuemin is 0 for roles other than spinbutton
        - aria-valuemax is 100 for roles other than spinbutton
        - aria-valuenow is half way between aria-valuemax and aria-valuemin
          for roles other than spinbutton, and 0 for spinbutton

        For spinbutton, the spec states that "there is no minimum/maximum value."
        But at least in the case of ATK/AT-SPI2, the accessible value interface
        is expected to provide a number. Therefore, expose the values we use to
        constrain input type="number": -std::numeric_limits<float>::max() and
        std::numeric_limits<float>::max().

        Test: accessibility/spinbutton-implicit-values.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::valueForRange):
        (WebCore::AccessibilityNodeObject::maxValueForRange):
        (WebCore::AccessibilityNodeObject::minValueForRange):

2016-11-14  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::exportKey to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164722
        <rdar://problem/29251740>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::exportKey method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-exportKey.
           It also refers to the latest Editor's Draft to a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-exportKey.
        2. It implements exportKey operations of the following algorithms: AES-CBC, AES-KW,
           HMAC, RSAES-PKCS1-V1_5, RSASSA-PKCS1-V1_5, and RSA-OAEP.
        3. It also fixes the following bugs:
           https://bugs.webkit.org/show_bug.cgi?id=156114,
           <rdar://problem/21773066>.
        Note: We currently only support Raw and Jwk key format.

        Tests: crypto/subtle/aes-cbc-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-cbc-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-cbc-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-cbc-generate-export-key-raw.html
               crypto/subtle/aes-export-key-malformed-parameters.html
               crypto/subtle/aes-kw-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-kw-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-kw-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-kw-generate-export-raw-key.html
               crypto/subtle/export-key-malformed-parameters.html
               crypto/subtle/hmac-export-key-malformed-parameters.html
               crypto/subtle/hmac-generate-export-key-jwk-sha1.html
               crypto/subtle/hmac-generate-export-key-jwk-sha224.html
               crypto/subtle/hmac-generate-export-key-jwk-sha256.html
               crypto/subtle/hmac-generate-export-key-jwk-sha384.html
               crypto/subtle/hmac-generate-export-key-jwk-sha512.html
               crypto/subtle/hmac-generate-export-raw-key.html
               crypto/subtle/hmac-import-key-malformed-parameters.html
               crypto/subtle/rsa-export-key-malformed-parameters.html
               crypto/subtle/rsa-oaep-generate-export-key-jwk-sha1.html
               crypto/subtle/rsa-oaep-generate-export-key-jwk-sha224.html
               crypto/subtle/rsa-oaep-generate-export-key-jwk-sha256.html
               crypto/subtle/rsa-oaep-generate-export-key-jwk-sha384.html
               crypto/subtle/rsa-oaep-generate-export-key-jwk-sha512.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-export-key-jwk.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-jwk-sha1.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-jwk-sha224.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-jwk-sha256.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-jwk-sha384.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-export-key-jwk-sha512.html
               crypto/workers/subtle/aes-generate-export-key-jwk.html
               crypto/workers/subtle/aes-generate-export-key-raw.html
               crypto/workers/subtle/hmac-generate-export-key-jwk.html
               crypto/workers/subtle/hmac-generate-export-key-raw.html
               crypto/workers/subtle/rsa-generate-export-key-jwk.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::toJSValueFromJsonWebKey):
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::exportKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        (WebCore::CryptoAlgorithmAES_KW::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportJwk):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportJwk):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::exportJwk):
        * crypto/keys/CryptoKeyRSA.h:

2016-11-15  Jon Lee  <jonlee@apple.com>

        Remove HasMediaCaptureDevice
        https://bugs.webkit.org/show_bug.cgi?id=164767
        <rdar://problem/29263696>

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Remove HasMediaCaptureDevice in state.
        * page/MediaProducer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Remove it in the media string.

2016-11-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix font-synthesis and text-decoration-skip parsing
        https://bugs.webkit.org/show_bug.cgi?id=164736

        Reviewed by Dean Jackson.

        Fix the properties to not allow duplicate values, to reject when
        garbage values are included, to require that none be a singleton,
        and to preserve the declaration order of the properties.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextDecorationSkip):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontSynthesis):
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontSynthesis):
        (WebCore::consumeTextDecorationSkip):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-15  Daniel Bates  <dabates@apple.com>

        Disallow loads using HTTP 0.9 at the ResourceHandle/NetworkDataTask level
        https://bugs.webkit.org/show_bug.cgi?id=164662
        <rdar://problem/29268514>

        Reviewed by Reviewed by Alex Christensen and Brady Eidson.

        Currently we disallow non-default HTTP 0.9 loads at the ResourceLoader level and disallow
        subresource loads using HTTP 0.9 on a default port when the embedding page loads using a
        different HTTP version. However loads can still be initiated from other loaders (e.g. FrameLoader)
        with regards to the first issue. The latter issue does not afford much protection and
        increases code complexity. Instead we should simplify our policy and move our code to the
        lowest networking abstraction level, ResourceHandle/NetworkDataTask, so that we disallow
        all non-default port loads using HTTP 0.9 regardless of the loader used.

        Tests: http/tests/security/http-0.9/image-default-port-allowed.html
               http/tests/security/http-0.9/xhr-blocked.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Remove logic to cancel an HTTP 0.9 load from here.
        We will cancel the HTTP 0.9 load at the ResourceHandle/NetworkDataTask level.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse): Ditto.
        * platform/URL.h: Export stringCenterEllipsizedToLength() so that we can use it in WebKit2.
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess): Modified to call ResourceHandle::didReceiveResponse().
        (WebCore::BlobResourceHandle::notifyResponseOnError): Ditto.
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse): Added. Fail the load if it is using HTTP 0.9.
        Otherwise notify the client that we received a response.
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse): Added. Perform any
        additional platform-specific logic after notifying the resource handle client of the received
        response. Only the libsoup backend overwrites this member function to do something meaningful.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse): Modified to
        call ResourceHandle::didReceiveResponse().
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Ditto.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]): Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::nextMultipartResponsePartCallback): Ditto.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse): Added. Turns around and
        calls continueAfterDidReceiveResponse().

2016-11-15  Zalan Bujtas  <zalan@apple.com>

        [MultiCol] Render tree should be all clean by the end of FrameView::layout().
        https://bugs.webkit.org/show_bug.cgi?id=162833

        Reviewed by Simon Fraser.

        This is a temporary workaround until after we addressed render tree mutation during layout (webkit.org/b/163849).

        Test: fast/inline/out-of-flow-quotation-text-with-multicolumn.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::populate):
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::attachQuote): Populating/evacuating the flow should not trigger quotation text changes.
        (WebCore::RenderQuote::detachQuote):
        * rendering/RenderView.h:
        (WebCore::RenderTreeInternalMutationScope::RenderTreeInternalMutationScope):
        (WebCore::RenderTreeInternalMutationScope::~RenderTreeInternalMutationScope):

2016-11-15  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r208606?): LayoutTest fast/mediastream/enumerating-crash.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=164715

        Reviewed by Jon Lee.

        No new tests, fixes a crash in an existing test.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::document): Return nullptr when the script execution context has
          been cleared.
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::document): Deleted.

2016-11-15  Alejandro G. Castro  <alex@igalia.com>

        WebRTC: update MediaStream-MediaElement-srcObject.html test and unskip it
        https://bugs.webkit.org/show_bug.cgi?id=159343

        Reviewed by Philippe Normand.

        Test updated.

        We can not initialize the srcObject attribute when creating the mediaplayer
        or we would be removing the srcObject we are going to use.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer):

2016-11-14  Alex Christensen  <achristensen@webkit.org>

        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
        https://bugs.webkit.org/show_bug.cgi?id=164720

        Reviewed by Brady Eidson.

        This is adding to r208558 where we moved databaseIdentifier to SecurityOriginData so we
        don't have to use SecurityOrigin in the DatabaseProcess.  This is a step towards only using 
        SecurityOrigin (and the SchemeRegistry) in the WebProcess. SecurityOriginData is for other 
        processes and IPC. There should be no change in behaviour.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::securityOrigin):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::securityOrigin):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::tryToOpenDatabaseBackend):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        (WebCore::DatabaseManagerClient::dispatchDidAddNewOrigin):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::maximumSize):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesNoLock):
        (WebCore::DatabaseTracker::databaseNames):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::deleteOriginLockFor):
        (WebCore::DatabaseTracker::usage):
        (WebCore::DatabaseTracker::quotaNoLock):
        (WebCore::DatabaseTracker::quota):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::isDeletingDatabaseOrOriginFor):
        (WebCore::DatabaseTracker::recordCreatingDatabase):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::creatingDatabase):
        (WebCore::DatabaseTracker::canDeleteDatabase):
        (WebCore::DatabaseTracker::recordDeletingDatabase):
        (WebCore::DatabaseTracker::doneDeletingDatabase):
        (WebCore::DatabaseTracker::isDeletingDatabase):
        (WebCore::DatabaseTracker::canDeleteOrigin):
        (WebCore::DatabaseTracker::isDeletingOrigin):
        (WebCore::DatabaseTracker::recordDeletingOrigin):
        (WebCore::DatabaseTracker::doneDeletingOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * loader/EmptyClients.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier): Deleted.
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier): Deleted.
        * page/SecurityOrigin.h:
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::fromDatabaseIdentifier):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::SecurityOriginData):
        * storage/StorageArea.h:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageEventDispatcher.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):

2016-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Worker debugging should pause all targets and view call frames in all targets
        https://bugs.webkit.org/show_bug.cgi?id=164305
        <rdar://problem/29056192>

        Reviewed by Timothy Hatcher.

        Tests: inspector/debugger/continueUntilNextRunLoop
               inspector/worker/debugger-multiple-targets-pause

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        Switch from postTask (callOnMainThread) to RunLoop::main().dispatch so
        that a paused Worker can send Inspector protocol messages responses
        back through the Main Page's InspectorWorkerAgent even if the Page
        itself is paused and MainThread callbacks are paused.

        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::isNested):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        When running a nested WorkerRunLoop, running inspector debugger
        commands, we should not fire timers on the Worker. Timers would
        then be happening out of order and would not be debuggable.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::clear):
        (WebCore::InspectorDOMDebuggerAgent::didPause): Deleted.
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        (WebCore::InspectorInstrumentation::didHandleEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willHandleEvent):
        (WebCore::InspectorInstrumentation::didHandleEvent): Deleted.
        Remove unnecessary code where WebCore is trying to keep track
        of pause on next statement but that state is already more
        accurately provided by InspectorDebuggerAgent.

2016-11-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGL2] Teach WebGLRenderingContextBase about new texture internal formats
        https://bugs.webkit.org/show_bug.cgi?id=164525

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/webgl2-texture-upload-enums.html

        This patch migrates the existing WebGL calls texImage2D(), texSubImage2D(),
        and readPixels() to understand the new WebGL 2 texture types. In WebGL1, the
        format and the internalFormat were required to be the same, and we had this
        assumption baked into many places in these functions. In WebGL 2, those two
        values are often different, which means I had to fix all of these assumptions
        in our code. Also, rather than have two completely separate parallel
        implementations of these functions, a more forward-looking approach is to
        have one implementation which has a few checks to isWebGL1() in strategic
        places. (This way, bugs only have to be fixed in a single place). Therefore,
        this patch deletes the WebGL 2 versions of these functions.

        * html/canvas/WebGL2RenderingContext.cpp: These functions are moved to
        WebGLRenderingContextBase.
        (WebCore::WebGL2RenderingContext::isIntegerFormat):
        (WebCore::WebGL2RenderingContext::copyTexImage2D): Deleted.
        (WebCore::WebGL2RenderingContext::texSubImage2DBase): Deleted.
        (WebCore::WebGL2RenderingContext::texSubImage2DImpl): Deleted.
        (WebCore::WebGL2RenderingContext::texSubImage2D): Deleted.
        (WebCore::WebGL2RenderingContext::validateTexFuncParameters): Deleted.
        (WebCore::WebGL2RenderingContext::validateTexFuncFormatAndType): Deleted.
        (WebCore::WebGL2RenderingContext::validateTexFuncData): Deleted.
        * html/canvas/WebGL2RenderingContext.h: Moved function implementations to
        WebGLRenderingContextBase.
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Deleted.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Deleted.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl): Deleted.
        (WebCore::WebGLRenderingContext::texSubImage2D): Deleted.
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Deleted.
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType): Deleted.
        (WebCore::WebGLRenderingContext::validateTexFuncData): Deleted.
        * html/canvas/WebGLRenderingContext.h: Moved function implementations to
        WebGLRenderingContextBase.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateSettableTexInternalFormat):
        Teach about new depth texture formats.
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D): Rename
        "internalformat" to "internalFormat". Teach about the distinction between
        format and internalFormat. When pre-filling textures with 0s to work around
        buggy drivers, we need a new way of knowing which format/type arguments to
        pass to texSubImage2D() which are compatible with the texture's internal
        format. The implementation of this function was added to GraphicsContext3D
        and is called here.
        (WebCore::WebGLRenderingContextBase::generateMipmap): Teach about the
        distinction between format and internalFormat.
        (WebCore::internalFormatTheme): This is used so readPixels() knows what
        kind of format/type arguments are compatible with the texture's internal
        format.
        (WebCore::numberOfComponentsForFormat): Ditto.
        (WebCore::numberOfComponentsForInternalFormat): Ditto.
        (WebCore::WebGLRenderingContextBase::readPixels): Many more format/type
        combinations are required in order to test the various new kinds of
        textures.
        (WebCore::WebGLRenderingContextBase::texImage2DBase): Rename internalformat
        to internalFormat, and teach about the distinction between format and
        internalFormat.
        (WebCore::WebGLRenderingContextBase::validateTexFunc): Ditto.
        (WebCore::WebGLRenderingContextBase::texImage2D): Ditto.
        (WebCore::WebGLRenderingContextBase::texSubImage2DImpl): Moved from
        WebGLRenderingContext.
        (WebCore::WebGLRenderingContextBase::texSubImage2D): Ditto.
        (WebCore::WebGLRenderingContextBase::validateArrayBufferType): Ditto.
        (WebCore::WebGLRenderingContextBase::validateTexFuncData): Ditto.
        (WebCore::WebGLRenderingContextBase::validateTexFuncParameters): Ditto.
        (WebCore::WebGLRenderingContextBase::validateTexFuncFormatAndType): Ditto.
        This is the main function where the new internalFormats are dealt with.
        The OpenGL ES spec lists a table of all the internalFormats and all their
        compatible format/type values. This table is entered into this function to
        check that the combinations are correct.
        (WebCore::WebGLRenderingContextBase::texSubImage2DBase): Moved from
        WebGLRenderingContext.
        (WebCore::WebGLRenderingContextBase::copyTexImage2D): Ditto.
        (WebCore::WebGLRenderingContextBase::validateSettableTexFormat): Deleted.
        * html/canvas/WebGLRenderingContextBase.h: No longer overrides virtual
        functions.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters): Because
        this is inside GraphicsContext3D, it doesn't need any isWebGL1() checks.
        Teach about new enums.
        (WebCore::GraphicsContext3D::possibleFormatAndTypeForInternalFormat):
        Ditto.
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::packPixels): It is possible to try to
        copy data from a video into one of these new formats. Currently, we
        implement this by swizzling on the CPU. Rather than implementing all the
        swizzling functions in this patch (which would make this patch much
        larger), simply bail in this case. We will implement this later.
        (WebCore::GraphicsContext3D::getClearBitsByFormat): Update.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::hasAlpha): Ditto.
        (WebCore::GraphicsContext3D::hasColor): Ditto.

2016-11-14  Simon Fraser  <simon.fraser@apple.com>

        Scrolling when zoomed doesn't always use the correct layout viewport
        https://bugs.webkit.org/show_bug.cgi?id=164756

        Reviewed by Dean Jackson.

        The scrolling thread was always using the layout viewport rect pushed onto it and
        never computing a new one, so when scrolling around after zooming position:fixed
        elements would not get the expected visual viewport behavior.

        Fix by having ScrollingTreeFrameScrollingNode updating its notion of the layout viewport
        on scrolls.

        Not testable because we can't dump the scrolling tree on Mac (yet).

        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::setLayoutViewport):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):

2016-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        document.createElementNS doesn't construct a custom element
        https://bugs.webkit.org/show_bug.cgi?id=164700

        Reviewed by Darin Adler.

        Fixed the bug that document.createElementNS doesn't create a custom element or enqueue it to upgrade.

        Also made constructCustomElementSynchronously not call the custom element constructors with the element's
        local name as the first argument, which was a non-standard behavior added during prototyping.

        Test: fast/custom-elements/DOMImplementation-createDocument.html
              fast/custom-elements/document-createElementNS.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback): Added a variant that takes QualifiedName
        instead of AtomicString.
        (WebCore::constructCustomElementSynchronously): Don't add the local name as an argument.
        * bindings/js/JSCustomElementInterface.h:

        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::findInterface): Just find the interface based on the local name after
        checking the namespace URI to be that of the XHTML. We need to ignore the prefix for the purpose of looking
        up the custom element definition as specified in the latest HTML specification:
        https://html.spec.whatwg.org/multipage/scripting.html#look-up-a-custom-element-definition

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Added an assertion to make sure we don't invoke scripts while
        constructing the document element.

        * dom/Document.cpp:
        (WebCore::createUpgradeCandidateElement): Made this function create a HTMLUnknownElement instead of returning
        nullptr to share more code. Also added a variant which takes QualifiedName.
        (WebCore::isValidHTMLElementName): Added; helpers for createHTMLElementWithNameValidation to call isValidName
        on Document with the right argument.
        (WebCore::createHTMLElementWithNameValidation): Templatized the function to be called with either AtomicString
        or QualifiedName for the name.
        (WebCore::createFallbackHTMLElement):
        (WebCore::Document::createElementNS): Call createHTMLElementWithNameValidation to create a custom element if
        possible. This function ends up re-validating the element name before creating a HTMLUnknownElement but that
        shouldn't be a common scenario to matter. In fact, createElementNS is a rarely used API.

2016-11-14  Chris Dumez  <cdumez@apple.com>

        Avoid copying attributes vector when constructing a CustomElement in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=164734

        Reviewed by Ryosuke Niwa.

        Avoid copying attributes vector when constructing a CustomElement in HTMLTreeBuilder.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertCustomElement):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::HTMLStackItem):
        (WebCore::HTMLStackItem::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::didCreateCustomOrCallbackElement):

2016-11-14  Chris Dumez  <cdumez@apple.com>

        Inline QualifiedName::toString() method
        https://bugs.webkit.org/show_bug.cgi?id=164726

        Reviewed by Ryosuke Niwa.

        Inline QualifiedName::toString() method to limit performance impact of r208674.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString): Deleted.
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::toString):

2016-11-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the font-synthesis property
        https://bugs.webkit.org/show_bug.cgi?id=164728

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontSynthesis):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-12  Sam Weinig  <sam@webkit.org>

        [SVG] Moving more special casing of SVG out of the bindings - SVGNumber/SVGPoint/SVGRect/SVGLength/SVGTransform/SVGMatrix
        https://bugs.webkit.org/show_bug.cgi?id=164696

        Reviewed by Darin Adler.

        - Make SVGNumber, SVGPoint, SVGRect, SVGLength, SVGTransform and SVGMatrix
          real classes and stop special casing them in the bindings generator. This 
          removes the remaining non-list SVG specializations from the bindings generator.
        - Renamed existing SVGLength, SVGTransform and SVGMatrix to SVGLengthValue, 
          SVGTransformValue and SVGMatrixValue. There are no SVNumberValue, SVGPointValue 
          and SVGRectValue classes, as float, FloatPoint and FloatRect can be used 
          directly. Going forward, we can get rid of SVGMatrixValue as well, and just
          use AffineTransform, but that will be done in a separate change.

        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        Add new files.

        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value): Deleted.
        (WebCore::JSSVGLength::setValue): Deleted.
        (WebCore::JSSVGLength::convertToSpecifiedUnits): Deleted.
        Removed. This can now be generated completely.

        * bindings/scripts/CodeGenerator.pm:
        (SkipIncludeHeader):
        Remove special casing of SVGNumber. A header for it now exists.

        (GetSVGWrappedTypeNeedingTearOff):
        Remove special casing SVGPropertyTearOffs. None remain.

        (ShouldPassWrapperByReference):
        Allow all tear off types to be passed by reference.

        (IsSVGTypeWithWritablePropertiesNeedingTearOff):
        Remove now unused function.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetImplClassName):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (GetSVGPropertyTypes):
        (NativeToJSValue):
        (GenerateConstructorDefinition):
        Remove non-property tear off specific code. 
        
        (IsNativeType): 
        Remove unused function.

        * css/CSSPropertyNames.in:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::strokeDashArrayToCSSValueList):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSVGLengthValue):
        (WebCore::StyleBuilderConverter::convertSVGLengthVector):
        (WebCore::StyleBuilderConverter::convertStrokeDashArray):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueBaselineShift):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::strokeDashArray):
        (WebCore::RenderStyle::setStrokeDashArray):
        (WebCore::RenderStyle::baselineShiftValue):
        (WebCore::RenderStyle::setBaselineShiftValue):
        (WebCore::RenderStyle::kerning):
        (WebCore::RenderStyle::setKerning):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialStrokeDashArray):
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        (WebCore::SVGRenderStyle::setStrokeDashArray):
        (WebCore::SVGRenderStyle::setKerning):
        (WebCore::SVGRenderStyle::setBaselineShiftValue):
        (WebCore::SVGRenderStyle::strokeDashArray):
        (WebCore::SVGRenderStyle::kerning):
        (WebCore::SVGRenderStyle::baselineShiftValue):
        * rendering/style/SVGRenderStyleDefs.h:
        Update for name change of SVGLength to SVGLengthValue.

        * rendering/svg/RenderSVGImage.cpp:
        Remove unused include.

        * html/canvas/DOMPath.h:
        Add an overload that takes a DOMMatrix, now that it is distinct from
        AffineTransform.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):
        Update for name change of SVGPoint to FloatPoint.

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
        Update for name change of SVGLength to SVGLengthValue.

        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::startPositionOfCharacter):
        (WebCore::SVGTextQuery::endPositionOfCharacter):
        (WebCore::SVGTextQuery::characterNumberAtPosition):
        * rendering/svg/SVGTextQuery.h:
        Update for name change of SVGPoint to FloatPoint.

        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        Update for name change of SVGLength to SVGLengthValue.

        * svg/SVGAllInOne.cpp:
        Remove SVGLength.cpp

        * svg/SVGAngle.h:
        Add missing newline.

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimateTransformElement.h:
        Update for name change of SVGTransform to SVGTransformValue.
        
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator):
        (WebCore::SVGAnimatedLengthAnimator::constructFromString):
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::parseLengthFromString):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedLengthAnimator::calculateDistance):
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::SVGAnimatedLengthListAnimator):
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::parseLengthListFromString):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.h:
        Update for name change of SVGLength to SVGLengthValue.

        * svg/SVGAnimatedNumberList.h:
        Include the new SVGNumber.h and switch typedef to type alias.

        * svg/SVGAnimatedPointList.cpp:
        Add now necessary include of SVGPoint.h

        * svg/SVGAnimatedRect.h:
        Update for name change of SVGPropertyTearOff<FloatRect> to SVGRect.
    
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
        Update for name change of SVGTransform to SVGTransformValue.

        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createLength):
        (WebCore::SVGAnimatedType::setValueAsString):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::length):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseAttribute):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::startPan):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseAttribute):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::parseAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::resolveRectangle):
        (WebCore::SVGLengthContext::resolvePoint):
        (WebCore::SVGLengthContext::resolveLength):
        * svg/SVGLengthContext.h:
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGLengthList.h:
        (WebCore::SVGPropertyTraits<SVGLengthList>::initialValue):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseAttribute):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseAttribute):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseAttribute):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseAttribute):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseAttribute):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseAttribute):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseAttribute):
        Update for name change of SVGLength to SVGLengthValue.

        * svg/SVGLength.cpp: Removed.
        * svg/SVGLength.h:
        (WebCore::SVGLength::create):
        (WebCore::SVGLength::unitType):
        (WebCore::SVGLength::valueForBindings):
        (WebCore::SVGLength::setValueForBindings):
        (WebCore::SVGLength::valueInSpecifiedUnits):
        (WebCore::SVGLength::setValueInSpecifiedUnits):
        (WebCore::SVGLength::valueAsString):
        (WebCore::SVGLength::setValueAsString):
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::SVGLength):
        Implement the SVGLength interface as a tear off.

        * svg/SVGLength.idl:
        Add annotations for exceptions, custom naming, and remove now unnecessary
        custom binding annotation.

        * svg/SVGLengthValue.cpp: Copied from Source/WebCore/svg/SVGLength.cpp.
        * svg/SVGLengthValue.h: Copied from Source/WebCore/svg/SVGLength.h.

        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::getCTMForBindings):
        (WebCore::SVGGraphicsElement::getScreenCTMForBindings):
        (WebCore::SVGGraphicsElement::getBBoxForBindings):
        * svg/SVGGraphicsElement.h:
        Add bindings specific versions of transformation access functions that return
        tear offs.

        * svg/SVGGraphicsElement.idl:
        Annotate tear off returning functions with NewObject and ImplementedAs as necessary.

        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGLocatable.h:
        Change getTransformToElement to return a Ref<SVGMatrix> as that is what the binding
        wants.

        * svg/SVGMatrix.h:
        Implement the SVGMatrix interface as a tear off.
        
        * svg/SVGMatrix.idl:
        Add annotations for exceptions. Remove meaningless Immutable annotation.

        * svg/SVGMatrixValue.h: Copied from Source/WebCore/svg/SVGMatrix.h.

        * svg/SVGNumber.h: Added.
        (WebCore::SVGNumber::create):
        (WebCore::SVGNumber::valueForBindings):
        (WebCore::SVGNumber::setValueForBindings):
        (WebCore::SVGNumber::SVGNumber):
        Implement the SVGNumber interface as a tear off.

        * svg/SVGNumber.idl:
        Add exception annotation and custom naming annotations.

        * svg/SVGNumberList.h:
        Update for name change of SVGPropertyTearOff<float> to SVGNumber.

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPointAtLength):
        * svg/SVGPathElement.h:
        Make getPointAtLength return a Ref<SVGPoint> to match the bindings.

        * svg/SVGPathElement.idl:
        Annotate getPointAtLength with [NewObject].

        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::currentPoint):
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::getPointAtLengthOfSVGPathByteStream):
        * svg/SVGPathUtilities.h:
        * svg/SVGPointList.cpp:
        (WebCore::SVGPointList::valueAsString):
        * svg/SVGPointList.h:
        * svg/SVGPolyElement.cpp:
        Update for name change of SVGPoint to FloatPoint.
        
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::create):
        (WebCore::SVGPoint::x):
        (WebCore::SVGPoint::setX):
        (WebCore::SVGPoint::y):
        (WebCore::SVGPoint::setY):
        (WebCore::SVGPoint::matrixTransform):
        (WebCore::SVGPoint::SVGPoint):
        Implement the SVGPoint interface as a tear off. Remove typedef of FloatPoint
        to SVGPoint.

        * svg/SVGPoint.idl:
        Add exception and NewObject annotations.

        * svg/SVGRect.h:
        (WebCore::SVGRect::create):
        (WebCore::SVGRect::x):
        (WebCore::SVGRect::setX):
        (WebCore::SVGRect::y):
        (WebCore::SVGRect::setY):
        (WebCore::SVGRect::width):
        (WebCore::SVGRect::setWidth):
        (WebCore::SVGRect::height):
        (WebCore::SVGRect::setHeight):
        Implement the SVGRect interface as a tear off. FloatRect SVGPropertyTraits have 
        been moved to SVGRectTraits.h.

        * svg/SVGRect.idl:
        Add exception annotations.

        * svg/SVGRectTraits.h: Copied from Source/WebCore/svg/SVGRect.cpp.
        
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
        (WebCore::SVGSVGElement::getIntersectionList):
        (WebCore::SVGSVGElement::getEnclosureList):
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):
        (WebCore::SVGSVGElement::createSVGNumber):
        (WebCore::SVGSVGElement::createSVGLength):
        (WebCore::SVGSVGElement::createSVGPoint):
        (WebCore::SVGSVGElement::createSVGMatrix):
        (WebCore::SVGSVGElement::createSVGRect):
        (WebCore::SVGSVGElement::createSVGTransform):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::currentTranslateValue):
        (WebCore::SVGSVGElement::currentTranslate): Deleted.
        (WebCore::SVGSVGElement::createSVGNumber): Deleted.
        Update functions taking tear off values to take the wrappers, and update
        the factory functions returning tear offs, to return the wrappers.
        
        * svg/SVGSVGElement.idl:
        Annotate functions/properties returning tear offs with [NewObject].

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        (WebCore::SVGTextContentElement::getStartPositionOfChar):
        (WebCore::SVGTextContentElement::getEndPositionOfChar):
        (WebCore::SVGTextContentElement::getExtentOfChar):
        (WebCore::SVGTextContentElement::getCharNumAtPosition):
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::specifiedTextLength):
        Update functions returning tear off values to return the wrappers
        and ones taking the values to take the wrappers.

        * svg/SVGTextContentElement.idl:
        Annotate functions/properties returning tear offs with [NewObject].

        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::matrix):
        * svg/SVGTransform.h:
        (WebCore::SVGTransform::create):
        (WebCore::SVGTransform::type):
        (WebCore::SVGTransform::angle):
        (WebCore::SVGTransform::setMatrix):
        (WebCore::SVGTransform::setTranslate):
        (WebCore::SVGTransform::setScale):
        (WebCore::SVGTransform::setRotate):
        (WebCore::SVGTransform::setSkewX):
        (WebCore::SVGTransform::setSkewY):
        Implement the SVGTransform interface as a tear off.

        * svg/SVGTransform.idl:
        Add ConstantsScope annotation to allow the constants to be defined on 
        SVGTransformValue. Add exception and NewObject annotations.

        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * svg/SVGTransformDistance.h:
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::createSVGTransformFromMatrix):
        (WebCore::SVGTransformList::consolidate):
        * svg/SVGTransformList.h:
        (WebCore::SVGPropertyTraits<SVGTransformList>::initialValue):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformValue):
        (WebCore::parseAndSkipType):
        (WebCore::SVGTransformable::parseTransformType):
        (WebCore::SVGTransformable::parseTransformAttribute):
        * svg/SVGTransformable.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseAttribute):
        Update for name change of SVGTransform to SVGTransformValue.

        * svg/SVGTransformList.idl:
        Annotate functions returning tear offs with NewObject.

        * svg/SVGTransformValue.cpp: Copied from Source/WebCore/svg/SVGTransform.cpp.
        * svg/SVGTransformValue.h: Copied from Source/WebCore/svg/SVGTransform.h.

        * svg/SVGZoomEvent.cpp:
        (WebCore::SVGZoomEvent::zoomRectScreen):
        (WebCore::SVGZoomEvent::previousTranslate):
        (WebCore::SVGZoomEvent::newTranslate):
        * svg/SVGZoomEvent.h:
        Update for change to SVGPoint/SVGRect. SVGPoint values become FloatPoints. Functions
        returning SVGPoint/SVGRect now return Ref<SVGPoint>/Ref<SVGRect>.

        * svg/SVGZoomEvent.idl:
        Annotate function returning tear off with NewObject.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::findItem):
        Switch typedefs to type aliases. Define ListItemTearOff using SVGPropertyTraits
        to get the correct tear off type (as we do for the other list property tear off 
        classes.)
 
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::clearValues):
        (WebCore::SVGListProperty::clearValuesAndWrappers):
        (WebCore::SVGListProperty::initializeValues):
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::getItemValues):
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValues):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::canReplaceItem):
        (WebCore::SVGListProperty::replaceItemValues):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::canRemoveItem):
        (WebCore::SVGListProperty::removeItemValues):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
        (WebCore::SVGListProperty::appendItemValues):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::initialize):
        (WebCore::SVGListPropertyTearOff::getItem):
        (WebCore::SVGListPropertyTearOff::insertItemBefore):
        (WebCore::SVGListPropertyTearOff::replaceItem):
        (WebCore::SVGListPropertyTearOff::removeItem):
        (WebCore::SVGListPropertyTearOff::appendItem):
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        * svg/properties/SVGTransformListPropertyTearOff.h:
        Change functions returning PtrListItemTearOff, to instead return
        Ref<ListItemTearOff>. To accomplish this, remove unreachable conditions
        that were returning nullptr, and replace them with a assertions (these
        were cases where a function like canGetItem() was called, and it only
        did one of two things, returning an exception, or returned true).

        * svg/properties/SVGMatrixTearOff.h:
        Update for SVGMatrix's addition, this can now inherit from SVGMatrix. Remove
        incorrect comment and update some SVGMatrix types to SVGMatrixValues.

        * svg/properties/SVGStaticPropertyTearOff.h:
        Require the use of SVGStaticPropertyTearOff to pass in the tear off type, rather
        than the value type, so it can be directly inherited from. This allow the one user 
        of this class, SVGSVGElement::currentTranslate, to specialize on SVGPoint directly. 

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results now that svg property tear offs are not handled specially.

2016-11-14  Youenn Fablet  <youenn@apple.com>

        Move updateSignalingState to PeerConnectionBackend
        https://bugs.webkit.org/show_bug.cgi?id=164719

        Reviewed by Eric Carlson.

        No change of behavior.

        Refactoring MediaEndpointPeerConnection signaling state update to PeerConnectionBackend.
        It is not specific to MediaEndpointPeerConnection and can be reused for other backends.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::updateSignalingState):
        * Modules/mediastream/PeerConnectionBackend.h:

2016-11-14  Dean Jackson  <dino@apple.com>

        Handle filter() image type in new CSS Parser
        https://bugs.webkit.org/show_bug.cgi?id=164673
        <rdar://problems/29231376>

        Reviewed by Darin Adler.

        Add support for the <image> type filter() to the
        new CSS Parser. This involved moving some functions
        from CSSPropertyParser into CSSPropertyParserHelpers.

        Covered by fast/filter-image tests.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeShadow):
        (WebCore::parseSingleShadow): Deleted.
        (WebCore::consumeFilterFunction): Deleted.
        (WebCore::consumeFilter): Deleted.
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeFilterImage):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::isGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilter):
        (WebCore::CSSPropertyParserHelpers::consumeSingleShadow):
        * css/parser/CSSPropertyParserHelpers.h:

2016-11-14  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support percentages in word-spacing
        https://bugs.webkit.org/show_bug.cgi?id=164721

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeLetterSpacing):
        (WebCore::consumeWordSpacing):
        (WebCore::consumeSpacing): Deleted.

2016-11-14  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: In ARIA 1.1, the implicit value for aria-level on headings is 2
        https://bugs.webkit.org/show_bug.cgi?id=164714

        Reviewed by Chris Fleizach.

        Return 2 rather than 0 if there is not a valid author-provided value
        for aria-level on an ARIA heading.

        No new tests required as we have sufficient coverage. Added one new
        test case to heading-level.html and updated expectations for it and
        for xml-roles-exposed.html.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::headingLevel):

2016-11-14  Youenn Fablet  <youenn@apple.com>

        Refresh RTCDataChannel abstract infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=164680

        Reviewed by Darin Adler.

        No real changes, except that a mock data channel is now returned for layout test.
        Covered by activated and rebased test.

        Adding support for mock data channel.
        Updating data channel creation by using dictionary binding infrastructure.
        Storing of options directly in RTCDataChannel to reduce the use of the data channel handler.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createDataChannelHandler):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::bufferedAmount):
        (WebCore::RTCDataChannel::~RTCDataChannel): Deleted.
        (WebCore::RTCDataChannel::label): Deleted.
        (WebCore::RTCDataChannel::ordered): Deleted.
        (WebCore::RTCDataChannel::maxRetransmitTime): Deleted.
        (WebCore::RTCDataChannel::maxRetransmits): Deleted.
        (WebCore::RTCDataChannel::protocol): Deleted.
        (WebCore::RTCDataChannel::negotiated): Deleted.
        (WebCore::RTCDataChannel::id): Deleted.
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        (WebCore::RTCDataChannelEvent::create):
        (WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
        (WebCore::RTCDataChannelEvent::~RTCDataChannelEvent): Deleted.
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createDataChannel):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * platform/mediastream/MediaEndpoint.cpp:
        (WebCore::EmptyMediaEndpoint::EmptyMediaEndpoint): Deleted.
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        (WebCore::RTCDataChannelInit::RTCDataChannelInit): Deleted.
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::createDataChannelHandler):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::createDataChannelHandler):
        * platform/mock/MockMediaEndpoint.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp:
        (WebCore::RTCDataChannelHandlerMock::RTCDataChannelHandlerMock):
        * platform/mock/RTCDataChannelHandlerMock.h:

2016-11-14  David Kilzer  <ddkilzer@apple.com>

        Bug 164702: WebContent crash due to checked unsigned overflow in WebCore: WebCore::RenderLayerCompositor::requiresCompositingLayer const + 1104
        <https://webkit.org/b/164702>
        <rdar://problem/29236368>

        Reviewed by Darin Adler.

        Test: inspector/layers/layers-compositing-reasons.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        Don't composite if the canvas area overflows.

2016-11-14  Chris Dumez  <cdumez@apple.com>

        Fix the !ENABLE(FETCH_API) build after r208613
        https://bugs.webkit.org/show_bug.cgi?id=164713

        Reviewed by Youenn Fablet.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2016-11-13  Darin Adler  <darin@apple.com>

        Remove many includes of ExceptionCode.h
        https://bugs.webkit.org/show_bug.cgi?id=164706

        Reviewed by Alex Christensen.

        * Modules/encryptedmedia/CDMPrivateClearKey.cpp: Removed include of ExceptionCode.h.
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp: Ditto.
        * Modules/fetch/FetchBodyOwner.cpp: Ditto.

        * Modules/indexeddb/IDBDatabase.cpp: Added include of ExceptionCode.h.

        * Modules/indexeddb/IDBDatabase.h: Removed include of ExceptionCode.h.
        * Modules/indexeddb/IDBDatabaseException.cpp: Ditto.

        * Modules/indexeddb/IDBIndex.cpp: Added include of ExceptionCode.h.
        * Modules/indexeddb/IDBObjectStore.cpp: Ditto.

        * Modules/mediastream/MediaConstraintsImpl.cpp: Removed include of ExceptionCode.h.
        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Ditto.
        * Modules/mediastream/MediaDevicesRequest.cpp: Ditto.
        * Modules/mediastream/MediaStream.cpp: Ditto.
        * Modules/mediastream/MediaStreamTrack.cpp: Ditto.
        * Modules/mediastream/RTCDTMFSender.cpp: Ditto.
        * Modules/mediastream/RTCDataChannel.cpp: Ditto.
        * Modules/mediastream/RTCPeerConnection.cpp: Ditto.

        * Modules/notifications/Notification.h: Removed definition of ExceptionCode.
        * Modules/streams/ReadableStreamSource.h: Ditto.
        * Modules/webaudio/BiquadFilterNode.cpp: Ditto.

        * Modules/webaudio/PannerNode.cpp: Removed inclde of ExceptionCode.h.
        * Modules/webaudio/WaveShaperNode.cpp: Ditto.

        * Modules/webdatabase/Database.cpp:
        (WebCore::guidForOriginAndName): Reimplemented using HashMap::ensure.
        * Modules/webdatabase/Database.h: Renamed DatabaseGuid to DatabaseGUID and defined
        it here instead of a in DatabaseBasicTypes.h; removed that include.

        * Modules/webdatabase/DatabaseBasicTypes.h: Removed.

        * Modules/webdatabase/DatabaseManager.h: Removed include of DatabaseBasicTypes.h.
        * Modules/webdatabase/DatabaseTask.h: Ditto.

        * Modules/webdatabase/SQLTransactionBackend.cpp: Removed include of ExceptionCode.h.

        * Modules/webdatabase/SQLTransactionBackend.h: Removed include of DatabaseBasicTypes.h.

        * WebCore.xcodeproj/project.pbxproj: Removed DatabaseBasicTypes.h, also let Xcode
        edit the file.

        * bindings/js/ScriptModuleLoader.cpp: Removed include of ExceptionCode.h.
        * bindings/js/SerializedScriptValue.cpp: Ditto.
        * bindings/js/StructuredClone.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck): Removed unnecessary include of ExceptionCode.h.

        * 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/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.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/JSTestTypedefs.cpp:
        Updated.

        * css/CSSMediaRule.cpp: Removed include of ExceptionCode.h.
        * css/CSSSupportsRule.cpp: Ditto.
        * dom/ClientRectList.cpp: Ditto.

        * dom/DOMCoreException.cpp: Added include of ExceptionCode.h.

        * dom/DOMImplementation.cpp: Removed include of ExceptionCode.h.
        * dom/ExceptionBase.h: Ditto.

        * dom/Node.cpp: Added include of ExceptionCode.h.

        * dom/NodeIterator.cpp: Removed include of ExceptionCode.h.
        (WebCore::NodeIterator::NodePointer::NodePointer): Marked this inline.
        (WebCore::NodeIterator::NodePointer::clear): Ditto.
        (WebCore::NodeIterator::NodePointer::moveToNext): Ditto.
        (WebCore::NodeIterator::NodePointer::moveToPrevious): Ditto.
        (WebCore::NodeIterator::NodeIterator): Ditto.
        (WebCore::NodeIterator::create): Moved this here from the header.
        Now the constructor is inlined instead of this function.
        (WebCore::NodeIterator::detach): Deleted. Moved to header.
        * dom/NodeIterator.h: Removed definition of ExceptionCode, fixed indentation
        of this file and made a few changes as mentioned above.

        * dom/ProcessingInstruction.cpp: Removed include of ExceptionCode.h.

        * dom/Text.cpp: Added include of ExceptionCode.h.

        * dom/TreeWalker.cpp: Removed include of ExceptionCode.h.
        * editing/FrameSelection.cpp: Ditto.
        * fileapi/WebKitBlobBuilder.cpp: Ditto.
        * history/CachedFrame.cpp: Ditto.
        * html/HTMLDocument.cpp: Ditto.
        * html/HTMLMeterElement.cpp: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLOptionElement.cpp: Ditto.

        * html/HTMLOptionsCollection.cpp: Removed include of ExceptionCode.h.
        (WebCore::HTMLOptionsCollection::add): Changed argument to const& to avoid a
        little bit of reference count churn.
        * html/HTMLOptionsCollection.h: Updated for above.

        * html/HTMLProgressElement.cpp: Removed include of ExceptionCode.h.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add): Changed argument to const& to avoid a
        little bit of reference count churn.
        * html/HTMLSelectElement.h: Updated for above.

        * html/HTMLTextAreaElement.cpp: Removed include of ExceptionCode.h.
        * html/canvas/CanvasPattern.cpp: Ditto.

        * html/canvas/WebGLContextGroup.h: Removed definition of ExceptionCode.

        * html/track/AudioTrack.h: Removed include of ExceptionCode.h.
        * html/track/TextTrack.h: Ditto.

        * html/track/VTTCue.cpp: Added include of ExceptionCode.h.
        * html/track/VTTRegion.cpp: Ditto.

        * html/track/VideoTrack.h: Removed include of ExceptionCode.h.
        * inspector/DOMEditor.cpp: Ditto.

        * inspector/InspectorDatabaseAgent.cpp: Removed include of ExceptionCode.h.
        Tweaked the code in the file a bit, marking more things final and making them
        private. ALso simplified a couple of the functions a bit.
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseForId):

        * inspector/InspectorIndexedDBAgent.cpp: Removed include of ExceptionCode.h.

        * inspector/InspectorStyleSheet.cpp: Added include of ExceptionCode.h.

        * page/FocusController.cpp: Removed include of ExceptionCode.h.

        * page/Location.h: Removed definition of ExceptionCode.

        * page/Page.cpp: Removed include of ExceptionCode.h.
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm: Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm: Ditto.

        * storage/StorageArea.h: Removed definition of ExceptionCode.

        * svg/SVGCircleElement.cpp: Removed include of ExceptionCode.h.

        * svg/SVGColor.cpp: Added include of ExceptionCode.h.
        * svg/SVGPaint.cpp: Ditto.

        * svg/SVGStyleElement.cpp: Removed include of ExceptionCode.h.

        * svg/properties/SVGListProperty.h: Added include of ExceptionCode.h.

        * workers/Worker.cpp: Removed include of ExceptionCode.h.
        * workers/WorkerMessagingProxy.cpp: Ditto.

        * xml/XMLSerializer.cpp: Removed unneeded includes.
        (WebCore::XMLSerializer::serializeToString): Use nullptr.
        * xml/XMLSerializer.h: Removed definition of ExceptionCode, fixed indentation
        of this file, and made a couple tweaks.

2016-11-14  Youenn Fablet  <youenn@apple.com>

        MediaStreamPrivate::create should take vectors of Ref
        https://bugs.webkit.org/show_bug.cgi?id=164670

        Reviewed by Sam Weinig.

        No change of behavior.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):

2016-11-14  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose STATE_SINGLE_LINE and STATE_MULTI_LINE for ARIA searchbox role
        https://bugs.webkit.org/show_bug.cgi?id=164712

        Reviewed by Chris Fleizach.

        Include SearchFieldRole when adding STATE_SINGLE_LINE and STATE_MULTI_LINE
        to AtkStateSet.

        Test: accessibility/gtk/singleline-and-multiline.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2016-11-14  Youenn Fablet  <youennf@gmail.com>

        RTCRtpTransceiver should have Ref of sender and receiver
        https://bugs.webkit.org/show_bug.cgi?id=164665

        Reviewed by Darin Adler.

        No change of behavior.

        Making RTCRptTransceiver have Ref<RTCRtpSender> and Ref<RTCRtpReceiver>.
        Transforming transceiver set list of senders and receivers as vectors of references to reduce count churning.
        Also making RTCRptTransceiver have a Ref<RTCIceTransport> instead of a RefPtr.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        (WebCore::createSourceMap):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::createReceiver):
        (WebCore::MediaEndpointPeerConnection::replaceTrack):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::close):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::RTCRtpTransceiver):
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::create):
        (WebCore::RTCRtpTransceiver::sender):
        (WebCore::RTCRtpTransceiver::receiver):
        (WebCore::RTCRtpTransceiver::iceTransport):
        (WebCore::RtpTransceiverSet::senders):
        (WebCore::RtpTransceiverSet::receivers):

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix various --minimal build issue
        https://bugs.webkit.org/show_bug.cgi?id=164479

        Reviewed by Darin Adler.

        * dom/Node.cpp:
        * platform/audio/PlatformMediaSessionManager.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::captionsStyleSheetOverride):

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO_TRACK) build
        https://bugs.webkit.org/show_bug.cgi?id=164476

        Reviewed by Darin Adler.

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isPseudoElementFunction):
        (WebCore::CSSSelectorParser::consumePseudo):

2016-11-14  Miguel Gomez  <magomez@igalia.com>

        [GTK] Do not use gstreamer-gl when accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=164481

        Reviewed by Žan Doberšek.

        Check whether accelerated compositing is enabled before creating the gstreamer-gl video sink.

        No new tests (Covered by existing tests).

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

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_BOX_DECORATION_BREAK) build
        https://bugs.webkit.org/show_bug.cgi?id=164478

        Reviewed by Darin Adler.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_GRID_LAYOUT) build
        https://bugs.webkit.org/show_bug.cgi?id=164477

        Reviewed by Darin Adler.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Suppress build warning in generated Geoclue2Interface.c
        https://bugs.webkit.org/show_bug.cgi?id=164475

        Reviewed by Darin Adler.

        * PlatformEfl.cmake:

2016-11-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][OWR] poor video rendering in apprtc
        https://bugs.webkit.org/show_bug.cgi?id=164585

        Reviewed by Xabier Rodriguez-Calvar.

        The apprtc service uses 3 video elements in total, one for local, one
        for remote and one called preview. During a call only remote and
        preview are displayed, preview being linked to the same mediastream as
        local. The consequence is that 2 OWR video renderers of the same
        source are created. When gst-gl is enabled this isn't a problem but
        when it is disabled a performance issue appears and the webkit video
        sink starts dropping frames.

        The solution is to have the video renderer shared between the 2
        media players in this scenario.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::videoSink): Add video sink getter.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::load): Make sure the m_streamPrivate is
        set before creating the video sink.
        (WebCore::MediaPlayerPrivateGStreamerOwr::createVideoSink): Re-use video renderer
        and sink if they have previously been created for another media player.
        * platform/mediastream/MediaStreamPrivate.h: Store GStreamer sink and renderer so
        they can be potentially used by multiple media players.
        (WebCore::MediaStreamPrivate::setVideoRenderer):
        (WebCore::MediaStreamPrivate::getVideoSinkElement):
        (WebCore::MediaStreamPrivate::getVideoRenderer):

2016-11-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [HarfBuzz] HarfBuzzShaper should not assume numGlyphs is greater than 0
        https://bugs.webkit.org/show_bug.cgi?id=164500

        Reviewed by Myles C. Maxfield.

        Test: fast/text/international/harfbuzz-runs-with-no-glyph.html

        HarfBuzzShaper assumes numGlyphs of HarfBuzzRun is greater than
        zero. But this is not necessarily true. If a font does not have a
        glyph of SPACE (U+0020), HarfBuzz removes ignorable glyphs. In
        this case, HarfBuzzRun can have no glyphs.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::applyShapeResult): Resize
        m_offsets to one if m_numGlyphs is zero.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::glyphs): Use Vector::data()
        instread of operator[0].
        (WebCore::HarfBuzzShaper::HarfBuzzRun::advances): Ditto.
        (WebCore::HarfBuzzShaper::HarfBuzzRun::offsets): Ditto.
        (WebCore::HarfBuzzShaper::HarfBuzzRun::glyphToCharacterIndexes): Ditto.

2016-11-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION (204441): newsplex.com map does not load
        https://bugs.webkit.org/show_bug.cgi?id=164705
        <rdar://problem/28753438>

        Reviewed by Darin Adler.

        Update getElementsByTagName(qualifiedName) implementation to match more closely
        the specification at:
        - https://dom.spec.whatwg.org/#dom-document-getelementsbytagname
        - https://dom.spec.whatwg.org/#concept-getelementsbytagname
        - https://dom.spec.whatwg.org/#concept-element-qualified-name

        In particular, we no longer split the input qualifiedName into a prefix and a
        localName in order to compare those to element.prefix() / element.localName().
        Instead, we keep the input qualifiedName as is and compare it to the element's
        qualifiedName. This matters for HTML elements inside an HTML document that have
        a semicolon in their localname (e.g. 'wx:map'). For this example, the element's
        localName and its qualified name are both 'wx:map'. Calling
        getElementsByTagName('wx:map') should return it. However, if you split the input
        qualifiedName into a prefix and a localName, you end up checking:
        'wx' == null && 'map' == 'wx:map'
        which does not match.

        Test: fast/dom/getElementsByTagName-HTMLElement-prefix.html

        * dom/TagCollection.cpp:
        (WebCore::TagCollection::TagCollection):
        (WebCore::TagCollection::~TagCollection):
        (WebCore::HTMLTagCollection::HTMLTagCollection):
        (WebCore::HTMLTagCollection::~HTMLTagCollection):
        (WebCore::makeQualifiedName): Deleted.
        (WebCore::splitQualifiedName): Deleted.
        * dom/TagCollection.h:
        (WebCore::TagCollection::elementMatches):
        (WebCore::HTMLTagCollection::elementMatches):

2016-11-13  Darin Adler  <darin@apple.com>

        Remove ExceptionCodePlaceholder
        https://bugs.webkit.org/show_bug.cgi?id=164703

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Removed ExceptionCodePlaceholder.cpp.
        * WebCore.xcodeproj/project.pbxproj: Removed ExceptionCodePlaceholder.h/cpp.
        Also let Xcode make a change to the file, I think removing an unreferenced
        dead entry for a file that is already listed under a different ID.
        * dom/DOMAllInOne.cpp: Removed ExceptionCodePlaceholder.cpp.
        * dom/ExceptionCodePlaceholder.cpp: Removed.
        * dom/ExceptionCodePlaceholder.h: Removed.
        * inspector/InspectorDatabaseAgent.cpp: Removed include of ExceptionCodePlaceholder.h.

2016-11-13  Darin Adler  <darin@apple.com>

        Fix exception handling in SQL database code, streamline and update code
        https://bugs.webkit.org/show_bug.cgi?id=164685

        Reviewed by Sam Weinig.

        Removed some old abstraction layers that were no longer in use. For example,
        i n many cases, calls were going through DatabaseManager, which called through
        an abstract class AbstractDatabaseServer to a concrete class DatabaseServer,
        which then called through to DatabaseTracker. Clients now mostly just call
        DatabaseTracker directly.

        * CMakeLists.txt: Removed DatabaseServer.cpp and SQLTransactionClient.cpp.

        * Modules/webdatabase/AbstractDatabaseServer.h: Removed.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase): Use ExceptionOr instead of
        DatabaseError to communicate DOM exceptions from DatabaseManager.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database): Use a reference instead of a RefPtr&& for database
        context. Use unsigned instead of unsigned long. Modernize code to use more
        initialization rather than assignment, to initialize scalar data members in the
        class definition, and to use HashMap::ensure.
        (WebCore::Database::databaseThread): Added. This class asserts that there is a
        thread in the constructor, and so it is useful to have a helper for all the other
        functions that assumes the thread is present and returns a reference rather than
        a pointer.
        (WebCore::Database::~Database): Updated since m_scriptExecutionContext is now
        a Ref instead of a RefPtr.
        (WebCore::Database::openAndVerifyVersion): Use ExceptionOr and databaseThread.
        (WebCore::Database::close): Use databaseThread.
        (WebCore::Database::performClose): Ditto.
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        Use a reference. Removed unused m_openSuccceeded.
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        Use DatabaseTracker::singleton by its new name.
        (WebCore::DoneCreatingDatabaseOnExitCaller::setOpenSucceeded): Deleted.
        (WebCore::Database::performOpenAndVerify): Use ExceptionOr and update for above.
        (WebCore::Database::closeDatabase): Updated for name change.
        (WebCore::Database::scheduleTransaction): Updated for above, simplified and
        streamlined.
        (WebCore::Database::scheduleTransactionStep): Use databaseThread.
        (WebCore::Database::transactionClient): Deleted. This object is no longer needed.
        (WebCore::Database::transactionCoordinator): Use databaseThread.
        (WebCore::Database::markAsDeletedAndClose): Removed unnecessary null check for
        databaseThread, which can never be null.
        (WebCore::Database::estimatedSize): Use unsigned, not unsigned long.
        (WebCore::Database::disableAuthorizer): Removed assertion about RefPtr that is
        now a Ref and never could have been null.
        (WebCore::Database::enableAuthorizer): Ditto.
        (WebCore::Database::setAuthorizerPermissions): Ditto.
        (WebCore::Database::lastActionChangedDatabase): Ditto.
        (WebCore::Database::lastActionWasInsert): Ditto.
        (WebCore::Database::resetDeletes): Ditto.
        (WebCore::Database::hadDeletes): Ditto.
        (WebCore::Database::resetAuthorizer): Removed null check for a RefPtr that is now
        a Ref and never could have been null.
        (WebCore::Database::runTransaction): Simplified a bit.
        (WebCore::Database::tableNames): Use databaseThread.
        (WebCore::Database::securityOrigin): Changed to return a reference instead of a
        pointer because all the callers need it to do that. If called on the wrong thread,
        this will now do a RELEASE_ASSERT_NOT_REACHED. In the old code it would return a
        null pointer and then the caller would dereference it a moment later, so it would
        still be a crash.
        (WebCore::Database::maximumSize): Removed const since it's not really needed and
        the DatabaseTracker wants a non-const reference to this database.
        (WebCore::Database::didCommitWriteTransaction): Added. Moved this code here from
        SQLTransactionClient. There is no abstraction layer, so no reason to not have
        this code, quite comparable to the rest of the code in the class, here. I am
        assuming this served some more useful purpose back when we had a different back end
        for Chromium?
        (WebCore::Database::didExceedQuota): Ditto.
        * Modules/webdatabase/Database.h: Updated for above changes. Made some functions
        return references instead of pointers. Use Ref instead of RefPtr for some things that
        can never be null.
        * Modules/webdatabase/Database.idl: Added ImplementationLacksVTable because the
        Database class is not polymorphic.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext): Take a reference instead of a pointer.
        Moved data member initialization into class definition. Remove code that tries to do
        debug accounting and databasecontext registration and instead just make sure to keep
        the ScriptExecutionContext pointing at the DatabaseContext.
        (WebCore::DatabaseContext::~DatabaseContext): Ditto.
        (WebCore::DatabaseContext::stopDatabases): Ditto.
        * Modules/webdatabase/DatabaseContext.h: Updated for the above. Also used the
        scriptExecutionContext function inherited from the base class intead of adding our
        own, and added a existingDatabaseThread() function, letting us get at the database
        thread efficiently without creating a new one.

        * Modules/webdatabase/DatabaseError.h: Removed. We now use DOM exceptions directly
        instead of our own error enumeration that has to be translated to a DOM exception.

        * Modules/webdatabase/DatabaseManager.cpp: Moved the ProposedDatabase class here
        from the header file, and had it use references instead of pointers.
        (WebCore::DatabaseManager::DatabaseManager): Deleted. There was nothing left to
        initialize once the refactoring was done.
        (WebCore::DatabaseManager::initialize): Call DatabaseTracker directly instead of
        calling through m_server.
        (WebCore::DatabaseManager::setClient): Ditto.
        (WebCore::DatabaseManager::databaseDirectoryPath): Deleted. Callers will use the
        function in DatabaseTracker directly.
        (WebCore::DatabaseManager::setDatabaseDirectoryPath): Ditto.
        (WebCore::DatabaseManager::existingDatabaseContextFor): Deleted. Callers will use
        the ScriptExecutionContext::databaseContext function instead.
        (WebCore::DatabaseManager::databaseContext): Renamed from databaseContextFor.
        (WebCore::DatabaseManager::registerDatabaseContext): Deleted.
        (WebCore::DatabaseManager::unregisterDatabaseContext): Deleted.
        (WebCore::DatabaseManager::didConstructDatabaseContext): Deleted.
        (WebCore::DatabaseManager::didDestructDatabaseContext): Deleted.
        (WebCore::DatabaseManager::exceptionCodeForDatabaseError): Deleted.
        (WebCore::logOpenDatabaseError): Tweaked conditionals a bit.
        (WebCore::DatabaseManager::openDatabaseBackend): Use ExceptionOr. Changed to call
        tryToOpenDatabaseBackend function here in this class rather than using m_server.
        (WebCore::DatabaseManager::tryToOpenDatabaseBackend): Added. Moved here from the
        DatabaseServer class.
        (WebCore::DatabaseManager::addProposedDatabase): Take a reference.
        (WebCore::DatabaseManager::removeProposedDatabase): Ditto.
        (WebCore::DatabaseManager::openDatabase): Use ExceptionOr.
        (WebCore::DatabaseManager::hasOpenDatabases): Use ScriptContext::databaseContext
        directly instead of using helper functions in this class.
        (WebCore::DatabaseManager::stopDatabases): Ditto.
        (WebCore::DatabaseManager::fullPathForDatabase): Take a reference and also call
        DatabaseTracker directly instead of calling through m_server.
        (WebCore::DatabaseManager::hasEntryForOrigin): Deleted. Callers will use the
        function in DatabaseTracker directly.
        (WebCore::DatabaseManager::origins): Ditto.
        (WebCore::DatabaseManager::databaseNamesForOrigin): Ditto.
        (WebCore::DatabaseManager::detailsForNameAndOrigin): Call DatabaseTracker directly
        instead of calling through m_server.
        (WebCore::DatabaseManager::usageForOrigin): Deleted. Callers will use the
        function in DatabaseTracker directly.
        (WebCore::DatabaseManager::quotaForOrigin): Ditto.
        (WebCore::DatabaseManager::setQuota): Ditto.
        (WebCore::DatabaseManager::deleteAllDatabasesImmediately): Ditto.
        (WebCore::DatabaseManager::deleteOrigin): Ditto.
        (WebCore::DatabaseManager::deleteDatabase): Ditto.
        (WebCore::DatabaseManager::closeAllDatabases): Ditto.
        (WebCore::DatabaseManager::logErrorMessage): Take a reference.
        * Modules/webdatabase/DatabaseManager.h: Updated for changes above.

        * Modules/webdatabase/DatabaseManagerClient.h: Use references for security origins.
        Also changed #if for iOS so that other platforms can call the iOS-specific functions
        and they have inline empty bodies; lets us clean up call sites to not need conditionals.

        * Modules/webdatabase/DatabaseServer.cpp: Removed.
        * Modules/webdatabase/DatabaseServer.h: Removed.

        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::isolatedCopy): Added. Helper functions for making isolated copies of
        exceptions, which can contain strings.
        (WebCore::DatabaseOpenTask::DatabaseOpenTask): Use ExceptionOr<void> instead of
        a DatabaseError, a String, and a success boolean.
        (WebCore::DatabaseOpenTask::doPerformTask): Updated to use ExceptoinOr.
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask): Renamed.
        (WebCore::DatabaseTableNamesTask::doPerformTask): Added a comment.
        * Modules/webdatabase/DatabaseTask.h: Updated for above changes.

        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread): Initialized data members in the class
        definition. Removed m_transactionClient.
        (WebCore::DatabaseThread::recordDatabaseOpen): Take a reference.
        (WebCore::DatabaseThread::recordDatabaseClosed): Ditto.
        (WebCore::DatabaseThread::scheduleTask): Use an rvalue reference.
        (WebCore::DatabaseThread::scheduleImmediateTask): Ditto.
        (WebCore::DatabaseThread::unscheduleDatabaseTasks): Use a lambda instead of a
        class for the same-database predicate.
        * Modules/webdatabase/DatabaseThread.h: Updated for above.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::isolatedCopy): Added. Helper for making an isolated copy of a vector
        of strings.
        (WebCore::DatabaseTracker::singleton): Renamed from tracker.
        (WebCore::DatabaseTracker::DatabaseTracker): Moved the code from
        setDatabaseDirectoryPath in here.
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath): Deleted.
        (WebCore::DatabaseTracker::databaseDirectoryPath): Deleted.
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin): Use ExceptionOr.
        (WebCore::DatabaseTracker::canEstablishDatabase): Ditto.
        (WebCore::DatabaseTracker::retryCanEstablishDatabase): Ditto.
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock): Take a reference.
        (WebCore::DatabaseTracker::hasEntryForOrigin): Deleted.
        (WebCore::DatabaseTracker::hasEntryForDatabase): Take a reference.
        (WebCore::DatabaseTracker::maximumSize): Renamed from getMaxSizeForDatabase
        and changed to take a reference.
        (WebCore::DatabaseTracker::originPath): Take a reference.
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock): Ditto.
        (WebCore::DatabaseTracker::fullPathForDatabase): Ditto.
        (WebCore::DatabaseTracker::origins): Changed to use a return value instead
        of using an out argument.
        (WebCore::DatabaseTracker::databaseNamesNoLock): Ditto. Also renamed from
        databaseNamesForOriginNoLock.
        (WebCore::DatabaseTracker::databaseNames): Ditto. Also renamed from
        databaseNamesForOrigin.
        (WebCore::DatabaseTracker::detailsForNameAndOrigin): Take a reference.
        (WebCore::DatabaseTracker::setDatabaseDetails): Ditto.
        (WebCore::DatabaseTracker::doneCreatingDatabase): Ditto.
        (WebCore::DatabaseTracker::addOpenDatabase): Ditto.
        (WebCore::DatabaseTracker::removeOpenDatabase): Ditto.
        (WebCore::DatabaseTracker::getOpenDatabases): Deleted.
        (WebCore::DatabaseTracker::originLockFor): Take a reference.
        (WebCore::DatabaseTracker::deleteOriginLockFor): Take a reference.
        (WebCore::DatabaseTracker::usage): Renamed from usageForOrigin. Take a reference.
        (WebCore::DatabaseTracker::quotaNoLock): Renamed from quotaForOriginNoLock.
        Take a reference.
        (WebCore::DatabaseTracker::quota): Renamed from quatoForOrigin. Take a reference.
        (WebCore::DatabaseTracker::setQuota): Take a reference.
        (WebCore::DatabaseTracker::addDatabase): Ditto.
        (WebCore::DatabaseTracker::deleteAllDatabasesImmediately): Updated now that
        origins has a return value.
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince): Ditto.
        (WebCore::DatabaseTracker::deleteOrigin): Take a reference.
        (WebCore::DatabaseTracker::isDeletingDatabaseOrOriginFor): Ditto.
        (WebCore::DatabaseTracker::recordCreatingDatabase): Updated to take a reference,
        use unique_ptr, and use HashCountedSet.
        (WebCore::DatabaseTracker::doneCreatingDatabase): Ditto.
        (WebCore::DatabaseTracker::creatingDatabase): Ditto.
        (WebCore::DatabaseTracker::canDeleteDatabase): Take a reference.
        (WebCore::DatabaseTracker::recordDeletingDatabase): Updated to take a reference,
        and use unique_ptr.
        (WebCore::DatabaseTracker::doneDeletingDatabase): Ditto.
        (WebCore::DatabaseTracker::isDeletingDatabase): Ditto.
        (WebCore::DatabaseTracker::canDeleteOrigin): Take a reference.
        (WebCore::DatabaseTracker::isDeletingOrigin): Ditto.
        (WebCore::DatabaseTracker::recordDeletingOrigin): Ditto.
        (WebCore::DatabaseTracker::doneDeletingOrigin): Ditto.
        (WebCore::DatabaseTracker::deleteDatabase): Ditto.
        (WebCore::DatabaseTracker::deleteDatabaseFile): Ditto.
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases): Ditto.
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged): Ditto.
        (WebCore::DatabaseTracker::notifyDatabasesChanged): Ditto.
        * Modules/webdatabase/DatabaseTracker.h: Updated for above changes.

        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement): Updated since Database::scriptExecutionContext
        now returns a reference.

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction): Moved data member initialization to
        the calss definition. Also updated since Database::scriptExecutionContext now
        returns a reference.
        (WebCore::SQLTransaction::executeSQL): Use ExceptionOr.
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase): Updated since
        databaseContext now returns a reference.
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): Updated to call
        didExceedQuota on the database instead of the transaction client.
        (WebCore::SQLTransaction::postflightAndCommit): Updated to call
        didCommitWriteTransaction on the database instead of the transaction client.
        (WebCore::SQLTransaction::acquireOriginLock): Updated for name change of
        DatabaseTracker::tracker to DatbaseTracker::singleton.
        * Modules/webdatabase/SQLTransaction.h: Updated for above.
        * Modules/webdatabase/SQLTransaction.idl: Added MayThrowException to
        executeSql. Not technically needed since it's a custom binding.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup): Updated assertion to use
        Database::databaseThread.
        (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown): Ditto.

        * Modules/webdatabase/SQLTransactionClient.cpp: Removed.
        * Modules/webdatabase/SQLTransactionClient.h: Removed.

        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier): Updated to pass a reference.

        * WebCore.xcodeproj/project.pbxproj: Removed various deleted files.
        Also let Xcode change the whitespace on some lines.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Use ExceptionOr, specifically by
        using the propagateException function.

        * dom/ScriptExecutionContext.h: Added databaseContext function. Before, we
        had setDatabaseContext, but no way to inspect the pointer that was stored.

        * inspector/InspectorDatabaseAgent.cpp: Removed IGNORE_EXCEPTION in a call
        to executeSQL, which no longer has an ExceptionCode out argument.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Pass a reference in the call to
        DatabaseManager::stopDatabases.

2016-11-13  Dan Bernstein  <mitz@apple.com>

        Try to fix building with newer versions of clang.

        * page/FrameView.h: Don’t export an inline function.

2016-11-13  Darin Adler  <darin@apple.com>

        Move crypto code from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164698

        Reviewed by Sam Weinig.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        Use the new identifier function instead of getIdentifierForName.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters): Ditto.
        (WebCore::toCryptoKeyUsageBitmap): Removed a stray meaningless const.
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise): Pass
        ScriptExecutionContext as a reference instead of a pointer.

        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::createAlgorithmFromJSValue): Use the more efficient version
        of setDOMException that uses scope.
        (WebCore::JSWebKitSubtleCrypto::encrypt): Ditto. Also updated to use
        ExceptionOr instead of ExceptionCode.
        (WebCore::JSWebKitSubtleCrypto::decrypt): Ditto.
        (WebCore::JSWebKitSubtleCrypto::sign): Ditto.
        (WebCore::JSWebKitSubtleCrypto::verify): Ditto.
        (WebCore::JSWebKitSubtleCrypto::digest): Ditto.
        (WebCore::JSWebKitSubtleCrypto::generateKey): Ditto.
        (WebCore::importKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::wrapKey): Ditto.
        (WebCore::JSWebKitSubtleCrypto::unwrapKey): Ditto.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::CryptoAlgorithm): Deleted.
        (WebCore::CryptoAlgorithm::~CryptoAlgorithm): Deleted.
        (WebCore::CryptoAlgorithm::generateKey): Use ExceptionOr.
        (WebCore::CryptoAlgorithm::encrypt): Ditto.
        (WebCore::CryptoAlgorithm::decrypt): Ditto.
        (WebCore::CryptoAlgorithm::sign): Ditto.
        (WebCore::CryptoAlgorithm::verify): Ditto.
        (WebCore::CryptoAlgorithm::digest): Ditto.
        (WebCore::CryptoAlgorithm::deriveKey): Ditto.
        (WebCore::CryptoAlgorithm::deriveBits): Ditto.
        (WebCore::CryptoAlgorithm::importKey): Ditto.
        (WebCore::CryptoAlgorithm::encryptForWrapKey): Ditto.
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey): Ditto.
        * crypto/CryptoAlgorithm.h: Use ExceptionOr.
        Moved the destructor into the header since it's more efficient for
        derived classes to have it inlined. Removed the protected constructor
        because since there are pure virtual functions in the class, there is
        no risk of anyone misusing the public constructor.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::identifier): Renamed from
        getIdentifierForName and changed to use an Optional rather than
        using a boolean plus an out argument.
        (WebCore::CryptoAlgorithmRegistry::name): Renamed to name from
        nameForIdentifier. Also updated to share a single map containing
        both names and constructors.
        (WebCore::CryptoAlgorithmRegistry::create): Share single map as above.
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm): Updated assertions
        to a mroe straightforward style. Share single map for names and constructors.
        * crypto/CryptoAlgorithmRegistry.h: Updated for above.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::CryptoAlgorithmAES_CBC): Deleted.
        (WebCore::CryptoAlgorithmAES_CBC::~CryptoAlgorithmAES_CBC): Deleted.
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Ditto.
        (WebCore::CryptoAlgorithmAES_CBC::encrypt): Ditto.
        (WebCore::CryptoAlgorithmAES_CBC::decrypt): Ditto.
        (WebCore::CryptoAlgorithmAES_CBC::importKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::CryptoAlgorithmAES_KW): Deleted.
        (WebCore::CryptoAlgorithmAES_KW::~CryptoAlgorithmAES_KW): Deleted.
        (WebCore::CryptoAlgorithmAES_KW::keyAlgorithmMatches): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmAES_KW::generateKey): Ditto.
        (WebCore::CryptoAlgorithmAES_KW::importKey): Ditto.
        (WebCore::CryptoAlgorithmAES_KW::encryptForWrapKey): Ditto.
        (WebCore::CryptoAlgorithmAES_KW::decryptForUnwrapKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmAES_KW.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::CryptoAlgorithmHMAC): Deleted.
        (WebCore::CryptoAlgorithmHMAC::~CryptoAlgorithmHMAC): Deleted.
        (WebCore::CryptoAlgorithmHMAC::generateKey): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmHMAC::sign): Ditto.
        (WebCore::CryptoAlgorithmHMAC::verify): Ditto.
        (WebCore::CryptoAlgorithmHMAC::importKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmHMAC.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::CryptoAlgorithmRSAES_PKCS1_v1_5): Deleted.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::~CryptoAlgorithmRSAES_PKCS1_v1_5): Deleted.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt): Ditto.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt): Ditto.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::CryptoAlgorithmRSASSA_PKCS1_v1_5): Deleted.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::~CryptoAlgorithmRSASSA_PKCS1_v1_5): Deleted.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign): Ditto.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify): Ditto.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::CryptoAlgorithmRSA_OAEP): Deleted.
        (WebCore::CryptoAlgorithmRSA_OAEP::~CryptoAlgorithmRSA_OAEP): Deleted.
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey): Use references, ExceptionOr.
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt): Ditto.
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt): Ditto.
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey): Ditto.
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::CryptoAlgorithmSHA1): Deleted.
        (WebCore::CryptoAlgorithmSHA1::~CryptoAlgorithmSHA1): Deleted.
        (WebCore::CryptoAlgorithmSHA1::digest): Use ExceptionOr.
        * crypto/algorithms/CryptoAlgorithmSHA1.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::CryptoAlgorithmSHA224): Deleted.
        (WebCore::CryptoAlgorithmSHA224::~CryptoAlgorithmSHA224): Deleted.
        (WebCore::CryptoAlgorithmSHA224::digest): Use ExceptionOr.
        * crypto/algorithms/CryptoAlgorithmSHA224.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::CryptoAlgorithmSHA256): Deleted.
        (WebCore::CryptoAlgorithmSHA256::~CryptoAlgorithmSHA256): Deleted.
        (WebCore::CryptoAlgorithmSHA256::digest): Use ExceptionOr.
        * crypto/algorithms/CryptoAlgorithmSHA256.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::CryptoAlgorithmSHA384): Deleted.
        (WebCore::CryptoAlgorithmSHA384::~CryptoAlgorithmSHA384): Deleted.
        (WebCore::CryptoAlgorithmSHA384::digest): Use ExceptionOr.
        * crypto/algorithms/CryptoAlgorithmSHA384.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::CryptoAlgorithmSHA512): Deleted.
        (WebCore::CryptoAlgorithmSHA512::~CryptoAlgorithmSHA512): Deleted.
        (WebCore::CryptoAlgorithmSHA512::digest): Use ExceptionOr.
        * crypto/algorithms/CryptoAlgorithmSHA512.h: Updated for above.
        Also use constexpr for s_name and s_identifier.

        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::calculateSignature): Use Optional instead of a boolean
        return value and an out argument.
        (WebCore::CryptoAlgorithmHMAC::platformSign): Use ExceptionOr.
        (WebCore::CryptoAlgorithmHMAC::platformVerify): Ditto.
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt): Ditto.
        * crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt): Ditto.
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign): Ditto.
        (WebCore::CryptoAlgorithmHMAC::platformVerify): Ditto.
        * crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt): Ditto.
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign): Ditto.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Ditto.
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt): Ditto.

        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::buildAlgorithm): Updated to use name instead
        of nameForIdentifier.
        * crypto/keys/CryptoKeyHMAC.cpp: Ditto.
        (WebCore::CryptoKeyHMAC::buildAlgorithm):

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt): Use ExceptionOr.
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt): Ditto.
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt): Ditto.
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::commonCryptoHMACAlgorithm): Renamed from
        getCommonCryptoHMACAlgorithm and changed to use Optional instead of
        a boolean return value and an out argument.
        (WebCore::CryptoAlgorithmHMAC::platformSign): Use ExceptionOr.
        (WebCore::CryptoAlgorithmHMAC::platformVerify): Ditto.
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt): Ditto.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::cryptoDigestAlgorithm): Renamed from
        getCryptoDigestAlgorithm and changed to use Optional instead of
        a boolean return value and an out argument.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign): Use ExceptionOr.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Ditto.
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt): Ditto.
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt): Ditto.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::buildAlgorithm): Updated to use name instead
        of nameForIdentifier.

2016-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Use #pragma once in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=164686

        Reviewed by Michael Catanzaro.

        * css/*.h:
        * plugins/*.h:
        * rendering/*.h:
        * style/*.h:
        * svg/*.h:
        * testing/*.h:

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build after r208666.

        * platform/SuddenTermination.h:

2016-11-12  Simon Fraser  <simon.fraser@apple.com>

        Add a way to get the UI-side scrolling tree as text via UIScriptController
        https://bugs.webkit.org/show_bug.cgi?id=164697

        Reviewed by Zalan Bujtas.

        Add dumping to ScrollingTreeNode and subclasses (previously, we could only dump
        the scrolling state tree). This re-uses the flags used for state tree dumping.

        NodeIDs are not dumped by default because they can depend on earlier tests.

        Test: scrollingcoordinator/ios/ui-scrolling-tree.html

        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollingTreeAsText):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::dumpProperties):
        (WebCore::ScrollingTreeNode::dump):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::dumpProperties):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::dumpProperties):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::dumpProperties):

2016-11-12  Darin Adler  <darin@apple.com>

        Remove some use of ExceptionCode in MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=164690

        Reviewed by Sam Weinig.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices): Take a Document&.
        (WebCore::MediaDevices::create): Ditto.
        (WebCore::MediaDevices::~MediaDevices): Deleted.
        (WebCore::MediaDevices::getUserMedia): Check document for null and
        pass a reference to UserMediaRequest::start. Removed unused ExceptionCode
        argument to UserMediaRequest::start, since the only exception was for
        a null document.
        (WebCore::MediaDevices::enumerateDevices): Check document for null and
        pass a reference to MediaDevicesRequest::create. Removed exception
        handling entirely because MediaDevicesRequest::create was not ever
        raising an exception before.
        * Modules/mediastream/MediaDevices.h: Updated for above changes.
        * Modules/mediastream/MediaDevices.idl: Removed MayThrowException from
        enumerateDevices, because it never throws an exception.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::MediaDevicesRequest): Take a Document&.
        Removed unused ExceptionCode& argument.
        (WebCore::MediaDevicesRequest::create): Ditto.
        * Modules/mediastream/MediaDevicesRequest.h: Updated for above changes.

        * Modules/mediastream/NavigatorMediaDevices.cpp:
        (WebCore::NavigatorMediaDevices::mediaDevices): Pass a reference.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start): Use ExceptionOr.
        (WebCore::UserMediaRequest::UserMediaRequest): Take a Document& and
        a UserMediaController&.
        * Modules/mediastream/UserMediaRequest.h: Updated for above changes.

2016-11-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Share some code with Mac for post-async-scroll state reconciliation
        https://bugs.webkit.org/show_bug.cgi?id=164694

        Reviewed by Zalan Bujtas.

        When an async scroll notifications get back to the main thread in
        AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll(), we call 
        syncViewportConstrainedLayerPositions() to poke the new layer positions on the
        GraphicsLayers to match the changes made on the scrolling thread.

        However, this was not done on iOS, which will be problematic for a future patch
        where we require GraphicsLayer positions and the current fixedPositionViewport rect
        to have been computed when in a consistent state.

        Fix by factoring some code into reconcileScrollingState(), which is called on iOS/WK2
        from WebPage::updateVisibleContentRects() rather than setting the FrameView's scroll offset
        directly.

        Test: scrollingcoordinator/ios/sync-layer-positions-after-scroll.html

        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::filteredDelta):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::syncViewportConstrainedLayerPositions):
        (WebCore::AsyncScrollingCoordinator::syncChildPositions): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::reconcileScrollingState):
        (WebCore::ScrollingCoordinator::syncViewportConstrainedLayerPositions):
        (WebCore::ScrollingCoordinator::syncChildPositions): Deleted.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition):
        * platform/Logging.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollOffset):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::adjustTileCoverageRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterDocumentScroll):

2016-11-12  Zalan Bujtas  <zalan@apple.com>

        RenderObject::flowThreadState should follow containing block instead of parent.
        https://bugs.webkit.org/show_bug.cgi?id=164629

        Reviewed by Simon Fraser.

        Currently every descendant of a region/multicolumn container is considered to be part of the
        flowthread including out-of-flow renderers. They all have the InsideFlowThread flag set.
        However since out-of-flow renderers are not really part of the flowthread layout context,
        whenever the layout code actually checks for their flowthread containers, we return nullptr and
        try to handle this seemingly defective state gracefully (that is, flag indicates "inside the flow thread" state,
        but there's no flow tread container).
 
        This patch fixes this confused state by setting the RenderObject::flowThreadState flag based on
        the containing block's state instead of the parent's.

        Not testable, since we seem to manage out-of-flow elements just fine even
        when they have the InsideFlowThread flag set. 

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::adjustFlowThreadStateIncludingDescendants): This is an iterative DFS pre-order traversal so
        we set the flow state first on containers.
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computedFlowThreadState):
        (WebCore::RenderObject::initializeFlowThreadStateOnInsertion):
        * rendering/RenderObject.h:

2016-11-12  Ryosuke Niwa  <rniwa@webkit.org>

        document.currentScript should be null when running a script inside a shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=164693

        Reviewed by Yusuke Suzuki.

        Fixed the bug that we were returning the old or outer script element in document.currentScript
        while executing a script element inside a shadow tree. Return null instead.

        New behavior matches the latest HTML5 specification:
        https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block
        where it says for the classic script type, "if the script element's root is not a shadow root, then set
        the script element's node document's currentScript attribute to the script element. Otherwise, set it to null."

        No new tests. imported/w3c/web-platform-tests/shadow-dom/Document-prototype-currentScript.html covers it.

        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer): Push nullptr when the script element
        is inside a shadow tree.
        (WebCore::CurrentScriptIncrementer::~CurrentScriptIncrementer): Changed to use an early exit.
        * dom/Document.cpp:
        (WebCore::Document::pushCurrentScript): Removed the assertion since the argument can now be nullptr.

2016-11-12  Darin Adler  <darin@apple.com>

        Remove a few assorted uses of ExceptionCode
        https://bugs.webkit.org/show_bug.cgi?id=164683

        Reviewed by Chris Dumez.

        * Modules/applepay/PaymentContact.h: Removed include of ExceptionCode.h.
        Also tidied up the constructor and destructor.

        * Modules/indexeddb/IDBFactory.h: Removed typedef of ExceptionCode.
        * Modules/indexeddb/IDBKeyRange.h: Ditto.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::getObjectParameter): Removed local ExceptionCode variable that
        was always 0.
        (WebCore::JSWebGLRenderingContextBase::getAttachedShaders): Ditto.
        (WebCore::dataFunctionf): Ditto.
        (WebCore::dataFunctioni): Ditto.
        (WebCore::dataFunctionMatrix): Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes): Ditto.

        * dom/Document.h: Removed typedef of ExceptionCode.
        * dom/TreeWalker.h: Ditto.
        * editing/markup.h: Ditto.
        * html/ImageData.h: Ditto.
        * html/InputType.h: Ditto.
        * html/canvas/CanvasRenderingContext2D.h: Ditto.
        * html/canvas/WebGLDebugShaders.h: Ditto.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout): Fixed typo where this was using
        ExceptionCode instead of Exception. The code would return an integer
        instead of an exception in this case. I could not produce a test that
        exercises this code path; I suspect it is an unreachable error condition.
        (WebCore::DOMWindow::setInterval): Ditto.

        * replay/MemoizedDOMResult.h: Changed typedef of ExceptionCode into
        a using statement. Not sure what the longer term fix is.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::appendStartElementNSCallback): Renamed to use
        WebKit-style "numXXX" rather than "nb_xxx".
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::~PendingStartElementNSCallback):
        Ditto.
        (WebCore::handleNamespaceAttributes): Ditto. Replaced ExceptionCode out
        argument with a boolean return value.
        (WebCore::handleElementAttributes): Ditto.
        (WebCore::XMLDocumentParser::startElementNs): Ditto. Updated for changes
        to the handle functions above.
        (WebCore::startElementNsHandler): More of the same.
        (WebCore::attributesStartElementNsHandler): Ditto.

2016-11-11  Darin Adler  <darin@apple.com>

        Remove LegacyException support from bindings script
        https://bugs.webkit.org/show_bug.cgi?id=164516

        Reviewed by Youenn Fablet.

        Besides removing LegacyException support from the bindings script, this patch
        also removes most uses of ExceptionCodePlaceholder.h. Also, some call sites of
        createElement were using ASSERT_NO_EXCEPTION on an argument that was not even an
        ExceptionCode&, so to fix that, this changes most call sites to use specific create
        functions for specific element classes, rather than using Document::createElement.

        * Modules/mediasource/SourceBuffer.cpp: Removed include of
        ExceptionCodePlaceholder.h.
        * Modules/mediastream/MediaStreamTrack.cpp: Ditto.
        * Modules/websockets/WebSocketChannel.cpp: Ditto.
        * bindings/js/JSBlobCustom.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Removed support for GetterMayThrowLegacyException,
        SetterMayThrowLegacyException, and MayThrowLegacyException.
        (GenerateParametersCheck): Ditto.
        (GenerateImplementationFunctionCall): Ditto.
        (GenerateConstructorDefinition): Ditto.

        * bindings/scripts/IDLAttributes.txt: Removed ConstructorMayThrowLegacyException,
        GetterMayThrowLegacyException, MayThrowLegacyException, and SetterMayThrowLegacyException.

        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Updated exepected results.

        * bindings/scripts/test/TestImplements.idl: Use non-legacy exceptions.
        * bindings/scripts/test/TestInterface.idl: Ditto.
        * bindings/scripts/test/TestNamedConstructor.idl: Ditto.
        * bindings/scripts/test/TestObj.idl: Ditto.
        * bindings/scripts/test/TestSupplemental.idl: Ditto.
        * bindings/scripts/test/TestTypedefs.idl: Ditto.

        * dom/ContainerNode.h: Removed include of ExceptionCodePlaceholder.h.
        * editing/AlternativeTextController.cpp: Ditto.
        * editing/AppendNodeCommand.cpp: Ditto.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Use specific create function
        instead of Document::createElement.

        * editing/DeleteFromTextNodeCommand.cpp: Removed include of
        ExceptionCodePlaceholder.h.
        * editing/Editor.cpp: Ditto.
        * editing/EditorCommand.cpp: Ditto.
        * editing/FormatBlockCommand.cpp: Ditto.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Use specific create
        function instead of Document::createElement.

        * editing/InsertListCommand.cpp: Removed include of ExceptionCodePlaceholder.h.
        * editing/InsertNodeBeforeCommand.cpp: Ditto.
        * editing/RemoveNodeCommand.cpp: Ditto.
        * editing/ReplaceSelectionCommand.cpp: Ditto.
        * editing/TextIterator.cpp: Ditto.
        * editing/WrapContentsInDummySpanCommand.cpp: Ditto.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::styleForSelectionStart): Use specific create function instead
        of Document::createElement.
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement): Ditto.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readURL): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readURL): Ditto.

        * editing/markup.cpp: Removed include of ExceptionCodePlaceholder.h.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::appendEntry): Use specific create function
        instead of Document::createElement.
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename): Ditto.
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate): Ditto.
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument): Ditto.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::create): Added overload that just takes a Document.
        * html/HTMLEmbedElement.h: Updated for above.

        * html/HTMLMediaElement.cpp: Removed include of ExceptionCodePlaceholder.h.

        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::create): Added overload that just takes a Document.
        * html/HTMLMetaElement.h: Updated for above.

        * html/HTMLOutputElement.cpp: Removed include of ExceptionCodePlaceholder.h.

        * html/HTMLSelectElement.cpp: Ditto.
        (WebCore::HTMLSelectElement::setLength): Use specific create function
        instead of Document::createElement.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::create): Added overload that just takes a Document.
        * html/HTMLSourceElement.h: Updated for above.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement): Moved data member initialization
        to class definition.
        (WebCore::HTMLStyleElement::create): Added overload that just takes a Document.
        * html/HTMLStyleElement.h: Updated for above. Also made finishParsingChildren public.

        * html/HTMLTableElement.cpp: Removed include of ExceptionCodePlaceholder.h.
        * html/HTMLTextAreaElement.cpp: Ditto.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create): Added overload that just takes a Document.
        * html/HTMLVideoElement.h: Updated for above.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Use specific create function
        instead of Document::createElement.

        * html/InputType.cpp: Removed include of ExceptionCodePlaceholder.h.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure): Use specific create
        function instead of Document::createElement.
        (WebCore::MediaDocument::replaceMediaElementTimerFired): Ditto.
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Ditto.

        * html/RangeInputType.cpp: Removed include of ExceptionCodePlaceholder.h.

        * html/RubyElement.cpp:
        (WebCore::RubyElement::create): Added overload that just takes a Document.
        * html/RubyElement.h: Updated for above.

        * html/RubyTextElement.cpp:
        (WebCore::RubyTextElement::create): Added overload that just takes a Document.
        * html/RubyTextElement.h: Updated for above.

        * html/ValidationMessage.cpp: Removed include of ExceptionCodePlaceholder.h.
        * html/canvas/CanvasRenderingContext2D.cpp: Ditto.
        * html/shadow/MediaControlElementTypes.cpp: Ditto.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        Use specific create function instead of Document::createElement.

        * html/shadow/MediaControls.cpp: Removed include of ExceptionCodePlaceholder.h.
        * html/shadow/MediaControlsApple.cpp: Ditto.
        * html/track/InbandDataTextTrack.cpp: Ditto.
        * html/track/InbandGenericTextTrack.cpp: Ditto.
        * html/track/InbandTextTrack.cpp: Ditto.
        * html/track/VTTRegion.cpp: Ditto.

        * html/track/WebVTTElement.cpp:
        (WebCore::WebVTTElement::createEquivalentHTMLElement): Use specific create
        function instead of Document::createElement.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::createInspectorStyleSheetForDocument): Ditto.

        * page/ContextMenuController.cpp: Removed include of ExceptionCodePlaceholder.h.
        * page/DOMWindow.cpp: Ditto.
        * page/DragController.cpp: Ditto.
        * page/EventHandler.cpp: Ditto.
        * page/Page.cpp: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Ditto.
        * platform/mac/PasteboardMac.mm: Ditto.
        * platform/mac/WebVideoFullscreenHUDWindowController.mm: Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp: Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp: Ditto.
        * rendering/RenderNamedFlowThread.cpp: Ditto.
        * rendering/RenderThemeEfl.cpp: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.
        * rendering/style/SVGRenderStyle.h: Ditto.
        * svg/SVGTRefElement.cpp: Ditto.

        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::XMLErrors): Take a reference and initialize data member
        in class definition.
        (WebCore::createXHTMLParserErrorHeader): Take a reference, and mostly use
        specific create functions instead of createElement.
        (WebCore::XMLErrors::insertErrorMessageBlock): Ditto.
        * xml/XMLErrors.h: Updated for above.

        * xml/XMLTreeViewer.cpp: Removed include of ExceptionCodePlaceholder.h.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError): Pass a reference.

        * xml/parser/XMLDocumentParserLibxml2.cpp: Removed include of
        ExceptionCodePlaceholder.h.

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Clean up a couple of macOS *SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=164687

        Reviewed by Sam Weinig.

        * platform/spi/cocoa/NSTouchBarSPI.h: Replaced hardcoded strings with global declarations.
        * platform/spi/mac/NSSpellCheckerSPI.h: Addressed FIXME by importing private header, and removed declarations
          that already appear in the SDK.

2016-11-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        The main content heuristic should be robust when handling large media elements
        https://bugs.webkit.org/show_bug.cgi?id=164676
        <rdar://problem/29211503>

        Reviewed by Eric Carlson.

        Handles integer overflow gracefully when performing the main content check for very large media elements. If the
        heuristic comes across such an element, it will now bail early and reject the video as main content. Also adds a
        new API test: VideoControlsManager.VideoControlsManagerPageWithEnormousVideo.

        * html/MediaElementSession.cpp:
        (WebCore::isElementRectMostlyInMainFrame):

2016-11-12  Chris Dumez  <cdumez@apple.com>

        Speed up setting attributes of input elements of type 'text'
        https://bugs.webkit.org/show_bug.cgi?id=164674

        Reviewed by Ryosuke Niwa.

        Speed up setting attributes of input elements of type 'text' by calling
        updateInnerTextValue() only when needed. It was previously called
        whenever an attribute was set, no matter it could impact its text value
        or not.

        No new tests, no Web-exposed behavior change.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/InputType.cpp:
        (WebCore::InputType::attributeChanged):
        * html/InputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attributeChanged):
        * html/TextFieldInputType.h:

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix the 32-bit build.

        * platform/mac/WebPlaybackControlsManager.mm:

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix the 32-bit build.

        * platform/mac/WebPlaybackControlsManager.h:

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * platform/mac/WebPlaybackControlsManager.h: Declared conformance to
          AVFunctionBarPlaybackControlsControlling, which is expected in WebKit::WebViewImpl.
          Added ivar.
        * platform/mac/WebPlaybackControlsManager.mm:
          Synthesize seekToTime property needed for AVFunctionBarPlaybackControlsControlling
          conformance.
        (-[WebPlaybackControlsManager isSeeking]): Implement this
          AVFunctionBarPlaybackControlsControlling method.
        (-[WebPlaybackControlsManager seekToTime:toleranceBefore:toleranceAfter:]): Ditto.

2016-11-12  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * platform/spi/cocoa/NSTouchBarSPI.h: Removed duplicate @interface declarations.

2016-11-12  Frederic Wang  <fwang@igalia.com>

        Ensure MathML render tree are clean by the end of FrameView::layout().
        https://bugs.webkit.org/show_bug.cgi?id=162824

        Reviewed by Darin Adler.

        clearNeedsLayout is not called during the layout of invalid MathML markup. We introduce a new
        helper function to perform proper layout of such markup and we now call it from the various
        MathML layoutBlock functions. Additionally, we ensure that the preferred width is dirty after
        computation in RenderMathMLScripts::computePreferredLogicalWidths.

        Test: mathml/invalid-markup.html

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::layoutInvalidMarkup): Helper function to layout invalid markup.
        * rendering/mathml/RenderMathMLBlock.h: Declare layoutInvalidMarkup.
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layoutBlock): Call layoutInvalidMarkup.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::computePreferredLogicalWidths): Set the preferred width dirty
        after computation to avoid that it is computed again and again.
        (WebCore::RenderMathMLScripts::layoutBlock): Call layoutInvalidMarkup.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layoutBlock): Ditto.

2016-11-12  Frederic Wang  <fwang@igalia.com>

        Remove RenderMathMLOperator::shouldAllowStretching
        https://bugs.webkit.org/show_bug.cgi?id=164313

        Reviewed by Darin Adler.

        RenderMathMLOperator::shouldAllowStretching is an old function from early implementations of
        MathML. Its name is now confusing since it also includes non-stretchy large operators.
        Moreover, it is not really useful and is actually only used by two functions: useMathOperator
        and updateMathOperator. The former is almost equivalent and is used as a replacement of
        shouldAllowStretching everywhere else. We rewrite the two remaining calls with the finer
        test functions isStretchy() and isLargeOperatorInDisplayStyle().

        No new tests, behavior unchanged.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateMathOperator): Reorder the conditionals to avoid the
        use of RenderMathMLOperator::shouldAllowStretching and match useMathOperator.
        (WebCore::RenderMathMLOperator::useMathOperator): Rewrite shouldAllowStretching() using
        isStretchy() and isLargeOperatorInDisplayStyle().
        (WebCore::RenderMathMLOperator::shouldAllowStretching): Deleted.
        * rendering/mathml/RenderMathMLOperator.h: Remove declaration of shouldAllowStretching.

2016-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Use #pragma once in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=164373

        Reviewed by Darin Adler.

        * Modules/*.h:
        * crypto/*.h:
        * cssjit/*.h:
        * editing/*.h:
        * fileapi/*.h:
        * history/*.h:
        * loader/*.h:
        * mathml/*.h:
        * page/*.h:
        * replay/*.h:
        * storage/*.h:
        * xml/*.h:

        * editing/FrameSelection.cpp:
        * loader/ResourceLoadStatisticsStore.cpp:
        Remove unused LOG and DEBUG defines.

2016-11-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Follow-up: fix the OpenSource build on Mac after r208642
        https://bugs.webkit.org/show_bug.cgi?id=164677

        Reviewed by Ryosuke Niwa.

        The playbackControlsController property should also be `assign`.

        * platform/spi/cocoa/AVKitSPI.h:

2016-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        SPI imports in AVKitSPI.h should be guarded by USE(APPLE_INTERNAL_SDK)
        https://bugs.webkit.org/show_bug.cgi?id=164672

        Reviewed by Dan Bernstein.

        Fixes the OpenSource build when ENABLE(WEB_PLAYBACK_CONTROLS_MANAGER) is on.

        * platform/spi/cocoa/AVKitSPI.h: Add USE(APPLE_INTERNAL_SDK) guards around AVKit function bar SPI headers.
        Additionally, define AVFunctionBarPlaybackControlsProvider in the case where AVKit SPI is unavailable.

2016-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        event.composedPath() does not include window
        https://bugs.webkit.org/show_bug.cgi?id=164609
        <rdar://problem/29210383>

        Reviewed by Antti Koivisto.

        Fixed the bug by including WindowContext be a part of the regular EventPath. This also simplifies
        dispatchEventInDOM which used to had a special logic for dispatching an event on the window.

        Also fixed a bug in EventDispatcher::dispatchEvent that event.target would be nullptr when an event was
        dispatched inside a disconnected shadow tree or prevented from propagating to the document tree.
        Preserve the final target by simply saving event.target() prior to invoking the default event handler instead.

        Test: fast/shadow-dom/event-path-with-window.html

        * dom/EventDispatcher.cpp:
        (WebCore::WindowEventContext): Deleted. Moved to EventPath.cpp.
        (WebCore::dispatchEventInDOM): Removed the code for WindowContext. The generic event dispatching logic
        will do the same work now.
        (WebCore::EventDispatcher::dispatchEvent): Restore the original target instead of using that of WindowContext.
        * dom/EventPath.cpp:
        (WebCore::WindowEventContext): Moved from EventDispatcher.cpp. Also made it a subclass of EventContext.
        (WebCore::WindowEventContext::handleLocalEvents): Added.
        (WebCore::EventPath::EventPath): When the parent's nullptr, check if the current node is Document. If it is,
        follow https://dom.spec.whatwg.org/#interface-document where it says:
        "A document’s get the parent algorithm, given an event, returns null if event’s type attribute value is 'load'
         or document does not have a browsing context, and the document’s associated Window object otherwise."
        (WebCore::EventPath::setRelatedTarget): Skip over WindowContext.
        (WebCore::EventPath::retargetTouch): Ditto.
        (WebCore::EventPath::computePathUnclosedToTarget): When the target is DOMWindow, use its document as the target.
        Also, include any event target that is not a node in the event path.

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support all the correct blend modes
        https://bugs.webkit.org/show_bug.cgi?id=164669

        Reviewed by Dean Jackson.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-11-11  Alex Christensen  <achristensen@webkit.org>

        Use SecurityOriginData as keys in StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=159834
        <rdar://problem/27346948>

        Reviewed by Brady Eidson.

        No change in behavior.

        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::SecurityOriginData):
        (WebCore::SecurityOriginData::isEmpty):
        (WebCore::SecurityOriginData::isHashTableDeletedValue):
        (WebCore::SecurityOriginDataHashTraits::isEmptyValue):
        (WebCore::SecurityOriginDataHash::hash):
        (WebCore::SecurityOriginDataHash::equal):
        Add some hash functions so a SecurityOriginData can be used as a key in a HashMap.

2016-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Hovering over a slotted Text node clears hover state
        https://bugs.webkit.org/show_bug.cgi?id=164002
        <rdar://problem/29040471>

        Reviewed by Simon Fraser.

        The bug was caused by HitTestResult::innerElement returning the parent element of a Text node without
        taking the shadow root or slots into account. For hit testing, we always want to use the "flat tree"
        or "composed tree" (imprecisely but close enough in this case).

        Fixed the bug by making HitTestResult::innerElement use parentNodeInComposedTree. Also renamed it to
        HitTestResult::targetElement to be consistent with HitTestResult::targetNode.

        Tests: fast/shadow-dom/activate-over-slotted-content.html
               fast/shadow-dom/hover-over-slotted-content.html

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * html/MediaElementSession.cpp:
        (WebCore::isMainContentForPurposesOfAutoplay):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleTouchEvent):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::targetElement): Renamed from innerElement.
        Now finds the parent element in the composed tree.
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::innerNode):

2016-11-11  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r208628

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal): Cast pointer arithmetic to
        uint32_t to avoid warning.

2016-11-11  Brent Fulgham  <bfulgham@apple.com>

        Neutered ArrayBuffers are not properly serialized
        https://bugs.webkit.org/show_bug.cgi?id=164647
        <rdar://problem/29213490>

        Reviewed by David Kilzer.

        Correct binding logic to handle ImageBuffers being deserialized from neutered ArrayBuffers.

        Test: fast/canvas/neutered-imagedata.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):

2016-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] autocorrect and autocapitalize attributes do not work in contenteditable elements
        https://bugs.webkit.org/show_bug.cgi?id=164538
        <rdar://problem/8418711>

        Reviewed by Ryosuke Niwa.

        Adds autocorrect and autocapitalize getters and setters to HTMLElements. These check the `autocorrect` and
        `autocapitalize` attributes and return whether or not the element supports autocorrect, and the
        autocapitalization type, respectively. By default, autocorrection is enabled and autocapitalization is enabled
        on the sentence level for elements. Also refactors/renames WebAutocapitalizeType so that in WebCore, we deal
        solely with AutocapitalizeTypes and WebKit1 converts from AutocapitalizeType to WebAutocapitalizeType as needed
        for UIKit.

        Tests: fast/events/ios/contenteditable-autocapitalize.html
               fast/events/ios/contenteditable-autocorrect.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/Autocapitalize.cpp:
        (WebCore::autocapitalizeTypeForAttributeValue):
        (WebCore::stringForAutocapitalizeType):
        * html/Autocapitalize.h:
        * html/AutocapitalizeTypes.h: Renamed from Source/WebCore/html/WebAutocapitalize.h.

        Move WebAutocapitalizeType into AutocapitalizeTypes.h as simply AutocapitalizeType.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::autocapitalize):
        (WebCore::HTMLElement::autocapitalizeType):
        (WebCore::HTMLElement::setAutocapitalize):
        (WebCore::HTMLElement::shouldAutocorrect):
        (WebCore::HTMLElement::setAutocorrect):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::autocorrect):
        * html/HTMLElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::shouldAutocorrect):
        (WebCore::HTMLFormControlElement::autocapitalizeType):
        (WebCore::HTMLFormControlElement::autocorrect): Deleted.
        (WebCore::HTMLFormControlElement::setAutocorrect): Deleted.
        (WebCore::HTMLFormControlElement::autocapitalize): Deleted.
        (WebCore::HTMLFormControlElement::setAutocapitalize): Deleted.

        Fold autocorrect/autocapitalize member functions into HTMLElement and remove element-specific code in
        HTML(FormControl|Form)Element.cpp.

        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::shouldAutocorrect):
        (WebCore::HTMLFormElement::autocorrect): Deleted.
        (WebCore::HTMLFormElement::setAutocorrect): Deleted.
        (WebCore::HTMLFormElement::autocapitalizeType): Deleted.
        (WebCore::HTMLFormElement::autocapitalize): Deleted.
        (WebCore::HTMLFormElement::setAutocapitalize): Deleted.
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.idl:

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for paths as basic shapes.
        https://bugs.webkit.org/show_bug.cgi?id=164661

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapePath):
        (WebCore::consumeBasicShape):

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support margin-box in shape parsing.
        https://bugs.webkit.org/show_bug.cgi?id=164658

        Reviewed by Sam Weinig.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapeOrBox):

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for -webkit-mask-source-type
        https://bugs.webkit.org/show_bug.cgi?id=164657

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitMaskSourceType):
        (WebCore::consumeBackgroundComponent):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-11  Antti Koivisto  <antti@apple.com>

        Updating class name doesn't update the slotted content's style
        https://bugs.webkit.org/show_bug.cgi?id=164577
        <rdar://problem/29205873>

        Reviewed by Ryosuke Niwa.

        Test: fast/shadow-dom/css-scoping-slotted-invalidation.html

        Teach style invalidation code for attribute/class/id mutations about slotted rules.

        * dom/ShadowRoot.cpp:
        (WebCore::assignedShadowRootsIfSlotted):

            Helper to find all assigned shadow roots (there may be more than one if slots are assigned to slots).

        * dom/ShadowRoot.h:
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByAttributeChange):
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::mayBeAffectedBySlottedRules):
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostStyle): Deleted.
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::mayBeAffectedBySlottedRules):
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostStyle): Deleted.
        * style/ClassChangeInvalidation.h:
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::mayBeAffectedBySlottedRules):
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostStyle): Deleted.
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement):

            Fix a bug in style sharing where we were checking wrong element for host rules.
            Tested by the included test too (the last empty div).

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the spring animation timing function
        https://bugs.webkit.org/show_bug.cgi?id=164654

        Reviewed by Dean Jackson.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSpringFunction):
        (WebCore::consumeAnimationTimingFunction):
        (WebCore::consumeAnimationValue):

2016-11-11  Chris Dumez  <cdumez@apple.com>

        WorkerGlobalScope's indexedDB property should be on the prototype, not the instance
        https://bugs.webkit.org/show_bug.cgi?id=164644

        Reviewed by Brady Eidson.

        WorkerGlobalScope's indexedDB property should be on the prototype, not the instance
        as per:
        - https://heycam.github.io/webidl/#es-attributes

        This is because WorkerGlobalScope is not marked as [Global] or [PrimaryGlobal] in
        the IDL:
        - https://html.spec.whatwg.org/multipage/workers.html#the-workerglobalscope-common-interface

        DedicatedWorkerGlobalScope is the one that is marked as [Global] and that should
        have its attributes on the instance:
        - https://html.spec.whatwg.org/multipage/workers.html#dedicated-workers-and-the-dedicatedworkerglobalscope-interface

        We were getting this mostly right, except for runtime-enabled attributes / operations
        which would end up on the instance instead of the prototype. This patch adds support
        for [PrimaryGlobal] / [Global] IDL extended attributes which determine the location
        of properties. It also improves support for runtime-enabled properties so that they
        can now be on either the instance or the prototype, exactly as if they were not
        runtimed-enabled.

        This gives us 100% pass rate on:
        - http://w3c-test.org/IndexedDB/interfaces.worker.html

        No new tests, updated existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsGlobalOrPrimaryGlobalInterface):
        (InterfaceRequiresAttributesOnInstance):
        (AttributeShouldBeOnInstance):
        (OperationShouldBeOnInstance):
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceName::finishCreation):
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::finishCreation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactions::finishCreation):
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifier::finishCreation):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::finishCreation):
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::finishCreation):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::finishCreation):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscore::finishCreation):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterable::finishCreation):
        * bindings/scripts/test/JS/JSTestIterable.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministic::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::finishCreation):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::finishCreation):
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/TestGlobalObject.idl:
        * page/DOMWindow.idl:
        * workers/DedicatedWorkerGlobalScope.idl:

2016-11-11  Antti Koivisto  <antti@apple.com>

        Shadow DOM: Toggling class in `.class ::slotted(*)` does not trigger style recalc
        https://bugs.webkit.org/show_bug.cgi?id=160864

        Reviewed by Ryosuke Niwa.

        Also fix similar issue with ::host

        Test: fast/shadow-dom/css-scoping-host-and-slotted-context-invalidation.html

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateIfNeeded):

            If we have ::slotted rules and encounter a <slot>, invalidate the slotted host children.

        (WebCore::StyleInvalidationAnalysis::invalidateStyle):

            Invalidate the shadow host if we have ::host rules.

        * css/StyleInvalidationAnalysis.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):

            Fix a bug where it was possible to mutate stylesheets in the inline stylesheet cache.
            The included test covers this.

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

            Handle the full invalidation case.

2016-11-11  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
        https://bugs.webkit.org/show_bug.cgi?id=164641

        Reviewed by Alex Christensen.

        No new tests (Covered by at least 3 existing tests).

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::maybeCloseInServer):

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::databaseConnectionPendingClose):
        * Modules/indexeddb/client/IDBConnectionProxy.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionPendingClose):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::databaseConnectionPendingClose):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/ServerOpenDBRequest.cpp:
        (WebCore::IDBServer::ServerOpenDBRequest::maybeNotifyRequestBlocked):
        (WebCore::IDBServer::ServerOpenDBRequest::notifyRequestBlocked): Deleted.
        * Modules/indexeddb/server/ServerOpenDBRequest.h:
        (WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedBlocked): Deleted.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::allConnectionsAreClosedOrClosing):
        (WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionPendingCloseFromClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionIsClosing):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::databaseConnectionPendingClose):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix time unit parsing
        https://bugs.webkit.org/show_bug.cgi?id=164649

        Reviewed by Dean Jackson.
        
        Make sure that a unitless value gets changed to milliseconds properly.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeTime):

2016-11-11  Keith Rollin  <krollin@apple.com>

        Reduce number of platformMemoryUsage calls
        https://bugs.webkit.org/show_bug.cgi?id=164375

        Reviewed by Andreas Kling.

        platformMemoryUsage was being called all the time while logging the
        results of various memory-purging operations. This logging is
        subordinate to the needs of performance and so can be removed.
        Behavior is now as follows:

        - If memory-pressure relief logging is enabled, logging includes
        memory usage information. On Cocoa, this logging is disabled by
        default but can be enabled by setting LogMemoryJetsamDetails in
        `defaults`.
        - Otherwise, if release-logging is enabled (as it is on Cocoa),
        abbreviated memory pressure relief logging is performed: the logging
        lines are printed but without any memory usage information.
        - Otherwise, no logging is performed.

        No new tests -- no tests for logging.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::ReliefLogger::logMemoryUsageChange):
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::ReliefLogger::ReliefLogger):
        (WebCore::MemoryPressureHandler::ReliefLogger::~ReliefLogger):

2016-11-11  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] defer resolution of getUserMedia promise made in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=164643
        <rdar://problem/29048317>

        Reviewed by Brady Eidson.

        Test: fast/mediastream/get-user-media-background-tab.html

        Do not start producing data when the document does not allow media
        to start playing. Instead, register with the document for a callback 
        when playback is allowed and start then.
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::mediaCanStart):
        (WebCore::MediaStream::startProducingData):
        (WebCore::MediaStream::stopProducingData):
        (WebCore::MediaStream::pageMutedStateDidChange):
        * Modules/mediastream/MediaStream.h:

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::mediaCanStart): Deal with API change.
        * Modules/webaudio/AudioContext.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaCanStart): Ditto.
        * html/HTMLMediaElement.h:
        * page/MediaCanStartListener.h:

        * page/Page.cpp:
        (WebCore::Page::takeAnyMediaCanStartListener): Return the listener and document.
        (WebCore::Page::setCanStartMedia): Pass the document to the listener.
        * page/Page.h:

2016-11-11  Zalan Bujtas  <zalan@apple.com>

        RenderFlowThread's containing block cache should be invalidated before calling styleDidChange.
        https://bugs.webkit.org/show_bug.cgi?id=164646

        Reviewed by Simon Fraser.

        We have to invalidate the containing block cache for RenderFlowThreads soon after the containing block context
        changes. Invalidating it in RenderBlock::styleDidChange is too late since we might run some code in some
        of the subclasses that use this stale containing block cache.  

        No known behaviour change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange): This change could trigger double invalidation.
        However running this code twice shouldn't impact performance greatly.
        (WebCore::RenderBlock::resetFlowThreadContainingBlockAndChildInfoIncludingDescendants):
        (WebCore::RenderBlock::invalidateFlowThreadContainingBlockIncludingDescendants): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setStyle): We don't need to call the invalidation from initializeStyle(), since
        we don't yet have cache at that point.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):

2016-11-11  Darin Adler  <darin@apple.com>

        Move Node from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164515

        Reviewed by Sam Weinig.

        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectElementIndexSetter): Call remove instead of removeByIndex.
        Was renamed now that there is no conflict.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore): Use ExceptionOr.
        (WebCore::JSNode::replaceChild): Ditto.
        (WebCore::JSNode::removeChild): Ditto.
        (WebCore::JSNode::appendChild): Ditto.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr): Take a reference.
        (WebCore::Attr::create): Ditto.
        (WebCore::Attr::createTextChild): Use a Ref.
        (WebCore::Attr::setPrefix): Use ExceptionOr.
        (WebCore::Attr::setNodeValue): Ditto.
        (WebCore::Attr::attachToElement): Take a reference.
        * dom/Attr.h: Updated for above. Also made setPrefix private.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setNodeValue): Use ExceptionOr.
        * dom/CharacterData.h: Updated for the above.

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent): Use ExceptionOr.
        (WebCore::checkAcceptChild): Ditto.
        (WebCore::checkAcceptChildGuaranteedNodeTypes): Ditto.
        (WebCore::ContainerNode::ensurePreInsertionValidity): Ditto.
        (WebCore::checkPreReplacementValidity): Ditto.
        (WebCore::ContainerNode::insertBefore): Ditto.
        (WebCore::ContainerNode::replaceChild): Ditto.
        (WebCore::ContainerNode::removeChild): Ditto.
        (WebCore::ContainerNode::appendChild): Ditto.
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck): Ditto.
        (WebCore::ContainerNode::cloneChildNodes): Ditto.
        (WebCore::ContainerNode::append): Ditto.
        (WebCore::ContainerNode::prepend): Ditto.
        * dom/ContainerNode.h: Updated for above changes.

        * dom/Document.cpp:
        (WebCore::Document::setTitle): Removed unneeded ASSERT_NO_EXCEPTION.
        (WebCore::Document::setBodyOrFrameset): Removed unneeded ignored
        exception code.

        * dom/Element.cpp:
        (WebCore::Element::setPrefix): Use ExceptionOr.
        (WebCore::Element::setAttributeNode): Updated for changes to Attr.
        (WebCore::Element::setAttributeNodeNS): Ditto.
        (WebCore::Element::setOuterHTML): Use ExceptionOr.
        (WebCore::Element::ensureAttr): Updated for changes to Attr.
        (WebCore::Element::insertAdjacent): Use ExceptionOr.
        * dom/Element.h: Updated for above.

        * dom/Node.cpp:
        (WebCore::Node::setNodeValue): Use ExceptionOr.
        (WebCore::Node::insertBefore): Ditto.
        (WebCore::Node::replaceChild): Ditto.
        (WebCore::Node::removeChild): Ditto.
        (WebCore::Node::appendChild): Ditto.
        (WebCore::Node::convertNodesOrStringsIntoNode): Ditto.
        (WebCore::Node::before): Ditto.
        (WebCore::Node::after): Ditto.
        (WebCore::Node::replaceWith): Ditto.
        (WebCore::Node::remove): Ditto.
        (WebCore::Node::cloneNodeForBindings): Ditto.
        (WebCore::Node::setPrefix): Ditto.
        (WebCore::Node::checkSetPrefix): Ditto.
        (WebCore::Node::setTextContent): Ditto.
        * dom/Node.h: Updated for above.
        * dom/Node.idl: Use non-legacy exceptions.

        * dom/Range.cpp:
        (WebCore::Range::processContents): Use ExceptionOr.
        (WebCore::processContentsBetweenOffsets): Ditto.
        (WebCore::processNodes): Ditto.
        (WebCore::processAncestorsAndTheirSiblings): Ditto.
        (WebCore::Range::insertNode): Ditto.
        (WebCore::Range::surroundContents): Ditto.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Use ExceptionOr.
        (WebCore::Text::replaceWholeText): Removed unneeded IGNORE_EXCEPTION.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply): Removed unneeded IGNORE_EXCEPTION.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNewDefaultParagraphElementAt): Ditto.

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertNode): Use ExceptionOr.

        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Removed unneeded IGNORE_EXCEPTION.
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply): Ditto.
        (WebCore::MergeIdenticalElementsCommand::doUnapply): Use ExceptionOr.

        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doUnapply): Removed unneeded IGNORE_EXCEPTION.
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren): Removed unneeded
        ASSERT_NO_EXCEPTION.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNode): Ditto.
        (WebCore::ReplacementFragment::insertNodeBefore): Ditto.
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): Ditto.
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment): Ditto.
        (WebCore::ReplaceSelectionCommand::insertAsListItems): Ditto.

        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply): Use ExceptionOr.
        (WebCore::SplitElementCommand::doUnapply): Removed unneeded IGNORE_EXCEPTION.

        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::insertText1AndTrimText2): Use ExceptionOr.

        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply): Removed unneeded
        IGNORE_EXCEPTION.
        (WebCore::WrapContentsInDummySpanCommand::doUnapply): Ditto.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::styleForSelectionStart): Removed unneeded ASSERT_NO_EXCEPTION
        and IGNORE_EXCEPTION.
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement): Ditto.
        * editing/markup.cpp:
        (WebCore::fillContainerFromString): Ditto.
        (WebCore::createFragmentFromText): Ditto.
        (WebCore::removeElementFromFragmentPreservingChildren): Ditto.
        (WebCore::replaceChildrenWithFragment): Use ExceptionOr.
        (WebCore::replaceChildrenWithText): Ditto.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::addFragment): Removed unneeded exception
        ignoring code.
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto.
        (WebCore::Editor::setTextAsChildOfElement): Ditto.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree): Removed unneeded
        ASSERT_NO_EXCEPTION.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::appendEntry): Removed unneeded
        IGNORE_EXCEPTION.
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename): Ditto.
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate): Ditto.
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument): Ditto.
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree): Ditto.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setText): Removed unneeded ASSERT_NO_EXCEPTION.
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot): Ditto.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::textToFragment): Use ExceptionOr.
        (WebCore::HTMLElement::setOuterText): Ditto.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaControls): Ditto.
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot): Ditto.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::createForJSConstructor): Use ExceptionOr.
        (WebCore::HTMLOptionElement::setText): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.

        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::remove): Call remove, not removeByIndex,
        since we were able to change the name.

        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::setTextContentInternal): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didAddUserAgentShadowRoot): Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText): Ditto.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add): Use ExceptionOr.
        (WebCore::HTMLSelectElement::remove): Renamed from removeByIndex since
        there is no conflict with remove any more.
        (WebCore::HTMLSelectElement::setOption): Call remove.
        * html/HTMLSelectElement.h: Updated for above.
        * html/HTMLSelectElement.idl: Got rid of ImplementedAs=removeByIndex.

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::HTMLTableElement): Initialize data members in
        class definition instead of here.
        (WebCore::HTMLTableElement::caption): Simplified using childrenOfType.
        (WebCore::HTMLTableElement::setCaption): Use ExceptionOr.
        (WebCore::HTMLTableElement::setTHead): Ditto.
        (WebCore::HTMLTableElement::setTFoot): Ditto.
        (WebCore::HTMLTableElement::deleteTFoot): Removed unneeded ASSERT_NO_EXCEPTION
        and IGNORE_EXCEPTION.
        (WebCore::HTMLTableElement::createTBody): Ditto.
        (WebCore::HTMLTableElement::deleteCaption): Ditto.
        (WebCore::HTMLTableElement::insertRow): Use ExceptionOr.
        * html/HTMLTableElement.h: Updated for above.

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell): Use ExceptionOr.
        (WebCore::HTMLTableRowElement::deleteCell): Ditto.
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow): Ditto.
        (WebCore::HTMLTableSectionElement::deleteRow): Ditto.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::didAddUserAgentShadowRoot): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.
        (WebCore::HTMLTextAreaElement::setDefaultValue): Ditto.
        (WebCore::HTMLTextAreaElement::updatePlaceholderText): Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue): Ditto.
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText): Ditto.
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure): Ditto.
        (WebCore::MediaDocument::replaceMediaElementTimerFired): Ditto.
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Ditto.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree): Ditto.
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::createShadowSubtree): Ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree): Ditto.
        (WebCore::TextFieldInputType::updatePlaceholderText): Ditto.
        (WebCore::TextFieldInputType::createContainer): Ditto.
        (WebCore::TextFieldInputType::createAutoFillButton): Ditto.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer): Ditto.
        (WebCore::ValidationMessage::buildBubbleTree): Ditto.
        (WebCore::ValidationMessage::deleteBubbleTree): Ditto.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Ditto.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay): Ditto.

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::MediaControlsApple): Initialize data members
        in class definition instead of here.
        (WebCore::MediaControlsApple::tryCreateControls): Use ExceptionOr.
        * html/shadow/MediaControlsApple.h: Updated for above.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::copyWebVTTNodeToDOMTree): Removed unneeded ASSERT_NO_EXCEPTION
        and IGNORE_EXCEPTION.
        (WebCore::VTTCue::getDisplayTree): Ditto.
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::appendTextTrackCueBox): Ditto.

        * inspector/DOMEditor.cpp: Use ExceptionOr in action classes.
        (WebCore::DOMEditor::DOMEditor): Take a reference.
        (WebCore::DOMEditor::insertBefore): Use ExceptionOr.
        (WebCore::DOMEditor::removeChild): Ditto.
        (WebCore::DOMEditor::setAttribute): Ditto.
        (WebCore::DOMEditor::removeAttribute): Ditto.
        (WebCore::DOMEditor::setOuterHTML): Ditto.
        (WebCore::DOMEditor::replaceWholeText): Ditto.
        (WebCore::DOMEditor::replaceChild): Ditto.
        (WebCore::DOMEditor::setNodeValue): Ditto.
        (WebCore::populateErrorString): Ditto.
        * inspector/DOMEditor.h: Updated for above changes.

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument): Updated to use references,
        to use ExceptionOr, and to use a struct without a constructor for Digest.
        (WebCore::DOMPatchSupport::DOMPatchSupport): Ditto.
        (WebCore::DOMPatchSupport::patchNode): Ditto.
        (WebCore::DOMPatchSupport::innerPatchNode): Ditto.
        (WebCore::DOMPatchSupport::diff): Ditto.
        (WebCore::DOMPatchSupport::innerPatchChildren): Ditto.
        (WebCore::DOMPatchSupport::createDigest): Ditto.
        (WebCore::DOMPatchSupport::insertBeforeAndMarkAsUsed): Ditto.
        (WebCore::DOMPatchSupport::removeChildAndMoveToNew): Ditto.
        (WebCore::DOMPatchSupport::markNodeAsUsed): Ditto.
        * inspector/DOMPatchSupport.h: Updated for above.

        * inspector/InspectorCSSAgent.cpp: Use ExceptionOr in the action classes.
        (WebCore::InspectorCSSAgent::getStyleSheetText): Use ExceptionOr.
        (WebCore::InspectorCSSAgent::setStyleSheetText): Ditto.
        (WebCore::InspectorCSSAgent::setStyleText): Ditto.
        (WebCore::InspectorCSSAgent::setRuleSelector): Ditto.
        (WebCore::InspectorCSSAgent::createInspectorStyleSheetForDocument): Ditto.
        (WebCore::InspectorCSSAgent::addRule): Ditto.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend): Ditto.
        (WebCore::InspectorDOMAgent::setAttributeValue): Ditto.
        (WebCore::InspectorDOMAgent::setAttributesAsText): Ditto.
        (WebCore::InspectorDOMAgent::removeAttribute): Ditto.
        (WebCore::InspectorDOMAgent::setOuterHTML): Ditto.
        (WebCore::InspectorDOMAgent::setNodeValue): Ditto.
        (WebCore::InspectorDOMAgent::undo): Ditto.
        (WebCore::InspectorDOMAgent::redo): Ditto.

        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::Action::Action): Moved to header.
        (WebCore::InspectorHistory::Action::~Action): Ditto.
        (WebCore::InspectorHistory::Action::toString): Ditto.
        (WebCore::InspectorHistory::Action::isUndoableStateMark): Ditto.
        (WebCore::InspectorHistory::Action::mergeId): Ditto.
        (WebCore::InspectorHistory::Action::merge): Ditto.
        (WebCore::InspectorHistory::InspectorHistory): Deleted.
        (WebCore::InspectorHistory::~InspectorHistory): Deleted.
        (WebCore::InspectorHistory::perform): Updated exception handling.
        (WebCore::InspectorHistory::markUndoableState): Ditto.
        (WebCore::InspectorHistory::undo): Ditto.
        (WebCore::InspectorHistory::redo): Ditto.
        * inspector/InspectorHistory.h: Updated for above.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setDocumentContent): Use reference.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::text): Use ExceptionOr and renamed from
        getText since this now has a return value.
        (WebCore::InspectorStyle::populateAllProperties): Updated for above.
        (WebCore::InspectorStyle::setText): Use ExceptionOr.
        (WebCore::InspectorStyleSheet::setText): Ditto.
        (WebCore::InspectorStyleSheet::ruleSelector): Ditto.
        (WebCore::InspectorStyleSheet::setRuleSelector): Ditto.
        (WebCore::InspectorStyleSheet::addRule): Ditto.
        (WebCore::InspectorStyleSheet::deleteRule): Ditto.
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet): Ditto.
        (WebCore::InspectorStyleSheet::buildObjectForStyle): Ditto.
        (WebCore::InspectorStyleSheet::setStyleText): Ditto.
        (WebCore::InspectorStyleSheet::text): Use ExceptionOr and renamed.
        (WebCore::InspectorStyleSheet::checkPageStyleSheet): Deleted.
        Just wrote this code inline in each place this was called since it's
        just a single null check.
        (WebCore::InspectorStyleSheetForInlineStyle::text): Use ExceptionOr
        and renamed.
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText): Ditto.
        (WebCore::InspectorStyle::getText): Deleted.
        * inspector/InspectorStyleSheet.h: Updated for above changes.

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Removed unneeded
        ASSERT_NO_EXCEPTION and IGNORE_EXCEPTION.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument): Ditto.
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText): Ditto.
        (WebCore::SVGTRefElement::detachTarget): Ditto.
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView): Ditto.

2016-11-10  Jiewen Tan  <jiewen_tan@apple.com>

        Rename CryptoKeyUsage to CryptoKeyUsageBitmap and CryptoKey::Usage to CryptoKeyUsage
        https://bugs.webkit.org/show_bug.cgi?id=164624
        <rdar://problem/29210140>

        Reviewed by Brent Fulgham.

        This patch allows IDLType CryptoKeyUsage to be shared among different IDLs, i.e. CryptoKey.idl,
        SubtleCrypto.idl and JsonWebKey.idl such that it can simplify the customized binding codes.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::toCryptoKeyUsageBitmap):
        (WebCore::cryptoKeyUsageBitmapFromJSValue):
        (WebCore::toKeyData):
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        (WebCore::jsSubtleCryptoFunctionImportKeyPromise):
        (WebCore::cryptoKeyUsageFromString): Deleted.
        (WebCore::cryptoKeyUsagesFromJSValue): Deleted.
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * crypto/CryptoAlgorithm.cpp:
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKey.idl:
        * crypto/CryptoKeySerialization.h:
        * crypto/CryptoKeyUsage.h:
        * crypto/CryptoKeyUsage.idl: Added.
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
        * crypto/JsonWebKey.h:
        * crypto/JsonWebKey.idl:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * 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:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/keys/CryptoKeyAES.cpp:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix basic shape parsing
        https://bugs.webkit.org/show_bug.cgi?id=164645

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShape):

2016-11-11  Zalan Bujtas  <zalan@apple.com>

        RenderFlowThread::removeLineRegionInfo shouldn't call HashMap::contains before HashMap::remove
        https://bugs.webkit.org/show_bug.cgi?id=164639

        Reviewed by Simon Fraser.

        Also instead of asserting that the incoming renderer is not nullptr, we could just pass a reference in. 

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::invalidateFlowThreadContainingBlockIncludingDescendants):
        (WebCore::canComputeRegionRangeForBox):
        (WebCore::RenderBlock::computeRegionRangeForBoxChild):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasRegionRangeInFlowThread):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeFromRenderFlowThreadIncludingDescendants):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::removeLineRegionInfo):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::hasCachedRegionRangeForBox):
        (WebCore::RenderFlowThread::computedRegionRangeForBox):
        (WebCore::RenderFlowThread::checkLinesConsistency):
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::setRegionRangeForBox):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderNamedFlowThread::removeFlowChildInfo):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::removeRenderBoxRegionInfo):
        * rendering/RenderRegion.h:

2016-11-11  Megan Gardner  <megan_gardner@apple.com>

        [Cocoa] Support wide gamut for Drag Image UI
        https://bugs.webkit.org/show_bug.cgi?id=164490

        Reviewed by Tim Horton.

        Fixed an error in the support define for wide gamut on Mac.

        The testing infrastructure to test this does not exist, and will be landing in another patch.

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

2016-11-11  Beth Dakin  <bdakin@apple.com>

        Get touch bar code building for open source builds
        https://bugs.webkit.org/show_bug.cgi?id=164610

        Reviewed by Wenson Hsieh.

        * config.h:

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix SVG markers and colors
        https://bugs.webkit.org/show_bug.cgi?id=164640

        Reviewed by Dean Jackson.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSVGColor):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseShorthand):

2016-11-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Composition state should be cleared when changing focus to a non-editable element
        https://bugs.webkit.org/show_bug.cgi?id=164595
        <rdar://problem/26412551>

        Reviewed by Enrica Casucci.

        When canceling or confirming a composition, always ensure that the composition node and composition underlines
        being tracked are reset, even when there is no current selection. This prevents us from getting into a bad state
        where focus has already changed from an element with a pending composition to a different element and the
        composition is canceled, but the Editor still maintains its composition node.

        Test: editing/input/focus-change-with-marked-text.html

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

2016-11-11  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-svg-shadow
        https://bugs.webkit.org/show_bug.cgi?id=164637

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-11  Alejandro G. Castro  <alex@igalia.com>

        [WebRTC][OpenWebRTC] Implement device permissions handling solution for owr backend in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=164010

        Reviewed by Philippe Normand.

        Move the capture of the sources for the OWR backend to the
        WebProcess. In the UI we continue checking if the user allows
        access to the audio and video capture. When device handling is
        added in the future we will need some persistent ID and API to
        pass from the UI process to the Web process.

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        Add the proper audio and video sources to allow the UI message to
        be properly rendered. We are adding the specific devices, even
        though the dialog just asks for general audio and video. There was
        already a FIXME about improving this.
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): We are
        capturing the devices here when the allowed message arrived from
        the UI process. We store the completion handler to use it later
        when the aync owr API finishes capture devices process.
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable): We
        now call the completion handler in this callback called when the
        owr library finishes the capture of the devices. Now this happens
        in the WebProcess for OWR port.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        Add an attribute to store the completion handler.

2016-11-11  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] ASSERTION FAILED: !m_gridIsDirty in WebCore::RenderGrid::gridRowCount
        https://bugs.webkit.org/show_bug.cgi?id=163450

        Reviewed by Darin Adler.

        The issue is that in the test case a simplifiedLayout() is performed.
        So in RenderGrid::layoutBlock() we early return and the grid is not populated,
        so the m_gridIsDirty flag is not cleared when we try to check the size of the grid
        in RenderGrid::layoutPositionedObject().

        We should avoid to do a simplified layout if we have to layout
        some positioned grid items and the grid is dirty.

        The problem was not only the ASSERT, but the current behavior was wrong too.
        As we didn't do a proper layout of the grid container, the positioned item
        won't be placed on the expected position. Added tests verifying this.

        Tests: fast/css-grid-layout/grid-positioned-item-dynamic-change.html
               fast/css-grid-layout/grid-simplified-layout-positioned.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::canPerformSimplifiedLayout): Check if we can perform or not
        a simplified layout.
        (WebCore::RenderBlock::simplifiedLayout): Extract initial check
        into canPerformSimplifiedLayout().
        * rendering/RenderBlock.h: Add new header for canPerformSimplifiedLayout().
        * rendering/RenderGrid.cpp: Implement our own version of canPerformSimplifiedLayout()
        to verify that the grid is not dirty if we have to layout some positioned items.
        (WebCore::RenderGrid::canPerformSimplifiedLayout):
        * rendering/RenderGrid.h: Add canPerformSimplifiedLayout() header.

2016-11-11  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: media tracks control support
        https://bugs.webkit.org/show_bug.cgi?id=164618
        <rdar://problem/27989483>

        Reviewed by Dean Jackson.

        We introduce the TracksSupport class to only enable the media tracks button
        in the media controls when text tracks and/or multiple audio tracks are available.

        Tests: media/modern-media-controls/tracks-support/tracks-support-audio-tracks.html
               media/modern-media-controls/tracks-support/tracks-support-no-tracks.html
               media/modern-media-controls/tracks-support/tracks-support-text-tracks.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsIfNeeded):
        * Modules/modern-media-controls/media/tracks-support.js: Added.
        (TracksSupport):
        (TracksSupport.prototype.destroy):
        (TracksSupport.prototype.get control):
        (TracksSupport.prototype.get mediaEvents):
        (TracksSupport.prototype.buttonWasClicked):
        (TracksSupport.prototype.syncControl):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] DOMJIT accessor attribute in IDL should say like DOMJIT=Getter
        https://bugs.webkit.org/show_bug.cgi?id=164632

        Reviewed by Sam Weinig.

        Currently, DOMJIT patchpoint is only allowed for getter in attributes.
        To make it explicit, we use IDL attribute DOMJIT=Getter instead of
        DOMJIT.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/TestDOMJIT.idl:
        * dom/Document.idl:
        * dom/Node.idl:

2016-11-10  Sam Weinig  <sam@webkit.org>

        [SVG] Start moving special casing of SVG out of the bindings - SVGPreserveAspectRatio
        https://bugs.webkit.org/show_bug.cgi?id=164622

        Reviewed by Darin Adler.

        Part 2 of moving special casing of SVG out of the bindings.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        * bindings/scripts/IDLAttributes.txt:
        Allow specifying a different scope for the constants to be declared in.
        This allows us to have only one copy of the constants in the implementation
        of SVGAngle/SVGAngleValue and SVGPreserveAspectRatio/SVGPreserveAspectRatioValue.

        * loader/FrameLoader.cpp:
        * rendering/svg/RenderSVGImage.h:
        Remove unnecessary #include.

        * svg/SVGAngle.h:
        Remove redundant enum declaration.

        * svg/SVGAngle.idl:
        Specify a ConstantsScope of SVGAngleValue.

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateImageViewport):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::preserveAspectRatio):
        (WebCore::PatternAttributes::setPreserveAspectRatio):
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createPreserveAspectRatio):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::preserveAspectRatio):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::parseAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::preserveAspectRatioString):
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        (WebCore::SVGViewSpec::reset):
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGViewSpec.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::computeIntrinsicDimensions):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::createWithImage):
        (WebCore::FEImage::createWithIRIReference):
        * svg/graphics/filters/SVGFEImage.h:
        Replace SVGPreserveAspectRatio usage with SVGPreserveAspectRatioValue.

        * svg/SVGPreserveAspectRatio.cpp: Removed.
        * svg/SVGPreserveAspectRatio.h: Replaced.
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGPreserveAspectRatioValue.cpp: Copied from Source/WebCore/svg/SVGPreserveAspectRatio.cpp.
        * svg/SVGPreserveAspectRatioValue.h: Copied from Source/WebCore/svg/SVGPreserveAspectRatio.h.
        Rename SVGPreserveAspectRatio to SVGPreserveAspectRatioValue and add a new SVGPreserveAspectRatio
        that acts as the binding object. 

2016-11-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Document#body should have DOMJIT patchpoint
        https://bugs.webkit.org/show_bug.cgi?id=164627

        Reviewed by Darin Adler.

        This patch implements document.body accessor. To implement it, we need,

        1. DOM traversing ability from ASM.
        2. Checking HTMLElement.
        3. Checking HTMLElement's localName.

        The above features are already implemented in CSSJIT.
        We extract some of utilities from CSSJIT to share them with DOMJIT.

        Test: js/dom/domjit-accessor-document-body.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToNextAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        (WebCore::SelectorCompiler::jumpIfElementIsNotEmpty):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        (WebCore::SelectorCompiler::testIsElementFlagOnNode): Deleted.
        (WebCore::SelectorCompiler::testIsHTMLFlagOnNode): Deleted.
        * dom/Document.idl:
        * dom/Element.h:
        * dom/QualifiedName.h:
        * domjit/DOMJITAbstractHeapRepository.yaml:
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::branchTestIsElementFlagOnNode):
        (WebCore::DOMJIT::branchTestIsHTMLFlagOnNode):
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::DocumentBodyDOMJIT::checkDOM):
        (WebCore::loadLocalName):
        (WebCore::DocumentBodyDOMJIT::callDOMGetter):

2016-11-10  John Wilander  <wilander@apple.com>

        Remove unused parameter name to fix build error on iOS
        https://bugs.webkit.org/show_bug.cgi?id=163468

        No review.

        No new tests.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Removed parameter name 'pasteboardURL' in unimplemented function.

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

        Speed up HTMLInputElement validation
        https://bugs.webkit.org/show_bug.cgi?id=164603

        Reviewed by Ryosuke Niwa.

        Speed up HTMLInputElement validation by doing 1 virtual function call
        instead of 9 and calling HTMLInputElement::value() only once per
        validation instead of 9 times. Calling value() is expensive because
        of sanitization.

        No new tests, no Web-exposed behavior change.

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fallbackValue):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::isValid):
        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isValid):
        (WebCore::HTMLInputElement::value):
        * html/HTMLInputElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::limitLength):
        * html/ValidityState.idl:

2016-11-10  John Wilander  <wilander@apple.com>

        Add link information to data transfer pasteboard for drag and drop links
        https://bugs.webkit.org/show_bug.cgi?id=163468
        <rdar://problem/20634630>

        Reviewed by Brent Fulgham.

        Test: editing/pasteboard/drag-link-with-data-transfer-adds-trusted-link-to-pasteboard.html
        This test ensures data transfers still work for types 'text' and 'url', i.e. that we don't
        regress in-page use of the drag pasteboard.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
            Now adds trustworthy link information to the drag pasteboard.
        * platform/Pasteboard.h:
            New function declaration Pasteboard::writeTrustworthyWebURLsPboardType.
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Empty, i.e. not implemented.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Empty, i.e. not implemented.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Calls ASSERT_NOT_REACHED() to make sure we don't use this function before we have
            decided on a trustrworthy URL pasteboard type on iOS. Currently not used since we
            don't support drag & drop on iOS.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Writes the given URL to the WebURLsWithTitlesPboardType. This pasteboard type
            serves as a trusted drop source.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
            Empty, i.e. not implemented.

2016-11-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r207182): [iOS] Crash because of passing freed CFDictionaryRef to CG when decoding a sub-sampled large image
        https://bugs.webkit.org/show_bug.cgi?id=164617

        Reviewed by Tim Horton.

        This covered by the test fast/images/image-subsampling.html but it should
        run with --guard-malloc --repeat-each=10 to show the bug or to verify the
        fix.

        imageSourceOptions() returns a non static RetainPtr<CFDictionaryRef> if
        the subsamplingLevel is not zero. Because we are assigning the raw pointer
        to a local variable in ImageDecoder::createFrameImageAtIndex(), CFRelease()
        is called for the CFDictionaryRef immediately after this assignment. This
        causes its memory to be freed in this case even before calling CG.

        This bug does not happen if the subsamplingLevel is zero because we cache
        the returned value in a static NeverDestroyed<RetainPtr<CFDictionaryRef> in
        imageSourceOptions(). This cache prevents the CFDictionaryRef from being
        freed in ImageDecoder::createFrameImageAtIndex() no matter where CFRelease()
        is called.

        The fix is hold the returned value in a RetainPtr<CFDictionaryRef>. This
        will ensure the CFDictionaryRef raw pointer is valid till the end of
        ImageDecoder::createFrameImageAtIndex().

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex): Ensure the pointer is retained.

2016-11-10  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add transparency layer support
        https://bugs.webkit.org/show_bug.cgi?id=164614

        Reviewed by Dean Jackson.

        Provide a stackable implementation of transparency layers so that
        multiple layers with opacity draw propery.

        Tested by fast/layers/opacity-stacking.html and others.

        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::platformContext): Remove unneeded assertion.
        (WebCore::GraphicsContextPlatformPrivate::renderTarget): Return current context taking
        into account the presence of transparency layers.
        (WebCore::GraphicsContextPlatformPrivate::setAlpha): Added.
        (WebCore::GraphicsContextPlatformPrivate::currentGlobalAlpha): Get current global
        alpha for current layer.
        (WebCore::GraphicsContext::colorWithGlobalAlpha): Compute proper color taking into
        account the current layer.
        (WebCore::drawWithShadowHelper): Helper function to share code.
        (WebCore::GraphicsContext::drawWithShadow): Use new helper function.
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer): Added.
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer): Call new implementation.
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer): Added.
        (WebCore::GraphicsContext::endPlatformTransparencyLayer): Call new implementation.
        (WebCore::GraphicsContext::clearRect): Clear to transparent color.
        (WebCore::GraphicsContext::setPlatformAlpha): Pass new alpha on to any active
        transparency layer.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        (WebCore::GraphicsContextPlatformPrivate::renderTarget): Deleted.

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

        Add CSS Color Level 4 to features.

        * features.json:

2016-11-10  Zalan Bujtas  <zalan@apple.com>

        Move update image calls to RenderElement::styleDidChange.
        https://bugs.webkit.org/show_bug.cgi?id=164623

        Reviewed by Simon Fraser.

        There should be no dependency on the image update between ::styleWillChange and ::styleDidChange.

        Covered by existing tests.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::styleDidChange):

2016-11-10  Joseph Pecoraro  <pecoraro@apple.com>

        After r207459 ASSERT in CachedResourceLoader under InspectorPageAgent::cachedResource
        https://bugs.webkit.org/show_bug.cgi?id=164621

        Reviewed by Youenn Fablet.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        CachedResourceLoader expects a sanitized URL.

2016-11-10  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0 Support the IDBDatabase.onclose event.
        https://bugs.webkit.org/show_bug.cgi?id=164602

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::connectionToServerLost): Fire "onclose" after "onerror"
        * Modules/indexeddb/IDBDatabase.idl:

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

        Copied text would contain text inside CDATA sections and comments
        https://bugs.webkit.org/show_bug.cgi?id=164578
        <rdar://problem/19834542>

        Reviewed by Darin Adler.

        The bug was caused by HTMLConverter::_traverseNode always including the content of a Text node.
        Since Comment and CDataSection nodes are also Text nodes, we need to exclude them.

        In the long term, we should check the visibility of the text as done in MarkupAccumulator.

        Test: editing/mac/attributed-string/comment-cdata-section.html

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_traverseNode):

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

        [MediaStream] apply constraints passed to getUserMedia()
        https://bugs.webkit.org/show_bug.cgi?id=164561

        Reviewed by Youenn Fablet.
        <rdar://problem/29191384>

        No new tests, updated existing tests.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Pass constraints into createMediaStream instead of applying
          them after the stream has been created.

        * WebCore.xcodeproj/project.pbxproj: Remove MediaConstraintsMock.cpp/.h.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Remove a bogus assert.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Drive-by fix: a stream
          that is receiving media data is as ready as it will ever be so it's readyState should be
          at HAVE_ENOUGH_DATA.

        Simplify CaptureDeviceManager by removing all code for constraint validation because some
        constraints can't be validated without a live capture device. Ports that are able to resolve
        constraints without creating a live source can do so in a derived capture device class.
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::bestSourcesForTypeAndConstraints): Return a list of UIDs, not a list
          of live sources, because that is all the caller will use. This will allows ports to avoid
          source creation in some cases.
        (CaptureDeviceManager::sourceWithUID): Add parameters for new source constraints and invalid
          constraint.
        (CaptureDeviceManager::verifyConstraintsForMediaType): Deleted.
        (CaptureDeviceManager::bestDeviceForFacingMode): Deleted.
        (facingModeFromString): Deleted.
        (CaptureDeviceManager::sessionSupportsConstraint): Deleted.
        (CaptureDeviceManager::isSupportedFrameRate): Deleted.
        * platform/mediastream/CaptureDeviceManager.h:
        (WebCore::CaptureDeviceManager::defaultCaptureSession): Deleted.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::FlattenedConstraint::find): New, make it possible to examine resolved constraints.
        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::fitnessDistance): Reject invalid constraints.
        (WebCore::NumericConstraint::valueForCapabilityRange): New, resolve a constraint for a 
          capability range.
        (WebCore::MediaTrackConstraintSetMap::width): Expose constraints held in the map.
        (WebCore::MediaTrackConstraintSetMap::height):
        (WebCore::MediaTrackConstraintSetMap::sampleRate):
        (WebCore::MediaTrackConstraintSetMap::sampleSize):
        (WebCore::MediaTrackConstraintSetMap::aspectRatio):
        (WebCore::MediaTrackConstraintSetMap::frameRate):
        (WebCore::MediaTrackConstraintSetMap::volume):
        (WebCore::MediaTrackConstraintSetMap::echoCancellation):
        (WebCore::MediaTrackConstraintSetMap::facingMode):
        (WebCore::MediaTrackConstraintSetMap::deviceId):
        (WebCore::MediaTrackConstraintSetMap::groupId):

        Resolve and apply width, height, and frameRate all at once because the ability to support
        one may depend on the value of another.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate): 
        (WebCore::applyNumericConstraint): Move the guts of the logic into valueForCapabilityRange.
        (WebCore::RealtimeMediaSource::applySizeAndFrameRate):
        (WebCore::RealtimeMediaSource::selectSettings):
        (WebCore::RealtimeMediaSource::supportsConstraints):
        (WebCore::RealtimeMediaSource::applyConstraints): Support null success/failure lambdas.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::create): Add parameter for creation constraints.
        (WebCore::AVAudioCaptureSource::AVAudioCaptureSource): Ditto.

        Remove all constraint validation code, it is done by the audio and video capture sources. Add
        support for stream creation constraints.
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::captureDeviceList):
        (WebCore::AVCaptureDeviceManager::createMediaSourceForCaptureDeviceWithConstraints):
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints): Deleted.
        (WebCore::AVCaptureDeviceManager::sourceWithUID): Deleted.
        (WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType): Deleted.
        (WebCore::AVCaptureDeviceManager::defaultCaptureSession): Deleted.
        (WebCore::AVCaptureDeviceManager::sessionSupportsConstraint): Deleted.
        (WebCore::AVCaptureDeviceManager::isSupportedFrameRate): Deleted.
        (WebCore::AVCaptureDeviceManager::supportedConstraints): Deleted.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaCaptureSource::constraints): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::~AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::startProducingData):
        (WebCore::AVMediaCaptureSource::stopProducingData):
        (WebCore::AVMediaCaptureSource::beginConfiguration):
        (WebCore::AVMediaCaptureSource::commitConfiguration):
        (WebCore::AVMediaCaptureSource::capabilities):
        (WebCore::AVMediaCaptureSource::setupSession):
        (WebCore::AVMediaCaptureSource::reset):

        Validate and apply constraints, support source creation constraints, initialize capabilities
        and supported constraints by examining device capabilities.
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::updateSizeMinMax):
        (WebCore::updateAspectRatioMinMax):
        (WebCore::AVVideoCaptureSource::initializeCapabilities):
        (WebCore::AVVideoCaptureSource::initializeSupportedConstraints):
        (WebCore::AVVideoCaptureSource::applySize):
        (WebCore::AVVideoCaptureSource::setPreset):
        (WebCore::AVVideoCaptureSource::applyFrameRate):
        (WebCore::AVVideoCaptureSource::applySizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::currentFrameCGImage):
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions):
        (WebCore::AVVideoCaptureSource::supportsSizeAndFrameRate):

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create): Apply creation constraints, return null if they
          can not be applied successfully.
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        (WebCore::MockRealtimeVideoSource::createMuted):

        Update RealtimeMediaSourceCenters for API changes.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:

        Mock media sources support constraint validation and application directly so "mock constraints"
        are no longer necessary.
        * platform/mock/MediaConstraintsMock.cpp: Removed.
        * platform/mock/MediaConstraintsMock.h: Removed.
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSource::createMuted):
        (WebCore::MockRealtimeAudioSource::updateSettings):
        (WebCore::MockRealtimeAudioSource::initializeCapabilities):
        (WebCore::MockRealtimeAudioSource::initializeSupportedConstraints):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSource::createMuted):
        * platform/mock/MockRealtimeVideoSource.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:

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

        Move SecurityOrigin::databaseIdentifier() to SecurityOriginData
        https://bugs.webkit.org/show_bug.cgi?id=164573

        Reviewed by Brady Eidson.

        No change in behavior.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory):
        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesForOrigins):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::databaseNamesForOriginNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::deleteOriginLockFor):
        (WebCore::DatabaseTracker::quotaForOriginNoLock):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        * dom/Document.cpp:
        (WebCore::Document::origin):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::databaseIdentifier): Deleted.
        * page/SecurityOrigin.h:
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::databaseIdentifier):
        * page/SecurityOriginData.h:

2016-11-10  Zalan Bujtas  <zalan@apple.com>

        RenderElement::invalidateFlowThreadContainingBlockIncludingDescendants should be on RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=164601

        Reviewed by Simon Fraser.

        FlowThread containing blocks are cached at RenderBlocks. It makes no sense to call the invalidate function on a RenderElement.
        Move invalidateFlowThreadContainingBlockIncludingDescendants to RenderBlock.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::invalidateFlowThreadContainingBlockIncludingDescendants):
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::invalidateFlowThreadContainingBlockIncludingDescendants): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):

2016-11-10  Brent Fulgham  <bfulgham@apple.com>

        Local file restrictions should not block sessionStorage access.
        https://bugs.webkit.org/show_bug.cgi?id=155609
        <rdar://problem/25229461> 

        Reviewed by Andy Estes.

        Re-landing this fix that was lost when the localStorage change was rolled out.

        Use of 'sessionStorage' is governed by SecurityOrigin with third party access
        set to 'ShouldAllowFromThirdParty::AlwaysAllowFromThirdParty'. We should not
        reject local files for this combination of arguments.

        Tested by storage/domstorage/sessionstorage/blocked-file-access.html.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccessStorage): For the case of sessionStorage,
        allow local file access.

2016-11-10  Daniel Bates  <dabates@apple.com>

        REGRESSION (r195004): Scripts and plugins blocked for subsequent loads in same WebContent
        process after receiving HTTP 0.9 response
        https://bugs.webkit.org/show_bug.cgi?id=164387
        <rdar://problem/28987537>

        Reviewed by Brent Fulgham.

        Fixes an issue where the HTTP 0.9 sandbox persisted across subsequent loads in the same
        WebContent process.

        Currently when an HTTP 0.9 response is received for a request made to a default port
        (e.g. 80) we apply a sandbox policy on the FrameLoader for the main resource that
        disallows scripts and plugins. A FrameLoader may be re-used for navigations. Therefore,
        the sandbox policy applied to one site may be applied to another site. Moreover the
        sandbox policy was applied to the FrameLoader of the main resource regardless of whether
        the HTTP response was for a subresource. Instead we should apply the sandbox on a per-
        Document basis and only if we receive an HTTP 0.9 response for the document when the
        corresponding HTTP request was made to a default port.

        As a side benefit of this change, we emit exactly one console message to Web Inspector
        when the HTTP 0.9 sandbox is applied to a document as opposed to three console messages.
        Moreover, we only emit this console message when the document load is not blocked.

        Test: http/tests/security/http-0.9/sandbox-should-not-persist-on-navigation.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Disallow scripts and plugins if an HTTP 0.9
        response was received for this document. Note that if this function is called for a
        document associated with an HTTP 0.9 response then the corresponding HTTP request was
        made to a default port. DocumentLoader::responseReceived() blocks the load for a document
        with an HTTP 0.9 response corresponding to an HTTP request made to a non-default port.
        This invariant is covered by the tests LayoutTests/http/tests/security/http-0.9/default-port-{plugin, script}-blocked.html.
        (WebCore::Document::shouldEnforceHTTP0_9Sandbox): Added. Returns whether an HTTP 0.9 response
        was received for this document.
        * dom/Document.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Remove logic to apply sandbox policy to the
        FrameLoader associated with the main resource. We will apply the sandbox during initialization
        of the document.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse): Ditto.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Ditto.

2016-11-04  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::importKey to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=164446
        <rdar://problem/29123621>

        Reviewed by Brent Fulgham.

        This patch does following few things:
        1. It updates the SubtleCrypto::importKey method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-importKey.
           It also refers to the latest Editor's Draft at a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-importKey.
        2. It implements importKey operations of following algorithms: AES-CBC, AES-KW,
           HMAC, RSAES-PKCS1-V1_5, RSASSA-PKCS1-V1_5, and RSA-OAEP.
        3. It fixes some minor problems of SubtleCrypto::generateKey.
        4. It addes move constructors for CryptoKeyAES, CryptoKeyHMAC, CryptoKeyRSA and
           CryptoKeyDataRSAComponents.
        5. It renames HmacKeyGenParams to HmacKeyParams to serve the purpose of both
           HmacKeyGenParams and HmacImportParams which are essentially the same.
        6. It enforces the key length in bits of CryptoKeyHMAC to be multiples of 8.
        7. It also fixes the following bugs:
           https://bugs.webkit.org/show_bug.cgi?id=126033,
           https://bugs.webkit.org/show_bug.cgi?id=126034,
           https://bugs.webkit.org/show_bug.cgi?id=151308.
        P.S. We currently only support Raw and Jwk key format.

        Tests: crypto/subtle/aes-cbc-import-jwk-key-length-128.html
               crypto/subtle/aes-cbc-import-jwk-key-length-192.html
               crypto/subtle/aes-cbc-import-jwk-key-length-256.html
               crypto/subtle/aes-cbc-import-jwk-key-minimum.html
               crypto/subtle/aes-cbc-import-jwk-key-non-extractable.html
               crypto/subtle/aes-cbc-import-raw-key-length-128.html
               crypto/subtle/aes-cbc-import-raw-key-length-192.html
               crypto/subtle/aes-cbc-import-raw-key-length-256.html
               crypto/subtle/aes-import-key-malformed-parameters.html
               crypto/subtle/aes-kw-import-jwk-key-length-128.html
               crypto/subtle/aes-kw-import-jwk-key-length-192.html
               crypto/subtle/aes-kw-import-jwk-key-length-256.html
               crypto/subtle/aes-kw-import-raw-key.html
               crypto/subtle/generate-key-malformed-parameters.html
               crypto/subtle/hmac-import-jwk-key-minimum.html
               crypto/subtle/hmac-import-jwk-key-non-extractable.html
               crypto/subtle/hmac-import-jwk-key-sha1.html
               crypto/subtle/hmac-import-jwk-key-sha224.html
               crypto/subtle/hmac-import-jwk-key-sha256.html
               crypto/subtle/hmac-import-jwk-key-sha384.html
               crypto/subtle/hmac-import-jwk-key-sha512.html
               crypto/subtle/hmac-import-malformed-parameters.html
               crypto/subtle/hmac-import-raw-key-customized-length.html
               crypto/subtle/hmac-import-raw-key.html
               crypto/subtle/import-key-malformed-parameters.html
               crypto/subtle/rsa-import-key-malformed-parameters.html
               crypto/subtle/rsa-oaep-import-jwk-private-key.html
               crypto/subtle/rsa-oaep-import-jwk-public-key-sha1.html
               crypto/subtle/rsa-oaep-import-jwk-public-key-sha224.html
               crypto/subtle/rsa-oaep-import-jwk-public-key-sha256.html
               crypto/subtle/rsa-oaep-import-jwk-public-key-sha384.html
               crypto/subtle/rsa-oaep-import-jwk-public-key-sha512.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-private-key.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-public-key-leading-zero.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-public-key-minimum.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-public-key-non-extractable.html
               crypto/subtle/rsaes-pkcs1-v1_5-import-jwk-public-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-private-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-sha1.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-sha224.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-sha256.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-sha384.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-public-key-sha512.html
               crypto/workers/subtle/aes-import-jwk-key.html
               crypto/workers/subtle/aes-import-raw-key.html
               crypto/workers/subtle/hmac-import-jwk-key.html
               crypto/workers/subtle/hmac-import-raw-key.html
               crypto/workers/subtle/rsa-import-jwk-private-key.html
               crypto/workers/subtle/rsa-import-jwk-public-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::cryptoKeyUsageFromString):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::toKeyData):
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        (WebCore::jsSubtleCryptoFunctionImportKeyPromise):
        (WebCore::JSSubtleCrypto::importKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/JsonWebKey.h: Added.
        * crypto/JsonWebKey.idl: Added.
        * crypto/RsaOtherPrimesInfo.h: Added.
        * crypto/RsaOtherPrimesInfo.idl: Added.
        * crypto/SubtleCrypto.h:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::generate):
        (WebCore::CryptoKeyAES::importRaw):
        (WebCore::CryptoKeyAES::importJwk):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataRSAComponents.cpp:
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::generate):
        (WebCore::CryptoKeyHMAC::importRaw):
        (WebCore::CryptoKeyHMAC::importJwk):
        (WebCore::CryptoKeyHMAC::buildAlgorithm):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp: Added.
        (WebCore::CryptoKeyRSA::importJwk):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmHmacKeyGenParams.h.
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h: Added.
        * crypto/parameters/HmacKeyParams.idl: Renamed from Source/WebCore/crypto/parameters/HmacKeyGenParams.idl.
        * crypto/parameters/RsaHashedImportParams.idl: Added.

2016-11-10  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: REGRESSION(r208467) Fix flaky crashes in IDB GC-related code.
        https://bugs.webkit.org/show_bug.cgi?id=164596

        Reviewed by Eric Carlson.

        No new tests (Covered by existing tests).

        We can't just WTFMove the pointers from the deleted-IDBObject maps...
        We need to remove the entries, too.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::internalAbort):

2016-11-10  Youenn Fablet  <youennf@gmail.com>

        MediaStreamTrack should use more Ref<> and less RefPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=164560

        Reviewed by Eric Carlson.

        No change of behavior.

        Make MediaStreamTrack take a Ref<>& instead of a reference.
        Using Ref<>&& instead of RefPtr<>&& in MediaStreamTrackPrivate.
        Updating constness of some methods accordingly.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createReceiver):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::create):
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::clone):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::capabilities):
        (WebCore::MediaStreamAudioSource::settings):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create):
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::clone):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::setMuted):
        (WebCore::MediaStreamTrackPrivate::source):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::initializeSettings):
        (WebCore::AVMediaCaptureSource::settings):
        (WebCore::AVMediaCaptureSource::initializeCapabilities):
        (WebCore::AVMediaCaptureSource::capabilities):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        (WebCore::RealtimeMediaSourceOwr::capabilities):
        (WebCore::RealtimeMediaSourceOwr::settings):
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::initializeCapabilities):
        (WebCore::MockRealtimeMediaSource::capabilities):
        (WebCore::MockRealtimeMediaSource::initializeSettings):
        (WebCore::MockRealtimeMediaSource::settings):
        * platform/mock/MockRealtimeMediaSource.h:

2016-11-10  Per Arne Vollan  <pvollan@apple.com>

        [Win32] Crash in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=164411

        Reviewed by Mark Lam.

        Use the calling convention expected by the callers of the generated functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetAttribute):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionItem):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionHasAttribute):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementById):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementsByName):

2016-11-10  Aaron Chu  <aaron_chu@apple.com>

        Web Inspector: AXI: clarify button roles (e.g. toggle or popup button)
        https://bugs.webkit.org/show_bug.cgi?id=130726
        <rdar://problem/16420420>

        Reviewed by Brian Burg.

        Test: accessibility/ax-differentiate-button-types.html

        Added special case logic to make sure PopUpButtonRole and ToggleButtonRole to user ButtonRole as role.
        Added an "isPopUpButton" property to be exposed to the Inspector's use.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::computedRoleString):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2016-11-10  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Add no-op Web-facing APIs
        https://bugs.webkit.org/show_bug.cgi?id=164028

        Reviewed by Jer Noble.

        Add no-op implementation of the Web-facing APIs as defined in
        the EME specification. This will be the basis for implementing
        the various algorithms the same specification defines, and for
        implementing the relevant platform abstractions.

        Dictionaries and enumerations defined by the specification are
        defined in separate headers, and not in the implementation files
        for the class where they are used. This will ease their use
        across different implementation files.

        BufferSource now exposes the Variant object it holds. This is
        needed to support the iterable property on the MediaKeyStatusMap
        class.

        CodeGeneratorJS is fixed to support JS-to-native conversion of
        sequences of dictionaries.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp: Added.
        (WebCore::MediaKeyMessageEvent::MediaKeyMessageEvent):
        (WebCore::MediaKeyMessageEvent::eventInterface):
        * Modules/encryptedmedia/MediaKeyMessageEvent.h: Added.
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl: Added.
        * Modules/encryptedmedia/MediaKeyMessageEventInit.h: Added.
        (WebCore::MediaKeyMessageEventInit::MediaKeyMessageEventInit):
        * Modules/encryptedmedia/MediaKeyMessageType.h: Added.
        * Modules/encryptedmedia/MediaKeySession.cpp: Added.
        (WebCore::MediaKeySession::create):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::sessionId):
        (WebCore::MediaKeySession::expiration):
        (WebCore::MediaKeySession::keyStatuses):
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        (WebCore::MediaKeySession::hasPendingActivity):
        (WebCore::MediaKeySession::activeDOMObjectName):
        (WebCore::MediaKeySession::canSuspendForDocumentSuspension):
        (WebCore::MediaKeySession::stop):
        * Modules/encryptedmedia/MediaKeySession.h: Added.
        * Modules/encryptedmedia/MediaKeySession.idl: Added.
        * Modules/encryptedmedia/MediaKeySessionType.h: Added.
        * Modules/encryptedmedia/MediaKeyStatus.h: Added.
        * Modules/encryptedmedia/MediaKeyStatusMap.cpp: Added.
        (WebCore::MediaKeyStatusMap::size):
        (WebCore::MediaKeyStatusMap::has):
        (WebCore::MediaKeyStatusMap::get):
        (WebCore::MediaKeyStatusMap::Iterator::Iterator):
        (WebCore::MediaKeyStatusMap::Iterator::next):
        * Modules/encryptedmedia/MediaKeyStatusMap.h: Added.
        (WebCore::MediaKeyStatusMap::create):
        (WebCore::MediaKeyStatusMap::createIterator):
        * Modules/encryptedmedia/MediaKeyStatusMap.idl: Added.
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp: Added.
        (WebCore::MediaKeySystemAccess::keySystem):
        (WebCore::MediaKeySystemAccess::getConfiguration):
        (WebCore::MediaKeySystemAccess::createMediaKeys):
        * Modules/encryptedmedia/MediaKeySystemAccess.h: Added.
        (WebCore::MediaKeySystemAccess::create):
        * Modules/encryptedmedia/MediaKeySystemAccess.idl: Added.
        * Modules/encryptedmedia/MediaKeySystemConfiguration.h: Added.
        * Modules/encryptedmedia/MediaKeySystemConfiguration.idl: Added.
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.h: Added.
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.idl: Added.
        * Modules/encryptedmedia/MediaKeys.cpp: Added.
        (WebCore::MediaKeys::createSession):
        (WebCore::MediaKeys::setServerCertificate):
        * Modules/encryptedmedia/MediaKeys.h: Added.
        (WebCore::MediaKeys::create):
        * Modules/encryptedmedia/MediaKeys.idl: Added.
        * Modules/encryptedmedia/MediaKeysRequirement.h: Added.
        * Modules/encryptedmedia/NavigatorEME.cpp: Added.
        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
        * Modules/encryptedmedia/NavigatorEME.h: Added.
        * Modules/encryptedmedia/NavigatorEME.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::BufferSource):
        (WebCore::BufferSource::variant):
        * bindings/js/JSMediaKeySessionCustom.cpp: Added.
        (WebCore::JSMediaKeySession::closed):
        * bindings/js/JSMediaKeySystemAccessCustom.cpp: Added.
        (WebCore::JSMediaKeySystemAccess::getConfiguration):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetNativeVectorInnerType):
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaKeys):
        (WebCore::HTMLMediaElement::setMediaKeys):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaEncryptedEvent.cpp: Added.
        (WebCore::MediaEncryptedEvent::MediaEncryptedEvent):
        (WebCore::MediaEncryptedEvent::eventInterface):
        (WebCore::MediaEncryptedEvent::initDataType):
        (WebCore::MediaEncryptedEvent::initData):
        * html/MediaEncryptedEvent.h: Added.
        * html/MediaEncryptedEvent.idl: Added.
        * html/MediaEncryptedEventInit.h: Added.
        (WebCore::MediaEncryptedEventInit::MediaEncryptedEventInit):

2016-11-10  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: update controls based on fullscreen playback on macOS
        https://bugs.webkit.org/show_bug.cgi?id=164554
        <rdar://problem/29183439>

        Reviewed by Dean Jackson.

        When toggling fullscreen on macOS, toggle between MacOSInlineMediaControls and MacOSFullscreenMediaControls.
        To facilitate this, support objects are created and destroyed when changing the controls in order for the
        right control objects to be hooked up to the media controller. A new destroy() method on MediaControllerSupport
        subclasses can be overridden to remove event listeners added by support objects in their constructor.

        Test: media/modern-media-controls/media-controller/media-controller-fullscreen-change.html

        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.destroy):
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport.prototype.destroy):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._controlsClass):

2016-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Linux] Memory values shown by memory pressure handler logger are not useful
        https://bugs.webkit.org/show_bug.cgi?id=164589

        Reviewed by Michael Catanzaro.

        We are currently using the VmSize field from /proc/self/status which is the virtual memory size of the process
        and doesn't normally change even when the memory pressure handler manages to release memory. So, most of the
        time we see that there's no changes in memory usage in the logs.
        We should use the actual memory used by the process, memory that the process can release and then it's relevant
        for the memory pressure handler. Using other fields from /proc/self/status we could do something like VmRSS -
        (RssFile + RssShme), but there's also /proc/self/statm that provides the same information in a single. The main
        different is that statm provides both resident and shared memory directly, but in number of pages, so we need to
        multiply by the size of the page.
        This patch adds a method to parse /proc/self/statm in its given file, because I plan to use this for the linux
        memory sampler that is incorrectly parsing /proc/self/statm.

        * platform/Linux.cmake: Add new files to compilation.
        * platform/linux/CurrentProcessMemoryStatus.cpp: Added.
        (WebCore::systemPageSize): Return the page size.
        (WebCore::currentProcessMemoryStatus): Parse /proc/self/statm and fill the given ProcessMemoryStatus.
        * platform/linux/CurrentProcessMemoryStatus.h: Added.
        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::processMemoryUsage(): Helper function to return the memory used by the process
        in bytes.
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage): Use processMemoryUsage().

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

        MemoryPressureHandler shouldn't know how to release WebCore memory
        https://bugs.webkit.org/show_bug.cgi?id=160497

        Reviewed by Michael Catanzaro.

        All processes should set their own low memory handler, instead of leaving the web process using the default one
        that needs to access APIs that are not in platform layer. This patch fixes all the layering violations in the
        MemoryPressureHandler. Since the default implementation, that releases the WebCore memory, is shared by the
        WebProcess in WebKit2 and WebKit1 ports, it has been moved to its own file to the WebCore layer.

        * CMakeLists.txt: Add new files to compilation.
        * PlatformMac.cmake: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Use WebCore::jettisonExpensiveObjectsOnTopLevelNavigation().
        * page/MemoryRelease.cpp: Added.
        (WebCore::releaseNoncriticalMemory):
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        (WebCore::platformReleaseMemory):
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        (WebCore::registerMemoryReleaseNotifyCallbacks):
        * page/MemoryRelease.h: Added.
        * page/cocoa/MemoryReleaseCocoa.mm: Added.
        (WebCore::platformReleaseMemory):
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        (WebCore::registerMemoryReleaseNotifyCallbacks):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::beginSimulatedMemoryPressure):
        (WebCore::MemoryPressureHandler::releaseMemory): Use the current handler if it has been set.
        (WebCore::MemoryPressureHandler::platformReleaseMemory): Deleted.
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setLowMemoryHandler):
        (WebCore::MemoryPressureHandler::m_releaseMemoryBlock):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure): Call releaseMemory() instead of using the handler directly.
        (WebCore::MemoryPressureHandler::platformReleaseMemory): Deleted.
        * platform/linux/MemoryPressureHandlerLinux.cpp:
        * platform/win/MemoryPressureHandlerWin.cpp:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure): Call releaseMemory() instead of using the handler directly.

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

        [css-grid] Fix fr tracks sizing under min|max-size constraints
        https://bugs.webkit.org/show_bug.cgi?id=150674

        Reviewed by Darin Adler.

        The min|max-sizes must be used to compute the flex fraction for indefinite free
        spaces. According to the spec "If using this flex fraction would cause the grid to be
        smaller than the grid container’s min-width/height (or larger than the grid container’s
        max-width/height), then redo this step, treating the free space as definite and the
        available grid space as equal to the grid container’s content box size when it’s sized to
        its min-width/height (max-width/height)."

        This only affects indefinite heights because during layout both definite sizes and any kind
        of widths are properly constrained by min|max-width restrictions.

        Tests: fast/css-grid-layout/flex-sizing-columns-min-max-width.html
               fast/css-grid-layout/flex-sizing-rows-min-max-height.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeFlexSizedTracksGrowth):
        * rendering/RenderGrid.h:

2016-11-10  Alejandro G. Castro  <alex@igalia.com>

        [WebRTC] [OpenWebRTC] RTX default parameters broken after r207952
        https://bugs.webkit.org/show_bug.cgi?id=164541

        Reviewed by Philippe Normand.

        Fixed typo in refactoring.

        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::getDefaultVideoPayloads):

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

        [WebRTC] white-list turns urls from the RTCConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=164506

        Reviewed by Alejandro G. Castro.

        * Modules/mediastream/RTCConfiguration.cpp:
        (WebCore::validateIceServerURL): Add the turns URL scheme to the
        list of supported relay and signaling server protocols.

2016-11-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DebuggerManager.Event.Resumed introduces test flakiness
        https://bugs.webkit.org/show_bug.cgi?id=161951
        <rdar://problem/28295767>

        Reviewed by Brian Burg.

        Covered by existing tests that would ASSERT otherwise.

        * inspector/InspectorClient.cpp:
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage):
        When paused on an exception in the inspected page and evaluating
        commands in the inspector frontend page (which evaluates JavaScript)
        we ASSERT when entering the Global DOM VM with an existing exception.
        This makes it so when we evaluate JavaScript in the frontend we
        suspend / ignore the state of the VM for the inspected page, and
        restore it when we return from the inspector.

2016-11-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Associate Worker Resources with the Worker and not the Page
        https://bugs.webkit.org/show_bug.cgi?id=164342
        <rdar://problem/29075775>

        Reviewed by Timothy Hatcher.

        Test: inspector/worker/resources-in-worker.html

        Provide a way to associate an initiator identifier with a ResourceRequest.
        This will allow Web Inspector to identify who started particular resource
        loads. This is important to associate Worker(...), importScript(...), and
        XMLHttpRequest / Fetch loads with that specific Worker.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::initiatorIdentifier):
        (WebCore::ResourceRequestBase::setInitiatorIdentifier):
        Optional initiator identifier. Currently used only be Web Inspector.

        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::resourceRequestIdentifier):
        Non-page execution contexts, like WorkerGlobalScope, should provide
        a unique identifier that may be used to distinguish loads initiated
        from within that context.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        XHR / Fetch loads should include the ScriptExecutionContext's
        initiator identifier.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::WorkerScriptLoader):
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        Provide a way to provide initiator identifier information for
        Worker script loads. Currently this is `new Worker(...)` and
        `importScripts(...)` resource loads.

        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::create):
        * workers/Worker.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerGlobalScope.h:
        Give Worker itself the unique identifier, because `new Worker(...)`
        loads happen before the WorkerGlobalScript (ScriptExecutionContext)
        is actually created, but we want to associate it with this Worker.

        * 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/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::WorkerInspectorProxy):
        * workers/WorkerInspectorProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        Pass the MainThread's Worker identifier through to the WorkerGlobalScope
        created on the WorkerThread. They should be the same identifier.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        Pass the initiator identifier data to the frontend. This identifier is
        equivalent to a "target identifier" in the frontend. Currently the only
        non-Page targets are Workers.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):
        When using the memory cache we create a new resource request. Be sure
        to copy over useful inspector data, like the initiator identifier,
        from the original request.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        When rebuilding a ResourceRequest from NSURLRequest, copy over the
        initiator identifier property that wouldn't otherwise have survived
        the transition.

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Clean up some exception ordering.
        https://bugs.webkit.org/show_bug.cgi?id=164566

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continueFunction):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r208438.

        crashes

        Reverted changeset:

        "[WK2][NETWORK_SESSION] Add support for downloading file
        backed blobs"
        https://bugs.webkit.org/show_bug.cgi?id=164458
        http://trac.webkit.org/changeset/208438

2016-11-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Change the decoding for some animated images to be asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=161566

        Reviewed by Simon Fraser.

        Tests: fast/images/slower-animation-than-decoding-image.html
               fast/images/slower-decoding-than-animation-image.html
               fast/images/stopped-animation-deleted-image.html
               
        Request the next frame before firing the animation timer. The asynchronous
        image decoding work queue notifies the BitmapImage when the frame finishes
        decoding. If the timer fires before the frame is decoded, no repaint will
        be requested. Only when the image frame is ready, the animation will be
        advanced and the image will be repainted.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load): Cache the image settings in CachedImage.
        (WebCore::CachedImage::createImage): No need to pass allowSubsampling to BitmapImage. It can be retrieved through Image::imageObserver().
        (WebCore::CachedImage::changedInRect): Change the parameter to notifyObservers() to be a pointer.
        * loader/cache/CachedImage.h: Cache the settings: allowSubsampling, allowAsyncImageDecoding and showDebugBackground through m_loader.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::dataChanged): Fix a logging message.
        (WebCore::BitmapImage::draw): Store the current SubsamplingLevel to be used when requesting decoding the image of the next frame.
        Draw a debug rectangle if the next frame is missed because it is being decoded and the setting showDebugBackground is on.
        (WebCore::BitmapImage::startAnimation): Deleted. Moved to the header file.
        (WebCore::BitmapImage::internalStartAnimation): Added. Request asynchronous image decoding for the next frame if required. Return the
        result of starting the animation.
        (WebCore::BitmapImage::advanceAnimation): Call internalAdvanceAnimation() if the frame image is not being decoded. If it is being decoded
        and the setting showDebugBackground is on, force repaint so the debug rectangle is drawn.
        (WebCore::BitmapImage::internalAdvanceAnimation): This is the old body of advanceAnimation().
        (WebCore::BitmapImage::stopAnimation): Stop the asynchronous image decoding if it is started.
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): This function is called from the async image decoding work queue when finishing decoding a native image frame.
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::startAnimation): Added. It is now calls internalStartAnimation().
        * platform/graphics/Color.h: Define a constant for the yellow color.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::clearMetadata): Delete unreferenced member.
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Return true if the frame is requested for async decoding.
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageObserver.h:  Add virtual functions for allowSubsampling, allowAsyncImageDecoding and showDebugBackground.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::maximumSubsamplingLevel): Move checking allowSubsampling() to the caller BitmapImage::draw().
        * platform/graphics/ImageSource.h: Remove the setting allowSubsampling(); it can be retrieved from imageObserver().
        (WebCore::ImageSource::setAllowSubsampling): Deleted.
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::shutdown): Stop the animation of an image when shutting down the resource.
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::shutdown): Ditto.
        svg/graphics/SVGImageClients.h: Change the parameter to ImageObserver::changedInRect() to be a pointer.
        (WebCore::SVGImageChromeClient::invalidateContentsAndRootView):
        * testing/Internals.cpp:
        (WebCore::Internals::setImageFrameDecodingDuration): Sets a fixed frame decoding duration for testing.
        * testing/Internals.h:
        * testing/Internals.idl: Adds an internal option for ImageFrameDecodingDuration.

2016-11-04  Brent Fulgham  <bfulgham@apple.com>

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185
        <rdar://problem/11101440>

        Reviewed by Brady Eidson.

        Add a new quirk for localStorage that defaults to 'on'. When active, this quirk says that
        localStorage access should be granted, without needing to grant universal file access.

        If the quirk is turned off, then localStorage is blocked unless the WebKit client explicitly
        grants universal file access.

        Tests: storage/domstorage/localstorage/blocked-file-access-permitted-by-quirk.html
               storage/domstorage/localstorage/blocked-file-access.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Set localStorage quirk mode based on settings.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Use more C++11 initializers.
        (WebCore::SecurityOrigin::canAccessStorage): If the origin is a local file, and we are NOT in
        localStorage quirks mode, and we have not been granted universal file access, prevent access
        to DOM localStorage.
        (WebCore::SecurityOrigin::setNeedsLocalStorageQuirk): Added.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::needsLocalStorageQuirk): Added.
        * page/Settings.in:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope): Make sure Workers know what the
        localStorage quirks mode is set to.

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should not consider path of URLs with no host to start at the first slash after the colon
        https://bugs.webkit.org/show_bug.cgi?id=164555

        Reviewed by Tim Horton.

        When we see a url that is only scheme:// we treated the // as the path.  Firefox did this with unrecognized schemes,
        but based on https://github.com/whatwg/url/issues/148 they seem willing to change.  We had added similar behavior to
        URL::parse, and I added this to URLParser in r206783 which this effectively reverts.

        Covered by API and layout tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        Don't move m_userStart to m_pathStart back by two when we see an empty host.

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Simplify logic of SecurityOrigin::databaseIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=164565

        Reviewed by Brady Eidson.

        No change in behavior.

        SecurityOrigins with the file scheme need a special database identifier to be backwards-compatible with existing storage.
        Instead of determining whether this is a file SecurityOrigin at parsing time and only using that information when
        making the database identifier, just determine whether we need this quirk when making the database identifier.
        I'm planning to move this logic to SecurityOriginData in another patch.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::databaseIdentifier):
        * page/SecurityOrigin.h:

2016-11-09  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, build fix after r208460

        isValidColorString() was renamed isValidSimpleColorString().

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):

2016-11-09  Anders Carlsson  <andersca@apple.com>

        Fix STP build.

        * WebCorePrefix.h:

2016-11-09  Simon Fraser  <simon.fraser@apple.com>

        Implement visual-viewport based position:fixed handling for Mac async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=164495

        Reviewed by Tim Horton.

        Educate the scrolling tree about visual and layout viewports. This is runtime-switchable,
        so we push the enable flag to via the root state node, then push the layout viewport,
        and the min/max scroll position that contstrain it, through frame state nodes.

        When a scroll happens, we compute a new layout viewport when the visual viewport hits
        an edge, and push that down through setScrollLayerPosition() since it's used to position
        fixed and sticky layers.

        When the main thread gets notified about an async scroll, we set the new layout viewport
        on the FrameView, but do so in such a way that does not trigger layout. This is OK because
        we do a RenderLayer update which udpates all the layoutViewport-dependent state, and is
        necessary to avoid repaints every main thread update.

        The iOS code is made to compile, but not work yet.

        Tests: compositing/tiling/visiblerect-accumulated-offset.html
               fast/visual-viewport/tiled-drawing/zoomed-fixed-scrolled-down-then-up.html
               fast/visual-viewport/tiled-drawing/zoomed-fixed-scrolled-down.html
               fast/visual-viewport/tiled-drawing/zoomed-fixed-scrolling-layers-state.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setLayoutViewportOrigin):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::visualViewportRect):
        (WebCore::FrameView::unscaledMinimumScrollPosition):
        (WebCore::FrameView::scrollPositionChanged):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::visualViewportEnabled):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setLayoutViewport):
        (WebCore::ScrollingStateFrameScrollingNode::setMinLayoutViewportOrigin):
        (WebCore::ScrollingStateFrameScrollingNode::setMaxLayoutViewportOrigin):
        (WebCore::ScrollingStateFrameScrollingNode::setVisualViewportEnabled):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::visualViewportEnabled):
        (WebCore::ScrollingTree::setVisualViewportEnabled):
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewport):
        (WebCore::ScrollingTreeFrameScrollingNode::minLayoutViewportOrigin):
        (WebCore::ScrollingTreeFrameScrollingNode::maxLayoutViewportOrigin):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: W3C test IndexedDB/idbtransaction_objectStoreNames.html fails.
        https://bugs.webkit.org/show_bug.cgi?id=164528

        Reviewed by Alex Christensen.

        No new tests (Covered by existing test).

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction): De-dupe the input names.

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Implement new IDBCursor.continuePrimaryKey function.
        https://bugs.webkit.org/show_bug.cgi?id=164404

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbcursor-continue-primary-key-1-private.html
               storage/indexeddb/modern/idbcursor-continue-primary-key-1.html
               Also covered by existing tests.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continuePrimaryKey):
        (WebCore::IDBCursor::uncheckedIterateCursor):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursor.idl:

        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::operator>):
        (WebCore::IDBKeyData::operator<=):
        (WebCore::IDBKeyData::operator>=):

        * Modules/indexeddb/server/MemoryCursor.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):

        * Modules/indexeddb/server/MemoryIndexCursor.cpp:
        (WebCore::IDBServer::MemoryIndexCursor::iterate):
        * Modules/indexeddb/server/MemoryIndexCursor.h:

        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::iterate):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.h:

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::iterate):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:

        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::isolatedCopy):
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        (WebCore::IDBIterateCursorData::encode):
        (WebCore::IDBIterateCursorData::decode):

2016-11-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: set status label according to media state
        https://bugs.webkit.org/show_bug.cgi?id=164557
        <rdar://problem/29184097>

        Reviewed by Dean Jackson.

        Correctly set the StatusLabel text based on the media loading and network state.

        Tests: http/tests/media/modern-media-controls/status-support/status-support-live-broadcast.html
               http/tests/media/modern-media-controls/status-support/status-support-loading.html
               media/modern-media-controls/status-support/status-support-error.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/status-support.js: Added.
        (StatusSupport.prototype.get control):
        (StatusSupport.prototype.get mediaEvents):
        (StatusSupport.prototype.syncControl):
        (StatusSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-09  Zalan Bujtas  <zalan@apple.com>

        No need to set setFlowThreadState on RenderText in createTextRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=164559

        Reviewed by Antti Koivisto.

       setFlowThreadState in create*Renderer ensures that by the time we issue the initial call to
       styleWillChange/styleDidChange through initializeStyle, the state is already set.
       However since RenderText does not have its own style, it's sufficient to have the flow state set
       through the normal RenderElement::insertChildInternal code path.

        No change in functionality.

        * style/RenderTreeUpdater.cpp:
        (WebCore::createTextRenderer):

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Encapsulate cursor iteration parameters for easy future expansion.
        https://bugs.webkit.org/show_bug.cgi?id=164504

        Reviewed by Darin Adler.

        No new tests (Refactor, no behavior change).

        This patch literally just takes the "key" and "count" arguments and encapsulates them in a struct.
        That struct will then be easily expandable in the future (e.g. bug 164404).

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::uncheckedIterateCursor):
        
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::iterateCursorOnServer):
        * Modules/indexeddb/IDBTransaction.h:
        
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::iterateCursor):
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::iterateCursor):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::iterateCursor):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp: Added.
        (WebCore::IDBIterateCursorData::isolatedCopy):
        * Modules/indexeddb/shared/IDBIterateCursorData.h: Added.
        (WebCore::IDBIterateCursorData::encode):
        (WebCore::IDBIterateCursorData::decode):

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::iterateCursor):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

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

2016-11-09  Ryosuke Niwa  <rniwa@webkit.org>

        StyledElement::attributeChanged shouldn't do any work when the attribute value didn't change
        https://bugs.webkit.org/show_bug.cgi?id=129476

        Reviewed by Andreas Kling.

        Avoid calling styleAttributeChanged and setPresentationAttributeStyleIsDirty
        when the attribute value didn't change as in r164856.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

2016-11-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Node::ownerDocument
        https://bugs.webkit.org/show_bug.cgi?id=164004

        Reviewed by Darin Adler.

        Test: js/dom/domjit-accessor-owner-document.html

        Still I cannot reproduce this crash in x64 environment, according to the crash log, it accesses 0x8 address.
        This can happen if document() accidentally returns nullptr. In the C++ ownerDocument implementation,
        if document() returns nullptr, it just returns nullptr. But in the DOMJIT implementation, we assume that
        document() won't return nullptr and access the member of it.

        This patch aligns the DOMJIT implementation strictly to the C++ one.

        * dom/Node.idl:
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM):
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter):

2016-11-09  Sam Weinig  <sam@webkit.org>

        [SVG] Start moving special casing of SVG out of the bindings - SVGAngle
        https://bugs.webkit.org/show_bug.cgi?id=164496

        Reviewed by Darin Adler.

        There is quite a bit of special casing of SVG types in the bindings that adds
        a lot of complexity and is relatively fragile, as it is based on type naming.

        Instead of keeping the complexity in the bindings, I am going to move it into
        the implementation, where it has also longed to be. 

        Starting small, with just SVGAngle. It has been split in two, with the existing
        SVGAngle being renamed SVGAngleValue, and the bound instance, which used to be name
        SVGPropertyTearOff<SVGAngle>, taking the name SVGAngle (and inheriting from 
        SVGPropertyTearOff<SVGAngleValue>).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add SVGAngleValue.cpp

        * bindings/scripts/CodeGenerator.pm:
        Remove SVGAngle as a special case.

        * svg/SVGAngle.cpp: Removed.
        * svg/SVGAngle.h:
        Added. Implements the SVGAngle interface explicitly, getting to
        the SVGAngleValue through propertyReference().

        * svg/SVGAngle.idl:
        * svg/SVGAngleValue.cpp: Copied from Source/WebCore/svg/SVGAngle.cpp.
        * svg/SVGAngleValue.h: Copied from Source/WebCore/svg/SVGAngle.h.
        Move old SVGAngle implementation to SVGAngleValue.

        * svg/SVGAnimatedAngle.cpp:
        Replace SVGAngle usage with SVGAngleValue.

        * svg/SVGAnimatedAngle.h:
        Switch SVGAnimatedAngle to be a type alias. This remains SVGAnimatedPropertyTearOff<SVGAngle>
        as SVGAnimatedPropertyTearOff has been changed to take the TearOff type as its parameter.

        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        Switch to using type aliases and pass the TearOff to SVGAnimatedPropertyTearOff.

        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createAngleAndEnumeration):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::angleAndEnumeration):
        Use SVGAngleValue.

        * svg/SVGComponentTransferFunctionElement.h:
        Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseAttribute):
        (WebCore::SVGMarkerElement::setOrient):
        Switch to take an SVGAngleValue.

        (WebCore::SVGMarkerElement::setOrientToAngle):
        Update to pull the value out via propertyReference().

        * svg/SVGMarkerElement.h:
        Switch to take an SVGAngleValue.

        * svg/SVGLengthList.h:
        * svg/SVGNumberList.h:
        * svg/SVGPathSegList.h:
        * svg/SVGPointList.h:
        * svg/SVGStringList.h:
        * svg/SVGTransformList.h:
        Switch to using type aliases in SVGPropertyTraits and add an alias for
        ListItemTearOff.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGAngle):
        * svg/SVGSVGElement.h:
        Change createSVGAngle to return a Ref<SVGAngle> and create one.

        * svg/SVGSVGElement.idl:
        Annotate IDL to indicate that a new value is being returned.

        * svg/SVGTransform.cpp:
        Remove unnecessary include of SVGAngle.h.

        * svg/SVGViewSpec.cpp:
        Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).

        * svg/properties/SVGAnimatedPropertyTearOff.h:
        Change to be parameterized on the TearOffType, rather than the PropertyType itself. Get the
        Property type from the TearOffType.

        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGListPropertyTearOff.h:
        Fix assumption that all TearOffTypes are just a SVGPropertyTearOff templatized on a property
        type. This is no longer true for SVGAngle. Instead, get the TearOffType for lists via SVGPropertyTraits.

        * svg/properties/SVGPropertyTearOff.h:
        Make the PropertyType available by exposing it as a type alias.

2016-11-09  Darin Adler  <darin@apple.com>

        Move Range from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164457

        Reviewed by Alex Christensen.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeForNodeContents): Update to use ExceptionOr,
        keeping behavior the same.
        (WebCore::characterOffsetsInOrder): Ditto.
        (WebCore::setRangeStartOrEndWithCharacterOffset): Changed argument to a
        reference instead of a pointer. Use a boolean return value to indicate
        success rather than an exception, since the callers don't need to know
        which exception it is.
        (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): Updated for
        the above.
        (WebCore::AXObjectCache::nextBoundary): Ditto.
        (WebCore::AXObjectCache::previousBoundary): Ditto.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection):
        Update to use ExceptionOr, keeping behavior the same.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentBasedSelectedTextRange): Ditto.
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (selectionBelongsToObject): Ditto.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::textRects): Ditto.

        * dom/Range.cpp:
        (WebCore::Range::~Range): Remove old comment that no longer makes sense now
        that the detach function no longer does anything.
        (WebCore::checkForDifferentRootContainer): Updated to use ExceptionOr,
        keeping behavior the same.
        (WebCore::Range::setStart): Ditto.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::isPointInRange): Ditto.
        (WebCore::Range::comparePoint): Ditto.
        (WebCore::Range::compareNode): Ditto.
        (WebCore::top): Added helper function so that compareBoundaryPoints doesn't
        need to have two identical loops in it.
        (WebCore::Range::compareBoundaryPoints): Updated to use ExceptionOr,
        keeping behavior the same.
        (WebCore::Range::compareBoundaryPointsForBindings): Ditto. Also use a switch
        instead of relying on the order of the values to check for unsupported values.
        (WebCore::Range::boundaryPointsValid): Ditto.
        (WebCore::Range::deleteContents): Ditto.
        (WebCore::Range::intersectsNode): Ditto.
        (WebCore::Range::processContents): Ditto.
        (WebCore::deleteCharacterData): Ditto.
        (WebCore::processContentsBetweenOffsets): Ditto. Also changed to be a
        non-member function and private to this file instead of in the class.
        (WebCore::processNodes): Ditto. Also changed one argument to be a RefPtr
        since the code relies on using it after mutating the DOM.
        (WebCore::processAncestorsAndTheirSiblings): Ditto. Changed one argument type
        to use ExceptionOr so the caller doesn't have to check the exception first.
        (WebCore::Range::extractContents): Ditto.
        (WebCore::Range::cloneContents): Ditto.
        (WebCore::Range::insertNode): Ditto. Also fixed to only call nodeType once
        instead of three times.
        (WebCore::Range::toString): Ditto. Also fixed to call nodeType only once
        per node instead of twice, to use downcast instead of static_cast, and to
        use the word "node" instead of "n" for the local variable name.
        (WebCore::Range::createContextualFragment): Ditto.
        (WebCore::Range::checkNodeWOffset): Ditto.
        (WebCore::Range::setStartAfter): Ditto.
        (WebCore::Range::setEndBefore): Ditto.
        (WebCore::Range::setEndAfter): Ditto.
        (WebCore::Range::selectNode): Ditto.
        (WebCore::Range::selectNodeContents): Ditto.
        (WebCore::Range::surroundContents): Ditto.
        (WebCore::Range::setStartBefore): Ditto.
        (WebCore::Range::contains): Ditto. Except added code to handle exception
        case to return false without asserting because I saw at least one crash
        that seemed to imply this behavior was needed.
        (WebCore::rangesOverlap): Ditto.
        (WebCore::rangeOfContents): Ditto.
        (WebCore::Range::expand): Ditto.
        (WebCore::Range::getClientRects): Ditto.
        (WebCore::Range::getBoundingClientRect): Ditto.
        (WebCore::Range::borderAndTextQuads): Changed to use return value
        instead of out argument, since it's a private function used only
        within this class so it was easy to update all call sites.
        (WebCore::Range::boundingRect): Updated for above. Also renamed since
        there was no need for the name "internal" in this.
        (WebCore::Range::absoluteBoundingRect): Ditto.
        * dom/Range.h: Updated for above.
        * dom/Range.idl: Use non-legacy exceptions. Also changed the default value
        of the string argument to the expand function to the empty string rather
        than "undefined", because the function silently does nothing when passed
        any unrecognized string, and so this leaves behavior unchanged. I removed
        the comment saying that the "undefined" default is wrong.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange): Updated
        to use ExceptionOr but behave the same.
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling): Ditto.
        (WebCore::Editor::markAndReplaceFor): Ditto.
        (WebCore::isFrameInRange): Ditto. Also made a few style tweaks.
        (WebCore::Editor::countMatchesForText): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges): Ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::respondToNodeModification): Ditto.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Ditto.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::offsetTo): Ditto.
        * editing/TextCheckingHelper.h: Updated for above and also deleted
        unneeded private function checkingRange, which just churned the
        reference count unnecessarily; instead use m_checkingRange directly.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::getLocationAndLengthFromRange): Ditto.
        * editing/VisiblePosition.cpp:
        (WebCore::setStart): Ditto.
        (WebCore::setEnd): Ditto.
        * editing/VisibleSelection.cpp:
        (WebCore::makeSearchRange): Ditto.

        * editing/VisibleUnits.cpp:
        (WebCore::suffixLengthForRange): Changed argument from RefPtr to
        a reference.
        (WebCore::prefixLengthForRange): Ditto.
        (WebCore::previousBoundary): Updated for ExceptionOr and the change
        above.
        (WebCore::nextBoundary): Ditto.
        * editing/VisibleUnits.h: Updated for above.

        * editing/htmlediting.cpp:
        (WebCore::comparePositions): Updated to use ExceptionOr but behave
        the same.
        (WebCore::visiblePositionForIndexUsingCharacterIterator): Ditto.
        (WebCore::isNodeVisiblyContainedWithin): Ditto.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto.
        (WebCore::Editor::setTextAsChildOfElement): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::adjustedSelectionRange): Ditto.
        * editing/markup.cpp:
        (WebCore::createMarkupInternal): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::addRange): Ditto.
        (WebCore::DOMSelection::deleteFromDocument): Ditto.
        (WebCore::DOMSelection::containsNode): Ditto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Updated for change to
        use ExceptionOr in Ragne::compareNode. Also refactored the function
        to make the logic a little mroe straightforward and nest less of it
        inside a loop.

        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges): Updated for ExceptionOr
        without changing behavior.
        * page/TextIndicator.cpp:
        (WebCore::hasNonInlineOrReplacedElements): Ditto.
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges): Ditto.

2016-11-09  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix grid layout parsing
        https://bugs.webkit.org/show_bug.cgi?id=164489

        Reviewed by Dean Jackson.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFitContent):
        (WebCore::isGridTrackFixedSized):
        (WebCore::consumeGridTrackSize):
        (WebCore::consumeGridTrackRepeatFunction):
        (WebCore::consumeGridTrackList):
        (WebCore::isCustomIdentValue):
        (WebCore::CSSPropertyParser::consumeGridItemPositionShorthand):
        (WebCore::CSSPropertyParser::consumeGridAreaShorthand):
        (WebCore::consumeImplicitGridAutoFlow):
        (WebCore::CSSPropertyParser::consumeGridShorthand):

2016-11-09  Darin Adler  <darin@apple.com>

        Move EventTarget from ExceptionCode to ExceptionOr
        https://bugs.webkit.org/show_bug.cgi?id=164465

        Reviewed by Youenn Fablet.

        * Modules/indexeddb/IDBRequest.h: Added now-needed forward
        class declarations.
        * Modules/webaudio/AudioContext.h: Ditto.

        * bindings/js/JSEventListener.cpp:
        (WebCore::eventHandlerAttribute): Updated for name change of the
        attributeEventListener function.
        (WebCore::documentEventHandlerAttribute): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::getWindowAttributeEventListener): Ditto.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::setAttributeEventListener): Updated for
        name change.
        (WebCore::EventTarget::attributeEventListener): Ditto.
        (WebCore::EventTarget::dispatchEventForBindings): Use ExceptionOr.
        (WebCore::legacyType): Use null instead of empty for no type, since
        it's more efficient to check for null.
        (WebCore::EventTarget::fireEventListeners): Check for null.
        Also streamlined logic a little bit and removed a very old comment.
        (WebCore::EventTarget::eventListeners): Renamed from getEventListeners.
        * dom/EventTarget.h: Removed lots of unneeded declarations. Renamed
        some functions to remove get prefix. Updated for above changes.
        Moved one inline function out of the class header. Made the destructor
        for EventTarget be inline to make the destructors for derived classes
        slightly more efficient.
        * dom/EventTarget.idl: Use non-legacy exception.

        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument): Updated for name change.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.

        * inspector/InspectorCSSAgent.h: Added now-needed forward declaration.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListeners): Updated for name change.

        * inspector/InspectorInstrumentation.h: Added now-needed forward declaration.
        * page/DOMWindow.h: Ditto.
        * xml/XMLHttpRequest.h: Ditto.

2016-11-09  Daniel Bates  <dabates@apple.com>

        Add test infrastructure and tests for existing HTTP 0.9 sandbox machinery
        https://bugs.webkit.org/show_bug.cgi?id=164389
        <rdar://problem/29101072>

        Reviewed by Alex Christensen.

        Add test infrastructure to support registering an arbitrary port as the default port
        for a protocol. The behavior of various machinery, including the HTTP 0.9 machinery,
        can be effected by whether the resource request was made using the default port for
        the protocol. We expose window.internals.registerDefaultPortForProtocol() to allow
        a test to override the default port associated with a protocol so as to support
        testing these code paths using the existing port 8000 server started by run-webkit-httpd.
        Without window.internals.registerDefaultPortForProtocol() we would need to teach
        run-webkit-httpd to run a web server on port 80, which requires superuser privileges
        (since it is a privileged port number) and is more likely to interfere with an
        existing web server setup.

        Tests: http/tests/security/http-0.9/default-port-plugin-blocked.html
               http/tests/security/http-0.9/default-port-script-blocked.html
               http/tests/security/http-0.9/iframe-blocked.html
               http/tests/security/http-0.9/image-blocked.html
               http/tests/security/http-0.9/image-on-HTTP-0.9-default-port-page-allowed-ref-test.html
               http/tests/security/http-0.9/image-on-HTTP-0.9-default-port-page-allowed.html
               http/tests/security/http-0.9/image-on-HTTP-0.9-page-blocked.html
               http/tests/security/http-0.9/worker-connect-src-blocked.html
               http/tests/security/http-0.9/worker-importScripts-blocked.html
               http/tests/security/http-0.9/xhr-asynchronous-blocked.html

        * platform/URL.cpp:
        (WebCore::defaultPortForProtocolMapForTesting): Added.
        (WebCore::registerDefaultPortForProtocolForTesting): Adds the specified (protocol, port) to the
        mapping used for testing.
        (WebCore::clearDefaultPortForProtocolMapForTesting): Clears the protocol to default port testing map.
        We call this function from Internals::resetToConsistentState() so that the mapping is cleared between
        test runs.
        (WebCore::defaultPortForProtocol): Modified to check the protocol to default port map for testing
        before consulting URLParser::defaultPortForProtocol().
        * platform/URL.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Clear the default port mapping used for testing.
        (WebCore::Internals::registerDefaultPortForProtocol): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Added declaration for registerDefaultPortForProtocol().

2016-11-09  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add proper parsing for Promises
        https://bugs.webkit.org/show_bug.cgi?id=164497

        Reviewed by Tim Horton.

        * bindings/scripts/IDLParser.pm:
        (parseNonAnyType):
        (parseStringType):
        Require Promise types to declare the type they resolve to.
        
        * bindings/js/JSDOMPromise.h:
        Allow DOMPromise to be be parameterized on void. Add an SFINAE guarded
        overload of resolve that takes no arguments when in a DOMPromise<void>.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/fetch/DOMWindowFetch.idl:
        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/WorkerGlobalScopeFetch.idl:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/streams/ReadableStream.idl:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * Modules/streams/ReadableStreamSource.idl:
        * Modules/streams/WritableStream.idl:
        * Modules/webaudio/AudioContext.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * crypto/SubtleCrypto.idl:
        * crypto/WebKitSubtleCrypto.idl:
        * css/FontFace.idl:
        * css/FontFaceSet.idl:
        * dom/CustomElementRegistry.idl:
        * html/HTMLMediaElement.idl:
        Update IDLs to specify the resolve type of promise types.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::replaceTrack):
        (WebCore::MediaEndpointPeerConnection::replaceTrackTask):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/streams/ReadableStreamSource.h:
        (WebCore::ReadableStreamSource::start):
        (WebCore::ReadableStreamSource::pull):
        (WebCore::ReadableStreamSource::startFinished):
        (WebCore::ReadableStreamSource::pullFinished):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::addReaction):
        (WebCore::AudioContext::setState):
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        (WebCore::AudioContext::close):
        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::resolvePendingPlayPromises):
        (WebCore::HTMLMediaElement::play):
        * html/HTMLMediaElement.h:
        Update implementations to use DOMPromise<void> rather than DOMPromise<nullptr_t>
        and use the new resolve() overload.

2016-11-07  Brady Eidson  <beidson@apple.com>

        Followup to https://bugs.webkit.org/show_bug.cgi?id=164466 - Make an IDBTransaction* be an IDBTransaction&

        Rubberstamped by Alex Christensen.

        No new tests (No behavior change).

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::~IDBObjectStore):
        (WebCore::IDBObjectStore::hasPendingActivity):
        (WebCore::IDBObjectStore::name):
        (WebCore::IDBObjectStore::setName):
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::transaction):
        (WebCore::IDBObjectStore::autoIncrement):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::get):
        (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):
        (WebCore::IDBObjectStore::ref):
        (WebCore::IDBObjectStore::deref):
        * Modules/indexeddb/IDBObjectStore.h:

2016-11-09  Zalan Bujtas  <zalan@apple.com>

        Move RenderNamedFlowThread nextRendererForElement logic to RenderTreeUpdater.
        https://bugs.webkit.org/show_bug.cgi?id=164503

        Reviewed by Antti Koivisto.

        When we insert a renderer into the render tree, we need to know both its parent
        and its next sibling. Normally the parent and the sibling are based on the DOM, but
        when this renderer is part of a flow thread, its insertion sibling is not necessarily the DOM sibling.
        To find the correct sibling, we call RenderNamedFlowThread's nextRendererForElement().
        RenderNamedFlowThread keeps track of its children so that it can compute the next sibling
        for the insertion point.

        This patch eliminates the need for keeping track of the child renderers of each
        flow by moving the 'next sibling' logic to RenderTreePosition.

        No change in functionality.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertedIntoTree):
        (WebCore::RenderElement::willBeDestroyed):
        (WebCore::RenderElement::removeFromRenderFlowThread):
        (WebCore::RenderElement::renderNamedFlowThreadWrapper): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForElement): Deleted.
        (WebCore::RenderNamedFlowThread::addFlowChild): Deleted.
        (WebCore::RenderNamedFlowThread::removeFlowChild): Deleted.
        * rendering/RenderNamedFlowThread.h:
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::previousSiblingRenderer):
        (WebCore::RenderTreePosition::flowThreadInsertionContext):
        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        (WebCore::RenderTreePosition::parent):
        * style/RenderTreeUpdater.cpp:
        (WebCore::registerElementForFlowThreadIfNeeded): We need to registed the element even when it does not create renderer (display: none).
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::moveToFlowThreadIfNeeded): Deleted.

2016-11-09  Per Arne Vollan  <pvollan@apple.com>

        [Win][Direct2D] Incomplete image decoding.
        https://bugs.webkit.org/show_bug.cgi?id=164511

        Reviewed by Darin Adler.

        Create native decoder when all image data has been received.

        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::setData):

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * platform/spi/cocoa/AVKitSPI.h:

2016-11-09  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Clean up more transaction abort behavior, including tweaks to Index/ObjectStore lifetime.
        https://bugs.webkit.org/show_bug.cgi?id=164466

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests that now pass).
        
        Previously, IDBIndex ref/deref didn't track a traditional ref count but instead kept the owning object store alive.
        Now, IDBObjectStore ref/deref do the same thing for the owning transaction.
        
        Now when a version change transaction is rolled back, some object stores and indexes get pulled out of the "deleted"
        set and get promoted back up into the "referenced" set.
        
        Now deleted object stores/indexes are considered opaque roots, as live objects in the deleted state *can* get back
        to the owning objects.

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

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::rollbackInfoForVersionChangeAbort):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::transaction):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):
        (WebCore::IDBObjectStore::visitReferencedIndexes):
        (WebCore::IDBObjectStore::ref):
        (WebCore::IDBObjectStore::deref):
        (WebCore::IDBObjectStore::create): Deleted.
        * Modules/indexeddb/IDBObjectStore.h:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::transitionedToFinishing):
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::visitReferencedObjectStores):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:

        * bindings/js/JSIDBTransactionCustom.cpp: Added.
        (WebCore::JSIDBTransaction::visitAdditionalChildren):

2016-11-09  Simon Fraser  <simon.fraser@apple.com>

        Allow customization of TextStream-based logging for geometry types
        https://bugs.webkit.org/show_bug.cgi?id=164460

        Reviewed by Zalan Bujtas.

        TextStream-based logging was constrained by the requirement to maintain compatibility
        with DRT-style output, which includes cumbersome rect logging ("at (5,0) size 40x40")
        and dumping LayoutRects as IntRects.
        
        Add some formatting flags so that other TextStream clients (e.g. logging) can have
        more readable output, and opt into automatic FormatNumberRespectingIntegers behavior.
        
        TextStreams whose output appears in test results are given flags to avoid behavior
        changes, but in the longer term test results should be updated.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::replayDisplayListAsText):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText):
        * platform/graphics/FloatPoint.cpp:
        (WebCore::operator<<):
        * platform/graphics/FloatRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::layerTreeAsText):
        * platform/graphics/IntRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/LayoutPoint.cpp:
        (WebCore::operator<<):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::replayDisplayListAsText):
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::asText):
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        (WebCore::TextStream::TextStream):
        (WebCore::TextStream::formattingFlags):
        (WebCore::TextStream::setFormattingFlags):
        (WebCore::TextStream::hasFormattingFlag):
        (WebCore::TextStream::increaseIndent):
        (WebCore::TextStream::decreaseIndent):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):
        (WebCore::counterValueForElement):

2016-11-09  Zalan Bujtas  <zalan@apple.com>

        RenderFlowThread::flowThreadRelativeWillBeRemoved should take RenderObject& instead of RenderObject*
        https://bugs.webkit.org/show_bug.cgi?id=164543

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeChild):
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::handleSpannerRemoval):
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        * rendering/RenderMultiColumnFlowThread.h:

2016-11-09  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r208149): Media scrubber is not displayed in media controls
        https://bugs.webkit.org/show_bug.cgi?id=164514

        Reviewed by Darin Adler.

        Fixes broken Media Controls API tests.

        Added a new PlatformMediaSessionType; need to add that same type to the TYPE_TRAITS section of 
        MediaElementSession.h so that is<> and downcast<> work correctly.

        * html/MediaElementSession.h:
        (isType):

2016-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        When editing IME, `compositionend` events should fire after input events
        https://bugs.webkit.org/show_bug.cgi?id=164324
        <rdar://problem/29050438>

        Reviewed by Darin Adler.

        Moves where we dispatch `compositionend` events to after applying editing commands that fire `beforeinput` or
        `input` events. Also augments existing layout tests to verify the change.

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

2016-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Setting foreground color when text is selected should fire an input event with color data
        https://bugs.webkit.org/show_bug.cgi?id=164241
        <rdar://problem/29032759>

        Reviewed by Darin Adler.

        Refactors Editor::applyStyle and Editor::applyParagraphStyle to handle beforeinput and input event dispatch.
        Instead of going through the ApplyStyleCommand to dispatch input events, override shouldDispatchInputEvents to
        return false. This strategy also has the effect of unifying the way input events are dispatched in applyStyle,
        in both codepaths where we computeAndSetTypingStyle and where we create and then apply a style command.

        Test: fast/events/input-events-selection-forecolor-data.html

        * editing/ApplyStyleCommand.h:
        * editing/Editor.cpp:
        (WebCore::inputEventDataForEditingStyleAndAction):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::computeAndSetTypingStyle):

2016-11-08  Dean Jackson  <dino@apple.com>

        Rendering support for ExtendedColors
        https://bugs.webkit.org/show_bug.cgi?id=164443
        <rdar://problems/29123243>

        Reviewed by Simon Fraser and Darin Adler.

        Add support for rendering the new color() syntax, which
        ends up as an ExtendedColor.

        In order to make rendering code a little more readable, I
        changed Color::hasAlpha to Color::isOpaque (since an alpha
        of 100% is still an alpha), and added a Color::isVisible
        helper (the color isn't completely transparent). These new
        helpers support ExtendedColor forms.

        Support for painting gradients and blending between colors
        is still to come. I also added some FIXME comments
        to show other places that don't handle ExtendedColors yet.

        Tests: css3/color/backgrounds-and-borders.html
               css3/color/box-shadows.html
               css3/color/canvas.html
               css3/color/composited-solid-backgrounds.html
               css3/color/text.html

        * css/CSSGradientValue.cpp: Add some notes that this is broken.
        (WebCore::interpolate):
        (WebCore::CSSGradientValue::knownToBeOpaque):

        * editing/EditingStyle.cpp: Use new Color helpers.
        (WebCore::isTransparentColorValue):

        * editing/mac/EditorMac.mm: Use new Color helpers.
        (WebCore::Editor::fontAttributesForSelectionStart):

        * html/ColorInputType.cpp: No need to use the Color class at all here.
        (WebCore::isValidSimpleColorString): Renamed from isValidColorString.
        (WebCore::ColorInputType::sanitizeValue):
        (WebCore::ColorInputType::typeMismatchFor):
        (WebCore::isValidColorString): Deleted.

        * html/canvas/CanvasRenderingContext2D.cpp: New helpers.
        (WebCore::CanvasRenderingContext2D::shouldDrawShadows):
        (WebCore::CanvasRenderingContext2D::didDraw):

        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::recalculateScrollbarOverlayStyle):
        (WebCore::FrameView::hasOpaqueBackground):
        (WebCore::FrameView::setBaseBackgroundColor):

        * platform/graphics/Color.cpp:
        (WebCore::differenceSquared): Support ExtendedColor, but also
        add a note to indicate that this method and its call sites
        should use floats.
        (WebCore::Color::serialized): New helper.
        (WebCore::Color::cssText): Ditto.
        (WebCore::Color::blend): Ditto.
        (WebCore::Color::blendWithWhite):
        (WebCore::Color::colorWithAlphaMultipliedBy): Implementation of new function.
        (WebCore::Color::colorWithAlpha): Ditto.
        (WebCore::Color::opaqueColor): New method to return an opaque version of the given color.
        (WebCore::blend):
        * platform/graphics/Color.h:
        (WebCore::Color::isOpaque): New helper that is !hasAlpha().
        (WebCore::Color::isVisible): New helper.
        (WebCore::Color::alphaAsFloat): Gets the alpha value as a float. This replaces
        a bunch of places that were calculating it manually each time. Meanwhile, we
        might consider always exposing the primaries as floats... or at least
        have that option.
        (WebCore::isBlackColor): New helper - it was used in a couple of places.
        (WebCore::isWhiteColor): Ditto.
        (WebCore::Color::hasAlpha): Deleted.

        * platform/graphics/Gradient.cpp: Add FIXME.
        (WebCore::Gradient::addColorStop):
        * platform/graphics/Gradient.h:

        * platform/graphics/GraphicsContext.cpp: Use new helpers.
        (WebCore::GraphicsContext::computeLineBoundsAndAntialiasingModeForText):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::hasVisibleShadow):

        * platform/graphics/Image.cpp: Ditto.
        (WebCore::Image::fillWithSolidColor):

        * platform/graphics/ShadowBlur.cpp: Ditto.
        (WebCore::ShadowBlur::updateShadowBlurValues):

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

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient): Add a FIXME to note that we can
        add ExtendedColor support simply by using CGColors, rather than fetching
        the components ourselves.

        * platform/graphics/cg/GraphicsContextCG.cpp: New helpers.
        (WebCore::calculateDrawingMode):

        * platform/graphics/cocoa/FontCascadeCocoa.mm: New helpers.
        (WebCore::FontCascade::drawGlyphs):

        * platform/graphics/mac/ColorMac.mm: Use the new helpers and Color::hash().
        (WebCore::nsColor):

        * platform/graphics/texmap/TextureMapperGL.cpp: New helpers.
        (WebCore::TextureMapperGL::drawBorder):

        * rendering/BorderEdge.cpp: Ditto.
        (WebCore::BorderEdge::obscuresBackgroundEdge):
        (WebCore::BorderEdge::obscuresBackground):

        * rendering/RenderBox.cpp: Ditto.
        (WebCore::RenderBox::getBackgroundPaintedExtent):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer):

        * rendering/RenderBoxModelObject.cpp: Ditto.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::colorNeedsAntiAliasAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canCreateTiledImage):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::viewHasTransparentBackground):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::getItemBackgroundColor):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextWithShadows):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::isTransparent):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasBackground):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):

        * svg/SVGAnimatedColor.cpp: Add a FIXME to note this is broken.
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):

2016-11-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] UI Library: StatusLabel
        https://bugs.webkit.org/show_bug.cgi?id=164544
        <rdar://problem/29179541>

        Reviewed by Dean Jackson.

        We add a new StatusLabel class to display a string of text in place of the TimeControl.
        A followup patch will add the logic to display "Error", "Loading" and "Live Broadcast"
        test under the right media state.

        Tests: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-status-label.html
               media/modern-media-controls/status-label/status-label.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline .time-label,):
        (.media-controls.mac.inline .time-label): Deleted.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.):
        * Modules/modern-media-controls/controls/status-label.css: Added.
        (.status-label):
        * Modules/modern-media-controls/controls/status-label.js: Added.
        (StatusLabel.prototype.get text):
        (StatusLabel.prototype.set text):
        (StatusLabel.prototype.commitProperty):
        * Modules/modern-media-controls/js-files:
        * WebCore.xcodeproj/project.pbxproj:

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [Mac] Stop using deprecated AppKit enumeration values
        https://bugs.webkit.org/show_bug.cgi?id=164494

        Reviewed by Darin Adler.

        Stop using deprecated AppKit enumeration values.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::computedAttributesForElement):
        (HTMLConverter::_processElement):
        (HTMLConverter::_addMarkersToList):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::keyEvent):
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::widgetDidHandleWheelEvent):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::paint):
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        * platform/mac/DragImageMac.mm:
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::mouseEventTypeForEvent):
        (WebCore::clickCountForEvent):
        (WebCore::isKeypadEvent):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::isKeyUpEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarControlSizeToNSControlSize):
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView window]):
        (WebCore::controlSizeForFont):
        (WebCore::controlSizeFromPixelSize):
        (WebCore::setUpButtonCell):
        (WebCore::stepperControlSizeForFont):
        (WebCore::paintStepper):
        (WebCore::ThemeMac::minimumControlSize):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WebVideoFullscreenHUDWindow performKeyEquivalent:]):
        (-[WebVideoFullscreenHUDWindowController init]):
        (-[WebVideoFullscreenHUDWindowController keyDown:]):
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):
        * platform/mac/WebWindowAnimation.mm:
        (WebWindowAnimationDurationFromDuration):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateCachedSystemFontDescription):
        (WebCore::RenderThemeMac::controlSizeForFont):
        (WebCore::RenderThemeMac::controlSizeForCell):
        (WebCore::RenderThemeMac::controlSizeForSystemFont):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::popupMenuSize):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2016-11-08  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] UI Library: iOS inline controls
        https://bugs.webkit.org/show_bug.cgi?id=164513
        <rdar://problem/27989475>

        Reviewed by Dean Jackson.

        We introduce a new IOSInlineMediaControls class which can be used to instantiate media controls
        for inline playback on iOS.

        Tests: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-buttons-styles.html
               media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-constructor.html
               media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-controls-bar-styles.html
               media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-layout.html
               media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-time-control-styles.html
               media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css: Added.
        (.media-controls.ios.inline > .controls-bar):
        (.media-controls.ios.inline .time-control):
        (.media-controls.ios.inline button):
        (.media-controls.ios.inline button:active):
        (.media-controls.ios.inline > .controls-bar button):
        (.media-controls.ios.inline .buttons-container.right):
        (.media-controls.ios.inline button.play-pause):
        (.media-controls.ios.inline button.skip-back):
        (.media-controls.ios.inline .scrubber.slider):
        (.media-controls.ios.inline button.airplay):
        (.media-controls.ios.inline button.pip):
        (.media-controls.ios.inline button.fullscreen):
        (.media-controls.ios.inline .time-label):
        (.media-controls.ios.inline .scrubber.slider > .fill):
        (.media-controls.ios.inline .scrubber.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js: Added.
        (IOSInlineMediaControls.prototype.layout):
        (IOSInlineMediaControls):
        * Modules/modern-media-controls/images/iOS/slider-thumb@2x.png: Added.
        * Modules/modern-media-controls/js-files:
        * WebCore.xcodeproj/project.pbxproj:

2016-11-09  Beth Dakin  <bdakin@apple.com>

        Support TouchBar in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=164437
        -and corresponding-
        rdar://problem/28876524

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/cocoa/AVKitSPI.h:
        * platform/spi/cocoa/NSTouchBarSPI.h: Added.
        * platform/spi/mac/NSSpellCheckerSPI.h:

2016-11-09  Chris Dumez  <cdumez@apple.com>

        Use Blob URL instead of webkit-fake-url when pasting an image
        https://bugs.webkit.org/show_bug.cgi?id=49141

        Reviewed by Darin Adler.

        Use Blob URL instead of webkit-fake-url when pasting an image.

        Tests: editing/pasteboard/paste-image-as-blob-url.html
               editing/pasteboard/paste-image-using-image-data.html

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readImage):
        (WebCore::Editor::createFragmentForImageAndURL):

2016-11-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix error message when SQLite initialization fails
        https://bugs.webkit.org/show_bug.cgi?id=164462

        Reviewed by Darin Adler.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::initializeSQLiteIfNecessary):

2016-11-08  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] UI Library: macOS fullscreen controls
        https://bugs.webkit.org/show_bug.cgi?id=164414
        <rdar://problem/27989474>

        Reviewed by Dean Jackson.

        We introduce a new MacOSFullscreenMediaControls class which can be used to instantiate media controls
        for fullscreen playback on macOS. These controls can be dragged by the user.

        Tests: media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-controls-bar-styles.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-time-control-styles.html
               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-volume-styles.html

        * Modules/modern-media-controls/controls/button.js:
        (Button.prototype.set enabled):

            Correctly notify the layoutDelegate when the enabled property changes, regardless of whether
            the flag is on.

        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype._updateImage):
        (IconButton):

            Correctly notify the layout delegate when the image metrics have changed so that it may perform
            a layout. This issues became apparent with the new tests on Yosemite and caused some flakyness.

        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconNameAndLayoutTraits):
        (const.iconService.new.IconService):

            Fix a typo.

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css: Added.
        (.media-controls.mac.fullscreen > .controls-bar):
        (.media-controls.mac.fullscreen .volume.slider):
        (.media-controls.mac.fullscreen .buttons-container):
        (.media-controls.mac.fullscreen .buttons-container.center):
        (.media-controls.mac.fullscreen > .controls-bar button):
        (.media-controls.mac.fullscreen button.rewind):
        (.media-controls.mac.fullscreen button.play-pause):
        (.media-controls.mac.fullscreen button.forward):
        (.media-controls.mac.fullscreen .buttons-container.right):
        (.media-controls.mac.fullscreen button.airplay):
        (.media-controls.mac.fullscreen button.aspect-ratio):
        (.media-controls.mac.fullscreen button.pip):
        (.media-controls.mac.fullscreen button.tracks):
        (.media-controls.mac.fullscreen button.fullscreen):
        (.media-controls.mac.fullscreen .time-control):
        (.media-controls.mac.fullscreen .time-label):
        (.media-controls.mac.fullscreen .scrubber):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js: Added.
        (MacOSFullscreenMediaControls.prototype.layout):
        (MacOSFullscreenMediaControls):
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls):
        
            Allow the layoutTraits property to be set to something other than just LayoutTraits.macOS
            so that MacOSFullscreenMediaControls may set the LayoutTraits.Fullscreen bit.
        
        * Modules/modern-media-controls/js-files:
        
            Add a reference to the new macos-fullscreen-media-controls.js file.
        
        * WebCore.xcodeproj/project.pbxproj:

            Add references to the new macos-fullscreen-media-controls.js and
            macos-fullscreen-media-controls.css files.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        Shave 16 bytes off HTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=164488

        Reviewed by Sam Weinig.

        Shave 16 bytes off HTMLInputElement (232 -> 216) by packing data members
        better.

        * html/HTMLFormControlElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
        * html/HTMLTextFormControlElement.h:

2016-11-09  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Introduce asynchronous backend for other RTCPeerConnection API
        https://bugs.webkit.org/show_bug.cgi?id=164409

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Following on createOffer changes, applying the same changes to createAnswer, setLocalDescription, setRemoteDescription and addIceCandidate.
        Also refactored ICE candidate event generation (done at PeerConnectionBackend).
        Updated stop implementation to clean any promise that may be stored in PeerConnectionBackend.

        The goal of this is to be more aligned with https://www.w3.org/TR/webrtc/.
        Implementation of the various functions such as //www.w3.org/TR/webrtc/#set-description would be done in PeerConnectionBackend.
        This will require additional code moved from MediaEndpointPeerConnection up to PeerConnectionBackend.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::doCreateAnswer):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        (WebCore::MediaEndpointPeerConnection::doSetLocalDescription):
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::doSetRemoteDescription):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::doAddIceCandidate):
        (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
        (WebCore::MediaEndpointPeerConnection::doStop):
        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
        (WebCore::MediaEndpointPeerConnection::doneGatheringCandidates):
        (WebCore::MediaEndpointPeerConnection::createAnswer): Deleted.
        (WebCore::MediaEndpointPeerConnection::setLocalDescription): Deleted.
        (WebCore::MediaEndpointPeerConnection::setRemoteDescription): Deleted.
        (WebCore::MediaEndpointPeerConnection::addIceCandidate): Deleted.
        (WebCore::MediaEndpointPeerConnection::stop): Deleted.
        (WebCore::MediaEndpointPeerConnection::localDescriptionTypeValidForState): Deleted.
        (WebCore::MediaEndpointPeerConnection::remoteDescriptionTypeValidForState): Deleted.
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOffer):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswer):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::isLocalDescriptionTypeValidForState):
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::isRemoteDescriptionTypeValidForState):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        (WebCore::PeerConnectionBackend::fireICECandidateEvent):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        (WebCore::PeerConnectionBackend::stop):
        * Modules/mediastream/PeerConnectionBackend.h:

2016-11-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream][Mac] Mark captured video frames as ready for display immediately
        https://bugs.webkit.org/show_bug.cgi?id=164482
        <rdar://problem/29139073>

        Reviewed by Jer Noble.

        * platform/cf/CoreMediaSoftLink.cpp: Add new constant.
        * platform/cf/CoreMediaSoftLink.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForMediaData):
          New, ask register for a callback when the sample buffer display layer is ready
          for more media data.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBuffer): Don't change
          the sample timestamps, assume the caller has configured the sample correctly.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareVideoSampleBufferFromTrack): Don't
          drop frames when the display layer isn't ready.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Call stopRequestingMediaData.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBufferFromTrack): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupCaptureSession): Tell the video output to always discard
          late video frames, we don't need them.
        (WebCore::AVVideoCaptureSource::processNewFrame): Add a kCMSampleAttachmentKey_DisplayImmediately
          attachment.

2016-11-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Wrong selected element at a given index in a list box (redux)
        https://bugs.webkit.org/show_bug.cgi?id=164430

        Reviewed by Darin Adler.

        This essentially undoes the implementation change resulting from r164577.
        As stated in the ATK documentation, atk_selection_ref_selection() takes
        "a gint specifying the index in the selection set. (e.g. the ith selection
        as opposed to the ith child)." r164577 deliberately modified that, causing
        atk_selection_ref_selection() to treat the index as if it were the position
        with respect to all of the children. There is different API in ATK, namely
        atk_object_ref_accessible_child(), when the ith child from the set of all
        children is sought.

        Tests: accessibility/aria-listbox-no-selection.html
               accessibility/native-listbox-no-selection.html

        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (optionFromSelection):

2016-11-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Use libgcrypt instead of GnuTLS for CryptoDigest
        https://bugs.webkit.org/show_bug.cgi?id=164461

        Reviewed by Michael Catanzaro.

        As GTK port in r208297, EFL port starts to use libgcrypt instead of GnuTLS as well.

        No new tests, no behavior change.

        * PlatformEfl.cmake:

2016-11-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208422.

        Roll r208382 back in since it was not responsible for the API
        test failures seen on macOS.

        Reverted changeset:

        "Unreviewed, rolling out r208382."
        https://bugs.webkit.org/show_bug.cgi?id=164319
        http://trac.webkit.org/changeset/208422

2016-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r208361.

        * PlatformMac.cmake:

2016-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix after r162782
        https://bugs.webkit.org/show_bug.cgi?id=164473

        Unreviewed trivial fix.

        * platform/ThreadGlobalData.cpp:

2016-11-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208382.

        This change appears to have caused 3
        SerializedCryptoKeyWrapTest API tests to fail on macOS.

        Reverted changeset:

        "[Readable Streams API] Implement ByteStreamController
        error()"
        https://bugs.webkit.org/show_bug.cgi?id=164319
        http://trac.webkit.org/changeset/208382

2016-11-04  Filip Pizlo  <fpizlo@apple.com>

        WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
        https://bugs.webkit.org/show_bug.cgi?id=152045

        Reviewed by Andy Estes.

        No new layout tests because no new behavior. The new WTF time classes have some unit tests
        in TestWebKitAPI.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::blobSize):
        * platform/MainThreadSharedTimer.h:
        * platform/SharedTimer.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::updateSharedTimer):
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * platform/efl/MainThreadSharedTimerEfl.cpp:
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * platform/glib/MainThreadSharedTimerGLib.cpp:
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * platform/win/MainThreadSharedTimerWin.cpp:
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):

2016-11-04  Zalan Bujtas  <zalan@apple.com>

        RenderFlowThread state reset cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=164426

        Reviewed by Simon Fraser.

        RenderFlowThread state reset is spread across several functions. This patch groups them
        together in RenderObject::resetFlowThreadState().

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::dropAnonymousBoxChild): This is now part of resetFlowThreadState() since resetFlowThreadState
        gets called even when NotifyChildren is false.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal): Initialize the thread state before we notify the child.
        (WebCore::RenderElement::removeChildInternal): Reset the state even when NotifyChildren is false.
        (WebCore::RenderElement::willBeRemovedFromTree): This code is moved to removeFromRenderFlowThread().
        (WebCore::RenderElement::removeFromRenderFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::initializeFlowThreadState): This is in transition for webkit.org/b/164428 (RenderFlowThread state initialization cleanup.)
        (WebCore::RenderObject::resetFlowThreadState):
        (WebCore::RenderObject::setParent): This was seemingly a random place to put flow state initialization. 
        (WebCore::RenderObject::willBeRemovedFromTree): resetFlowThreadState() takes care of it now.
        * rendering/RenderObject.h:

2016-11-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add DOMJIT::Signature annotation to Document::getElementById
        https://bugs.webkit.org/show_bug.cgi?id=164356

        Reviewed by Filip Pizlo.

        This patch implements DOMJIT::Signature annotation for getElementById.
        Since getElementById is also implemented in DocumentFragment, we implement
        the branchIfDocumentFragment/branchIfNotDocumentFragment for that.

        In dromaeo, we have a test like this.

        test( "getElementById", function(){
            for ( var i = 0; i < num * 30; i++ ) {
                ret = document.getElementById("testA" + num).nodeType;
                ret = document.getElementById("testB" + num).nodeType;
                ret = document.getElementById("testC" + num).nodeType;
                ret = document.getElementById("testD" + num).nodeType;
                ret = document.getElementById("testE" + num).nodeType;
                ret = document.getElementById("testF" + num).nodeType;
            }
        });

        In the above test, JSC already knows the following things.

        1. Since nodeType is now handled as CallDOMGetter, we know that it is pure.
        2. getElementById look up becomes PureGetById since document is impure object. But it is kept as PureGetById. So it does not write DOMState.
        3. `"testA" + num` will be converted to constant string.
        4. CallDOM for getElementById said it just reads(DOMState:DOM). And it saids that it returns the same value as long as DOMState is not clobbered.
        5. CheckCell leading CallDOM ensures the inlined getElementById node. (CallDOM node).

        The key thing is that no node clobbers DOMState during the loop. So CallDOM & CallDOMGetter can be hoisted.
        This improves dom-query significantly. Dromaeo dom-query getElementById becomes 40x faster (247796 v.s. 6197).
        Dromaeo dom-query getElementById (not in document) becomes 89x faster (630317.8 v.s. 7066.).

        Tests: js/dom/domjit-function-get-element-by-id-changed.html
               js/dom/domjit-function-get-element-by-id-licm.html
               js/dom/domjit-function-get-element-by-id.html

        * dom/NonElementParentNode.idl:
        * domjit/DOMJITCheckDOM.h:
        (WebCore::DOMJIT::TypeChecker<DocumentFragment>::branchIfFail):
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::branchIfDocumentFragment):
        (WebCore::DOMJIT::branchIfNotDocumentFragment):

2016-11-04  Simon Fraser  <simon.fraser@apple.com>

        Rename unscaledUnobscuredVisibleContentSize and unscaledVisibleContentSizeIncludingObscuredArea for attempted clarity
        https://bugs.webkit.org/show_bug.cgi?id=164438

        Reviewed by Tim Horton.

        unscaledUnobscuredVisibleContentSize() and unscaledVisibleContentSizeIncludingObscuredArea() were an endless source
        of confusion.
        
        Functions with "VisibleContent" in the name are usually expected to return document coordinates (affected by zooming),
        so unscaledUnobscuredVisibleContentSize caused cognitive dissonance because of "unscaled" vs "visibleContent", and
        "unobscured" vs "visible".
        
        So rename:
            unscaledUnobscuredVisibleContentSize -> sizeForUnobscuredContent
            unscaledVisibleContentSizeIncludingObscuredArea -> sizeForVisibleContent
        
        sizeForUnobscuredContent() can also be private to ScrollView.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unobscuredContentRectInternal):
        (WebCore::ScrollView::sizeForVisibleContent):
        (WebCore::ScrollView::sizeForUnobscuredContent): Don't compute unscaledVisibleContentSizeIncludingObscuredArea
        before testing whether we have a platform widget.
        (WebCore::ScrollView::layoutSize):
        (WebCore::ScrollView::unscaledVisibleContentSizeIncludingObscuredArea): Deleted.
        (WebCore::ScrollView::unscaledUnobscuredVisibleContentSize): Deleted.
        * platform/ScrollView.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2016-11-04  Simon Fraser  <simon.fraser@apple.com>

        Layout viewport wrong with RTL documents
        https://bugs.webkit.org/show_bug.cgi?id=164434

        Reviewed by Tim Horton.

        The layoutViewportRect was computed incorrectly in RTL documents, because 
        FrameView::unscaledMaximumScrollPosition() was wrong; it erroneously mapped
        what it thought was a scrollOffset to a scrollPosition.

        Unscaled scroll positions are in the same coordinate space as unscaledDocumentRect,
        so we should not call scrollPositionFromOffset() in FrameView::unscaledMaximumScrollPosition().

        Changed FrameView::unscaledMinimumScrollPosition() to also just grab the location of
        unscaledDocumentRect, for symmetry.

        Finally fixed the tiled scrolling indicator's viewport rect for zoomed RTL documents
        by using the unscaled scroll origin.

        Tests: fast/visual-viewport/rtl-nonzoomed-rects.html
               fast/visual-viewport/rtl-zoomed-rects.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setLayoutViewportOrigin):
        (WebCore::FrameView::unscaledScrollOrigin):
        (WebCore::FrameView::unscaledMinimumScrollPosition):
        (WebCore::FrameView::unscaledMaximumScrollPosition):
        * page/FrameView.h:

2016-11-04  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for modern callback syntax
        https://bugs.webkit.org/show_bug.cgi?id=164435

        Reviewed by Chris Dumez.

        Support new callback syntax:
            callback Function = void (DOMString arg1, long arg2);

        This replaces "callback interface" types with a Callback=FunctionOnly
        extended attribute.

        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/quota/StorageErrorCallback.idl:
        * Modules/quota/StorageQuotaCallback.idl:
        * Modules/quota/StorageUsageCallback.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/StringCallback.idl:
        * html/VoidCallback.idl:
        * page/IntersectionObserverCallback.idl:
        * css/MediaQueryListListener.idl:
        Update to new syntax.

        * css/MediaQueryListListener.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::styleResolverChanged):
        Switch to using the now required 'handleEvent' name. This is an implementation detail
        that we should change.

        * bindings/scripts/CodeGenerator.pm:
        Update document processing to allow a callback only file. Update callback
        type checks to look for a regex that matches in the new format.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToImplIncludesForIDLType):
        (AddToIncludesForIDLType):
        (AddToImplIncludes):
        (AddToIncludes):
        Abstract includes functions to allow passing in an include hash.

        (GenerateCallbackFunctionHeader):
        (GenerateCallbackFunctionImplementation):
        (GenerateCallbackInterfaceHeader):
        (GenerateCallbackInterfaceImplementation):
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        Refactor callback generation code into GenerateCallbackHeaderContent and GenerateCallbackImplementationContent
        to allow using it for both the new callbacks as well as the old callback interfaces.

        * bindings/scripts/IDLParser.pm:
        (Parse):
        (applyTypedefs):
        (applyTypedefsToOperation):
        (parseCallbackRest):
        Parse callbacks into the new IDLCallbackFunction type. Ensure that typedefs are applied as well.

        * bindings/scripts/IDLAttributes.txt:
        Remove support for Callback=FunctionOnly.

        * bindings/scripts/test/JS/JSTestCallback.cpp: Removed.
        * bindings/scripts/test/JS/JSTestCallback.h: Removed.
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp: Added.
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h: Added.
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp: Copied from Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp.
        * bindings/scripts/test/JS/JSTestCallbackInterface.h: Copied from Source/WebCore/bindings/scripts/test/JS/JSTestCallback.h.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/TestCallback.idl: Removed.
        * bindings/scripts/test/TestCallbackFunction.idl:
        * bindings/scripts/test/TestCallbackFunctionWithTypedefs.idl: Added.
        * bindings/scripts/test/TestCallbackInterface.idl: Copied from Source/WebCore/bindings/scripts/test/TestCallback.idl.
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        Update existing tests and add new ones to test callback functions specifically.

2016-11-04  Alex Christensen  <achristensen@webkit.org>

        Move isDefaultPortForProtocol from URLParser.cpp back to URL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=164439

        Reviewed by Daniel Bates.

        No change in behaviour.

        * platform/URL.cpp:
        (WebCore::defaultPortForProtocol):
        (WebCore::isDefaultPortForProtocol):
        * platform/URLParser.cpp:
        (WebCore::URLParser::defaultPortForProtocol):
        (WebCore::URLParser::parsePort):
        (WebCore::defaultPortForProtocol): Deleted.
        (WebCore::isDefaultPortForProtocol): Deleted.
        * platform/URLParser.h:

2016-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Safari does not emit composition end if blurred for dead key / Japanese IME
        https://bugs.webkit.org/show_bug.cgi?id=164369
        <rdar://problem/29050439>

        Reviewed by Ryosuke Niwa.

        On Mac, _before_ changing selection, try to finalize the composition by calling Editor::cancelComposition early.
        This is because the focused element may have changed after performing the selection change, so we would
        otherwise be dispatching the `compositionend` to the new focused element (or no compositionend at all) instead
        of the element with the composition.

        Doing this allows us to match Chrome and Firefox behavior. After canceling the composition, we then need to also
        clear the system IME state. We do this on Mac WK1/WK2 through the cancelComposition() codepath, which ends up
        calling into -discardMarkedText, which resets the marked text state. Some minor refactoring was performed to
        accomplish this -- currently, discardedComposition sends a CompositionWasCanceled message over to the UI process
        that discards the marked text, and then updates the editor state. This patch splits this into two separate
        steps -- see the WebKit2 ChangeLog for more details.

        Test: fast/events/ime-compositionend-on-selection-change.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionWillChange):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::selectionWillChange):
        * loader/EmptyClients.h:
        * page/EditorClient.h:

2016-11-04  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Clean up more transaction abort and exception throwing behavior from IDBObjectStore.
        https://bugs.webkit.org/show_bug.cgi?id=164424

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        This patch actually turns a handful of PASS to FAIL in the imported tests, but those are parts of the
        spec in flux/under discussion.

        We'll update either source or the tests as things are resolved.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::rollbackInfoForVersionChangeAbort):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):

2016-11-04  Ryosuke Niwa  <rniwa@webkit.org>

        Load stylesheets in link elements inside a connected shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=160683
        <rdar://problem/29040652>

        Reviewed by Antti Koivisto.

        Allow external stylesheets within a shadow tree by storing the appropriate style scope in HTMLLinkElement
        when it's connected to a document instead of always talking to document's style scope.

        Tests: fast/shadow-dom/link-element-in-shadow-tree.html
               fast/shadow-dom/selected-stylesheet-in-shadow-tree.html

       * html/HTMLLinkElement.cpp:
       (WebCore::HTMLLinkElement::HTMLLinkElement):
       (WebCore::HTMLLinkElement::~HTMLLinkElement):
       (WebCore::HTMLLinkElement::setDisabledState): Exit early when the element is not in a document as invoking
       didChangeActiveStyleSheetCandidates would require having a valid m_styleScope and process() already exits
       early when inDocument() is false.
       (WebCore::HTMLLinkElement::parseAttribute):
       (WebCore::HTMLLinkElement::process): Removed the early exit for when the element is in a shadow tree.
       (WebCore::HTMLLinkElement::insertedInto): Exit early unless this element has just become connected to
       a document instead of whenever its self-inclusive ancestor is inserted into a container.
       (WebCore::HTMLLinkElement::removedFrom): Ditto for removal. Also call removeStyleSheetCandidateNode after
       calling removePendingSheet since the latter depends on m_styleScope being not null.
       (WebCore::HTMLLinkElement::addPendingSheet):
       (WebCore::HTMLLinkElement::removePendingSheet):
       * html/HTMLLinkElement.h:
       * html/HTMLStyleElement.cpp:
       (WebCore::HTMLStyleElement::insertedInto): Only call inline style owner's insertedIntoDocument if this
       element has just become connected to a document.
       (WebCore::HTMLStyleElement::removedFrom): Ditto for the removal.
       * style/StyleScope.h:
       * svg/SVGStyleElement.cpp:
       (WebCore::SVGStyleElement::insertedInto): Ditto.
       (WebCore::SVGStyleElement::removedFrom): Ditto for the removal.

2016-11-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a setting and preferences to enable/disable async image decoding
        https://bugs.webkit.org/show_bug.cgi?id=164417

        Reviewed by Simon Fraser.

        Add an asyncImageDecodingEnabled setting. This setting controls whether an
        image "can" be asynchronously decoded on a separate thread or not. The
        function ImageSource::isAsyncDecodingRequired() will be used in conjunction
        with this setting to decide whether an image "should" be asynchronously
        decoded or not.

        * page/Settings.in:

2016-11-04  Tim Horton  <timothy_horton@apple.com>

        Apply post-landing review comments for r208347

        * dom/Element.cpp:
        (WebCore::Element::findAnchorElementForLink):
        Use attributeWithoutSynchronization.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolPage):
        (WebCore::PrintContext::spoolRect):
        (WebCore::PrintContext::collectLinkedDestinations):
        (WebCore::PrintContext::outputLinkedDestinations):
        * page/PrintContext.h:
        Pass Document by reference instead of Node by pointer,
        use ElementTraversal instead of NodeTraversal to avoid
        having to locally check the type, and null-check renderers.

2016-11-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement WebGL2RenderingContext::copyBufferSubData()
        https://bugs.webkit.org/show_bug.cgi?id=164008

        Reviewed by Dean Jackson.

        Similar to previous work regarding WebGL 2 buffers, this method implements
        the ability to copy from one buffer to another without the data leaving
        the GPU.

        Test: fast/canvas/webgl/copyBufferSubData.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateCopyBufferSubData):
        * html/canvas/WebGLBuffer.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::copyBufferSubData):

2016-11-04  Simon Fraser  <simon.fraser@apple.com>

        Rename some ScrollingTree/Node-related functions to reduce the number of uses of "update"
        https://bugs.webkit.org/show_bug.cgi?id=164420

        Reviewed by Tim Horton.

        Rename:
            commitNewTreeState -> commitTreeState ("new" was redundant)
            updateBeforeChildren -> commitStateBeforeChildren
            updateAfterChildren -> commitStateAfterChildren

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        (WebCore::ScrollingTree::commitNewTreeState): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren): Deleted.
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::commitStateAfterChildren):
        (WebCore::ScrollingTreeNode::updateAfterChildren): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNode::commitStateAfterChildren):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren): Deleted.
        (WebCore::ScrollingTreeScrollingNode::updateAfterChildren): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::commitTreeState):
        (WebCore::ThreadedScrollingTree::commitNewTreeState): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::commitNewTreeState): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateAfterChildren): Deleted.
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren): Deleted.

2016-11-03  Anders Carlsson  <andersca@apple.com>

        Add new 'other' Apple Pay button style
        https://bugs.webkit.org/show_bug.cgi?id=164384
        rdar://problem/28302528

        Reviewed by Dean Jackson.

        * DerivedSources.make:
        * WebCorePrefix.h:
        Add extension points.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Add ApplePayButtonType::Other.

        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType):
        Add CSSValueOther.

        * css/CSSValueKeywords.in:
        Add other.

        * css/parser/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        Add CSSValueOther.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        Add CSSValueOther.

        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        Handle ApplePayButtonType::Other.

        * rendering/style/RenderStyleConstants.h:
        Add ApplePayButtonType::Other.

2016-11-04  Antti Koivisto  <antti@apple.com>

        slotted() pseudo does not work with ID selector
        https://bugs.webkit.org/show_bug.cgi?id=160538
        <rdar://problem/28534529>

        Reviewed by Andreas Kling.

        When we saw an id selector while addin rules we immediately threw it into the m_idRules
        optimization bucket and bailed out. However selectors containing ::slotted must always end
        up in m_slottedPseudoElementRules list no matter what else is there.

        Fix by treating id like other selectors and only choosing the bucket after analysing all
        the selector components.

        Test: fast/shadow-dom/css-scoping-slot-with-id.html

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule): Also made this use switch instead of a series of ifs.

2016-11-04  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Handle IDBObjectStore rename behavior properly when version change transaction aborts.
        https://bugs.webkit.org/show_bug.cgi?id=164416

        Reviewed by Beth Dakin.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):

2016-11-04  Keith Rollin  <krollin@apple.com>

        NetworkSession: Add NetworkDataTask implementation for blobs
        https://bugs.webkit.org/show_bug.cgi?id=163939

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj: Mark HTTPParsers.h and AsyncFileStream.h as private.
        * fileapi/AsyncFileStream.h: Add WEBCORE_EXPORT to AsyncFileStream class.
        * platform/network/BlobData.h: Add WEBCORE_EXPORT to length().
        * platform/network/HTTPParsers.h: Add WEBCORE_EXPORT to parseRange().
        * platform/network/ResourceResponseBase.h: Add WEBCORE_EXPORT to setHTTPHeaderField().

2016-11-04  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Use IDB-specific exceptions in places where the generic exceptions are currently used.
        https://bugs.webkit.org/show_bug.cgi?id=164406

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::setName):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::setName):

2016-11-04  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Attempting to clear selection on ARIA listboxes results in crash
        https://bugs.webkit.org/show_bug.cgi?id=164331

        Reviewed by Chris Fleizach.

        The ATK code is using is<AccessibilityListBox>() to identify native listboxes.
        But is<AccessibilityListBox>() returns the value of isListBox() which returns
        true both for AccessibilityListBox instances as well as for AccessibilityObject
        instances which have an AccessibilityRole value of ListBoxRole. Because only
        native listboxes should be AccessibilityListBoxes, add isNativeListBox() so
        that we can distinguish native and ARIA listboxes.

        Tests: accessibility/aria-listbox-clear-selection-crash.html
               accessibility/listbox-clear-selection.html

        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isNativeListBox):
        (WebCore::AccessibilityObject::isListBox):

2016-11-04  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Throw the correct exceptions during IDBObjectStore/IDBIndex renaming.
        https://bugs.webkit.org/show_bug.cgi?id=164405

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::setName):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::setName):

2016-11-04  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ByteStreamController error()
        https://bugs.webkit.org/show_bug.cgi?id=164319

        Reviewed by Youenn Fablet.

        Implemented error() method of ReadableByteStreamController.

        Updated test expectations for error() and added IDL-related tests.

        * Modules/streams/ReadableByteStreamController.js:
        (error): Implemented.
        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController):
        (isReadableByteStreamController): Added.
        (readableByteStreamControllerError): Added.
        (readableByteStreamControllerClearPendingPullIntos): Added.
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream): More detailed error message.
        * Modules/streams/ReadableStreamDefaultController.js:
        (error): Removed unnecessary variable declaration.
        * bindings/js/WebCoreBuiltinNames.h: Added totalQueuedBytes.

2016-11-03  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Handle IDBIndex rename behavior properly when version change transaction aborts.
        https://bugs.webkit.org/show_bug.cgi?id=164403

        Reviewed by Alex Christensen.

        No new tests (Covered by existing test).

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::rollbackInfoForVersionChangeAbort): Only rollback the info if this index
          already existed before this version change transaction.

2016-11-03  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Introduce asynchronous backend createOffer API
        https://bugs.webkit.org/show_bug.cgi?id=164365

        Reviewed by Sam Weinig.

        Covered by existing tests.

        Removing PeerEndpointBackendClient as it is only RTCPeerConnection.
        This allows removing virtual for some functions.

        Moving MediaEndpointPeerClient::m_client to PeerEndpointBackendClient::m_peerConnection and making it a reference.

        Implementing createOffer at PeerConnectionBackend by splitting it in four sub-functions:
        - main createOffer, implemented at PeerConnectionBackend.
        - doCreateOffer implemented by subclasses (MediaEndpointPeerConnection).
        - createOfferSucceeded/createOfferFailed implemented by PeerConnectionBackend.

        * CMakeLists.txt:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::createMediaEndpointPeerConnection):
        (WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection):
        (WebCore::MediaEndpointPeerConnection::doCreateOffer):
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
        (WebCore::MediaEndpointPeerConnection::createReceiver):
        (WebCore::MediaEndpointPeerConnection::replaceTrack):
        (WebCore::MediaEndpointPeerConnection::replaceTrackTask):
        (WebCore::MediaEndpointPeerConnection::markAsNeedingNegotiation):
        (WebCore::MediaEndpointPeerConnection::localDescriptionTypeValidForState):
        (WebCore::MediaEndpointPeerConnection::remoteDescriptionTypeValidForState):
        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
        (WebCore::MediaEndpointPeerConnection::doneGatheringCandidates):
        (WebCore::MediaEndpointPeerConnection::iceTransportStateChanged):
        (WebCore::MediaEndpointPeerConnection::createOffer): Deleted.
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOffer):
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::createPeerConnectionBackend): Deleted.
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::PeerConnectionBackend):
        (WebCore::PeerConnectionBackendClient::~PeerConnectionBackendClient): Deleted.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.h:
        * WebCore.xcodeproj/project.pbxproj:

2016-11-03  Antti Koivisto  <antti@apple.com>

        REGRESSION (r207717): DumpRenderTree crashed in com.apple.WebCore: WebCore::Style::Scope::flushPendingUpdate + 16
        https://bugs.webkit.org/show_bug.cgi?id=164397
        <rdar://problem/29100135>

        Reviewed by Ryosuke Niwa.

        The problem here was that we were leaving stale pointers to Document::m_inDocumentShadowRoots set when
        using fast-path document teardown.

        (Patch and stories mostly by rniwa).

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::didInsertInDocumentShadowRoot):
        (WebCore::Document::didRemoveInDocumentShadowRoot):

            Improve asserts.

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

            Remove the superfluous call to notifyChildNodeRemoved in Element::removeShadowRoot to
            avoid invoking notifyChildNodeRemoved during a document teardown, which is incorrect. It's sufficient that
            ~ShadowRoot calls ContainerNode::removeDetachedChildren(), and in turn removeDetachedChildrenInContainer()
            since the latter function tears down nodes via the deletion queue during a document destruction and use
            notifyChildNodeRemoved() on nodes that outlive the shadow root.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot):

            Take care to clean up inDocumentShadowRoots for fast-pathed destruction too.

        (WebCore::ShadowRoot::insertedInto):
        (WebCore::ShadowRoot::removedFrom):

            Improve ShadowRoot's insertedInto and removedFrom so that they only try to add and remove itself from
            m_inDocumentShadowRoots when the connected-ness changes.

2016-11-03  Simon Fraser  <simon.fraser@apple.com>

        Give all the geometry classes a single-argument scale() function for consistency
        https://bugs.webkit.org/show_bug.cgi?id=164400

        Reviewed by Zalan Bujtas.

        Add single-argument scale() to FloatPoint, FloatQuad, FloatSize and LayoutPoint, as well
        as adding one to GraphicsContext. Switch callers who passed the same value for sx and sy
        to the new functions.

        * dom/Document.cpp:
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::init):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::nodeFromPoint):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolPage):
        * platform/cocoa/ThemeCocoa.mm:
        (WebCore::fitContextToBox):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::scale):
        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::scale):
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::scale):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::scale):
        * platform/graphics/LayoutPoint.h:
        (WebCore::LayoutPoint::scale):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::update):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawConsuming):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        (WebCore::SVGInlineTextBox::paintTextWithShadows):
        * svg/SVGPathBlender.cpp:
        (WebCore::SVGPathBlender::blendAnimatedFloatPoint):
        (WebCore::SVGPathBlender::blendArcToSegment):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::decomposeArcToCubic):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):

2016-11-03  Antti Koivisto  <antti@apple.com>

        REGRESSION (r207669): Crash under media controls shadow root construction
        https://bugs.webkit.org/show_bug.cgi?id=164381
        <rdar://problem/28935401>

        Reviewed by Simon Fraser.

        The problem is that we are running a script for media control UA shadow tree in HTMLMediaElement::insertedInto.
        It is not safe to run scripts in insertedInto as the tree is in inconsistent state. Instead finishedInsertingSubtree
        callback should be used.

        Test: media/media-controls-shadow-construction-crash.html

        Seen on https://www.theguardian.com/artanddesign/video/2013/oct/14/banksy-central-park-new-york-video

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedInto):
        (WebCore::HTMLMediaElement::finishedInsertingSubtree):

            Move configureMediaControls() to finishedInsertingSubtree().

        * html/HTMLMediaElement.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):

            Add an assert to make the bad state easier to hit in tests.

2016-11-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add an assertion to diagnose stress GC bots test failures
        https://bugs.webkit.org/show_bug.cgi?id=164396

        Reviewed by Antti Koivisto.

        Added an assertion for calling ElementQueue::add while ElementQueue::invokeAll is in progress.
        This should never happen as long as all DOM API has an appropriate CEReactions IDL attribute.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionStack::ElementQueue::add):
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll):
        * dom/CustomElementReactionQueue.h:

2016-11-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add the asynchronous image decoding mode
        https://bugs.webkit.org/show_bug.cgi?id=155546

        Reviewed by Simon Fraser.

        The asynchronous image decoding feature targets enhancing the rendering
        in two scenarios: the animated images and scrolling a page which large
        images. Enabling this feature for these two scenarios will be landed
        separately. 

        The goal of the asynchronous image decoding is to have the decoded image
        frame ready before it has to be drawn. Drawing an image does not have to
        wait the image frame to be decoded.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameImageAtIndex): Use the negation of frameHasValidNativeImageAtIndex().
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::frameIsBeingDecodedAtIndex): Answers whether a frame is being decoded.
        (WebCore::BitmapImage::frameHasValidNativeImageAtIndex): Checks the validity of a frame.
        (WebCore::BitmapImage::frameHasInvalidNativeImageAtIndex): Deleted.
        * platform/graphics/Image.h:
        (WebCore::Image::newFrameNativeImageAvailableAtIndex): Notifies the image with the availability of a frame NativeImage.
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::isBeingDecoded): Answers whether the frame is being decoded.
        (WebCore::ImageFrame::hasValidNativeImage): Checks the validity of the frame.
        (WebCore::ImageFrame::hasInvalidNativeImage): Deleted.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::~ImageFrameCache): Asserts the decoding loop was ended before deleting the ImageFrameCache.
        (WebCore::ImageFrameCache::setFrameNativeImageAtIndex): Rename this function to matches the other which take the frame index.
        (WebCore::ImageFrameCache::setFrameMetadataAtIndex): Ditto.
        (WebCore::ImageFrameCache::replaceFrameNativeImageAtIndex): It setts the ImageFrame's members and updates the decoded size.
        (WebCore::ImageFrameCache::cacheFrameNativeImageAtIndex): Replaces the frame NativeImage and notifies the Image with the new frame.
        (WebCore::ImageFrameCache::decodingQueue): Ensures the decoding WorkQueue is created and returns it.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Starts a decoding WorkQueue which loops until m_frameRequestQueue is closed.
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Allows ImageSource to send a request to start asynchronous frame image decoding.
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): Stops the decoding WorkQueue by closing m_frameRequestQueue.
        (WebCore::ImageFrameCache::frameAtIndex): Call replaceFrameNativeImageAtIndex().
        (WebCore::ImageFrameCache::frameIsBeingDecodedAtIndex): Returns true if a request for the image frame is issued but not finished yet.
        (WebCore::ImageFrameCache::frameHasValidNativeImageAtIndex): Checks the validity of a frame.
        (WebCore::ImageFrameCache::setFrameNativeImage): Deleted. Was renamed to be setFrameNativeImageAtIndex.
        (WebCore::ImageFrameCache::setFrameMetadata): Deleted. Was renamed to be setFrameMetadataAtIndex
        (WebCore::ImageFrameCache::frameHasInvalidNativeImageAtIndex): Deleted. Was renamed to be frameHasValidNativeImageAtIndex.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::create): The decoding queue needs to hold a reference to this class so it can stop decoding safely without blocking.
        (WebCore::ImageFrameCache::hasDecodingQueue): Returns true if a decoding queue has started.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource): Call ImageFrameCache::create().
        (WebCore::ImageSource::clear): Deleting the decoder is unnecessary for asynchronous decoding because ImageFrameCache manages all the memory.
        
        (WebCore::ImageSource::destroyDecodedData):
        (WebCore::ImageSource::destroyDecodedDataIfNecessary):
        (WebCore::ImageSource::ensureDecoderAvailable):
        (WebCore::ImageSource::dataChanged):
        (WebCore::ImageSource::isAllDataReceived):
        (WebCore::ImageSource::isAsyncDecodingRequired): Answers the question whether the async image decoding is required for this ImageSource.
        (WebCore::ImageSource::frameImageAtIndex):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::decodedSize):
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageSource::stopAsyncDecodingQueue):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::filenameExtension):
        (WebCore::ImageSource::hotSpot):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::sizeRespectingOrientation):
        (WebCore::ImageSource::singlePixelSolidColor):
        (WebCore::ImageSource::frameIsBeingDecodedAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameHasImageAtIndex):
        (WebCore::ImageSource::frameSubsamplingLevelAtIndex):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameOrientationAtIndex):
         Make m_frameCache a type Ref<ImageFrameCache>. Use '->' instead of '.' when accessing its members.

        (WebCore::ImageSource::frameHasValidNativeImageAtIndex): Checks the validity of a frame.
        (WebCore::ImageSource::frameHasInvalidNativeImageAtIndex): Deleted. Was renamed to be frameHasValidNativeImageAtIndex.

2016-11-03  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGL2] Implement getBufferSubData()
        https://bugs.webkit.org/show_bug.cgi?id=164111

        Reviewed by Dean Jackson.

        The call exists in OpenGL 3.2 but in order to have parity with
        OpenGL ES 3 we back it with glMapBufferRange() instead.

        This patch simply adds surface area to GraphicsContext3D
        until we can get an ANGLE implementation of it.

        When testing this patch I discovered that r207649 incorrectly
        interpreted arguments to bufferData() and bufferSubData() as
        byte offsets. Instead, they should be element indices. This
        patch fixes those functions to work correctly so that
        getBufferSubData() can be tested correctly.

        Tests: fast/canvas/webgl/webgl2-buffers.html
               fast/canvas/webgl/getBufferSubData-webgl1.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::arrayBufferViewElementSize):
        (WebCore::WebGL2RenderingContext::bufferData):
        (WebCore::WebGL2RenderingContext::bufferSubData):
        (WebCore::WebGL2RenderingContext::getBufferSubData):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getBufferSubData):
        (WebCore::GraphicsContext3D::mapBufferRange):
        (WebCore::GraphicsContext3D::unmapBuffer):

2016-11-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, mark support for the 'download' attribute as 'Done'.

        * features.json:

2016-11-03  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Implement user interface for HTML form validation
        https://bugs.webkit.org/show_bug.cgi?id=164143
        <rdar://problem/28944652>

        Reviewed by Simon Fraser.

        Add ValidationBubble class to show HTML form validation messages
        using native dialogs. It currently has an implementation for both
        Mac and iOS. It is in WebCore under platform/ so that it can be
        used by both WebKit1 and WebKit2.

        Update ownership of ValidationMessageClient so that is is owned
        by the Page using a unique_ptr<>, which seems to be the modern
        way of handling lifetime for page clients.

        Test: fast/forms/validation-messages.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::focusAndShowValidationMessage):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::updateValidationMessage):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        (WebCore::Page::validationMessageClient):
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        * platform/ValidationBubble.h: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
        (WebCore::ValidationBubble::message):
        * platform/ios/ValidationBubbleIOS.mm: Added.
        (-[WebValidationBubbleDelegate adaptivePresentationStyleForPresentationController:traitCollection:]):
        (WebCore::ValidationBubble::ValidationBubble):
        (WebCore::ValidationBubble::~ValidationBubble):
        (WebCore::ValidationBubble::show):
        (WebCore::ValidationBubble::setAnchorRect):
        * platform/mac/ValidationBubbleMac.mm: Added.
        (WebCore::ValidationBubble::ValidationBubble):
        (WebCore::ValidationBubble::~ValidationBubble):
        (WebCore::ValidationBubble::showRelativeTo):

2016-11-03  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Rename IDBKeyRange.contains to IDBKeyRange.includes.
        https://bugs.webkit.org/show_bug.cgi?id=164383

        Reviewed by Beth Dakin.

        No new tests (Updated existing tests).

        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::includes):
        (WebCore::IDBKeyRange::contains): Deleted.
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBKeyRange.idl:

2016-11-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208302.

        This change causes LayoutTest crashes under GuardMalloc.

        Reverted changeset:

        "Load stylesheets in link elements inside a connected shadow
        tree"
        https://bugs.webkit.org/show_bug.cgi?id=160683
        http://trac.webkit.org/changeset/208302

2016-11-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, add HTML5 specification for HTML Interactive Form Validation feature.

        * features.json:

2016-11-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, add HTML Interactive Form Validation to features.json

        * features.json:

2016-11-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, rolling out due to crash in Amazon web site
        https://bugs.webkit.org/show_bug.cgi?id=164380
        <rdar://problem/29094221>

        * dom/Node.idl:
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM): Deleted.
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter): Deleted.

2016-11-03  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support binary keys.
        <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/binary-keys-1-private.html
               storage/indexeddb/modern/binary-keys-1.html
               Changes to other existing tests.

        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::createBinary):
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::compare):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::binary):
        (WebCore::compareBinaryKeyData):

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        (WebCore::IDBKeyData::operator==):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::hash):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):

        * Modules/indexeddb/IndexedDB.h: Add new enum for the new key type.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        (WebCore::createIDBKeyFromValue):

        * platform/ThreadSafeDataBuffer.h:
        (WebCore::ThreadSafeDataBufferImpl::ThreadSafeDataBufferImpl):
        (WebCore::ThreadSafeDataBuffer::copyData):
        (WebCore::ThreadSafeDataBuffer::size):
        (WebCore::ThreadSafeDataBuffer::operator==):
        (WebCore::ThreadSafeDataBuffer::ThreadSafeDataBuffer):

2016-11-03  Tim Horton  <timothy_horton@apple.com>

        Printing to PDF should produce internal links when HTML has internal links
        https://bugs.webkit.org/show_bug.cgi?id=112081
        <rdar://problem/5955705>

        Reviewed by Simon Fraser.
        Patch originally by David Lattimore.

        No new tests, as it's unclear how to test PDF output.

        * dom/Element.cpp:
        (WebCore::Element::findAnchorElementForLink):
        * dom/Element.h:
        Add findAnchorElementForLink, which looks up the anchor element corresponding
        to the current element's href, and also returns the fragment name as an out parameter.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::PrintContext):
        (WebCore::PrintContext::spoolPage):
        (WebCore::PrintContext::spoolRect):
        (WebCore::PrintContext::end):
        (WebCore::PrintContext::collectLinkedDestinations):
        (WebCore::PrintContext::outputLinkedDestinations):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect):
        Plumb internal links (fragment links) through to GraphicsContext, using
        the fragment name from the page.

        * page/PrintContext.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::supportsInternalLinks):
        (WebCore::GraphicsContext::setDestinationForRect):
        (WebCore::GraphicsContext::addDestinationAtPoint):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::supportsInternalLinks):
        (WebCore::GraphicsContext::setDestinationForRect):
        (WebCore::GraphicsContext::addDestinationAtPoint):
        Plumb internal links through to the CGContext. Apply the CTM, because
        these functions expect positions in global coordinates.

        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setURLForRect):
        Adjust setURLForRect to take a FloatRect, like everything else, and
        stop rounding.

2016-11-03  Alex Christensen  <achristensen@webkit.org>

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

        caused asan crashes

        Reverted changeset:

        "NetworkSession: Add NetworkDataTask implementation for blobs"
        https://bugs.webkit.org/show_bug.cgi?id=163939
        http://trac.webkit.org/changeset/208298

2016-11-03  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Native Windows widgets are drawn upside-down
        https://bugs.webkit.org/show_bug.cgi?id=164370

        Reviewed by Alex Christensen.

        When we return from drawing in GDI code, we need to flip the resulting
        bitmap so that it draws in the proper orientation in Direct2D.

        Tested by existing widget tests.

        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext): Flip before drawing
        to our Direct2D context.

2016-11-01  Gavin Barraclough  <barraclough@apple.com>

        Remove PageThrottler & all related code
        https://bugs.webkit.org/show_bug.cgi?id=164302

        Reviewed by Ryosuke Niwa.

        All relevant information now available from the ActivityState.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::updateAudioAssertionState): Deleted.
        * html/HTMLMediaElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::started):
        * loader/FrameLoader.h:
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::pageActivityStateChanged): Deleted.
        (WebCore::Page::pageThrottler): Deleted.
        * page/PageThrottler.cpp: Removed.
        * page/PageThrottler.h: Removed.

2016-11-03  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r206247): Painting milestones can be delayed until the next layer flush
        https://bugs.webkit.org/show_bug.cgi?id=164340
        <rdar://problem/29074344>

        Reviewed by Tim Horton.

        To give WebKit a chance to deliver the painting milestones to its client after the commit,
        we must tell it about them before or during the commit. To that end, we should not defer
        the call to firePaintRelatedMilestonesIfNeeded until after the commit.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor): Removed
          m_paintRelatedMilestonesTimer initializer.
        (WebCore::RenderLayerCompositor::didPaintBacking): Call
          FrameView::firePaintRelatedMilestonesIfNeeded directly from here.
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired): Deleted.
        * rendering/RenderLayerCompositor.h:

2016-11-03  Antti Koivisto  <antti@apple.com>

        imported/mozilla/svg/paint-order-01.svg and imported/mozilla/svg/paint-order-02.svg are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=164355

        Reviewed by Ryosuke Niwa.

        Revert one change from https://trac.webkit.org/changeset/207669 to see if it is causing flakiness in
        some XML based tests.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):

2016-11-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix CLoop build after r208320.
        https://bugs.webkit.org/show_bug.cgi?id=162980

        Guard with ENABLE(JIT).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:

2016-11-02  Brady Eidson  <beidson@apple.com>

        Expand upon IndexedDB status in features.json.
        
        * features.json:

2016-11-02  Myles C. Maxfield  <mmaxfield@apple.com>

        CSS.supports("font-variation-settings", "'wght' 500") erroneously returns false
        https://bugs.webkit.org/show_bug.cgi?id=164244

        Reviewed by Michael Catanzaro.

        Because we weren't passing a Document into CSSParserContext's constructor,
        there was no way for our parser to know whether the runtime switch was on
        or not. Instead, we can use the CallWith attribute in the IDL file to pass
        in a Document.

        Test: fast/text/variations/css-supports-runtime-switch.html

        * css/DOMCSSNamespace.cpp:
        (WebCore::DOMCSSNamespace::supports):
        * css/DOMCSSNamespace.h:
        * css/DOMCSSNamespace.idl:

2016-11-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add DOMJIT::Signature
        https://bugs.webkit.org/show_bug.cgi?id=162980

        Reviewed by Saam Barati and Sam Weinig.

        We introduce DOMJIT::Signature. This signature object is automatically generated by IDL code generator.
        It holds (1) types, (2) pointer to the unsafe function (the function without checks), and (3) the effect
        of the function. We use constexpr to initialize DOMJIT::Signature without invoking global constructors.
        Thus the content is embedded into the binary as the constant values.

        We also clean up the IDL code generator related to DOMJIT part. Instead of switching things inside IDL
        code generator, we use C++ template to dispatch things at compile time. This template meta programming
        is highly utilized in IDL these days.

        To make DOMJIT::Signature constexpr, we also need to define DOMJIT abstract heap things in the build time.
        To do so, we introduce a tiny Ruby script to calculate the range of abstract heaps. We can offer the abstract
        heap tree as YAML format and the script will produce a C++ header holding the calculated abstract heap ranges

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/bytecode/SpeculatedType.h: Renamed from Source/WebCore/domjit/DOMJITAbstractHeapRepository.h.
        * ForwardingHeaders/domjit/DOMJITSignature.h: Renamed from Source/WebCore/domjit/DOMJITAbstractHeapRepository.cpp.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        (GetUnsafeArgumentType):
        (GetArgumentTypeFilter):
        (GetResultTypeFilter):
        (GenerateImplementation):
        (UnsafeToNative):
        (GenerateHashTableValueArray):
        (ComputeFunctionSpecial):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::BindingCaller<JSTestDOMJIT>::castForOperation):
        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeCaller):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionItem):
        (WebCore::jsTestDOMJITPrototypeFunctionItemCaller):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionItem):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeCaller):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionHasAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementById):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdCaller):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementById):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByName):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameCaller):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementsByName):
        * bindings/scripts/test/TestDOMJIT.idl:
        * dom/Element.idl:
        * domjit/DOMJITAbstractHeapRepository.yaml: Added.
        * domjit/DOMJITIDLConvert.h: Added.
        (WebCore::DOMJIT::DirectConverter<IDLDOMString>::directConvert<StringConversionConfiguration::Normal>):
        * domjit/DOMJITIDLType.h: Added.
        * domjit/DOMJITIDLTypeFilter.h: Added.
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::DocumentDocumentElementDOMJIT::callDOMGetter):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeFirstChildDOMJIT::callDOMGetter):
        (WebCore::NodeLastChildDOMJIT::callDOMGetter):
        (WebCore::NodeNextSiblingDOMJIT::callDOMGetter):
        (WebCore::NodePreviousSiblingDOMJIT::callDOMGetter):
        (WebCore::NodeParentNodeDOMJIT::callDOMGetter):
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter):
        * domjit/generate-abstract-heap.rb: Added.

2016-11-02  Simon Fraser  <simon.fraser@apple.com>

        Followup after r208314.

        The style created for reflections contains transforms and a mask, so needs to get explicit
        z-index on it. This doesn't change rendering, since this layer has no children.

        Fixes assertions in various reflection tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

2016-11-02  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r208025) GraphicsContext state stack assertions loading webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=164350
        rdar://problem/29053414

        Reviewed by Dean Jackson.

        After r208025 it as possible for KeyframeAnimation::animate() to produce a RenderStyle
        with a non-1 opacity, but without the explicit z-index that triggers stacking context.
        This confused the RenderLayer paintWithTransparency code, triggering mismsatched GraphicsContext
        save/restores.

        This occurred when the runningOrFillingForwards state was mis-computed. keyframeAnim->animate()
        can spit out a new style when in the StartWaitTimer sometimes, so "!keyframeAnim->waitingToStart() && !keyframeAnim->postActive()"
        gave the wrong answser.

        Rather than depend on the super-confusing animation state, use a bool out param from animate() to say
        when it actually produced a new style, and when true, do the setZIndex(0).

        Test: animations/stacking-during-opacity-animation.html

        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimation::blendProperties): Log after blending so the log shows the blended style.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::restore):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents): No functional change, but created scope for the
        GraphicsContext so that it didn't outlive the CGContextRestoreGState(context).
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers): New assertion that catches the problem earlier.

2016-11-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [WebGL] Multisample resolve step may operate on stale data
        https://bugs.webkit.org/show_bug.cgi?id=164347

        Reviewed by Dean Jackson.

        When antialiasing is enabled, WebKit internally creates a multisampled FBO
        and uses that as the target of all the drawing commands. Then, just before
        we actually put the image on the glass, we perform a “resolve” step which
        averages all the samples to create the final image. However, it appears
        that this resolve step only waits for commands to complete which were
        already submitted to the hardware. OpenGL is allowed (indeed, expected) to
        batch up drawing commands in main memory so it can submit them to the
        hardware in fewer batches, but this means that the hardware may not know
        about all the commands that the application submitted. Because of this,
        the data the resolve step saw is the result of only some of the previous
        draw calls - not all of them.

        This doesn’t occur on macOS because we have a different code path there
        for performing the resolve step. On iOS 9 and below, WebKit didn’t
        implement multisampling in WebGL at all, which explains why this only
        occurs on iOS 10. 

        Luckily, the OpenGL command glFlush() is exactly designed to submit any
        pending commands to the hardware.

        Test: fast/canvas/webgl/multisample-resolve-consistency.html

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):

2016-11-02  Brady Eidson  <beidson@apple.com>

        Give IDBKey(Data) a WTF::Variant overhaul.
        https://bugs.webkit.org/show_bug.cgi?id=164332

        Reviewed by Alex Christensen and Andy Estes.

        No new tests (Refactor, no behavior change).

        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::isValid):
        (WebCore::IDBKey::compare):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::array):
        (WebCore::IDBKey::string):
        (WebCore::IDBKey::date):
        (WebCore::IDBKey::number):
        (WebCore::IDBKey::IDBKey): Deleted.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        (WebCore::IDBKeyData::setArrayValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        (WebCore::IDBKeyData::operator==):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::hash):
        (WebCore::IDBKeyData::string):
        (WebCore::IDBKeyData::date):
        (WebCore::IDBKeyData::number):
        (WebCore::IDBKeyData::array):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):

2016-11-01  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move interfaces and typed arrays over to JSDOMConvert
        https://bugs.webkit.org/show_bug.cgi?id=164256

        Reviewed by Alex Christensen.

        - Add the ability to pass an "exception thrower" functor to the convert functions.
          This is only implemented for convert<IDLInterface<T>> and convert<IDLNullable<IDLInterface<T>>>
          for now, but can be extended for more types as necessary to improve exception messages.
        - Add support for using toJSNewlyCreated in JSDOMConvert.

        * bindings/generic/IDLTypes.h:
        (WebCore::IDLString::extractValueFromNullable):
        Use forwarding to simplify extraction function.

        (WebCore::IDLInterface::nullValue):
        Update nullValue to work for both RefPtr<T> and T*.

        (WebCore::IDLInterface::extractValueFromNullable):
        Use forwarding to simplify extraction function.

        * bindings/js/JSDOMConvert.h:
        (WebCore::DefaultExceptionThrower::operator()):
        Add a default "exception thrower" which throws a normal type error.

        (WebCore::convert):
        Add an overload of convert which takes an "exception thrower".

        (WebCore::toJSNewlyCreated):
        Add new overloaded function toJSNewlyCreated, matching the toJS overload set,
        which will return "newly created" values. This only works for types that implement
        a toJSNewlyCreated function for themselves.

        (WebCore::Converter<IDLNullable<T>>::convert):
        Fix the return type of Converter<IDLNullable<T>> to be specialized when
        T is an IDLInterface. In that case, we want to match the return type of
        inner converter.
        
        Also add implementation of convert overload that takes an "exception thrower".

        (WebCore::JSConverter<IDLNullable<T>>::convert):
        (WebCore::JSConverter<IDLNullable<T>>::convertNewlyCreated):
        Reimplement conversion to use forwarding of the value.

        (WebCore::Converter<IDLInterface<T>>::convert):
        Add support for an "exception thrower".

        (WebCore::Detail::getPtrOrRef):
        Add helper functions that extract either a pointer or reference, depending on the type,
        and const_casts it allowing the value to be used with toJS functions.

        (WebCore::JSConverter<IDLInterface<T>>::convert):
        Re-implement to support more varied input values.

        (WebCore::JSConverter<IDLInterface<T>>::convertNewlyCreated):
        Added. Forwards to overloaded toJSNewlyCreated functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToImplIncludesForIDLType):
        Add support for adding the right includes for SerializedScriptValue and Dictionary.

        (GetArgumentExceptionThrower):
        (GetAttributeExceptionThrower):
        Add helpers to generate "exception thrower" lambdas for wrappers and typed arrays
        being passed to setters and functions.

        (GenerateParametersCheck):
        Move around special cases so it is clear that it's not wrappers and typed arrays that
        need specialization here, it is now just EventListener and XPathNSResolver.

        (GetIDLInterfaceName):
        Add helper to get the InterfaceName for use in IDLInterface template.

        (GetBaseIDLType):
        Use new GetIDLInterfaceName helper.

        (IsValidContextForJSValueToNative):
        Remove IDLOperation as a valid context. It is not.

        (JSValueToNative):
        Move JSDOMConvert based conversion to the bottom, to show that everything above it
        is a special case that should be fixed. I have used explicit c-style if-statements
        to make it clear what the types of the exceptional cases are.

        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Add wrapper types and typed arrays to the list needing state and globalObject.

        (NativeToJSValue):
        Move JSDOMConvert based conversion to the bottom, to show that everything above it
        is a special case that should be fixed. I have used explicit c-style if-statements
        to make it clear what the types of the exceptional cases are.

        (JSValueToNativeIsHandledByDOMConvert): Deleted.
        (NativeToJSValueIsHandledByDOMConvert): Deleted.
        Remove predicates protecting use of JSDOMConvert now that it is the default.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results.

2016-11-02  David Kilzer  <ddkilzer@apple.com>

        Bug 164333: Add logging for "WebKit encountered an internal error" messages due to Network process crashes
        <https://webkit.org/b/164333>
        <rdar://problem/29072727>

        Reviewed by Alex Christensen.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::networkProcessCrashedKey):
        - Add implementation for new key method.
        * page/DiagnosticLoggingKeys.h:
        (WebCore::DiagnosticLoggingKeys::networkProcessCrashedKey):
        - Add declaration for new key method.

2016-11-02  Filip Pizlo  <fpizlo@apple.com>

        The GC should be in a thread
        https://bugs.webkit.org/show_bug.cgi?id=163562

        Reviewed by Geoffrey Garen and Andreas Kling.

        No new tests because existing tests cover this.
        
        We now need to be more careful about using JSLock. This fixes some places that were not
        holding it. New assertions in the GC are more likely to catch this than before.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):

2016-11-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include DebuggerAgent in Workers - see, pause, and step through scripts
        https://bugs.webkit.org/show_bug.cgi?id=164136
        <rdar://problem/29028462>

        Reviewed by Brian Burg.

        Tests: inspector/worker/debugger-pause.html
               inspector/worker/debugger-scripts.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        New file.

        * inspector/PageDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp: Added.
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h: Added.
        DebuggerAgent customizations for Workers.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Add the new agent.

        * inspector/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        Implement the nested run loop for Workers.

2016-11-02  Simon Fraser  <simon.fraser@apple.com>

        Add Battery Status to features.json, marked as "Removed".

        * features.json:

2016-11-02  Ryosuke Niwa  <rniwa@webkit.org>

        Load stylesheets in link elements inside a connected shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=160683
        <rdar://problem/29040652>

        Reviewed by Antti Koivisto.

        Allow external stylesheets within a shadow tree by storing the appropriate style scope in HTMLLinkElement
        when it's connected to a document instead of always talking to document's style scope.

        Also improve ShadowRoot's insertedInto and removedFrom so that they only try to add and remove itself from
        m_inDocumentShadowRoots when the connected-ness changes.

        This patch also removes the superfluous call to notifyChildNodeRemoved in Element::removeShadowRoot to
        avoid invoking notifyChildNodeRemoved during a document teardown, which is incorrect. It's sufficient that
        ~ShadowRoot calls ContainerNode::removeDetachedChildren(), and in turn removeDetachedChildrenInContainer()
        since the latter function tears down nodes via the deletion queue during a document destruction and use
        notifyChildNodeRemoved() on nodes that outlive the shadow root.

        Tests: fast/shadow-dom/link-element-in-shadow-tree.html
               fast/shadow-dom/selected-stylesheet-in-shadow-tree.html

       * dom/Document.cpp:
       (WebCore::Document::didInsertInDocumentShadowRoot): Assert that the shadow root is not in the set.
       (WebCore::Document::didRemoveInDocumentShadowRoot): Assert that the shadow root is not in the document as
       this function is now called after Node::removedFrom in ShadowRoot::removedFrom.
       * dom/Element.cpp:
       (WebCore::Element::removeShadowRoot): See the description above.
       * dom/ShadowRoot.cpp:
       (WebCore::ShadowRoot::insertedInto): Only call didInsertInDocumentShadowRoot when the this shadow root is
       newly connected to a document so we can add assertions in didInsertInDocumentShadowRoot.
       (WebCore::ShadowRoot::removedFrom): Ditto for the removal.
       * html/HTMLLinkElement.cpp:
       (WebCore::HTMLLinkElement::HTMLLinkElement):
       (WebCore::HTMLLinkElement::~HTMLLinkElement):
       (WebCore::HTMLLinkElement::setDisabledState): Exit early when the element is not in a document as invoking
       didChangeActiveStyleSheetCandidates would require having a valid m_styleScope and process() already exits
       early when inDocument() is false.
       (WebCore::HTMLLinkElement::parseAttribute):
       (WebCore::HTMLLinkElement::process): Removed the early exit for when the element is in a shadow tree.
       (WebCore::HTMLLinkElement::insertedInto): Exit early unless this element has just become connected to
       a document instead of whenever its self-inclusive ancestor is inserted into a container.
       (WebCore::HTMLLinkElement::removedFrom): Ditto for removal. Also call removeStyleSheetCandidateNode after
       calling removePendingSheet since the latter depends on m_styleScope being not null.
       (WebCore::HTMLLinkElement::addPendingSheet):
       (WebCore::HTMLLinkElement::removePendingSheet):
       * html/HTMLLinkElement.h:
       * html/HTMLStyleElement.cpp:
       (WebCore::HTMLStyleElement::insertedInto): Only call inline style owner's insertedIntoDocument if this
       element has just become connected to a document.
       (WebCore::HTMLStyleElement::removedFrom): Ditto for the removal.
       * style/StyleScope.h:
       * svg/SVGStyleElement.cpp:
       (WebCore::SVGStyleElement::insertedInto): Ditto.
       (WebCore::SVGStyleElement::removedFrom): Ditto for the removal.

2016-11-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Clean up new parser's grid layout ifdefs/runtime checking
        https://bugs.webkit.org/show_bug.cgi?id=164341

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGridTrackRepeatFunction):
        (WebCore::consumeGridTrackList):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-02  Alex Christensen  <achristensen@webkit.org>

        Remove Battery Status API from the tree
        https://bugs.webkit.org/show_bug.cgi?id=164213

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * Modules/battery: Removed.
        * Modules/battery/BatteryClient.h: Removed.
        * Modules/battery/BatteryController.cpp: Removed.
        * Modules/battery/BatteryController.h: Removed.
        * Modules/battery/BatteryManager.cpp: Removed.
        * Modules/battery/BatteryManager.h: Removed.
        * Modules/battery/BatteryManager.idl: Removed.
        * Modules/battery/BatteryStatus.cpp: Removed.
        * Modules/battery/BatteryStatus.h: Removed.
        * Modules/battery/NavigatorBattery.cpp: Removed.
        * Modules/battery/NavigatorBattery.h: Removed.
        * Modules/battery/NavigatorBattery.idl: Removed.
        * PlatformEfl.cmake:
        * dom/EventTargetFactory.in:
        * platform/efl/BatteryProviderEfl.cpp: Removed.
        * platform/efl/BatteryProviderEfl.h: Removed.
        * platform/efl/BatteryProviderEflClient.h: Removed.
        * platform/glib/BatteryProviderUPower.cpp: Removed.
        * platform/glib/BatteryProviderUPower.h: Removed.
        * platform/glib/BatteryProviderUPowerClient.h: Removed.
        * testing/Internals.cpp:
        (WebCore::Internals::setBatteryStatus): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2016-11-02  Keith Rollin  <krollin@apple.com>

        NetworkSession: Add NetworkDataTask implementation for blobs
        https://bugs.webkit.org/show_bug.cgi?id=163939

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj: Mark HTTPParsers.h and AsyncFileStream.h as private.
        * fileapi/AsyncFileStream.h: Add WEBCORE_EXPORT to AsyncFileStream class.
        * platform/network/BlobData.h: Add WEBCORE_EXPORT to length().
        * platform/network/HTTPParsers.h: Add WEBCORE_EXPORT to parseRange().
        * platform/network/ResourceResponseBase.h: Add WEBCORE_EXPORT to setHTTPHeaderField().

2016-11-02  Olivier Blin  <olivier.blin@softathome.com>

        [GTK] Use libgcrypt instead of GnuTLS for CryptoDigest and SubtleCrypto HMAC implementation
        https://bugs.webkit.org/show_bug.cgi?id=163125

        Reviewed by Michael Catanzaro.

        No new tests, already covered by existing SubtleCrypto tests.

        * PlatformGTK.cmake: Use libgcrypt instead of gnutls.
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp: Added. Adapted from the GnuTLS backend.
        (WebCore::getGCryptDigestAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * platform/crypto/gcrypt/CryptoDigestGCrypt.cpp: Added. Adapted from the GnuTLS backend.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):

2016-11-02  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r203289):Assertion in MathOperator::stretchTo() on Wikipedia Page
        https://bugs.webkit.org/show_bug.cgi?id=162933
        <rdar://problem/28570590>

        Reviewed by Dean Jackson.

        A debug assertion is triggered when an empty <mo> tag is used with a "stretchy" flag.

        We shouldn't be trying to apply stretch operations on an empty MathML element. Create a
        helper function (isStretchy) to encapsulate the fact that only non-empty elements with
        the 'MathMLOperatorDictionary::Stretchy' operator flag should have stretching applied.

        Test: mathml/empty-mo.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::stretchTo): Revise assertion to use new 'isStretchy' predicate.
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::isStretchy): Added.
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computeLineVerticalStretch): Use new 'isStretchy' predicate.
        (WebCore::RenderMathMLRow::layoutRowItems): Ditto.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::computeOperatorsHorizontalStretch): Ditto.
        (WebCore::RenderMathMLUnderOver::verticalParameters): Ditto.

2016-11-01  Dean Jackson  <dino@apple.com>

        Filter functions grayscale/invert/opacity/sepia should clamp values over 100%, not fail
        https://bugs.webkit.org/show_bug.cgi?id=164310

        Reviewed by Sam Weinig.

        When bringing up the new CSS parser, I discovered that our old parser was
        not conforming to the specification.

        Covered by existing tests.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseBuiltinFilterArguments): For these functions, clamp to
        100% rather than fail.

2016-11-02  Brent Fulgham  <bfulgham@apple.com>

        WebKit nullptr dereference Archive Subframe
        https://bugs.webkit.org/show_bug.cgi?id=164281
        <rdar://problem/28943006>

        Reviewed by Andy Estes.

        If the page is torn down during a load, we can attempt to use a deallocated
        (and nulled) document loader. Most places that use the "active document loader"
        null-check it before using, but there was one place that did not. This patch
        fixes that oversight.

        Test: fast/dom/crash-with-bad-url.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Check that the active document
        loader is non-null before using.

2016-11-02  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support scroll-snap-* properties
        https://bugs.webkit.org/show_bug.cgi?id=164321

        Reviewed by Simon Fraser.

        * css/CSSPrimitiveValue.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints):
        (WebCore::StyleBuilderConverter::convertSnapCoordinatePair):
        (WebCore::StyleBuilderConverter::convertScrollSnapCoordinates):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumePositionLonghand):
        (WebCore::consumePositionX):
        (WebCore::consumePositionY):
        (WebCore::consumePositionList):
        (WebCore::consumeScrollSnapDestination):
        (WebCore::consumeScrollSnapPoints):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-11-02  David Kilzer  <ddkilzer@apple.com>

        Add logging for "WebKit encountered an internal error" messages
        <https://webkit.org/b/164272>
        <rdar://problem/28546064>

        Reviewed by Alex Christensen.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::internalErrorKey):
        (WebCore::DiagnosticLoggingKeys::invalidSessionIDKey):
        (WebCore::DiagnosticLoggingKeys::createSharedBufferFailedKey):
        (WebCore::DiagnosticLoggingKeys::synchronousMessageFailedKey):
        - Add implementations for new key methods.

        * page/DiagnosticLoggingKeys.h:
        (WebCore::DiagnosticLoggingKeys::internalErrorKey):
        (WebCore::DiagnosticLoggingKeys::invalidSessionIDKey):
        (WebCore::DiagnosticLoggingKeys::createSharedBufferFailedKey):
        (WebCore::DiagnosticLoggingKeys::synchronousMessageFailedKey):
        - Add declarations for new key methods.

2016-11-02  Zalan Bujtas  <zalan@apple.com>

        [Tables] Simplified layout skips captions.
        https://bugs.webkit.org/show_bug.cgi?id=164284

        Reviewed by David Hyatt.

        This patch ensures that we take care of simplified normalflow captions during layout.    

        Covered by fast/regions/table-caption-as-region.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layoutCaption):
        (WebCore::RenderTable::layoutCaptions): _caption_side is 2bits, can't use bitmask. 
        (WebCore::RenderTable::simplifiedNormalFlowLayout):
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:

2016-11-02  Youenn Fablet  <youenn@apple.com>

        REGRESSION(r207753-207755): ASSERTION FAILED: m_parsedStyleSheetCache->isInMemoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=163905

        Reviewed by Antti Koivisto.

        Covered by existing tests and http/tests/security/cached-cross-origin-shared-css-stylesheet.html

        Small refactoring to do more member fields initialization in StyleSheetContents header.
        Refactored StyleSheetContents::m_isInMemoryCache to be a counter instead of a boolean.
        This allows StyleSheetContents to be linked to several CachedCSSStyleSheets.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        (WebCore::StyleSheetContents::addedToMemoryCache):
        (WebCore::StyleSheetContents::removedFromMemoryCache):
        * css/StyleSheetContents.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::setBodyDataFrom): Making reuse of saveParsedStyleSheet to handle update of StyleSheetContents cache count.

2016-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove FileSystem::filenameToString() and use FileSystem::stringFromFileSystemRepresentation() everywhere instead
        https://bugs.webkit.org/show_bug.cgi?id=164315

        Reviewed by Michael Catanzaro.

        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::stringFromFileSystemRepresentation):
        (WebCore::homeDirectoryPath):
        (WebCore::listDirectory):
        (WebCore::filenameToString): Deleted.

2016-11-02  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] mimax(auto, <flex>) should be serialized as <flex>
        https://bugs.webkit.org/show_bug.cgi?id=164316

        Reviewed by Sergio Villar Senin.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackSize): Add a simple if to serialize
        properly this case.
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isAuto): Add new function to check if GridLength
        is or not "auto".

2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableByteStreamController
        https://bugs.webkit.org/show_bug.cgi?id=164014

        Reviewed by Youenn Fablet.

        Added support for creating ReadableByteStreamController. IDL is mostly
        implemented but methods return TypeError. Tests have been added to ensure
        behaviour. This part of Readable Streams API is associated to
        a flag (READABLE_BYTE_STREAM_API).

        Test: streams/readable-byte-stream-controller.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/streams/ReadableByteStreamController.idl: Added.
        * Modules/streams/ReadableByteStreamController.js: Added.
        (enqueue): Empty method for the moment, throws TypeError.
        (error): Empty method for the moment, throws TypeError.
        (close): Empty method for the moment, throws TypeError.
        (byobRequest): Empty method for the moment, throws TypeError.
        (desiredSize): Empty method for the moment, throws TypeError.
        * Modules/streams/ReadableByteStreamInternals.js: Added.
        (privateInitializeReadableByteStreamController):
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableByteStreamController):
        (WebCore::constructJSReadableStreamDefaultReader):
        (WebCore::JSBuiltinReadableByteStreamControllerPrivateConstructor::initializeExecutable):
        (WebCore::createReadableByteStreamControllerPrivateConstructor):
        * bindings/js/JSReadableStreamPrivateConstructors.h:
        * bindings/js/WebCoreBuiltinNames.h:

2016-11-02  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: fullscreen toggle support
        https://bugs.webkit.org/show_bug.cgi?id=163728
        <rdar://problem/27989486>

        Reviewed by Darin Adler.

        We introduce the FullscreenSupport class which brings support for entering and
        exiting fullscreen by clicking on the fullscreen button in the media controls
        and correctly reflecting the media's fullscreen state should it be changed
        via the media API.

        Tests: media/modern-media-controls/fullscreen-support/fullscreen-support-click.html
               media/modern-media-controls/fullscreen-support/fullscreen-support-enabled.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/fullscreen-support.js: Added.
        (FullscreenSupport):
        (FullscreenSupport.prototype.get control):
        (FullscreenSupport.prototype.get mediaEvents):
        (FullscreenSupport.prototype.buttonWasClicked):
        (FullscreenSupport.prototype.syncControl):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-02  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: PiP support
        https://bugs.webkit.org/show_bug.cgi?id=163730
        <rdar://problem/27989485>

        Reviewed by Dean Jackson.

        We introduce the PiPSupport class which brings support for entering picture-in-picture
        by clicking on the PiP button in the media controls and enabling the button only when
        picture-in-picture mode is available.

        Tests: media/modern-media-controls/pip-support/pip-support-click.html
               media/modern-media-controls/pip-support/pip-support-enabled.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/pip-support.js: Added.
        (PiPSupport.prototype.get control):
        (PiPSupport.prototype.get mediaEvents):
        (PiPSupport.prototype.buttonWasClicked):
        (PiPSupport.prototype.syncControl):
        (PiPSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-01  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=164240

        Reviewed by Dean Jackson.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/SelectorPseudoElementTypeMap.in:
        Add support for slotted.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator. Take :slotted out of
        needsImplicitShadowCombinatorForMatching(), since our code doesn't do
        this for :slotted.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isPseudoClassFunction):
        :host can be both an id and a function, so don't restrict it.

        (WebCore::CSSSelectorParser::consumePseudo):
        Put in a hack for :host (inside the hack we already plan on removing
        once we turn on).

        (WebCore::CSSSelectorParser::consumeCombinator):
        Remove deep shadow combinator support, as we don't support matching
        on it.

        (WebCore::CSSSelectorParser::prependTypeSelectorIfNeeded):
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):
        Make the split use our combinator, ShadowDescendant, and no longer do anything
        special with :slotted.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

2016-11-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn the Input Events runtime flag on by default
        https://bugs.webkit.org/show_bug.cgi?id=164297

        Reviewed by Ryosuke Niwa.

        Set the initial value of inputEventsEnabled in Settings to true.

        * page/Settings.in:

2016-11-01  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBIndex getAll/getAllKeys.
        <rdar://problem/28806933> and https://bugs.webkit.org/show_bug.cgi?id=164294

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbindex-getall-1-private.html
               storage/indexeddb/modern/idbindex-getall-1.html
               storage/indexeddb/modern/idbindex-getallkeys-1-private.html
               storage/indexeddb/modern/idbindex-getallkeys-1.html
               Existing imported W3C tests.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::getAllKeys):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::createIndexGet):
        (WebCore::IDBRequest::createCount): Deleted.
        (WebCore::IDBRequest::createGet): Deleted.
        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::allValuesForKey):
        * Modules/indexeddb/server/IndexValueStore.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getAllRecords):

        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::getAllRecords):
        * Modules/indexeddb/server/MemoryIndex.h:

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllRecords):
        (WebCore::IDBServer::queryForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::queryForGetAllRecords): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Remove CUSTOM_ELEMENTS build flag
        https://bugs.webkit.org/show_bug.cgi?id=164267

        Reviewed by Antti Koivisto.

        Removed the build flag. Also rebaselined the bindings tests.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::customElementsEnabled):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * bindings/js/JSCustomElementInterface.cpp:
        * bindings/js/JSCustomElementInterface.h:
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::deleteProperty):
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSMainThreadExecState.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsFunction):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsFunction):
        (WebCore::setJSTestCEReactionsStringifierAttributeFunction):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactions):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::setJSTestCEReactionsStringifierValueFunction):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isDefinedElement):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        * dom/CustomElementReactionQueue.cpp:
        * dom/CustomElementReactionQueue.h:
        * dom/CustomElementRegistry.cpp:
        * dom/CustomElementRegistry.h:
        * dom/CustomElementRegistry.idl:
        * dom/Document.cpp:
        (WebCore::createHTMLElementWithNameValidation):
        (WebCore::createFallbackHTMLElement):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setCustomElementReactionQueue):
        * dom/Node.h:
        (WebCore::Node::isFailedCustomElement):
        * dom/make_names.pl:
        (printWrapperFactoryCppFile):
        * html/HTMLElement.idl:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertGenericHTMLElement):
        (WebCore::HTMLTreeBuilder::didCreateCustomOrCallbackElement):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::hasParserBlockingScriptWork):
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2016-11-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: Airplay support
        https://bugs.webkit.org/show_bug.cgi?id=163729
        <rdar://problem/27989484>

        Reviewed by Dean Jackson.

        We introduce the AirplaySupport class which brings support for playing the media
        via Airplay by clicking on the Airplay button in the media controls and correctly
        reflecting when the media is played through Airplay via the media API. The enabled
        state of the Airplay button is also tied to Airplay sources being available.

        Test: media/modern-media-controls/airplay-support/airplay-support.html

        * Modules/modern-media-controls/controls/airplay-button.js:
        (AirplayButton.prototype.get on):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/airplay-support.js: Added.
        (AirplaySupport.prototype.get control):
        (AirplaySupport.prototype.get mediaEvents):
        (AirplaySupport.prototype.buttonWasClicked):
        (AirplaySupport.prototype.handleEvent):
        (AirplaySupport.prototype.syncControl):
        (AirplaySupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-01  Dean Jackson  <dino@apple.com>

        Remove WebKitCSSFilterValue to make Hyatt happy
        https://bugs.webkit.org/show_bug.cgi?id=164289
        <rdar://problems/29050973>

        Reviewed by Simon Fraser.

        The new CSS parser should not use WebKitCSSFilterValue. It's non-standard,
        very likely only used in our tests, doesn't provide much benefit, and will be
        covered by the new CSSOM function interface.

        Covered by modifying existing tests.

        * DerivedSources.make: Remove WebKitCSSFilterValue.idl.

        * WebCore.xcodeproj/project.pbxproj: Make CSSFunctionValue.h private so API testing
        can see it.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJSNewlyCreated): No WebKitCSSFilterValue.

        * css/CSSComputedStyleDeclaration.cpp: Use CSSFunctionValue or CSSPrimitiveValue to
        build up the computed style.
        (WebCore::ComputedStyleExtractor::valueForFilter):

        * css/CSSValue.cpp: No WebKitCSSFilterValue.
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFilterImageValue):
        (WebCore::CSSValue::isWebKitCSSFilterValue): Deleted.

        * css/StyleResolver.cpp: Resolve against CSSFunctionValues with
        CSSValueIDs as name, rather than WebKitCSSFilterValue.
        (WebCore::filterOperationForType):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:

        * css/WebKitCSSFilterValue.cpp: Removed.
        * css/WebKitCSSFilterValue.h: Removed.
        * css/WebKitCSSFilterValue.idl: Removed.

        * css/parser/CSSParser.cpp: Parse into CSSPrimitiveValue and CSSFunctionValue.
        (WebCore::isValidPrimitiveFilterFunction):
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::cssValueKeywordIDForFunctionName):
        (WebCore::CSSParser::parseFilter):
        (WebCore::filterInfoForName): Deleted.
        * css/parser/CSSParser.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFilterFunction):

2016-11-01  Simon Fraser  <simon.fraser@apple.com>

        Add ViewportAPI to features.json

        * features.json:

2016-11-01  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed build fix for r208240.

        * inspector/InspectorInstrumentation.h:
        Don't export an inlined function.

2016-11-01  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] restrict media capture secure connections
        https://bugs.webkit.org/show_bug.cgi?id=164234
        <rdar://problem/28944906>

        Reviewed by Alex Christensen.

        Tests: http/tests/ssl/media-stream/get-user-media-different-host.html
               http/tests/ssl/media-stream/get-user-media-nested.html
               http/tests/ssl/media-stream/get-user-media-secure-connection.html

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::isSecure): New.
        (WebCore::canCallGetUserMedia): New.
        (WebCore::UserMediaRequest::start): When the setting says the require secure a secure connection, 
          fail immediately if the page or one of its ancestors is not secure.

        * page/Settings.cpp:
        (WebCore::Settings::mediaCaptureRequiresSecureConnection): New.
        (WebCore::Settings::setMediaCaptureRequiresSecureConnection): New.
        * page/Settings.h:

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::InternalSettings): Do not require a secure connection for media 
          capture during tests.
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::setMediaCaptureRequiresSecureConnection):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):

2016-11-01  Gavin Barraclough  <barraclough@apple.com>

        Port Page timer throttling to use ActivityState instead of PageThrottler
        https://bugs.webkit.org/show_bug.cgi?id=164291

        Reviewed by Geoff Garen & Antti Koivisto.

        ActivityState now conveys this information; after this change PageThrottler is redundant and can be removed.

        * page/Page.cpp:
        (WebCore::Page::updateTimerThrottlingState):
            - determine page throttling mode based on IsAudible/IsLoading in ActivityState.
        (WebCore::Page::setActivityState):
            - call updateTimerThrottlingState if IsAudible/IsLoading change.
        * page/Page.h:
        (WebCore::Page::pageActivityStateChanged):
            - no need to listen for PageActivityState changes from the PageThrottler.

2016-11-01  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: Placard support
        https://bugs.webkit.org/show_bug.cgi?id=163731
        <rdar://problem/28869598>

        Reviewed by Dean Jackson.

        We introduce the PlacardSupport class which brings support for showing the
        appropriate placard when the media is played via AirPlay or in picture-in-picture.

        Tests: media/modern-media-controls/placard-support/placard-support-airplay.html
               media/modern-media-controls/placard-support/placard-support-pip.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/placard-support.js: Added.
        (PlacardSupport):
        (PlacardSupport.prototype.get mediaEvents):
        (PlacardSupport.prototype.handleEvent):
        (PlacardSupport.prototype._updatePlacard):
        * WebCore.xcodeproj/project.pbxproj:

2016-11-01  Zalan Bujtas  <zalan@apple.com>

        ShowRenderTree: Add information about the type of the needsLayout bit.
        https://bugs.webkit.org/show_bug.cgi?id=164287

        Reviewed by Simon Fraser.

        Currently showRenderTree only tells you whether a renderer's "needs layout bit" is set or not.
        With certain type of layout bugs, it's essential to know the kind of layout a particular
        renderer needs.
        This patch extends the renderer output by listing all the layout bits set.

        B------- -+ BODY RenderBody  (0.00, 0.00) (0.00, 0.00) renderer->(0x) node->(0x) layout->[self][normal child]

        Not testable.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject):

2016-11-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use more references in inspector code
        https://bugs.webkit.org/show_bug.cgi?id=164283

        Reviewed by Timothy Hatcher.

        (WebCore::frameForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didLayoutImpl):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEventImpl):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForRenderer):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage): Deleted.
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameWindowDiscarded):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::didLayout):
        (WebCore::InspectorInstrumentation::willComposite):
        (WebCore::InspectorInstrumentation::didComposite):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::frameDocumentUpdated):
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEvent):
        (WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStart):
        (WebCore::InspectorInstrumentation::workerStarted):
        (WebCore::InspectorInstrumentation::workerTerminated):
        (WebCore::InspectorInstrumentation::didHandleMemoryPressure):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        Convert to references where possible.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::frameDocumentUpdated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::didPaint):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::frameNavigated):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didPaint):
        * inspector/InspectorTimelineAgent.h:
        Pass references through InspectorInstrumentation to the Agents.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachPage):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::frameNavigated):
        * replay/ReplayController.h:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        (WebCore::WorkerGlobalScope::addConsoleMessage):
        (WebCore::WorkerGlobalScope::addMessage):
        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::workerStartMode):
        (WebCore::WorkerInspectorProxy::workerStarted):
        (WebCore::WorkerInspectorProxy::workerTerminated):
        * workers/WorkerInspectorProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        Pass references to InspectorInstrumentation.

2016-11-01  Alex Christensen  <achristensen@webkit.org>

        Percent-encode non-ASCII code points in hosts of URLs with unrecognized schemes
        https://bugs.webkit.org/show_bug.cgi?id=164290

        Reviewed by Tim Horton.

        NSURL fails to parse these URLs, WebKit used to punycode encode them, but now we match Chrome and Firefox,
        as well as what will likely become the standard once https://github.com/whatwg/url/issues/148 is resolved.
        We continue to parse IPv6 address hosts because otherwise we wouldn't be able to tell where a port
        starts in a URL with colons in the IPv6 address and before the port like "a://[b::c]:4"

        Covered by new API tests and updated LayoutTests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::domainToASCII):
        (WebCore::URLParser::parseHostAndPort):

2016-11-01  Gavin Barraclough  <barraclough@apple.com>

        Add IsAudible, IsLoading to ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=164286

        Reviewed by Geoff Garen.

        By computing these values in the UIProcess and passing them to WebContent we can
        more closely unify iOS & macOS throttling, and remove the PageThrottler class.

        * page/ActivityState.h:
            - added IsAudible, IsLoading

2016-10-31  Gavin Barraclough  <barraclough@apple.com>

        Rename ViewState to ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=164254

        Reviewed by Andreas Kling.

        We plan to add a couple more flags to ViewState that aren't directly related to the view
        itself - whether there is an ongoing page load, and whether whether there is audio playback.
        This will allow viewState (now activityState) to fully drive throttling decisions.

        Renaming this bitfield accordingly.
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::~GeolocationController):
        (WebCore::GeolocationController::activityStateDidChange):
        (WebCore::GeolocationController::viewStateDidChange): Deleted.
        * Modules/geolocation/GeolocationController.h:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ActivityState.h: Copied from Source/WebCore/page/ViewState.h.
        * page/ActivityStateChangeObserver.h: Copied from Source/WebCore/page/ViewStateChangeObserver.h.
        (WebCore::ActivityStateChangeObserver::~ActivityStateChangeObserver):
        (WebCore::ViewStateChangeObserver::~ViewStateChangeObserver): Deleted.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActivityState):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setViewState): Deleted.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::addActivityStateChangeObserver):
        (WebCore::Page::removeActivityStateChangeObserver):
        (WebCore::Page::updateTimerThrottlingState):
        (WebCore::Page::setActivityState):
        (WebCore::Page::isVisibleAndActive):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::addViewStateChangeObserver): Deleted.
        (WebCore::Page::removeViewStateChangeObserver): Deleted.
        (WebCore::Page::setViewState): Deleted.
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
        * page/PageThrottler.h:
        * page/ViewState.h: Removed.
        * page/ViewStateChangeObserver.h: Removed.

2016-11-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208100.

        This change caused LayoutTest crashes under GuardMalloc.

        Reverted changeset:

        "MediaEndpoint::generateDtlsInfo is not needed"
        https://bugs.webkit.org/show_bug.cgi?id=164130
        http://trac.webkit.org/changeset/208100

2016-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        Add missing inline include to JSDeviceMotionEventCustom
        https://bugs.webkit.org/show_bug.cgi?id=164269

        Reviewed by Michael Catanzaro.

        Inlined JSObject functions are used through JSObject::get() get here,
        so this fixes the build with -fvisibility-inlines-hidden.

        * bindings/js/JSDeviceMotionEventCustom.cpp: Include JSObjectInlines.h

2016-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] generate-bindings-all.pl uses USES_TERMINAL which leaves a noisy line in interactive Ninja build
        https://bugs.webkit.org/show_bug.cgi?id=163868

        Reviewed by Michael Catanzaro.

        It takes long time for generate-bindings-all.pl to generate all
        bindings.  So, it shows the progress while running and
        USES_TERMINAL option of add_custom_target have been used to invoke
        the command.  However, USES_TERMINAL leaves a noisy line in
        Ninja's neat build log of interactive build.

        A new CMake option SHOW_BINDINGS_GENERATION_PROGRESS is added to
        stop using USES_TERMINAL only in case of interactive Ninja build.

        * bindings/scripts/generate-bindings-all.pl: Added a new switch
        --showProgress.  Removed $terminalWidth and getTerminalWidth which
        are mainly for interactive Ninja build.  Added printProgress.

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: Add the support for custom elements
        https://bugs.webkit.org/show_bug.cgi?id=164266
        <rdar://problem/29038883>

        Reviewed by Joseph Pecoraro.

        Set "customElementState" property on each DOMNode object when building a protocol object for the node.
        Also added InspectorInstrumentation::didChangeCustomElementState to track the changes to custom element states.

        Tests: inspector/dom/customElementState.html

        * dom/Element.cpp:
        (WebCore::Element::setIsDefinedCustomElement): Invoke didChangeCustomElementState to update the state.
        (WebCore::Element::setIsFailedCustomElement): Ditto.
        (WebCore::Element::setIsCustomElementUpgradeCandidate): Ditto.
        (WebCore::Element::enqueueToUpgrade): Ditto.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::customElementState): Added.
        (WebCore::InspectorDOMAgent::buildObjectForNode): Set the custom element state.
        (WebCore::InspectorDOMAgent::didChangeCustomElementState): Invoke customElementStateChanged.
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didChangeCustomElementStateImpl): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didChangeCustomElementState): Added.

2016-10-31  Ryosuke Niwa  <rniwa@webkit.org>

        Add StaticPasteboard.cpp to the cmake after r207841.

        * CMakeLists.txt:

2016-10-31  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Clear needs layout flag even when only overflow is getting recomputed.
        https://bugs.webkit.org/show_bug.cgi?id=164253

        Reviewed by Antti Koivisto.

        When a style change triggers visual overflow re-computation, we set StyleDifferenceLayout style diff
        but in practice we don't actually make changes to the simple line structure. We just re-compute the visual overflow later.
        This patch moves the 'clean the renderes' logic back to RenderBlockFlow::layoutSimpleLines so that
        we set the needs layout bit to false regardless of whether we preformed layout.

        Covered by fast/events/tabindex-focus-blur-all.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::create):

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Add basic visual/layout viewport support for fixed position layout
        https://bugs.webkit.org/show_bug.cgi?id=164261

        Reviewed by Dean Jackson.

        This patch adds a new behavior for position:fixed objects on zooming. Instead of
        interpolating between two implicit viewports as we do now, have explicit and distinct
        layout and visual viewports.

        The layout viewport is always the size of the initial containing block (i.e. the RenderView).
        Position:fixed and sticky elements are laid out relative to the layout viewport.

        The visual viewport is the visible part of the view, in content coordinates.

        When the user pans and zooms, the visual viewport changes. If it hits the edge of the
        layout viepwort, it pushes the layout viewport in that direction; it's as if the user
        is dragging the layout viewport around.

        The layout viewport is maintained on FrameView, and has to be recomputed when the
        scroll position changes, when the view size changes, and when the content size (which
        affets min/max scroll position) changes. Layout viewport size and position are computed
        in unzoomed coordinates, requiring some new functions on FrameView to return these.

        Updated the TileCoverageMap to show the layout viewport visually.

        Subsequent patches will plumb the layout and visual viewports through the scrolling tree.

        Tests: fast/visual-viewport/nonzoomed-rects.html
               fast/visual-viewport/zoomed-fixed-scroll-down-then-up.html
               fast/visual-viewport/zoomed-fixed.html
               fast/visual-viewport/zoomed-rects.html

        * page/FrameView.cpp:
        (WebCore::FrameView::fixedScrollableAreaBoundsInflatedForScrolling):
        (WebCore::FrameView::scrollPositionRespectingCustomFixedPosition):
        (WebCore::FrameView::computeLayoutViewportOrigin):
        (WebCore::FrameView::setLayoutViewportOrigin):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::minStableLayoutViewportOrigin):
        (WebCore::FrameView::maxStableLayoutViewportOrigin):
        (WebCore::FrameView::layoutViewportRect):
        (WebCore::FrameView::visualViewportRect):
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        (WebCore::FrameView::rectForFixedPositionLayout):
        (WebCore::FrameView::scrollPositionForFixedPosition):
        (WebCore::FrameView::unscaledMinimumScrollPosition):
        (WebCore::FrameView::unscaledMaximumScrollPosition):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::availableContentSizeChanged):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::useCustomFixedPositionLayoutRect):
        * page/FrameView.h:
        * page/Settings.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setLayoutViewportRect):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        (WebCore::TileCoverageMap::update):
        * platform/graphics/ca/TileCoverageMap.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Logging here is useful when debugging tests.
        * testing/Internals.cpp:
        (WebCore::Internals::layoutViewportRect): Expose these rects so tests can dump them.
        (WebCore::Internals::visualViewportRect):
        * testing/Internals.h:
        * testing/Internals.idl:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Fix bindings tests after r208209.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjTypedArrayAttrFunction):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors1):
        (WebCore::constructJSTestOverloadedConstructors2):

2016-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Warning: Multiple build commands for output file RenderThemeCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=164265

        Reviewed by Ryosuke Niwa.

        * WebCore.xcodeproj/project.pbxproj:

2016-10-29  Filip Pizlo  <fpizlo@apple.com>

        JSC should support SharedArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=163986

        Reviewed by Keith Miller.

        New tests added in the LayoutTests/workers/sab directory.
        
        This teaches WebCore that a typed array could be shared or not. By default, WebCore will
        reject shared typed arrays as if they were not typed arrays. This ensures that we don't get
        race conditions in code that can't handle it.
        
        If you postMessage a SharedArrayBuffer or something that wraps it, you will send the shared
        memory to the other worker.

        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::cachedKeyForKeyID):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::send):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::getChannelData):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::constructJSBlob):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaKeyGenParams):
        * bindings/js/JSCryptoCustom.cpp:
        (WebCore::JSCrypto::getRandomValues):
        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS):
        (WebCore::toPossiblySharedArrayBufferView):
        (WebCore::toUnsharedArrayBufferView):
        (WebCore::toPossiblySharedInt8Array):
        (WebCore::toPossiblySharedInt16Array):
        (WebCore::toPossiblySharedInt32Array):
        (WebCore::toPossiblySharedUint8Array):
        (WebCore::toPossiblySharedUint8ClampedArray):
        (WebCore::toPossiblySharedUint16Array):
        (WebCore::toPossiblySharedUint32Array):
        (WebCore::toPossiblySharedFloat32Array):
        (WebCore::toPossiblySharedFloat64Array):
        (WebCore::toUnsharedInt8Array):
        (WebCore::toUnsharedInt16Array):
        (WebCore::toUnsharedInt32Array):
        (WebCore::toUnsharedUint8Array):
        (WebCore::toUnsharedUint8ClampedArray):
        (WebCore::toUnsharedUint16Array):
        (WebCore::toUnsharedUint32Array):
        (WebCore::toUnsharedFloat32Array):
        (WebCore::toUnsharedFloat64Array):
        (WebCore::toArrayBufferView): Deleted.
        (WebCore::toInt8Array): Deleted.
        (WebCore::toInt16Array): Deleted.
        (WebCore::toInt32Array): Deleted.
        (WebCore::toUint8Array): Deleted.
        (WebCore::toUint8ClampedArray): Deleted.
        (WebCore::toUint16Array): Deleted.
        (WebCore::toUint32Array): Deleted.
        (WebCore::toFloat32Array): Deleted.
        (WebCore::toFloat64Array): Deleted.
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::constructJSDataCue):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSFileCustom.cpp:
        (WebCore::constructJSFile):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::extractTransferables):
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readArrayBufferView):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBuffer):
        (WebCore::structuredCloneArrayBufferView):
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::bufferData):
        (WebCore::WebGL2RenderingContext::bufferSubData):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData):

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Make UIScriptController::zoomToScale() work on Mac WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=164238

        Reviewed by Dean Jackson.

        Test: fast/zooming/uiscript-zooming.html
        
        Expose pageScaleFactor() for tests.

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

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

        Migrate CanvasRenderingContext's internal canvas pointer to a reference
        https://bugs.webkit.org/show_bug.cgi?id=164259

        Reviewed by Dean Jackson.

        It is never nullptr.

        No new tests because there is no behavior change.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::CanvasRenderingContext):
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        (WebCore::CanvasRenderingContext::checkOrigin):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::ref):
        (WebCore::CanvasRenderingContext::deref):
        (WebCore::CanvasRenderingContext::canvas):
        (WebCore::CanvasRenderingContext::checkOrigin):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::unwindStateStack):
        (WebCore::CanvasRenderingContext2D::isAccelerated):
        (WebCore::CanvasRenderingContext2D::realizeSaves):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::resetTransform):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::clearCanvas):
        (WebCore::CanvasRenderingContext2D::transformAreaToDevice):
        (WebCore::CanvasRenderingContext2D::rectContainsCanvas):
        (WebCore::CanvasRenderingContext2D::calculateCompositingBufferRect):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::didDrawEntireCanvas):
        (WebCore::CanvasRenderingContext2D::didDraw):
        (WebCore::CanvasRenderingContext2D::paintRenderingResultsToCanvas):
        (WebCore::CanvasRenderingContext2D::drawingContext):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::toTextDirection):
        (WebCore::CanvasRenderingContext2D::direction):
        (WebCore::CanvasRenderingContext2D::platformLayer):
        * 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):
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::setupFlags):
        (WebCore::WebGLRenderingContextBase::markContextChanged):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContextBase::reshape):
        (WebCore::WebGLRenderingContextBase::isContextLostOrPending):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::printWarningToConsole):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::clampedCanvasSize):
        * html/canvas/WebGLRenderingContextBase.h:

2016-10-31  Brady Eidson  <beidson@apple.com>

        Address style feedback in https://bugs.webkit.org/show_bug.cgi?id=164097
        https://bugs.webkit.org/show_bug.cgi?id=164248

        Unreviewed. Addressing review feedback (and then some) from Darin Adler on earlier patch.

        No new tests (No behavior change).

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::commit):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::createIndex):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::requestOpenCursor):
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestGetValue):
        (WebCore::IDBTransaction::requestGetKey):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::deleteIndex):

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::createObjectStore):
        (WebCore::IDBClient::IDBConnectionProxy::renameObjectStore):
        (WebCore::IDBClient::IDBConnectionProxy::renameIndex):
        (WebCore::IDBClient::IDBConnectionProxy::deleteObjectStore):
        (WebCore::IDBClient::IDBConnectionProxy::clearObjectStore):
        (WebCore::IDBClient::IDBConnectionProxy::createIndex):
        (WebCore::IDBClient::IDBConnectionProxy::deleteIndex):
        (WebCore::IDBClient::IDBConnectionProxy::putOrAdd):
        (WebCore::IDBClient::IDBConnectionProxy::getRecord):
        (WebCore::IDBClient::IDBConnectionProxy::getAllRecords):
        (WebCore::IDBClient::IDBConnectionProxy::getCount):
        (WebCore::IDBClient::IDBConnectionProxy::deleteRecord):
        (WebCore::IDBClient::IDBConnectionProxy::openCursor):
        (WebCore::IDBClient::IDBConnectionProxy::iterateCursor):

        * 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::keyExistsInObjectStore):
        (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/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::error):
        (WebCore::IDBResultData::openDatabaseSuccess):
        (WebCore::IDBResultData::openDatabaseUpgradeNeeded):
        (WebCore::IDBResultData::deleteDatabaseSuccess):
        (WebCore::IDBResultData::putOrAddSuccess):
        (WebCore::IDBResultData::getRecordSuccess):
        (WebCore::IDBResultData::getAllRecordsSuccess):
        (WebCore::IDBResultData::getCountSuccess):
        (WebCore::IDBResultData::openCursorSuccess):
        (WebCore::IDBResultData::iterateCursorSuccess):

2016-10-31  Ryosuke Niwa  <rniwa@webkit.org>

        Enable custom elements by default everywhere
        https://bugs.webkit.org/show_bug.cgi?id=164242

        Reviewed by Antti Koivisto.

        Set the status of Custom Elements API to "Done".

        * features.json:

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207967.

        This change seems to be the cause of at least one LayoutTest
        becoming flaky.

        Reverted changeset:

        "REGRESSION(r207753-207755): ASSERTION FAILED:
        m_parsedStyleSheetCache->isInMemoryCache()"
        https://bugs.webkit.org/show_bug.cgi?id=163905
        http://trac.webkit.org/changeset/207967

2016-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Shadow DOM scoped styles are missing
        https://bugs.webkit.org/show_bug.cgi?id=164247
        <rdar://problem/29035061>

        Reviewed by Antti Koivisto.

        Test: inspector/css/shadow-scoped-style.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        Only match :host pseudo class for NOPSEUDO. It doesn't make sense
        with a pseudo element request (:host::before does not make sense).

        * css/InspectorCSSOMWrappers.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        (WebCore::InspectorCSSOMWrappers::collectDocumentWrappers):
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        Simplify existing "once per document" wrapper collection.

        (WebCore::InspectorCSSOMWrappers::maybeCollectFromStyleSheets):
        (WebCore::InspectorCSSOMWrappers::collectScopeWrappers):
        Include a path to add style sheets that weren't already collected.
        This will be useful when trying the StyleScope stylesheets which
        are different for different nodes.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::containingStyleScopeForElement):        
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        Collect rules for document and StyleScope sheets separately.
        For elements with a shadow root, add the root's sheets as
        well in case there are :host rules that affect the element.

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208180.

        This change caused fast/shadow-dom/slotted-pseudo-element-css-
        text.html to crash on macOS and iOS on every test run.

        Reverted changeset:

        "[CSS Parser] Support the shadow DOM"
        https://bugs.webkit.org/show_bug.cgi?id=164240
        http://trac.webkit.org/changeset/208180

2016-10-31  Nan Wang  <n_wang@apple.com>

        AX: aria-sort is not exposed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=164245

        Reviewed by Chris Fleizach.

        Exposed the aria-sort attribute value in accessibilitySortDirection.

        Test: accessibility/ios-simulator/aria-sort-ios.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySortDirection]):

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208178.

        The test added with this change fails or times out on macOS
        and iOS.

        Reverted changeset:

        "[Modern Media Controls] Media Controller: Airplay support"
        https://bugs.webkit.org/show_bug.cgi?id=163729
        http://trac.webkit.org/changeset/208178

2016-10-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r208182.

        Both of the tests added with this change time out on macOS
        Release.

        Reverted changeset:

        "[Modern Media Controls] Media Controller: Placard support"
        https://bugs.webkit.org/show_bug.cgi?id=163731
        http://trac.webkit.org/changeset/208182

2016-10-31  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBObjectStore getAll/getAllKeys.
        <rdar://problem/28806934> and https://bugs.webkit.org/show_bug.cgi?id=164097

        Reviewed by Darin Adler.

        Tests: storage/indexeddb/modern/idbobjectstore-getall-1-private.html
               storage/indexeddb/modern/idbobjectstore-getall-1.html
               storage/indexeddb/modern/idbobjectstore-getallkeys-1-private.html
               storage/indexeddb/modern/idbobjectstore-getallkeys-1.html
               Existing imported W3C tests.

        - Add new objects for "IDBGetAllRequestData" and "IDBGetAllResult" to represent these
          new requests and responses.
        - Add lots of boilerplate code to move these new objects around in the IDB machinery.
        - Update "GetRecord" code to be shared with "GetAll" code where necessary.
        - Other tweaks here and there.

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

        * Modules/indexeddb/IDBGetAllResult.cpp: Added.
        (WebCore::isolatedCopyOfVariant):
        (WebCore::IDBGetAllResult::isolatedCopy):
        (WebCore::IDBGetAllResult::addKey):
        (WebCore::IDBGetAllResult::addValue):
        (WebCore::IDBGetAllResult::keys):
        (WebCore::IDBGetAllResult::values):
        (WebCore::IDBGetAllResult::allBlobFilePaths):
        * Modules/indexeddb/IDBGetAllResult.h: Added.
        (WebCore::IDBGetAllResult::IDBGetAllResult):
        (WebCore::IDBGetAllResult::type):
        (WebCore::IDBGetAllResult::encode):
        (WebCore::IDBGetAllResult::decode):

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::getAllKeys):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResult):
        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::getAllRecordsOnServer):
        (WebCore::IDBTransaction::didGetAllRecordsOnServer):
        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::getAllRecords):
        * Modules/indexeddb/client/IDBConnectionProxy.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllRecords):
        (WebCore::IDBClient::IDBConnectionToServer::didGetAllRecords):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllRecords):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getAllRecords):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::getAllRecords):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::queryForGetAllRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllRecords):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::hasAnyPendingCallbacks):
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallbackOrFireError):
        (WebCore::IDBServer::UniqueIDBDatabase::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformGetAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetAllResultsCallback):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getAllRecords):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp: Added.
        (WebCore::IDBGetAllRecordsData::isolatedCopy):
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h: Added.
        (WebCore::IDBGetAllRecordsData::encode):
        (WebCore::IDBGetAllRecordsData::decode):

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::getAllRecordsSuccess):
        (WebCore::IDBResultData::getAllResult):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::encode):
        (WebCore::IDBResultData::decode):

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didGetAllRecords):
        (WebCore::InProcessIDBServer::getAllRecords):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueToJSValue):
        (WebCore::toJS):
        * bindings/js/IDBBindingUtilities.h:

2016-10-31  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ and EFL build fixes after r208176.

        * css/PropertySetCSSStyleDeclaration.cpp:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Fix #include case.

        * page/IntersectionObserverEntry.h:

2016-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK1] Candidate visibility should not update as a result of selection during a dictionary lookup
        https://bugs.webkit.org/show_bug.cgi?id=164236
        <rdar://problem/28747712>

        Reviewed by Beth Dakin.

        Moves state that keeps track of whether or not a dictionary lookup is active from the WebPage to the Editor, so
        that when clicking a text field or contenteditable in WK1 or WK2, we are able to avoid notifying the
        WebEditorClient of the selection change.

        Changes to WK2 are covered by existing unit tests in WKWebViewCandidateTests which verify that clicking does not
        thrash candidate list visibility. A similar test will be added in the future for the WK1 case in CandidateTests.

        * editing/Editor.h:
        (WebCore::Editor::setIsGettingDictionaryPopupInfo):
        (WebCore::Editor::isGettingDictionaryPopupInfo):

2016-10-31  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: Placard support
        https://bugs.webkit.org/show_bug.cgi?id=163731
        <rdar://problem/28869598>

        Reviewed by Dean Jackson.

        We introduce the PlacardSupport class which brings support for showing the
        appropriate placard when the media is played via AirPlay or in picture-in-picture.

        Tests: media/modern-media-controls/placard-support/placard-support-airplay.html
               media/modern-media-controls/placard-support/placard-support-pip.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/placard-support.js: Added.
        (PlacardSupport):
        (PlacardSupport.prototype.get mediaEvents):
        (PlacardSupport.prototype.handleEvent):
        (PlacardSupport.prototype._updatePlacard):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Implement IntersectionObserver
        https://bugs.webkit.org/show_bug.cgi?id=159475

        Reviewed by Ryosuke Niwa.
        
        Add bindings support for Intersection Observer
        <https://wicg.github.io/IntersectionObserver/>
        
        Code is wrapped in ENABLE(INTERSECTION_OBSERVER), and controlled by a runtime
        Setting (off by default for now).
        
        A minor bindings change was required to fix the callback code.
        
        IntersectionObserver is just a shell for now.

        Tests: intersection-observer/intersection-observer-entry-interface.html
               intersection-observer/intersection-observer-interface.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (ShouldPassWrapperByReference):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        * page/IntersectionObserver.cpp: Added.
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::observe):
        (WebCore::IntersectionObserver::unobserve):
        (WebCore::IntersectionObserver::disconnect):
        (WebCore::IntersectionObserver::takeRecords):
        * page/IntersectionObserver.h: Added.
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::root):
        (WebCore::IntersectionObserver::rootMargin):
        (WebCore::IntersectionObserver::thresholds):
        * page/IntersectionObserver.idl: Added.
        * page/IntersectionObserverCallback.h: Added.
        (WebCore::IntersectionObserverCallback::~IntersectionObserverCallback):
        * page/IntersectionObserverCallback.idl: Added.
        * page/IntersectionObserverEntry.cpp: Added.
        (WebCore::IntersectionObserverEntry::IntersectionObserverEntry):
        * page/IntersectionObserverEntry.h: Added.
        (WebCore::IntersectionObserverEntry::create):
        (WebCore::IntersectionObserverEntry::time):
        (WebCore::IntersectionObserverEntry::rootBounds):
        (WebCore::IntersectionObserverEntry::boundingClientRect):
        (WebCore::IntersectionObserverEntry::intersectionRect):
        (WebCore::IntersectionObserverEntry::target):
        (WebCore::IntersectionObserverEntry::intersectionRatio):
        * page/IntersectionObserverEntry.idl: Added.
        * page/Settings.in:

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=164240

        Reviewed by Dean Jackson.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

        * css/SelectorPseudoElementTypeMap.in:
        Add support for slotted.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator. Take :slotted out of
        needsImplicitShadowCombinatorForMatching(), since our code doesn't do
        this for :slotted.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isPseudoClassFunction):
        :host can be both an id and a function, so don't restrict it.

        (WebCore::CSSSelectorParser::consumePseudo):
        Put in a hack for :host (inside the hack we already plan on removing
        once we turn on).

        (WebCore::CSSSelectorParser::consumeCombinator):
        Remove deep shadow combinator support, as we don't support matching
        on it.

        (WebCore::CSSSelectorParser::prependTypeSelectorIfNeeded):
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):
        Make the split use our combinator, ShadowDescendant, and no longer do anything
        special with :slotted.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        Remove ShadowDeep, ShadowSlot and ShadowPseudo in favor of our
        ShadowDescendant combinator.

2016-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Use #pragma once in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=164194

        Rubber-stamped by Sam Weinig.

        * accessibility/*.h:
        * bindings/*.h:
        * contentextensions/*.h:
        * dom/*.h:
        * html/*.h:
        * page/*.h:
        Use #pragma once in headers.

        * html/parser/ParsingUtilities.h:
        Add missing namespace.

        * html/track/VTTScanner.h:
        (WebCore::VTTScanner::skipWhile):
        (WebCore::VTTScanner::skipUntil):
        (WebCore::VTTScanner::collectWhile):
        (WebCore::VTTScanner::collectUntil):
        Include namespace.

2016-10-31  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: Airplay support
        https://bugs.webkit.org/show_bug.cgi?id=163729

        Reviewed by Dean Jackson.

        We introduce the AirplaySupport class which brings support for playing the media
        via Airplay by clicking on the Airplay button in the media controls and correctly
        reflecting when the media is played through Airplay via the media API. The enabled
        state of the Airplay button is also tied to Airplay sources being available.

        Test: media/modern-media-controls/airplay-support/airplay-support.html

        * Modules/modern-media-controls/controls/airplay-button.js:
        (AirplayButton.prototype.get on):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/airplay-support.js: Added.
        (AirplaySupport.prototype.get control):
        (AirplaySupport.prototype.get mediaEvents):
        (AirplaySupport.prototype.buttonWasClicked):
        (AirplaySupport.prototype.handleEvent):
        (AirplaySupport.prototype.syncControl):
        (AirplaySupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide an opportunity to clear ScriptValues associated with debugged target
        https://bugs.webkit.org/show_bug.cgi?id=164167
        <rdar://problem/29010148>

        Reviewed by Mark Lam.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        Page is going away, discard values.

        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::workerTerminating):
        Worker is going away, discard values.

2016-10-31  Ryosuke Niwa  <rniwa@webkit.org>

        CSSStyleDeclaration should be annotated with CEReactions
        https://bugs.webkit.org/show_bug.cgi?id=163968

        Reviewed by Antti Koivisto.

        Added CEReactions to CSSStyleDeclaration.idl.

        Test: fast/custom-elements/reactions/CSSStyleDeclaration.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * css/CSSStyleDeclaration.idl:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleAttributeMutationScope::StyleAttributeMutationScope): Remember the old value when this is
        an inline style declaration for a custom element. Also store m_oldValue and m_customElement instead of
        a mutation record so that we don't create a superfluous mutation record for custom elements.
        (WebCore::StyleAttributeMutationScope::~StyleAttributeMutationScope): Enqueue attributeChangedCallback
        when m_customElement is not null.
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::observesStyleAttribute):
        * dom/CustomElementReactionQueue.h:

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

        Unreviewed build fix for the build fix; AVStreamDataParser not defined on iOS.

        * platform/spi/mac/AVFoundationSPI.h:

2016-10-31  Zalan Bujtas  <zalan@apple.com>

        LayoutTests/fast/frames/invalid-frameset.html is not clean by the end of FrameView::layout().
        https://bugs.webkit.org/show_bug.cgi?id=164230

        Reviewed by Simon Fraser.

        When a <frameset> has invalid children, in addition to clear the needs layout flag on the children
        we also need to do clear the descendants too.

        Covered by LayoutTests/fast/frames/invalid-frameset.html.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames):

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

        Unreviewed build fix after r208151; outputMIMECodecParameterForInputMIMECodecParameter not
        defined pre-Sierra.

        * platform/spi/mac/AVFoundationSPI.h:

2016-10-31  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: !m_trailingWhitespaceWidth in WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=164076

        Reviewed by Antti Koivisto.

        FontCascade's text measure methods return NaN for zero sized fonts. We could actually early return and not
        measure text with zero font size at all.

        Test: fast/text/simple-line-layout-with-zero-sized-font.html

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-named-image
        https://bugs.webkit.org/show_bug.cgi?id=164235

        Reviewed by Dean Jackson.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeWebkitNamedImage):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::isGeneratedImage):

2016-10-28  Brent Fulgham  <bfulgham@apple.com>

        Do a better job of protecting Frame objects in the context of JavaScript calls
        https://bugs.webkit.org/show_bug.cgi?id=164163
        <rdar://problem/28955249>

        Reviewed by Darin Adler.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection): Protected the Frame.
        * editing/Editor.cpp:
        (WebCore::Editor::setTextAsChildOfElement): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::executeSwapWithMark): Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Ditto.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceNodeFromPasteboard): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse): Ditto.
        (WebCore::DOMSelection::collapseToEnd): Ditto.
        (WebCore::DOMSelection::collapseToStart): Ditto.
        (WebCore::DOMSelection::setBaseAndExtent): Ditto.
        (WebCore::DOMSelection::setPosition): Ditto.
        (WebCore::DOMSelection::modify): Ditto.
        (WebCore::DOMSelection::extend): Ditto.
        (WebCore::DOMSelection::addRange): Ditto.
        (WebCore::DOMSelection::deleteFromDocument): Ditto.
        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret): Ditto.
        (WebCore::DragController::startDrag): Ditto.
        * page/Frame.cpp:
        (WebCore::Frame::checkOverflowScroll): Ditto.
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange): Ditto.

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure to fail on :role(a,b) and :dir(a,b)
        https://bugs.webkit.org/show_bug.cgi?id=164233

        Reviewed by Dean Jackson.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Allow unitless values on background-size in quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=164232

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBackgroundSize):

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

        Unreviewed build fix after r208151; _setPreventsSleepDuringVideoPlayback: only defined in non-simulator SDKs.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):
        * platform/spi/mac/AVFoundationSPI.h:

2016-10-31  Nan Wang  <n_wang@apple.com>

        AX: iOS Voiceover does not announce previously selected value from input type="date" form field
        https://bugs.webkit.org/show_bug.cgi?id=164176

        Reviewed by Chris Fleizach.

        Input type date is a popup button on iOS and its value was not exposed in stringValue() since
        it's not considered a text control. Instead, the value was exposed in AXTitle. Fixed this by adding
        the case in stringValue() and removing the AXTitle exposure.

        Changes are covered in modified test.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::isInputTypePopupButton):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Add requestIdleCallback to features.json.

        * features.json:

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fully support prefixed background-size and box-shadows
        https://bugs.webkit.org/show_bug.cgi?id=164228

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Get rid of CSSCustomIdentValue::creates
        https://bugs.webkit.org/show_bug.cgi?id=164225

        Reviewed by Zalan Bujtas.

        Get rid of all instances of CSSCustomIdent::create, since our style
        resolution code isn't prepared to handle that value type yet.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationName):
        (WebCore::consumeTransitionProperty):
        (WebCore::consumeAttr):

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

        Opt-out of AVPlayer automatic sleep disabling
        https://bugs.webkit.org/show_bug.cgi?id=163983

        Reviewed by Eric Carlson.

        In addition to the DisplaySleepDisabler, notify the MediaPlayerPrivateAVFoundationObjC object whether
        it should disable display sleep.  Provide all the necessary boilerplate to allow the media player private
        to query the HTMLMediaPlayer so that the correct value can be set on AVPlayer upon creation.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateSleepDisabling):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setShouldDisableSleep):
        (WebCore::MediaPlayer::shouldDisableSleep):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldDisableSleep):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setShouldDisableSleep):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):

        Drive-by fix: Re-organize the contents of AVFoundationSPI.h so that there's a single top-level
        #if USE(APPLE_INTERNAL_SDK) statement, rather than that conditional being sprinkled about the
        file.

        * platform/spi/mac/AVFoundationSPI.h:

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

        REGRESSION (r206300): LayoutTest media/media-source/media-source-duplicate-seeked.html timing out
        https://bugs.webkit.org/show_bug.cgi?id=162496

        Reviewed by Darin Adler.

        The change to MockMediaSourcePrivate in r206300 revealed a true bug: seeks to the MediaSource's duration
        will always fail. We should discard out of hand seeks which are greater than the duration, but allow seeks
        directly to the duration.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::hasBufferedTime):

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

        Allow multiple playing videos on a page with 'autoplay' and 'playsinline' attributes
        https://bugs.webkit.org/show_bug.cgi?id=162366
        <rdar://problem/28639600>

        Reviewed by Eric Carlson.

        Tests: media/video-concurrent-visible-playback.html
               media/video-multiple-concurrent-playback.html

        Separate out the concept of "video-only" from "video-with-audio" in PlatformMediaSession::MediaType,
        and only set the ConcurrentPlaybackNotPermitted restriction for "video-with-audio".  This allows multiple
        silent video elements to play back simultaneously.

        However, the bug in question also shows bad behavior when both concurrent playback and invisible playback
        are not allowed. Namely, an invisible element will attempt to autoplay, interrupt visible elements, and
        then fail to play due to it's non-visibility.  Add an extra check to canTransitionFromAutoplayToPlay()
        which asks the session if autoplay is allowed (which will return false if the element is not visible).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay):
        (WebCore::HTMLMediaElement::mediaType):
        (WebCore::HTMLMediaElement::presentationType):
        (WebCore::HTMLMediaElement::updateShouldAutoplay):
        (WebCore::mediaElementIsAllowedToAutoplay): Deleted.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::autoplayPermitted):
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions):

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support unprefixed cross-fade
        https://bugs.webkit.org/show_bug.cgi?id=164224

        Reviewed by Zalan Bujtas.

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):

2016-10-31  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Simplify background-position-x/y style mapping
        https://bugs.webkit.org/show_bug.cgi?id=164223

        Reviewed by Zalan Bujtas.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontSynthesis):

2016-10-31  Darin Adler  <darin@apple.com>

        Move ChildNode and ParentNode from ExceptionCode to Exception, add support for ExceptionOr<T&>
        https://bugs.webkit.org/show_bug.cgi?id=164214

        Reviewed by Alex Christensen.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeOptions): Use FetchHeaders& instead of
        Ref<FetchHeaders> for return value.
        (WebCore::FetchRequest::initializeWith): Ditto.
        * Modules/fetch/FetchRequest.h: Updated for above.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer): Use SourceBuffer& instead of
        SourceBuffer* for return value.
        * Modules/mediasource/MediaSource.h: Updated for above.

        * bindings/js/JSDOMBinding.h: Added overloads of checkSecurityForNode so
        it works with a function returning a reference.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getCounterValue): Use Counter& instead of
        Counter* for return value.
        (WebCore::CSSPrimitiveValue::getRectValue): Use Rect& instead of
        Rect* for return value.
        * css/CSSPrimitiveValue.h: Updated for above.

        * dom/ChildNode.idl: Use non-legacy exceptions.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::querySelector): Use ExceptionOr.
        (WebCore::ContainerNode::querySelectorAll): Ditto.
        (WebCore::ContainerNode::append): Ditto.
        (WebCore::ContainerNode::prepend): Ditto.
        * dom/ContainerNode.h: Updated for above.

        * dom/Document.cpp:
        (WebCore::Document::selectorQueryForString): Use ExceptionOr.
        * dom/Document.h: Updated for above.

        * dom/Element.cpp:
        (WebCore::Element::attachShadow): Return ShadowRoot& instead of
        Ref<ShadowRoot> since the shadow root is owned by the element, not
        the caller.
        (WebCore::Element::matches): Updated for change to make the
        selectorQueryForString function use ExceptionOr.
        (WebCore::Element::closest): Ditto.
        (WebCore::contextNodeForInsertion): Return ContainerNode& instead of
        ContainerNode*.
        (WebCore::contextElementForInsertion): Updated for above.
        * dom/Element.h: Updated for above.
        * dom/Element.idl: Changed return type for closest and for
        insertAdjacentElement to be nullable since both can return null.

        * dom/ExceptionOr.h: Added a specialization for ExceptionOr<T&>.

        * dom/Node.cpp:
        (WebCore::Node::convertNodesOrStringsIntoNode): Use ExceptionOr.
        (WebCore::Node::before): Ditto.
        (WebCore::Node::after): Ditto.
        (WebCore::Node::replaceWith): Ditto.
        * dom/Node.h: Updated for above changes.

        * dom/ParentNode.idl: Use non-legacy exceptions.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::queryAll): Changed return type to Ref.
        (WebCore::SelectorQueryCache::add): Use ExceptionOr.
        * dom/SelectorQuery.h: Updated for above changes.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument): Return
        Document& instead of Document*.
        * html/HTMLFrameOwnerElement.h: Updated for above change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addTextTrack): Return TextTrack&
        instead of Ref<TextTrack>.
        * html/HTMLMediaElement.h: Updated for above.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay):
        Updated for new exceptions.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelector): Ditto.
        (WebCore::InspectorDOMAgent::querySelectorAll): Ditto.
        (WebCore::InspectorDOMAgent::performSearch): Ditto.
        (WebCore::InspectorDOMAgent::highlightSelector): Ditto.

        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::performSearch): Put a null check
        here so callers don't have to do it. Pass references to the
        individual functions since the pointer can't be null.
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        Updated to use reference and streamlined code a bit, using
        containsIgnoringASCIICase instead of findIgnoringCase.
        (WebCore::InspectorNodeFinder::matchesAttribute): Ditto.
        (WebCore::InspectorNodeFinder::matchesElement): Ditto.
        (WebCore::InspectorNodeFinder::searchUsingXPath): Ditto.
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors): Ditto.
        Also updated  for new exceptions in querySelectorAll.
        * inspector/InspectorNodeFinder.h: Updated for above.

        * page/Crypto.cpp:
        (WebCore::Crypto::webkitSubtle): Return WebKitSubtleCrypto&
        insetad of WebKitSubtleCrypto*.
        * page/Crypto.h: Updated for above.

        * testing/Internals.h: Removed declarations for functions already
        removed: ensureShadowRoot and createShadowRoot.

2016-10-31  Darin Adler  <darin@apple.com>

        Convert Document from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=164212

        Reviewed by Alex Christensen.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer): Removed IGNORE_EXCEPTION.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom): Use releaseReturnValue
        instead of ASSERT_NO_EXCEPTION.
        (WebCore::ContainerNode::parserInsertBefore): Removed ASSERT_NO_EXCEPTION.
        (WebCore::ContainerNode::parserAppendChild): Ditto.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocumentType): Updated for new
        exception handling.
        (WebCore::DOMImplementation::createDocument): Ditto.

        * dom/Document.cpp:
        (WebCore::createHTMLElementWithNameValidation): Return ExceptionOr.
        (WebCore::Document::createElementForBindings): Ditto.
        (WebCore::Document::createCDATASection): Ditto.
        (WebCore::Document::createProcessingInstruction): Ditto.
        (WebCore::Document::importNode): Ditto.
        (WebCore::Document::adoptNode): Ditto.
        (WebCore::Document::createElementNS): Ditto.
        (WebCore::Document::setXMLVersion): Ditto.
        (WebCore::Document::setBodyOrFrameset): Ditto.
        (WebCore::Document::processHttpEquiv): Ditto.
        (WebCore::Document::createEvent): Ditto.
        (WebCore::Document::cookie): Ditto.
        (WebCore::Document::setCookie): Ditto.
        (WebCore::Document::setDomain): Ditto.
        (WebCore::Document::parseQualifiedName): Ditto. Also added an overload
        that constructs a QualifiedName directly that most call sites can use.
        (WebCore::Document::createAttribute): Return ExceptionOr.
        (WebCore::Document::createAttributeNS): Ditto.
        (WebCore::Document::createTouch): Removed unneeded ExceptionCode&.
        * dom/Document.h: Updated for above.
        * dom/Document.idl: Use non-legacy exceptions. Removed exception
        entirely from createTouch.

        * dom/Element.cpp:
        (WebCore::Element::parseAttributeName): Updated to use the new
        Document::parseQualifiedName.
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock): Ditto.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeName): Updated for the new
        exception handling.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies): Ditto.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument): Use the
        HTMLHtmlElement::create and HTMLBodyElement::create instead of using
        createElementNS to make the simple document.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::constructAttributeName): Renamed, made this
        a member function, updated to use the new Document::parseQualifiedName,
        and also moved the code to get the attribute in here.
        (WebCore::SVGSMILElement::constructAttributeName): Added. Helper function
        for the two places we update the attribute name from attributeNameAttr.
        (WebCore::SVGSMILElement::insertedInto): Use updateAttributeName.
        (WebCore::SVGSMILElement::svgAttributeChanged): Ditto.
        * svg/animation/SVGSMILElement.h: Updated for the above.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::processingInstruction): Updated to understand
        ExceptionOr rather than an out argument.
        (WebCore::XMLDocumentParser::startDocument): Removed ASSERT_NO_EXCEPTION.

2016-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Holding down a key to choose an accented character should fire "insertReplacementText" input events
        https://bugs.webkit.org/show_bug.cgi?id=164209
        <rdar://problem/29019305>

        Reviewed by Darin Adler.

        For TypingCommands that correspond to "insertReplacementText" inputTypes, vend dataTransfers for resulting
        beforeinput and input events if the edited area is not an input field or textarea. To do this, convert the plain
        text representation of the content to be inserted to HTML text using a helper function,
        MarkupAccumulator::appendCharactersReplacingEntities, that is used when creating markup for Text nodes.

        Tests: fast/events/before-input-prevent-insert-replacement.html
               fast/events/input-event-insert-replacement.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::inputEventData):
        (WebCore::TypingCommand::inputEventDataTransfer):
        * editing/TypingCommand.h:

2016-10-30  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Miscellaneous bug fixes
        https://bugs.webkit.org/show_bug.cgi?id=164211

        Reviewed by Darin Adler.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeTransformOrigin):
        Make sure to properly reject invalid transform-origin-z values.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeAttribute):
        Make attribute selector parsing strict about requiring a ] to end
        the selector.

        (WebCore::CSSSelectorParser::consumePseudo):
        Force the nth-child "of" syntax to have whitespace after "of" but
        before the selector. It is unclear if this should be a requirement
        or not (spec is ambiguous), but for now we match the old parser.

        (WebCore::CSSSelectorParser::consumeCombinator):
        Fix a bug that caused the double child combinator to match even
        when there was whitespace between the two > symbols.

2016-10-31  Youenn Fablet  <youenn@apple.com>

        RTCOfferAnswerOptions does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=164216

        Reviewed by Darin Adler.

        Covered by existing tests.

        Making RTCOffer/Answer options dictionaries as per specification.
        Removing code that handles RTCOffer/Answer options dictionary since this is done by the binding generator.
        Updated users of the options accordingly.

        * CMakeLists.txt:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createOffer):
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::createAnswer):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCOfferAnswerOptions.cpp: Removed.
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * WebCore.xcodeproj/project.pbxproj:

2016-10-31  Youenn Fablet  <youenn@apple.com>

        fast/mediastream/RTCPeerConnection-* tests crashing under ASan
        https://bugs.webkit.org/show_bug.cgi?id=164215

        Reviewed by Philippe Normand.

        Covered by ASAN bot tests.

        * platform/mediastream/SDPProcessorScriptResource.cpp:
        (WebCore::SDPProcessorScriptResource::scriptString):

2016-10-28  Philippe Normand  <pnormand@igalia.com>

        [OpenWebRTC] Initialize library one time only
        https://bugs.webkit.org/show_bug.cgi?id=164118

        Reviewed by Darin Adler.

        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.cpp:
        (WebCore::initializeOpenWebRTC): Prevent multiple initialisations of the library.

2016-10-30  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed fix: Correct ChangeLog after my bad merge.

        * ChangeLog

2016-10-30  Darin Adler  <darin@apple.com>

        Move Element, NamedNodeMap, and DOMStringMap from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=164206

        Reviewed by Chris Dumez.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertyNames): Use modern for loop, and
        updates since the names function now returns a vector.
        (WebCore::JSDOMStringMap::putDelegate): Use propagateException. Also return
        true any time an exception is raised. Since true tells the caller to return
        without doing any work, we always want to return that on an exception.
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::names): Renamed from getNames and made this
        return a Vector instead of populating a passed-in vector.
        (WebCore::DatasetDOMStringMap::setItem): Use ExceptionOr.
        * dom/DatasetDOMStringMap.h: Updated for above.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): Updated to use ExceptionOr for
        removeAttributeNode. Changed to use remove rather than removeChild for
        better clarity.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Use ExceptionOr.
        (WebCore::Element::createShadowRoot): Deleted. Unused.
        (WebCore::Element::attachShadow): Use ExceptionOr.
        (WebCore::Element::shadowRootForBindings): Tweaked a bit.
        (WebCore::Element::userAgentShadowRoot): Removed unneeded if statemment.
        (WebCore::Element::ensureUserAgentShadowRoot): Tweaked a bit.
        (WebCore::Element::setAttributeNode): Use ExceptionOr.
        (WebCore::Element::setAttributeNodeNS): Ditto.
        (WebCore::Element::removeAttributeNode): Ditto.
        (WebCore::Element::parseAttributeName): Ditto. Also changed return result
        to be a QualifiedName instead of using an out argument.
        (WebCore::Element::setAttributeNS): Ditto.
        (WebCore::Element::mergeWithNextTextNode): Ditto.
        (WebCore::Element::setOuterHTML): Ditto.
        (WebCore::Element::setInnerHTML): Ditto.
        (WebCore::Element::matches): Ditto.
        (WebCore::Element::closest): Ditto.
        (WebCore::Element::insertAdjacent): Ditto.
        (WebCore::Element::insertAdjacentElement): Ditto.
        (WebCore::contextNodeForInsertion): Ditto.
        (WebCore::contextElementForInsertion): Added. Helper for the
        insertAdjacentHTML function to eliminate a local variable.
        (WebCore::Element::insertAdjacentHTML): Use ExceptionOr.
        (WebCore::Element::insertAdjacentText): Ditto.
        * dom/Element.h: Updated for above.
        * dom/Element.idl: Use non-legacy exceptions.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItem): Use ExceptionOr.
        (WebCore::NamedNodeMap::supportedPropertyNames): Updated to check
        which strings should be removed without copying the strings.
        (WebCore::NamedNodeMap::removeNamedItemNS): Use ExceptionOr.
        (WebCore::NamedNodeMap::setNamedItem): Ditto. Removed overload for
        legacy bindings; move that to the bindings themselves.
        * dom/NamedNodeMap.h: Updated for above.
        * dom/NamedNodeMap.idl: Use non-legacy exceptions.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterText): Updated since mergeWithNextTextNode
        now uses ExceptionOr.

        * inspector/DOMEditor.cpp: Updated to use ExceptionOr.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::toErrorString): Added an overload for
        Exception.
        (WebCore::InspectorDOMAgent::setAttributesAsText): Updated to use ExceptionOr.
        * inspector/InspectorDOMAgent.h: Updated for above.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText): Updated to
        use the correct version of setAttribute; there was never a risk that there
        would be an exception, but now that's clearer.

        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot): Deleted. Was unused.
        (WebCore::Internals::createShadowRoot): Ditto.
        * testing/Internals.idl: Updated for above.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::handleNamespaceAttributes): Use updated parseAttributeName,
        which uses ExceptionOr and a return value instead of an out argument.
        (WebCore::handleElementAttributes): Ditto.

2016-10-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Restructure IDLParser structs to better match modern WebIDL concepts
        https://bugs.webkit.org/show_bug.cgi?id=164208

        Reviewed by Darin Adler.

        Restructure IDLParsers structs to match modern WebIDL conventions:
        - Rename structs to have more WebCore like naming, consistently using
          the prefix IDL.
        - Remove domSignature. Sinking it's properties into the structs that
          contained it.
        - Add IDLArgument, replacing the use of domSignatures for arguments.
          IDLArgument is the subset of domSignatures needed for arguments.
        - Rename domFunction to IDLOperation (matching WebILD nomenclature),
          replace signature with its own name, type (for returnType), specials,
          and extended attributes properties.
        - Give IDLAttribute it's own name, type and extended attributes properties.
        - Add IDLDictionaryMember, replacing the use of domSignature as the
          type of members in IDLDictionary. Give it name, type, isRequired,
          default and extendedAttributes properties.
        - Renamed Typedef to be IDLTypedef. Remove the extended attributes 
          property as those are not allowed in typedefs per-PebIDL.

        Also fix some parsing issues:
        - Stop parsing 'in' directives in function arguments.
        - Stop parsing extended attributes in typedefs.
        - Support applying typedefs to types deep in aggregate types
          (e.g. (sequence<(LONG or STRING)> or DOMString)?).

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/generate-bindings.pl:
        Update for new struct types.

        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/TestTypedefs.idl:
        Remove test which tested extended attributes in typedefs,
        and add a test which tests typedefs used in deep type structures.

        * page/make_settings.pl:
        Don't generate the 'in' prefix for arguments in IDL files.

2016-10-30  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix nth-child serialization
        https://bugs.webkit.org/show_bug.cgi?id=164210

        Reviewed by Darin Adler.

        Our nth-child serialization preserves what the author originally
        typed. Even though this is not spec-compliant (the latest CSS Syntax
        spec has a dumbed down serialization process that doesn't preserve what
        the author originally typed), I think it's better behavior to preserve
        this text.

        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize):
        Fix a bug in the serialization of number tokens that started with
        a plus sign. Make sure the plus sign is preserved.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        Grab the range of tokens from after the ( and up to the ) or the "of"
        and then serialize them. Strip whitepsace from the ends and set that
        as the selector argument.

2016-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Correct bookkeeping for begin/end draw pairs
        https://bugs.webkit.org/show_bug.cgi?id=163898

        Reviewed by Darin Adler.

        Simon pointed out that GraphicsContext objects are generally only created at
        the time we intend to do drawing, so calling 'BeginDraw' as part of object
        construction, and 'EndDraw' at time of destruction should be sufficient.

        As usual, he was correct.
        
        This patch gets rid of unneeded code and greatly simplifies the Direct2D
        drawing path.
        
        Tested by existing layout tests.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::fill):Remove unneeded use
        of 'RenderTargetScopedDrawing.h'.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext): Remove unneeded use
        of RenderTargetScopedDrawing class.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate): Enter
        the 'BeginDraw' state at object creation.
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate): End
        draw state at object destruction.
        (WebCore::GraphicsContextPlatformPrivate::clip): Remove unneeded call to 'beginDraw'.
        (WebCore::GraphicsContextPlatformPrivate::beginDraw): Renamed from 'beginDrawIfNeeded'.
        (WebCore::GraphicsContextPlatformPrivate::endDraw): Get rid of draw state flags.
        (WebCore::GraphicsContext::beginDraw): Renamed from 'beginDrawIfNeeded'.
        (WebCore::GraphicsContext::flush): Added.
        (WebCore::GraphicsContext::drawWithoutShadow): Remove unneeded use of
        RenderTargetScopedDrawing class.
        (WebCore::GraphicsContext::drawWithShadow): Ditto.
        (WebCore::GraphicsContext::platformFillRoundedRect): Ditto.
        (WebCore::GraphicsContext::fillRectWithRoundedHole): Ditto.
        (WebCore::GraphicsContext::didBeginDraw): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::beginDrawIfNeeded): Deleted.
        (WebCore::GraphicsContext::beginDrawIfNeeded): Deleted.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        (WebCore::GraphicsContextPlatformPrivate::didBeginDraw): Deleted.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData): Remove unneeded use of RenderTargetScopedDrawing class.
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::flushContext): Call new GraphicsContext 'flush' command.
        (WebCore::ImageBuffer::draw): Remove unneeded use of RenderTargetScopedDrawing class.
        * platform/graphics/win/NativeImageDirect2D.cpp: Ditto.
        * platform/graphics/win/RenderTargetScopedDrawing.h: Removed.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage): Remove unneeded use of RenderTargetScopedDrawing class.

2016-10-30  Dave Hyatt  <hyatt@apple.com> 

        [CSS Parser] Clean up the two types of descendant relations in CSSSelector 
        https://bugs.webkit.org/show_bug.cgi?id=164203 

        Reviewed by Zalan Bujtas. 

        This patch gets rid of the separate boolean for double child and allows it 
        to be a unique relation type. Rename Descendant to DescendantSpace and 
        name the new relation DescendantDoubleChild. 

        * css/CSSSelector.cpp: 
        (WebCore::CSSSelector::CSSSelector): 
        (WebCore::CSSSelector::selectorText): 
        * css/CSSSelector.h: 
        (WebCore::CSSSelector::hasDescendantRelation): 
        (WebCore::CSSSelector::hasDescendantOrChildRelation): 
        (WebCore::CSSSelector::CSSSelector): 
        (WebCore::CSSSelector::setDescendantUseDoubleChildSyntax): Deleted. 
        * css/RuleFeature.cpp: 
        (WebCore::RuleFeatureSet::recursivelyCollectFeaturesFromSelector): 
        * css/SelectorChecker.cpp: 
        (WebCore::SelectorChecker::matchRecursively): 
        (WebCore::SelectorChecker::determineLinkMatchType): 
        * css/SelectorFilter.cpp: 
        (WebCore::SelectorFilter::collectIdentifierHashes): 
        * css/parser/CSSParserValues.cpp: 
        (WebCore::CSSParserSelector::appendTagHistory): 
        * css/parser/CSSParserValues.h: 
        (WebCore::CSSParserSelector::setDescendantUseDoubleChildSyntax): Deleted. 
        * css/parser/CSSSelectorParser.cpp: 
        (WebCore::isDescendantCombinator): 
        (WebCore::CSSSelectorParser::consumeComplexSelector): 
        (WebCore::CSSSelectorParser::consumeCombinator): 
        * cssjit/SelectorCompiler.cpp: 
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation): 

2016-10-30  Frederic Wang  <fwang@igalia.com> 

        Unreviewed gardening 

        Fix build error on WinCairo. 

        * platform/graphics/opentype/OpenTypeMathData.cpp: 

2016-10-30  Frederic Wang  <fwang@igalia.com> 

        Use HarfBuzz ot-math API to parse the OpenType MATH table 
        https://bugs.webkit.org/show_bug.cgi?id=162671 

        Reviewed by Michael Catanzaro. 

        No new tests, already covered by existing tests. 

        * platform/graphics/opentype/OpenTypeMathData.cpp: Add alternative implementation relying on 
        HarfBuzz's new OpenType MATH API. 
        * platform/graphics/opentype/OpenTypeMathData.h: Ditto. 
        (WebCore::OpenTypeMathData::hasMathData): 
        (WebCore::OpenTypeMathData::HbFontDeleter::operator()): 

2016-10-29  Dave Hyatt  <hyatt@apple.com> 

        [CSS Parser] Support unprefixed image-sets 
        https://bugs.webkit.org/show_bug.cgi?id=164198 

        Reviewed by Dean Jackson. 

        * css/CSSValueKeywords.in: 
        * css/parser/CSSPropertyParserHelpers.cpp: 
        (WebCore::CSSPropertyParserHelpers::consumeImage): 

2016-10-30  Yusuke Suzuki  <utatane.tea@gmail.com> 

        [DOM] Introduce WebCore::jsDynamicDowncast 
        https://bugs.webkit.org/show_bug.cgi?id=164137 
 
        Reviewed by Darin Adler. 

        In WebCore, we have several extended JSTypes, like JSElementType. 
        For these types, WebCore offers the faster casting function compared 
        to JSC::jsDynamicCast. For example, for JSElementType, we have 
        jsElementCast. 

        The problem is that we may fall into the slow code if we choose 
        JSC::jsDynamicCast by accident. Selecting the appropriate function 
        requires special care in the IDL code generator when we would like 
        to use faster casting functions. 

        This patch implements a new casting function, WebCore::jsDynamicDowncast. 
        It is a thin wrapper to the JSC::jsDynamicCast. But it selects the 
        faster casting functions correctly by template specialization. 

        We do not choose the way specializing JSC::jsDynamicCast directly. 
        If we forget to include the header that specializes JSC::jsDyanmicCast, 
        it does not cause any compile errors, but it causes performance regression. 
        This bug is hard to figure out. To avoid this problem, we add a new function. 

        Outside JSC, only Tools' DumpRenderTree uses JSC::jsDynamicCast. 
        This code has FIXME that we should use JSC APIs instead of directly calling 
        JSC thingy. So this should be solved in the layer of JSC APIs and changing 
        this jsDynamicCast to WebCore's jsDynamicDowncast and exposing WebCore's thingy 
        are not good change. So we leave the code as is. 

        * WebCore.xcodeproj/project.pbxproj: 
        * bindings/js/JSApplePaySessionCustom.cpp: 
        (WebCore::JSApplePaySession::completeShippingMethodSelection): 
        (WebCore::JSApplePaySession::completeShippingContactSelection): 
        (WebCore::JSApplePaySession::completePaymentMethodSelection): 
        * bindings/js/JSDOMBinding.cpp: 
        (WebCore::reportException): 
        * bindings/js/JSDOMBinding.h: 
        (WebCore::castThisValue): 
        (WebCore::toArrayBufferView): 
        * bindings/js/JSDOMIterator.h: 
        (WebCore::IteratorTraits>::next): 
        * bindings/js/JSDOMWindowShell.cpp: 
        (WebCore::JSDOMWindowShell::toWrapped): 
        * bindings/js/JSDictionary.cpp: 
        (WebCore::JSDictionary::convertValue): 
        * bindings/js/JSDocumentCustom.h: 
        (WebCore::jsDocumentCast): 
        * bindings/js/JSDynamicDowncast.h: Added. 
        (WebCore::JSDynamicCastTrait::cast): 
        (WebCore::JSDynamicCastTrait<JSNode>::cast): 
        (WebCore::JSDynamicCastTrait<JSElement>::cast): 
        (WebCore::JSDynamicCastTrait<JSDocument>::cast): 
        (WebCore::JSDynamicCastTrait<JSEvent>::cast): 
        (WebCore::jsDynamicDowncast): 
        * bindings/js/JSElementCustom.h: 
        (WebCore::jsElementCast): 
        * bindings/js/JSEventCustom.h: 
        (WebCore::jsEventCast): 
        * bindings/js/JSEventListener.cpp: 
        (WebCore::setDocumentEventHandlerAttribute): 
        * bindings/js/JSEventTargetCustom.cpp: 
        (WebCore::jsEventTargetCast): 
        * bindings/js/JSMediaStreamTrackCustom.cpp: 
        (WebCore::JSMediaStreamTrack::getSettings): 
        (WebCore::JSMediaStreamTrack::getCapabilities): 
        * bindings/js/JSNodeCustom.h: 
        (WebCore::jsNodeCast): 
        * bindings/js/JSPluginElementFunctions.cpp: 
        (WebCore::pluginElementPropertyGetter): 
        * bindings/js/JSReadableStreamPrivateConstructors.cpp: 
        (WebCore::constructJSReadableStreamDefaultReader): 
        * bindings/js/JSReadableStreamSourceCustom.cpp: 
        (WebCore::startReadableStream): 
        (WebCore::JSReadableStreamSource::start): 
        (WebCore::pullReadableStream): 
        * bindings/js/JSWorkerGlobalScopeBase.cpp: 
        (WebCore::toJSDedicatedWorkerGlobalScope): 
        * bindings/js/ScriptModuleLoader.cpp: 
        (WebCore::ScriptModuleLoader::evaluate): 
        * bindings/js/SerializedScriptValue.cpp: 
        (WebCore::CloneSerializer::serialize): 
        * bindings/js/StructuredClone.cpp: 
        (WebCore::structuredCloneArrayBufferView): 
        * bindings/scripts/CodeGeneratorJS.pm: 
        (GetCastingHelperForThisObject): 
        (GenerateImplementation): 
        * bindings/scripts/test/JS/JSInterfaceName.cpp: 
        (WebCore::jsInterfaceNameConstructor): 
        (WebCore::setJSInterfaceNameConstructor): 
        (WebCore::JSInterfaceName::toWrapped): 
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: 
        (WebCore::BindingCaller<JSTestActiveDOMObject>::castForAttribute): 
        (WebCore::BindingCaller<JSTestActiveDOMObject>::castForOperation): 
        (WebCore::jsTestActiveDOMObjectConstructor): 
        (WebCore::setJSTestActiveDOMObjectConstructor): 
        (WebCore::JSTestActiveDOMObject::toWrapped): 
        * bindings/scripts/test/JS/JSTestCEReactions.cpp: 
        (WebCore::BindingCaller<JSTestCEReactions>::castForAttribute): 
        (WebCore::BindingCaller<JSTestCEReactions>::castForOperation): 
        (WebCore::jsTestCEReactionsConstructor): 
        (WebCore::setJSTestCEReactionsConstructor): 
        (WebCore::JSTestCEReactions::toWrapped): 
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp: 
        (WebCore::BindingCaller<JSTestCEReactionsStringifier>::castForAttribute): 
        (WebCore::BindingCaller<JSTestCEReactionsStringifier>::castForOperation): 
        (WebCore::jsTestCEReactionsStringifierConstructor): 
        (WebCore::setJSTestCEReactionsStringifierConstructor): 
        (WebCore::JSTestCEReactionsStringifier::toWrapped): 
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp: 
        (WebCore::jsTestClassWithJSBuiltinConstructorConstructor): 
        (WebCore::setJSTestClassWithJSBuiltinConstructorConstructor): 
        (WebCore::JSTestClassWithJSBuiltinConstructor::toWrapped): 
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp: 
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor): 
        (WebCore::setJSTestCustomConstructorWithNoInterfaceObjectConstructor): 
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped): 
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: 
        (WebCore::BindingCaller<JSTestCustomNamedGetter>::castForOperation): 
        (WebCore::jsTestCustomNamedGetterConstructor): 
        (WebCore::setJSTestCustomNamedGetterConstructor): 
        (WebCore::JSTestCustomNamedGetter::toWrapped): 
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp: 
        (WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute): 
        (WebCore::jsTestDOMJITConstructor): 
        (WebCore::setJSTestDOMJITConstructor): 
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: 
        (WebCore::BindingCaller<JSTestEventConstructor>::castForAttribute): 
        (WebCore::jsTestEventConstructorConstructor): 
        (WebCore::setJSTestEventConstructorConstructor): 
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: 
        (WebCore::BindingCaller<JSTestEventTarget>::castForOperation): 
        (WebCore::jsTestEventTargetConstructor): 
        (WebCore::setJSTestEventTargetConstructor): 
        (WebCore::JSTestEventTarget::toWrapped): 
        * bindings/scripts/test/JS/JSTestException.cpp: 
        (WebCore::BindingCaller<JSTestException>::castForAttribute): 
        (WebCore::jsTestExceptionConstructor): 
        (WebCore::setJSTestExceptionConstructor): 
        (WebCore::JSTestException::toWrapped): 
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: 
        (WebCore::jsTestGenerateIsReachableConstructor): 
        (WebCore::setJSTestGenerateIsReachableConstructor): 
        (WebCore::JSTestGenerateIsReachable::toWrapped): 
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp: 
        (WebCore::BindingCaller<JSTestGlobalObject>::castForAttribute): 
        (WebCore::BindingCaller<JSTestGlobalObject>::castForOperation): 
        (WebCore::jsTestGlobalObjectConstructor): 
        (WebCore::setJSTestGlobalObjectConstructor): 
        (WebCore::JSTestGlobalObject::toWrapped): 
        * bindings/scripts/test/JS/JSTestInterface.cpp: 
        (WebCore::BindingCaller<JSTestInterface>::castForAttribute): 
        (WebCore::BindingCaller<JSTestInterface>::castForOperation): 
        (WebCore::jsTestInterfaceConstructor): 
        (WebCore::setJSTestInterfaceConstructor): 
        (WebCore::JSTestInterface::toWrapped): 
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: 
        (WebCore::BindingCaller<JSTestInterfaceLeadingUnderscore>::castForAttribute): 
        (WebCore::jsTestInterfaceLeadingUnderscoreConstructor): 
        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor): 
        (WebCore::JSTestInterfaceLeadingUnderscore::toWrapped): 
        * bindings/scripts/test/JS/JSTestIterable.cpp: 
        (WebCore::BindingCaller<JSTestIterable>::castForOperation): 
        (WebCore::jsTestIterableConstructor): 
        (WebCore::setJSTestIterableConstructor): 
        (WebCore::JSTestIterable::toWrapped): 
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp: 
        (WebCore::BindingCaller<JSTestJSBuiltinConstructor>::castForAttribute): 
        (WebCore::BindingCaller<JSTestJSBuiltinConstructor>::castForOperation): 
        (WebCore::jsTestJSBuiltinConstructorConstructor): 
        (WebCore::setJSTestJSBuiltinConstructorConstructor): 
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: 
        (WebCore::BindingCaller<JSTestMediaQueryListListener>::castForOperation): 
        (WebCore::jsTestMediaQueryListListenerConstructor): 
        (WebCore::setJSTestMediaQueryListListenerConstructor): 
        (WebCore::JSTestMediaQueryListListener::toWrapped): 
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: 
        (WebCore::jsTestNamedConstructorConstructor): 
        (WebCore::setJSTestNamedConstructorConstructor): 
        (WebCore::JSTestNamedConstructor::toWrapped): 
        * bindings/scripts/test/JS/JSTestNode.cpp: 
        (WebCore::BindingCaller<JSTestNode>::castForAttribute): 
        (WebCore::BindingCaller<JSTestNode>::castForOperation): 
        (WebCore::jsTestNodeConstructor): 
        (WebCore::setJSTestNodeConstructor): 
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: 
        (WebCore::BindingCaller<JSTestNondeterministic>::castForAttribute): 
        (WebCore::BindingCaller<JSTestNondeterministic>::castForOperation): 
        (WebCore::jsTestNondeterministicConstructor): 
        (WebCore::setJSTestNondeterministicConstructor): 
        (WebCore::JSTestNondeterministic::toWrapped): 
        * bindings/scripts/test/JS/JSTestObj.cpp: 
        (WebCore::BindingCaller<JSTestObj>::castForAttribute): 
        (WebCore::BindingCaller<JSTestObj>::castForOperation): 
        (WebCore::jsTestObjConstructor): 
        (WebCore::setJSTestObjConstructor): 
        (WebCore::JSTestObj::toWrapped): 
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: 
        (WebCore::jsTestOverloadedConstructorsConstructor): 
        (WebCore::setJSTestOverloadedConstructorsConstructor): 
        (WebCore::JSTestOverloadedConstructors::toWrapped): 
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp: 
        (WebCore::jsTestOverloadedConstructorsWithSequenceConstructor): 
        (WebCore::setJSTestOverloadedConstructorsWithSequenceConstructor): 
        (WebCore::JSTestOverloadedConstructorsWithSequence::toWrapped): 
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp: 
        (WebCore::BindingCaller<JSTestOverrideBuiltins>::castForOperation): 
        (WebCore::jsTestOverrideBuiltinsConstructor): 
        (WebCore::setJSTestOverrideBuiltinsConstructor): 
        (WebCore::JSTestOverrideBuiltins::toWrapped): 
        * bindings/scripts/test/JS/JSTestSerialization.cpp: 
        (WebCore::BindingCaller<JSTestSerialization>::castForAttribute): 
        (WebCore::BindingCaller<JSTestSerialization>::castForOperation): 
        (WebCore::jsTestSerializationConstructor): 
        (WebCore::setJSTestSerializationConstructor): 
        (WebCore::JSTestSerialization::toWrapped): 
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: 
        (WebCore::BindingCaller<JSTestSerializedScriptValueInterface>::castForAttribute): 
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor): 
        (WebCore::setJSTestSerializedScriptValueInterfaceConstructor): 
        (WebCore::JSTestSerializedScriptValueInterface::toWrapped): 
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: 
        (WebCore::BindingCaller<JSTestTypedefs>::castForAttribute): 
        (WebCore::BindingCaller<JSTestTypedefs>::castForOperation): 
        (WebCore::jsTestTypedefsConstructor): 
        (WebCore::setJSTestTypedefsConstructor): 
        (WebCore::JSTestTypedefs::toWrapped): 
        * bridge/objc/WebScriptObject.mm: 
        (-[WebScriptObject setValue:forKey:]): 
        * bridge/runtime_array.cpp: 
        (JSC::RuntimeArray::lengthGetter): 
        * bridge/runtime_method.cpp: 
        (JSC::RuntimeMethod::lengthGetter): 
        * html/HTMLMediaElement.cpp: 
        (WebCore::controllerJSValue): 
        (WebCore::HTMLMediaElement::updateCaptionContainer): 
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): 
        * inspector/InspectorDOMAgent.cpp: 
        (WebCore::InspectorDOMAgent::buildObjectForEventListener): 

2016-10-29  Dave Hyatt  <hyatt@apple.com> 

        [CSS Parser] Add font-variant-* keyword property support 
        https://bugs.webkit.org/show_bug.cgi?id=164195 
 
        Reviewed by Zalan Bujtas. 
 
        * css/parser/CSSParserFastPaths.cpp: 
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 

2016-10-29  Dave Hyatt  <hyatt@apple.com> 

        [CSS Parser] Fix text-emphasis-position parsing 
        https://bugs.webkit.org/show_bug.cgi?id=164197 

        Reviewed by Zalan Bujtas. 

        * css/parser/CSSParserFastPaths.cpp: 
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 
        (WebCore::CSSParserFastPaths::isKeywordPropertyID): 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeTextEmphasisPosition): 
        (WebCore::CSSPropertyParser::parseSingleValue): 

2016-10-29  Darin Adler  <darin@apple.com> 

        Convert more of DOM from ExceptionCode to Exception 
        https://bugs.webkit.org/show_bug.cgi?id=164173 
 
        Reviewed by Ryosuke Niwa. 
 
        * Modules/mediastream/MediaDevices.cpp: 
        (WebCore::MediaDevices::getUserMedia): Use ExceptionOr. 
        (WebCore::MediaDevices::enumerateDevices): Ditto. 
        * Modules/mediastream/MediaDevices.h: Updated for above. 
        * Modules/mediastream/MediaDevices.idl: Use non-legacy exceptions. 
 
        * Modules/mediastream/MediaEndpointSessionDescription.cpp: 
        Added now-needed include of ExceptionCode.h. 
 
        * Modules/mediastream/RTCConfiguration.cpp: 
        (WebCore::parseIceServer): Use ExceptionOr. 
        (WebCore::RTCConfiguration::create): Ditto. 
        (WebCore::RTCConfiguration::initialize): Ditto. 
        * Modules/mediastream/RTCConfiguration.h: Updated for above. 
        * Modules/mediastream/RTCConfiguration.idl: Use non-legacy exceptions. 
 
        * Modules/mediastream/RTCDTMFSender.cpp: 
        (WebCore::RTCDTMFSender::create): Use ExceptionOr. 
        (WebCore::RTCDTMFSender::insertDTMF): Ditto. 
        * Modules/mediastream/RTCDTMFSender.h: Updated for above. 
        * Modules/mediastream/RTCDTMFSender.idl: Use non-legacy exceptions. 
 
        * Modules/mediastream/RTCDataChannel.cpp: 
        (WebCore::RTCDataChannel::create): Use ExceptionOr. 
        (WebCore::RTCDataChannel::setBinaryType): Ditto. 
        (WebCore::RTCDataChannel::send): Ditto. 
        (WebCore::RTCDataChannel::didReceiveRawData): Ditto. 
        * Modules/mediastream/RTCDataChannel.h: Updated for above. 
        Also changed return values to use const AtomicString& and 
        unsigned instead of unsigned long. Also made more private. 
        Also changed BinaryType into an enum class. 
        * Modules/mediastream/RTCDataChannel.idl: Use non-legacy exceptions. 
 
        * Modules/mediastream/RTCIceCandidate.cpp: 
        (WebCore::RTCIceCandidate::create): Use ExceptionOr. 
        * Modules/mediastream/RTCIceCandidate.h: Updated for above. 
        * Modules/mediastream/RTCIceCandidate.idl: Use non-legacy exception. 
 
        * Modules/mediastream/RTCOfferAnswerOptions.cpp: 
        (WebCore::RTCOfferOptions::create): Use ExceptionOr. 
        (WebCore::RTCAnswerOptions::create): Ditto. 
        * Modules/mediastream/RTCOfferAnswerOptions.h: Updated for above. 
        Also removed all virtual functions since nothing here is polymorphic 
        and initalized data members in the header. 
 
        * Modules/mediastream/RTCPeerConnection.cpp: 
        (WebCore::RTCPeerConnection::initializeWith): Use ExceptionOr. 
        (WebCore::RTCPeerConnection::addTrack): Ditto. 
        (WebCore::RTCPeerConnection::removeTrack): Ditto. 
        (WebCore::RTCPeerConnection::addTransceiver): Ditto. 
        (WebCore::RTCPeerConnection::completeAddTransceiver): Ditto. 
        (WebCore::RTCPeerConnection::queuedCreateOffer): Ditto. 
        (WebCore::RTCPeerConnection::queuedCreateAnswer): Ditto. 
        (WebCore::RTCPeerConnection::setConfiguration): Ditto. 
        (WebCore::RTCPeerConnection::createDataChannel): Ditto. 
        * Modules/mediastream/RTCPeerConnection.h: Updated for above. 
        * Modules/mediastream/RTCPeerConnection.idl: Use non-legacy exceptions. 
 
        * Modules/mediastream/RTCRtpSender.cpp: 
        (WebCore::RTCRtpSender::replaceTrack): Use ExceptionOr. 
        * Modules/mediastream/RTCRtpSender.h: Updated for above. 
        * Modules/mediastream/RTCRtpSender.idl: Use non-legacy exception. 
 
        * Modules/mediastream/RTCSessionDescription.cpp: 
        (WebCore::RTCSessionDescription::create): Use ExceptoinOr. 
        * Modules/mediastream/RTCSessionDescription.h: Updated for above. 
        (WebCore::RTCSessionDescription::~RTCSessionDescription): 
        * Modules/mediastream/RTCSessionDescription.idl: Use non-legacy exceptions. 
 
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp: 
        (WebCore::verifyCustomHandlerURL): Just return a boolean, no exception. 
        (WebCore::verifyProtocolHandlerScheme): Ditto. 
        (WebCore::NavigatorContentUtils::registerProtocolHandler): Use ExceptionOr. 
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered): Ditto. 
        (WebCore::NavigatorContentUtils::unregisterProtocolHandler): Ditto. 
        * Modules/navigatorcontentutils/NavigatorContentUtils.h: Updated for above. 
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl: Use non-legacy exceptions. 
 
        * bindings/js/JSMediaDevicesCustom.cpp: 
        (WebCore::JSMediaDevicesGetUserMediaPromiseFunction): Use propagateException. 
 
        * bindings/scripts/CodeGeneratorJS.pm: 
        (NeedsExplicitPropagateExceptionCall): Added. Helper function to decide whether 
        we need to call propagateException explicitly, if return value processing is not 
        going to propagate the exception for us. 
        (GenerateParametersCheck): Moved the code from GenerateReturnParameters inline 
        because it's almost as short as the function call. Use the newly created 
        NeedsExplicitPropagateExceptionCall function, which properly handles the case 
        where the return value is a promise. 
        (GenerateReturnParameters): Deleted. 
 
        * dom/CharacterData.cpp: 
        (WebCore::CharacterData::substringData): Use ExceptionOr. 
        (WebCore::CharacterData::insertData): Ditto. 
        (WebCore::CharacterData::deleteData): Ditto. 
        (WebCore::CharacterData::replaceData): Ditto. 
        * dom/CharacterData.h: Updated for above. 
        * dom/CharacterData.idl: Use non-legacy exceptions. 
 
        * dom/DataTransferItemList.h: Tried to use ExceptionOr, but this seems 
        like dead code that doesn't compile. 
        * dom/DataTransferItemList.idl: Use non-legacy exceptions. 
 
        * dom/MessagePort.idl: Use non-legacy exceptions, except this has 
        already been converted and was a custom binding. 
 
        * dom/MutationObserver.cpp: 
        (WebCore::MutationObserver::observe): Use ExceptionOr. 
        * dom/MutationObserver.h: Updated for above. 
        * dom/MutationObserver.idl: Use non-legacy exception. 
 
        * dom/Range.cpp: 
        (WebCore::deleteCharacterData): Updated use of calls that now use 
        ExceptionOr. 
        (WebCore::Range::processContentsBetweenOffsets): Ditto. 
        (WebCore::Range::insertNode): Ditto. 
 
        * dom/ShadowRoot.cpp: 
        (WebCore::ShadowRoot::setInnerHTML): Use ExceptionOr. 
        * dom/ShadowRoot.h: Updated for above. 
        * dom/ShadowRoot.idl: Use non-legacy exception. 
 
        * dom/Text.cpp: 
        (WebCore::Text::splitText): Use ExceptionOr. 
        (WebCore::Text::replaceWholeText): Removed unused ExceptionCode&. 
        * dom/Text.h: Updated for above. 
        * dom/Text.idl: Use non-legacy exception. 
 
        * editing/ApplyBlockElementCommand.cpp: 
        (WebCore::isNewLineAtPosition): Rewrote to use data rather than 
        substringData; more efficient. 
 
        * editing/DeleteFromTextNodeCommand.cpp: 
        (WebCore::DeleteFromTextNodeCommand::doApply): Updated to work with 
        functions that return ExceptionOr. 
        (WebCore::DeleteFromTextNodeCommand::doUnapply): Removed IGNORE_EXCEPTION. 
 
        * editing/InsertIntoTextNodeCommand.cpp: 
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand): 
        Use WTFMove to avoid a little bit of reference count churn. 
        (WebCore::InsertIntoTextNodeCommand::doApply): Removed IGNORE_EXCEPTION. 
        (WebCore::InsertIntoTextNodeCommand::doReapply): Removed ExceptionCode. 
        (WebCore::InsertIntoTextNodeCommand::doUnapply): Removed IGNORE_EXCEPTION. 
 
        * editing/SplitTextNodeCommand.cpp: 
        (WebCore::SplitTextNodeCommand::doApply): Updated to work with functions 
        that return ExceptionCode. 
        (WebCore::SplitTextNodeCommand::doUnapply): Removed ASSERT_NO_EXCEPTION. 
        (WebCore::SplitTextNodeCommand::insertText1AndTrimText2): Updated to work 
        with functions that return ExceptionCode. 
 
        * html/HTMLTextFormControlElement.cpp: 
        Added now-needed include of ExceptionCode.h. 
 
        * inspector/DOMEditor.cpp: Removed ExceptionCode out argument from calls 
        to replaceWholeText, which never throws an exception. 
 
2016-10-29  Dean Jackson  <dino@apple.com> 
 
        Parse color() function 
        https://bugs.webkit.org/show_bug.cgi?id=164146 
        <rdar://problems/29007218> 
 
        Reviewed by Darin Adler. 
 
        Support the new CSS color() function: 
        https://drafts.csswg.org/css-color/#color-function 
 
        There are separate code paths for the old and new CSS parser. 
 
        Tests: css3/color/color-function-computed-style.html 
               css3/color/color-function-parsing.html 
 
        * css/CSSComputedStyleDeclaration.cpp: Use Color directly, not via rgb(). 
        (WebCore::ComputedStyleExtractor::currentColorOrValidColor): 
        (WebCore::ComputedStyleExtractor::valueForShadow): 
        (WebCore::ComputedStyleExtractor::propertyValue): 
 
        * css/CSSValueKeywords.in: Note that there is a color function, but the 
        keyword is already defined. Also add keywords for the color spaces. 
        * css/SVGCSSValueKeywords.in: sRGB is used outside of SVG now. 
 
        * css/parser/CSSParser.cpp: Old CSS parser code to handle color(). 
        (WebCore::isPercent): Helper to tell if a ValueWithCalculation is a percentage or not. 
        (WebCore::CSSParser::parseColorInt): Renamed. 
        (WebCore::CSSParser::parseColorDouble): Helper to get a Number/Percentage into a double 
        (WebCore::CSSParser::parseRGBParameters): 
        (WebCore::CSSParser::parseColorFunctionParameters): 
        (WebCore::CSSParser::parseHSLParameters): 
        (WebCore::CSSParser::parseColorFromValue): 
        (WebCore::CSSParser::colorIntFromValue): Deleted. 
        * css/parser/CSSParser.h: 
 
        * css/parser/CSSPropertyParserHelpers.cpp: New CSS parser code to handle color(). 
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters): 
        (WebCore::CSSPropertyParserHelpers::parseColorFunction): 
 
        * platform/graphics/Color.h: 
        (WebCore::Color::isValid): An extended color is valid. 
        (WebCore::Color::rgb): Move the code to a standalone inline 
        so that I could add a longer comment. 
 
        * platform/graphics/ExtendedColor.cpp: 
        (WebCore::ExtendedColor::cssText): Alpha output is only needed if != 1. 
 
        * platform/graphics/cg/ColorCG.cpp: Handle ExtendedColor -> CGColor. 
        (WebCore::leakCGColor): 
        (WebCore::cachedCGColor): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Disable -webkit-text-size-adjust when the context says to. 
        https://bugs.webkit.org/show_bug.cgi?id=164191 
 
        Reviewed by Dean Jackson. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::CSSPropertyParser::parseSingleValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Match old parser's image-rendering values 
        https://bugs.webkit.org/show_bug.cgi?id=164190 
 
        Reviewed by Dean Jackson. 
 
        * css/parser/CSSParserFastPaths.cpp: 
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support -webkit-text value for background-clip and -webkit-background-clip 
        https://bugs.webkit.org/show_bug.cgi?id=164189 
 
        Reviewed by Dean Jackson. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeBackgroundBox): 
        (WebCore::consumePrefixedBackgroundBox): 
 
2016-10-29  Joseph Pecoraro  <pecoraro@apple.com> 
 
        Remove some unnecessary includes 
        https://bugs.webkit.org/show_bug.cgi?id=164174 
 
        Reviewed by Darin Adler. 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support -webkit-aspect-ratio 
        https://bugs.webkit.org/show_bug.cgi?id=164187 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeWebkitAspectRatio): 
        (WebCore::CSSPropertyParser::parseSingleValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support the caps lock indicator appearance 
        https://bugs.webkit.org/show_bug.cgi?id=164186 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSParserFastPaths.cpp: 
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support the alt property 
        https://bugs.webkit.org/show_bug.cgi?id=164184 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeAlt): 
        (WebCore::CSSPropertyParser::parseSingleValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Add support for -webkit-hyphenate-limit-* properties 
        https://bugs.webkit.org/show_bug.cgi?id=164183 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeHyphenateLimit): 
        (WebCore::CSSPropertyParser::parseSingleValue): 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Fix transform-origin and perspective-origin to parse as shorthands 
        https://bugs.webkit.org/show_bug.cgi?id=164178 
 
        Reviewed by Zalan Bujtas. 
 
        * css/CSSPropertyNames.in: 
        Patch the transform-origin-x/y and perspective-origin-x/y properties 
        to use new converters that can handle keywords. 
 
        * css/StyleBuilderConverter.h: 
        (WebCore::StyleBuilderConverter::convertPositionComponentX): 
        (WebCore::StyleBuilderConverter::convertPositionComponentY): 
        Add the new converters. They just call convertPositionComponent method 
        that we already use for object-position and background-position. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::CSSPropertyParser::consumeTransformOrigin): 
        (WebCore::CSSPropertyParser::consumePerspectiveOrigin): 
        Changed to treat the properties as shorthands and add the longhand 
        properties once parsed. 
 
        (WebCore::CSSPropertyParser::parseSingleValue): 
        (WebCore::CSSPropertyParser::parseShorthand): 
        * css/parser/CSSPropertyParser.h: 
        Move the parsing into the shorthand method, since we're still treating 
        these properties as shorthands. 
 
2016-10-29  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support -webkit-background-composite 
        https://bugs.webkit.org/show_bug.cgi?id=164179 
 
        Reviewed by Zalan Bujtas. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeBackgroundComponent): 
        (WebCore::CSSPropertyParser::parseSingleValue): 
 
2016-10-29  Youenn Fablet  <youenn@apple.com> 
 
        REGRESSION (r207754): LayoutTest http/tests/security/svg-image-with-css-cross-domain.html is a flaky failure 
        https://bugs.webkit.org/show_bug.cgi?id=163922 
 
        Reviewed by Alex Christensen. 
 
        Test: http/tests/security/cached-svg-image-with-css-cross-domain.html 
 
        Raw data was not copied in cloned CachedCSSStyleSheet while it is used by some of its clients. 
        Updated CachedCSSStyleSheet and CachedImage cloning to copy its raw data. 
 
        * loader/cache/CachedCSSStyleSheet.cpp: 
        (WebCore::CachedCSSStyleSheet::setBodyDataFrom): 
        * loader/cache/CachedImage.cpp: 
        (WebCore::CachedImage::setBodyDataFrom): 
        * loader/cache/CachedResource.h: 
        (WebCore::CachedResource::mayTryReplaceEncodedData): 
 
2016-10-29  Youenn Fablet  <youenn@apple.com> 
 
        REGRESSION (Safari 10 / r189445): WKWebView and WebView no longer allow async XMLHttpRequest timeout to exceed 60 seconds 
        https://bugs.webkit.org/show_bug.cgi?id=163814 
        <rdar://problem/28917420> 
 
        Reviewed by Darin Adler. 
 
        Tests: http/tests/xmlhttprequest/resetting-timeout-to-zero.html 
               http/tests/xmlhttprequest/timeout-greater-than-default-network-timeout.html 
 
        * xml/XMLHttpRequest.cpp: 
        (WebCore::XMLHttpRequest::setTimeout): If the XHR timeout is active, resetting the timeout to zero should lead to using the default network timeout. 
        Since it is difficult to update the timeout once the request is sent, we mimic the default network timeout with a 60 seconds XHR timeout. 
        (WebCore::XMLHttpRequest::createRequest): Setting network timeout to infinity if the XHR timeout is active. 
 
2016-10-29  Youenn Fablet  <youenn@apple.com> 
 
        MediaEndpoint::generateDtlsInfo is not needed 
        https://bugs.webkit.org/show_bug.cgi?id=164130 
 
        Reviewed by Eric Carlson. 
 
        No change of behavior. 
 
        Removing MediaEndpoint::generateDtlsInfo as it can be called directly from createMediaEndpointOwr. 
 
        * Modules/mediastream/MediaEndpointPeerConnection.cpp: 
        (WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection): 
        * platform/mediastream/MediaEndpoint.cpp: 
        * platform/mediastream/MediaEndpoint.h: 
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp: 
        (WebCore::createMediaEndpointOwr): 
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h: 
        * platform/mock/MockMediaEndpoint.cpp: 
        (WebCore::MockMediaEndpoint::MockMediaEndpoint): 
        (WebCore::MockMediaEndpoint::generateDtlsInfo): Deleted. 
        * platform/mock/MockMediaEndpoint.h: 
 
2016-10-28  Wenson Hsieh  <wenson_hsieh@apple.com> 
 
        Unreviewed, add Input Events to the features list. 
 
        * features.json: 
 
2016-10-28  Darin Adler  <darin@apple.com> 
 
        Fix mismerge that broke a CEReactions test. 
 
        * html/HTMLOptionsCollection.idl: Add back CEReactions to the remove function. 
 
2016-10-28  Darin Adler  <darin@apple.com> 
 
        Move all classes in the HTML directory from ExceptionCode to Exception 
        https://bugs.webkit.org/show_bug.cgi?id=163876 
 
        Reviewed by Sam Weinig. 
 
        * bindings/js/JSDOMBinding.cpp: 
        (WebCore::shouldAllowAccessToNode): Deleted. 
        (WebCore::BindingSecurity::shouldAllowAccessToFrame): Moved function into the 
        BindingSecurity namespace. Also changed arguments to references. 
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow): Ditto. 
        (WebCore::BindingSecurity::shouldAllowAccessToNode): Changed argument type 
        from pointer to reference. 
 
        * bindings/js/JSDOMBinding.h: Removed top level shouldAllowAccessTo functions, 
        moving all of them into the BindingSecurity namespace. Changed BindingSecurity 
        from a class into a namespace. Added new checkSecurityForNode functions that 
        can be used directly to implement CheckSecurityForNode; they turn the node 
        into a null, which is no change in behavior from what bindings already did. 
 
        * bindings/js/JSDOMWindowCustom.cpp: 
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess): Changed argument 
        type for passed-in string to const String& instead of String&. 
        (WebCore::JSDOMWindow::getOwnPropertySlot): Updated for BindingSecurity changes. 
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex): Ditto. 
        (WebCore::JSDOMWindow::put): Ditto. 
 
        * bindings/js/JSHTMLCanvasElementCustom.cpp: 
        (WebCore::attributesFor3DContext): Renamed from get3DContextAttributes and 
        changed to use a return value instead of an out argument. 
        (WebCore::JSHTMLCanvasElement::getContext): Updated for the above. 
        (WebCore::JSHTMLCanvasElement::toDataURL): Rewrote to handle ExceptionOr 
        and also to use Optional<double> instead of const double*. 
 
        * bindings/js/JSHTMLFrameElementCustom.cpp: 
        (WebCore::JSHTMLFrameElement::setLocation): Moved the logic from 
        allowSettingJavascriptURL in here and updated for BindingSecurity changes. 
 
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: 
        (WebCore::JSHTMLOptionsCollection::setLength): Use propagateException. 
        Also streamlined the code a bit. 
        (WebCore::JSHTMLOptionsCollection::indexSetter): Updated for new name and 
        argument types for selectElementIndexSetter. 
 
        * bindings/js/JSHTMLSelectElementCustom.cpp: 
        (WebCore::selectElementIndexSetter): Updated name and argument types and 
        to use propagateException. 
        (WebCore::JSHTMLSelectElement::indexSetter): Updated for above. 
        * bindings/js/JSHTMLSelectElementCustom.h: Ditto. 
 
        * bindings/js/JSLocationCustom.cpp: 
        (WebCore::JSLocation::getOwnPropertySlotDelegate): Updated for changes to 
        BindingSecurity. 
        (WebCore::JSLocation::putDelegate): Ditto. Also rearranged logic a bit. 
 
        * bindings/js/ScriptController.cpp: 
        (WebCore::ScriptController::canAccessFromCurrentOrigin): Updated for 
        changes to BindingSecurity. 
 
        * bindings/scripts/CodeGeneratorJS.pm: 
        (GenerateImplementation): Removed old support for CheckSecurityForNode. 
        (NativeToJSValue): Added new support for CheckSecurityForNode, which uses 
        the new checkSecurityForNode function, and works properly with ExceptionOr. 
 
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated for change below. 
 
        * dom/ChildNode.idl: Move the remove function to non-legacy exception. 
        Needed now because this needs to match the one in HTMLSelectElement. 
 
        * dom/Element.cpp: 
        (WebCore::Element::dispatchMouseForceWillBegin): Refactored a little bit. 
        (WebCore::Element::mergeWithNextTextNode): Support ExceptionOr for remove. 
        (WebCore::Element::setOuterHTML): Support ExceptionOr for 
        createFragmentForInnerOuterHTML. 
        (WebCore::Element::setInnerHTML): Ditto. 
        (WebCore::Element::insertAdjacentHTML): Ditto. 
 
        * dom/Node.cpp: 
        (WebCore::Node::remove): Use ExceptionOr. 
        (WebCore::Node::normalize): Remove use of IGNORE_EXCEPTION. 
        * dom/Node.h: Use ExceptionOr for remove. 
 
        * dom/Range.cpp: 
        (WebCore::Range::insertNode): Updated for change to remove. 
        (WebCore::Range::createContextualFragment): Updated for change 
        to WebCore::createContextualFragment. 
 
        * dom/ShadowRoot.cpp: 
        (WebCore::ShadowRoot::setInnerHTML): Use ExceptionOr for 
        createFragmentForInnerOuterHTML and replaceChildrenWithFragment. 
 
        * editing/AppendNodeCommand.cpp: 
        (WebCore::AppendNodeCommand::doUnapply): Remove IGNORE_EXCEPTION. 
        * editing/InsertNodeBeforeCommand.cpp: 
        (WebCore::InsertNodeBeforeCommand::doUnapply): Ditto. 
        * editing/MergeIdenticalElementsCommand.cpp: 
        (WebCore::MergeIdenticalElementsCommand::doApply): Ditto. 
        * editing/RemoveNodeCommand.cpp: 
        (WebCore::RemoveNodeCommand::doApply): Ditto. 
        * editing/SplitElementCommand.cpp: 
        (WebCore::SplitElementCommand::doUnapply): Ditto. 
        * editing/SplitTextNodeCommand.cpp: 
        (WebCore::SplitTextNodeCommand::doUnapply): Ditto. 
        * editing/WrapContentsInDummySpanCommand.cpp: 
        (WebCore::WrapContentsInDummySpanCommand::doUnapply): Ditto. 
 
        * editing/Editor.cpp: 
        (WebCore::Editor::insertDictationPhrases): Deleted. Moved this 
        iOS-specific function to EditorIOS.mm. 
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto. 
        (WebCore::Editor::confirmMarkedText): Ditto. 
        (WebCore::Editor::setTextAsChildOfElement): Ditto. 
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping): Ditto. 
 
        * editing/ios/EditorIOS.mm: 
        (WebCore::Editor::fontForSelection): Remove ASSERT_NO_EXCEPTION. 
        (WebCore::Editor::fontAttributesForSelectionStart): Ditto. 
        (WebCore::Editor::insertDictationPhrases): Moved here from Editor.cpp. 
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto. Also 
        updated code that used remove to not pass an ExceptionCode. 
        (WebCore::Editor::confirmMarkedText): Ditto. 
        (WebCore::Editor::setTextAsChildOfElement): Ditto. 
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping): Ditto. 
 
        * editing/mac/EditorMac.mm: 
        (WebCore::Editor::fontForSelection): Remove ASSERT_NO_EXCEPTION. 
        (WebCore::Editor::fontAttributesForSelectionStart): Ditto. 
 
        * editing/markup.cpp: 
        (WebCore::createFragmentForInnerOuterHTML): Use ExceptionOr. 
        (WebCore::createContextualFragment): Ditto. 
        (WebCore::replaceChildrenWithFragment): Ditto. 
        (WebCore::replaceChildrenWithText): Ditto. 
        * editing/markup.h: Updated for above changes. 
 
        * html/BaseChooserOnlyDateAndTimeInputType.cpp: 
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance): 
        Removed ASSERT_NO_EXCEPTION. 
 
        * html/BaseDateAndTimeInputType.cpp: 
        (WebCore::BaseDateAndTimeInputType::setValueAsDate): Use ExceptionOr. 
        (WebCore::BaseDateAndTimeInputType::setValueAsDecimal): Ditto. 
        * html/BaseDateAndTimeInputType.h: Updated for above changes. 
 
        * html/DateTimeLocalInputType.cpp: 
        (WebCore::DateTimeLocalInputType::setValueAsDate): Use ExceptionOr. 
        * html/DateTimeLocalInputType.h: Updated for above changes. 
 
        * html/DOMTokenList.cpp: 
        (WebCore::DOMTokenList::validateToken): Use ExceptionOr. 
        (WebCore::DOMTokenList::validateTokens): Ditto. 
        (WebCore::DOMTokenList::addInternal): Ditto. 
        (WebCore::DOMTokenList::add): Ditto. 
        (WebCore::DOMTokenList::removeInternal): Ditto. 
        (WebCore::DOMTokenList::remove): Ditto. 
        (WebCore::DOMTokenList::toggle): Ditto. 
        (WebCore::DOMTokenList::replace): Ditto. 
        (WebCore::DOMTokenList::supports): Ditto. 
        * html/DOMTokenList.h: Updated for above changes. 
        * html/DOMTokenList.idl: Use non-legacy exceptions. 
 
        * html/DOMURL.cpp: 
        (WebCore::DOMURL::DOMURL): Just take the two URL objects and let 
        the create functions do all the processing. 
        (WebCore::DOMURL::create): Use ExceptionOr, and move the processing 
        of the URLs here out of the constructors. 
        (WebCore::DOMURL::setHref): Use ExceptionOr. 
        * html/DOMURL.h: Updated for above changes. 
        * html/DOMURL.idl: Use non-legacy exceptions. 
 
        * html/FTPDirectoryDocument.cpp: 
        (WebCore::FTPDirectoryDocumentParser::appendEntry): Remove 
        IGNORE_EXCEPTION and use releaseReturnValue(). 
 
        * html/HTMLCanvasElement.cpp: 
        (WebCore::HTMLCanvasElement::toDataURL): Use ExceptionOr. 
        * html/HTMLCanvasElement.h: Updated for above changes. 
        * html/HTMLCanvasElement.idl: Use non-legacy exception. 
 
        * html/HTMLElement.cpp: 
        (WebCore::HTMLElement::textToFragment): Use ExceptionOr. 
        (WebCore::HTMLElement::setInnerText): Ditto. 
        (WebCore::HTMLElement::setOuterText): Ditto. 
        (WebCore::HTMLElement::setContentEditable): Ditto. 
        (WebCore::HTMLElement::translateAttributeMode): Deleted. 
        (WebCore::HTMLElement::translate): Moved the logic from the 
        translateAttributeMode function in here. 
        * html/HTMLElement.h: Updated for above changes. 
        * html/HTMLElement.idl: Use non-legacy exceptions. 
 
        * html/HTMLEmbedElement.idl: Use non-legacy exception. 
        * html/HTMLFrameElement.idl: Ditto. 
 
        * html/HTMLFrameOwnerElement.cpp: 
        (WebCore::HTMLFrameOwnerElement::getSVGDocument): Use ExceptionOr. 
        * html/HTMLFrameOwnerElement.h: Updated for above. 
 
        * html/HTMLIFrameElement.idl: Use non-legacy exception. 
 
        * html/HTMLInputElement.cpp: 
        (WebCore::HTMLInputElement::stepUp): Use ExceptionOr. 
        (WebCore::HTMLInputElement::stepDown): Ditto. 
        (WebCore::HTMLInputElement::setValue): Ditto. 
        (WebCore::HTMLInputElement::setValueAsDate): Ditto. 
        (WebCore::HTMLInputElement::setValueAsNumber): Ditto. 
        (WebCore::HTMLInputElement::setSize): Ditto. 
        (WebCore::HTMLInputElement::maxLengthAttributeChanged): Use the 
        new internalSetMaxLength function; old code relied on a setMaxLength 
        that was different from the one exposed to bindings. 
        (WebCore::HTMLInputElement::minLengthAttributeChanged): Ditto. 
        (WebCore::HTMLInputElement::setRangeText): Use ExceptionOr. 
        * html/HTMLInputElement.h: Updated for above changes. Also use 
        data member initialization for InputElementClickState instead of 
        a constructor. 
        * html/HTMLInputElement.idl: Use non-legacy exception. 
 
        * html/HTMLMarqueeElement.cpp: 
        (WebCore::HTMLMarqueeElement::setLoop): Use ExceptionOr. 
        (WebCore::HTMLMarqueeElement::renderMarquee): Tweaked. 
        * html/HTMLMarqueeElement.h: Updated for above changes. 
        * html/HTMLMarqueeElement.idl: Ditto. 
 
        * html/HTMLMediaElement.cpp: 
        (WebCore::HTMLMediaElement::TrackGroup::TrackGroup): 
        Initialize most data members in class definition rather than 
        the constructor. 
        (WebCore::HTMLMediaElement::HTMLMediaElement): Ditto. 
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Updated since 
        removeMediaElement now takes a reference. 
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Use 
        a modern for loop to streamline code. 
        (WebCore::HTMLMediaElement::textTrackModeChanged): Updated since 
        track now returns a reference. 
        (WebCore::HTMLMediaElement::setCurrentTimeForBindings): Renamed 
        to prevent ambiguity with the other version that has slightly 
        different semantics and overloading and changed to use ExceptionOr. 
        (WebCore::HTMLMediaElement::playInternal): Updated to use reference. 
        (WebCore::HTMLMediaElement::setVolume): Use ExceptionOr. 
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Take a 
        reference instead of a PassRefPtr. 
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Ditto. 
        (WebCore::HTMLMediaElement::mediaPlayerDidAddVideoTrack): Ditto. 
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveAudioTrack): Ditto. 
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveTextTrack): Ditto. 
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveVideoTrack): Ditto. 
        (WebCore::HTMLMediaElement::addTextTrack): Use ExceptionOr. 
        (WebCore::HTMLMediaElement::didAddTextTrack): Use a reference. 
        (WebCore::HTMLMediaElement::didRemoveTextTrack): Ditto. 
        (WebCore::HTMLMediaElement::maxBufferedTime): Update to use different 
        interface to time ranges that does not need to deal with exceptions. 
        (WebCore::HTMLMediaElement::setController): Pass references. 
        (WebCore::HTMLMediaElement::outOfBandTrackSources): Use reference. 
        * html/HTMLMediaElement.h: Updated for above. 
        * html/HTMLMediaElement.idl: Use non-legacy exceptions. 

        * html/HTMLObjectElement.idl: Use non-legacy exception. 
     
        * html/HTMLOptionElement.cpp: 
        (WebCore::HTMLOptionElement::createForJSConstructor): Use ExceptionOr. 
        * html/HTMLOptionElement.h: Updated for above change. 
        * html/HTMLOptionElement.idl: Use non-legacy exception. 

        * html/HTMLOptionsCollection.cpp: 
        (WebCore::HTMLOptionsCollection::setLength): Use ExceptionOr. 
        * html/HTMLOptionsCollection.h: Updated for above change. 
        * html/HTMLOptionsCollection.idl: Use non-legacy exception. 
 
        * html/HTMLProgressElement.cpp: 
        (WebCore::HTMLProgressElement::setValue): Removed non-finite handling 
        because that is now handled by the bindings. 
        (WebCore::HTMLProgressElement::setMax): Ditto. 
        * html/HTMLProgressElement.h: Updated for above. 
        * html/HTMLProgressElement.idl: Changed attributes to be double instead 
        of unrestricted double, and this was able to remove exceptions. 
 
        * html/HTMLSelectElement.cpp: 
        (WebCore::HTMLSelectElement::removeByIndex): Drop IGNORE_EXCEPTION. 
        (WebCore::HTMLSelectElement::remove): Use ExceptionOr. 
        (WebCore::HTMLSelectElement::setOption): Ditto. 
        (WebCore::HTMLSelectElement::setLength): Ditto. 
        * html/HTMLSelectElement.h: Updated for above changes. 
        * html/HTMLSelectElement.idl: Use non-legacy exceptions. 
 
        * html/HTMLTableElement.cpp: 
        (WebCore::HTMLTableElement::setCaption): Use ExceptionOr. 
        (WebCore::HTMLTableElement::setTHead): Ditto. 
        (WebCore::HTMLTableElement::setTFoot): Ditto. 
        (WebCore::HTMLTableElement::createTHead): Streamline a bit. 
        (WebCore::HTMLTableElement::deleteTHead): Ditto. 
        (WebCore::HTMLTableElement::createTFoot): Ditto. 
        (WebCore::HTMLTableElement::deleteTFoot): Ditto. 
        (WebCore::HTMLTableElement::createTBody): Ditto. 
        (WebCore::HTMLTableElement::createCaption): Ditto. 
        (WebCore::HTMLTableElement::insertRow): Use ExceptionOr. 
        (WebCore::HTMLTableElement::deleteRow): Ditto. 
        * html/HTMLTableElement.h: Updated for above changes. 
        * html/HTMLTableElement.idl: Use non-legacy exceptions. 
 
        * html/HTMLTableRowElement.cpp: 
        (WebCore::findTable): Added. 
        (WebCore::HTMLTableRowElement::rowIndex): Streamline a bit using the 
        findTable function above. 
        (WebCore::findRows): Added. 
        (WebCore::HTMLTableRowElement::sectionRowIndex): Streamline a bit using 
        the findRows function above. 
        (WebCore::HTMLTableRowElement::insertCell): Use ExceptionOr. 
        (WebCore::HTMLTableRowElement::deleteCell): Ditto. 
        (WebCore::HTMLTableRowElement::setCells): Deleted. 
        * html/HTMLTableRowElement.h: Updated for the above. The setCells function 
        was dead code. 
        * html/HTMLTableRowElement.idl: Use non-legacy exceptions. 
 
        * html/HTMLTableSectionElement.cpp: 
        (WebCore::HTMLTableSectionElement::additionalPresentationAttributeStyle): 
        Tweaked a bit to use early return. 
        (WebCore::HTMLTableSectionElement::insertRow): Use ExceptionOr. 
        (WebCore::HTMLTableSectionElement::deleteRow): Ditto. 
        (WebCore::HTMLTableSectionElement::numRows): Use childrenOfType. 
        (WebCore::HTMLTableSectionElement::align): Deleted. 
        (WebCore::HTMLTableSectionElement::setAlign): Deleted. 
        (WebCore::HTMLTableSectionElement::ch): Deleted. 
        (WebCore::HTMLTableSectionElement::setCh): Deleted. 
        (WebCore::HTMLTableSectionElement::chOff): Deleted. 
        (WebCore::HTMLTableSectionElement::setChOff): Deleted. 
        (WebCore::HTMLTableSectionElement::vAlign): Deleted. 
        (WebCore::HTMLTableSectionElement::setVAlign): Deleted. 
        * html/HTMLTableSectionElement.h: Updated for the above. 
        * html/HTMLTableSectionElement.idl: Use non-legacy exception. 
 
        * html/HTMLTextAreaElement.cpp: 
        (WebCore::HTMLTextAreaElement::maxLengthAttributeChanged): Use the new 
        internalSetMaxLength function; old code relied on a setMaxLength 
        that was different from the one exposed to bindings. 
        (WebCore::HTMLTextAreaElement::minLengthAttributeChanged): Ditto. 
        (WebCore::HTMLTextAreaElement::updatePlaceholderText): Removed 
        ASSERT_NO_EXCEPTION. 
        * html/HTMLTextAreaElement.idl: Use non-legacy exceptions. 
 
        * html/HTMLTextFormControlElement.cpp: 
        (WebCore::HTMLTextFormControlElement::setRangeText): Use ExceptionOr. 
        (WebCore::HTMLTextFormControlElement::setInnerTextValue): Ditto. 
        (WebCore::HTMLTextFormControlElement::setMaxLength): Ditto. 
        (WebCore::HTMLTextFormControlElement::setMinLength): Ditto. 
        * html/HTMLTextFormControlElement.h: Updated for above changes. 
        Also renamed the setMin/MaxLength function overloads for internal use 
        to internSetMin/MaxLength and made them protected. 
 
        * html/HTMLTrackElement.cpp: 
        (WebCore::HTMLTrackElement::~HTMLTrackElement): Call clearElement on the 
        track to break the connection. Before this was done as a side effect of 
        clearClient, but that is called in other cases where we do not want to 
        clear the link back to the track element. 
        (WebCore::HTMLTrackElement::insertedInto): Removed code that uses the 
        track function for its side effect of creating a track; no longer needed. 
        Rewrote this so it's more symmetric with removedFrom. 
        (WebCore::HTMLTrackElement::removedFrom): Pass reference. Also reordered 
        and removed an unnecessary check for null parent. 
        (WebCore::HTMLTrackElement::parseAttribute): Use track. 
        (WebCore::HTMLTrackElement::kind): Ditto. 
        (WebCore::HTMLTrackElement::track): Renamed ensureTrack to this. Also 
        removed the redundant code to call setTrackElement; we no longer change 
        the track element on a track until the track element is destroyed. 
        (WebCore::HTMLTrackElement::scheduleLoad): Use track. 
        (WebCore::HTMLTrackElement::loadTimerFired): Ditto. 
        (WebCore::HTMLTrackElement::setReadyState): Ditto. 
        (WebCore::HTMLTrackElement::readyState): Ditto. 
        (WebCore::HTMLTrackElement::mediaElement): Rearranged to use early return. 
        * html/HTMLTrackElement.h: Updated for above changes. 
 
        * html/HTMLVideoElement.cpp: 
        (WebCore::HTMLVideoElement::webkitEnterFullscreen): Use ExceptionOr. 
        * html/HTMLVideoElement.h: Removed the functions used just for 
        capitalization reasons; that's now handled in the bindings. 
        * html/HTMLVideoElement.idl: Use non-legacy bindings and ImplementedAs. 
 
        * html/ImageData.cpp: 
        (WebCore::ImageData::create): Return ExceptionOr. 
        * html/ImageData.h: Updated for above changes. 
        * html/ImageData.idl: Use non-legacy exceptions. 
 
        * html/InputType.cpp: 
        (WebCore::InputType::setValueAsDate): Use ExceptionOr. 
        (WebCore::InputType::setValueAsDouble): Ditto. 
        (WebCore::InputType::setValueAsDecimal): Ditto. 
        (WebCore::InputType::applyStep): Ditto. 
        (WebCore::InputType::stepUp): Ditto. 
        (WebCore::InputType::stepUpFromRenderer): Removed IGNORE_EXCEPTION. 
        * html/InputType.h: Updated for the above. 
 
        * html/MediaController.cpp: 
        (MediaController::addMediaElement): Take a reference instead of a pointer. 
        (MediaController::removeMediaElement): Ditto. 
        (MediaController::containsMediaElement): Ditto. 
        (MediaController::setVolume): Use ExceptionOr. 
        (MediaController::bringElementUpToSpeed): Take a reference. 
        * html/MediaController.h: Updated for above changes. Also made lots of 
        function overrides private. 
        * html/MediaController.idl: Use non-legacy exception. 
 
        * html/MediaControllerInterface.h: Use ExceptionOr for setVolume. 
 
        * html/NumberInputType.cpp: 
        (WebCore::RealNumberRenderSize::max): Use aggregate initialization instead 
        of a constructor. 
        (WebCore::calculateRenderSize): Ditto. 
        (WebCore::NumberInputType::setValueAsDouble): Use ExceptionOr. 
        (WebCore::NumberInputType::setValueAsDecimal): Ditto. 
        * html/NumberInputType.h: Updated for above changes. 
 
        * html/RangeInputType.cpp: 
        (WebCore::RangeInputType::RangeInputType): Initialize scalar data member 
        in class definition instead of here. 
        (WebCore::RangeInputType::setValueAsDecimal): Use ExceptionOr. 
        (WebCore::RangeInputType::handleKeydownEvent): Removed IGNORE_EXCEPTION. 
        * html/RangeInputType.h: Updated for above changes. 
 
        * html/TextFieldInputType.cpp: 
        (WebCore::TextFieldInputType::updatePlaceholderText): Removed 
        ASSERT_NO_EXCEPTION. 
 
        * html/TimeRanges.cpp: 
        (WebCore::TimeRanges::start): Use ExceptionOr. 
        (WebCore::TimeRanges::end): Ditto. 
        * html/TimeRanges.h: Updated for the above. 
        * html/TimeRanges.idl: Use non-legacy exceptions. 
 
        * html/URLUtils.idl: Use non-legacy exception. 
 
        * html/ValidationMessage.cpp: 
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer): Removed 
        ASSERT_NO_EXCEPTION, IGNORE_EXCEPTION, and other exception-ignoring idioms. 
        * html/parser/HTMLTreeBuilder.cpp: 
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto. 
        * html/shadow/MediaControlElementTypes.cpp: 
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler): Ditto. 
        * html/shadow/MediaControlElements.cpp: 
        (WebCore::MediaControlPanelElement::setPosition): Ditto. 
        (WebCore::MediaControlPanelElement::resetPosition): Ditto. 
        (WebCore::MediaControlStatusDisplayElement::update): Ditto. 
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Ditto. 
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler): Ditto. 
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler): Ditto. 
        * html/shadow/MediaControls.cpp: 
        (WebCore::MediaControls::updateCurrentTimeDisplay): Ditto. 
        * html/shadow/MediaControlsApple.cpp: 
        (WebCore::MediaControlsApple::updateCurrentTimeDisplay): Ditto. 
 
        * html/track/LoadableTextTrack.cpp: 
        (WebCore::LoadableTextTrack::LoadableTextTrack): Take reference. 
        (WebCore::LoadableTextTrack::~LoadableTextTrack): Deleted. 
        (WebCore::LoadableTextTrack::clearClient): Deleted override. We no longer 
        want to clear m_trackElement when clearing the client. 
        (WebCore::LoadableTextTrack::setTrackElement): Deleted. 
        (WebCore::LoadableTextTrack::id): Changed to use 
        attributeWithoutSynchronization for better performance and idAttr instead 
        of a string constant. 
        * html/track/LoadableTextTrack.h: Updated for above changes. Added a new 
        clearElement function. Made the element and isDefault functions private. 
 
        * html/track/VTTCue.cpp: 
        (WebCore::VTTCue::~VTTCue): Removed ASSERT_NO_EXCEPTION, IGNORE_EXCEPTION, 
        and other exception-ignoring idioms. 
        (WebCore::VTTCue::removeDisplayTree): Ditto. 
        * html/track/VTTRegion.cpp: 
        (WebCore::VTTRegion::displayLastTextTrackCueBox): Ditto. 
        (WebCore::VTTRegion::willRemoveTextTrackCueBox): Ditto. 
 
        * inspector/InspectorDOMAgent.cpp: 
        (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend): 
        Rewrote to avoid multiplehash table lookups and added a FIXME about 
        the peculiar code here. 
        (WebCore::InspectorDOMAgent::resolveNode): Streamlined. 
        (WebCore::InspectorDOMAgent::nodeAsScriptValue): Use the new 
        checkSecurityForNode instead of the old shouldAllowAccessToNode. 
 
        * platform/graphics/ImageBuffer.h: Take Optional<double> instead of 
        const double* in toDataURL. Renamed ImageDataToDataURL to just dataURL. 
 
        * platform/graphics/MediaPlayer.cpp: 
        (WebCore::MediaPlayer::addAudioTrack): Take a reference instead of PassRefPtr. 
        (WebCore::MediaPlayer::removeAudioTrack): Ditto. 
        (WebCore::MediaPlayer::addTextTrack): Ditto. 
        (WebCore::MediaPlayer::removeTextTrack): Ditto. 
        (WebCore::MediaPlayer::addVideoTrack): Ditto. 
        (WebCore::MediaPlayer::removeVideoTrack): Ditto. 
        * platform/graphics/MediaPlayer.h: Updated for the above. 
 
        * platform/graphics/PlatformTimeRanges.h: Exported a couple of functions 
        that are now used in WebKit. 
 
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: 
        (WebCore::MediaPlayerPrivateAVFoundation::clearTextTracks): Use a modern for loop. 
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks): 
        Fixed a bug that would cause this function to fail to process half the tracks. 
        Also updated for the change from PassRefPtr to references. 
 
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 
        (WebCore::determineChangedTracksFromNewTracksAndOldItems): Pass references. 
        (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider): Ditto. 
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMetadataTrack): Ditto. 
        (WebCore::assetMetadataKeyNames): Tweaked formatting. 
        (WebCore::itemKVOProperties): Ditto. 
        (WebCore::playerKVOProperties): Ditto. 
 
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: 
        (WebCore::updateTracksOfType): Pass references. 
 
        * platform/graphics/cairo/ImageBufferCairo.cpp: 
        (WebCore::ImageBuffer::toDataURL): Use Optional<double> 
 
        * platform/graphics/cg/ImageBufferCG.cpp: 
        (WebCore::createBitmapImageAfterScalingIfNeeded): Use auto. 
        (WebCore::encodeImage): Ditto. Also renamed from CGImageEncodeToData. 
        (WebCore::dataURL): Ditto. Also renamed from CGImageToDataURL and from 
        ImageDataToDataURL. 
        (WebCore::ImageBuffer::toDataURL): Ditto. 
 
        * platform/graphics/efl/ImageBufferEfl.cpp: 
        (WebCore::encodeImageJPEG): Use Optional<double> 
        (WebCore::ImageBuffer::toDataURL): Ditto. 
 
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: 
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Pass 
        a reference instead of pointer. 
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Ditto. 
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): Ditto. 
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection): Ditto. 
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Ditto. 
 
        * platform/graphics/gtk/ImageBufferGtk.cpp: 
        (WebCore::encodeImage): Use Optional<double> 
        (WebCore::ImageBuffer::toDataURL): Ditto. 
 
2016-10-28  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Allow @font-face src descriptor's format function to contain identifiers 
        https://bugs.webkit.org/show_bug.cgi?id=164169 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeFontFaceSrcURI): 
 
2016-10-28  Jer Noble  <jer.noble@apple.com> 
 
        WebAudio does not resume when moving from background to foreground tab. 
        https://bugs.webkit.org/show_bug.cgi?id=164043 
 
        Reviewed by Darin Adler. 
 
        Test: webaudio/page-canstartmedia.html 
 
        * Modules/webaudio/AudioContext.cpp: 
        (WebCore::AudioContext::mediaCanStart): 
 
2016-10-28  Wenson Hsieh  <wenson_hsieh@apple.com> 
 
        iOS autocorrection does not trigger an input event of inputType "insertReplacementText" 
        https://bugs.webkit.org/show_bug.cgi?id=164077 
        <rdar://problem/28987810> 
 
        Reviewed by Simon Fraser. 
 
        Fixes candidate insertion on iOS, so that it fires input events of type "insertReplacementText" and adds two 
        iOS unit tests covering this change as well as the test infrastructure needed to support these tests. See 
        comments below for more details. 
 
        Tests: fast/events/ios/before-input-events-prevent-candidate-insertion.html 
               fast/events/ios/input-events-insert-replacement-text.html 
 
        * dom/TextEvent.h: 
 
        Adds isAutocompletion() to TextEvent, as well as the TextEventInputAutocompletion text input type. When the 
        Editor handles this TextEvent, it will use this information when creating or modifying the corresponding typing 
        command. 
 
        * dom/TextEventInputType.h: 
        * editing/Editor.cpp: 
        (WebCore::Editor::insertText): 
        (WebCore::Editor::insertTextWithoutSendingTextEvent): 
        * editing/Editor.h: 
        * editing/TypingCommand.cpp: 
        (WebCore::editActionForTypingCommand): 
 
        Now takes whether the command is autocorrection into account. If so, the corresponding edit action should be 
        EditActionInsertReplacement rather than EditActionTypingInsertText. 
 
        (WebCore::TypingCommand::TypingCommand): 
        (WebCore::TypingCommand::deleteSelection): 
        (WebCore::TypingCommand::deleteKeyPressed): 
        (WebCore::TypingCommand::forwardDeleteKeyPressed): 
        (WebCore::TypingCommand::insertText): 
        (WebCore::TypingCommand::insertLineBreak): 
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent): 
        (WebCore::TypingCommand::insertParagraphSeparator): 
        (WebCore::TypingCommand::inputEventData): 
        (WebCore::TypingCommand::willAddTypingToOpenCommand): 
        * editing/TypingCommand.h: 
 
        Adds a new TypingCommand option, IsAutocompletion. 
 
2016-10-28  Commit Queue  <commit-queue@webkit.org> 
 
        Unreviewed, rolling out r207700. 
        https://bugs.webkit.org/show_bug.cgi?id=164168 
 
        We are ready after r208086 (Requested by alexchristensen on 
        #webkit). 
 
        Reverted changeset: 
 
        "Unreviewed, rolling out r207582." 
        https://bugs.webkit.org/show_bug.cgi?id=163819 
        http://trac.webkit.org/changeset/207700 
 
2016-10-28  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Allow unknown properties in will-change 
        https://bugs.webkit.org/show_bug.cgi?id=164165 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeWillChange): 
 
2016-10-28  Alex Christensen  <achristensen@webkit.org> 
 
        Partially revert 207805 after resolution in URL spec issue 87 
        https://bugs.webkit.org/show_bug.cgi?id=164142 
 
        Reviewed by Andy Estes. 
 
        Covered by updated layout tests and API tests. 
 
        * platform/URLParser.cpp: 
        (WebCore::URLParser::isSingleDotPathSegment): 
        (WebCore::URLParser::isDoubleDotPathSegment): 
        (WebCore::URLParser::consumeSingleDotPathSegment): 
        (WebCore::URLParser::consumeDoubleDotPathSegment): 
        Treat %2e%2e as .. and %2e as . but only if it is entirety of the path segment. 
        There are tests for URLs like http://host/abc%2edef which have not changed because 
        the %2e is not the entirety of the path segment. 
 
2016-10-28  Alex Christensen  <achristensen@webkit.org> 
 
        URLParser should not try to interpret host of URLs with unrecognized schemes as IPv4 address 
        https://bugs.webkit.org/show_bug.cgi?id=164154 
 
        Reviewed by Andy Estes. 
 
        This is needed to match behavior of all browsers. 
        This is being discussed in the spec at https://github.com/whatwg/url/issues/148 
 
        Covered by new API tests. 
 
        * platform/URLParser.cpp: 
        (WebCore::URLParser::parseHostAndPort): 
        Only try to parse and canonicalize the host as an IPv4 address if the scheme is special (http, wss, etc.) 
 
2016-10-28  Chris Dumez  <cdumez@apple.com> 
 
        DOMStringMap reports properties as non-enumerable 
        https://bugs.webkit.org/show_bug.cgi?id=164114 
 
        Reviewed by Sam Weinig. 
 
        DOMStringMap's named properties should be configurable, enumerable 
        and writable as per: 
        - https://heycam.github.io/webidl/#getownproperty-guts (2.7-9) 
        - https://html.spec.whatwg.org/multipage/dom.html#domstringmap 
 
        Firefox and Chrome agree with the specification. However, WebKit 
        was doing the complete opposite. 
 
        No new tests, updated existing test. 
 
        * bindings/js/JSDOMStringMapCustom.cpp: 
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate): 
 
2016-10-28  Ryosuke Niwa  <rniwa@webkit.org> 
 
        Add CEReactions to the remaining HTML DOM APIs 
        https://bugs.webkit.org/show_bug.cgi?id=163969 
 
        Reviewed by Chris Dumez. 
 
        Added CEReactions to the remaining DOM and HTML APIs as needed. 
 
        Tests: fast/custom-elements/reactions-for-indieui.html 
               fast/custom-elements/reactions/Document.html 
               fast/custom-elements/reactions/HTMLAnchorElement.html 
               fast/custom-elements/reactions/HTMLOptionElement.html 
               fast/custom-elements/reactions/HTMLOptionsCollection.html 
               fast/custom-elements/reactions/HTMLOutputElement.html 
               fast/custom-elements/reactions/HTMLSelectElement.html 
               fast/custom-elements/reactions/HTMLTableElement.html 
               fast/custom-elements/reactions/HTMLTableRowElement.html 
               fast/custom-elements/reactions/HTMLTableSectionElement.html 
               fast/custom-elements/reactions/HTMLTitleElement.html 
               fast/custom-elements/reactions/ShadowRoot.html 
 
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: 
        (WebCore::JSHTMLOptionsCollection::setLength): 
        (WebCore::JSHTMLOptionsCollection::indexSetter): 
        * bindings/js/JSHTMLSelectElementCustom.cpp: 
        (WebCore::JSHTMLSelectElement::indexSetter): 
        * dom/CharacterData.idl: 
        * dom/Document.idl: 
        * dom/Element.idl: 
        * dom/ShadowRoot.idl: 
        * html/HTMLAnchorElement.idl: 
        * html/HTMLDocument.idl: 
        * html/HTMLOptionElement.idl: 
        * html/HTMLOptionsCollection.idl: 
        * html/HTMLOutputElement.idl: 
        * html/HTMLSelectElement.idl: 
        * html/HTMLTableElement.idl: 
        * html/HTMLTableRowElement.idl: 
        * html/HTMLTableSectionElement.idl: 
        * html/HTMLTitleElement.idl: 
 
2016-10-28  Antoine Quint  <graouts@apple.com> 
 
        [Modern Media Controls] Media Controller: volume control support 
        https://bugs.webkit.org/show_bug.cgi?id=163727 
 
        Reviewed by Dean Jackson. 
 
        We introduce the VolumeSupport class which brings support for modifying the media 
        volume by interacting with the mute volume slider in the media controls and correctly 
        reflecting the media's volume should it be changed via the media API. 
 
        Tests: media/modern-media-controls/volume-support/volume-support-click.html 
               media/modern-media-controls/volume-support/volume-support-drag.html 
               media/modern-media-controls/volume-support/volume-support-media-api-mute.html 
               media/modern-media-controls/volume-support/volume-support-media-api.html 
 
        * Modules/modern-media-controls/js-files: 
        * Modules/modern-media-controls/media/media-controller.js: 
        (MediaController): 
        * Modules/modern-media-controls/media/volume-support.js: Added. 
        (VolumeSupport.prototype.get control): 
        (VolumeSupport.prototype.get mediaEvents): 
        (VolumeSupport.prototype.controlValueWillStartChanging): 
        (VolumeSupport.prototype.controlValueDidChange): 
        (VolumeSupport.prototype.syncControl): 
        (VolumeSupport): 
        * WebCore.xcodeproj/project.pbxproj: 
 
2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com> 
 
        [DOMJIT] Rename CallDOM to CallDOMGetter 
        https://bugs.webkit.org/show_bug.cgi?id=164157 
 
        Reviewed by Keith Miller. 
 
        No behavior change. 
 
        * bindings/scripts/CodeGeneratorJS.pm: 
        (GenerateHeader): 
        * bindings/scripts/test/JS/JSTestDOMJIT.h: 
        * domjit/JSDocumentDOMJIT.cpp: 
        (WebCore::DocumentDocumentElementDOMJIT::callDOMGetter): 
        (WebCore::DocumentDocumentElementDOMJIT::callDOM): Deleted. 
        * domjit/JSNodeDOMJIT.cpp: 
        (WebCore::createCallDOMGetterForOffsetAccess): 
        (WebCore::NodeFirstChildDOMJIT::callDOMGetter): 
        (WebCore::NodeLastChildDOMJIT::callDOMGetter): 
        (WebCore::NodeNextSiblingDOMJIT::callDOMGetter): 
        (WebCore::NodePreviousSiblingDOMJIT::callDOMGetter): 
        (WebCore::NodeParentNodeDOMJIT::callDOMGetter): 
        (WebCore::NodeNodeTypeDOMJIT::callDOMGetter): 
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter): 
        (WebCore::createCallDOMForOffsetAccess): Deleted. 
        (WebCore::NodeFirstChildDOMJIT::callDOM): Deleted. 
        (WebCore::NodeLastChildDOMJIT::callDOM): Deleted. 
        (WebCore::NodeNextSiblingDOMJIT::callDOM): Deleted. 
        (WebCore::NodePreviousSiblingDOMJIT::callDOM): Deleted. 
        (WebCore::NodeParentNodeDOMJIT::callDOM): Deleted. 
        (WebCore::NodeNodeTypeDOMJIT::callDOM): Deleted. 
        (WebCore::NodeOwnerDocumentDOMJIT::callDOM): Deleted. 
 
2016-10-28  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Fix font-family parsing inside @font-face 
        https://bugs.webkit.org/show_bug.cgi?id=164155 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor): 
        Use the full font-family parsing that returns a CSSValueList, 
        since we can handle multiple families. 
 
2016-10-28  Per Arne Vollan  <pvollan@apple.com> 
 
        [Win][Direct2D] Implement ImageBufferData::putData. 
        https://bugs.webkit.org/show_bug.cgi?id=164151 
 
        Reviewed by Brent Fulgham. 
 
        * platform/graphics/win/ImageBufferDataDirect2D.cpp: 
        (WebCore::ImageBufferData::getData): 
        (WebCore::ImageBufferData::putData): 
 
2016-10-28  Dave Hyatt  <hyatt@apple.com> 
 
        [CSS Parser] Support hanging-punctuation 
        https://bugs.webkit.org/show_bug.cgi?id=164153 
 
        Reviewed by Simon Fraser. 
 
        * css/parser/CSSPropertyParser.cpp: 
        (WebCore::consumeHangingPunctuation): 
        (WebCore::CSSPropertyParser::parseSingleValue): 

2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Document::documentElement
        https://bugs.webkit.org/show_bug.cgi?id=164113

        Reviewed by Sam Weinig.

        Test: js/dom/domjit-accessor-document-element.html

        This patch implements document.documentElement DOMJIT accessor.
        Similar to ownerDocument accessor, the way to access to document.documentElement
        from JIT code is already prepared for CSSJIT. DOMJIT just utilizes the existing
        functionality: using documentElementMemoryOffset().

        document.documentElement is frequently called in jQuery. Especially, every time
        we call jQuery.attr(), this is called.

        To implement Document accessor, we clean up some code in DOMJITHelpers.
        We create the cpp file for DOMJITHelpers and move some helpers to it.
        And we also implement DOMJIT::checkDOM<DOMInterface> for convenience.
        It returns appropriate CheckDOM patchpoint implementation.

        This patch improves Dromaeo jslib-attr-jquery.html 10% (481.64 v.s. 532.54).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsScopeRoot):
        * dom/Document.idl:
        * domjit/DOMJITAbstractHeapRepository.h:
        * domjit/DOMJITCheckDOM.h: Copied from Source/WebCore/domjit/DOMJITAbstractHeapRepository.h.
        (WebCore::DOMJIT::TypeChecker<Node>::branchIfFail):
        (WebCore::DOMJIT::TypeChecker<Document>::branchIfFail):
        (WebCore::DOMJIT::TypeChecker<Event>::branchIfFail):
        (WebCore::DOMJIT::TypeChecker<Element>::branchIfFail):
        (WebCore::DOMJIT::checkDOM):
        * domjit/DOMJITHelpers.cpp: Copied from Source/WebCore/domjit/DOMJITAbstractHeapRepository.h.
        (WebCore::DOMJIT::loadDocument):
        (WebCore::DOMJIT::loadDocumentElement):
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::toWrapperSlow):
        (WebCore::DOMJIT::loadDocument): Deleted.
        * domjit/JSDocumentDOMJIT.cpp: Added.
        (WebCore::DocumentDocumentElementDOMJIT::checkDOM):
        (WebCore::DocumentDocumentElementDOMJIT::callDOM):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::createCallDOMForOffsetAccess):
        (WebCore::NodeFirstChildDOMJIT::checkDOM):
        (WebCore::NodeLastChildDOMJIT::checkDOM):
        (WebCore::NodeNextSiblingDOMJIT::checkDOM):
        (WebCore::NodePreviousSiblingDOMJIT::checkDOM):
        (WebCore::NodeParentNodeDOMJIT::checkDOM):
        (WebCore::NodeNodeTypeDOMJIT::checkDOM):
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM):
        (WebCore::NodeOwnerDocumentDOMJIT::callDOM):
        (WebCore::toWrapperSlow): Deleted.
        (WebCore::checkNode): Deleted.

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support initial-letter
        https://bugs.webkit.org/show_bug.cgi?id=164150

        Reviewed by Simon Fraser.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeInitialLetter):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-10-28  Simon Fraser  <simon.fraser@apple.com>

        Remove some unused code in RenderLayerCompositor::computeExtent()
        https://bugs.webkit.org/show_bug.cgi?id=163934

        Reviewed by Zalan Bujtas.

        viewportRect was never used.

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

2016-10-28  Sam Weinig  <sam@webkit.org>

        [WebIDL] Update parser and code generators to only access type information through the type property
        https://bugs.webkit.org/show_bug.cgi?id=164141

        Reviewed by Anders Carlsson.

        Update IDLParser structs:
        - domSignature: Rename idlType to type. Specify that type is a domType.
        - domInterface: Remove name and parent. Specify that type and parentType are a domTypes.
        - domFunction: Specify that signature is a domSignature.
        - domAttribute: Remove unused type. Specify that signature is a domSignature.
        - domIterable: Remove idlKeyType and valueKeyType. Specify that keyType and valueType are a domTypes
        - domConstant: Specify that type is a domType.
        - domEnum: Specify that type is a domType.
        - domDictionary: Remove name and parent. Specify that type and parentType are a domTypes.
        - Typedef: Rename idlType to type and specify that it is a domType.

        * bindings/scripts/IDLParser.pm:
        Remove redundant properties and specify type info in structs where possible.

        * bindings/scripts/CodeGenerator.pm:
        (IsSVGTypeNeedingTearOffForType): Renamed to remove ForType suffix.
        (IsSVGTypeWithWritablePropertiesNeedingTearOffForType): Renamed to remove ForType suffix.
        (GetSVGTypeNeedingTearOffForType): Renamed to remove ForType suffix.
        (GetSVGWrappedTypeNeedingTearOffForType): Renamed to remove ForType suffix.

        Update to always access type information through type accessors. Remove use of removed
        properties.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsNullableType): Deleted.
        (StripNullable): Deleted.
        Remove unused functions.

        Update to always access type information through type accessors. Remove use of removed
        properties.

        * bindings/scripts/generate-bindings.pl:
        Update to always access type information through type accessors. Remove use of removed
        properties.

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support bopomofo Ruby
        https://bugs.webkit.org/show_bug.cgi?id=164148

        Reviewed by Simon Fraser.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for -webkit-canvas images
        https://bugs.webkit.org/show_bug.cgi?id=164144

        Reviewed by Simon Fraser.

        * css/CSSValueKeywords.in:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeWebkitCanvas):
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        (WebCore::CSSPropertyParserHelpers::isGeneratedImage):

2016-10-27  Geoffrey Garen  <ggaren@apple.com>

        One file per class for Executable.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=164099

        Reviewed by Saam Barati.

        * ForwardingHeaders/runtime/Executable.h: Removed.
        * ForwardingHeaders/runtime/FunctionExecutable.h: Copied from Source/WebCore/ForwardingHeaders/runtime/Executable.h.
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSMainThreadExecStateInstrumentation.h:

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Clean up gradient parsing
        https://bugs.webkit.org/show_bug.cgi?id=164139

        Reviewed by Dean Jackson.

        * css/CSSGradientValue.cpp:
        (WebCore::positionFromValue):
        (WebCore::CSSGradientValue::computeEndPoint):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):

2016-10-28  Dean Jackson  <dino@apple.com>

        New CSS Parser should use Colors not RGBA32s
        https://bugs.webkit.org/show_bug.cgi?id=164124
        <rdar://problem/29000373>

        Reviewed by Darin Adler.

        The old parser has moved from using RGBA32 values to using
        Colors directly. This was so we could support ExtendedColors
        via the new color() syntax.

        Update the new CSS parser to do the same.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHexColor):
        (WebCore::CSSPropertyParserHelpers::parseColorFunction):
        (WebCore::CSSPropertyParserHelpers::consumeColor):

2016-10-28  Dean Jackson  <dino@apple.com>

        Allow new CSS parser to handle insertRule, etc via parseRule
        https://bugs.webkit.org/show_bug.cgi?id=164122
        <rdar://problem/29000101>

        Reviewed by Darin Adler.

        Call the new CSS parser from CSSParser::parseRule if enabled. This
        allows style added via the CSSOM insertRule to go through
        the parser.

        I tested this across our layout tests that use insertRule. It
        works fine, but does cause some filter tests to fail. This is
        because the new parser does not generate WebKitCSSFilterValues,
        but I think the CSSFunctionValue is good enough. I'll remove
        WebKitCSSFilterValue separately.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseRule): Call CSSParserImpl::parseRule.

2016-10-28  Simon Fraser  <simon.fraser@apple.com>

        Wrong blur radius for filter: drop-shadow()
        https://bugs.webkit.org/show_bug.cgi?id=163667

        Reviewed by Darin Adler.
        
        The "stdDev" parameter to <feDropShadow> and <feGaussianBlur> represents the standard
        deviation (σ) of the Gaussian blur function. CSS filters drop-shadow() and blur() follow
        this with their radius parameter.
        
        However, CSS box-shadow and text-shadow use 2σ to describe the blur radius, since this
        is conveniently close to the number of pixels the effect of the blur extends out.
        
        feDropShadow, which is used by non-accelerated filter: drop-shadow(), was using
        the wrong blur radius because it passed its stdDev directly to ShadowBlur. ShadowBlur
        was written for CSS box-shadow, so expected its input "blur radius" to be twice the
        stdDev.
        
        Tests: css3/filters/drop-shadow-blur-radius.html
               svg/filters/feDropShadow-blur-radius.html

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):

2016-10-28  Youenn Fablet  <youenn@apple.com>

        Expose RTCPeerConnection unprefixed
        https://bugs.webkit.org/show_bug.cgi?id=164060

        Reviewed by Darin Adler.

        Covered by rebased and activated tests.

        * Modules/mediastream/RTCPeerConnection.idl:

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support the marquee properties
        https://bugs.webkit.org/show_bug.cgi?id=164132

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeWebkitMarqueeIncrement):
        (WebCore::consumeWebkitMarqueeRepetition):
        (WebCore::consumeWebkitMarqueeSpeed):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):

2016-10-28  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Miscellaneous bug fixes
        https://bugs.webkit.org/show_bug.cgi?id=164131

        Reviewed by Zalan Bujtas.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPropertyNames.in:
        The prefix was incorrectly dropped from -webkit-column-progression.
        Put it back.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertPositionComponent):
        (WebCore::StyleBuilderConverter::convertObjectPosition):
        Fix object-position parsing so that the position components can
        be ids.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueContent):
        The new parser doesn't make a list for content:none, since none can't be
        a component of a list anyway. Add code to handle this case in the
        apply function.

        * css/parser/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        Put the prefix back on -webkit-column-progression.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        Same.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        Make sure match type is checked, since our code asserts if it isn't.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::validWidthOrHeightKeyword):
        (WebCore::consumeLineGrid):
        (WebCore::CSSPropertyParser::parseSingleValue):
        Add support for the line-grid properties and for -webkit-nbsp-mode.

2016-10-28  Antti Koivisto  <antti@apple.com>

        Always use iOS preload behavior
        https://bugs.webkit.org/show_bug.cgi?id=164127

        Reviewed by Andreas Kling.

        On non-iOS platforms we were delaying issuing lower priority preload (images mostly) until document has body.
        This should be unnecessary as networking layer prioritization should ensure higher priority resources are
        loaded earlier. Testing on iOS has showed that more aggressive behavior is a win.

        This patch switches to iOS behavior on all platforms (and simplified the logic).

        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::preload):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::performPostLoadActions):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::isPreloaded):
        (WebCore::CachedResourceLoader::checkForPendingPreloads): Deleted.
        (WebCore::CachedResourceLoader::requestPreload): Deleted.
        (WebCore::CachedResourceLoader::clearPendingPreloads): Deleted.
        * loader/cache/CachedResourceLoader.h:

2016-10-28  Youenn Fablet  <youenn@apple.com>

        [Fetch] Ensure redirection count is no more than 20 in case of cross origin requests
        https://bugs.webkit.org/show_bug.cgi?id=164117

        Reviewed by Sam Weinig.

        Tests: imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin-worker.html
               imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin.html

        Introducing a ResourceLoaderOptions that defines the maximum redirection count.
        By default, it is set to 20 as per fetch specification.

        This option is used by SubresourceLoader to cancel load if its redirection count is above that maximum.
        DocumentThreadableLoader stopping redirections to make preflight if needed, it now uses the maxRedirectCount loader option to ensure
        that the total number of redirections is 20.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        * loader/ResourceLoaderOptions.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/SubresourceLoader.h:

2016-10-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        generate-bindings-all.pl should recompile supplemented IDL if its supplemental IDL are added or removed
        https://bugs.webkit.org/show_bug.cgi?id=164054

        Reviewed by Michael Catanzaro.

        generate-bindings-all.pl determines which IDL to recompile by
        comparing timestamps of generated files, source IDL and its
        dependencies.  But this is not enough. If a new supplemental IDL
        is added, its supplemented IDL needs to be recompiled even though
        the timestamp of the supplemental IDL is older than the
        generated files.

        * bindings/scripts/generate-bindings-all.pl: Read supplemental
        dependency file both before and after invoking preprocess-idls.pl.
        Recompile IDL files if its supplemental dependencies are added or
        removed.

2016-10-28  Youenn Fablet  <youenn@apple.com>

        PeerMediaDescription does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=164059

        Reviewed by Darin Adler.

        No change of behavior.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        (WebCore::createSourceMap):
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::configurationFromJSON):
        (WebCore::configurationToJSON):
        (WebCore::SDPProcessor::generateCandidateLine):
        (WebCore::SDPProcessor::parseCandidateLine):
        * platform/mediastream/IceCandidate.h:
        * platform/mediastream/MediaEndpointSessionConfiguration.h:
        (WebCore::MediaEndpointSessionConfiguration::mediaDescriptions):
        (WebCore::MediaEndpointSessionConfiguration::addMediaDescription):
        (WebCore::MediaEndpointSessionConfiguration::clone):
        * platform/mediastream/PeerMediaDescription.h:
        (WebCore::PeerMediaDescription::addPayload):
        (WebCore::PeerMediaDescription::addSsrc):
        (WebCore::PeerMediaDescription::clearSsrcs):
        (WebCore::PeerMediaDescription::addIceCandidate):
        (WebCore::PeerMediaDescription::create): Deleted.
        (WebCore::PeerMediaDescription::~PeerMediaDescription): Deleted.
        (WebCore::PeerMediaDescription::type): Deleted.
        (WebCore::PeerMediaDescription::setType): Deleted.
        (WebCore::PeerMediaDescription::port): Deleted.
        (WebCore::PeerMediaDescription::setPort): Deleted.
        (WebCore::PeerMediaDescription::address): Deleted.
        (WebCore::PeerMediaDescription::setAddress): Deleted.
        (WebCore::PeerMediaDescription::mode): Deleted.
        (WebCore::PeerMediaDescription::setMode): Deleted.
        (WebCore::PeerMediaDescription::mid): Deleted.
        (WebCore::PeerMediaDescription::setMid): Deleted.
        (WebCore::PeerMediaDescription::payloads): Deleted.
        (WebCore::PeerMediaDescription::setPayloads): Deleted.
        (WebCore::PeerMediaDescription::rtcpMux): Deleted.
        (WebCore::PeerMediaDescription::setRtcpMux): Deleted.
        (WebCore::PeerMediaDescription::rtcpAddress): Deleted.
        (WebCore::PeerMediaDescription::setRtcpAddress): Deleted.
        (WebCore::PeerMediaDescription::rtcpPort): Deleted.
        (WebCore::PeerMediaDescription::setRtcpPort): Deleted.
        (WebCore::PeerMediaDescription::mediaStreamId): Deleted.
        (WebCore::PeerMediaDescription::setMediaStreamId): Deleted.
        (WebCore::PeerMediaDescription::mediaStreamTrackId): Deleted.
        (WebCore::PeerMediaDescription::setMediaStreamTrackId): Deleted.
        (WebCore::PeerMediaDescription::dtlsSetup): Deleted.
        (WebCore::PeerMediaDescription::setDtlsSetup): Deleted.
        (WebCore::PeerMediaDescription::dtlsFingerprintHashFunction): Deleted.
        (WebCore::PeerMediaDescription::setDtlsFingerprintHashFunction): Deleted.
        (WebCore::PeerMediaDescription::dtlsFingerprint): Deleted.
        (WebCore::PeerMediaDescription::setDtlsFingerprint): Deleted.
        (WebCore::PeerMediaDescription::cname): Deleted.
        (WebCore::PeerMediaDescription::setCname): Deleted.
        (WebCore::PeerMediaDescription::ssrcs): Deleted.
        (WebCore::PeerMediaDescription::iceUfrag): Deleted.
        (WebCore::PeerMediaDescription::setIceUfrag): Deleted.
        (WebCore::PeerMediaDescription::icePassword): Deleted.
        (WebCore::PeerMediaDescription::setIcePassword): Deleted.
        (WebCore::PeerMediaDescription::iceCandidates): Deleted.
        (WebCore::PeerMediaDescription::clone): Deleted.
        (WebCore::PeerMediaDescription::PeerMediaDescription): Deleted.
        * platform/mediastream/mac/MediaEndpointMac.cpp:
        (WebCore::MediaEndpointMac::addRemoteCandidate):
        (WebCore::MediaEndpointMac::OnIceCandidate):
        * platform/mediastream/mac/MediaEndpointMac.h:
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::updateSendConfiguration):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::updateConfigurationMids):

2016-10-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: scrubbing support
        https://bugs.webkit.org/show_bug.cgi?id=163726
        <rdar://problem/27989481>

        Reviewed by Dean Jackson.

        We introduce the ScrubberSupport class which brings support for scrubbing the media
        by interacting with the scrubber in the media controls and correctly reflecting
        the media's current time as set via the media API.

        Tests: media/modern-media-controls/scrubber-support/scrubber-support-click.html
               media/modern-media-controls/scrubber-support/scrubber-support-drag.html
               media/modern-media-controls/scrubber-support/scrubber-support-media-api.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/scrubbing-support.js: Added.
        (ScrubbingSupport.prototype.get control):
        (ScrubbingSupport.prototype.get mediaEvents):
        (ScrubbingSupport.prototype.controlValueWillStartChanging):
        (ScrubbingSupport.prototype.controlValueDidChange):
        (ScrubbingSupport.prototype.controlValueDidStopChanging):
        (ScrubbingSupport.prototype.syncControl):
        (ScrubbingSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-28  Alex Christensen  <achristensen@webkit.org>

        Fix Windows WebGL build after r208022
        https://bugs.webkit.org/show_bug.cgi?id=164091

        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::Extensions3DOpenGLES):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::getExtensions):

2016-10-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Fetch ReadableStream should only clone the second branch
        https://bugs.webkit.org/show_bug.cgi?id=164058

        Reviewed by Darin Adler.

        Covered by rebased tests.

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

2016-10-27  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=164101

        Reviewed by Darin Adler.

        ShCheckVariablesWithinPackingLimits has changed signatures from taking a ShVariableInfo* and length
        to taking a std::vector<sh::ShaderVariable> which requires more information about the shader variables
        than we kept in GraphicsContext3D::SymbolInfo.  I removed the SymbolInfo class because it was redundant
        with ANGLE's sh::ShaderVariable and now unused.

        Covered by existing WebGL tests.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::appendSymbol):
        (WebCore::getStructInfo):
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEShaderSymbol::isSampler): Deleted.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo): Deleted.
        (WebCore::GraphicsContext3D::SymbolInfo::operator==): Deleted.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):
        (WebCore::GraphicsContext3D::precisionsMatch):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        (WebCore::GraphicsContext3D::originalSymbolName):

2016-10-27  Simon Fraser  <simon.fraser@apple.com>

        Remove RenderStyle::isRunningAcceleratedAnimation()
        https://bugs.webkit.org/show_bug.cgi?id=164109

        Reviewed by David Hyatt.

        RenderStyle::isRunningAcceleratedAnimation() was added in r40876 to handle interrupted
        accelerated transitions, and to allow RenderLayer::currentTransform() to know when it
        has to manually get the animated style.
        
        The latter can now use isRunningAcceleratedAnimationOnRenderer(), and interrupting
        accelerated transitions seems to work fine without it, so remove it.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isRunningAcceleratedAnimation): Deleted.
        (WebCore::RenderStyle::setIsRunningAcceleratedAnimation): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

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

        Teach WebGL code about new buffer targets in WebGL2
        https://bugs.webkit.org/show_bug.cgi?id=163924

        Reviewed by Dean Jackson.

        WebGL 2 adds new buffer targets. Instead of completely reimplementing
        the functions again for WebGL 2, we can simply check if we are using
        a new kind of context to conditionally enable support.

        Test: fast/canvas/webgl/webgl2-buffer-targets.html

        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
        (WebCore::WebGLBuffer::setTarget):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::bindBuffer):
        (WebCore::WebGLRenderingContextBase::getBufferParameter):
        (WebCore::WebGLRenderingContextBase::validateBufferDataParameters):
        * html/canvas/WebGLRenderingContextBase.h:

2016-10-27  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Enhance grid-auto-flow parsing to allow dense first.
        https://bugs.webkit.org/show_bug.cgi?id=164110

        Reviewed by Simon Fraser.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGridAutoFlow):

2016-10-27  Simon Fraser  <simon.fraser@apple.com>

        constify the CSSValue arguments to StyleBuilderConverter functions
        https://bugs.webkit.org/show_bug.cgi?id=164106

        Reviewed by Zalan Bujtas.

        Make almost all the CSSValue& arguments const (this makes it clear that they
        are in params, not out params). Only a few that are CSSImageValues are non-const,
        because they fall into a non-const code path.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLengthOrAuto):
        (WebCore::StyleBuilderConverter::convertLengthSizing):
        (WebCore::StyleBuilderConverter::convertLengthMaxSizing):
        (WebCore::StyleBuilderConverter::convertComputedLength):
        (WebCore::StyleBuilderConverter::convertLineWidth):
        (WebCore::StyleBuilderConverter::convertSpacing):
        (WebCore::StyleBuilderConverter::convertToRadiusLength):
        (WebCore::StyleBuilderConverter::convertRadius):
        (WebCore::StyleBuilderConverter::convertObjectPosition):
        (WebCore::StyleBuilderConverter::convertTextDecoration):
        (WebCore::StyleBuilderConverter::convertNumber):
        (WebCore::StyleBuilderConverter::convertNumberOrAuto):
        (WebCore::StyleBuilderConverter::convertWebkitHyphenateLimitLines):
        (WebCore::StyleBuilderConverter::convertTransform):
        (WebCore::StyleBuilderConverter::convertString):
        (WebCore::StyleBuilderConverter::convertStringOrAuto):
        (WebCore::StyleBuilderConverter::convertStringOrNone):
        (WebCore::StyleBuilderConverter::valueToEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextAlign):
        (WebCore::StyleBuilderConverter::convertClipPath):
        (WebCore::StyleBuilderConverter::convertResize):
        (WebCore::StyleBuilderConverter::convertMarqueeRepetition):
        (WebCore::StyleBuilderConverter::convertMarqueeSpeed):
        (WebCore::StyleBuilderConverter::convertQuotes):
        (WebCore::StyleBuilderConverter::convertTextUnderlinePosition):
        (WebCore::StyleBuilderConverter::convertReflection):
        (WebCore::StyleBuilderConverter::convertInitialLetter):
        (WebCore::StyleBuilderConverter::convertTextStrokeWidth):
        (WebCore::StyleBuilderConverter::convertLineBoxContain):
        (WebCore::StyleBuilderConverter::convertTextDecorationSkip):
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints):
        (WebCore::StyleBuilderConverter::convertSnapCoordinatePair):
        (WebCore::StyleBuilderConverter::convertScrollSnapCoordinates):
        (WebCore::StyleBuilderConverter::createGridTrackBreadth):
        (WebCore::StyleBuilderConverter::createGridTrackSize):
        (WebCore::StyleBuilderConverter::createGridTrackList):
        (WebCore::StyleBuilderConverter::createGridPosition):
        (WebCore::StyleBuilderConverter::convertGridTrackSizeList):
        (WebCore::StyleBuilderConverter::convertGridTrackSize):
        (WebCore::StyleBuilderConverter::convertGridPosition):
        (WebCore::StyleBuilderConverter::convertGridAutoFlow):
        (WebCore::StyleBuilderConverter::convertWordSpacing):
        (WebCore::StyleBuilderConverter::convertPerspective):
        (WebCore::StyleBuilderConverter::convertMarqueeIncrement):
        (WebCore::StyleBuilderConverter::convertFilterOperations):
        (WebCore::StyleBuilderConverter::convertFontFeatureSettings):
        (WebCore::StyleBuilderConverter::convertFontVariationSettings):
        (WebCore::StyleBuilderConverter::convertTouchCallout):
        (WebCore::StyleBuilderConverter::convertTapHighlightColor):
        (WebCore::StyleBuilderConverter::convertOverflowScrolling):
        (WebCore::StyleBuilderConverter::convertSVGLength):
        (WebCore::StyleBuilderConverter::convertSVGLengthVector):
        (WebCore::StyleBuilderConverter::convertStrokeDashArray):
        (WebCore::StyleBuilderConverter::convertPaintOrder):
        (WebCore::StyleBuilderConverter::convertOpacity):
        (WebCore::StyleBuilderConverter::convertSVGURIReference):
        (WebCore::StyleBuilderConverter::convertSVGColor):
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):
        (WebCore::StyleBuilderConverter::convertContentAlignmentData):
        (WebCore::StyleBuilderConverter::convertGlyphOrientation):
        (WebCore::StyleBuilderConverter::convertGlyphOrientationOrAuto):
        (WebCore::StyleBuilderConverter::convertLineHeight):
        (WebCore::StyleBuilderConverter::convertFontSynthesis):
        (WebCore::StyleBuilderConverter::convertPageBreakBetween):
        (WebCore::StyleBuilderConverter::convertPageBreakInside):
        (WebCore::StyleBuilderConverter::convertColumnBreakBetween):
        (WebCore::StyleBuilderConverter::convertColumnBreakInside):
        (WebCore::StyleBuilderConverter::convertRegionBreakBetween):
        (WebCore::StyleBuilderConverter::convertRegionBreakInside):
        (WebCore::StyleBuilderConverter::convertHangingPunctuation):

2016-10-27  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for a reference box to -webkit-clip-path
        https://bugs.webkit.org/show_bug.cgi?id=164107

        Reviewed by Simon Fraser.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShape):
        (WebCore::consumeBasicShapeOrBox):
        (WebCore::consumeWebkitClipPath):

2016-10-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOM] Add JSEventType
        https://bugs.webkit.org/show_bug.cgi?id=164096

        Reviewed by Darin Adler.

        Event is inherited by many Event classes. But, Event's accessors and interfaces are
        frequently called. For example, event.{type, target, srcElement} for accessors. And
        event.stopPropagation() and event.preventDefault() functions.

        However, since the user-visible event instance is typically the instance of the subclass,
        jsDynamicCast<JSEvent*>() walks several classes before it succeeds. It is costly.

        In this patch, we add a new WebCore JSType JSEventType for JSEvent and add a new
        function jsEventCast. That supports a super fast cast operation. And it paves the way
        for implementing DOM accessors of Event in DOMJIT.

        No behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/JSEventCustom.h: Added.
        (WebCore::jsEventCast):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSTypeForNode):
        (GenerateHeader):
        (GetCastingHelperForThisObject):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::createStructure):
        * dom/Event.idl:
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::branchIfEvent):
        (WebCore::DOMJIT::branchIfNotEvent):

2016-10-27  Simon Fraser  <simon.fraser@apple.com>

        Rename StyleRareNonInheritedData::opacity to m_opacity
        https://bugs.webkit.org/show_bug.cgi?id=164104

        Reviewed by Dave Hyatt.

        Pure rename.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::opacity):
        (WebCore::RenderStyle::setOpacity):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::StyleRareNonInheritedData::hasOpacity):

2016-10-27  Simon Fraser  <simon.fraser@apple.com>

        If an animation's keyframes affect stacking context properties, create stacking context while the animation is running
        https://bugs.webkit.org/show_bug.cgi?id=164094

        Reviewed by Dean Jackson.

        The CSS animations spec <https://drafts.csswg.org/css-animations-1/> now makes it
        clear that a keyframe animation animating properties which can affect stacking context
        should establish stacking context while it's running, or filling-forwards. This is part
        of the "the user agent must act as if the will-change property...includes all the properties
        animated by the animation" clause.

        Implement by having CompositeAnimation::animate() track whether running animations should
        create stacking context, replacing existing code in AnimationController::updateAnimations()
        which only looked at opacity and transform. Transitions are also checked to see if they need
        to trigger stacking context.

        This allows for the removal of a 0.9999 hack when blending opacity.

        Tests: animations/stacking-context-fill-forwards.html
               animations/stacking-context-not-fill-forwards.html
               animations/stacking-context-unchanged-while-running.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/CSSPropertyAnimation.cpp:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::computeStackingContextImpact):
        (WebCore::KeyframeAnimation::animate):
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform):
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::propertyCreatesStackingContext):
        (WebCore::propertyCreatesStackingContext): Deleted.
        * rendering/style/WillChangeData.h:

2016-10-27  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move code generators off of domSignature::type and onto domSignature::idlType
        https://bugs.webkit.org/show_bug.cgi?id=164089

        Reviewed by Alex Christensen.

        Make more IDLParser structures contain domTypes for type descriptions, rather than strings:
        - domInterface gains type and parentType.
        - domConstant gains type.
        - domEnum gains type.
        - domDictionary gains type and parentType.

        With these structs now containing domTypes, we can update the CodeGenerators to operate on
        domTypes exclusively, rather than types as strings. This allows us to consistently have access
        to information such as subtypes and nullability.

        * bindings/scripts/CodeGenerator.pm:
        Update helpers to operate of domTypes. The one exception is SkipIncludeHeader, which
        still operates on a type name, since it is called late in code generation on the textual
        form of type names in the include list. 

        * bindings/scripts/CodeGeneratorJS.pm:
        Update to use domTypes.

        * bindings/scripts/IDLParser.pm:
        - Add domType accessors to domInterface, domConstant, domEnum, and domDictionary
          and populate them.
        - Remove type accessors from domSignature (domType is accessible from idlType).
        - Remove special cases for sequence and FrozenArray, now that they are always
          accessed as domTypes.

        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:
        Fix interfaces declaring getSVGDocument() to correctly have it return
        a Document, rather than an SVGDocument, which does exist anymore. To
        make the bindings happy, also change the signature of HTMLFrameOwnerElement::getSVGDocument
        to return a Document.

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results to remove some redundant headers (Already included JSFoo.h, so no need for Foo.h).

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

        [macOS] [WebGL2] Temporarily upgrade WebGL 2's internal OpenGL context from version 2.1 to 3.2
        https://bugs.webkit.org/show_bug.cgi?id=164091

        Reviewed by Dean Jackson.

        In order to test WebGL2 correctly, I had to upgrade the macOS's OpenGL 
        context to a 3.2-compatible context to make sure the new symbols are
        accepted. Eventually, this 3.2-compatible context will have to be
        reverted and replaced with an ANGLE context. The current 3.2-compatible
        context is just for testing.

        Test: fast/canvas/webgl/webgl2-context-creation.html

        * html/canvas/WebGLBuffer.cpp: Use "nullptr" instead of 0.
        (WebCore::WebGLBuffer::associateBufferData):
        * html/canvas/WebGLRenderingContextBase.cpp: Use make_unique() instead
        of the unique_ptr constructor.
        (WebCore::WebGLRenderingContextBase::create):
        * platform/graphics/GraphicsContext3D.h: GraphicsContext should know
        if it is using a 3.2-compatible context because some parts of 2.1 are
        removed in these contexts, and replaced with new things which aren't
        in 2.1.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Use kCGLPFAOpenGLProfile to specify an
        OpenGL 3.2 context.
        (WebCore::GraphicsContext3D::GraphicsContext3D): GL_CLAMP is deprecated
        in OpenGL 3.2. Fortunately, GL_CLAMP_TO_EDGE isn't deprecated and does
        exactly what we want. In OpenGL3.2, point sprites are always enabled,
        so there's no need to enable them in those contexts.
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: In OpenGL 3.2,
        glGetString() no longer accepts GL_EXTENSIONS. Instead, glGetStringi()
        is used instead. Unfortunately, glGetString() is not available in
        OpenGL 2.1 contexts, so we need to use one or the other based on the
        version of the context we're using.
        (WebCore::Extensions3DOpenGL::Extensions3DOpenGL):
        (WebCore::Extensions3DOpenGL::getExtensions):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        Instead of modifying getExtensions() to use glGetStringi(), it makes
        better sense to modify this function because getExtensions() returns
        a string. Building up a string just to split it up again is silly, so
        modifying this function instead makes more sense.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getIntegerv): GL_MAX_VARYING_FLOATS is
        removed in OpenGL 3.2 contexts. However, it is replaced by
        GL_MAX_VARYING_COMPONENTS, though this is deprecated but not removed.
        In the more recent OpenGL context versions, GL_MAX_VARYING_VECTORS is
        recommended instead, but that isn't available in OpenGL 3.2.
        (WebCore::GraphicsContext3D::getExtensions):

2016-10-27  Megan Gardner  <megan_gardner@apple.com>

        Add support for wide gamut for ShareableBitmap for image popovers
        https://bugs.webkit.org/show_bug.cgi?id=164001

        Reviewed by Simon Fraser.

        Add a function to return a CGColorSpaceRef for extended sRGB.

        This is currently untestable, so no tests added.

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

2016-10-25  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Create a RAII Helper Class for the Render Target
        https://bugs.webkit.org/show_bug.cgi?id=164005

        Reviewed by Alex Christensen.

        Tested by existing SVG, image, and Canvas layout tests.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::fill): Use new convenience helper class.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::didBeginDraw):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate): Add an
        assertion that we are in a valid state when cleaning up the graphics context.
        (WebCore::GraphicsContextPlatformPrivate::clip): Clipping can only happen in a Draw operation.
        Open a new BeginDraw if asked to Clip. The Begin must stay active when this method returns,
        as the Clip layer is only valid during a Draw operation.
        (WebCore::GraphicsContextPlatformPrivate::beginDraw): Added.
        (WebCore::GraphicsContextPlatformPrivate::endDraw): Added.
        (WebCore::GraphicsContext::beginDrawIfNeeded): Added.
        (WebCore::GraphicsContext::endDraw): Added.
        (WebCore::GraphicsContext::drawWithoutShadow): Revise to use new RenderTargetHelper class.
        (WebCore::GraphicsContext::drawWithShadow): Ditto.
        (WebCore::GraphicsContext::platformFillRoundedRect): Ditto.
        (WebCore::GraphicsContext::fillRectWithRoundedHole): Ditto.
        (WebCore::GraphicsContext::setDidBeginDraw): Deleted.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        (WebCore::GraphicsContextPlatformPrivate::didBeginDraw): Revise to use count instead of
        a separate boolean.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData): Revise to use new RenderTargetHelper class.
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::drawNativeImage): Ditto.
        * platform/graphics/win/RenderTargetHelper.h: Added.
        (WebCore::RenderTargetHelper::RenderTargetHelper):
        (WebCore::RenderTargetHelper::~RenderTargetHelper):
        (WebCore::RenderTargetHelper::endDraw):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage): Revise to use new RenderTargetHelper class.

2016-10-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support "insertFromDrop" and "deleteByDrag" for the InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163948
        <rdar://problem/28921433>

        Reviewed by Darin Adler.

        Implements support for "insertFromDrop" and "deleteByDrag" inputTypes. These are fired when dragging and
        dropping text in editable areas. To do this, we introduce EditActionInsertFromDrop and EditActionDeleteByDrag
        (renamed from EditActionDrag, which is no longer necessary after this patch).

        When moving text from an editable element to another, we will use a DeleteSelectionCommand to delete the text
        from the source element and a ReplaceSelectionCommand to insert the text into the destination element. This
        means that we currently fire two input events on the source and destination elements (i.e. given by the start
        and end selections) after both child editing commands of the MoveSelectionCommand have been applied. Instead, we
        need to fire events in this order:

        1. beforeinput ("deleteByDrag") on the source
        2. Update DOM
        3. input ("deleteByDrag") on the source

        4. beforeinput ("insertFromDrop") on the destination
        5. Update DOM
        6. input ("insertFromDrop") on the destination

        To accomplish this, we allow an edit command to defer dispatching input events to its child commands via
        CompositeEditCommand::shouldDispatchInputEvents, which the MoveSelectionCommand overrides. Additionally,
        when applying the MoveSelectionCommand, we now apply() the child DeleteSelectionCommand and
        ReplaceSelectionCommand instead of using doApply(). This allows these children to separately dispatch input
        events, and also handle preventDefault() separately.

        Tests: fast/events/before-input-events-prevent-drag-and-drop.html
               fast/events/input-events-drag-and-drop.html
               fast/events/input-events-insert-by-drop.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::composition):

        Searches for the top-level command and returns its composition. Also ASSERTs that the m_command of all child
        commands along the way is null. In places where we used to ASSERT that command.composition() should be null, we
        now perform the assertion here instead.

        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::shouldDispatchInputEvents):

        This is true by default, which means that if apply() is called for a composite edit command that does not
        override this to return false, it will try to dispatch input events. In most cases, the parent command will call
        on the child command to doApply(), bypassing this check.

        (WebCore::CompositeEditCommand::composition): Deleted.
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        (WebCore::EditCommand::isEditingTextAreaOrTextInput):
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        (WebCore::EditCommand::setParent):
        * editing/Editor.cpp:
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::appliedEditing):

        After applying editing, only adjust the current selection and notify clients of selection change if the applied
        command was a top-level command; otherwise, these actions should wait until all child commands of the top-level
        command have been applied. In particular, we should not register the applied command as an undo step.

        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        (WebCore::MoveSelectionCommand::editingAction):
        * editing/MoveSelectionCommand.h:
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

        For the cases where we're not deleting text from the drag source (i.e. we're just applying a
        ReplaceSelectionCommand) pass in EditActionInsertFromDrop as the EditAction when creating the command.

2016-10-27  Per Arne Vollan  <pvollan@apple.com>

        [Win][Direct2D] Implement GraphicsContext::releaseWindowsContext.
        https://bugs.webkit.org/show_bug.cgi?id=163988

        Reviewed by Brent Fulgham.

        This method is needed to draw native controls.

        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext):

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Worker should recover if Inspector is closed and never sent Worker.initialized command
        https://bugs.webkit.org/show_bug.cgi?id=164073

        Reviewed by Brian Burg.

        Test: inspector/worker/worker-recover-if-inspector-close.html

        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::disconnectFromWorkerInspectorController):
        Ensure we stop the debugger only task loop if needed when the last debugger
        message comes in.

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include ConsoleAgent in Workers - real console.log support
        https://bugs.webkit.org/show_bug.cgi?id=163844
        <rdar://problem/28903328>

        Reviewed by Brian Burg.

        Test: inspector/worker/console-basic.html

        This introduces a real ConsoleAgent in the Worker InspectorController.
        We no longer need to pass partial ConsoleMessage objects to be logged
        through the Page, we can just send the full ConsoleMessages to a
        frontend once it connects to the Worker.

        In order to guarantee that the Worker InspectorController is properly
        all Workers will start paused if there is an Inspector attached to
        the Page. The frontend _must_ call the new Worker.initialized method
        after sending its setup commands to the Worker. This ensures we get
        handle all initialization commands (like Agent.enable(), and
        setting state like breakpoints) before any script executes in the
        Worker. This mirrors the Inspector.initialized method that does the
        same thing for JSContext auto-attach of the Main target.

        In the backend, the wait until initialized state is just running
        the WorkerThread's RunLoop in a special debugger mode to only process
        debugger commands until we are ready. This will effectively be
        the same as pausing so it is generalized into WorkerThread.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        New files.

        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::initialized):
        (WebCore::InspectorWorkerAgent::shouldWaitForDebuggerOnStart):
        * inspector/InspectorWorkerAgent.h:
        Add the new initialized method. This just uses the proxy to send
        a message to be handled on the Worker Thread and unpause.

        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        (WebCore::WorkerConsoleAgent::addInspectedNode):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Add a ConsoleAgent to WorkerInspectorController.

        * workers/WorkerInspectorProxy.h:
        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::workerStartMode):
        (WebCore::WorkerInspectorProxy::resumeWorkerIfPaused):
        (WebCore::WorkerInspectorProxy::connectToWorkerInspector):
        (WebCore::WorkerInspectorProxy::disconnectFromWorkerInspector):
        (WebCore::WorkerInspectorProxy::sendMessageToWorkerInspector):
        Use the debugger mode when sending messages to the WorkerThread.

        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject): Deleted.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addConsoleMessage):
        (WebCore::WorkerGlobalScope::addMessage):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        Remove legacy partial console support.

        * workers/WorkerRunLoop.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::debuggerMode):
        * workers/WorkerThread.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::startRunningDebuggerTasks):
        (WebCore::WorkerThread::stopRunningDebuggerTasks):
        General code for spinning the WorkerThread and only processing debugger
        (Inspector) commands. Use this when starting the thread to ensure the
        frontend initializes the Worker's Agents before any JavaScript executes.

        * page/PageConsoleClient.cpp:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::count):
        (WebCore::WorkerConsoleClient::time):
        (WebCore::WorkerConsoleClient::timeEnd):
        * inspector/InspectorConsoleInstrumentation.h: Removed.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStartImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStart):
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::takeHeapSnapshot):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        Implement a few more basic console APIs that required ConsoleAgent.

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
        https://bugs.webkit.org/show_bug.cgi?id=163835
        <rdar://problem/28901465>

        Reviewed by Brian Burg.

        Tests: inspector/unit-tests/target-manager.html
               inspector/worker/runtime-basic.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        New file.

        * inspector/InspectorWebAgentBase.h:
        (WebCore::WorkerAgentContext::WorkerAgentContext):
        New agent context creation struct for Workers.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Create a RuntimeAgent for Workers.

        * inspector/WorkerRuntimeAgent.cpp: Added.
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        * inspector/WorkerRuntimeAgent.h: Added.
        Workers currently only ever have a single execution context.

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Introduce Page WorkerAgent and Worker InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=163817
        <rdar://problem/28899063>

        Reviewed by Brian Burg.

        Test: inspector/worker/worker-create-and-terminate.html

        From the perspective of an Inspector frontend, Workers are
        like a special JavaScript context, separate from the page, that
        may have its own set of Agents. This patch adds the necessary
        backend infrastructure to provide WorkerGlobalObject with an
        InspectorController and the means to communicate with a frontend
        through a Page's WorkerAgent.

        Pages now get a WorkerAgent. This informs the frontend about
        created and terminated Workers. It also provides a communication
        channel to dispatch and return inspector protocol messages to
        each of the Workers. The Page side always interacts with the
        WorkerInspectorProxy on the main thread. The Page's Worker Agent
        can sends and receives messages to WorkerInspectorControllers.

        WorkerGlobalScopes now get a WorkerInspectorController which
        will eventually contain its own set of agents. There are no
        agents yet, but they will be added individually in follow-up
        patches. The Worker side always interacts with the
        WorkerGlobalScope on the worker thread. WorkerInspectorController
        dispatches messages on its agents.

        All communication with Worker agents goes through Worker.sendMessageToWorker,
        which tunnels the command request to the Worker's InspectorController
        and agents. At the protocol level, worker agent command responses and
        worker agent events are sent as events through Worker.dispatchMessageFromWorker.
        On the frontend, the message dispatcher code will pair up replies with
        their commands, and no-reply messages as events, like normal. So calling
        worker agent methods in the frontend will be no different from the
        existing callback/promise-based ways.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new files.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::initScript):
        * bindings/js/WorkerScriptController.h:
        Some cleanup.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorWorkerAgent):
        (WebCore::InstrumentingAgents::setInspectorWorkerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::workerStartedImpl):
        (WebCore::InspectorInstrumentation::workerTerminatedImpl):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::workerStarted):
        (WebCore::InspectorInstrumentation::workerTerminated):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        Give the Page a WorkerAgent and Instrumentation methods for
        Worker creation and termination.

        * inspector/InspectorWorkerAgent.h: Added.
        * inspector/InspectorWorkerAgent.cpp: Added.
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::workerStarted):
        (WebCore::InspectorWorkerAgent::workerTerminated):
        (WebCore::InspectorWorkerAgent::connectToAllWorkerInspectorProxiesForPage):
        (WebCore::InspectorWorkerAgent::disconnectFromAllWorkerInspectorProxies):
        (WebCore::InspectorWorkerAgent::connectToWorkerInspectorProxy):
        (WebCore::InspectorWorkerAgent::disconnectFromWorkerInspectorProxy):
        Handle connecting to Workers. This performs the "connectFrontend"
        and "disconnectFrontend" dance with each Worker's InspectorController.
        We only connect to workers when the Worker domain is enabled.

        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        (WebCore::InspectorWorkerAgent::sendMessageFromWorkerToFrontend):
        Proxying messages to individual messages happens through the
        WorkerInspectorProxy. That takes care of passing messages
        across threads for us.

        * workers/WorkerInspectorProxy.cpp: Added.
        (WebCore::WorkerInspectorProxy::allWorkerInspectorProxies):
        (WebCore::WorkerInspectorProxy::WorkerInspectorProxy):
        (WebCore::WorkerInspectorProxy::~WorkerInspectorProxy):
        (WebCore::WorkerInspectorProxy::workerStarted):
        (WebCore::WorkerInspectorProxy::workerTerminated):
        (WebCore::WorkerInspectorProxy::connectToWorkerInspector):
        (WebCore::WorkerInspectorProxy::disconnectFromWorkerInspector):
        (WebCore::WorkerInspectorProxy::sendMessageToWorkerInspector):
        (WebCore::WorkerInspectorProxy::sendMessageFromWorkerToFrontend):
        * workers/WorkerInspectorProxy.h: Added.
        (WebCore::WorkerInspectorProxy::PageChannel::~PageChannel):
        (WebCore::WorkerInspectorProxy::url):
        (WebCore::WorkerInspectorProxy::identifier):
        (WebCore::WorkerInspectorProxy::scriptExecutionContext):
        The WorkerInspectorProxy simplifies the cross thread communication
        between the Page Inspector and Worker Inspector. It also provides
        a clean interface between the two sides.

        * inspector/WorkerToPageFrontendChannel.h: Added.
        * inspector/WorkerInspectorController.h: Added.
        * inspector/WorkerInspectorController.cpp: Added.
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::workerTerminating):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::dispatchMessageFromFrontend):
        (WebCore::WorkerInspectorController::functionCallHandler):
        (WebCore::WorkerInspectorController::evaluateHandler):
        (WebCore::WorkerInspectorController::vm):
        A basic InspectorController for a WorkerGlobalScope.
        No agents yet, they will come soon.

        * inspector/WorkerScriptDebugServer.h:
        * inspector/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::attachDebugger):
        (WebCore::WorkerScriptDebugServer::detachDebugger):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::WorkerScriptDebugServer::reportException):
        (WebCore::WorkerScriptDebugServer::interruptAndRunTask):
        A basic WorkerScriptDebug server for a WorkerGlobalScope.
        Not really used until we implement DebuggerAgent, but needed for InspectorEnvironment.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::inspectorController):
        Give the WorkerGlobalScope an InspectorController.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        Ensure the Worker InspectorController is immediately on
        the WorkerThread when it is about to be closed.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyedInternal):
        (WebCore::WorkerMessagingProxy::terminateWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        Call into the WorkerInspectorProxy for any inspector related logic,
        such as creation, termination, and messages received from the Worker.

2016-10-27  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Implement CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=164075

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add CSSCustomPropertyValue.cpp to the project.

        * css/CSSCustomPropertyValue.cpp: Added.
        (WebCore::CSSCustomPropertyValue::checkVariablesForCycles):
        (WebCore::CSSCustomPropertyValue::resolveVariableReferences):
        * css/CSSCustomPropertyValue.h:
        These functions abstract the old and new implementations of CSS
        variables so that the callers don't have to worry about it.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        Make sure CSSVariableReferenceValue and CSSPendingSubstitutionValue
        have equals implemented.

        (WebCore::CSSValue::isInvalidCustomPropertyValue): Deleted.
        This code was dead and never called.

        * css/CSSValue.h:
        (WebCore::CSSValue::isCustomPropertyValue):
        (WebCore::CSSValue::hasVariableReferences):
        Add a helper function for asking if a CSSValue has variable references.
        This abstracts the old and new implementations so that callers can
        ask if the value has variables without caring which implementation is
        being used.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::checkVariablesForCycles):
        * css/CSSValueList.h:
        In order to abstract the old and new variables implementations, custom
        properties now store CSSCustomPropertyValue as their values instead of
        raw values. The old implementation needs to be patched to deal with this
        wrapper being present now.

        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCycles):
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange):
        (WebCore::CSSVariableData::resolveVariableFallback):
        (WebCore::CSSVariableData::resolveVariableReference):
        (WebCore::CSSVariableData::resolveVariableReferences):
        (WebCore::CSSVariableData::resolveTokenRange):
        * css/CSSVariableData.h:
        Implementation of cycle checking and variable resolution. The logic of
        this implementation is the same as the old. It walks CSSParserTokens
        instead of the old CSSParser structures.

        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::customCSSText):
        Add support for serialization caching, just like the old implementation
        had in CSSVariableDependentValue.

        (WebCore::CSSVariableReferenceValue::checkVariablesForCycles):
        * css/CSSVariableReferenceValue.h:
        Add cycle checking and variable resolution helper functions.

        * css/CSSVariableValue.cpp:
        (WebCore::CSSVariableValue::buildParserValueListSubstitutingVariables):
        Patched to account for the change in storage of custom properties to
        have custom property value wrappers.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::borderSpacingValue):
        (WebCore::StyleProperties::getLayeredShorthandValue):
        (WebCore::StyleProperties::getShorthandValue):
        (WebCore::StyleProperties::getCommonValue):
        (WebCore::StyleProperties::getPropertyCSSValue):
        (WebCore::StyleProperties::asText):
        Clean up the resolution of pending substitution values. Instead of hacking
        it into every possible StyleShorthandProperty crawling function, obtain
        the shorthand for the property up front, access the first longhand, and
        if we see a pending substitution value, perform the substitution.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::resolvedVariableValue):
        * css/StyleResolver.h:
        Add support for the new implementation in all the same places as the old.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        (WebCore::CSSParser::parseValueWithVariableReferences):
        (WebCore::CSSParser::parseVariableDependentValue): Deleted.
        * css/parser/CSSParser.h:
        Rename parseVariableDependentValue to parseValueWithVariableReferences,
        since it is operating on three distinct value types now. Turn on new
        parser support for parseInlineStyleDeclaration.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::filterProperties):
        (WebCore::CSSParserImpl::parseVariableValue): Deleted.
        (WebCore::CSSParserImpl::parseCustomPropertySet): Deleted.
        * css/parser/CSSParserImpl.h:
        Remove parser functions that aren't relevant to our implementation
        of CSS variables.

        * css/parser/CSSVariableParser.cpp:
        (WebCore::classifyVariableRange):
        Add support for the CSS4 'revert' keyword to the new variable parser.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties):
        Modified to store CSSCustomPropertyValues as the values always now and
        to use the method abstractions on CSSCustomPropertyValue to resolve
        cycles and perform substitutions.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCustomPropertyValue):
        (WebCore::RenderStyle::getCustomPropertyValue):
        * rendering/style/StyleCustomPropertyData.h:
        (WebCore::StyleCustomPropertyData::operator==):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::getCustomPropertyValue):
        Tighten up the map to store CSSCustomPropertyValue instead of just
        CSSValue.

2016-10-27  Zalan Bujtas  <zalan@apple.com>

        RenderMultiColumnFlowThread::processPossibleSpannerDescendant should take RenderObject& instead of RenderObject*
        https://bugs.webkit.org/show_bug.cgi?id=164072

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::findSetRendering):
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        (WebCore::RenderMultiColumnFlowThread::findSetRendering): Deleted.
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::precedesRenderer):
        (WebCore::RenderMultiColumnSet::containsRendererInFlowThread):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):

2016-10-27  Brent Fulgham  <bfulgham@apple.com>

        Prevent hit tests from being performed on an invalid render tree
        https://bugs.webkit.org/show_bug.cgi?id=163877
        <rdar://problem/28675761>

        Reviewed by Simon Fraser.

        Changeset r200971 added code to ensure that layout is up-to-date before hit testing, but did
        so only for the main frame. It was still possible to enter cross-frame hit testing with a
        subframe needing style recalc. In that situation, the subframe's updateLayout() would get
        called, which could trigger a compositing change that marked the parent frame as needing style
        recalc. A subsequent layout on the parent frame (for example by hit testing traversing into
        a second subframe) could then mutate the parent frame's layer tree while hit testing was
        traversing it.
        
        This patch modifies the hit test logic to ensure that a recursive layout is performed so that
        we always perform hit tests on a clean set of frames. It also adds some assertions to warn
        us if we encounter this invalid state.

        Tested by fast/layers/prevent-hit-test-during-layout.html.

        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc): Assert that we are not hit testing
        during style recalculation.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint): Ensure that we have a clean render tree
        when hit testing.
        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsLayout): Assert that we are not in the process of hit testing
        when we schedule a layout.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest): Mark RenderView as in an active hit test.
        * rendering/RenderView.h:

2016-10-27  Zan Dobersek  <zdobersek@igalia.com>

        BufferSource should behave as an union
        https://bugs.webkit.org/show_bug.cgi?id=164056

        Reviewed by Chris Dumez.

        WebIDL typedefs BufferSource as (ArrayBufferView or ArrayBuffer).
        To follow that definition, IDLBufferSource is now type-aliased
        to IDLUnion<IDLInterface<ArrayBufferView>, IDLInterface<ArrayBuffer>>.

        Converter<IDLBufferSource> template specialization can now be
        removed since the default specialization for IDLUnion will be
        used.

        C++ implementations still work through a BufferSource object.
        That class now has an implicit constructor that consumes the
        Variant object. The data() and length() methods on the class
        now iterate the variant to find an existing object that can
        provide a pointer to the data or the length of it.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBuffer):
        * bindings/generic/IDLTypes.h:
        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::BufferSource):
        (WebCore::BufferSource::data):
        (WebCore::BufferSource::length):
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLBufferSource>::convert): Deleted.

2016-10-27  Chris Dumez  <cdumez@apple.com>

        Merge Element::ShadowRootMode and ShadowRoot::Mode enumerations
        https://bugs.webkit.org/show_bug.cgi?id=164063

        Reviewed by Sam Weinig.

        Merge Element::ShadowRootMode and ShadowRoot::Mode enumerations now
        that we support having IDL string enumerations in their own IDL file.

        No new tests, no Web-exposed behavior change.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * dom/CustomElementRegistry.cpp:
        (WebCore::enqueueUpgradeInShadowIncludingTreeOrder):
        * dom/Element.cpp:
        (WebCore::Element::bindingsOffsetParent):
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::attachShadow):
        (WebCore::Element::shadowRootForBindings):
        (WebCore::Element::userAgentShadowRoot):
        (WebCore::Element::ensureUserAgentShadowRoot):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::parserContextForElement):
        * dom/Node.cpp:
        (WebCore::Node::isUnclosedNode):
        (WebCore::Node::assignedSlotForBindings):
        (WebCore::Node::isInUserAgentShadowTree):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        * dom/ShadowRoot.idl:
        * dom/ShadowRootMode.h: Added.
        * dom/ShadowRootMode.idl: Copied from Source/WebCore/dom/ShadowRoot.idl.
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::didChangeSlot):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::shadowRootType):
        * rendering/HitTestResult.cpp:
        (WebCore::moveOutOfUserAgentShadowTree):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionPseudoStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::rendererForScrollbar):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::shouldUseSharedUserAgentShadowTreeStyleResolver):
        (WebCore::Style::Scope::didChangeStyleSheetEnvironment):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingUseElement):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRootType):

2016-10-27  Chris Dumez  <cdumez@apple.com>

        Element parameter to CanvasRenderingContext2D.drawFocusIfNeeded() should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=164062

        Reviewed by Darin Adler.

        Element parameter to CanvasRenderingContext2D.drawFocusIfNeeded() should not be nullable:
        - https://html.spec.whatwg.org/#canvasuserinterface

        Firefox and Chrome agree with the specification.

        Test: fast/canvas/draw-focus-if-needed-null-element.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeeded):
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2016-10-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT][CSSJIT] Share code with DOMJIT
        https://bugs.webkit.org/show_bug.cgi?id=164006

        Reviewed by Mark Lam.

        Move CSSJIT's getDocument function to DOMJIT and share it with DOMJIT.
        And rename it to "loadDocument", it is closer name to the JSC's convention.

        No behavior change.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsRoot):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsScopeRoot):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsTarget):
        (WebCore::SelectorCompiler::getDocument): Deleted.
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::loadDocument):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeOwnerDocumentDOMJIT::callDOM):

2016-10-27  Youenn Fablet  <youenn@apple.com>

        REGRESSION(r207753-207755): ASSERTION FAILED: m_parsedStyleSheetCache->isInMemoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=163905

        Reviewed by Antti Koivisto.

        Covered by existing tests and http/tests/security/cached-cross-origin-shared-css-stylesheet.html

        Small refactoring to do more member fields initialization in StyleSheetContents header.
        Refactored StyleSheetContents::m_isInMemoryCache to be a counter instead of a boolean.
        This allows StyleSheetContents to be linked to several CachedCSSStyleSheets.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        (WebCore::StyleSheetContents::addedToMemoryCache):
        (WebCore::StyleSheetContents::removedFromMemoryCache):
        * css/StyleSheetContents.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::setBodyDataFrom): Making reuse of saveParsedStyleSheet to handle update of StyleSheetContents cache count.

2016-10-27  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed. Build fix for gcc.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::maxTimeSeekable):

2016-10-27  Youenn Fablet  <youenn@apple.com>

        MediaPayload does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=164015

        Reviewed by Eric Carlson.

        No change of behavior.
        Making MediaPayload a struct and no-longer ref-counted.
        Small performance improvements in MediaEndpointOwr.

        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::configurationFromJSON):
        (WebCore::configurationToJSON):
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/MediaPayload.h:
        (WebCore::MediaPayload::addParameter):
        (WebCore::MediaPayload::create): Deleted.
        (WebCore::MediaPayload::~MediaPayload): Deleted.
        (WebCore::MediaPayload::type): Deleted.
        (WebCore::MediaPayload::setType): Deleted.
        (WebCore::MediaPayload::encodingName): Deleted.
        (WebCore::MediaPayload::setEncodingName): Deleted.
        (WebCore::MediaPayload::clockRate): Deleted.
        (WebCore::MediaPayload::setClockRate): Deleted.
        (WebCore::MediaPayload::channels): Deleted.
        (WebCore::MediaPayload::setChannels): Deleted.
        (WebCore::MediaPayload::ccmfir): Deleted.
        (WebCore::MediaPayload::setCcmfir): Deleted.
        (WebCore::MediaPayload::nackpli): Deleted.
        (WebCore::MediaPayload::setNackpli): Deleted.
        (WebCore::MediaPayload::nack): Deleted.
        (WebCore::MediaPayload::setNack): Deleted.
        (WebCore::MediaPayload::parameters): Deleted.
        (WebCore::MediaPayload::clone): Deleted.
        (WebCore::MediaPayload::MediaPayload): Deleted.
        * platform/mediastream/PeerMediaDescription.h:
        (WebCore::PeerMediaDescription::payloads):
        (WebCore::PeerMediaDescription::addPayload):
        (WebCore::PeerMediaDescription::setPayloads):
        (WebCore::PeerMediaDescription::clone):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::getDefaultAudioPayloads):
        (WebCore::MediaEndpointOwr::getDefaultVideoPayloads):
        (WebCore::MediaEndpointOwr::filterPayloads):
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::getDefaultAudioPayloads):
        (WebCore::MockMediaEndpoint::getDefaultVideoPayloads):
        (WebCore::MockMediaEndpoint::filterPayloads):

2016-10-26  Dan Bernstein  <mitz@apple.com>

        Improved the last build fix.

        Darin pointed out I could have kept the function inline and just removed the WEBCORE_EXPORT.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::document): Deleted.
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::document):

2016-10-26  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Add support for having string enumerations in their own IDL file
        https://bugs.webkit.org/show_bug.cgi?id=164025

        Reviewed by Darin Adler.

        Add support for having string enumerations in their own IDL file to facilitate
        sharing them. Use this new support to implement IDBTransactionMode enumeration
        for IndexedDB:
        - https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::startVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::isVersionChange):
        (WebCore::IDBTransaction::isReadOnly):
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBTransactionMode.h: Added.
        * Modules/indexeddb/IDBTransactionMode.idl: Copied from Source/WebCore/Modules/indexeddb/IDBTransaction.idl.
        * Modules/indexeddb/IndexedDB.h:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::MemoryBackingStoreTransaction):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreRenamed):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::indexRenamed):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::isVersionChange):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::isWriting):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (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::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRange):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::revertGeneratedKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::begin):
        * Modules/indexeddb/server/SQLiteIDBTransaction.h:
        (WebCore::IDBServer::SQLiteIDBTransaction::mode):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::enqueueTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::takeNextRunnableTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::originalDatabaseInfo):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::isVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::isReadOnly):
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::clientTransaction):
        (WebCore::IDBTransactionInfo::versionChange):
        (WebCore::IDBTransactionInfo::loggingString):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::mode):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (IsEnumType):
        (GetEnumByName):
        (IsExternalEnumType):
        (ValidEnumValues):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumeration):
        (AddToImplIncludesForIDLType):
        (GetEnumerationClassName):
        (GenerateEnumerationHeader):
        (GenerateEnumerationImplementation):
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationsImplementationContent):
        (GenerateEnumerationHeaderContent):
        (GenerateEnumerationsHeaderContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArgCaller):
        (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArgCaller):
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp: Added.
        (WebCore::convertEnumerationToJS):
        (WebCore::parseEnumeration<TestStandaloneEnumeration>):
        (WebCore::convertEnumeration<TestStandaloneEnumeration>):
        (WebCore::expectedEnumerationValues<TestStandaloneEnumeration>):
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.h: Added.
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestStandaloneEnumeration.idl: Copied from Source/WebCore/Modules/indexeddb/IDBTransaction.idl.
        * inspector/InspectorIndexedDBAgent.cpp:

2016-10-26  Dan Bernstein  <mitz@apple.com>

        Fixed the WebKit2 build.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::document): Moved the definition of this function to here from…
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::document): …here, so that the WebKit2 build doesn’t encounter an
          exported inline function.

2016-10-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Node::ownerDocument
        https://bugs.webkit.org/show_bug.cgi?id=164004

        Reviewed by Darin Adler.

        Test: js/dom/domjit-accessor-owner-document.html

        Implement Node.ownerDocument DOMJIT accessor.
        According to the result of the profiler, jQuery's prop()
        function is frequently called in Ember.js SpeedoMeter.
        And this function calls jQuery.isXMLDoc(). And this isXMLDoc()
        function calls element.ownerDocument accessor. And our WebKit
        inspector also uses ownerDocument accessor frequently.

        Interesting thing is this ownerDocument functionality is used
        in CSSJIT, so CSSJIT has similar helper function to look up the
        owner document of the element. As a result, all the necessary
        functionality is already implemented, DOMJIT just utilizes it.
        For example, Node::treeScopeMemoryOffset() and
        TreeScope::documentScopeMemoryOffset() is implemented before this
        patch.

        In the future, we will convert CSSJIT's Assembler& to CCallHelpers&
        and share the code with DOMJIT[1].

        [1]: https://bugs.webkit.org/show_bug.cgi?id=164006

        * dom/Node.idl:
        * domjit/DOMJITAbstractHeapRepository.h:
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM):
        (WebCore::NodeOwnerDocumentDOMJIT::callDOM):

2016-10-26  Chris Dumez  <cdumez@apple.com>

        Replace IDBKeyPath with a WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=163909

        Reviewed by Darin Adler.

        Replace IDBKeyPath class with the IDBKeyPathVariant type entirely
        and rename IDBKeyPathVariant to IDBKeyPath.

        Unfortunately, IDBKeyPath still needs some special handling when
        returned to the JavaScript because we do not have a toJS() accepting
        a WTF::Variant as input yet.

        There should be no significant behavior change except that
        IDBIndex.keyPath / IDBObjectStore.keyPath now returns an array of
        Strings instead of a DOMStringList object when the IDBKeyPath
        contains a vector. This is a progression and matches the
        specification:
        - https://www.w3.org/TR/IndexedDB/#widl-IDBIndex-keyPath
        - https://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-keyPath

        No new tests, rebaselined existing tests.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::isolatedCopy):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::isIDBKeyPathValid):
        (WebCore::IDBKeyPathIsolatedCopy):
        * Modules/indexeddb/IDBKeyPath.h:
        (WebCore::IDBKeyPathIsolatedCopy):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyPath):
        (WebCore::deserializeIDBKeyPath):
        * Modules/indexeddb/server/IDBSerialization.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::createNewObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::IDBIndexInfo):
        (WebCore::IDBIndexInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBIndexInfo.h:
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::IDBObjectStoreInfo):
        (WebCore::IDBObjectStoreInfo::createNewIndex):
        (WebCore::IDBObjectStoreInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        (WebCore::IDBObjectStoreInfo::keyPath):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::createKeyPathArray):
        (WebCore::toJS):
        * bindings/js/IDBBindingUtilities.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2016-10-26  Zalan Bujtas  <zalan@apple.com>

        Ignore out-of-flow siblings when searching for a spanner candidate.
        https://bugs.webkit.org/show_bug.cgi?id=164042.
        <rdar://problem/28758456>

        Reviewed by Simon Fraser.

        While searching for the spanner candidates in a flow thread, we have to take into account
        whether renderers are in- or out-of-flow.
        What it means is that while traversing the renderer tree to find the the candidate
        renderer (next sibling/ancestor's next child in pre-order traversal), we have to check if the candidate
        is in the same layout context too.

        Test: fast/multicol/crash-when-spanner-candidate-is-out-of-flow.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::spannerPlacehoderCandidate):
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant):

2016-10-26  Brian Burg  <bburg@apple.com>

        Web Inspector: remove unused bool return value from FrontendChannel::sendMessageToFrontend
        https://bugs.webkit.org/show_bug.cgi?id=164046

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorClient.cpp:
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage):
        * inspector/InspectorClient.h:
        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::sendMessageToFrontend):

2016-10-26  Chris Dumez  <cdumez@apple.com>

        The URLSearchParams constructor should take a union in parameter
        https://bugs.webkit.org/show_bug.cgi?id=163906

        Reviewed by Darin Adler.

        The URLSearchParams constructor should take a union in parameter:
        - https://url.spec.whatwg.org/#urlsearchparams

        No new tests, no web-exposed behavior change.

        * html/URLSearchParams.h:
        (WebCore::URLSearchParams::create):
        * html/URLSearchParams.idl:

2016-10-26  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move more string conversions over to JSDOMConvert
        https://bugs.webkit.org/show_bug.cgi?id=164021

        Reviewed by Tim Horton.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::handlePostMessage):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::toDataURL):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        Switch to convert functions.

        * bindings/js/JSApplePaySessionCustom.cpp:
        (WebCore::JSApplePaySession::completeShippingMethodSelection):
        (WebCore::JSApplePaySession::completeShippingContactSelection):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams):
        (WebCore::createRsaKeyGenParams):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::getCSSCanvasContext):
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::setDecisionPoint):
        (WebCore::toDecision):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toSmallerInt):
        (WebCore::toSmallerUInt):
        (WebCore::toInt8EnforceRange):
        (WebCore::toUInt8EnforceRange):
        (WebCore::toInt8Clamp):
        (WebCore::toUInt8Clamp):
        (WebCore::toInt8):
        (WebCore::toUInt8):
        (WebCore::toInt16EnforceRange):
        (WebCore::toUInt16EnforceRange):
        (WebCore::toInt16Clamp):
        (WebCore::toUInt16Clamp):
        (WebCore::toInt16):
        (WebCore::toUInt16):
        Use updated IntegerConversionConfiguration naming.

        (WebCore::valueToStringTreatingNullAsEmptyString): Deleted.
        (WebCore::valueToStringWithUndefinedOrNullCheck): Deleted.
        (WebCore::valueToUSVStringTreatingNullAsEmptyString): Deleted.
        (WebCore::valueToUSVStringWithUndefinedOrNullCheck): Deleted.
        * bindings/js/JSDOMBinding.h:
        Remove unused functions.

        * bindings/js/JSDOMConvert.h:
        (WebCore::convert):
        Add StringConversionConfiguration, to match IntegerConversionConfiguration which moved here,
        and make them both enum classes. Remove SFINAE based overloading of convert<>, which is not
        needed if we get rid of the default parameter, which we can, since the two parameter convert
        routes to the right place.

        (WebCore::Converter<IDLNullable<T>>::convert):
        Add overloads converts that take a Integer/String configuration.

        (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):
        Use updated IntegerConversionConfiguration naming.

        (WebCore::Converter<IDLDOMString>::convert):
        (WebCore::Converter<IDLUSVString>::convert):
        Add a configuration parameter, similar to the one used for integers
        that changes the behavior of string conversions to return an empty
        string for null.

        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorCreate):
        (WebCore::IteratorTraits>::asJS):
        (WebCore::appendForEachArguments):
        Simplify a bit by extracting the SFINAE helpers into a EnableIfMap and EnableIfSet.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetIntegerConversionConfiguration):
        (GetStringConversionConfiguration):
        (JSValueToNativeIsHandledByDOMConvert):
        (JSValueToNative):
        Add support for converting more string types and passing the StringConversionConfiguration.

2016-10-26  Dan Bernstein  <mitz@apple.com>

        When pasting web archive, width specifiers in srcset attribute change into density specifiers
        https://bugs.webkit.org/show_bug.cgi?id=164027
        <rdar://problem/28964948>

        Reviewed by Tim Horton.

        Updated editing/pasteboard/img-srcset-copy-paste-canonicalization.html.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::completeURLsInAttributeValue): Use 'w' when writing out a width
          specifier.

2016-10-26  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: playback support
        https://bugs.webkit.org/show_bug.cgi?id=163678
        <rdar://problem/27989479>

        Reviewed by Dean Jackson.

        We introduce the PlaybackSupport class which brings support for playing and pausing
        the media by clicking on the play/pause button in the media controls and correctly
        reflecting the media's playback state as the media is played or paused via the media API.

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/playback-support.js: Copied from Source/WebCore/Modules/modern-media-controls/media/media-controller.js.
        (PlaybackSupport.prototype.get control):
        (PlaybackSupport.prototype.get mediaEvents):
        (PlaybackSupport.prototype.buttonWasClicked):
        (PlaybackSupport.prototype.syncControl):
        (PlaybackSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-26  Chris Dumez  <cdumez@apple.com>

        Regression(r203848): 百度糯米 app fails to load content due to a JavaScript error
        https://bugs.webkit.org/show_bug.cgi?id=163967
        <rdar://problem/28707838>

        Reviewed by Ryosuke Niwa.

        Add quirk for 百度糯米 app making the 2 last parameters to Event.prototype.initEvent()
        optional.

        No new tests, change only impacts this specific application.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePropertiesHashTable):
        * dom/Event.cpp:
        (WebCore::Event::initEventForBindings):
        * dom/Event.h:
        * dom/Event.idl:
        * platform/RuntimeApplicationChecks.h:
        * platform/RuntimeApplicationChecks.mm:
        (WebCore::IOSApplication::isBaiduNuomi):

2016-10-26  Chris Dumez  <cdumez@apple.com>

        First parameter to TextTrack.addCue() / removeCue() should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=164020

        Reviewed by Eric Carlson.

        First parameter to TextTrack.addCue() / removeCue() should not be nullable:
        - https://html.spec.whatwg.org/#texttrack

        Firefox and Chrome agree with the specification.

        Test: media/track/texttrack-addCue-null.html

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::removeDataCue):
        (WebCore::InbandDataTextTrack::removeCue):
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        (WebCore::InbandGenericTextTrack::removeCue):
        * html/track/InbandGenericTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::removeCue):
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:

2016-10-26  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: elapsed and remaining time support
        https://bugs.webkit.org/show_bug.cgi?id=163679
        <rdar://problem/28851675>

        Reviewed by Dean Jackson.

        We introduce the ElapsedTimeSupport and RemainingTimeSupport classes which bring
        support for displaying the elapsed and remaining time in the time control.

        Tests: media/modern-media-controls/elapsed-time-support/elapsed-time-support.html
               media/modern-media-controls/remaining-time-support/remaining-time-support.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/elapsed-time-support.js: Added.
        (ElapsedTimeSupport.prototype.get control):
        (ElapsedTimeSupport.prototype.get mediaEvents):
        (ElapsedTimeSupport.prototype.syncControl):
        (ElapsedTimeSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/remaining-time-support.js: Added.
        (RemainingTimeSupport.prototype.get control):
        (RemainingTimeSupport.prototype.get mediaEvents):
        (RemainingTimeSupport.prototype.syncControl):
        (RemainingTimeSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-26  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Unify CSSCustomPropertyValue and CSSCustomPropertyDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=164019

        Reviewed by Zalan Bujtas.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCustomPropertyDeclaration.cpp: Removed.
        * css/CSSCustomPropertyDeclaration.h: Removed.
        Get rid of CSSCustomPropertyDeclaration.

        * css/CSSCustomPropertyValue.h:
        Add new constructors to handle the new variable data format (either a CSSValueId or a
        CSSVariableData object that holds parser tokens).

        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCustomPropertyDeclaration): Deleted.
        Get rid of CSSCustomPropertyDeclaration cases.

        * css/CSSVariableData.h:
        Switch to CSSCustomPropertyValue.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        We've renamed the old parser variable data to deprecatedValue to make it clear it's going
        to be removed eventually.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::filterProperties):
        (WebCore::CSSParserImpl::consumeVariableValue):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::CSSVariableParser::parseDeclarationValue):
        * css/parser/CSSVariableParser.h:
        Switch to CSSCustomPropertyValue.

2016-10-26  Youenn Fablet  <youenn@apple.com>

        Enable SDPProcessor for Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=163940

        Reviewed by Eric Carlson.

        Covered by activated tests.

        Activating processing of SDPProcessor scripts for Mac bots.
        Moving platform/mediastream/openwebrtc/SDPProcessorScriptResource.cpp to platform/mediastream/SDPProcessorScriptResource.cpp.
        This file is not tied to openwebrtc and allows retrieving the SDPProcessor script resource file content.

        * DerivedSources.make:
        * PlatformGTK.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/SDPProcessorScriptResource.cpp:
        (WebCore::SDPProcessorScriptResource::scriptString):
        * platform/mediastream/openwebrtc/SDPProcessorScriptResource.cpp: Removed.

2016-10-26  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Get functional pseudos parsing
        https://bugs.webkit.org/show_bug.cgi?id=164018

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoClassSelectorFromStringView):
        Remove the ( check so that we can parse strings that end in (.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        Put in a hack that adds a ( to the end of the string so that it will be found in the map.

2016-10-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing compiler warnings in PlaybackPipeline
        that are popping up in GTK+ builds.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::addSourceBuffer):
        (WebCore::PlaybackPipeline::attachTrack):

2016-10-26  Youenn Fablet  <youennf@gmail.com>

        IceCandidate does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=163944

        Reviewed by Eric Carlson.

        No change of behavior.

        Simplifying IceCandidate class into a simple structure, no longer refcounted.
        Updated call sites accordingly.
        Updated SDP parsing of candidates to return a Variant instead of having both a return and an out parameter.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::addIceCandidateTask):
        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::createCandidateObject):
        (WebCore::createCandidate):
        (WebCore::iceCandidateFromJSON):
        (WebCore::configurationToJSON):
        (WebCore::SDPProcessor::parseCandidateLine):
        * Modules/mediastream/SDPProcessor.h:
        (WebCore::SDPProcessor::ParsingResult::parsingStatus):
        (WebCore::SDPProcessor::ParsingResult::candidate):
        * platform/mediastream/IceCandidate.h:
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/PeerMediaDescription.h:
        (WebCore::PeerMediaDescription::iceCandidates):
        (WebCore::PeerMediaDescription::addIceCandidate):
        (WebCore::PeerMediaDescription::clone):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::updateSendConfiguration):
        (WebCore::MediaEndpointOwr::addRemoteCandidate):
        (WebCore::MediaEndpointOwr::dispatchNewIceCandidate):
        (WebCore::MediaEndpointOwr::internalAddRemoteCandidate):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::addRemoteCandidate):
        (WebCore::MockMediaEndpoint::dispatchFakeIceCandidates):
        * platform/mock/MockMediaEndpoint.h:

2016-10-26  Andreas Kling  <akling@apple.com>

        Fix mach port leak in ResourceUsageThread.
        <https://webkit.org/b/164012>

        Reviewed by Antti Koivisto.

        The threads returned by task_threads() need to be deallocated.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::cpuUsage):

2016-10-26  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        WebRTC: The RTCTrackEventInit dictionary needs required members
        https://bugs.webkit.org/show_bug.cgi?id=158536

        Reviewed by Chris Dumez.

        Update RTCTrackEvent IDL as per specification.

        No additional test required, rebase existing tests.

        * Modules/mediastream/RTCTrackEvent.idl:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][GTK+][MSE] Unreviewed debug build fix.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::resetPipeline):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [cmake][GStreamer][MSE][EME] Build MSE and EME code after refactoring
        https://bugs.webkit.org/show_bug.cgi?id=162928

        Reviewed by Xabier Rodriguez-Calvar.

        Consolidate all the source file tree changes after refactoring.

        This patch is co-authored with Philippe Normand <philn@igalia.com> (EME support).

        * platform/GStreamer.cmake:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE][GStreamer] Enable QUOTA_EXCEEDED_ERR support for GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=162922

        Reviewed by Xabier Rodriguez-Calvar.

        QUOTA_EXCEEDED_ERR should be reported by SourceBuffer when appropriate, at least on the
        GStreamer implementation.

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

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [MSE] Expose additional MediaSource methods to MediaSourcePrivate
        https://bugs.webkit.org/show_bug.cgi?id=162920

        Reviewed by Xabier Rodriguez-Calvar.

        The GStreamer MSE platform implementation needs to report duration changes and trigger
        monitorSourceBuffers() calls.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::durationChanged):
        * Modules/mediasource/MediaSource.h:
        * platform/graphics/MediaSourcePrivateClient.h:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][EME] ClearKey decryption support
        https://bugs.webkit.org/show_bug.cgi?id=162918

        Reviewed by Xabier Rodriguez-Calvar.

        This patch is authored by Philippe Normand <philn@igalia.com>.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp: Added.
        (webkit_media_clear_key_decrypt_class_init):
        (webkit_media_clear_key_decrypt_init):
        (webKitMediaClearKeyDecryptorFinalize):
        (webKitMediaClearKeyDecryptorRequestDecryptionKey):
        (webKitMediaClearKeyDecryptorHandleKeyResponse):
        (webKitMediaClearKeyDecryptorSetupCipher):
        (webKitMediaClearKeyDecryptorDecrypt):
        (webKitMediaClearKeyDecryptorReleaseCipher):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.h: Added.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][EME] Base class for decryption support
        https://bugs.webkit.org/show_bug.cgi?id=162915

        Reviewed by Xabier Rodriguez-Calvar.

        Add common encryption base class.

        This patch is authored by Philippe Normand <philn@igalia.com>.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp: Added.
        (webkit_media_common_encryption_decrypt_class_init):
        (webkit_media_common_encryption_decrypt_init):
        (webKitMediaCommonEncryptionDecryptorFinalize):
        (webkitMediaCommonEncryptionDecryptTransformCaps):
        (webkitMediaCommonEncryptionDecryptTransformInPlace):
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):
        (webKitMediaCommonEncryptionDecryptorChangeState):
        (webKitMediaCommonEncryptionDecryptDefaultSetupCipher):
        (webKitMediaCommonEncryptionDecryptDefaultReleaseCipher):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h: Added.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][EME] Utility function to create decryptor
        https://bugs.webkit.org/show_bug.cgi?id=162914

        Reviewed by Xabier Rodriguez-Calvar.

        Add a utility function to find a suitable GStreamer decryptor element.

        This patch is authored by Philippe Normand <philn@igalia.com>.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::createGstDecryptor):
        (WebCore::gstRegistryHasElementForMediaType): Deleted.
        * platform/graphics/gstreamer/GStreamerUtilities.h:

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE][EME] Remove MSE code from regular player and add EME support
        https://bugs.webkit.org/show_bug.cgi?id=162911

        Now that the MSE responsibility has been refactored to the dedicated
        MediaPlayerPrivateGStreamerMSE subclass, the regular player no longer needs the MSE code,
        just to expose some more methods to the subclass. Float timestamps have been migrated to
        double. Also, small changes to accomodate the EME support are needed.

        This patch is co-authored with Philippe Normand <philn@igalia.com> (EME support) and
        Žan Doberšek <zandobersek@gmail.com> (double timestamps).

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::busMessageCallback):
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime):
        (WebCore::MediaPlayerPrivateGStreamer::currentMediaTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::paused):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::pause): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChangedCallback): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::setRate): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::loadStateChanged): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::timeChanged): Deleted.
        (WebCore::mimeTypeSet): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::configurePlaySink):
        (WebCore::MediaPlayerPrivateGStreamer::isMediaSource):
        (WebCore::MediaPlayerPrivateGStreamer::createWeakPtr): Deleted.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][EME] Add EME support to base private player
        https://bugs.webkit.org/show_bug.cgi?id=162908

        Reviewed by Xabier Rodriguez-Calvar.

        Add encryption key management support.

        This patch is authored by Philippe Normand <philn@igalia.com>.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::registerWebKitGStreamerElements):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::needKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::setCDMSession):
        (WebCore::MediaPlayerPrivateGStreamerBase::keyAdded):
        (WebCore::MediaPlayerPrivateGStreamerBase::createSession):
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsKeySystem):
        (WebCore::MediaPlayerPrivateGStreamerBase::extendedSupportsType):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::setPipeline): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::pipeline):

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] WebKitMediaSourceGStreamer refactoring
        https://bugs.webkit.org/show_bug.cgi?id=162902

        Reviewed by Xabier Rodriguez-Calvar.

        Move WebKitMediaSourceGStreamer to the mse directory, split public and private header
        sections, manage stream data throttling and seek synchronization, audio/video/text stream
        counting, improve GStreamer duration query, stream initialization, remove
        MediaSourceClientGStreamer logic (factored out to its own class in another patch) and
        interaction with MediaPlayerPrivateGStreamerMSE, PlaybackPipeline and
        SourceBufferPrivateGStreamer.

        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp: Added.
        (disabledAppsrcNeedData):
        (disabledAppsrcEnoughData):
        (disabledAppsrcSeekData):
        (enabledAppsrcEnoughData):
        (enabledAppsrcSeekData):
        (getStreamByAppsrc):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetProperty):
        (webKitMediaSrcGetProperty):
        (webKitMediaSrcDoAsyncStart):
        (webKitMediaSrcDoAsyncDone):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcGetSize):
        (webKitMediaSrcQueryWithParent):
        (webKitMediaSrcUpdatePresentationSize):
        (webKitMediaSrcLinkStreamToSrcPad):
        (webKitMediaSrcLinkParser):
        (webKitMediaSrcFreeStream):
        (webKitMediaSrcCheckAllTracksConfigured):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        (seekNeedsDataMainThread):
        (notifyReadyForMoreSamplesMainThread):
        (applicationMessageCallback):
        (webKitMediaSrcSetMediaPlayerPrivate):
        (webKitMediaSrcSetReadyForSamples):
        (webKitMediaSrcPrepareSeek):
        (WTF::adoptGRef):
        (WTF::refGPtr<WebKitMediaSrc>):
        (WTF::derefGPtr<WebKitMediaSrc>):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h: Added.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Playback pipeline
        https://bugs.webkit.org/show_bug.cgi?id=162901

        Reviewed by Xabier Rodriguez-Calvar.

        Encapsulate the responsibility to interact with the GStreamer playback pipeline and the
        different streams managed by the WebKitMediaSrc element into a new PlaybackPipeline class.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp: Added.
        (getStreamByTrackId):
        (getStreamBySourceBufferPrivate):
        (pushSample):
        (WebCore::PlaybackPipeline::create):
        (WebCore::PlaybackPipeline::PlaybackPipeline):
        (WebCore::PlaybackPipeline::~PlaybackPipeline):
        (WebCore::PlaybackPipeline::setWebKitMediaSrc):
        (WebCore::PlaybackPipeline::webKitMediaSrc):
        (WebCore::PlaybackPipeline::addSourceBuffer):
        (WebCore::PlaybackPipeline::removeSourceBuffer):
        (WebCore::PlaybackPipeline::attachTrack):
        (WebCore::PlaybackPipeline::reattachTrack):
        (WebCore::PlaybackPipeline::notifyDurationChanged):
        (WebCore::PlaybackPipeline::markEndOfStream):
        (WebCore::PlaybackPipeline::flushAndEnqueueNonDisplayingSamples):
        (WebCore::PlaybackPipeline::enqueueSample):
        (WebCore::PlaybackPipeline::pipeline):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h: Added.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE][EME] MSE specialization of Media Player Private for GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=162900

        Reviewed by Xabier Rodriguez-Calvar.

        Refactor MSE-specific logic to its own GStreamer player. This new MSE player coordinates
        data appending, media playback and interaction with MediaSource by delegating to
        AppendPipeline (one instance per SourceBuffer), PlaybackPipeline and
        MediaSourceClientGStreamerMSE/MediaSourcePrivateClient respectively.

        This patch is co-authored with Philippe Normand <philn@igalia.com> (EME support).

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp: Added.
        (dumpReadyState):
        (WebCore::MediaPlayerPrivateGStreamerMSE::registerMediaEngine):
        (WebCore::initializeGStreamerAndRegisterWebKitMSEElement):
        (WebCore::MediaPlayerPrivateGStreamerMSE::isAvailable):
        (WebCore::MediaPlayerPrivateGStreamerMSE::MediaPlayerPrivateGStreamerMSE):
        (WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE):
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::pause):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationMediaTime):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::configurePlaySink):
        (WebCore::MediaPlayerPrivateGStreamerMSE::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamerMSE::notifySeekNeedsDataForTime):
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::maybeFinishSeek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seeking):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setReadyState):
        (WebCore::MediaPlayerPrivateGStreamerMSE::waitForSeekCompleted):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seekCompleted):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setRate):
        (WebCore::MediaPlayerPrivateGStreamerMSE::buffered):
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
        (WebCore::MediaPlayerPrivateGStreamerMSE::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamerMSE::isTimeBuffered):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setMediaSourceClient):
        (WebCore::MediaPlayerPrivateGStreamerMSE::mediaSourceClient):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateGStreamerMSE::getSupportedTypes):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
        (WebCore::MediaPlayerPrivateGStreamerMSE::dispatchDecryptionKey):
        (WebCore::MediaPlayerPrivateGStreamerMSE::markEndOfStream):
        (WebCore::MediaPlayerPrivateGStreamerMSE::currentMediaTime):
        (WebCore::MediaPlayerPrivateGStreamerMSE::maxTimeSeekable):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h: Added.
        (WebCore::MediaPlayerPrivateGStreamerMSE::mediaSourcePrivateClient):

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] MediaSourceGStreamer refactoring
        https://bugs.webkit.org/show_bug.cgi?id=162899

        Reviewed by Žan Doberšek.

        Move MediaSourceGStreamer to the mse directory, manage SourceBufferPrivates and delegate WebKitMediaSrc operations to the MSE private player.

        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.cpp.
        (WebCore::MediaSourceGStreamer::open):
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::addSourceBuffer):
        (WebCore::MediaSourceGStreamer::removeSourceBuffer):
        (WebCore::MediaSourceGStreamer::durationChanged):
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        (WebCore::MediaSourceGStreamer::readyState):
        (WebCore::MediaSourceGStreamer::setReadyState):
        (WebCore::MediaSourceGStreamer::waitForSeekCompleted):
        (WebCore::MediaSourceGStreamer::seekCompleted):
        (WebCore::MediaSourceGStreamer::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MediaSourceGStreamer::buffered):
        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.h.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] SourceBufferPrivateGStreamer refactoring
        https://bugs.webkit.org/show_bug.cgi?id=162898

        Reviewed by Xabier Rodriguez-Calvar.

        Moved SourceBufferPrivateGStreamer to an mse directory and added unimplemented features (abort, enqueueing and sample flow control).

        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp: Added.
        (WebCore::SourceBufferPrivateGStreamer::create):
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::~SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::setClient):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::abort):
        (WebCore::SourceBufferPrivateGStreamer::resetParserState):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        (WebCore::SourceBufferPrivateGStreamer::readyState):
        (WebCore::SourceBufferPrivateGStreamer::setReadyState):
        (WebCore::SourceBufferPrivateGStreamer::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample):
        (WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::setReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::notifyReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::setActive):
        (WebCore::SourceBufferPrivateGStreamer::stopAskingForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveSample):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveAllPendingSamples):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] MediaSourceClientGStreamerMSE
        https://bugs.webkit.org/show_bug.cgi?id=162896

        Reviewed by Xabier Rodriguez-Calvar.

        This class encapsulates the MediaSource interaction responsibility for the
        GStreamer platform.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp: Added.
        (WebCore::MediaSourceClientGStreamerMSE::create):
        (WebCore::MediaSourceClientGStreamerMSE::MediaSourceClientGStreamerMSE):
        (WebCore::MediaSourceClientGStreamerMSE::~MediaSourceClientGStreamerMSE):
        (WebCore::MediaSourceClientGStreamerMSE::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamerMSE::duration):
        (WebCore::MediaSourceClientGStreamerMSE::durationChanged):
        (WebCore::MediaSourceClientGStreamerMSE::abort):
        (WebCore::MediaSourceClientGStreamerMSE::append):
        (WebCore::MediaSourceClientGStreamerMSE::markEndOfStream):
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):
        (WebCore::MediaSourceClientGStreamerMSE::flushAndEnqueueNonDisplayingSamples):
        (WebCore::MediaSourceClientGStreamerMSE::enqueueSample):
        (WebCore::MediaSourceClientGStreamerMSE::webKitMediaSrc):
        (WebCore::MediaSourceClientGStreamerMSE::clearPlayerPrivate):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h: Added.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] GStreamer Media Sample
        https://bugs.webkit.org/show_bug.cgi?id=162894

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the MediaSample interface for the GStreamer platform.

        * platform/graphics/gstreamer/mse/GStreamerMediaSample.cpp: Added.
        (WebCore::GStreamerMediaSample::GStreamerMediaSample):
        (WebCore::GStreamerMediaSample::create):
        (WebCore::GStreamerMediaSample::createFakeSample):
        (WebCore::GStreamerMediaSample::applyPtsOffset):
        (WebCore::GStreamerMediaSample::offsetTimestampsBy):
        (WebCore::GStreamerMediaSample::~GStreamerMediaSample):
        * platform/graphics/gstreamer/mse/GStreamerMediaSample.h: Added.
        (WebCore::GStreamerMediaSample::presentationTime):
        (WebCore::GStreamerMediaSample::decodeTime):
        (WebCore::GStreamerMediaSample::duration):
        (WebCore::GStreamerMediaSample::trackID):
        (WebCore::GStreamerMediaSample::setTrackID):
        (WebCore::GStreamerMediaSample::sizeInBytes):
        (WebCore::GStreamerMediaSample::sample):
        (WebCore::GStreamerMediaSample::presentationSize):
        (WebCore::GStreamerMediaSample::setTimestamps):
        (WebCore::GStreamerMediaSample::isDivisable):
        (WebCore::GStreamerMediaSample::divide):
        (WebCore::GStreamerMediaSample::flags):
        (WebCore::GStreamerMediaSample::platformSample):
        (WebCore::GStreamerMediaSample::dump):

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] GStreamer Media Description
        https://bugs.webkit.org/show_bug.cgi?id=162893

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the MediaDescription interface for the GStreamer platform.

        * platform/graphics/gstreamer/mse/GStreamerMediaDescription.cpp: Added.
        (WebCore::GStreamerMediaDescription::codec):
        (WebCore::GStreamerMediaDescription::isVideo):
        (WebCore::GStreamerMediaDescription::isAudio):
        (WebCore::GStreamerMediaDescription::isText):
        * platform/graphics/gstreamer/mse/GStreamerMediaDescription.h: Added.
        (WebCore::GStreamerMediaDescription::create):
        (WebCore::GStreamerMediaDescription::~GStreamerMediaDescription):
        (WebCore::GStreamerMediaDescription::GStreamerMediaDescription):

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE][EME] Append Pipeline
        https://bugs.webkit.org/show_bug.cgi?id=162874

        Reviewed by Žan Doberšek.

        This patch is co-authored with Xabier Rodriguez-Calvar <calvaris@igalia.com> (data starve
        and last sample detection, debug features) and Philippe Normand <philn@igalia.com> (EME
        support).

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp: Added.
        (WebCore::dumpAppendState):
        (WebCore::appendPipelineElementMessageCallback):
        (WebCore::appendPipelineApplicationMessageCallback):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::clearPlayerPrivate):
        (WebCore::AppendPipeline::handleElementMessage):
        (WebCore::AppendPipeline::handleApplicationMessage):
        (WebCore::AppendPipeline::handleAppsrcNeedDataReceived):
        (WebCore::AppendPipeline::handleAppsrcAtLeastABufferLeft):
        (WebCore::AppendPipeline::id):
        (WebCore::AppendPipeline::setAppendState):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::checkEndOfAppend):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::appsinkEOS):
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        (WebCore::AppendPipeline::trackId):
        (WebCore::AppendPipeline::resetPipeline):
        (WebCore::AppendPipeline::setAppsrcDataLeavingProbe):
        (WebCore::AppendPipeline::removeAppsrcDataLeavingProbe):
        (WebCore::AppendPipeline::abort):
        (WebCore::AppendPipeline::pushNewBuffer):
        (WebCore::AppendPipeline::reportAppsrcAtLeastABufferLeft):
        (WebCore::AppendPipeline::reportAppsrcNeedDataReceived):
        (WebCore::AppendPipeline::handleNewAppsinkSample):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        (WebCore::appendPipelineAppsinkCapsChanged):
        (WebCore::appendPipelineAppsrcDataLeaving):
        (WebCore::appendPipelinePadProbeDebugInformation):
        (WebCore::appendPipelineAppsrcNeedData):
        (WebCore::appendPipelineDemuxerPadAdded):
        (WebCore::appendPipelineDemuxerPadRemoved):
        (WebCore::appendPipelineAppsinkNewSample):
        (WebCore::appendPipelineAppsinkEOS):
        * platform/graphics/gstreamer/mse/AppendPipeline.h: Added.
        (WebCore::AppendPipeline::appendState):
        (WebCore::AppendPipeline::mediaSourceClient):
        (WebCore::AppendPipeline::sourceBufferPrivate):
        (WebCore::AppendPipeline::bus):
        (WebCore::AppendPipeline::pipeline):
        (WebCore::AppendPipeline::appsrc):
        (WebCore::AppendPipeline::appsink):
        (WebCore::AppendPipeline::demuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkCaps):
        (WebCore::AppendPipeline::track):
        (WebCore::AppendPipeline::streamType):

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Drain query support
        https://bugs.webkit.org/show_bug.cgi?id=162872

        Reviewed by Žan Doberšek.

        Under some circumstances, GStreamer deadlocks completely during MSE seeks on OpenGL ES
        systems. This is because the video sink still holds samples. Proper DRAIN support
        fixes this issue and is also good for all the platforms, not only OpenGL ES.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerDrain):
        (WebCore::MediaPlayerPrivateGStreamerBase::drainCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::drain):
        (webkitVideoSinkQuery):
        (webkitVideoSinkEvent):
        (webkit_video_sink_class_init):
        (VideoRenderRequestScheduler::stop): Deleted.
        (webkitVideoSinkProposeAllocation): Deleted.

2016-10-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Track enhancements for MSE support
        https://bugs.webkit.org/show_bug.cgi?id=162869

        Reviewed by Xabier Rodriguez-Calvar.

        Add 'id' field to Audio/VideoTrackPrivateGStreamer. Make TrackPrivateBaseGStreamer
        work anyway in cases where the demuxer isn't contained in a GstPlaybin.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2016-10-26  Youenn Fablet  <youenn@apple.com>

        Make CachedResourceLoader originsMatch check more efficient
        https://bugs.webkit.org/show_bug.cgi?id=163938

        Reviewed by Darin Adler.

        No change of behavior.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):
        (WebCore::originsMatch): Moved to SecurityOrigin.cpp.
        * page/SecurityOrigin.cpp:
        (WebCore::areOriginsMatching): Helper routine to check whether origins are matching.
        (WebCore::originsMatch): Ensuring string comparison provides the same result as this function.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::protocol):
        (WebCore::SecurityOrigin::host):
        (WebCore::SecurityOrigin::domain):

2016-10-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
        https://bugs.webkit.org/show_bug.cgi?id=163900

        Reviewed by Sam Weinig.

        Add TestDOMJIT.idl for bindings generation tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetResultTypeFilter):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
        (WebCore::JSTestDOMJITPrototype::create):
        (WebCore::JSTestDOMJITPrototype::createStructure):
        (WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
        (WebCore::JSTestDOMJITConstructor::prototypeForStructure):
        (WebCore::JSTestDOMJITConstructor::initializeProperties):
        (WebCore::JSTestDOMJITPrototype::finishCreation):
        (WebCore::JSTestDOMJIT::JSTestDOMJIT):
        (WebCore::JSTestDOMJIT::createPrototype):
        (WebCore::JSTestDOMJIT::prototype):
        (WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute):
        (WebCore::jsTestDOMJITAnyAttr):
        (WebCore::jsTestDOMJITAnyAttrGetter):
        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
        (WebCore::jsTestDOMJITBooleanAttr):
        (WebCore::jsTestDOMJITBooleanAttrGetter):
        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
        (WebCore::jsTestDOMJITByteAttr):
        (WebCore::jsTestDOMJITByteAttrGetter):
        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITByteAttr):
        (WebCore::jsTestDOMJITOctetAttr):
        (WebCore::jsTestDOMJITOctetAttrGetter):
        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
        (WebCore::jsTestDOMJITShortAttr):
        (WebCore::jsTestDOMJITShortAttrGetter):
        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITShortAttr):
        (WebCore::jsTestDOMJITUnsignedShortAttr):
        (WebCore::jsTestDOMJITUnsignedShortAttrGetter):
        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
        (WebCore::jsTestDOMJITLongAttr):
        (WebCore::jsTestDOMJITLongAttrGetter):
        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITLongAttr):
        (WebCore::jsTestDOMJITUnsignedLongAttr):
        (WebCore::jsTestDOMJITUnsignedLongAttrGetter):
        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
        (WebCore::jsTestDOMJITLongLongAttr):
        (WebCore::jsTestDOMJITLongLongAttrGetter):
        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
        (WebCore::jsTestDOMJITUnsignedLongLongAttr):
        (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
        (WebCore::jsTestDOMJITFloatAttr):
        (WebCore::jsTestDOMJITFloatAttrGetter):
        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
        (WebCore::jsTestDOMJITUnrestrictedFloatAttr):
        (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
        (WebCore::jsTestDOMJITDoubleAttr):
        (WebCore::jsTestDOMJITDoubleAttrGetter):
        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
        (WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
        (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
        (WebCore::jsTestDOMJITDomStringAttr):
        (WebCore::jsTestDOMJITDomStringAttrGetter):
        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
        (WebCore::jsTestDOMJITByteStringAttr):
        (WebCore::jsTestDOMJITByteStringAttrGetter):
        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
        (WebCore::jsTestDOMJITUsvStringAttr):
        (WebCore::jsTestDOMJITUsvStringAttrGetter):
        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
        (WebCore::jsTestDOMJITNodeAttr):
        (WebCore::jsTestDOMJITNodeAttrGetter):
        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
        (WebCore::jsTestDOMJITBooleanNullableAttr):
        (WebCore::jsTestDOMJITBooleanNullableAttrGetter):
        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
        (WebCore::jsTestDOMJITByteNullableAttr):
        (WebCore::jsTestDOMJITByteNullableAttrGetter):
        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
        (WebCore::jsTestDOMJITOctetNullableAttr):
        (WebCore::jsTestDOMJITOctetNullableAttrGetter):
        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
        (WebCore::jsTestDOMJITShortNullableAttr):
        (WebCore::jsTestDOMJITShortNullableAttrGetter):
        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
        (WebCore::jsTestDOMJITUnsignedShortNullableAttr):
        (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
        (WebCore::jsTestDOMJITLongNullableAttr):
        (WebCore::jsTestDOMJITLongNullableAttrGetter):
        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
        (WebCore::jsTestDOMJITUnsignedLongNullableAttr):
        (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
        (WebCore::jsTestDOMJITLongLongNullableAttr):
        (WebCore::jsTestDOMJITLongLongNullableAttrGetter):
        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
        (WebCore::jsTestDOMJITFloatNullableAttr):
        (WebCore::jsTestDOMJITFloatNullableAttrGetter):
        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
        (WebCore::jsTestDOMJITDoubleNullableAttr):
        (WebCore::jsTestDOMJITDoubleNullableAttrGetter):
        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
        (WebCore::jsTestDOMJITDomStringNullableAttr):
        (WebCore::jsTestDOMJITDomStringNullableAttrGetter):
        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
        (WebCore::jsTestDOMJITByteStringNullableAttr):
        (WebCore::jsTestDOMJITByteStringNullableAttrGetter):
        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
        (WebCore::jsTestDOMJITUsvStringNullableAttr):
        (WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
        (WebCore::jsTestDOMJITNodeNullableAttr):
        (WebCore::jsTestDOMJITNodeNullableAttrGetter):
        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
        (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
        (WebCore::jsTestDOMJITConstructor):
        (WebCore::setJSTestDOMJITConstructor):
        (WebCore::JSTestDOMJIT::getConstructor):
        (WebCore::JSTestDOMJIT::visitChildren):
        * bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
        (WebCore::JSTestDOMJIT::create):
        (WebCore::JSTestDOMJIT::createStructure):
        (WebCore::JSTestDOMJIT::wrapped):
        (WebCore::JSTestDOMJIT::finishCreation):
        * bindings/scripts/test/TestDOMJIT.idl: Added.

2016-10-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * platform/graphics/GraphicsContext.h: Add missing declaration.

2016-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Updating attribute by textContent must create a single mutation record and custom element reaction
        https://bugs.webkit.org/show_bug.cgi?id=164003

        Reviewed by Chris Dumez.

        The bug was caused by setTextContent not invoking setNodeValue for Attr nodes.
        Use setNodeValue to match the specification: https://dom.spec.whatwg.org/#dom-node-textcontent

        Test: fast/dom/MutationObserver/text-content-on-attr.html

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

2016-10-25  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Use smart pointers for Direct2D Path types
        https://bugs.webkit.org/show_bug.cgi?id=163994

        Reviewed by Alex Christensen.

        Tested by existing path tests.

        * platform/graphics/Path.h:
        (WebCore::Path::platformPath): Use a COMPtr for m_path.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::systemFactory): Present better D2D debug output
        when running a debug build.
        (WebCore::GraphicsContext::platformInit): Initialize a D2D device from a
        native GDI device context.
        (WebCore::GraphicsContext::platformStrokeStyle): Added.
        (WebCore::GraphicsContext::clipBounds): Simplify clip boundary calculations and
        avoid doing math on infinities.
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::scratchRenderTarget): Added.
        (WebCore::Path::~Path): Switch to COMPtr implementation.
        (WebCore::Path::ensurePlatformPath): Ditto.
        (WebCore::Path::appendGeometry): Ditto.
        (WebCore::Path::operator=): Ditto.
        (WebCore::Path::initializePathState): Ditto.
        (WebCore::Path::strokeContains): Provide an implementation.
        (WebCore::Path::transform): Ditto.
        (WebCore::Path::addEllipse): No need for explicit construction of the
        D2D1::Point2F object.
        (WebCore::Path::clear): Switch to COMPtr implementation.

2016-10-25  Nan Wang  <n_wang@apple.com>

        LayoutTest accessibility/mac/meter-gauge-value-description.html failing
        https://bugs.webkit.org/show_bug.cgi?id=163997
        <rdar://problem/28948637>

        Reviewed by Chris Fleizach.

        I hand-edited the Localizable.strings file in a previous patch and my changes
        were replaced by running update-webkit-localizable-strings script. Changed the
        key to be the same as the value to keep consistency with other entries.

        Re-enabled the failing test.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXMeterGaugeRegionOptimumText):
        (WebCore::AXMeterGaugeRegionSuboptimalText):
        (WebCore::AXMeterGaugeRegionLessGoodText):

2016-10-25  Filip Pizlo  <fpizlo@apple.com>

        HeapTimer should not hardcode all of its subclasses and USE(CF) shouldn't be a bizarre special case
        https://bugs.webkit.org/show_bug.cgi?id=163947

        Reviewed by Geoffrey Garen.

        No new tests because no new behavior.

        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:

2016-10-25  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Improvements to selector parsing
        https://bugs.webkit.org/show_bug.cgi?id=163964

        Reviewed by Zalan Bujtas.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::setAttribute):
        (WebCore::CSSSelector::setNth):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::setAttributeValueMatchingIsCaseInsensitive):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        (WebCore::StyleSheetContents::parserAppendRule):
        (WebCore::StyleSheetContents::ruleAt):
        (WebCore::StyleSheetContents::ruleCount):
        (WebCore::StyleSheetContents::clearRules):
        (WebCore::StyleSheetContents::wrapperInsertRule):
        (WebCore::StyleSheetContents::wrapperDeleteRule):
        * css/StyleSheetContents.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::CSSParser::parseSelector):
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::setAttribute):
        (WebCore::CSSParserSelector::setArgument):
        (WebCore::CSSParserSelector::setNth):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::consumeLangArgumentList):
        (WebCore::CSSSelectorParser::consumeCompoundSelector):
        (WebCore::CSSSelectorParser::consumeAttribute):
        (WebCore::isPseudoClassFunction):
        (WebCore::isPseudoElementFunction):
        (WebCore::CSSSelectorParser::consumePseudo):
        (WebCore::CSSSelectorParser::consumeCombinator):

2016-10-25  Beth Dakin  <bdakin@apple.com>

        Numbered list should be represented without ‘…’
        https://bugs.webkit.org/show_bug.cgi?id=163992
        -and corresponding-
        rdar://problem/28911337

        Reviewed by Darin Adler.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::insertListTypeNumbered):

2016-10-25  Daniel Bates  <dabates@apple.com>

        REGRESSION (r178265): XSS Auditor fails to block document.write() of incomplete tag
        https://bugs.webkit.org/show_bug.cgi?id=163978
        <rdar://problem/25962131>

        Reviewed by Darin Adler.

        During the tokenization process of an HTML tag the start and end positions of each of its
        attributes is tracked so that the XSS Auditor can request a snippet around a suspected
        injected attribute. We need to take care to consider document.write() boundaries when
        tracking the start and end positions of each HTML tag and attribute so that the XSS Auditor
        receives the correct snippet. Following r178265 we no longer consider document.write()
        boundaries when tracking the start and end positions of attributes. So, the substring
        represented by the start and end positions of an attribute may correspond to some other
        attribute in the tag. Therefore the XSS Auditor may fail to block an injection because the
        snippet it requested may not be the snippet that it intended to request.

        Tests: http/tests/security/xssAuditor/dom-write-location-dom-write-open-img-onerror.html
               http/tests/security/xssAuditor/dom-write-location-open-img-onerror.html
               http/tests/security/xssAuditor/nested-dom-write-location-open-img-onerror.html

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::startToken): Set the attribute base offset to be the token
        start position.
        (WebCore::HTMLSourceTracker::source): Use the specified attribute start position as-is. We no
        longer adjust it here because it was adjusted with respect to the attribute base offset, which
        takes into account document.write() boundaries.
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::setAttributeBaseOffset): Added.
        (WebCore::HTMLToken::beginAttribute): Subtract attribute base offset from the specified offset.
        (WebCore::HTMLToken::endAttribute): Ditto.
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::setTokenAttributeBaseOffset): Added.

2016-10-25  Chris Dumez  <cdumez@apple.com>

        IDBDatabase.transaction() should take a union in parameter
        https://bugs.webkit.org/show_bug.cgi?id=163966

        Reviewed by Sam Weinig.

        IDBDatabase.transaction() should take a union in parameter:
        - https://www.w3.org/TR/IndexedDB/#widl-IDBDatabase-transaction-IDBTransaction-DOMString-sequence-DOMString--storeNames-IDBTransactionMode-mode

        No new tests, no expected Web-exposed behavior change.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:

2016-10-25  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBObjectStore openKeyCursor.
        <rdar://problem/28806930> and https://bugs.webkit.org/show_bug.cgi?id=163954

        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests)

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        * Modules/indexeddb/IDBCursor.h:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestOpenCursor):

        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::currentData): Only grab the current value
          if the cursor is KeyAndValue.

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::SQLiteIDBCursor):
        (WebCore::IDBServer::SQLiteIDBCursor::internalAdvanceOnce): Only save off the data for an
          object store cursor if it's both KeyAndValue.
        * Modules/indexeddb/server/SQLiteIDBCursor.h:

        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::objectStoreCursor): Allow for a KeyOnly ObjectStoreCursor.
        * Modules/indexeddb/shared/IDBCursorInfo.h:

2016-10-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support InputEvent.dataTransfer for the InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163213
        <rdar://problem/28700407>

        Reviewed by Ryosuke Niwa.

        Adds support for the dataTransfer attribute of InputEvent, which contains both HTML and plain text
        representations of inserted content corresponding to input types "insertFromPaste", "insertFromDrop" and
        "insertReplacementText". The specification calls for the data transfer's drag data item list to contain this
        information via two entries with type strings "text/html" and "text/plain". However, WebKit does not yet support
        the DataTransfer.items -- in lieu of this, we will provide this information for now via getData("text/plain")
        and getData("text/html"), respectively.

        To support this attribute, we need a special type of DataTransfer which is readonly and returns canned data
        given a type string. To implement this, we introduce StaticPasteboard, a type of Pasteboard which is initialized
        with a map of type string to data. When asked for its data via getData, the StaticPasteboard searches its map
        for the requested type and returns the result, if any.

        An editing command may now create a new DataTransfer via DataTransfer::createForInputEvent from HTML and
        plaintext strings, and then vend this information to its dispatched input events by overriding
        CompositeEditCommand::inputEventDataTransfer.

        Some further work will be needed to ensure that all information exposed via this DataTransfer does not contain
        hidden content. To do this, we should create a new Document, "paste" the contents of our copied HTML string into
        it, then simulate selecting the content and generating markup from the selection to create a sanitized
        DocumentFragment corresponding to the original copied HTML. This will be addressed in a future patch.

        Tests: fast/events/input-events-paste-rich-datatransfer.html
               fast/events/input-events-spell-checking-datatransfer.html

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:

        Add StaticPasteboard.cpp.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::createForInputEvent):

        Initializes a new DataTransfer for the purposes of input events. This takes a HTML and plain text
        representations of the data being inserted and creates a new readonly DataTransfer backed by a StaticPasteboard
        that only knows how to map the "text/plain" data type to the given plaintext string and "text/html" to the
        given HTML text.

        * dom/DataTransfer.h:
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::create):
        (WebCore::InputEvent::InputEvent):
        (WebCore::InputEvent::dataTransfer):
        * dom/InputEvent.h:
        * dom/InputEvent.idl:

        Add the InputEvent.dataTransfer attribute.

        * dom/Node.cpp:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::inputEventDataTransfer):

        Add a new hook for CompositeEditCommands to vend a DataTransfer for the purposes of input events. By default,
        this is null.

        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchInputEvent):
        (WebCore::dispatchBeforeInputEvents):
        (WebCore::dispatchInputEvents):
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::appliedEditing):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::willApplyCommand):
        (WebCore::ReplaceRangeWithTextCommand::doApply):
        (WebCore::ReplaceRangeWithTextCommand::inputEventDataTransfer):
        * editing/ReplaceRangeWithTextCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::willApplyCommand):

        Initialize the ReplacementFragment here before applying the command, adjusting the DocumentFragment to be
        inserted in the process.

        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::inputEventDataTransfer):
        (WebCore::ReplaceSelectionCommand::ensureReplacementFragment):

        Returns the ReplacementFragment used to apply the command, initializing it if necessary and stripping extraneous
        nodes off of the document fragment in the process. Since ReplaceSelectionCommand may be used as a top-level
        editing command or a child of another CompositeEditCommand such as the ReplaceRangeWithTextCommand, the
        ReplacementFragment may be initialized either in willApplyCommand or in doApply.

        * editing/ReplaceSelectionCommand.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::willApplyCommand):
        (WebCore::SpellingCorrectionCommand::doApply):
        (WebCore::SpellingCorrectionCommand::inputEventDataTransfer):
        * editing/SpellingCorrectionCommand.h:

        Using the replacement text fragment, create and return a DataTransfer for input events.

        * platform/Pasteboard.h:
        * platform/StaticPasteboard.cpp: Added.
        (WebCore::StaticPasteboard::create):
        (WebCore::StaticPasteboard::StaticPasteboard):
        (WebCore::StaticPasteboard::hasData):
        (WebCore::StaticPasteboard::types):
        (WebCore::StaticPasteboard::readString):
        * platform/StaticPasteboard.h: Copied from Source/WebCore/dom/InputEvent.cpp.
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::writeMarkup):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::read):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeMarkup):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeMarkup):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeMarkup):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::read):

        To account for virtual methods on Pasteboard, add implementations for methods that were previously defined but
        unimplemented on these platforms.

2016-10-25  Andy Estes  <aestes@apple.com>

        Implement rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=155166
        <rdar://problem/25193787>

        Reviewed by Brent Fulgham.

        Added support for rel=noopener to a and area elements.

        Tests: fast/dom/Window/a-rel-noopener.html
               fast/dom/Window/area-rel-noopener.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement): Stopped initializing m_linkRelations to 0.
        (WebCore::HTMLAnchorElement::parseAttribute): Declared static AtomicStrings for "noreferrer"
        and "noopener", and created a SpaceSplitString from the rel attribute value to test for these
        two values.
        (WebCore::HTMLAnchorElement::hasRel): Updated to use OptionSet::contains().
        (WebCore::HTMLAnchorElement::relList): Added a check for "noopener".
        (WebCore::HTMLAnchorElement::handleClick): Passed NewFrameOpenerPolicy::Suppress to
        FrameLoader::urlSelected() if rel=noopener was specified.
        * html/HTMLAnchorElement.h: Changed the Relation enum to an enum class, removed unused enum
        values, and changed m_linkRelations from a 30-bit unsigned integer to an OptionSet<Relation>
        (HTMLAnchorElement is still 128 bytes on 64-bit).
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Changed to only compute a NewFrameOpenerPolicy from the
        referrer policy if an explicit NewFrameOpenerPolicy isn't specified. Removed the version of
        urlSelected() that did not take a downloadAttribute parameter.
        * loader/FrameLoader.h: Added an Optional<NewFrameOpenerPolicy> parameter to urlSelected(),
        and set a default argument for downloadAttribute instead of having a second version of
        urlSelected().

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

        [MediaStream] Add "has capture device" bit to media state flags
        https://bugs.webkit.org/show_bug.cgi?id=163952

        Reviewed by Jer Noble.

        No new tests, updated fast/mediastream/MediaStream-page-muted.html, media/muted-video-is-playing-audio.html,
        and webaudio/web-audio-is-playing.html.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Set HasMediaCaptureDevice, only set HasActiveMediaCaptureDevice when
          actually producing data.

        * page/MediaProducer.h: Add HasMediaCaptureDevice bit.

        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Return a string representing MediaStateFlags.
        (WebCore::Internals::isPagePlayingAudio): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2016-10-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r207827 and r207828.
        https://bugs.webkit.org/show_bug.cgi?id=163965

        Caused LayoutTest webaudio/web-audio-is-playing.html to time
        out on macOS. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] Add "has capture device" bit to media state
        flags"
        https://bugs.webkit.org/show_bug.cgi?id=163952
        http://trac.webkit.org/changeset/207827

        "[MediaStream] Add "has capture device" bit to media state
        flags"
        https://bugs.webkit.org/show_bug.cgi?id=163952
        http://trac.webkit.org/changeset/207828

2016-10-25  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: skip back support
        https://bugs.webkit.org/show_bug.cgi?id=163725
        <rdar://problem/27989480>

        Reviewed by Dean Jackson.

        We introduce the SkipBackSupport class which brings support for skipping back
        30 seconds into the media by clicking on the skip back button in the media controls.

        Test: http/tests/media/modern-media-controls/skip-back-support/skip-back-support-button-click.html

        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/skip-back-support.js: Copied from Source/WebCore/Modules/modern-media-controls/media/media-controller.js.
        (SkipBackSupport.prototype.get control):
        (SkipBackSupport.prototype.buttonWasClicked):
        (SkipBackSupport):
        * WebCore.xcodeproj/project.pbxproj:

2016-10-25  Commit Queue  <commit-queue@webkit.org>

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

        Broke quip.com so that user can no longer type a space
        (Requested by rniwa on #webkit).

        Reverted changeset:

        "Add a plain space instead of &nbsp; between text nodes"
        https://bugs.webkit.org/show_bug.cgi?id=123163
        http://trac.webkit.org/changeset/207578

2016-10-25  Chris Dumez  <cdumez@apple.com>

        LOG_WITH_STREAM() macro should not have a semi colon at the end
        https://bugs.webkit.org/show_bug.cgi?id=163951

        Reviewed by Simon Fraser.

        * platform/LogMacros.h:

2016-10-25  Chris Dumez  <cdumez@apple.com>

        IDBObjectStore.createIndex() should take a union in parameter
        https://bugs.webkit.org/show_bug.cgi?id=163935

        Reviewed by Darin Adler.

        IDBObjectStore.createIndex() should take a union in parameter:
        - https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore

        No new tests, no expected Web-exposed behavior change.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::isIDBKeyPathValid):
        (WebCore::IDBKeyPath::isValid): Deleted.
        * Modules/indexeddb/IDBKeyPath.h:
        (WebCore::IDBKeyPath::isNull):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:

2016-10-24  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move more types over to the new JSConverter based toJS functions
        https://bugs.webkit.org/show_bug.cgi?id=163920

        Reviewed by Darin Adler.

        - Adds WebIDL-extension type IDLDate, and use it for Date conversions.
        - Move JSDOMIterator over to using IDLType based conversions. Make them more
          explicit by adding a traits template argument which describes the iterator.
        - Add correct parsing for WebIDL iterable, parsing the parameter types into
          domTypes.
        - Support non-Optional nullable types via trait-like functions on IDLTypes.


        * bindings/generic/IDLTypes.h:
        (WebCore::IDLType::isNullValue):
        (WebCore::IDLType::extractValueFromNullable):
        (WebCore::IDLString::isNullValue):
        (WebCore::IDLString::extractValueFromNullable):
        (WebCore::IDLInterface::isNullValue):
        (WebCore::IDLInterface::extractValueFromNullable):
        (WebCore::IDLDate::isNullValue):
        (WebCore::IDLDate::extractValueFromNullable):
        Add isNullValue and extractValueFromNullable functions to allow non-Optional
        based nullable types.
        
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::stylePropertyGetter):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::invokeAttributeChangedCallback):
        Switch to IDLType based toJS.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringOrNull): Deleted.
        (WebCore::jsDateOrNull): Deleted.
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsPair): Deleted.
        (WebCore::toJSNullableString): Deleted.
        Remove now unusued toJS functions.

        * bindings/js/JSDOMConvert.h:
        (WebCore::JSConverter<IDLNullable<T>>::convert):
        Use new functions to detect and extract nullable values.

        (WebCore::Converter<IDLBufferSource>::convert):
        Moved to be with the other converters.

        (WebCore::Converter<IDLDate>::convert):
        (WebCore::JSConverter<IDLDate>::convert):
        Added.

        * bindings/js/JSDOMIterator.h:
        (WebCore::jsPair):
        (WebCore::iteratorCreate):
        (WebCore::IteratorTraits>::asJS):
        (WebCore::appendForEachArguments):
        (WebCore::iteratorForEach):
        (WebCore::IteratorTraits>::destroy):
        (WebCore::IteratorTraits>::next):
        (WebCore::IteratorTraits>::finishCreation):
        (WebCore::IteratorInspector::decltype): Deleted.
        (WebCore::IteratorInspector::test): Deleted.
        (WebCore::JSDOMIterator<JSWrapper>::asJS): Deleted.
        (WebCore::JSDOMIterator<JSWrapper>::destroy): Deleted.
        (WebCore::JSDOMIterator<JSWrapper>::next): Deleted.
        (WebCore::JSDOMIteratorPrototype<JSWrapper>::next): Deleted.
        (WebCore::JSDOMIteratorPrototype<JSWrapper>::finishCreation): Deleted.
        Switch to new Traits based model, and have the generated code pass in 
        the type (map or set) and key/value types. With the explicit types known,
        we can use the new toJS functions.
        
        Also, moved the jsPair functions here from JSDOMBinding.h, since this was
        the only place it was used.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementationIterableFunctions):
        Add iterator trait definition and update for new parameters to JSDOMIterator
        and JSDOMIteratorPrototype.

        (GetBaseIDLType):
        Add IDLDate, and move IDLBufferSource up to the simple path.

        (JSValueToNativeIsHandledByDOMConvert):
        Allow Date.

        (JSValueToNative):
        Remove special case for Date.

        (NativeToJSValueIsHandledByDOMConvert):
        Allow Date and remove restriction of nullable string-like types.

        (NativeToJSValueDOMConvertNeedsState):
        Add Date to list of types needing state.

        (NativeToJSValue):
        Remove special cases for Date and nullable-strings.

        * bindings/scripts/IDLParser.pm:
        (parseOptionalIterableInterface):
        Add correct parsing of iterable.

        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        Update test results.

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

        [MediaStream] Add "has capture device" bit to media state flags
        https://bugs.webkit.org/show_bug.cgi?id=163952

        Reviewed by Jer Noble.

        No new tests, updated fast/mediastream/MediaStream-page-muted.html and media/muted-video-is-playing-audio.html.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Set HasMediaCaptureDevice, only set HasActiveMediaCaptureDevice when
          actually producing data.

        * page/MediaProducer.h: Add HasMediaCaptureDevice bit.

        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Return a string representing MediaStateFlags.
        (WebCore::Internals::isPagePlayingAudio): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2016-10-25  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support new IDBTransaction interfaces.
        <rdar://problem/28806928> and https://bugs.webkit.org/show_bug.cgi?id=163927

        Reviewed by Sam Weinig.

        Tests: storage/indexeddb/modern/idbtransaction-objectstores-1-private.html
               storage/indexeddb/modern/idbtransaction-objectstores-1.html
               At least partially passing results on 5 previously failed W3C tests.

        The "new IDBTransaction interfaces" really just means adding the property IDBTransaction.objectStoreNames.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStoreNames):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:

2016-10-25  Youenn Fablet  <youenn@apple.com>

        MediaEndpointConfiguration does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=163888

        Reviewed by Eric Carlson.

        No change of behavior.

        Updating MediaEndpoint to take a MediaEndpointConfiguration&& instead of a RefPtr<MediaEndpointConfiguration>&&.
        This allows ensuring that the configuration is not null and removes the need to ref-count it.

        Removing ref-counting from MediaEndpointConfiguration and its related IceServer that is now a struct.
        Updated MediaEndpointOwr and mock implementations accordingly.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setConfiguration):
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/MediaEndpoint.h:
        * platform/mediastream/MediaEndpointConfiguration.cpp:
        (WebCore::MediaEndpointConfiguration::MediaEndpointConfiguration):
        * platform/mediastream/MediaEndpointConfiguration.h:
        (WebCore::MediaEndpointConfiguration::iceServers):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::setConfiguration):
        (WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
        * platform/mock/MockMediaEndpoint.cpp:
        * platform/mock/MockMediaEndpoint.h:

2016-10-25  Youenn Fablet  <youenn@apple.com>

        CachedResourceLoader should set headers of the HTTP request prior checking for the cache
        https://bugs.webkit.org/show_bug.cgi?id=163103

        Reviewed by Darin Adler.

        No expected change of behavior.

        Moved referrer, user-agent, and origin headers setting to CachedResourceRequest/CachedResourceLoader before checking the cache.
        This allows simplifying vary header checks and is more inline with the fetch specification.

        To compute the referrer value, we need to know whether the request is cross-origin.
        A helper function isRequestCrossOrigin is added for that purpose and is also used in CachedResource to set its initial response tainting.

        We should disable setting user-agent and origin headers by FrameLoader for subresources since this is now done in CachedResourceLoader.
        This could be done as a follow-up patch.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::varyHeaderValuesMatch):
        (WebCore::addAdditionalRequestHeadersToRequest): Deleted.
        (WebCore::CachedResource::addAdditionalRequestHeaders): Deleted.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateForAccessControl):
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders):
        (WebCore::isRequestCrossOrigin):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::setOrigin):

2016-10-25  Andreas Kling  <akling@apple.com>

        More PassRefPtr purging in WebCore.
        <https://webkit.org/b/163895>

        Reviewed by Antti Koivisto.

        Remove PassRefPtr usage in RenderStyle, RenderTheme and Scrollbar, then fix up all the fallout.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertQuotes):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList):
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * html/InputType.cpp:
        (WebCore::InputType::themeSupportsDataListUI):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldHaveSpinButton):
        (WebCore::TextFieldInputType::shouldHaveCapsLockIndicator):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * page/FrameView.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::RefCountedPropertyWrapper::RefCountedPropertyWrapper):
        (WebCore::PropertyWrapperClipPath::PropertyWrapperClipPath):
        (WebCore::PropertyWrapperShape::PropertyWrapperShape):
        (WebCore::StyleImagePropertyWrapper::StyleImagePropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::FillLayerStyleImagePropertyWrapper):
        * platform/PopupMenuClient.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::createNativeScrollbar):
        * platform/Scrollbar.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::createScrollbar):
        * rendering/RenderMenuList.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar):
        * rendering/RenderScrollbar.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::createScrollbar):
        * rendering/RenderSearchField.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::defaultTheme):
        * rendering/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeEfl.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):
        * rendering/RenderWidget.h:
        * rendering/style/CursorData.h:
        (WebCore::CursorData::CursorData):
        (WebCore::CursorData::setImage):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::setImage):
        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):
        * rendering/style/QuotesData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCursor):
        (WebCore::RenderStyle::setCursorList):
        (WebCore::RenderStyle::setQuotes):
        (WebCore::RenderStyle::setWillChange):
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setListStyleImage):
        (WebCore::RenderStyle::setBorderImageSource):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setMaskImage):
        (WebCore::RenderStyle::setMaskBoxImageSource):
        (WebCore::RenderStyle::setBoxReflect):
        (WebCore::RenderStyle::setShapeOutside):
        (WebCore::RenderStyle::setClipPath):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::cssValue):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::cssValue):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StyleMultiColData.h:
        * rendering/style/StyleRareInheritedData.h:

2016-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Custom elements reactions should have a queue per element
        https://bugs.webkit.org/show_bug.cgi?id=163878

        Reviewed by Antti Koivisto.

        This patch splits the custom elements reaction queue into per element to match the latest HTML specifications:
        https://html.spec.whatwg.org/multipage/scripting.html#custom-element-reaction-queue
        and introduces the backup element queue:
        https://html.spec.whatwg.org/multipage/scripting.html#backup-element-queue

        In terms of code changes, CustomElementReactionStack now holds onto ElementQueue, an ordered list of elements,
        and make each ElementRareData keep its own CustomElementReactionQueue. CustomElementReactionQueue is created
        for each custom element when it is synchronously constructed or enqueued to upgrade.

        Because each reaction queue is now specific to each element, CustomElementReactionQueue instead of
        CustomElementReactionQueueItem stores JSCustomElementInterface.

        The backup element queue is created as a singleton returned by CustomElementReactionStack's backupElementQueue,
        and ensureBackupQueue() schedules a new mirotask to process the backup queue when there isn't already one.

        ensureCurrentQueue() now returns a reference to CustomElementReactionQueue instead of a pointer since it can
        fallback to the backup queue when the stack is empty as specified:
        https://html.spec.whatwg.org/multipage/scripting.html#enqueue-an-element-on-the-appropriate-element-queue

        Note that ensureCurrentQueue() may insert the same element multiple times into the element queue for now since
        avoiding this duplication would require either doing O(n) iteration on m_elements or adding a HashSet.
        We can revisit this in the future if the reaction queue is found to grow beyond a few entries since elements in
        the element queue will have duplicates only when each reaction queue has more than one item.

        Tests: fast/custom-elements/backup-element-queue.html
               fast/custom-elements/custom-element-reaction-queue.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::upgradeElement):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueueItem::CustomElementReactionQueueItem):
        (WebCore::CustomElementReactionQueueItem::invoke): Removed the check for isFailedCustomElement since the queue
        is explicitly cleared in Element::setIsFailedCustomElement.
        (WebCore::CustomElementReactionQueue::CustomElementReactionQueue): Now takes JSCustomElementInterface since
        each item in the queue no longer stores Element or JSCustomElementInterface.
        (WebCore::CustomElementReactionQueue::clear):
        (WebCore::CustomElementReactionQueue::enqueueElementUpgrade):
        (WebCore::CustomElementReactionQueue::enqueueElementUpgradeIfDefined):
        (WebCore::CustomElementReactionQueue::enqueueConnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions):
        (WebCore::CustomElementReactionQueue::invokeAll):
        (WebCore::CustomElementReactionStack::ElementQueue::add): Added.
        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll): Added.
        (WebCore::CustomElementReactionStack::ensureCurrentQueue):
        (WebCore::BackupElementQueueMicrotask): Added.
        (WebCore::CustomElementReactionStack::ensureBackupQueue): Added.
        (WebCore::CustomElementReactionStack::processBackupQueue): Added.
        (WebCore::CustomElementReactionStack::backupElementQueue): Added.
        * dom/CustomElementReactionQueue.h:
        * dom/CustomElementRegistry.cpp:
        (WebCore::enqueueUpgradeInShadowIncludingTreeOrder):
        * dom/Document.cpp:
        (WebCore::createFallbackHTMLElement):
        * dom/Element.cpp:
        (WebCore::Element::setIsDefinedCustomElement): Create a new reaction queue if there isn't already one; when
        this element had been upgraded, the reaction queue have already been created in Element::enqueueToUpgrade.
        (WebCore::Element::setIsFailedCustomElement): Clear the reaction queue when the upgrading had failed.
        (WebCore::Element::enqueueToUpgrade): Added.
        (WebCore::Element::reactionQueue): Added.
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::customElementReactionQueue): Replaced customElementInterface.
        (WebCore::ElementRareData::setCustomElementReactionQueue): Replaced setCustomElementReactionQueue.

2016-10-24  Jiewen Tan  <jiewen_tan@apple.com>

        Update SubtleCrypto::generateKey to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=163718
        <rdar://problem/28864380>

        Reviewed by Chris Dumez.

        This patch does following few things:
        1. It updates the SubtleCrypto::generateKey method to match the latest spec:
           https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-generateKey.
           It also refers to the latest Editor's Draft at a certain degree:
           https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-generateKey.
        2. It implements generateKey operations of following algorithms: AES-CBC, AES-KW,
           HMAC, RSAES-PKCS1-V1_5, RSASSA-PKCS1-V1_5, and RSA-OAEP.
        3. It replaces SPECIALIZE_TYPE_TRAITS_CRYPTO_ALGORITHM_PARAMETERS with
        SPECIALIZE_TYPE_TRAITS_CRYPTO_ALGORITHM_PARAMETERS_DEPRECATED for deprecated params.
        4. It fixes https://bugs.webkit.org/show_bug.cgi?id=129750 as well.

        Tests: crypto/subtle/aes-cbc-generate-key-length-128.html
               crypto/subtle/aes-cbc-generate-key-length-192.html
               crypto/subtle/aes-cbc-generate-key-length-256.html
               crypto/subtle/aes-generate-key-malformed-parameters.html
               crypto/subtle/aes-kw-generate-key.html
               crypto/subtle/generate-key-malformed-paramters.html
               crypto/subtle/hmac-generate-key-customized-length.html
               crypto/subtle/hmac-generate-key-hash-object.html
               crypto/subtle/hmac-generate-key-malformed-parameters.html
               crypto/subtle/hmac-generate-key-sha1.html
               crypto/subtle/hmac-generate-key-sha224.html
               crypto/subtle/hmac-generate-key-sha256.html
               crypto/subtle/hmac-generate-key-sha384.html
               crypto/subtle/hmac-generate-key-sha512.html
               crypto/subtle/rsa-generate-key-malformed-parameters.html
               crypto/subtle/rsa-oaep-generate-key.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html
               crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/webkitSubtle/hmac-generate-key.html:
               crypto/workers/subtle/aes-generate-key.html
               crypto/workers/subtle/hmac-generate-key.html
               crypto/workers/subtle/rsa-generate-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp: Added.
        (WebCore::toHashIdentifier):
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::createAlgorithm):
        (WebCore::rejectWithException):
        (WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
        (WebCore::JSSubtleCrypto::generateKey):
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::JSWebKitSubtleCrypto::generateKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::generateKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParameters.h: Added.
        (WebCore::CryptoAlgorithmParameters::CryptoAlgorithmParameters):
        (WebCore::CryptoAlgorithmParameters::~CryptoAlgorithmParameters):
        (WebCore::CryptoAlgorithmParameters::parametersClass):
        * crypto/CryptoAlgorithmParameters.idl: Added.
        * crypto/CryptoAlgorithmParametersDeprecated.h:
        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::setUsagesBitmap):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyPair.idl:
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::generate):
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/parameters/AesKeyGenParams.idl: Added.
        * crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmHmacParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        (WebCore::CryptoAlgorithmRsaKeyGenParams::arrayToVector):
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHashDeprecated.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParamsDeprecated.h:
        * crypto/parameters/HmacKeyGenParams.idl: Added.
        * crypto/parameters/RsaHashedKeyGenParams.idl: Added.
        * crypto/parameters/RsaKeyGenParams.idl: Added.

2016-10-24  Chris Dumez  <cdumez@apple.com>

        IDBDatabase.createObjectStore() should take a IDBObjectStoreParameters dictionary in parameter
        https://bugs.webkit.org/show_bug.cgi?id=163916

        Reviewed by Darin Adler.

        IDBDatabase.createObjectStore() should take a IDBObjectStoreParameters dictionary in parameter:
        - https://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase
        - https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters

        Align our IDL with the specification.

        No new tests, no expected Web-exposed behavior change.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::IDBKeyPath):
        * Modules/indexeddb/IDBKeyPath.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyPathFromValue): Deleted.
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSIDBDatabaseCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        (GenerateConstructorDefinition):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::create):
        * dom/MessageEvent.h:
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::setTypeConversionsDictionary):

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        URLParser should match old URL::parse with %2E in path
        https://bugs.webkit.org/show_bug.cgi?id=163929

        Reviewed by Alexey Proskuryakov.

        Covered by updated API tests, which show that URLParser now matches URL::parse in these cases.
        Also covered by newly failing web platform tests, which were failing before URLParser was enabled.
        If https://github.com/whatwg/url/issues/87 is resolved we can change behavior to match.

        * platform/URLParser.cpp:
        (WebCore::URLParser::isSingleDotPathSegment):
        (WebCore::URLParser::isDoubleDotPathSegment):
        (WebCore::URLParser::consumeSingleDotPathSegment):
        (WebCore::URLParser::consumeDoubleDotPathSegment):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::isPercentEncodedDot): Deleted.

2016-10-24  Zalan Bujtas  <zalan@apple.com>

        Do not update selection rect on dirty lineboxes.
        https://bugs.webkit.org/show_bug.cgi?id=163862
        <rdar://problem/28813156>

        Reviewed by Simon Fraser.

        In certain cases RenderBlock::updateFirstLetter() triggers
        unwanted render tree mutation while the caller assumes intact renderers.
        This patch ensures that no renderers gets destroyed while computing the preferred widths
        when we are outside of layout context.

        Test: fast/css-generated-content/dynamic-first-letter-selection-clear-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlock.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):
        * 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:

2016-10-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207795.

        Introduced API test failures on iOS and macOS.

        Reverted changeset:

        "URLParser should match old URL::parse with %2E in path"
        https://bugs.webkit.org/show_bug.cgi?id=163929
        http://trac.webkit.org/changeset/207795

2016-10-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix Windows build after r207787
        https://bugs.webkit.org/show_bug.cgi?id=163657

        Make the constructor public in DOMJIT::AbstractHeapRepository to make Windows bot green.
        It's a bit unfortunate that we need to introduce a workaround here.

        * domjit/DOMJITAbstractHeapRepository.h:

2016-10-24  Chris Dumez  <cdumez@apple.com>

        event.(dataTransfer|clipboardData).getData('text/html') (onpaste, ondrop)
        https://bugs.webkit.org/show_bug.cgi?id=19893
        <rdar://problem/6055546>

        Reviewed by Ryosuke Niwa.

        We now write selection as HTML as well to the pasteboard so that
        event.(dataTransfer|clipboardData).getData('text/html') now works.

        I have verified manually that it is still possible to copy text from
        Safari and paste it to Excel 2011 Mac after this change. The text is
        now pasted as HTML instead of text, which is fine because Excel can
        display HTML.

        No new tests, unskipped existing tests.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::selectionInHTMLFormat):
        (WebCore::Editor::writeSelectionToPasteboard):
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        URLParser should match old URL::parse with %2E in path
        https://bugs.webkit.org/show_bug.cgi?id=163929

        Reviewed by Alexey Proskuryakov.

        Covered by updated API tests, which show that URLParser now matches URL::parse in these cases.
        Also covered by newly failing web platform tests, which were failing before URLParser was enabled.
        If https://github.com/whatwg/url/issues/87 is resolved we can change behavior to match.

        * platform/URLParser.cpp:
        (WebCore::URLParser::isSingleDotPathSegment):
        (WebCore::URLParser::isDoubleDotPathSegment):
        (WebCore::URLParser::consumeSingleDotPathSegment):
        (WebCore::URLParser::consumeDoubleDotPathSegment):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::isPercentEncodedDot): Deleted.

2016-10-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] CMake build type is not set.
        https://bugs.webkit.org/show_bug.cgi?id=163917

        Reviewed by Alex Christensen.

        The CMAKE_BUILD_TYPE variable should be set to Debug or Release.

        * WebCore.vcxproj/WebCore.proj:

2016-10-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix Windows build after r207787
        https://bugs.webkit.org/show_bug.cgi?id=163657

        According to the similar code in WebKit, I guess that
        Visual C++ requires friend class declaration is done
        in the private section to access private members.

        And I also changed ::instance to ::shared to align to
        the existing WebCore code.

        * domjit/DOMJITAbstractHeapRepository.cpp:
        (WebCore::DOMJIT::AbstractHeapRepository::shared):
        (WebCore::DOMJIT::AbstractHeapRepository::instance): Deleted.
        * domjit/DOMJITAbstractHeapRepository.h:
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::NodeFirstChildDOMJIT::callDOM):
        (WebCore::NodeLastChildDOMJIT::callDOM):
        (WebCore::NodeNextSiblingDOMJIT::callDOM):
        (WebCore::NodePreviousSiblingDOMJIT::callDOM):
        (WebCore::NodeParentNodeDOMJIT::callDOM):

2016-10-24  Simon Fraser  <simon.fraser@apple.com>

        Fix the lifetime of strings used in LOG_WITH_STREAM
        https://bugs.webkit.org/show_bug.cgi?id=163923

        Reviewed by Brent Fulgham.

        Make sure the const char* passed to WTFLog() outlives the call.

        Removed logFunctionResult which wasn't used anywhere else, and encourages this bad
        pattern.

        * platform/LogMacros.h:
        * platform/Logging.cpp:
        (WebCore::logFunctionResult): Deleted.

2016-10-24  Chris Dumez  <cdumez@apple.com>

        Reduce special handling for typed arrays in JSDOMConvert.h
        https://bugs.webkit.org/show_bug.cgi?id=163907

        Reviewed by Sam Weinig.

        Reduce special handling for typed arrays in JSDOMConvert.h by adding a toWrapped() static
        function on JSGenericTypedArrayView, similarly to other wrapper types.

        No new tests, no web-exposed behavior change.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLInterface<JSC::GenericTypedArrayView<Adaptor>>>::convert): Deleted.

2016-10-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207783.

        This change appears to have caused fast/selectors/invalid-
        functional-pseudo-class.html to crash on iOS and macOS

        Reverted changeset:

        "[CSS Parser] Fix :lang argument parsing"
        https://bugs.webkit.org/show_bug.cgi?id=163913
        http://trac.webkit.org/changeset/207783

2016-10-24  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support new IDBKeyRange interfaces.
        <rdar://problem/28806929> and https://bugs.webkit.org/show_bug.cgi?id=163910

        Reviewed by Andy Estes.

        No new tests (Covered by additions to existing test)

        The "new IDBKeyRanges interfaces" really just means adding the instance method IDBKeyRange.contains.

        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::contains):
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBKeyRange.idl:

2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
        https://bugs.webkit.org/show_bug.cgi?id=163657

        Reviewed by Saam Barati.

        CallDOMPatchpoint now has the way to tell its effects to DFG and FTL compilers.
        WebCore DOMJIT::AbstractHeapRepository will construct the hierarchy of the abstract
        heap. And then it encodes these information into the pairs of the integers.

        And this patch also changes the DOMJIT::PatchpointParams' parameter order.
        So we change them in all the DOMJIT::CallDOMPatchpoint sites.

        * CMakeLists.txt:
        * ForwardingHeaders/domjit/DOMJITAbstractHeap.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        * ForwardingHeaders/domjit/DOMJITEffect.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        * ForwardingHeaders/domjit/DOMJITHeapRange.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        * WebCore.xcodeproj/project.pbxproj:
        * domjit/DOMJITAbstractHeapRepository.cpp: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (WebCore::DOMJIT::AbstractHeapRepository::AbstractHeapRepository):
        (WebCore::DOMJIT::AbstractHeapRepository::instance):
        * domjit/DOMJITAbstractHeapRepository.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJITHelpers::branchIfNotWorldIsNormal): Deleted.
        (WebCore::DOMJITHelpers::branchIfNotWeakIsLive): Deleted.
        (WebCore::DOMJITHelpers::tryLookUpWrapperCache): Deleted.
        (WebCore::DOMJITHelpers::toWrapper): Deleted.
        (WebCore::DOMJITHelpers::branchIfDOMWrapper): Deleted.
        (WebCore::DOMJITHelpers::branchIfNotDOMWrapper): Deleted.
        (WebCore::DOMJITHelpers::branchIfNode): Deleted.
        (WebCore::DOMJITHelpers::branchIfNotNode): Deleted.
        (WebCore::DOMJITHelpers::branchIfElement): Deleted.
        (WebCore::DOMJITHelpers::branchIfNotElement): Deleted.
        (WebCore::DOMJITHelpers::branchIfDocumentWrapper): Deleted.
        (WebCore::DOMJITHelpers::branchIfNotDocumentWrapper): Deleted.
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::createCallDOMForOffsetAccess):
        (WebCore::checkNode):
        (WebCore::NodeFirstChildDOMJIT::checkDOM):
        (WebCore::NodeFirstChildDOMJIT::callDOM):
        (WebCore::NodeLastChildDOMJIT::checkDOM):
        (WebCore::NodeLastChildDOMJIT::callDOM):
        (WebCore::NodeNextSiblingDOMJIT::checkDOM):
        (WebCore::NodeNextSiblingDOMJIT::callDOM):
        (WebCore::NodePreviousSiblingDOMJIT::checkDOM):
        (WebCore::NodePreviousSiblingDOMJIT::callDOM):
        (WebCore::NodeParentNodeDOMJIT::checkDOM):
        (WebCore::NodeParentNodeDOMJIT::callDOM):
        (WebCore::NodeNodeTypeDOMJIT::checkDOM):
        (WebCore::NodeNodeTypeDOMJIT::callDOM):

2016-10-24  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix :lang argument parsing
        https://bugs.webkit.org/show_bug.cgi?id=163913

        Reviewed by Zalan Bujtas.

        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        Modify the map to support versions of the function pseudos
        without the left paren included.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        * css/parser/CSSParserValues.h:
        Add a helper to just directly pass an AtomicString Vector through.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::consumeLangArgumentList):
        (WebCore::CSSSelectorParser::consumePseudo):
        Add a new consumeLangArgumentList to collect the languages into
        an AtomicString Vector.

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix AppleWin build after r207720.

        * html/canvas/OESVertexArrayObject.cpp:

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix AppleWin build after r207720.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r207767 and r207769

        * css/CSSAllInOne.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::getProtectionSpace):

2016-10-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] AVCF based media engine does not block cross-site/cross-domain loads.
        https://bugs.webkit.org/show_bug.cgi?id=163783

        Reviewed by Brent Fulgham.

        Prevent cross-site/cross-domain loads by setting appropriate AVCF options.

        No new tests; covered by media/video-canvas-source.html. Media tests are
        currently skipped on Windows.

        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::resolvedURL):
        (WebCore::MediaPlayerPrivateAVFoundationCF::hasSingleSecurityOrigin):
        (WebCore::AVFWrapper::createAssetForURL):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

2016-10-24  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang
        https://bugs.webkit.org/show_bug.cgi?id=163908
        rdar://problem/28852016

        Reviewed by Tim Horton.

        Use the macros that names the soft-linked functions in such a way that they won't conflict with actual functions.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenIsMonochrome):
        (WebCore::screenHasInvertedColors):
        (WebCore::screenSize):
        (WebCore::availableScreenSize):
        (WebCore::screenScaleFactor):

2016-10-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary unused variable stubs
        https://bugs.webkit.org/show_bug.cgi?id=163688

        Reviewed by Simon Fraser.

        * Modules/applepay/cocoa/PaymentCocoa.mm:
        (WebCore::toDictionary):
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::toDictionary):

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        Try to fix Windows build after r207767
        https://bugs.webkit.org/show_bug.cgi?id=163891

        * DerivedSources.cpp:

2016-10-24  Zan Dobersek  <zdobersek@igalia.com>

        [CodeGenerator] Only allow a single interface or standalone dictionary per WebIDL file
        https://bugs.webkit.org/show_bug.cgi?id=163889

        Reviewed by Chris Dumez.

        Assert that there's only one interface or standalone dictionary
        per WebIDL input file, and exit from the generator otherwise.

        This avoids potential linking issues where multiple enumeration
        and dictionary bindings code can be generated if the source
        WebIDL for them is specified in a file that contains multiple
        interfaces or standalone dictionaries.

        Additionally, the generator now also exits if it fails to
        generate code for any interface of standalone dictionary. This
        should avoid processing WebIDL files that are empty in
        substance.

        TestException.idl and TestInterface.idl files have their second
        interfaces removed. In place of those a new testing IDL file is
        added, TestInterfaceLeadingUnderscore.idl. Like the two removed
        interfaces, it tests that the leading underscode in the
        identifier is removed by the generator.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: Added.
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::create):
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::createStructure):
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::JSTestInterfaceLeadingUnderscorePrototype):
        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::prototypeForStructure):
        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::finishCreation):
        (WebCore::JSTestInterfaceLeadingUnderscore::JSTestInterfaceLeadingUnderscore):
        (WebCore::JSTestInterfaceLeadingUnderscore::createPrototype):
        (WebCore::JSTestInterfaceLeadingUnderscore::prototype):
        (WebCore::JSTestInterfaceLeadingUnderscore::destroy):
        (WebCore::BindingCaller<JSTestInterfaceLeadingUnderscore>::castForAttribute):
        (WebCore::jsTestInterfaceLeadingUnderscoreReadonly):
        (WebCore::jsTestInterfaceLeadingUnderscoreReadonlyGetter):
        (WebCore::jsTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::JSTestInterfaceLeadingUnderscore::getConstructor):
        (WebCore::JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestInterfaceLeadingUnderscoreOwner::finalize):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        (WebCore::JSTestInterfaceLeadingUnderscore::toWrapped):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h: Renamed from Source/WebCore/bindings/scripts/test/JS/JSreadonly.h.
        (WebCore::JSTestInterfaceLeadingUnderscore::create):
        (WebCore::JSTestInterfaceLeadingUnderscore::createStructure):
        (WebCore::JSTestInterfaceLeadingUnderscore::finishCreation):
        (WebCore::wrapperOwner):
        (WebCore::wrapperKey):
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSattribute.cpp: Removed.
        * bindings/scripts/test/JS/JSattribute.h: Removed.
        * bindings/scripts/test/JS/JSreadonly.cpp: Removed.
        * bindings/scripts/test/TestException.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestInterfaceLeadingUnderscore.idl: Copied from Source/WebCore/bindings/scripts/test/TestException.idl.

2016-10-21  Alex Christensen  <achristensen@webkit.org>

        URL::port should return Optional<uint16_t>
        https://bugs.webkit.org/show_bug.cgi?id=163806

        Reviewed by Darin Adler.

        A URL without a port is different than a URL with port 0.
        This matches the spec, Chrome, and Firefox.

        Covered by newly-passing web platform tests.

        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::IDBDatabaseIdentifier::isHashTableDeletedValue):
        (WebCore::IDBDatabaseIdentifier::hash):
        (WebCore::IDBDatabaseIdentifier::isValid):
        (WebCore::IDBDatabaseIdentifier::isEmpty):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::hostName):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::applyBlockedStatusToRequest):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::protocol):
        (WebCore::URLUtils<T>::host):
        (WebCore::URLUtils<T>::port):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isValidCrossOriginRedirectionURL):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::isRemoteWebArchive):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        * loader/cache/CachedResource.cpp:
        (WebCore::shouldCacheSchemeIndefinitely):
        (WebCore::CachedResource::freshnessLifetime):
        * page/Location.cpp:
        (WebCore::Location::protocol):
        (WebCore::Location::host):
        (WebCore::Location::port):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isSecure):
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::toRawString):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::databaseIdentifier):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::port):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::debugString):
        * page/SecurityOriginData.h:
        (): Deleted.
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource):
        (WebCore::ContentSecurityPolicy::allowConnectToSource):
        (WebCore::ContentSecurityPolicy::allowBaseURI):
        (WebCore::stripURLForUseInReport):
        (WebCore::ContentSecurityPolicy::upgradeInsecureRequestIfNeeded):
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::ContentSecurityPolicySource):
        (WebCore::ContentSecurityPolicySource::portMatches):
        * page/csp/ContentSecurityPolicySource.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parse):
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        (WebCore::ContentSecurityPolicySourceList::parsePort):
        * page/csp/ContentSecurityPolicySourceList.h:
        * platform/SchemeRegistry.h:
        * platform/URL.cpp:
        (WebCore::URL::protocol):
        (WebCore::URL::port):
        (WebCore::URL::serialize):
        (WebCore::portAllowed):
        (WebCore::defaultPortsMap): Deleted.
        (WebCore::defaultPortForProtocol): Deleted.
        (WebCore::isDefaultPortForProtocol): Deleted.
        * platform/URL.h:
        (WebCore::URL::hasPort): Deleted.
        * platform/URLParser.cpp:
        (WebCore::defaultPortForProtocol):
        (WebCore::isDefaultPortForProtocol):
        (WebCore::URLParser::parsePort):
        (WebCore::isDefaultPort): Deleted.
        * platform/network/CredentialStorage.cpp:
        (WebCore::originStringFromURL):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::platformClose):
        (WebCore::SocketStreamHandleImpl::port):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::protocol):
        (WebCore::WorkerLocation::host):
        (WebCore::WorkerLocation::port):

2016-10-24  Zan Dobersek  <zdobersek@igalia.com>

        [CodeGeneratorJS] Support enums for standalone dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=163885

        Reviewed by Youenn Fablet.

        Add support for enumerations in WebIDL files that specify
        standalone dictionaries. Implementation of this is pretty
        straight-forward and mirrors interface and callback generators
        by calling GenerateEnumerations{Header,Implementation}Content()
        functions in GenerateDictionary{Header,Implementation}().

        In GenerateEnumerationsImplementationContent(), the
        NeverDestroyed.h header is added to the implementation includes
        since that class is used to hold an array of possible enum
        values.

        A test enum is added to the TestStandaloneDictionary.idl file
        and the baselines are updated to reflect the new capability.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionary):
        (GenerateEnumerationsImplementationContent):
        (GenerateDictionaryHeader):
        (GenerateDictionaryImplementation):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertEnumerationToJS):
        (WebCore::parseEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>):
        (WebCore::convertEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>):
        (WebCore::expectedEnumerationValues<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>):
        (WebCore::convertDictionary<DictionaryImplName>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/TestStandaloneDictionary.idl:

2016-10-24  Dave Hyatt  <hyatt@apple.com>

        Remove CSSCharsetRule from the CSS OM
        https://bugs.webkit.org/show_bug.cgi?id=163891

        Reviewed by Darin Adler.

        Remove CSSCharsetRule from the CSS OM. All other browser engines have made this
        change. This eliminates the weird overloading of isCharsetRule to match both
        CSSCharsetRule and StyleRuleCharset (only used by the new parser).

        Fix the destroy() method in StyleRuleBase to clean up StyleRuleCharsets created
        by the new parser properly.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSCharsetRule.cpp: Removed.
        * css/CSSCharsetRule.h: Removed.
        * css/CSSCharsetRule.idl: Removed.
        * css/CSSPropertySourceData.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::item):
        (WebCore::CSSStyleSheet::rules):
        * css/CSSStyleSheet.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):

2016-10-24  Zan Dobersek  <zdobersek@igalia.com>

        [CodeGeneratorJS] Standalone dictionaries have misplaced build guards
        https://bugs.webkit.org/show_bug.cgi?id=163881

        Reviewed by Chris Dumez.

        Build guards that are generated from the Conditional attribute
        on WebIDL dictionary declarations properly guard the relevant
        convertDictionary() functions for WebIDL files that also specify
        interfaces. But for standalone dictionaries these build guards
        should guard the complete header and implementation files, much
        like this is done for files that originate from interfaces or
        callbacks.

        Before this patch, guarding a standalone dictionary resulted in
        malformed output because GenerateHeaderContentHeader() and
        GenerateImplementationContentHeader() functions both generated
        the #if macro that would guard the whole file, but
        GenerateDictionary{Header,Implementation}() didn't generate the
        closing #endif.

        CodeGeneratorJS.pm now passes the conditional string, if any,
        to GenerateDictionary{Header,Implementation}Content() functions
        in case of a non-standalone dictionary. Otherwise, the
        conditional string, if any, is used to guard the complete
        header and implementation files.

        Generator tests are updated to cover various build guard
        combinations on dictionaries in TestObj.idl, and the standalone
        dictionary WebIDL file now has a Conditional attribute to check
        that the build guards cover complete generated header and
        implementation files.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryHeaderContent):
        (GenerateDictionariesHeaderContent):
        (GenerateDictionaryImplementationContent):
        (GenerateDictionariesImplementationContent):
        (GenerateDictionaryHeader):
        (GenerateDictionaryImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryA>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryB>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryC>):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestStandaloneDictionary.idl:

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

        [MediaStream] Separate media capture and audio playback muting
        https://bugs.webkit.org/show_bug.cgi?id=163855
        <rdar://problem/28827186>

        Reviewed by Darin Adler.

        Test: fast/mediastream/MediaStream-page-muted.html

        Change page.muted from a bool to a bitfield so audio and media capture muted are independent.
        Fix a couple of bugs in the mock media capture device uncovered by new test case.
        
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::pageMutedStateDidChange): page.isMuted -> page.mutedState.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::pageMutedStateDidChange): Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateVolume): Ditto.
        (WebCore::HTMLMediaElement::effectiveMuted): Ditto.

        * page/MediaProducer.h: Add MutedState enum.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setMuted): Take MutedStateFlags instead of bool. m_muted -> m_mutedState.
        * page/Page.h:

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::startProducingData): Call setMuted.
        (WebCore::MockRealtimeMediaSource::stopProducingData): Ditto.
        * platform/mock/MockRealtimeMediaSource.h:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::stopProducingData): Call correct base class method.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageMuted): Change parameter from a bool to a string.
        * testing/Internals.h:

        * testing/Internals.idl:

2016-10-24  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp: Rearranged includes
        so they are inside the conditional as they should be.

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Activate WEB_RTC compilation flags for Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=163886

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Fixing compilation errors due to missing WEBCORE_EXPORT, missing method and missing override keywords.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::SDPProcessor::generate):
        (WebCore::SDPProcessor::parse):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::createMuted):

2016-10-24  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBIndex name assignment.
        <rdar://problem/28806932> and https://bugs.webkit.org/show_bug.cgi?id=163805

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/index-rename-1-private.html
               storage/indexeddb/modern/index-rename-1.html

        Touches a *lot* of code sites, but none of them are particularly interesting.
        They are all just getting the new name spread out to all of the various objects that need it.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::renameIndex):
        * Modules/indexeddb/IDBDatabase.h:

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::setName):
        (WebCore::IDBIndex::rollbackInfoForVersionChangeAbort):
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):
        (WebCore::IDBObjectStore::renameReferencedIndex):
        (WebCore::IDBObjectStore::rollbackInfoForVersionChangeAbort): Deleted.
        * Modules/indexeddb/IDBObjectStore.h:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::renameIndexOnServer):
        (WebCore::IDBTransaction::didRenameIndexOnServer):
        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::renameIndex):
        * Modules/indexeddb/client/IDBConnectionProxy.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::renameIndex):
        (WebCore::IDBClient::IDBConnectionToServer::didRenameIndex):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::createTransactionOperation):

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::renameIndex):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::indexRenamed):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::renameIndex):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryIndex.h:
        (WebCore::IDBServer::MemoryIndex::rename):

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::renameIndex):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performRenameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformRenameIndex):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBIndexInfo.h:
        (WebCore::IDBIndexInfo::rename):

        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::infoForExistingIndex):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::renameIndexSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didRenameIndex):
        (WebCore::InProcessIDBServer::renameIndex):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2016-10-24  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix -webkit-box-reflect parsing
        https://bugs.webkit.org/show_bug.cgi?id=163890

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeReflect):
        Do a WTFMove on the mask instead of a .releaseNonNull(), since mask can be a nullptr.
        Exactly matches the old parser.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeValue):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        (WebCore::CSSPropertyParserHelpers::consumeUrl):
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientPoint):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):
        (WebCore::CSSPropertyParserHelpers::consumeImageSet):
        Clean up all instances of CSSPrimitiveValue::create to use the CSSValuePool.

2016-10-21  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Concatenate JS and CSS files into a single JS and CSS resources
        https://bugs.webkit.org/show_bug.cgi?id=163785
        <rdar://problem/28890058>

        Reviewed by Darin Adler.

        Concatenate CSS and JS resources for modern media controls into single JS and CSS files
        during build and load these single resources alone at runtime.

        * Modules/modern-media-controls/js-files: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):

2016-10-24  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Unprefix -webkit-writing-mode
        https://bugs.webkit.org/show_bug.cgi?id=163870

        Reviewed by Zalan Bujtas.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        Change -webkit-writing mode to writing-mode.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator WritingMode):
        (WebCore::CSSPrimitiveValue::operator SVGWritingMode): Deleted.
        Eliminate the SVGWritingMode converters. Add support for the unique SVG-specific
        values to the WritingMode converters.

        * css/CSSPropertyNames.in:
        Alias -webkit-writing-mode to writing-mode. Move writing-mode up to be
        high priority like -webkit-writing mode was. Alias -epub-writing-mode to writing-mode
        instead of to -webkit-writing-mode.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        Remove writing-mode from SVG computed style, since the base CSSComputedStyleDeclaration handles it.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWritingMode):
        (WebCore::StyleBuilderCustom::applyValueWebkitWritingMode): Deleted.
        Renamed applyValueWebkitWritingMode to applyValueWritingMode. Removed the SVG code, since
        the underlying converter for WritingMode now handles those values.

        * css/StyleResolver.cpp:
        (WebCore::extractDirectionAndWritingMode):
        Rename -webkit-writing-mode to writing-mode.

        * css/parser/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        Eliminate -webkit-writing-mode and make sure writing-mode handles both the SVG values
        and the normal values.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        Same deal here.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        Cue stuff was setting -webkit-writing-mode, so make it set writing-mode instead now.

        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::collectSelectionRects):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects):
        Switch the SVG-specific code here over to accessing the RenderStyle writing-mode and not
        the SVG-specific one.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isVerticalWritingMode):
        Add a helper function for asking if something is vertical writing mode.

        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::SVGRenderStyle::diff):
        Remove the SVG writing mode code.

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        Make sure to force SVG font descriptions to be horizontal, since SVG controls
        its own glyph orientation.

        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        * rendering/svg/SVGTextChunk.cpp:
        (WebCore::SVGTextChunk::SVGTextChunk):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutInlineTextBox):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::executeQuery):
        Changed to access the RenderStyle writing mode instead of the SVG-specific one.

2016-10-23  Antti Koivisto  <antti@apple.com>

        Avoid unnecessary full style resolution in getComputedStyle for non-inherited properties
        https://bugs.webkit.org/show_bug.cgi?id=163875

        Reviewed by Andreas Kling.

        Test: fast/css/getComputedStyle/getComputedStyle-style-resolution.html

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

            For non-inherited properties we don't need to update style even if some ancestor style is invalid
            as long as explicit 'inherit' is not being used.
            We still need to update if we find out that the whole subtree we are in is invalid.

        (WebCore::updateStyleIfNeededForProperty):

            Pass the property.

        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::elementOrItsAncestorNeedsStyleRecalc): Deleted.
        (WebCore::updateStyleIfNeededForElement): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue):

            Mark style as using explicit inheritance if 'currentcolor' value is used.

2016-10-24  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: canvas()->securityOrigin()->toString() == cachedImage.origin()->toString()
        https://bugs.webkit.org/show_bug.cgi?id=163242

        Reviewed by Darin Adler.

        Test: http/tests/security/cross-origin-cached-images-canvas.html

        We were previously on Origin HTTP header to check whether requests were made from different origins.
        This is fine for CORS enabled requests but not for GET no CORS requests since they will not have any Origin header.

        Now that CachedResource and CachedResourceRequest own their origin, it is best to use these directly.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::isRequestMatchingResourceOrigin):
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Remove CachedResource::passesSameOriginPolicyCheck
        https://bugs.webkit.org/show_bug.cgi?id=163593

        Reviewed by Andreas Kling.

        No change of behavior.

        Removing no-longer used code.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::redirectReceived):
        (WebCore::CachedResource::passesAccessControlCheck): Deleted.
        (WebCore::CachedResource::passesSameOriginPolicyCheck): Deleted.
        (WebCore::CachedResource::responseForSameOriginPolicyChecks): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::response):

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Redirections should be upgraded if CSP policy says so
        https://bugs.webkit.org/show_bug.cgi?id=163544

        Reviewed by Darin Adler.

        Test: http/tests/security/contentSecurityPolicy/upgrade-insecure-requests/basic-upgrade-after-redirect.https.html

        Introducing CachedResourceLoader::updateRequestAfterRedirection to do the checks that CachedResourceLoader is doing
        to the initial request, but for redirection requests.

        Implemented URL upgrade according CSP policy, as specified by fetch algorithm.
        Minor refactoring in CachedResourceRequest to share some code.
        Fixing some constness issues.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy):
        (WebCore::CachedResourceLoader::canRequestAfterRedirection):
        (WebCore::CachedResourceLoader::updateRequestAfterRedirection):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::upgradeInsecureResourceRequestIfNeeded):
        (WebCore::CachedResourceRequest::upgradeInsecureRequestIfNeeded):
        * loader/cache/CachedResourceRequest.h:

2016-10-22  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add IDLType based toJS conversion
        https://bugs.webkit.org/show_bug.cgi?id=163861

        Reviewed by Darin Adler.

        Adds toJS<IDLType>() functions to be the new way of converting
        from implementation types to JS types. These are implemented via
        a similar mechanism to the convert<IDL>() functions, though specializations
        of a JSConverter struct (rather than the Converter structs). This allows
        us to support arbitrarily complex aggregate types easily (e.g. sequence<(Node or DOMString?)>).

        * Modules/geolocation/Geoposition.idl:
        * dom/Event.idl:
        Add typedef for DOMTimeStamp. Eventually, our IDLParser should do this for us, but
        for now it allows us to simplify the type system.

        * bindings/js/JSDOMBinding.h:
        (WebCore::JSValueTraits::arrayJSValue): Deleted.
        (WebCore::JSValueTraits<String>::arrayJSValue): Deleted.
        (WebCore::JSValueTraits<double>::arrayJSValue): Deleted.
        (WebCore::JSValueTraits<float>::arrayJSValue): Deleted.
        (WebCore::jsArray): Deleted.
        (WebCore::jsFrozenArray): Deleted.
        (WebCore::NativeValueTraits<String>::nativeValue): Deleted.
        (WebCore::NativeValueTraits<unsigned>::nativeValue): Deleted.
        (WebCore::NativeValueTraits<float>::nativeValue): Deleted.
        (WebCore::NativeValueTraits<double>::nativeValue): Deleted.
        (WebCore::toNullableJSNumber): Deleted.
        (WebCore::toJSArray): Deleted.
        (WebCore::toJSBoolean): Deleted.
        (WebCore::toJSNumber): Deleted.
        (WebCore::toJSString): Deleted.
        Remove many now-unneeded conversion functions.

        * bindings/js/JSDOMConvert.h:
        (WebCore::toJS):
        Add 5 primary toJS functions which take combinations of the following
        arguments: ExecState, JSDOMGlobalObject, ThrowScope.  All take the value 
        to be converted as well, except in the case of the throwScope ones, where
        they take the value in an ExceptionOr<>.

        To simplify the implementations of the JSConverter specializations, avoiding
        the need for each one to implement their conversion up to 3 times (one for just
        the value, one for the value and the ExecState, and one for the value, the ExecState
        and the global object), each JSConverter instead specifies whether it's converter
        needs an ExecState or global object via a static constexpr. We then use the 
        JSConverterOverloader template, to call the correct function. This can probably be
        improved in the future, by inferring the number of arguments needed via SFINAE, but
        this seemed like a more straightforward first cut.

        (WebCore::JSConverter<IDLNullable<T>>::convert):
        (WebCore::JSConverter<IDLBoolean>::convert):
        (WebCore::JSConverter<IDLInterface<T>>::convert):
        (WebCore::JSConverter<IDLAny>::convert):
        (WebCore::JSConverter<IDLByte>::convert):
        (WebCore::JSConverter<IDLOctet>::convert):
        (WebCore::JSConverter<IDLShort>::convert):
        (WebCore::JSConverter<IDLUnsignedShort>::convert):
        (WebCore::JSConverter<IDLLong>::convert):
        (WebCore::JSConverter<IDLUnsignedLong>::convert):
        (WebCore::JSConverter<IDLLongLong>::convert):
        (WebCore::JSConverter<IDLUnsignedLongLong>::convert):
        (WebCore::JSConverter<IDLFloat>::convert):
        (WebCore::JSConverter<IDLUnrestrictedFloat>::convert):
        (WebCore::JSConverter<IDLDouble>::convert):
        (WebCore::JSConverter<IDLUnrestrictedDouble>::convert):
        (WebCore::JSConverter<IDLDOMString>::convert):
        (WebCore::JSConverter<IDLUSVString>::convert):
        (WebCore::JSConverter<IDLSequence<T>>::convert):
        (WebCore::JSConverter<IDLFrozenArray<T>>::convert):
        (WebCore::JSConverter<IDLEnumeration<T>>::convert):
        (WebCore::JSConverter<IDLUnion<T...>>::convert):
        There is slightly more duplication than I would have liked, for instance we have a
        specialization for each numeric type, even though they are all the same, but that is
        something that can be improved going forward.

        (WebCore::Converter<IDLUnion<T...>>::convert)
        Fix the normal IDLUnion converter to work with boolean types. This was caught by the
        test case I added via TypeConversions.idl.
        
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSDataTransferCustom.cpp:
        (WebCore::JSDataTransfer::types):
        * bindings/js/JSMediaStreamTrackCustom.cpp:
        (WebCore::JSMediaStreamTrack::getCapabilities):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        Switch to use new toJS<> functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddStringifierOperationIfNeeded):
        Fix stringifier function signature to contain an idlType.

        (GenerateEnumerationsHeaderContent):
        Remove now unnecessary JSValueTraits specializations.

        (JSValueToNativeIsHandledByDOMConvert):
        Renamed from IsHandledByDOMConvert, since that name is now ambiguous.

        (JSValueToNative):
        Update for new name of IsHandledByDOMConvert.

        (NativeToJSValueIsHandledByDOMConvert):
        Predicate guarding what types currently work with the new conversion system.

        (NativeToJSValueDOMConvertNeedsState):
        Predicate for determining if the ExecState is needed in the conversion function.

        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Predicate for determining if the global object is needed in the conversion function.

        (NativeToJSValue):
        Move things around a little bit and start converting use the new toJS<> when possible.

        * bindings/scripts/IDLParser.pm:
        (parseAttributeOrOperationRest):
        Fix a missing place where were not setting the idlType.
 
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        Update test results.

        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testUnion):
        (WebCore::TypeConversions::setTestUnion):
        (WebCore::TypeConversions::typeConversionsDictionarySequenceValue):
        (WebCore::TypeConversions::typeConversionsDictionaryUnionValue):
        * testing/TypeConversions.idl:
        Add a testUnion attribute, now that we can return unions to JS.

2016-10-23  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, rolling out r207727.

        broke 15 selection test cases.

        Reverted changeset:

        "Do not update selection rect on dirty lineboxes."
        https://bugs.webkit.org/show_bug.cgi?id=163862
        http://trac.webkit.org/changeset/207727

2016-10-23  Chris Dumez  <cdumez@apple.com>

        addEventListener() / removeEventListener() should use a union for last parameter
        https://bugs.webkit.org/show_bug.cgi?id=163863

        Reviewed by Darin Adler.

        addEventListener() / removeEventListener() should use a union for last parameter:
        - https://dom.spec.whatwg.org/#eventtarget

        No new tests, no Web-exposed behavior change.

        * bindings/js/JSDOMConvert.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListenerForBindings):
        (WebCore::EventTarget::removeEventListenerForBindings):
        * dom/EventTarget.h:
        * dom/EventTarget.idl:

2016-10-23  Zalan Bujtas  <zalan@apple.com>

        Do not update selection rect on dirty lineboxes.
        https://bugs.webkit.org/show_bug.cgi?id=163862
        <rdar://problem/28813156>

        Reviewed by Simon Fraser.

        In addition to checking whether the renderer needs layout, we also need to check if its preferred
        width is clean and stop computing the selection rects, if needed (while adding a renderer to the tree,
        there's a transition phase where the parent's preferred width dirty bit is already set, but it does
        not yet need layout).

        Tests: fast/css-generated-content/dynamic-first-letter-selection-clear-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::canUpdateSelectionOnRootLineBoxes):

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

        ASSERTION FAILED: m_fonts in &WebCore::FontCascade::primaryFont
        https://bugs.webkit.org/show_bug.cgi?id=163459

        Reviewed by Darin Adler.

        The CSS Units and Values spec states that font-relative units, when used
        in the font-size property, are resolved against the parent element. When
        calc() is specified, we were trying to resolve them against the current
        element, which is impossible because of the circular dependency. Instead,
        we should resolve against the parent style the same way as when calc() 
        isn't specified.

        Test: fast/text/font-size-calc.html

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontSize):

2016-10-22  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Two types are distinguishable for overload resolution if at most one of the two includes a nullable type
        https://bugs.webkit.org/show_bug.cgi?id=163791

        Reviewed by Sam Weinig.

        Update overload resolution in the bindings generator so that 2 nullable types
        are no longer considered as distinguishable, as per Web IDL:
        - https://heycam.github.io/webidl/#dfn-distinguishable

        * bindings/scripts/CodeGeneratorJS.pm:
        (AreTypesDistinguishableForOverloadResolution):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter1):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter1Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter2):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter2Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter):
        * bindings/scripts/test/TestObj.idl:

2016-10-22  Chris Dumez  <cdumez@apple.com>

        WebGLRenderingContextBase.texSubImage2D() should use a union instead of overloading
        https://bugs.webkit.org/show_bug.cgi?id=163859

        Reviewed by Darin Adler.

        WebGLRenderingContextBase.texSubImage2D() should use a union instead of overloading:
        - https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14

        No new tests, no Web-exposed behavior change.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

2016-10-22  Dan Bernstein  <mitz@apple.com>

        Dynamically-added backdrop filter to clip-path'd element with 3D transform renders incorrectly (without clip)
        https://bugs.webkit.org/show_bug.cgi?id=163497

        Reviewed by Simon Fraser.

        Test: css3/filters/backdrop/dynamic-with-clip-path.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer): Added MaskLayerChanged to
          structuralLayerChangeFlags to ensure that the mask layer is updated.

2016-10-22  Simon Fraser  <simon.fraser@apple.com>

        Backdrop filter doesn't show if removed then re-added
        https://bugs.webkit.org/show_bug.cgi?id=163860

        Reviewed by Dan Bernstein.

        When a backdrop filter is removed the re-added, updateBackdropFiltersRect() never
        runs the second time because m_backdropFiltersRect doesn't change. However, we need
        to run that code to size and position the newly re-created backdrop layer, so run
        it explicitly if we just created the backdrop layer. This is similar to how
        updateContentsImage() calls updateContentsRects().

        Test: css3/filters/backdrop/add-remove-add-backdrop-filter.html

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

2016-10-22  Simon Fraser  <simon.fraser@apple.com>

        Fix repainting of slow repaint objects in WK1 when page scale is applied
        https://bugs.webkit.org/show_bug.cgi?id=163854

        Reviewed by Zalan Bujtas.
        
        RenderObject::repaintSlowRepaintObject() always set the repaint container to the RenderView
        if it was null. This is before the call to clippedOverflowRectForRepaint(). If that function
        is called with a null repaintContainer, it maps the rect up through the RenderView's transform
        (which represents page scale), which is what we want here. Passing the RenderView itself
        stops the transform from being applied, which led to the bug.
        
        WebKit2 doesn't suffer from this bug because containerForRepaint() always returns the
        composited RenderView.

        Test: fast/repaint/zoomed-fixed-background.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintSlowRepaintObject):

2016-10-22  Darin Adler  <darin@apple.com>

        Move HTML canvas and tracks from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163853

        Reviewed by Chris Dumez.

        * WebCore.xcodeproj/project.pbxproj: Added CanvasPath.idl.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp: Tweaked a bit.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::JSWebGLRenderingContextBase::getExtension): Tweaked a bit.
        (WebCore::JSWebGLRenderingContextBase::getFramebufferAttachmentParameter):
        Removed unneeded exception handling.
        (WebCore::JSWebGLRenderingContextBase::getParameter): Ditto.
        (WebCore::JSWebGLRenderingContextBase::getProgramParameter): Ditto.
        (WebCore::JSWebGLRenderingContextBase::getShaderParameter): Ditto.
        (WebCore::JSWebGLRenderingContextBase::getSupportedExtensions): Use a
        modern for loop.
        (WebCore::JSWebGLRenderingContextBase::getUniform): Removed unneeded
        exception handling.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Pass a reference.
        (WebCore::HTMLCanvasElement::reset): Use is<CanvasRenderingContext2D>.
        (WebCore::HTMLCanvasElement::setUsesDisplayListDrawing): Ditto.
        (WebCore::HTMLCanvasElement::setTracksDisplayListReplay) Ditto.:
        (WebCore::HTMLCanvasElement::displayListAsText): Ditto.
        (WebCore::HTMLCanvasElement::replayDisplayListAsText): Ditto.
        (WebCore::HTMLCanvasElement::clearImageBuffer): Ditto.

        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient): Streamlined.
        (WebCore::CanvasGradient::addColorStop): Use ExceptionOr.
        * html/canvas/CanvasGradient.h: Updated for above changes.
        * html/canvas/CanvasGradient.idl: Use non-legacy exception.

        * html/canvas/CanvasPath.cpp:
        (WebCore::CanvasPath::arcTo): Use ExceptionOr.
        (WebCore::CanvasPath::arc): Ditto.
        (WebCore::CanvasPath::ellipse): Ditto.
        * html/canvas/CanvasPath.h: Updated for above changes.
        * html/canvas/CanvasPath.idl: Use non-legacy exceptions.

        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::create): Use Ref&&.
        (WebCore::CanvasPattern::CanvasPattern): Ditto.
        (WebCore::CanvasPattern::parseRepetitionType): Return a boolean
        instead of using an ExceptionCode.
        * html/canvas/CanvasPattern.h: Updated for above changes.

        * html/canvas/CanvasRenderingContext.cpp:
        (CanvasRenderingContext::wouldTaintOrigin): Reordered function so
        that it's safe to call it on an image element without a cached
        image, or a cached image without an underlying image.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        Take a reference.
        (WebCore::CanvasRenderingContext2D::drawImage): Use ExceptionOr.
        (WebCore::CanvasRenderingContext2D::drawImageFromRect): Ditto.
        (WebCore::CanvasRenderingContext2D::createLinearGradient): Ditto.
        (WebCore::CanvasRenderingContext2D::createRadialGradient): Ditto.
        (WebCore::CanvasRenderingContext2D::createPattern): Ditto.
        (WebCore::CanvasRenderingContext2D::createImageData): Ditto.
        (WebCore::CanvasRenderingContext2D::getImageData): Ditto.
        (WebCore::CanvasRenderingContext2D::webkitGetImageDataHD): Ditto.
        (WebCore::CanvasRenderingContext2D::putImageData): Removed unneeded
        ExceptionCode because this does not throw exceptions; the only one
        was for non-finite numeric values but this is now handled by bindings.
        (WebCore::CanvasRenderingContext2D::webkitPutImageDataHD): Ditto.
        * html/canvas/CanvasRenderingContext2D.h: Updated for above.
        * html/canvas/CanvasRenderingContext2D.idl: Use non-legacy exceptions
        and removed exceptions entirely in other cases.

        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject): Take a reference.
        (WebCore::OESVertexArrayObject::~OESVertexArrayObject): Deleted.
        (WebCore::OESVertexArrayObject::isVertexArrayOES): Use && instead of
        multiple return statements.
        (WebCore::OESVertexArrayObject::bindVertexArrayOES): Removed unneeded
        ExceptionCode since this does not throw an exception.
        * html/canvas/OESVertexArrayObject.h: Updated for above.
        * html/canvas/OESVertexArrayObject.idl: Removed unneeded exception.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        Removed unneeded ExceptionCode since this does not throw an exception.
        (WebCore::WebGL2RenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGL2RenderingContext::texSubImage2DImpl): Ditto.
        (WebCore::WebGL2RenderingContext::texSubImage2D): Removed unneeded
        ExceptionCode for some overloads, for the others, use ExceptionOr
        for the security exception. Moved security exception code here from
        the validate functions.
        (WebCore::WebGL2RenderingContext::validateTexFuncParameters): Removed
        unneeded ExceptionCode.
        (WebCore::WebGL2RenderingContext::getParameter): Ditto.
        * html/canvas/WebGL2RenderingContext.h: Updated for above.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension): Pass a reference.
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        Remvoed unneeded ExceptionCode since this does not throw an exception.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2D): Removed unneeded
        ExceptionCode for some overloads, for the others, use ExceptionOr
        for the security exception. Moved security exception code here from
        the validate functions.
        (WebCore::WebGLRenderingContext::getParameter): Removed unneeded
        ExceptionCode.
        * html/canvas/WebGLRenderingContext.h: Updated for above changes.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        Remvoed unneeded ExceptionCode since this does not throw an exception.
        (WebCore::WebGLRenderingContextBase::texImage2DImpl): Ditto.
        (WebCore::WebGLRenderingContextBase::texImage2D): Removed unneeded
        ExceptionCode for some overloads, for the others, use ExceptionOr
        for the security exception. Moved security exception code here from
        the validate functions.
        (WebCore::WebGLRenderingContextBase::validateHTMLImageElement):
        Moved the security exception out of here to the call sites.
        (WebCore::WebGLRenderingContextBase::validateHTMLCanvasElement): Ditto.
        (WebCore::WebGLRenderingContextBase::validateHTMLVideoElement): Ditto.
        * html/canvas/WebGLRenderingContextBase.h: Updated for above changes.
        * html/canvas/WebGLRenderingContextBase.idl: Use non-legacy exceptions
        in some cases and no exceptions at all in many others.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        Use a reference instead of a pointer.

        * html/track/DataCue.h: Use pragma once.
        * html/track/DataCue.idl: Use non-legacy exception for constructor
        attribute, even though it is custom and so it has no effect.

        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::create): Use RefPtr&&.
        (WebCore::InbandDataTextTrack::InbandDataTextTrack): Ditto.
        (WebCore::InbandDataTextTrack::addDataCue): Stop using
        ASSERT_NO_EXCEPTION.
        (WebCore::InbandDataTextTrack::removeDataCue): Stop using
        IGNORE_EXCEPTION.
        (WebCore::InbandDataTextTrack::removeCue): Use ExceptionOr.
        Also use remove instead of find/remove.
        * html/track/InbandDataTextTrack.h: Updated for above changes.

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::GenericTextTrackCueMap::GenericTextTrackCueMap): Deleted.
        (WebCore::GenericTextTrackCueMap::~GenericTextTrackCueMap): Deleted.
        (WebCore::GenericTextTrackCueMap::add): Take references intead of
        pointers.
        (WebCore::GenericTextTrackCueMap::find): Ditto. Also use get
        instead of find.
        (WebCore::GenericTextTrackCueMap::remove): Ditto. Also use take
        instead of double hashing to both find and remove.
        (WebCore::InbandGenericTextTrack::updateCueFromCueData): Stop using
        IGNORE_EXCEPTION. Also got rid of code that is converting a double
        to a long and then back to a double by using lround. Instead just
        use std::round, which keeps it a double. But also, why does this need
        to round?!
        (WebCore::InbandGenericTextTrack::addGenericCue): Updated to use
        reference to work with m_cueMap.
        (WebCore::InbandGenericTextTrack::updateGenericCue): Ditto.
        (WebCore::InbandGenericTextTrack::removeGenericCue): Ditto.
        (WebCore::InbandGenericTextTrack::removeCue): Use ExceptionOr.
        (WebCore::InbandGenericTextTrack::newCuesParsed): Removed
        ASSERT_NO_EXCEPTION.
        * html/track/InbandGenericTextTrack.h: Updated for above changes.

        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Removed
        ASSERT_NO_EXCEPTION.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue): Use ExcepctionOr.
        (WebCore::TextTrack::removeCue): Ditto.
        (WebCore::TextTrack::addRegion): Ditto.
        (WebCore::TextTrack::removeRegion): Ditto.
        * html/track/TextTrack.h: Updated for above changes.
        * html/track/TextTrack.idl: Ditto.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::cueShadowPseudoId): Moved this here
        since it does not need to be inlined in the header.
        (WebCore::TextTrackCue::~TextTrackCue): Deleted.
        (WebCore::TextTrackCue::setStartTime): Removed ExceptionCode&
        since the exceptions were for non-finite values, but this is
        now handled by the bindings.
        (WebCore::TextTrackCue::setEndTime): Ditto.
        * html/track/TextTrackCue.h: Updated for the above.
        * html/track/TextTrackCue.idl: Removed SetterMayThrowLegacyException
        and made startTime and endTime be double rather than unrestricted double.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        Use a reference instead of a pointer.
        (WebCore::TextTrackCueGeneric::TextTrackCueGeneric): Initialize
        m_defaultPosition in the class definition instead of here.
        (WebCore::TextTrackCueGeneric::createDisplayTree): Return a Ref.
        (WebCore::TextTrackCueGeneric::setLine): Use ExceptionOr.
        (WebCore::TextTrackCueGeneric::setPosition): Ditto.
        (WebCore::TextTrackCueGeneric::setFontSize): Updated since
        displayTreeInternal() now returns a reference.
        * html/track/TextTrackCueGeneric.h: Updated for above changes.
        Also fixed some arguument types and made some more things private.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::createDisplayTree): Return a Ref.
        (WebCore::VTTCue::displayTreeInternal): Return a reference.
        (WebCore::VTTCue::setVertical): Use ExceptionOr.
        (WebCore::VTTCue::setLine): Ditto.
        (WebCore::VTTCue::setPosition): Ditto.
        (WebCore::VTTCue::setSize): Ditto.
        (WebCore::VTTCue::setAlign): Ditto.
        (WebCore::VTTCue::getDisplayTree): Return a reference.
        (WebCore::VTTCue::removeDisplayTree): Updated since
        displayTreeInternal returns a reference.
        (WebCore::VTTCue::setFontSize): Ditto.
        * html/track/VTTCue.h: Updated for the above.
        * html/track/VTTCue.idl: Use non-legacy exceptions and also
        restricted doubles.

        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::VTTRegion): Moved default values all into
        the class definition.
        (WebCore::VTTRegion::setWidth): Removed the check for non-finite
        since the bindings now handle that. Use ExcpetionOr.
        (WebCore::VTTRegion::setHeight): Ditto.
        (WebCore::VTTRegion::setRegionAnchorX): Ditto.
        (WebCore::VTTRegion::setRegionAnchorY): Ditto.
        (WebCore::VTTRegion::setViewportAnchorX): Ditto.
        (WebCore::VTTRegion::setViewportAnchorY): Ditto.
        (WebCore::upKeyword): Added. Shared by the code below.
        (WebCore::VTTRegion::scroll): Rewrote to be simpler.
        (WebCore::VTTRegion::setScroll): Rewrote to be simpler.
        (WebCore::VTTRegion::updateParametersFromRegion): Read and
        write data members directly to avoid awkward code that is otherwise
        required just to copy from one object to the other. Also take a
        const& instead of a pointer for the thing to update from.
        (WebCore::VTTRegion::parseSettingValue): Use upKeyword.
        (WebCore::VTTRegion::appendTextTrackCueBox): Take a Ref&&.
        (WebCore::VTTRegion::getDisplayTree): Do the downcast to Document
        here instead of using the helper function.
        (WebCore::VTTRegion::prepareRegionDisplayTree): Ditto.
        * html/track/VTTRegion.h: Updated for the above.
        * html/track/VTTRegion.idl: Use non-legacy exceptions and also
        use restricted dobules, not unrestricted.

2016-10-22  Chris Dumez  <cdumez@apple.com>

        WebGLRenderingContextBase.texImage2D() should use a union instead of overloading
        https://bugs.webkit.org/show_bug.cgi?id=163856

        Reviewed by Darin Adler.

        WebGLRenderingContextBase.texImage2D() should use a union instead of overloading:
        - https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

2016-10-22  Antti Koivisto  <antti@apple.com>

        REGRESSION(r207669): Dromaeo/jslib-style-jquery.html regressed >20%
        https://bugs.webkit.org/show_bug.cgi?id=163851

        Reviewed by Darin Adler.

        The test calls Scope::flushPendingUpdate a lot and nothing ever happens there.

        Add a separate invalidity bit for descendant scopes and inline the fast path.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::flushPendingSelfUpdate):
        (WebCore::Style::Scope::flushPendingDescendantUpdates):
        (WebCore::Style::Scope::scheduleUpdate):
        (WebCore::Style::Scope::flushPendingUpdate): Deleted.
        * style/StyleScope.h:
        (WebCore::Style::Scope::hasPendingUpdate):
        (WebCore::Style::Scope::flushPendingUpdate):

2016-10-22  Darin Adler  <darin@apple.com>

        Move SVG from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163837

        Reviewed by Chris Dumez.

        * WebCore.xcodeproj/project.pbxproj: Added SVGGraphicsElement.idl.

        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value): Use toJSNumber.
        (WebCore::JSSVGLength::setValue): Use propagateException.
        (WebCore::JSSVGLength::convertToSpecifiedUnits): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Properly handle SetterMayThrowException
        in the special case for SVG setters.

        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBaselineShiftValue): Removed
        ASSERT_NO_EXCEPTION, no longer needed.
        (WebCore::SVGRenderStyle::initialKerning): Ditto.

        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::setGlyphRef): Use ExceptionOr.
        (WebCore::SVGAltGlyphElement::setFormat): Ditto.
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements): Tweaked a bit.
        * svg/SVGAltGlyphElement.h: Updated for above changes.
        * svg/SVGAltGlyphElement.idl: Use non-legacy exceptions.

        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::valueAsString): Removed unneeded String globals.
        (WebCore::parseAngleType): Rewrote to be simpler and more direct.
        (WebCore::SVGAngle::setValueAsString): Use ExceptionOr.
        (WebCore::SVGAngle::newValueSpecifiedUnits): Ditto.
        (WebCore::SVGAngle::convertToSpecifiedUnits): Ditto.
        * svg/SVGAngle.h: Updated for above changes. Initialized data members
        here in the class definite and removed constructor; default now works.
        * svg/SVGAngle.idl: Use non-legacy exceptions.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue): Update since
        CalcMode is now an enum class.
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement): Ditto.

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType): Update
        since AttributeType is now an enum class.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateDistance): Removed
        ASSERT_NO_EXCEPTION, no longer needed.

        * svg/SVGAnimatedBoolean.idl: Use non-legacy exception.
        * svg/SVGAnimatedEnumeration.idl: Ditto.
        * svg/SVGAnimatedInteger.idl: Ditto.

        * svg/SVGAnimatedLength.cpp:
        (WebCore::sharedSVGLength): Deleted.
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes): Removed
        ASSERT_NO_EXCEPTION, no longer needed.
        (WebCore::parseLengthFromString): Ditto. Also rewrote to not use
        a shared SVGLength; no benefit to doing that.
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue): Ditto.
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes): Ditto.
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue): Ditto.

        * svg/SVGAnimatedNumber.idl: Use non-legacy exception.
        * svg/SVGAnimatedString.idl: Ditto.

        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::setValueAsString): Updated since
        setValueAsString now uses ExceptionOr.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement): Initialized scalars
        in the class definition instead of here.
        (WebCore::SVGAnimationElement::getSimpleDuration): Removed uneeded ExceptionCode&.
        (WebCore::SVGAnimationElement::setCalcMode): Updated since CalcMode is now an enum class.
        (WebCore::SVGAnimationElement::setAttributeType): Updated since AttributeType
        is now an enum class.
        (WebCore::SVGAnimationElement::shouldApplyAnimation): Ditto.
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced): Ditto.
        (WebCore::SVGAnimationElement::calculatePercentForSpline): Ditto.
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints): Ditto.
        (WebCore::SVGAnimationElement::calculatePercentForFromTo): Ditto.
        (WebCore::SVGAnimationElement::currentValuesFromKeyPoints): Ditto.
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation): Ditto.
        (WebCore::SVGAnimationElement::startedActiveInterval): Ditto.
        (WebCore::SVGAnimationElement::updateAnimation): Ditto.
        (WebCore::SVGAnimationElement::checkInvalidCSSAttributeType): Ditto.

        * svg/SVGAnimationElement.h: Changed CalcMode into an enum class.
        Updated for above changes.

        * svg/SVGAnimationElement.idl: Removed MayThrowLegacyException from
        getSimpleDuration.

        * svg/SVGColor.cpp:
        (WebCore::SVGColor::SVGColor): Updated to take scalar in the straightforward
        manner instead of constt SVGColorType&.
        (WebCore::SVGColor::setRGBColor): Use ExceptionOr.
        (WebCore::SVGColor::setRGBColorICCColor): Ditto.
        (WebCore::SVGColor::setColor): Ditto.
        * svg/SVGColor.h: Updated for above changes. Removed unneeded destructor.
        * svg/SVGColor.idl: Use non-legacy exceptions.

        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::SVGGlyphRefElement): Initialize data members
        in class definition, not here.
        (WebCore::parseFloat): Added helper. Used in parseAttribute.
        (WebCore::SVGGlyphRefElement::parseAttribute): Updated to use parseFloat helper.
        (WebCore::SVGGlyphRefElement::glyphRef): Deleted.
        (WebCore::SVGGlyphRefElement::setGlyphRef): Deleted.
        (WebCore::SVGGlyphRefElement::setX): Removed unused Exception& argument.
        (WebCore::SVGGlyphRefElement::setY): Ditto.
        (WebCore::SVGGlyphRefElement::setDx): Ditto.
        (WebCore::SVGGlyphRefElement::setDy): Ditto.
        * svg/SVGGlyphRefElement.h: Updated for above changes.
        * svg/SVGGlyphRefElement.idl: Use Reflect on glyphRef. Removed incorrect
        SetterMayThrowLegacyException attributes for x, y, dx, and dy. Longer term
        it might be nice to use [Reflect] on these too.

        * svg/SVGGraphicsElement.idl: Use non-legacy exception.

        * svg/SVGLength.cpp:
        (WebCore::parseLengthType): Changed argument type since caller does not
        need to know how many characters are consumed.
        (WebCore::SVGLength::SVGLength): Removed IGNORE_EXCEPTION and ASSERT_NO_EXCEPTION.
        Also removed the copy constructor, letting the compiler generate the default.
        (WebCore::SVGLength::setValueAsString): Use ExceptionOr.
        (WebCore::SVGLength::construct): Updated since setValueAsString uses ExceptionOr.
        (WebCore::SVGLength::value): Ditto.
        (WebCore::SVGLength::valueForBindings): Use ExceptionOr. Also renamed to
        disambiguate with the version used outside of bindings.
        (WebCore::SVGLength::setValue): Use ExceptionOr.
        (WebCore::SVGLength::newValueSpecifiedUnits): Ditto.
        (WebCore::SVGLength::convertToSpecifiedUnits): Ditto.
        (WebCore::SVGLength::fromCSSPrimitiveValue): Updated since newValueSpecifiedUnits
        uses ExceptionOr.
        (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute): Rewrote map generation
        code to be more efficient and not unrolled. Only do one hash table lookup.
        * svg/SVGLength.h: Updated for above changes.
        * svg/SVGLength.idl: Use non-legacy exceptions.

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::valueForLength): Update since function
        uses ExceptionOr.
        (WebCore::SVGLengthContext::convertValueToUserUnits): Use ExceptionOr.
        (WebCore::SVGLengthContext::convertValueFromUserUnits): Ditto.
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage): Ditto.
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits): Ditto.
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEMS): Ditto.
        (WebCore::SVGLengthContext::convertValueFromEMSToUserUnits): Ditto.
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEXS): Ditto.
        (WebCore::SVGLengthContext::convertValueFromEXSToUserUnits): Ditto.
        * svg/SVGLengthContext.h: Updatedfor above changes.

        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse): Updated since setValueAsString uses
        ExceptionOr now.
        * svg/SVGLengthList.h: Removed unneeded constructor.
        * svg/SVGLengthList.idl: Use non-legacy exceptions.

        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement): Use ExceptionOr.
        * svg/SVGLocatable.h: Updated for above change.

        * svg/SVGMarkerElement.h:
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::fromString):
        Updated since setValueAsString uses ExceptionOr now.

        * svg/SVGMatrix.h: Use ExceptionOr.
        * svg/SVGMatrix.idl: Use non-legacy exceptions.

        * svg/SVGNumberList.h: Removed unneeded constructor.
        * svg/SVGNumberList.idl: Use non-legacy exceptions.

        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::setPaint): Use ExceptionOr.
        * svg/SVGPaint.h: Updated for above chagne.
        * svg/SVGPaint.idl: Use non-legacy exception.

        * svg/SVGPathSegList.h: Tweaked a bit.
        * svg/SVGPathSegList.idl: Use non-legacy exceptions.

        * svg/SVGPointList.h: Removed unneeded constructor.
        * svg/SVGPointList.idl: Use non-legacy exceptions.

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::setAlign): Use ExceptionOr.
        (WebCore::SVGPreserveAspectRatio::setMeetOrSlice): Ditto.
        * svg/SVGPreserveAspectRatio.h: Updated for above changes.
        * svg/SVGPreserveAspectRatio.idl: Use non-legacy exceptions.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentView): Pass a reference.

        * svg/SVGStringList.h: Tweaked a bit.
        * svg/SVGStringList.idl: Use non-legacy exceptions.

        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setType): Removed unneeded ExceptionCode&.
        (WebCore::SVGStyleElement::setMedia): Ditto.
        (WebCore::SVGStyleElement::setTitle): Deleted.
        * svg/SVGStyleElement.h: Updated for above changes, and made the title
        function override be private.
        * svg/SVGStyleElement.idl: Use Reflect for title. Removed unneeded
        SetterMayThrowLegacyException on all attributes.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthAnimated): Removed
        ASSERT_NO_EXCEPTION, won't work any more.
        (WebCore::SVGTextContentElement::getSubStringLength): Use ExceptionOr.
        Also remove redundant call to updateLayoutIgnorePendingStylesheets,
        called by getNumberOfChars.
        (WebCore::SVGTextContentElement::getStartPositionOfChar): Ditto.
        (WebCore::SVGTextContentElement::getEndPositionOfChar): Ditto.
        (WebCore::SVGTextContentElement::getExtentOfChar): Ditto.
        (WebCore::SVGTextContentElement::getRotationOfChar): Ditto.
        (WebCore::SVGTextContentElement::selectSubString): Ditto.
        * svg/SVGTextContentElement.h: Updated for above changes.
        * svg/SVGTextContentElement.idl: Use non-legacy exceptions.

        * svg/SVGTransformList.h: Removed unneeded constructor.
        * svg/SVGTransformList.idl: Use non-legacy exceptions.

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec): Updated to take a reference.
        (WebCore::SVGViewSpec::setZoomAndPan): Use ExceptionOr.
        (WebCore::SVGViewSpec::setTransformString): Deleted.
        (WebCore::SVGViewSpec::viewBoxString): Use m_viewBox directly.
        (WebCore::SVGViewSpec::preserveAspectRatioString): Use
        m_preserveAspectRatio directly.
        (WebCore::SVGViewSpec::viewTarget): Use is<SVGElement>.
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper): Use
        m_contextElement directly.
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        Ditto.
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper): Ditto.
        (WebCore::SVGViewSpec::parseViewSpec): Set m_viewTargetString directly.
        * svg/SVGViewSpec.h: Updated for above changes. Removed unneeded virtual
        destructor, unneeded using for ref/deref, unused functions including
        setTransformString, setViewTargetString, non-exception setZoomAndPan,
        contextElement, viewBoxBaseValue, and preserveAspectRatioBaseValue.
        * svg/SVGViewSpec.idl: Use non-legacy exceptions. Also specify
        ImplementationLacksVTable.

        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        Use ExceptionOr.
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h: Ditto.
        * svg/properties/SVGListProperty.h: Ditto.
        * svg/properties/SVGListPropertyTearOff.h: Ditto.
         * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clear): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::getItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::removeItem): Ditto.
        * svg/properties/SVGPathSegListPropertyTearOff.h: Ditto.
        * svg/properties/SVGPropertyTearOff.h: Ditto. Also added an overload
        of create that knows how to deal with exceptions.
        * svg/properties/SVGStaticListPropertyTearOff.h: Ditto.
        * svg/properties/SVGTransformListPropertyTearOff.h: Ditto.

2016-10-22  Chris Dumez  <cdumez@apple.com>

        WebGLRenderingContextBase.bufferData() should use a union instead of overloading
        https://bugs.webkit.org/show_bug.cgi?id=163795

        Reviewed by Darin Adler.

        WebGLRenderingContextBase.bufferData() / bufferSubData() should use a union
        instead of overloading:
        - https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14

        No new tests, no web-exposed behavior change.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLInterface<T>>::convert):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestIterable.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::bufferData):
        (WebCore::WebGL2RenderingContext::bufferSubData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

2016-10-22  Darin Adler  <darin@apple.com>

        [Cocoa] REGRESSION (r204508): Crash in init_WebCreateFragment when pasting (seen in multiple apps using legacy WebKit)
        https://bugs.webkit.org/show_bug.cgi?id=163839

        Reviewed by Dan Bernstein.

        * editing/cocoa/EditorCocoa.mm: Use the appropriate SOFT_LINK macros to find
        the WebKitLegacy platform in the correct location for iOS and macOS.

2016-10-22  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Bindings error message for missing required dictionary member should be more explicit
        https://bugs.webkit.org/show_bug.cgi?id=163665

        Reviewed by Darin Adler.

        Add throwRequiredMemberTypeError function to throw a TypeError exception with an error
        message indicating the missing required member.

        No new test required, rebase existing tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::throwRequiredMemberTypeError):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):

2016-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        Upgrading custom element should enqueue attributeChanged and connected callbacks
        https://bugs.webkit.org/show_bug.cgi?id=163840

        Reviewed by Darin Adler.

        When upgrading a custom element, enqueue attributeChanged and connectedCallbacks as needed as specified
        in step 3 and 4 of: https://html.spec.whatwg.org/multipage/scripting.html#concept-upgrade-an-element

        Test: fast/custom-elements/upgrading-enqueue-reactions.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::upgradeElement): Enqueue 
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueueItem::invoke): Don't invoke callbacks when the custom element had
        failed to upgrade.
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions): Added.
        (WebCore::CustomElementReactionQueue::invokeAll): Upgrading a custom element may enqueue more reactions.
        Keep invoking reactions until the queue becomes empty.
        * dom/CustomElementReactionQueue.h:
        * dom/Range.idl: Added a forgotten CEReactions here.

2016-10-21  David Kilzer  <ddkilzer@apple.com>

        Bug 163762: IntSize::area() should used checked arithmetic
        <https://webkit.org/b/163762>

        Reviewed by Darin Adler.

        No new tests since no change in nominal behavior.

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::area): Change to return a
        Checked<unsigned, T> value. Use WTF:: namespace to avoid
        including another header.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::area): Ditto.

        The remaining changes are to use the Checked<unsigned> return
        value of IntSize::area() and IntRect::area() correctly in
        context, in addition to items noted below.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::isTopLevelFullPagePlugin):
        Declare contentWidth and contentHeight as float values to
        prevent overflow when computing the area, and to make the
        inequality comparison in the return statement uses the same type
        for both sides.
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/MediaElementSession.cpp:
        (WebCore::isElementRectMostlyInMainFrame):
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::setSize): Restructure logic to
        compute area only once.
        (WebCore::ImageBackingStore::clear):
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::frameBytes):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::maximumSubsamplingLevel):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::backingStoreBytesForSize):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::frameBytesAtIndex):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData): Update overflow check,
        rename local variable to numBytes, and compute numBytes once.
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::frameBytesAtIndex):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::frameBytesAtIndex):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::bytesBackingLayerWithPixelSize):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

2016-10-21  Gavin Barraclough  <barraclough@apple.com>

        WebPageProxy should not need PageActivityState
        https://bugs.webkit.org/show_bug.cgi?id=163821

        Reviewed by Geoff Garen.

        The PageActivityState is currently plumbed back from WebCore up to the UI process, to
        determine whether to enabled process suppression. However the information it contains
        (whether a page load is ongoing, whether audio is playing) is already available via
        other means. Remove this use of PageActivityState.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState):
            - Fix a bug in how we compute IsPlayingAudio - if the volume of the MediaElement is
              set to zero, then audio is not playing (we were already checking muted).
        * page/ChromeClient.h:
            - removed setPageActivityState
        * page/Page.cpp:
        (WebCore::Page::setPageActivityState): Deleted.
            - setPageActivityState -> pageActivityStateChanged, remove call to ChromeClient
        * page/Page.h:
        (WebCore::Page::pageActivityStateChanged):
            - setPageActivityState -> pageActivityStateChanged
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::setActivityFlag):
            - setPageActivityState -> pageActivityStateChanged

2016-10-21  Chris Dumez  <cdumez@apple.com>

        [Web ID] Overload resolution is wrong if one of the types is a nullable union
        https://bugs.webkit.org/show_bug.cgi?id=163816

        Reviewed by Alex Christensen.

        Overload resolution was wrong if one of the types was a nullable union. This
        is because we never considered the union type itself, only its subtypes.
        Therefore, we checked if any of the union's subtypes were nullable but we
        failed to check if the union itself was nullable.

        See:
        - https://heycam.github.io/webidl/#es-overloads (Step 11.3.)

        No new tests, extended bindings tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetOverloadThatMatchesIgnoringUnionSubtypes):
        (GenerateOverloadedFunctionOrConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion1):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion1Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion2):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion2Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion2):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion2Caller):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion):
        * bindings/scripts/test/TestObj.idl:

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

        [MediaStream] Dynamically generate media capture sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=154861
        <rdar://problem/24909411>

        Reviewed by Tim Horton.

        No new tests, some of these changes are covered by existing tests and some can only be tested
        with physical capture devices.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: AVSampleBufferAudioRenderer
          and AVSampleBufferRenderSynchronizer are now declared in AVFoundationSPI.h.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Initialize 
          AVSampleBufferRenderSynchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Fail if AVSampleBufferRenderSynchronizer
          isn't available.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSampleBufferFromTrack): Take a MediaSample&
          instead of a PlatformSample&.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBufferFromTrack): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Add the sample buffer display 
          later to the synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Remove the sample buffer display 
          later from the synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start the synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stash the current clock time in 
          m_pausedTime, but leave the clock running. Pause the synchronizer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentMediaTime): Return the clock time
          when playing, m_pausedTime time when paused because we leave the clock running forever.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated):

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: AVSampleBufferAudioRenderer
          is now declared in AVFoundationSPI.h.

        * platform/spi/mac/AVFoundationSPI.h: Add AVSampleBufferAudioRenderer and AVSampleBufferRenderSynchronizer.

2016-10-21  Commit Queue  <commit-queue@webkit.org>

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

        Not quite ready rdar://problem/28897179 (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "Re-enable URLParser for non-Safari Cocoa apps after r207321"
        https://bugs.webkit.org/show_bug.cgi?id=163690
        http://trac.webkit.org/changeset/207582

2016-10-21  Gavin Barraclough  <barraclough@apple.com>

        WebPage should take UserActivity directly for user input
        https://bugs.webkit.org/show_bug.cgi?id=163813

        Reviewed by Anders Carlsson.

        When we receive mouse/keyboard events in a page, we want to prevent AppNap. We currently do so
        via the PageThrottler. This patch is to just make the WebPage drive the UserActivity directly.

        Two reasons to do so: (1) to cleanup & simplify for further refactoring. (2) The current code
        isn't really achieving the desired effect. The page setting the flag in the throttler to get
        the activity to be set is now a less effective way of achieving this goal, since the
        PageActivityState bounces back across to the UI process & then messages back to the WebContent
        process to take the UserActivity. These extra hops defeat the purpose of making sure the boost
        from the initial message isn't lost.

        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
        (WebCore::m_userInputHysteresis): Deleted.
        * page/PageThrottler.h:
        (WebCore::PageThrottler::didReceiveUserInput): Deleted.
            - removed PageActivityState::UserInputActivity, didReceiveUserInput, m_userInputHysteresis.

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support (insertFrom|deleteBy)Composition and (insert|delete)CompositionText inputTypes for InputEvents
        https://bugs.webkit.org/show_bug.cgi?id=163460
        <rdar://problem/28784142>

        Reviewed by Darin Adler.

        Adds basic support for the composition inputTypes in the InputEvent spec. See w3.org/TR/input-events,
        github.com/w3c/input-events/issues/41 and github.com/w3c/input-events/issues/42 for more details. While input
        events are fired in the correct order with respect to each other, additional work will be required to ensure
        that input events are fired in the correct order with respect to composition(start|update|end) events and
        textInput events. This is held off until the expected ordering of events is officially defined in the spec.

        Tests: fast/events/before-input-events-prevent-insert-composition.html
               fast/events/before-input-events-prevent-recomposition.html
               fast/events/input-events-ime-composition.html
               fast/events/input-events-ime-recomposition.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::isBeforeInputEventCancelable):

        Adds a new virtual method hook for subclasses to mark their `beforeinput` events as non-cancelable (see
        TypingCommand::isBeforeInputEventCancelable). By default, `beforeinput` events are cancelable.

        * editing/EditAction.h:

        Adds 4 new EditActions corresponding to the 4 composition-related inputTypes. These are:
        EditActionTypingDeletePendingComposition    => "deleteCompositionText"
        EditActionTypingDeleteFinalComposition      => "deleteByComposition"
        EditActionTypingInsertPendingComposition    => "insertCompositionText"
        EditActionTypingInsertFinalComposition      => "insertFromComposition"

        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchBeforeInputEvents):
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::setComposition):

        In setComposition(text, mode), tweak the logic for committing a composition to always delete the selection
        before inserting the final composition text. In setComposition(text, underlines, start, end), catch the case
        where we're beginning to recompose an existing range in the DOM and delete the recomposed text first.

        * editing/TypingCommand.cpp:
        (WebCore::editActionForTypingCommand):
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteSelection):

        Adds a TextCompositionType parameter so that call sites (see Editor::setComposition) can indicate what state the
        edited composition is in. This allows us to differentiate between deletion of finalized composition text in
        preparation of recomposing a range in the DOM, and deletion of composition text that has not yet been committed
        in preparation for inserting a finalized composition into the DOM.

        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::isBeforeInputEventCancelable):
        (WebCore::TypingCommand::inputEventData):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        * editing/TypingCommand.h:

2016-10-21  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure shadow user agent sheets parse in UASheetMode
        https://bugs.webkit.org/show_bug.cgi?id=163810

        Reviewed by Dean Jackson.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::parserContextForElement):
        (WebCore::makeInlineStyleSheetCacheKey):
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::parserContextForForElement): Deleted.

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

        YouTube stalls when seeking beyond buffered range
        https://bugs.webkit.org/show_bug.cgi?id=162813

        Reviewed by Eric Carlson.

        When seeking a MediaPlayerPrivateMediaSourceAVFObjC, we will first seek the AVSampleBufferRenderSynchronizer,
        flush and enqueue non-displaying frames, enqueue regular frames, then begin playback. The above stall will occur
        when we enqueue so many non- displaying frames that the display layer is not ready for normal ones before
        playback begins. Then, when the synchronizer attempts to synchronize the enqueued audio and video renderers, the
        only available samples are back at the original media time, and so it "seeks" by updating the CMTimebase back to
        the original media time, causing playback to appear "stalled".  The overall solution is to "flush" the contents
        of the renderers before the seek, so that the synchronizer doesn't reset the currentTime, and to only restart
        the synchronizer when there are visible (or audible) samples available for display.

        Breaking the fix down into sections:

        = Don't enqueue too many non-displaying samples at once:
        - Rename SourceBufferPrivate::flushAndEnqueueNonDisplayingSamples() to SourceBufferPrivate::flush(), and no longer
          pass in an array of non-displaying samples.
        - Add a new virtual method to MediaSample, createNonDisplayingCopy(), used by SourceBuffer to enqueue non-displaying
          samples.
        - in SourceBuffer::reenqueueMediaForTime(), use that new createNonDisplayingCopy() method to enqueue non-displaying
          samples in the same queue as regular samples.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::reenqueueMediaForTime):
        * platform/MediaSample.h:
        (WebCore::MediaSample::isNonDisplaying):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::flush):
        (WebCore::SourceBufferPrivate::flushAndEnqueueNonDisplayingSamples): Renamed -> flush().
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::CMSampleBufferIsNonDisplaying):
        (WebCore::MediaSampleAVFObjC::flags):
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::willSeek):
        (WebCore::createNonDisplayingCopy): Moved to MediaSampleAVFObjC.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Renamed -> flush().
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::flags):
        (WebCore::MockMediaSample::createNonDisplayingCopy):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        = Don't start playing until all renderers have visible/audible samples:
        - SourceBufferPrivateAVFObjC will notify its associated MediaPlayerPrivateMediaSourceAVFObjC when
          it flushes and receives visible/audible samples.
        - The MediaPlayer will store audio renderers as keys to a HashMap which allows it to track which
          have available samples.
        - This requires changing all the places where we loop over the available renderers.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::flush):
        (WebCore::SourceBufferPrivateAVFObjC::willSeek):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::allRenderersHaveAvailableSamples):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableVideoFrame): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableAudioSample):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateAllRenderersHaveAvailableSamples):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPreservesPitch):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::shouldBePlaying):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::willSeek):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:

        = Don't display new samples mid-seek.
        - MediaSource should clear its m_pendingSeekTime ivar, which is used whyn SourceBuffer queries whether or not a
          seek is pending, when instructing its SourceBuffers to seekToTime().
        - This allows SourceBuffer to decline to enqueue new samples during a MediaSource seek operation.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::completeSeek):

2016-10-20  Dean Jackson  <dino@apple.com>

        SVG should not paint selection within a mask
        https://bugs.webkit.org/show_bug.cgi?id=163772
        <rdar://problem/28705129>

        Reviewed by Simon Fraser.

        When masking content, we shouldn't paint the text
        selection as we are rendering into the masking
        offscreen buffer.

        Test: svg/masking/mask-should-not-paint-selection.html

        * rendering/PaintPhase.h: Add a new behavior - PaintBehaviorSkipSelectionHighlight.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint): Don't update the selectionStyle if
        PaintBehaviorSkipSelectionHighlight is true.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer): Add PaintBehaviorSkipSelectionHighlight
        to the PaintInfo.

2016-10-21  Chris Dumez  <cdumez@apple.com>

        [Web IDL] MediaControlsHost has invalid operation overloads
        https://bugs.webkit.org/show_bug.cgi?id=163793

        Reviewed by Darin Adler.

        MediaControlsHost has invalid operation overloads:
        - sortedTrackListForMenu()
        - displayNameForTrack()

        The parameter is nullable for both overloads which is not valid IDL.

        - sortedTrackListForMenu(): The parameter is no longer nullable. This is a minor
          behavior change and it should be safe since this is Apple-specific and only
          called from mediaControlsApple.js which uses HTMLMediaElement.videoTracks and
          HTMLMediaElement.audioTracks as input, both of which are not nullable.
          Note that we could have also kept one of the parameters as nullable to not
          change behavior but allowing null does not seem useful here.
        - displayNameForTrack(): Use a union instead of overloading, no behavior change.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        (WebCore::MediaControlsHost::displayNameForTrack):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

2016-10-21  Jeremy Jones  <jeremyj@apple.com>

        Implement basic pointer lock behavior for WebKit and WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=162745

        Reviewed by Simon Fraser.

        When ENABLE_POINTER_LOCK is enabled, these tests now pass with DumpRenderTree.
        LayoutTests/pointer-lock/lock-already-locked.html
        LayoutTests/pointer-lock/lock-element-not-in-dom.html
        LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom.html
        LayoutTests/pointer-lock/mouse-event-api.html

        Export pointer lock symbols and cancel pointer lock on "escape".

        * dom/Document.h: Export symbols.
        * dom/Element.h: Export symbols.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Cancel pointer lock on "escape".
        * page/PointerLockController.cpp: Add missing include.
        * page/PointerLockController.h: Export symbols.

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

        WebCore::PlatformMediaSession::stopSession + 13
        https://bugs.webkit.org/show_bug.cgi?id=163799

        Reviewed by Eric Carlson.

        Because m_sessions can be mutated by removeSession() while iterating over m_sessions, and because
        PlatformMediaSessions are not refcounted, it is not enough to copy m_sessions into a copied Vector
        before iterating. Instead, wrap iteration of m_sessions in a convenience function, which sets an
        iteration counter which, when cleared, removes all null entries from m_session. In parallel, modify
        removeSession() to check this iteration counter, and replace the session with a null value rather
        than mutating the m_sessions vector itself.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::has):
        (WebCore::PlatformMediaSessionManager::activeAudioSessionRequired):
        (WebCore::PlatformMediaSessionManager::canProduceAudio):
        (WebCore::PlatformMediaSessionManager::removeSession):
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):
        (WebCore::PlatformMediaSessionManager::sessionWillEndPlayback):
        (WebCore::PlatformMediaSessionManager::currentSessionsMatching):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterBackground):
        (WebCore::PlatformMediaSessionManager::applicationDidEnterForeground):
        (WebCore::PlatformMediaSessionManager::systemWillSleep):
        (WebCore::PlatformMediaSessionManager::systemDidWake):
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForDocument):
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForProcess):
        (WebCore::PlatformMediaSessionManager::forEachSession):
        (WebCore::PlatformMediaSessionManager::anyOfSessions):
        * platform/audio/PlatformMediaSessionManager.h:

2016-10-21  Darin Adler  <darin@apple.com>

        Move some more assorted classes from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163775

        Reviewed by Chris Dumez.

        * Modules/fetch/WorkerGlobalScopeFetch.cpp:
        (WebCore::WorkerGlobalScopeFetch::fetch): Remove unnecessary calls to
        WorkerGlobalScope::scriptExcutionObject, which just returns the scope itself.

        * Modules/notifications/Notification.cpp: Added now-needed include.
        * Modules/webdatabase/DOMWindowWebDatabase.cpp: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Added WindowOrWorkerGlobalScope.idl.

        * bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp:
        (WebCore::JSDedicatedWorkerGlobalScope::postMessage): Pass a reference instead
        of a pointer to handlePostMessage.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::postMessage): Ditto.

        * bindings/js/JSMessagePortCustom.h: Use pragma once. Change handlePostMessage
        to take a reference to the object instead of a pointer, and also to use
        propagateException since postMessage now uses ExceptionOr.

        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage): Pass a reference instead of a pointer to
        handlePostMessage.
        (WebCore::constructJSWorker): Use the version of toJSNewlyCreated that handles
        propagating an exception from ExceptionOr.

        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Use auto.
        Remove unnecessary round trip through the scriptExecutionContext function.
        (WebCore::JSWorkerGlobalScope::importScripts): Use reserveInitialCapacity and
        uncheckedAppend to build up the vector of strings. Use propagateException
        to deal with ExceptionOr result.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort): Initialize boolean data members in the
        class definition instead of here.
        (WebCore::MessagePort::postMessage): Use ExceptionOr.
        (WebCore::MessagePort::entangle): Use an rvalue reference.
        (WebCore::MessagePort::dispatchMessages): Use ExceptionOr.
        (WebCore::MessagePort::disentanglePorts): Ditto. Also use a more efficient
        idiom that does half as much hashing as the old algorithm, and got rid an
        unneeded local variable.
        (WebCore::MessagePort::entanglePorts): Use an rvalue reference.
        * dom/MessagePort.h: Updated for above changes.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::create): Use auto.
        (WebCore::FileReader::FileReader): Initialize scalars in the class definition.
        (WebCore::FileReader::~FileReader): Call cancel on the loader directly
        instead of sharing code with the stop function.
        (WebCore::FileReader::stop): Moved the body of the terminate function here.
        (WebCore::FileReader::readAsArrayBuffer): Use ExceptionOr.
        (WebCore::FileReader::readAsBinaryString): Ditto.
        (WebCore::FileReader::readAsText): Ditto.
        (WebCore::FileReader::readAsDataURL): Ditto.
        (WebCore::FileReader::readInternal): Ditto. Also add a cast now that
        we derive privately from FileReaderLoaderClient.
        (WebCore::FileReader::abort): Call stop instead of terminate.
        (WebCore::FileReader::terminate): Deleted. Moved code into stop.
        (WebCore::FileReader::didReceiveData): Moved comment to where the constant is.
        * fileapi/FileReader.h: Updated for above changes. Made more functions private
        and used final instead of override.
        * fileapi/FileReader.idl: Use non-legacy exceptions.

        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::readAsArrayBuffer): Use ExceptionOr.
        (WebCore::FileReaderSync::readAsBinaryString): Ditto.
        (WebCore::FileReaderSync::readAsText): Ditto.
        (WebCore::FileReaderSync::readAsDataURL): Ditto.
        (WebCore::FileReaderSync::startLoading): Ditto.
        (WebCore::FileReaderSync::startLoadingString): Added. Helper to cut down on
        repeated code in functions above.
        * fileapi/FileReaderSync.h: Updated for above changes.
        * fileapi/FileReaderSync.idl: Use non-legacy exceptions.

        * page/Base64Utilities.cpp:
        (WebCore::Base64Utilities::btoa): Use ExceptionOr.
        (WebCore::Base64Utilities::atob): Ditto.
        * page/Base64Utilities.h: Updated for above changes.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::navigator): Pass a reference to the frame.
        (WebCore::DOMWindow::postMessage): Use ExceptionOr when calling
        MessagePort::disentanglePorts. Also udpated for changes to the
        PostMessageTimer.

        * page/Navigator.cpp:
        (WebCore::Navigator::Navigator): Take a reference.
        (WebCore::shouldHideFourDot): Ditto
        (WebCore::Navigator::appVersion): Pass a reference.
        (WebCore::Navigator::plugins): Return a reference.
        (WebCore::Navigator::mimeTypes): Ditto.
        * page/Navigator.h: Updated for above changes. Also marked the
        class final and moved derivation from RefCounted to NavigatorBase.

        * page/NavigatorBase.h: Addded derivation from RefCounted since
        both derived classes want that, and the destructor is already virtual.

        * page/WindowOrWorkerGlobalScope.idl: Use non-legacy exceptions.

        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::~WorkerNavigator): Deleted.

        * page/WorkerNavigator.h: Moved derivation from RefCounted to
        NavigatorBase. Also marked class final.

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL): Use ExceptionOr.
        * workers/AbstractWorker.h: Updated for above changes.

        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create): Use RefPtr&&
        instead of PassRefPtr.
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        Ditto.
        (WebCore::DedicatedWorkerGlobalScope::postMessage): Use ExceptionOr.
        (WebCore::DedicatedWorkerGlobalScope::importScripts): Ditto.
        * workers/DedicatedWorkerGlobalScope.h: Updated for above changes.
        * workers/DedicatedWorkerGlobalScope.idl: Use non-legacy exceptions.

        * workers/Worker.cpp:
        (WebCore::Worker::create): Use ExceptionOr.
        (WebCore::Worker::postMessage): Ditto.
        * workers/Worker.h: Updated for above changes.
        * workers/Worker.idl: Use non-legacy exception.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope): Moved initialization
        of m_closing to class definition.
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope): Removed call to
        deleted notifyObserversOfStop function.
        (WebCore::WorkerGlobalScope::importScripts): Use ExceptionOr. Also use
        reserveInitialCapacity and uncheckedAppend to build a vector.
        (WebCore::WorkerGlobalScope::addConsoleMessage): Use an rvalue reference.
        Also moved the body of one of the addMessageToWorkerConsole overloads into
        one of the overloads of this function, and changed the other to call addMessage.
        (WebCore::WorkerGlobalScope::addMessage): Moved the body of the other
        addMessageToWorkerConsole here.
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole): Deleted.
        (WebCore::WorkerGlobalScope::Observer::Observer): Deleted.
        (WebCore::WorkerGlobalScope::Observer::~Observer): Deleted.
        (WebCore::WorkerGlobalScope::Observer::stopObserving): Deleted.
        (WebCore::WorkerGlobalScope::registerObserver): Deleted.
        (WebCore::WorkerGlobalScope::unregisterObserver): Deleted.
        (WebCore::WorkerGlobalScope::notifyObserversOfStop): Deleted.
        * workers/WorkerGlobalScope.h: Removed unneeded includes. Moved many virtual
        function overrides into the private section. Marked many functions final instead
        of just override. Removed unused Observer class and m_workerObservers set.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop): Removed call to deleted
        WorkerGlobalScope::notifyObserversOfStop function.

2016-10-21  Antti Koivisto  <antti@apple.com>

        Tighten ComputedStyleExtractor to use Element instead of Node
        https://bugs.webkit.org/show_bug.cgi?id=163798

        Reviewed by Andreas Kling.

        Also make its functions non-const as they may compute style.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::styleElementForNode):
        (WebCore::ComputedStyleExtractor::ComputedStyleExtractor):

            If we are called with a Node figure out the style Element in constructor.

        (WebCore::ComputedStyleExtractor::getFontSizeCSSValuePreferringKeyword):
        (WebCore::ComputedStyleExtractor::useFixedFontDefaultSize):
        (WebCore::ComputedStyleExtractor::styledElement):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::copyProperties):
        (WebCore::elementOrItsAncestorNeedsStyleRecalc):

            Use composed tree iterator for increased correctness in shadow trees.

        (WebCore::updateStyleIfNeededForElement):
        (WebCore::computeRenderStyleForProperty):
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::ComputedStyleExtractor::customPropertyText):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::item):
        (WebCore::ComputedStyleExtractor::propertyMatches):
        (WebCore::ComputedStyleExtractor::copyProperties):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForShorthandProperties):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForSidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForGridShorthand):
        (WebCore::ComputedStyleExtractor::copyPropertiesInSet):
        (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue):
        (WebCore::ComputedStyleExtractor::styledNode): Deleted.
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc): Deleted.
        (WebCore::updateStyleIfNeededForNode): Deleted.
        * css/CSSComputedStyleDeclaration.h:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeEquivalentProperties):
        * editing/EditingStyle.h:

2016-10-21  Chris Dumez  <cdumez@apple.com>

        WebGL2RenderingContext.texSubImage3D() should use a union instead of overloading
        https://bugs.webkit.org/show_bug.cgi?id=163792

        Reviewed by Darin Adler.

        WebGL2RenderingContext.texSubImage3D() should use a union instead of overloading for 
        - https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7 (for texSubImage3D)
        - https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14 (for TexImageSource)

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2016-10-21  Zalan Bujtas  <zalan@apple.com>

        Do not mutate the render tree while collecting selection repaint rects.
        https://bugs.webkit.org/show_bug.cgi?id=163800
        <rdar://problem/28806886>

        Reviewed by David Hyatt.

        RenderListItem not only mutates the tree while in layout but it also uses
        the old descendant context to find the insertion point.
        This patch strictly ensures that we only do it while in layout and never
        in other cases such as collecting repaint rects.
        This gets redundant when webkit.org/b/163789 is fixed.

        Test: fast/lists/crash-when-list-marker-is-moved-during-selection.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):

2016-10-21  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support horizontal-bt writing mode
        https://bugs.webkit.org/show_bug.cgi?id=163797

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-10-20  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Correct some memory leaks and other minor bugs
        https://bugs.webkit.org/show_bug.cgi?id=163769

        Reviewed by Alex Christensen.

        Several D2D handles were being leaked.
 
        Direct2D sometimes returns an infinite rect containing { -inf, -inf, FloatMax, FloatMax },
        sometimes { -FloatMax, -FloatMax, inf, inf }, and various combinations thereof. This caused
        most SVG drawing to decide no screen rect was contained in the "infinite rect" so nothing
        would be drawn.
        
        Tested by existing layout tests. 

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/FloatRectDirect2D.cpp:
        (WebCore::isInfiniteRect): Recognize various infinite rects in Windows.
        (WebCore::FloatRect::FloatRect): Convert a Windows infinite rect to the style
        we use inside WebKit.
        * platform/graphics/win/FontCascadeDirect2D.cpp:
        (WebCore::FontCascade::drawGlyphs): Use cached brushes if possible.
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:
        (WebCore::GlyphPage::fill): Don't terminate on this error case.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient): Don't leak gradients.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextPlatformPrivate::brushWithColor): Added.
        (WebCore::GraphicsContext::brushWithColor): Added.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Perform transform multiplication
        in the right order (hint: it's not distributive).
        (WebCore::GraphicsContext::drawWithShadow): Use convenience method.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::platformFillRoundedRect): Ditto.
        (WebCore::GraphicsContext::clearRect): Ditto.
        (WebCore::GraphicsContext::setPlatformStrokeColor): Ditto.
        (WebCore::GraphicsContext::setPlatformFillColor): Ditto.
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::polygonPathFromPoints): No need to convert manually.
        (WebCore::Path::~Path): Don't leak ID2D1Geometry entities.
        (WebCore::Path::appendGeometry): Ditto.
        (WebCore::Path::createGeometryWithFillMode): Ditto.
        (WebCore::Path::Path): Ditto.
        (WebCore::Path::operator=): Ditto.
        (WebCore::Path::strokeBoundingRect): Provide an implementation.
        (WebCore::Path::addRect): No need for manual casting here.

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix minor style issue in the signature of StaticRange::create
        https://bugs.webkit.org/show_bug.cgi?id=163786
        <rdar://problem/28853079>

        Reviewed by Alex Christensen.

        Change `Ref<WebCore::Node> &&` to `Ref<Node>&&`.

        * dom/StaticRange.cpp:
        (WebCore::StaticRange::create):

2016-10-21  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for -webkit-line-box-contain
        https://bugs.webkit.org/show_bug.cgi?id=163794

        Reviewed by Zalan Bujtas.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeLineBoxContain):
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-10-21  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Add support for @-webkit-region rules
        https://bugs.webkit.org/show_bug.cgi?id=163787

        Reviewed by Zalan Bujtas.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        * css/parser/CSSAtRuleID.cpp:
        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumePageRule):
        (WebCore::CSSParserImpl::consumeRegionRule):
        * css/parser/CSSParserImpl.h:

2016-10-21  David Kilzer  <ddkilzer@apple.com>

        Bug 163757: Use IntSize::unclampedArea() in PDFDocumentImage::updateCachedImageIfNeeded()
        <https://webkit.org/b/163757>

        Reviewed by Brent Fulgham.

        No new tests since there is no change in nominal behavior.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded): Use
        IntSize::unclampedArea() where manual calculations were used
        previously.  Also gets rid of more safeCast<size_t>() use.

2016-10-21  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Support unions in our overload resolution algorithm
        https://bugs.webkit.org/show_bug.cgi?id=163764

        Reviewed by Darin Adler.

        Support unions in our overload resolution algorithm as per:
        - https://heycam.github.io/webidl/#es-overloads
        - https://heycam.github.io/webidl/#dfn-distinguishable

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsIDLTypeDistinguishableWithUnionForOverloadResolution):
        (AreTypesDistinguishableForOverloadResolution):
        (GetOverloadThatMatches):
        (GenerateOverloadedFunctionOrConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:

2016-10-21  Chris Dumez  <cdumez@apple.com>

        AudioNode.connect(): First parameter should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=163773

        Reviewed by Darin Adler.

        AudioNode.connect()'s first parameter should not be nullable:
        - https://webaudio.github.io/web-audio-api/#idl-def-AudioNode.

        We were throwing a SYNTAX_ERR when passing null, we now throw
        a TypeError instead.

        No new tests, updated existing test.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNode.idl:

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement InputEvent.getTargetRanges() for the input events spec
        https://bugs.webkit.org/show_bug.cgi?id=162947
        <rdar://problem/28853079>

        Reviewed by Darin Adler.

        Implements InputEvent.getTargetRanges(). See individual method changes below for more details. Adds a new hook
        for subclasses of CompositeEditCommand to vend a list of target StaticRanges when retrieving target ranges for
        an editing command on a contenteditable area.

        Tests: fast/events/before-input-delete-empty-list-target-ranges.html
               fast/events/before-input-delete-text-target-ranges.html
               fast/events/before-input-replace-text-target-ranges.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        Add StaticRange.idl, StaticRange.cpp and StaticRange.h.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setInputEventsEnabled):
        (WebCore::RuntimeEnabledFeatures::inputEventsEnabled):

        Add a new runtime bindings flag for InputEvents and guard both InputEvent and StaticRange behind it.

        * dom/DOMAllInOne.cpp:
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h:
        * dom/InputEvent.idl:
        * dom/StaticRange.cpp: Copied from Source/WebCore/dom/InputEvent.cpp.
        (WebCore::StaticRange::StaticRange):
        (WebCore::StaticRange::create):
        (WebCore::StaticRange::createFromRange):

        Convenience method for creating a StaticRange from a Range's start/end container and offset.

        (WebCore::StaticRange::startContainer):
        (WebCore::StaticRange::endContainer):
        (WebCore::StaticRange::collapsed):
        * dom/StaticRange.h: Copied from Source/WebCore/dom/InputEvent.cpp.
        (WebCore::StaticRange::startOffset):
        (WebCore::StaticRange::endOffset):
        * dom/StaticRange.idl: Copied from Source/WebCore/editing/ReplaceRangeWithTextCommand.h.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::willApplyCommand):
        (WebCore::CompositeEditCommand::targetRanges):

        Virtual method that returns a list of target ranges which are associated with this command.

        (WebCore::CompositeEditCommand::targetRangesForBindings):

        Non-virtual method that calls the above targetRanges(). Takes whether or not the CompositeEditCommand is editing
        a textarea or plain text input into account.

        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::frame):
        * editing/EditCommand.h:
        (WebCore::EditCommand::document):
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchInputEvent):
        (WebCore::dispatchBeforeInputEvents):

        Changed the `beforeinput` event dispatch to use the regular Node::dispatchEvent instead of dispatchScopedEvent.
        This is because if the page prevents the `beforeinput` event, we need to know immediately in order to bail from
        the default action.

        (WebCore::dispatchInputEvents):
        (WebCore::Editor::willApplyEditing):

        Added a list of static ranges as a parameter when calling on the Editor to dispatch `beforeinput` events.
        By default, this uses the composite edit command's targetRangesForBindings(), though it may be special cased
        by subclasses of CompositeEditCommand (see ReplaceRangeWithTextCommand, SpellingCorrectionCommand, and
        TypingCommand).

        * editing/Editor.h:
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::targetRanges):
        * editing/ReplaceRangeWithTextCommand.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::targetRanges):
        * editing/SpellingCorrectionCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::editActionIsDeleteByTyping):
        (WebCore::TypingCommand::shouldDeferWillApplyCommandUntilAddingTypingCommand):
        (WebCore::TypingCommand::willApplyCommand):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

        Moves the firing of the `beforeinput` until after the selection range to delete has been computed.

        * editing/TypingCommand.h:

2016-10-21  Antti Koivisto  <antti@apple.com>

        Style resolver should be updated lazily
        https://bugs.webkit.org/show_bug.cgi?id=163721

        Reviewed by Andreas Kling.

        Currently when stylesheets change in some way we generally update style resolvers and
        invalidate style immediately. We should do this lazily to avoid unnecessary work.

        Also improve naming of the stylesheet invalidation functions and use more optimal functions in some places.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::updateStyleIfNeededForNode):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):
        (WebCore::CSSStyleSheet::didMutate):
        (WebCore::CSSStyleSheet::setDisabled):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):

            Initialize root style font with null font selector.
            This avoids hitting a CSSFontSelector assert in fast/media/mq-relative-constraints-08.html where
            media query evaluation requires font information before it is ready.
            Exposed by increased laziness in this patch.

        * dom/Document.cpp:
        (WebCore::Document::setContentLanguage):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::isPageBoxVisible):
        (WebCore::Document::pageSizeAndMarginsInPixels):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::didInsertInDocumentShadowRoot):
        (WebCore::Document::didRemoveInDocumentShadowRoot):
        * dom/Document.h:
        (WebCore::Document::inDocumentShadowRoots):

            Track all shadow roots in the document. This allows us to find and flush style scopes cheaply.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::ExtensionStyleSheets):
        (WebCore::ExtensionStyleSheets::clearPageUserSheet):
        (WebCore::ExtensionStyleSheets::updatePageUserSheet):
        (WebCore::ExtensionStyleSheets::invalidateInjectedStyleSheetCache):
        (WebCore::ExtensionStyleSheets::addUserStyleSheet):
        (WebCore::ExtensionStyleSheets::addAuthorStyleSheetForTesting):
        (WebCore::ExtensionStyleSheets::addDisplayNoneSelector):
        (WebCore::ExtensionStyleSheets::maybeAddContentExtensionSheet):
        (WebCore::ExtensionStyleSheets::styleResolverChangedTimerFired): Deleted.

            Since updates are now done lazily we don't need a special timer for extension stylesheets.

        * dom/ExtensionStyleSheets.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::removedFrom):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::insertedInto):
        (WebCore::ShadowRoot::removedFrom):
        (WebCore::ShadowRoot::styleScope):
        * dom/ShadowRoot.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::createInspectorStyleSheetForDocument):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::resetPseudoStates):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setPagination):
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        * page/Page.cpp:
        (WebCore::Page::setViewMode):
        (WebCore::Page::setNeedsRecalcStyleInAllFrames):
        (WebCore::Page::invalidateInjectedStyleSheetCacheInAllFrames):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::setPreferredStylesheetSetName):
        (WebCore::Style::Scope::setSelectedStylesheetSetName):
        (WebCore::Style::Scope::removePendingSheet):
        (WebCore::Style::Scope::removeStyleSheetCandidateNode):
        (WebCore::Style::Scope::activeStyleSheetsForInspector):
        (WebCore::Style::Scope::flushPendingUpdate):

            Also flush descendant shadow roots.

        (WebCore::Style::Scope::scheduleUpdate):
        (WebCore::Style::Scope::didChangeActiveStyleSheetCandidates):

            Make lazy.

        (WebCore::Style::Scope::didChangeStyleSheetContents):

            Make lazy.

        (WebCore::Style::Scope::didChangeStyleSheetEnvironment):

            Environment changes also affect author shadow roots.

        (WebCore::Style::Scope::styleSheetsForStyleSheetList):
        (WebCore::Style::Scope::scheduleActiveSetUpdate): Deleted.
        (WebCore::Style::Scope::didChangeCandidatesForActiveSet): Deleted.
        (WebCore::Style::Scope::didChangeContentsOrInterpretation): Deleted.

            Improved naming of these and split didChangeContentsOrInterpretation into two separate functions.

        * style/StyleScope.h:
        (WebCore::Style::Scope::styleSheetsForStyleSheetList): Deleted.
        (WebCore::Style::Scope::setPreferredStylesheetSetName): Deleted.
        (WebCore::Style::Scope::setSelectedStylesheetSetName): Deleted.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::removedFrom):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

            Ensure that cationsStyleSheetOverride really becomes empty. Some tests rely on not having suprise
            inserted stylesheets. Previously this was racy and the patch affected order of things.

        (WebCore::Internals::styleChangeType):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2016-10-21  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: [OpenWebRTC] Move SDPProcessorScriptResource(Gtk) to openwebrtc directory
        https://bugs.webkit.org/show_bug.cgi?id=163778

        Reviewed by Philippe Normand.

        Move SDPProcessorScriptResourceGtk from the platform gtk directory to the port generic
        openwebrtc directory to make it usable by other ports. Also drop the Gtk-suffix.

        No change of behavior.

        * PlatformGTK.cmake:
        * platform/mediastream/gtk/SDPProcessorScriptResourceGtk.cpp:
        (WebCore::SDPProcessorScriptResource::scriptString): Deleted.
        * platform/mediastream/openwebrtc/SDPProcessorScriptResource.cpp: Renamed from Source/WebCore/platform/mediastream/gtk/SDPProcessorScriptResourceGtk.cpp.
        (WebCore::SDPProcessorScriptResource::scriptString):

2016-10-21  Miguel Gomez  <magomez@igalia.com>

        [GTK] Several tests crashing on debug bot in (anonymous namespace)::MediaPlayerPrivateGStreamerBase::repaint
        https://bugs.webkit.org/show_bug.cgi?id=163511

        Reviewed by Carlos Garcia Campos.

        Perform the video repaint in the main thread when accelerated compositing is disabled. Added a new method to
        MediaPlayerClient to get whether accelerated compositing is enabled from the MediaPlayer. This is needed
        because mediaPlayerAcceleratedCompositingEnabled() will return false while HTMLMediaElement doesn't have a
        RenderVideo, even when accelerated compositing is enabled.

        Covered by existent tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerAcceleratedCompositingEnabled):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerAcceleratedCompositingEnabled):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2016-10-21  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: [GTK] Add MediaEndpointOwr - an OpenWebRTC WebRTC backend
        https://bugs.webkit.org/show_bug.cgi?id=163327

        Reviewed by Philippe Normand.

        Add MediaEndpointOwr which is a MediaEndpoint implementation (WebRTC backend) based on
        OpenWebRTC [1]. The WebRTC backend can be tested with a manual test. Automatic testing
        is still done with MockMediaEndpoint.

        [1] http://www.openwebrtc.org/

        Testing: Added manual test (webrtc-one-tab-p2p.html)

        * CMakeLists.txt:
        * platform/GStreamer.cmake:
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp: Added.
        (WebCore::createMediaEndpointOwr):
        (WebCore::MediaEndpointOwr::MediaEndpointOwr):
        (WebCore::MediaEndpointOwr::~MediaEndpointOwr):
        (WebCore::MediaEndpointOwr::setConfiguration):
        (WebCore::cryptoDataCallback):
        (WebCore::MediaEndpointOwr::generateDtlsInfo):
        (WebCore::MediaEndpointOwr::getDefaultAudioPayloads):
        (WebCore::MediaEndpointOwr::getDefaultVideoPayloads):
        (WebCore::payloadsContainType):
        (WebCore::MediaEndpointOwr::filterPayloads):
        (WebCore::MediaEndpointOwr::updateReceiveConfiguration):
        (WebCore::findRtxPayload):
        (WebCore::MediaEndpointOwr::updateSendConfiguration):
        (WebCore::MediaEndpointOwr::addRemoteCandidate):
        (WebCore::MediaEndpointOwr::replaceMutedRemoteSourceMid):
        (WebCore::MediaEndpointOwr::createMutedRemoteSource):
        (WebCore::MediaEndpointOwr::replaceSendSource):
        (WebCore::MediaEndpointOwr::stop):
        (WebCore::MediaEndpointOwr::transceiverIndexForSession):
        (WebCore::MediaEndpointOwr::sessionMid):
        (WebCore::MediaEndpointOwr::matchTransceiverByMid):
        (WebCore::MediaEndpointOwr::dispatchNewIceCandidate):
        (WebCore::MediaEndpointOwr::dispatchGatheringDone):
        (WebCore::MediaEndpointOwr::processIceTransportStateChange):
        (WebCore::MediaEndpointOwr::dispatchDtlsFingerprint):
        (WebCore::MediaEndpointOwr::unmuteRemoteSource):
        (WebCore::MediaEndpointOwr::prepareSession):
        (WebCore::MediaEndpointOwr::prepareMediaSession):
        (WebCore::parseHelperServerUrl):
        (WebCore::MediaEndpointOwr::ensureTransportAgentAndTransceivers):
        (WebCore::MediaEndpointOwr::internalAddRemoteCandidate):
        (WebCore::gotCandidate):
        (WebCore::candidateGatheringDone):
        (WebCore::iceConnectionStateChange):
        (WebCore::gotIncomingSource):
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h: Added.
        (WebCore::OwrTransceiver::create):
        (WebCore::OwrTransceiver::~OwrTransceiver):
        (WebCore::OwrTransceiver::mid):
        (WebCore::OwrTransceiver::session):
        (WebCore::OwrTransceiver::owrIceState):
        (WebCore::OwrTransceiver::setOwrIceState):
        (WebCore::OwrTransceiver::gotEndOfRemoteCandidates):
        (WebCore::OwrTransceiver::markGotEndOfRemoteCandidates):
        (WebCore::OwrTransceiver::OwrTransceiver):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
        (WebCore::RealtimeMediaSourceOwr::RealtimeMediaSourceOwr):
        (WebCore::RealtimeMediaSourceOwr::swapOutShallowSource):
        Add support for an initially muted source. This is used for early
        creation of remote sources.

2016-10-21  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Content Alignment broken with indefinite sized grid container
        https://bugs.webkit.org/show_bug.cgi?id=163724

        Reviewed by Manuel Rego Casasnovas.

        The Grid Tracks sizing algorithm receives as parameter the
        available space to be used as space for tracks. We hold a variable
        to store the remaining free space for each dimension.

        When the grid container size is indefinite we can't compute the
        available free space after computing track sizes until such
        indefinite size is resolved.

        No new tests, just added some additional test cases.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): Compute freeSpace for Rows
        after doing layout and resolving the indefinite height.

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

        CRASH in SourceBuffer::sourceBufferPrivateDidReceiveSample + 2169
        https://bugs.webkit.org/show_bug.cgi?id=163735

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-sample-wrong-track-id.html

        When SourceBuffer receives a sample in sourceBufferPrivateDidReceiveSample() containing
        a trackID not previously seen in an initialization segment, it creates a default TrackBuffer
        object to contain that track's samples. One of the fields in TrackBuffer, description, is
        normally filled out when an initialization segment is received, but with this default
        TrackBuffer, it's still null when it's checked later in sourceBufferPrivateDidReceiveSample().

        Rather than adding a null-check on trackBuffer.description, drop any sample that has a 
        trackID which was not present during a previous initialization segment.

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

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Configures but fails to link with ENABLE_OPENGL=OFF
        https://bugs.webkit.org/show_bug.cgi?id=163449

        Reviewed by Michael Catanzaro.

        Only define sharingGLContext in PlatformDisplay if EGL or GLX are enabled.

        * platform/graphics/PlatformDisplay.cpp:
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::initialize):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::~PlatformDisplayX11):

2016-10-20  Filip Pizlo  <fpizlo@apple.com>

        The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting
        https://bugs.webkit.org/show_bug.cgi?id=163738

        Reviewed by Geoffrey Garen.

        No new tests because no change in behavior.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):

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

        [Bindings] Start using signature->idlType instead of signature->type in the overload resolution code
        https://bugs.webkit.org/show_bug.cgi?id=163767

        Reviewed by Darin Adler.

        Start using signature->idlType instead of signature->type in the overload resolution code
        to prepare for union type support.

        * bindings/scripts/CodeGeneratorJS.pm:
        (ComputeEffectiveOverloadSet):
        (AreTypesDistinguishableForOverloadResolution):
        (GetDistinguishingArgumentIndex):
        (GetOverloadThatMatches):
        (GenerateOverloadedFunctionOrConstructor):

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

        Implement WebGL2 bufferData() and bufferSubData() methods
        https://bugs.webkit.org/show_bug.cgi?id=163759

        Reviewed by Dean Jackson.

        These new overloads simply clip the input array buffer.

        Test: fast/canvas/webgl/bufferData-offset-length.html

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

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

        "Download Linked File" context menu action should use 'download' attribute as suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=163742
        <rdar://problem/28840734>

        Reviewed by Darin Adler.

        Add convenience method to HitTestResult to return the URL element's
        download attribute.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::URLElementDownloadAttribute):
        * rendering/HitTestResult.h:

2016-10-20  Nan Wang  <n_wang@apple.com>

        AX: VoiceOver is not detecting ARIA treeview if it contains role="presentation"
        https://bugs.webkit.org/show_bug.cgi?id=163763

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/aria-tree-with-presentation-role.html

        Web authors sometimes use presentation role in the aria tree to hide elements. We should
        consider this a valid case if they specify tree items and groups correctly.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        * accessibility/AccessibilityTree.cpp:
        (WebCore::AccessibilityTree::nodeHasTreeItemChild):
        (WebCore::AccessibilityTree::isTreeValid):
        * accessibility/AccessibilityTree.h:

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

        Many WebGL functions which don't throw are marked as possibly throwing
        https://bugs.webkit.org/show_bug.cgi?id=163747

        Reviewed by Dean Jackson.

        Mechanically remove the exception code.

        No new tests because there is no behavior change.

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContextBase::getAttachedShaders):
        (WebCore::JSWebGLRenderingContextBase::getProgramParameter):
        (WebCore::JSWebGLRenderingContextBase::getShaderParameter):
        (WebCore::JSWebGLRenderingContextBase::getUniform):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::activeTexture):
        (WebCore::WebGLRenderingContextBase::attachShader):
        (WebCore::WebGLRenderingContextBase::bindAttribLocation):
        (WebCore::WebGLRenderingContextBase::bindBuffer):
        (WebCore::WebGLRenderingContextBase::bindFramebuffer):
        (WebCore::WebGLRenderingContextBase::bindRenderbuffer):
        (WebCore::WebGLRenderingContextBase::bindTexture):
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::createShader):
        (WebCore::WebGLRenderingContextBase::detachShader):
        (WebCore::WebGLRenderingContextBase::disableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        (WebCore::WebGLRenderingContextBase::enableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContextBase::framebufferTexture2D):
        (WebCore::WebGLRenderingContextBase::getActiveAttrib):
        (WebCore::WebGLRenderingContextBase::getActiveUniform):
        (WebCore::WebGLRenderingContextBase::getAttachedShaders):
        (WebCore::WebGLRenderingContextBase::getBufferParameter):
        (WebCore::WebGLRenderingContextBase::getProgramParameter):
        (WebCore::WebGLRenderingContextBase::getProgramInfoLog):
        (WebCore::WebGLRenderingContextBase::getRenderbufferParameter):
        (WebCore::WebGLRenderingContextBase::getShaderParameter):
        (WebCore::WebGLRenderingContextBase::getShaderInfoLog):
        (WebCore::WebGLRenderingContextBase::getShaderPrecisionFormat):
        (WebCore::WebGLRenderingContextBase::getShaderSource):
        (WebCore::WebGLRenderingContextBase::getTexParameter):
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::getUniformLocation):
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::linkProgram):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::shaderSource):
        (WebCore::WebGLRenderingContextBase::videoFrameToImage):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::uniform1f):
        (WebCore::WebGLRenderingContextBase::uniform1fv):
        (WebCore::WebGLRenderingContextBase::uniform1i):
        (WebCore::WebGLRenderingContextBase::uniform1iv):
        (WebCore::WebGLRenderingContextBase::uniform2f):
        (WebCore::WebGLRenderingContextBase::uniform2fv):
        (WebCore::WebGLRenderingContextBase::uniform2i):
        (WebCore::WebGLRenderingContextBase::uniform2iv):
        (WebCore::WebGLRenderingContextBase::uniform3f):
        (WebCore::WebGLRenderingContextBase::uniform3fv):
        (WebCore::WebGLRenderingContextBase::uniform3i):
        (WebCore::WebGLRenderingContextBase::uniform3iv):
        (WebCore::WebGLRenderingContextBase::uniform4f):
        (WebCore::WebGLRenderingContextBase::uniform4fv):
        (WebCore::WebGLRenderingContextBase::uniform4i):
        (WebCore::WebGLRenderingContextBase::uniform4iv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix2fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix3fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix4fv):
        (WebCore::WebGLRenderingContextBase::useProgram):
        (WebCore::WebGLRenderingContextBase::validateProgram):
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):
        (WebCore::WebGLRenderingContextBase::restoreCurrentFramebuffer):
        (WebCore::WebGLRenderingContextBase::restoreCurrentTexture2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

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

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        Because of platform lack of support for variations in in-memory fonts,
        this feature should be disabled on the affected OSes.

        No tests because there is no behavior change (on the relevant platforms).

        * Configurations/FeatureDefines.xcconfig:

2016-10-20  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support IDBObjectStore name assignment.
        <rdar://problem/28806931> and https://bugs.webkit.org/show_bug.cgi?id=163749

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/objectstore-rename-1-private.html
               storage/indexeddb/modern/objectstore-rename-1.html

        Touches a *lot* of code sites, but none of them are particularly interesting.
        They are all just getting the new name spread out to all of the various objects that need it.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::renameObjectStore):
        * Modules/indexeddb/IDBDatabase.h:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::setName):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::renameObjectStoreOnServer):
        (WebCore::IDBTransaction::didRenameObjectStoreOnServer):
        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::renameObjectStore):
        * Modules/indexeddb/client/IDBConnectionProxy.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::renameObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::didRenameObjectStore):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::renameObjectStore):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreRenamed):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::renameObjectStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::rename):

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performRenameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformRenameObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didRenameObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::renameObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:

        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        (WebCore::IDBObjectStoreInfo::rename):

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::renameObjectStoreSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didRenameObjectStore):
        (WebCore::InProcessIDBServer::renameObjectStore):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

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

        Make table.deleteRow(-1) a no-op when there are no rows
        https://bugs.webkit.org/show_bug.cgi?id=163746

        Reviewed by Alex Christensen.

        Make table.deleteRow(-1) a no-op when there are no rows, instead of throwing:
        - https://github.com/whatwg/html/pull/1924

        This is more consistent with the behavior of tbody.deleteRow(-1) and
        tr.deleteCell(-1). This is also consistent with Gecko. Blink is doing the
        same change via:
        - https://codereview.chromium.org/2427963004/

        No new tests, updated existing tests.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::deleteRow):

2016-10-20  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Make sure to handle prefixed transform-style
        https://bugs.webkit.org/show_bug.cgi?id=163756

        Reviewed by Dean Jackson.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-10-20  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix crash when parsing -webkit-margin-collapse
        https://bugs.webkit.org/show_bug.cgi?id=163753

        Reviewed by Dean Jackson.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseShorthand):

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

        Passing a number as the pixel parameter to texImage2D() doesn't thrown an exception
        https://bugs.webkit.org/show_bug.cgi?id=163715

        Reviewed by Darin Adler.

        Enable strict type checking for typed arrays in the bindings, similarly
        do what we do for other wrapper types, as per Web IDL.

        No new tests, updated existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):

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

        Improve error message when passing a null ArrayBuffer to bufferData()
        https://bugs.webkit.org/show_bug.cgi?id=163745

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/bufferData-nullable-array-buffer-view.html

        Update the idl file to accept a nullable ArrayBuffer, and throw
        the relevant error with a more helpful error string.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::bufferData):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

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

        Stop searching for first-letter containers at multi-column boundary.
        https://bugs.webkit.org/show_bug.cgi?id=163739
        <rdar://problem/28810750>

        We should not cross the multi-column boundary while searching for the first-letter container.
        While moving first-letter renderers to a multi-column parent, it could result in finding the wrong
        container and end up adding a new wrapper under the original container (from where we are moving the renderers).    

        Reviewed by David Hyatt.

        Test: fast/css-generated-content/first-letter-move-to-multicolumn-crash.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::blockForAccompanyingFirstLetter):

2016-10-19  Dean Jackson  <dino@apple.com>

        Support CSS Shapes Level 1 without a prefix
        https://bugs.webkit.org/show_bug.cgi?id=163709
        <rdar://problem/28859369>

        Reviewed by Myles Maxfield.

        Support the unprefixed form of CSS Shapes, now that
        it is in CR.

        We have a few failing tests:

        - Some image-based shaping failures, now skipped.
          https://bugs.webkit.org/show_bug.cgi?id=163706

        - Some false negatives, where my understanding
          of the CSS OM seems to suggest that the W3C tests
          are incorrect.
          https://bugs.webkit.org/show_bug.cgi?id=163708

        Tests: imported/w3c/csswg-test/css-shapes-1

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/parser/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):

2016-10-20  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix region, column and page break parsing
        https://bugs.webkit.org/show_bug.cgi?id=163743

        Reviewed by Simon Fraser.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        Add the missing values for break support.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isLegacyBreakProperty):
        (WebCore::CSSPropertyParser::parseValueStart):
        Add a special case for handling legacy break properties. Blink treats them like
        shorthands, but we can't do that without breaking the old parser, so for now
        we add a special case.

        (WebCore::mapFromPageBreakBetween):
        (WebCore::mapFromColumnBreakBetween):
        (WebCore::mapFromRegionBreakBetween):
        Updated to have the AvoidXXX values (where XXX is Column/Page/Region).

        (WebCore::CSSPropertyParser::parseShorthand):
        Remove the consumeLegacyBreak from the shorthand function, since we can't treat
        the legacy break properties as shorthands yet.

2016-10-20  Sam Weinig  <sam@webkit.org>

        Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
        https://bugs.webkit.org/show_bug.cgi?id=163713

        Reviewed by Dan Bernstein.

        Switch uses of WTF::visit to use WTF::switchOn.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::source):
        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
        (WebCore::Node::convertNodesOrStringsIntoNode):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        * html/track/TrackEvent.cpp:
        (WebCore::TrackEvent::TrackEvent):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::typeConversionsDictionaryUnionType):

2016-10-20  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix font family parsing and add CSS region property parsing
        https://bugs.webkit.org/show_bug.cgi?id=163741

        Reviewed by Zalan Bujtas.

        * css/parser/CSSParser.cpp:
        (WebCore::isKeywordPropertyID):
        (WebCore::parseKeywordValue):
        (WebCore::CSSParser::parseValue):
        Modify the old CSSParser to have its own keyword check, since keywords were
        incorrectly added to the new parser when this check was consolidated. Column
        and region breaks are considered keyword properties by the old parser, but
        not by the new parser, since the new parser special cases them and maps them
        into the generic break property.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        Update for regions to make sure all the region properties are there. Remove the
        column and region break properties, since they're not supposed to be here in the
        new parser.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFamilyName):
        Fix font parsing to make font family values so that fonts work.

        (WebCore::consumeFlowProperty):
        Add a function for handling -webkit-flow-from and -webkit-flow-into.

        (WebCore::CSSPropertyParser::parseSingleValue):
        Add support for the region properties.

        (WebCore::mapFromRegionBreakBetween):
        (WebCore::mapFromColumnRegionOrPageBreakInside):
        (WebCore::mapFromLegacyBreakProperty):
        (WebCore::CSSPropertyParser::consumeLegacyBreakProperty):
        (WebCore::mapFromColumnOrPageBreakInside): Deleted.
        Update to handle the region break properties in the same way that column break
        properties are handled.

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

        CRASH in WebCore::MediaSource::seekToTime + 185
        https://bugs.webkit.org/show_bug.cgi?id=163652

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-seek-detach-crash.html

        Add isClosed() checks (which are effectively m_private null-checks) everywhere m_private is
        dereferenced. The one place where m_private is cleared without setting the state to closed
        is stop(), so make stop() set the state to closed as well (without firing any events).

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::seekToTime):
        (WebCore::MediaSource::completeSeek):
        (WebCore::MediaSource::monitorSourceBuffers):
        (WebCore::MediaSource::streamEndedWithError):
        (WebCore::MediaSource::stop):

2016-10-20  Andreas Kling  <akling@apple.com>

        Drop StyleResolver and SelectorQueryCache when entering PageCache.
        <https://webkit.org/b/154238>

        Reviewed by Antti Koivisto.

        Stop keeping these around for cached pages to save lots of memory.
        We can easily rebuild them if a cached navigation occurs, and this
        way we also don't need to worry about invalidating style for cached
        pages in all the right places.

        Restoring a cached page will now lead to a forced style recalc.
        We don't try to defer this (beyond a zero-timer) since it's going
        to happen anyway, and it's nicer to front-load the cost rather than
        stuttering on the first user content interaction.

        * dom/Document.cpp:
        (WebCore::Document::setPageCacheState):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        (WebCore::CachedPage::markForVisitedLinkStyleRecalc): Deleted.
        (WebCore::CachedPage::markForFullStyleRecalc): Deleted.
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVisitedLinkStyleRecalc): Deleted.
        (WebCore::PageCache::markPagesForFullStyleRecalc): Deleted.
        * history/PageCache.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/Page.cpp:
        (WebCore::Page::setViewScaleFactor):
        (WebCore::Page::setDeviceScaleFactor):
        (WebCore::Page::setPagination):
        (WebCore::Page::setPaginationLineGridEnabled):
        (WebCore::Page::setVisitedLinkStore):

2016-10-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build fix after r207616
        https://bugs.webkit.org/show_bug.cgi?id=163333

        Reviewed by Carlos Garcia Campos.

        EGL_PLATFORM_X11_KHR and EGL_PLATFORM_WAYLAND_KHR are not defined
        on the EGL headers shipped by Mesa 10.3 (shipped by Debian 8)

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::initialize):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::initializeEGLDisplay):

2016-10-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] CMake does not support the dep files for implicit dependency
        https://bugs.webkit.org/show_bug.cgi?id=161433

        Reviewed by Brent Fulgham.

        Created a Perl script to generate all IDL bindings for CMake.
        This script can regenerate outdated bindings by based on the
        supplemental dependency and dep files created by
        '--write-dependencies' switch of generate-bindings.pl.

        add_custom_target is used to invoke the script instead of
        add_custom_command because Ninja deletes all output files before
        executing the command in case of add_custom_command.

        USES_TERMINAL option of add_custom_target has two effects:
        1) Not buffering output of the command
        2) Invoking the command in the special Ninja pool which inhibits parallel build
        One needs to use CMake 3.2 or later to enable this feature.

        * CMakeLists.txt: Specified target names for
        GENERATE_BINDINGS. Added dependency for the targets.
        * bindings/scripts/generate-bindings-all.pl: Added.

2016-10-20  Adam Jackson  <ajax@redhat.com>

        Prefer eglGetPlatformDisplay to eglGetDisplay
        https://bugs.webkit.org/show_bug.cgi?id=163333

        Reviewed by Carlos Garcia Campos.

        eglGetDisplay forces the implementation to guess what kind of void* it's been handed. Different implementations
        do different things, in particular glvnd and Mesa behave differently. Fortunately there exists API to tell EGL
        what kind of display it is, so let's use it.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::initialize):
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::initializeEGLDisplay):

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid including egl.h headers in internal headers
        https://bugs.webkit.org/show_bug.cgi?id=163722

        Reviewed by Žan Doberšek.

        egl.h includes eglplatform.h that decides the native types for the platform at compile time. However, we support
        to build with X11 and Wayland at the same time and decide what to use at runtime. Currently GLContext.h includes
        eglplatform.h after wayland-egl.h if Wayland is enabled. That means that the wayland native types are used by
        default from all cpp files including GLContext.h. It currently works in X11 because we cast the value anyway and
        for example EGLNativeWindowType is a pointer in Wayland that can be casted to unsigned long in X11 to represent
        the X Window. This is very fragile in any case, we should avoid adding egl headers in our headers and only
        include it in cpp files. But we also need to ensure we don't use X11 and Wayland in the same cpp file.

        * PlatformGTK.cmake:
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):
        * platform/graphics/GLContext.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createContext):
        (WebCore::GLContextEGL::~GLContextEGL):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLWayland.cpp: Added.
        (WebCore::GLContextEGL::GLContextEGL):
        (WebCore::GLContextEGL::createWindowSurfaceWayland):
        (WebCore::GLContextEGL::createWaylandContext):
        (WebCore::GLContextEGL::destroyWaylandWindow):
        * platform/graphics/egl/GLContextEGLX11.cpp: Added.
        (WebCore::GLContextEGL::GLContextEGL):
        (WebCore::GLContextEGL::createWindowSurfaceX11):
        (WebCore::GLContextEGL::createPixmapContext):
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::createWindowContext):
        (WebCore::GLContextGLX::createContext):
        (WebCore::GLContextGLX::GLContextGLX):
        * platform/graphics/glx/GLContextGLX.h:
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        * platform/graphics/x11/PlatformDisplayX11.cpp:

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid strstr() when checking (E)GL extensions
        https://bugs.webkit.org/show_bug.cgi?id=161958

        Reviewed by Žan Doberšek.

        Add static method GLContext::isExtensionSupported() to properly search extenstions in the given extension
        list, and use it instead of strstr().

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::isExtensionSupported):
        * platform/graphics/GLContext.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createSurfacelessContext):
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::hasSGISwapControlExtension):

2016-10-20  Per Arne Vollan  <pvollan@apple.com>

        [Win][Direct2D] Implement ImageBufferData::getData.
        https://bugs.webkit.org/show_bug.cgi?id=163668

        Reviewed by Brent Fulgham.

        Render data to a bitmap in system memory, which data can be read from.

        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2016-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Wrong use of EGL_DEPTH_SIZE
        https://bugs.webkit.org/show_bug.cgi?id=155536

        Reviewed by Michael Catanzaro.

        What happens here is that the driver doesn't implement EGL_DEPTH_SIZE and the default value, which is 0, is
        returned. Then XCreatePixmap fails because 0 is not a valid depth. The thing is that even if EGL_DEPTH_SIZE or
        EGL_BUFFER_SIZE returned a valid depth, it still might not be supported by the default screen and XCreatePixmap
        can fail. What we need to ensure is that the depth we pass is compatible with the X display, not only with the
        EGL config, to avoid failures when creating the pixmap. So, we can use EGL_NATIVE_VISUAL_ID instead, and
        then ask X for the visual info for that id. If it isn't found then we just return before creating the pixmap,
        but if the visual is found then we can be sure that the depth of the visual will not make the pixmap creation
        fail. However, with the driver I'm using it doesn't matter how we create the pixmap that eglCreatePixmapSurface
        always fails, again with X errors that are fatal by default. Since the driver is not free, I assume it doesn't
        support eglCreatePixmapSurface or it's just buggy, so the only option we have here is trap the x errors and
        ignore them. It turns out that the X errors are not fatal in this case, because eglCreatePixmapSurface ends up
        returning a surface, and since these are offscreen contexts, it doesn't really matter if they contain an
        invalid pixmap, because we never do swap buffer on them, so just ignoring the X errors fixes the crashes and
        makes everythig work. This patch adds a helper class XErrorTrapper that allows to trap XErrors and decide what
        to do with them (ignore, warn or crash) or even not consider a particular set of errors as errors.

        * PlatformEfl.cmake: Add new file to compilation.
        * PlatformGTK.cmake: Ditto.
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createPixmapContext): Use EGL_NATIVE_VISUAL_ID instead of EGL_DEPTH_SIZE to figure out
        the depth to be passed to XCreatePixmap. Also use the XErrorTrapper class to ignore all BadDrawable errors
        produced by eglCreatePixmapSurface() and only show a warning about all other X errors.
        * platform/graphics/x11/XErrorTrapper.cpp: Added.
        (WebCore::xErrorTrappersMap):
        (WebCore::XErrorTrapper::XErrorTrapper):
        (WebCore::XErrorTrapper::~XErrorTrapper):
        (WebCore::XErrorTrapper::errorCode):
        (WebCore::XErrorTrapper::errorEvent):
        * platform/graphics/x11/XErrorTrapper.h: Added.
        (WebCore::XErrorTrapper::XErrorTrapper):

2016-10-20  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        WebRTC: The MediaStreamTrackEvent init dictionary needs a required track member
        https://bugs.webkit.org/show_bug.cgi?id=146232

        Update MediaStreamTrackEvent IDL as per specification.

        Reviewed by Darin Adler.

        No additional test required, rebase existings tests.

        * Modules/mediastream/MediaStreamTrackEvent.idl:

2016-10-19  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: mute support
        https://bugs.webkit.org/show_bug.cgi?id=163677
        <rdar://problem/28851582>

        Reviewed by Dean Jackson.

        We introduce the MuteSupport class which brings support for muting the media
        by clicking on the mute button in the media controls and correctly reflecting
        the media's muted state should the media be muted via the media API.

        Tests: media/modern-media-controls/mute-support/mute-support-button-click.html
               media/modern-media-controls/mute-support/mute-support-media-api.html
               media/modern-media-controls/mute-support/mute-support-muted.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/mute-support.js: Copied from Source/WebCore/Modules/modern-media-controls/media/media-controller.js.
        (MuteSupport.prototype.get control):
        (MuteSupport.prototype.get mediaEvents):
        (MuteSupport.prototype.buttonWasClicked):
        (MuteSupport.prototype.syncControl):
        (MuteSupport):
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsScript):

2016-10-19  Alex Christensen  <achristensen@webkit.org>

        Revert r207151
        https://bugs.webkit.org/show_bug.cgi?id=163675

        Reviewed by Brent Fulgham.

        This code is still useful for comparison with Windows.  I'll remove it again soon.

        No new tests.  No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCorePrefix.h:
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        (WebCore::SubresourceLoader::willCacheResponse):
        * loader/mac/DocumentLoaderMac.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        (WebCore::Page::addSchedulePair):
        (WebCore::Page::removeSchedulePair):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::create):
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::WebCoreNSURLAuthenticationChallengeClient):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ProtectionSpaceBase.cpp:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Deleted.
        (WebCore::AuthenticationChallenge::authenticationClient): Deleted.
        (WebCore::AuthenticationChallenge::platformCompare): Deleted.
        (WebCore::createCF): Deleted.
        (WebCore::core): Deleted.
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/cf/LoaderRunLoopCF.cpp:
        * platform/network/cf/LoaderRunLoopCF.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStorage):
        * platform/network/cf/ProtectionSpaceCFNet.cpp:
        * platform/network/cf/ProtectionSpaceCFNet.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::shouldSniffConnectionProperty):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::encodingRequiresPlatformData):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFURLRequestSetContentDispositionEncodingFallbackArrayFunction):
        (WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        * platform/network/cf/SynchronousLoaderClientCFNet.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cocoa/CredentialCocoa.h:
        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::Credential::Credential):
        (WebCore::Credential::cfCredential):
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::ProtectionSpace::ProtectionSpace):
        (WebCore::ProtectionSpace::cfSpace):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::nsURLRequest):
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo):
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/ios/QuickLook.h:
        * platform/network/ios/QuickLook.mm:
        (-[WebQuickLookHandleAsDelegate initWithConnectionDelegate:]):
        (-[WebQuickLookHandleAsDelegate connection:didReceiveDataArray:]):
        (-[WebQuickLookHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebQuickLookHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebQuickLookHandleAsDelegate connection:didFailWithError:]):
        (-[WebQuickLookHandleAsDelegate detachHandle]):
        (WebCore::QuickLookHandle::create):
        (WebCore::QuickLookHandle::cfResponse):
        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender setCFChallenge:]):
        (-[WebCoreAuthenticationClientAsChallengeSender cfChallenge]):
        (WebCore::core):
        (WebCore::mac):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM):
        (WebCore::addCookie):
        (WebCore::cookieStorage):
        * platform/network/mac/CredentialStorageMac.mm:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceErrorMac.mm:
        (NSErrorFromCFError):
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::nsError):
        (WebCore::ResourceError::operator NSError *):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::getConnectionTimingData):
        * platform/network/mac/ResourceRequestMac.mm: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        * platform/network/mac/SynchronousLoaderClient.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        * platform/network/mac/WebCoreURLResponse.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        * testing/js/WebCoreTestSupportPrefix.h:

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

        REGRESSION (r206025): All YouTube videos play with black bars on all four sides
        https://bugs.webkit.org/show_bug.cgi?id=163308

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-resize.html

        After r206025, we do not fire resize events when the size change notification happens equal-
        to-or-before the current time, which can happen at the very beginning of a stream. Take care
        of this case by checking that the target time isn't actually in the past inside of
        sizeWillChangeAtTime(), and also always skip the boundary time observer when there was no
        previous size (such as after a flush due to a seek).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeWillChangeAtTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNaturalSize):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):

2016-10-19  Nan Wang  <n_wang@apple.com>

        AX: [Mac] Mark element AXAPI should comform to specs
        https://bugs.webkit.org/show_bug.cgi?id=163707

        Reviewed by Chris Fleizach.

        Created a new role for mark elements on Mac and exposed the role
        description.

        Changes are covered in modified test expectaions.

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXMarkText):
        * platform/LocalizedStrings.h:

2016-10-19  Alex Christensen  <achristensen@webkit.org>

        Re-enable URLParser for non-Safari Cocoa apps after r207321
        https://bugs.webkit.org/show_bug.cgi?id=163690

        Reviewed by Darin Adler.

        I disabled the URLParser for non-Safari applications in r207305
        to give me time to make URLParser more compatible, which I did in r207321

        Updated some API tests which will be investigated in 
        https://bugs.webkit.org/show_bug.cgi?id=163127

        * platform/URLParser.cpp:
        (WebCore::URLParser::setEnabled):
        (WebCore::URLParser::enabled):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setURLParserEnabled): Deleted.
        * testing/js/WebCoreTestSupport.h:

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

        CSS font-variation-settings does not handle uppercase axis names in variable fonts
        https://bugs.webkit.org/show_bug.cgi?id=163546

        Reviewed by Dean Jackson.

        Remove the extra toASCIILower() call.

        Test: fast/text/variations/case-axis-names.html

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontVariationTag):

2016-10-19  Anders Carlsson  <andersca@apple.com>

        Remove m_redirectURLs from HistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=163704

        Reviewed by Dan Bernstein.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        * history/HistoryItem.h:

2016-10-19  Joone Hur  <joone.hur@intel.com>

        Add a plain space instead of &nbsp; between text nodes
        https://bugs.webkit.org/show_bug.cgi?id=123163

        Reviewed by Ryosuke Niwa.

        When we rebalance white spaces, &nbsp; can be added as space
        under some conditions. This patch adds a condition that the next
        sibling text node should not exist.

        No new tests, updated existing test.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring):
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace):
        * editing/htmlediting.h:

2016-10-19  Sam Weinig  <sam@webkit.org>

        Add support for sequences and dictionaries in unions
        https://bugs.webkit.org/show_bug.cgi?id=163695

        Reviewed by Chris Dumez.

        Tests:
         - Updated js/dom/webidl-type-mapping.html

        * bindings/generic/IDLTypes.h:
        Add additional helper predicates and fix formatting.

        * bindings/js/JSDOMBinding.h:
        Export hasIteratorMethod for use in testing.

        * bindings/js/JSDOMConvert.h:
        - Change return type of Converter<IDLDictionary<T>> to T, from Optional<T>.
        - Add support for unions conversion step 12 (parts 1-3).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        Support complex default value computations for unions using the convert infrastructure.

        (GenerateParametersCheck):
        (GenerateConstructorDefinition):
        Remove incorrect .value() calls now that Converter<IDLDictionary<T>> returns T.

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

        * testing/TypeConversions.h:
        (WebCore::TypeConversions::setTypeConversionsDictionary):
        (WebCore::TypeConversions::typeConversionsDictionaryLongValue):
        (WebCore::TypeConversions::typeConversionsDictionaryStringValue):
        (WebCore::TypeConversions::typeConversionsDictionarySequenceValue):
        (WebCore::TypeConversions::typeConversionsDictionaryUnionType):
        * testing/TypeConversions.idl:
        Add some complex types to allow testing IDL conversions from tests.

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

        Annotate more DOM and HTML IDLs with CEReactions
        https://bugs.webkit.org/show_bug.cgi?id=163653

        Reviewed by Darin Adler.

        Added CEReactions to more IDL files.

        Test: fast/custom-elements/reactions-for-webkit-extensions.html

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::deleteProperty): Instantiate CustomElementReactionStack, which is equivalent to
        adding CEReactions in IDL.
        (WebCore::JSDOMStringMap::putDelegate): Ditto.
        * dom/Document.idl:
        * dom/Element.idl:
        * html/HTMLElement.idl:
        * page/DOMSelection.idl:

2016-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207557.

        This change caused animations/font-variations tests to time
        out on pre-Sierra Macs.

        Reverted changeset:

        "[macOS] [iOS] Disable variation fonts on macOS El Capitan and
        iOS 9"
        https://bugs.webkit.org/show_bug.cgi?id=163374
        http://trac.webkit.org/changeset/207557

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Support -webkit-border-fit
        https://bugs.webkit.org/show_bug.cgi?id=163687

        Reviewed by Zalan Bujtas.

        Add support for -webkit-border-fit to isValidKeywordPropertyAndValue.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] class and id parsing need to be case-insensitive in HTML quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=163685

        Reviewed by Zalan Bujtas.

        Class and ID parsing should be case-insensitive in quirks mode. Apply the same hack
        that the old parser did and lowercase the class and ids in place.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeId):
        (WebCore::CSSSelectorParser::consumeClass):

2016-10-19  Nan Wang  <n_wang@apple.com>

        AX: crash: com.apple.WebCore: WebCore::AccessibilityObject::findMatchingObjects + 600
        https://bugs.webkit.org/show_bug.cgi?id=163682

        Reviewed by Chris Fleizach.

        There's a null pointer crash when we ask for startObject->parentObjectUnignored() in
        AccessibilityObject::findMatchingObject. Added a null check for the startObject to fix that.

        Test: accessibility/mac/search-predicate-crash.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::findMatchingObjects):

2016-10-19  David Kilzer  <ddkilzer@apple.com>

        Bug 163670: Refine assertions in WebCore::ImageData constructors
        <https://webkit.org/b/163670>
        <rdar://problem/27497338>

        Reviewed by Brent Fulgham.

        No new tests because there is no change in nominal behavior.

        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData(const IntSize&)): Change to use
        ASSERT() since the worst-case scenario here is a nullptr deref.
        Switch to IntSize::area() to compute the area.
        (WebCore::ImageData::ImageData(const IntSize&, Ref<Uint8ClampedArray>&&)):
        Add ASSERT() identical to the previous constructor, and change
        ASSERT_WITH_SECURITY_IMPLICATION() to only fire when m_data is
        not nullptr and the length check fails.  Switch to
        IntSize::area() to compute the area.

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

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        Because of platform lack of support for variations in in-memory fonts,
        this feature should be disabled on the affected OSes.

        No tests because there is no behavior change (on the relevant platforms).

        * Configurations/FeatureDefines.xcconfig:

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix background-position parsing
        https://bugs.webkit.org/show_bug.cgi?id=163681

        Reviewed by Dean Jackson.

        The new parser has a more efficient parsed representation of background positions. When
        background-position is "center" or when no length unit is specified for a dimension,
        then rather than creating a pair, the new parser makes a singleton primitive value.

        Patch the StyleBuilder code to handle this case, resolving center to (left,50%) or
        (top,50%) as appropriate and also handling top/left without any associated length.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):

2016-10-19  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Media Controller: click-to-start support
        https://bugs.webkit.org/show_bug.cgi?id=163659
        <rdar://problem/28845656>

        Reviewed by Dean Jackson.

        We introduce the MediaControllerSupport class which will allow a number of media controller
        features to be implemented by subclasses each devoted to implementing a specific subset of
        media controller features. With this bug, we add the correct behavior for click-to-start,
        only showing the start button under the right circumstances.

        A MediaController object indicates which media control to attach click event listeners to
        through the `control` property, and a list of media events it should register on the media
        element through the `mediaEvents` property. Then, as the user interacts with the specified
        control and the media, the Button delegation method `buttonWasClicked()` and the `syncControl()`
        methods are called to allow for the media state to be correctly set and represented in the
        media controls. Custom event handling for the specified events can also be achieved by
        subclassing the `handleEvent()` method.

        Tests: media/modern-media-controls/start-support/start-support-audio.html
               media/modern-media-controls/start-support/start-support-autoplay.html
               media/modern-media-controls/start-support/start-support-click-to-start.html
               media/modern-media-controls/start-support/start-support-error.html
               media/modern-media-controls/start-support/start-support-fullscreen.html
               media/modern-media-controls/start-support/start-support-manual-play.html
               media/modern-media-controls/start-support/start-support-no-source.html

        * Modules/modern-media-controls/media/media-controller-support.js: Added.
        (MediaControllerSupport):
        (MediaControllerSupport.prototype.get control):
        (MediaControllerSupport.prototype.get mediaEvents):
        (MediaControllerSupport.prototype.buttonWasClicked):
        (MediaControllerSupport.prototype.handleEvent):
        (MediaControllerSupport.prototype.syncControl):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.buttonWasClicked): Deleted.
        * Modules/modern-media-controls/media/start-support.js: Added.
        (StartSupport.prototype.get control):
        (StartSupport.prototype.get mediaEvents):
        (StartSupport.prototype.buttonWasClicked):
        (StartSupport.prototype.handleEvent):
        (StartSupport.prototype.syncControl):
        (StartSupport.prototype._shouldShowStartButton):
        (StartSupport):

2016-10-19  Aaron Chu  <aaron_chu@apple.com>

        Web Inspector: AXI: expose computed tree node and heading level
        https://bugs.webkit.org/show_bug.cgi?id=130825
        <rdar://problem/16442349>

        Reviewed by Joseph Pecoraro.

        Exposing two new accessibility properties: Heading Level and Hierarchical Level.

        Updated Test: LayoutTest/inspector/dom/getAccessibilityPropertiesForNode.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2016-10-19  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Implement MediaEndpointPeerConnection::stop()
        https://bugs.webkit.org/show_bug.cgi?id=163660

        Reviewed by Philippe Normand.

        Make MediaEndpointPeerConnection::stop() stop its MediaEndpoint.

        Testing: This fix deals with cleanup and tearing down resources down in the platform layer
        and is not covered by automated tests. It is however observable in the manual test added
        in [1] where the remote videos should stop when the connections are closed.

        [1] http://webkit.org/b/163327

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

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix -webkit-mask-box-image parsing
        https://bugs.webkit.org/show_bug.cgi?id=163676

        Reviewed by Dean Jackson.

        -webkit-mask-box-image is not a shorthand in our current code, so treat it the same as the legacy
        -webkit-border-image.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):

2016-10-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][EFL] Build fix after r207543.
        https://bugs.webkit.org/show_bug.cgi?id=163671

        Unreviewed.

        Fix typo on the filename of the included header:
        Mac filesystem is case insensitive, but Linux filesystems are case sensitive.

        * css/parser/CSSPropertyParser.cpp:

2016-10-19  Zalan Bujtas  <zalan@apple.com>

        Use anonymous table row for new child at RenderTableRow::addChild() if available.
        https://bugs.webkit.org/show_bug.cgi?id=163651
        <rdar://problem/28705022>

        Reviewed by David Hyatt.

        We should try to prevent the continuation siblings from getting separated and inserted into
        wrapper renderers. It makes finding these continuation siblings difficult.
        This patch adds a checks for anonymous table rows so that we could find a closer common ancestor of
        beforeChild/new child. 

        Test: fast/table/crash-when-table-has-continuation-and-content-inserted.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject): Add continuation information.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):

2016-10-19  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup WebCore/workers
        https://bugs.webkit.org/show_bug.cgi?id=163635

        Reviewed by Chris Dumez.

        * workers/*:
        Cleanup like pragma once, nullptr, remove stale includes, declarations.

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

        MouseEvent's coordinates should be 0 for simulated clicks
        https://bugs.webkit.org/show_bug.cgi?id=163648

        Reviewed by Darin Adler.

        MouseEvent's coordinates should be 0 / 0 for simulated clicks triggered
        by JavaScript (i.e. via element.click()). This behavior matches Chrome
        and Firefox.

        WebKit was computing actual coordinates for the element which was
        expensive, especially because computing  screenX / screenY required
        a synchronous IPC with the UI process.

        Test: fast/events/element-click-no-coords.html

        * dom/Element.cpp:
        (WebCore::Element::dispatchSimulatedClick):
        * dom/SimulatedClick.cpp:
        (WebCore::simulateMouseEvent):
        (WebCore::simulateClick):
        * dom/SimulatedClick.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::click):

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix transform parsing
        https://bugs.webkit.org/show_bug.cgi?id=163671

        Reviewed by Dean Jackson.

        The new parser turned function names into CSSValueIDs and made CSSFunctionValue store them. This
        meant it could be used to handle transform values, with the function name representing the
        transform operation efficiently as a CSSValueID.

        The old parser, however, creates WebKitCSSTransformValues. This value does not exist in the new
        parser. Rather than forcing the old and new parser over to CSSFunctionValues, I opted to
        just make the new parser build WebkitCSSTransformValues too.

        The main reason I did this is that WebkitCSSTransformValue is actually exposed to the Web via
        IDL. To be safe, I am not eliminating it (even though Blink has).

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTranslate3d):
        (WebCore::consumeNumbers):
        (WebCore::consumePerspective):
        (WebCore::transformOperationForCSSValueID):
        (WebCore::consumeTransformValue):

2016-10-19  Darin Adler  <darin@apple.com>

        Move XPath from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163656

        Reviewed by Chris Dumez.

        * dom/Document.cpp:
        (WebCore::Document::createExpression): Use ExceptionOr.
        (WebCore::Document::createNSResolver): Return Ref.
        (WebCore::Document::evaluate): Use ExceptionOr.
        * dom/Document.h: Updated for above changes.
        * dom/Document.idl: Use non-legacy exceptions for the functions above.

        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath): Call XPath functions
        with new interface.

        * xml/DOMParser.cpp:
        (WebCore::DOMParser::DOMParser): Marked inline.
        (WebCore::DOMParser::create): Moved here from header.
        (WebCore::DOMParser::parseFromString): Use ExceptionOr.
        * xml/DOMParser.h: Updated for above changes.
        * xml/DOMParser.idl: Use non-legacy exception.

        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::createExpression): Use ExceptionOr.
        (WebCore::XPathEvaluator::evaluate): Ditto.
        * xml/XPathEvaluator.h: Updated for above changes.
        * xml/XPathEvaluator.idl: Use non-legacy exceptions.

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::createExpression): Use ExceptionOr.
        (WebCore::XPathExpression::evaluate): Ditto.
        * xml/XPathExpression.h: Updated for above changes.
        * xml/XPathExpression.idl: Use non-legacy exceptions.

        * xml/XPathGrammar.y: Added include of XPathStep.h.

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::Parser): Initialize three scalar data members
        in the class definition rather than here.
        (WebCore::XPath::Parser::parseStatement): Use ExceptionOr.
        * xml/XPathParser.h: Updated for above changes.

        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult): Use a reference rather than a
        pointer for the document. Alao initialize two scalar data members
        in the class definition rather than here.
        (WebCore::XPathResult::convertTo): Use ExceptionOr.
        (WebCore::XPathResult::numberValue): Ditto.
        (WebCore::XPathResult::stringValue): Ditto.
        (WebCore::XPathResult::booleanValue): Ditto.
        (WebCore::XPathResult::singleNodeValue): Ditto.
        (WebCore::XPathResult::snapshotLength): Ditto.
        (WebCore::XPathResult::iterateNext): Ditto.
        (WebCore::XPathResult::snapshotItem): Ditto.
        * xml/XPathResult.h: Updated for the changes above.
        * xml/XPathResult.idl: Use non-legacy exceptions.

2016-10-19  Nan Wang  <n_wang@apple.com>

        AX: [Mac] Meter element should use AXValueDescription to descrbe the status of the value
        https://bugs.webkit.org/show_bug.cgi?id=163610

        Reviewed by Chris Fleizach.

        Exposed the goodness of the meter value in AXValueDescription.

        Test: accessibility/mac/meter-gauge-value-description.html

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::gaugeRegionValueDescription):
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper valueDescriptionForMeter]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXMeterGaugeRegionOptimumText):
        (WebCore::AXMeterGaugeRegionSuboptimalText):
        (WebCore::AXMeterGaugeRegionLessGoodText):
        * platform/LocalizedStrings.h:

2016-10-19  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix named color parsing
        https://bugs.webkit.org/show_bug.cgi?id=163662

        Reviewed by Zalan Bujtas.

        Named color parsing in the old parser for extended colors relied on constructing a Color with the
        name and doing a lookup that way.

        The new parser allows the back end to hold a primitive identifier value for extended colors.

        StyleColor contains a helper function for looking up the correct color.

        This patch switches both the old and the new parsers over to the new StyleColor function.

        Also remove some asserts from the CSSSelectorList, since the new parser allows it to be empty and
        detects parsing failure that way.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::operator=):
        * css/StyleColor.cpp:
        (WebCore::StyleColor::isColorKeyword):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::colorForCSSValue): Deleted.

2016-10-19  Youenn Fablet  <youenn@apple.com>

        Remove SecurityOrigin::taintsCanvas
        https://bugs.webkit.org/show_bug.cgi?id=163594

        Reviewed by Darin Adler.

        No change of behavior.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canReceiveDragData):
        (WebCore::SecurityOrigin::taintsCanvas): Deleted.
        * page/SecurityOrigin.h:

2016-10-18  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Fix compound selector parsing.
        https://bugs.webkit.org/show_bug.cgi?id=163649

        Reviewed by Darin Adler.

        The new CSS parser is failing to handle compound selectors. The code has an assumption that the
        first value in the RelationType enum is SubSelector. This patch changes the enum to have the same
        name used in Blink, RelationType, and to make the ordering be exactly the same.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::relation):
        (WebCore::CSSSelector::setRelation):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::canMatchHoverOrActiveInQuirksMode):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::insertTagHistory):
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::setRelation):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeComplexSelector):
        (WebCore::CSSSelectorParser::consumeCombinator):
        * css/parser/CSSSelectorParser.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::constructFragmentsInternal):

2016-10-19  Javier Fernandez  <jfernandez@igalia.com>

        Web Inspector: Debugger buttons positioned incorrectly, align-content default value is unexpected
        https://bugs.webkit.org/show_bug.cgi?id=163572

        Reviewed by Sergio Villar Senin.

        We only allow the new CSS Box Alignment syntax when the Grid Layout
        feature is enabled. Due to flexbox backward compatibility we have
        implemented a different code path for the style initial/default values
        assignment. However, we have incorrectly resolved both align-content
        and justify-content to 'flex-start' when grid layout is disabled.

        This patch changes the approach, so we set 'normal' (the value specified
        by the new syntax) for both properties, but using the values defined in
        the old syntax (Flexbox specification) at computed style resolution.

        Since 'stretch' is the default value for the align-content property, this
        issue implies that any flexbox line with an undefined height will be
        laid out incorrectly, if not explicitly set via CSS, because flex items
        can't use the available height, even though they use 'stretch' for their
        'align-self' properties.

        Test: css3/flexbox/flexbox-lines-must-be-stretched-by-default.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialContentAlignment):

2016-10-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] REGRESSION(r207396) Build broken with Clang.
        https://bugs.webkit.org/show_bug.cgi?id=163599

        Suggested and reviewed by Darin Adler.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getStringValue):

2016-10-19  Darin Adler  <darin@apple.com>

        Try to fix build.

        * page/PerformanceUserTiming.cpp: Add back class name; needed by some compiler versions.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build after r207522.

        * page/PerformanceUserTiming.cpp: Include PerformanceTiming.h.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build after r207519.

        The build error is:
        IDL ATTRIBUTE CHECKER ERROR: Unknown IDL attribute [PassContext] is found at TestRunner.idl.

        Because PassContext was removed from IDLAttributes.txt in rr207519, but it's implemented by
        CodeGeneratorTestRunner.pm and used by TestRunner.idl.

        * bindings/scripts/IDLAttributes.txt: Bring back PassContext.

2016-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with GCC 4.9 after r207463.

        Add constructors to MediaConstraintsData.

        * Modules/mediastream/MediaConstraintsImpl.h:
        (WebCore::MediaConstraintsData::MediaConstraintsData):

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

        [Mac][MSE] Movies with a 'mehd' box have a zero-duration
        https://bugs.webkit.org/show_bug.cgi?id=163641

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-init-segment-duration.html

        The canonical (ISO/IEC 14496-12:2012) way to signal the duration of a fragmented media file is to add a
        'mehd' box to the 'mvex' container box specifying the duration of the fragment. Support this through the
        AVAsset -overallDurationHint property.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        * platform/spi/mac/AVFoundationSPI.h:

2016-10-18  Darin Adler  <darin@apple.com>

        Move many miscellaneous classes from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163645

        Reviewed by Ryosuke Niwa.

        * bindings/js/JSCryptoCustom.cpp:
        (WebCore::JSCrypto::getRandomValues): Use propagateException.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage): Ditto.
        (WebCore::JSDOMWindow::setTimeout): Use toJSNumber.
        (WebCore::JSDOMWindow::setInterval): Ditto.
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter): Use propagateException.
        (WebCore::JSStorage::deleteProperty): Ditto.
        (WebCore::JSStorage::getOwnPropertyNames): Ditto.
        (WebCore::JSStorage::putDelegate): Ditto.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::update): Use ExceptionOr.
        (WebCore::DOMApplicationCache::swapCache): Ditto.
        * loader/appcache/DOMApplicationCache.h: Update for above changes.
        * loader/appcache/DOMApplicationCache.idl: Use non-legacy exceptions.

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues): Use ExceptionOr.
        (WebCore::Crypto::webkitSubtle): Ditto.
        * page/Crypto.h: Updated for above changes.
        * page/Crypto.idl: Use non-legacy exceptions.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow): Initialize many data members in
        the class definition instead of here.
        (WebCore::DOMWindow::page): Use nullptr.
        (WebCore::DOMWindow::screen): Ditto.
        (WebCore::DOMWindow::crypto): Ditto.
        (WebCore::DOMWindow::locationbar): Ditto.
        (WebCore::DOMWindow::menubar): Ditto.
        (WebCore::DOMWindow::personalbar): Ditto.
        (WebCore::DOMWindow::scrollbars): Ditto.
        (WebCore::DOMWindow::statusbar): Ditto.
        (WebCore::DOMWindow::toolbar): Ditto.
        (WebCore::DOMWindow::applicationCache): Ditto.
        (WebCore::DOMWindow::sessionStorage): Use ExceptionOr.
        (WebCore::DOMWindow::localStorage): Ditto.
        (WebCore::DOMWindow::postMessage): Ditto.
        (WebCore::DOMWindow::frameElement): Use nullptr.
        (WebCore::DOMWindow::self): Ditto.
        (WebCore::DOMWindow::opener): Ditto.
        (WebCore::DOMWindow::parent): Ditto.
        (WebCore::DOMWindow::top): Ditto.
        (WebCore::DOMWindow::getComputedStyle): Use Ref.
        (WebCore::DOMWindow::setTimeout): Use ExceptionOr.
        (WebCore::DOMWindow::setInterval): Ditto.
        (WebCore::didAddStorageEventListener): Use a reference instead of a
        pointer, and ignore return value instead of using IGNORE_EXCEPTION.
        (WebCore::DOMWindow::addEventListener): Pass reference to function above.
        (WebCore::DOMWindow::dispatchEvent): Use enum class version of PageStatus.
        * page/DOMWindow.h: Updated for changes above. Also changed indentatation.
        * page/DOMWindow.idl: Use non-legacy exceptions.

        * page/EventSource.cpp:
        (WebCore::EventSource::create): Use ExceptionOr.
        * page/EventSource.h: Updated for change above.
        * page/EventSource.idl: Use non-legacy exception.

        * page/Location.cpp:
        (WebCore::Location::setProtocol): Use ExceptionOr.
        * page/Location.h: Updated for change above.
        * page/Location.idl: Use non-legacy exception.

        * page/Performance.cpp:
        (WebCore::Performance::Performance): Remove unnecessary initialization of
        smart pointer to null, and moved initialization of m_resourceTimingBufferSize
        to the header.
        (WebCore::Performance::navigation): Made non-const and return a reference.
        (WebCore::Performance::timing): Ditto.
        (WebCore::Performance::addResourceTiming): Change LoadTiming argument to use
        a const& instead of passing in a copy.
        (WebCore::Performance::webkitMark): Use ExceptionOr and make_unique.
        (WebCore::Performance::webkitClearMarks): Ditto.
        (WebCore::Performance::webkitMeasure): Ditto.
        (WebCore::Performance::webkitClearMeasures): Ditto.
        (WebCore::Performance::reduceTimeResolution): Use std::floor.
        * page/Performance.h: Updated for above changes. Removed unneeded includes.
        Made more things private. Removed unneeded reference counting of UserTiming.
        * page/Performance.idl: Use non-legacy exceptions.

        * page/PerformanceUserTiming.cpp:
        (WebCore::restrictedMarkFunction): Removed unneeded class name.
        (WebCore::UserTiming::UserTiming): Take a reference instead of a pointer.
        (WebCore::UserTiming::mark): Use ExceptionOr.
        (WebCore::UserTiming::findExistingMarkStartTime): Ditto.
        (WebCore::UserTiming::measure): Ditto.
        (WebCore::getEntrySequenceByName): Simplified code using HashMap::get.
        * page/PerformanceUserTiming.h: Updated for above changes. Removed reference
        counting since this is a single-owner object.

        * page/UserMessageHandler.cpp:
        (WebCore::UserMessageHandler::postMessage): Use ExceptionOr.
        * page/UserMessageHandler.h: Updated for above change.
        * page/UserMessageHandler.idl: Use non-legacy exception.

        * storage/Storage.cpp:
        (WebCore::Storage::length): Use ExceptionOr.
        (WebCore::Storage::key): Ditto.
        (WebCore::Storage::getItem): Ditto.
        (WebCore::Storage::setItem): Ditto.
        (WebCore::Storage::removeItem): Ditto.
        (WebCore::Storage::clear): Ditto.
        (WebCore::Storage::contains): Ditto.
        * storage/Storage.h: Updated for above change.
        * storage/Storage.idl: Use non-legacy exceptions.

        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        Updated for ExceptionOr.
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames): Ditto.

2016-10-18  Darin Adler  <darin@apple.com>

        Move internal testing classes from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163553

        Reviewed by Ryosuke Niwa.

        * bindings/js/JSDOMBinding.h: Added toJSArray. Also exported a function that
        is now needed in the testing library.
        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValue): Added code to handle the jsArray case with an exception.

        * css/parser/CSSPropertyParser.cpp: Fix #if to make code compile when
        CSS_SCROLL_SNAP is not enabled.

        * dom/Element.cpp:
        (WebCore::Element::createShadowRoot): Changed return type to a raw pointer.
        There is no reason it needs to be a RefPtr.
        * dom/Element.h: Updated for above change.

        * svg/SVGPathStringBuilder.h: Exported class and made more public so it can
        be used in test code.

        * svg/SVGPathUtilities.cpp:
        (WebCore::pathIteratorForBuildingString): Deleted. Needed only for test code,
        so moved into there.
        (WebCore::buildStringFromPath): Deleted. Ditto.
        * svg/SVGPathUtilities.h: Removed buildStringFromPath.

        * testing/InternalSettings.cpp: Simplified the guard macro and used the all
        capitals style that our style guide prescribes for non-function-like macros.
        (WebCore::InternalSettings::create): Moved here, no longer inline Use m_page.
        (WebCore::InternalSettings::resetToConsistentState): Updated since settings
        returns a reference.
        (WebCore::InternalSettings::settings): Changed to return a reference and
        assert that m_page is not null; functions all check m_page for null first.
        (WebCore::InternalSettings::setTouchEventEmulationEnabled): Updated to use
        ExceptionOr, do an m_page check, and use settings that returns a reference.
        (WebCore::InternalSettings::setStandardFontFamily): Ditto.
        (WebCore::InternalSettings::setSerifFontFamily): Ditto.
        (WebCore::InternalSettings::setSansSerifFontFamily): Ditto.
        (WebCore::InternalSettings::setFixedFontFamily): Ditto.
        (WebCore::InternalSettings::setCursiveFontFamily): Ditto.
        (WebCore::InternalSettings::setFantasyFontFamily): Ditto.
        (WebCore::InternalSettings::setPictographFontFamily): Ditto.
        (WebCore::InternalSettings::setTextAutosizingEnabled): Ditto.
        (WebCore::InternalSettings::setTextAutosizingWindowSizeOverride): Ditto.
        (WebCore::InternalSettings::setMediaTypeOverride): Ditto.
        (WebCore::InternalSettings::setCanStartMedia): Ditto.
        (WebCore::InternalSettings::setAllowsAirPlayForMediaPlayback): Ditto.
        (WebCore::InternalSettings::setEditingBehavior): Ditto.
        (WebCore::InternalSettings::setShouldDisplayTrackKind): Ditto.
        (WebCore::InternalSettings::shouldDisplayTrackKind): Ditto.
        (WebCore::InternalSettings::setStorageBlockingPolicy): Ditto.
        (WebCore::InternalSettings::setPreferMIMETypeForImages): Ditto.
        (WebCore::InternalSettings::setImagesEnabled): Ditto.
        (WebCore::InternalSettings::setPDFImageCachingPolicy): Ditto.
        (WebCore::InternalSettings::setMinimumTimerInterval): Ditto.
        (WebCore::InternalSettings::setDefaultVideoPosterURL): Ditto.
        (WebCore::InternalSettings::setForcePendingWebGLPolicy): Ditto.
        (WebCore::InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls): Ditto.
        (WebCore::InternalSettings::setUseLegacyBackgroundSizeShorthandBehavior): Ditto.
        (WebCore::InternalSettings::setAutoscrollForDragAndDropEnabled): Ditto.
        (WebCore::InternalSettings::setFontFallbackPrefersPictographs): Ditto.
        (WebCore::InternalSettings::setWebFontsAlwaysFallBack): Ditto.
        (WebCore::InternalSettings::setQuickTimePluginReplacementEnabled): Ditto.
        (WebCore::InternalSettings::setYouTubeFlashPluginReplacementEnabled): Ditto.
        (WebCore::InternalSettings::setBackgroundShouldExtendBeyondPage): Ditto.
        (WebCore::InternalSettings::setShouldConvertPositionStyleOnCopy): Ditto.
        (WebCore::InternalSettings::setScrollingTreeIncludesFrames): Ditto.
        (WebCore::InternalSettings::setAllowsInlineMediaPlayback): Ditto.
        (WebCore::InternalSettings::setAllowsInlineMediaPlaybackAfterFullscreen): Ditto.
        (WebCore::InternalSettings::setInlineMediaPlaybackRequiresPlaysInlineAttribute): Ditto.
        (WebCore::InternalSettings::setIndexedDBWorkersEnabled): Ditto.
        (WebCore::InternalSettings::userInterfaceDirectionPolicy): Ditto.
        (WebCore::InternalSettings::setUserInterfaceDirectionPolicy): Ditto.
        (WebCore::InternalSettings::systemLayoutDirection): Ditto.
        (WebCore::InternalSettings::setSystemLayoutDirection): Ditto.
        (WebCore::InternalSettings::variationFontsEnabled): Ditto.
        (WebCore::InternalSettings::setVariationFontsEnabled): Ditto.
        (WebCore::InternalSettings::forcedPrefersReducedMotionValue): Ditto.
        (WebCore::InternalSettings::setForcedPrefersReducedMotionValue): Ditto.
        * testing/InternalSettings.h: Updated for above changes. Also moved Backup to make
        it private instead of public.
        * testing/InternalSettings.idl: Use non-legacy execption. Also removed unneeded
        exception for setIndexedDBWorkersEnabled.

        * testing/Internals.cpp: Marked InspectorStubFrontend final and made everything private.
        (WebCore::Internals::setCanShowModalDialogOverride): Use ExceptionOr.
        (WebCore::Internals::lastSpatialNavigationCandidateCount): Ditto.
        (WebCore::Internals::animationsAreSuspended): Ditto.
        (WebCore::Internals::suspendAnimations): Ditto.
        (WebCore::Internals::resumeAnimations): Ditto.
        (WebCore::Internals::pauseAnimationAtTimeOnElement): Ditto.
        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement): Ditto.
        (WebCore::Internals::pauseTransitionAtTimeOnElement): Ditto.
        (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement): Ditto.
        (WebCore::Internals::elementRenderTreeAsText): Ditto.
        (WebCore::Internals::ensureShadowRoot): Ditto.
        (WebCore::Internals::createShadowRoot): Ditto.
        (WebCore::Internals::shadowRootType): Ditto.
        (WebCore::Internals::isTimerThrottled): Ditto.
        (WebCore::Internals::formControlStateOfPreviousHistoryItem): Ditto.
        (WebCore::Internals::setFormControlStateOfPreviousHistoryItem): Ditto.
        (WebCore::Internals::absoluteCaretBounds): Ditto.
        (WebCore::Internals::inspectorHighlightRects): Ditto.
        (WebCore::Internals::inspectorHighlightObject): Ditto.
        (WebCore::Internals::markerCountForNode): Ditto.
        (WebCore::Internals::markerAt): Ditto.
        (WebCore::Internals::markerRangeForNode): Ditto.
        (WebCore::Internals::markerDescriptionForNode): Ditto.
        (WebCore::Internals::dumpMarkerRects): Ditto.
        (WebCore::Internals::setMarkedTextMatchesAreHighlighted): Ditto.
        (WebCore::Internals::setScrollViewPosition): Ditto.
        (WebCore::Internals::setViewBaseBackgroundColor): Ditto.
        (WebCore::Internals::setPagination): Ditto.
        (WebCore::Internals::setPaginationLineGridEnabled): Ditto.
        (WebCore::Internals::configurationForViewport): Ditto.
        (WebCore::Internals::wasLastChangeUserEdit): Ditto.
        (WebCore::Internals::scrollElementToRect): Ditto.
        (WebCore::Internals::autofillFieldName): Ditto.
        (WebCore::Internals::paintControlTints): Ditto.
        (WebCore::Internals::rangeForDictionaryLookupAtLocation): Ditto.
        (WebCore::Internals::setDelegatesScrolling): Ditto.
        (WebCore::Internals::lastSpellCheckRequestSequence): Ditto.
        (WebCore::Internals::lastSpellCheckProcessedSequence): Ditto.
        (WebCore::Internals::wheelEventHandlerCount): Ditto.
        (WebCore::Internals::touchEventHandlerCount): Ditto.
        (WebCore::Internals::nodesFromRect): Ditto.
        (WebCore::Internals::setBatteryStatus): Ditto.
        (WebCore::Internals::setDeviceProximity): Ditto.
        (WebCore::Internals::hasSpellingMarker): Ditto.
        (WebCore::Internals::hasAutocorrectedMarker): Ditto.
        (WebCore::Internals::handleAcceptedCandidate): Ditto.
        (WebCore::Internals::isOverwriteModeEnabled): Ditto.
        (WebCore::Internals::toggleOverwriteModeEnabled): Ditto.
        (WebCore::Internals::countMatchesForText): Ditto.
        (WebCore::Internals::countFindMatches): Ditto.
        (WebCore::Internals::setInspectorIsUnderTest): Ditto.
        (WebCore::Internals::hasGrammarMarker): Ditto.
        (WebCore::Internals::numberOfScrollableAreas): Ditto.
        (WebCore::Internals::isPageBoxVisible): Ditto.
        (WebCore::Internals::layerTreeAsText): Ditto.
        (WebCore::Internals::repaintRectsAsText): Ditto.
        (WebCore::Internals::scrollingStateTreeAsText): Ditto.
        (WebCore::Internals::mainThreadScrollingReasons): Ditto.
        (WebCore::Internals::nonFastScrollableRects): Ditto.
        (WebCore::Internals::setElementUsesDisplayListDrawing): Ditto.
        (WebCore::Internals::setElementTracksDisplayListReplay): Ditto.
        (WebCore::Internals::displayListForElement): Ditto.
        (WebCore::Internals::replayDisplayListForElement): Ditto.
        (WebCore::Internals::garbageCollectDocumentResources): Ditto.
        (WebCore::Internals::insertAuthorCSS): Ditto.
        (WebCore::Internals::insertUserCSS): Ditto.
        (WebCore::Internals::pageProperty): Ditto.
        (WebCore::Internals::pageSizeAndMarginsInPixels): Ditto.
        (WebCore::Internals::setPageScaleFactor): Ditto.
        (WebCore::Internals::setPageZoomFactor): Ditto.
        (WebCore::Internals::setTextZoomFactor): Ditto.
        (WebCore::Internals::setUseFixedLayout): Ditto.
        (WebCore::Internals::setFixedLayoutSize): Ditto.
        (WebCore::Internals::setViewExposedRect): Ditto.
        (WebCore::Internals::setHeaderHeight): Ditto.
        (WebCore::Internals::setFooterHeight): Ditto.
        (WebCore::Internals::setTopContentInset): Ditto.
        (WebCore::Internals::setApplicationCacheOriginQuota): Ditto.
        (WebCore::Internals::startTrackingRepaints): Ditto.
        (WebCore::Internals::stopTrackingRepaints): Ditto.
        (WebCore::Internals::startTrackingLayerFlushes): Ditto.
        (WebCore::Internals::layerFlushCount): Ditto.
        (WebCore::Internals::startTrackingStyleRecalcs): Ditto.
        (WebCore::Internals::styleRecalcCount): Ditto.
        (WebCore::Internals::startTrackingCompositingUpdates): Ditto.
        (WebCore::Internals::compositingUpdateCount): Ditto.
        (WebCore::Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks): Ditto.
        (WebCore::Internals::getCurrentCursorInfo): Ditto.
        (WebCore::Internals::mediaElementHasCharacteristic): Ditto.
        (WebCore::Internals::captionsStyleSheetOverride): Ditto.
        (WebCore::Internals::setCaptionsStyleSheetOverride): Ditto.
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride): Ditto.
        (WebCore::Internals::setCaptionDisplayMode): Ditto.
        (WebCore::Internals::selectionBounds): Ditto.
        (WebCore::Internals::isVibrating): Ditto.
        (WebCore::Internals::isPluginUnavailabilityIndicatorObscured): Ditto.
        (WebCore::Internals::beginMediaSessionInterruption): Ditto.
        (WebCore::Internals::setMediaSessionRestrictions): Ditto.
        (WebCore::Internals::postRemoteControlCommand): Ditto.
        (WebCore::Internals::setMockMediaPlaybackTargetPickerState): Ditto.
        (WebCore::Internals::installMockPageOverlay): Ditto.
        (WebCore::Internals::pageOverlayLayerTreeAsText): Ditto.
        (WebCore::Internals::scrollSnapOffsets): Ditto.
        (WebCore::Internals::pathStringWithShrinkWrappedRects): Moved the code that builds
        the path string in here for now since it's only used for this testing.
        (WebCore::Internals::resourceLoadStatisticsForOrigin): Take a const String&.

        * testing/Internals.h: Updated for above changes.
        * testing/Internals.idl: Use non-legacy exceptions.

2016-10-18  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Drop webkit-specific extended attributes that are no longer useful
        https://bugs.webkit.org/show_bug.cgi?id=163643

        Reviewed by Ryosuke Niwa.

        Drop webkit-specific IDL extended attributes that are no longer useful:
        - [CustomReturn]: I believe this used to be for ObjC bindings. It has
          no impact in JS bindings.
        - [Deletable]: It only had an impact on static attributes and was only
          used on HTMLAllCollection.all, which is not static. I updated the
          bindings generator to so that static attributes are now configurable
          by default (unless marked as [Unforgeable], as per Web IDL [1]. This
          causes Notification.permission (This only static attribute we have)
          to become deletable. This behavior is consistent with the specification
          and with Chrome. I added test coverage for this.
        - [ImplementationNamespace]: Implemented but unused.
        - [PassContext]: Not implemented and unused.
        - [TypedArray=*]: Not implemented and unused.

        [1] https://heycam.github.io/webidl/#es-attributes

        Test: fast/notifications/notification-permisssion-deletable.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetNamespaceForInterface):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * dom/Node.idl:
        * html/HTMLDocument.idl:

2016-10-18  Sam Weinig  <sam@webkit.org>

        Replace std::experimental::variant with WTF::Variant (or similar)
        https://bugs.webkit.org/show_bug.cgi?id=163626

        Reviewed by Chris Dumez.

        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
        into the WTF namespace.

        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::isBlob):
        (WebCore::FetchBody::isFormData):
        (WebCore::FetchBody::isArrayBuffer):
        (WebCore::FetchBody::isArrayBufferView):
        (WebCore::FetchBody::isURLSearchParams):
        (WebCore::FetchBody::isText):
        (WebCore::FetchBody::blobBody):
        (WebCore::FetchBody::formDataBody):
        (WebCore::FetchBody::arrayBufferBody):
        (WebCore::FetchBody::arrayBufferViewBody):
        (WebCore::FetchBody::textBody):
        (WebCore::FetchBody::urlSearchParamsBody):
        * bindings/generic/IDLTypes.h:
        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::hasException):
        (WebCore::ExceptionOr<ReturnType>::releaseException):
        (WebCore::ExceptionOr<ReturnType>::releaseReturnValue):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::source):
        * dom/MessageEvent.h:
        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
        (WebCore::Node::convertNodesOrStringsIntoNode):
        * dom/Node.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        * html/HTMLSelectElement.h:
        * html/track/TrackEvent.cpp:
        (WebCore::TrackEvent::TrackEvent):
        * html/track/TrackEvent.h:

2016-10-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline bindings tests after Sam's r207505.

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        (WebCore::JSTestCallbackFunction::callbackWithSerializedScriptValueParam):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionSerializedValueCaller):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValueGetter):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValueGetter):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValueGetter):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter):
        (WebCore::setJSTestSerializedScriptValueInterfaceValueFunction):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValueFunction):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsImmutableSerializedScriptValueGetter):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValueFunction):

2016-10-18  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Kill support for [LegacyConstructorTemplate=Event] / [LegacyInitializedByEventConstructor]
        https://bugs.webkit.org/show_bug.cgi?id=163630

        Reviewed by Darin Adler.

        Kill support for [LegacyConstructorTemplate=Event] / [LegacyInitializedByEventConstructor] in our
        IDL now that all our events use proper constructors instead.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (IsConstructable):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/Event.idl:
        * dom/UIEvent.h:
        (WebCore::UIEvent::create):
        * dom/UIEvent.idl:

2016-10-18  Chris Dumez  <cdumez@apple.com>

        Changing details.open should cause a toggle event to be fired asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=163568

        Reviewed by Darin Adler.

        Changing details.open should cause a toggle event to be fired asynchronously:
        - https://html.spec.whatwg.org/#details-notification-task-steps

        Firefox and Chrome implement this, we don't.

        Test: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html

        * dom/EventNames.h:
        * dom/GlobalEventHandlers.idl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDetailsElement.cpp:
        (WebCore::detailToggleEventSender):
        (WebCore::HTMLDetailsElement::~HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::dispatchPendingEvent):
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLDetailsElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2016-10-18  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Enable basic parser testing.
        https://bugs.webkit.org/show_bug.cgi?id=163639

        Reviewed by Dean Jackson.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        Remove the ASSERT_NOT_REACHED on the new shadow selectors. We need to implement this
        eventually, but it's better to not assert on that for now.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::isHostPseudoSelector):
        Make sure to check that we're a pseudoclass selector first, since otherwise we'll assert.

        * css/parser/CSSParserValues.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching):
        Make sure to check that we're a pseudoelement selector first, since otherwise we'll assert.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::addExpandedPropertyForValue):
        copyRef is needed here, since a singleton value is being propagated to all the expanded shorthand properties.

        (WebCore::parseSingleShadow):
        (WebCore::CSSPropertyParser::consumeFont):
        Remove the font properties that aren't part of our shorthand. We will need to revisit this eventually as it seems
        some of the font properties should be reset as part of this shorthand but aren't.
'
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        Just return a number for now instead of the parser_integer type.

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        Clean this up so that it doesn't assert by making sure to add qualifying checks for the appropriate match type.

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

        Update the comment for HTML Imports as there is now a proposal to use ES6 Modules for this.
        Also replace the contact by me since I'm most familiar with this feature.

        * features.json:

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

        Update the status of shadow DOM API to "Done" with a comment saying we're still fixing bugs.

        Also update my contact information since I'm no longer on Twitter.

        * features.json:

2016-10-18  Chris Dumez  <cdumez@apple.com>

        Provide better form validation messages
        https://bugs.webkit.org/show_bug.cgi?id=163584

        Reviewed by Darin Adler.

        Provide better form validation messages that match more closely the ones
        from Chrome and Firefox.

        No new tests, updated existing tests.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooShortText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageBadInputForNumberText):

2016-10-18  Dave Hyatt  <hyatt@apple.com>

        Fix GTK build.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-10-18  Sam Weinig  <sam@webkit.org>

        Simplify SerializedScriptValue, MessagePortArray and ArrayBufferArray to ease generation
        https://bugs.webkit.org/show_bug.cgi?id=163625

        Reviewed by Chris Dumez.

        - Replace uses of MessagePortArray (a.k.a. Vector<RefPtr<MessagePort>, 1>) with Vector<RefPtr<MessagePort>>.
        - Replace uses of ArrayBufferArray (a.k.a. Vector<RefPtr<ArrayBuffer>, 1>) with Vector<RefPtr<ArrayBuffer>>.
        - Add convenience functions to SerializedScriptValue to allow calling with fewer parameters.
        - Move MessagePorts and ArrayBuffers more where possible.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueToJSValue):
        * bindings/js/JSCustomEventCustom.cpp:
        (WebCore::JSCustomEvent::detail):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state):
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::trySerializeDetail):
        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::sanitizedErrorValue):
        (WebCore::ErrorEvent::trySerializeError):
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::trySerializeState):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/Worker.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::handlePostMessage):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        Updated for new SerializedScriptValue interface/vector naming.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        Update handleInitMessageEvent to check for exceptions and use convert for the MessagePort sequence.

        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::extractTransferables):
        (WebCore::fillMessagePortArray): Deleted.
        * bindings/js/JSMessagePortCustom.h:
        (WebCore::handlePostMessage):
        Rename fillMessagePortArray to extractTransferables to better express what it does.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::fillTransferMap):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        Simplify interface to allow more callers to avoid passing default arguments. Use ExecState& more.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetNativeVectorType):
        Remove special case for MessagePort.
        (JSValueToNative):
        (NativeToJSValue):
        Updated for new SerializedScriptValue interface.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::trySerializeData):
        * dom/MessageEvent.h:
        Store the MessagePort sequence as a Vector<RefPtr<MessagePort>> rather than in a unique_ptr.

        * dom/MessageEvent.idl:
        Update last type in init functions to be sequence<MessagePort> rather than Array. They are still
        custom, as we don't quite generate these correctly yet. 

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        (WebCore::MessagePort::entanglePorts):
        * dom/MessagePort.h:
        Update interface to take MessagePort vectors by rvalue reference.

2016-10-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Drop JSDictionary::convertValue() overload taking a TouchList
        https://bugs.webkit.org/show_bug.cgi?id=163620

        Reviewed by Sam Weinig.

        Drop JSDictionary::convertValue() overload taking a TouchList now that
        TouchEvent is using a proper constructor with a TouchEventInit
        dictionary on iOS.

        * bindings/js/JSDictionary.cpp:

2016-10-18  Dean Jackson  <dino@apple.com>

        Remove CSS_SHAPES feature definition. This should always be on.
        https://bugs.webkit.org/show_bug.cgi?id=163628
        <rdar://problem/28834613>

        Reviewed by Tim Horton.

        CSS Shapes is in Candidate Recommendation. It's a core part
        of CSS. It should always be enabled.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertShapeValue):
        * css/parser/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShapeProperty):
        * css/parser/CSSParser.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForShapeOutside):
        (WebCore::buildObjectForElementData):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionNewFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange):
        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::markShapeOutsideDependentsForLayout):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::updateShapeImage):
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasShapeOutside):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        (WebCore::LineWidth::wrapNextToShapeOutside):
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/line/LineWidth.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialShapeImageThreshold):
        * rendering/style/ShapeValue.cpp:
        * rendering/style/ShapeValue.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingResources):

2016-10-18  Chris Dumez  <cdumez@apple.com>

        convertDictionary<>() no longer needs to return an Optional<> type
        https://bugs.webkit.org/show_bug.cgi?id=163624

        Reviewed by Sam Weinig.

        convertDictionary<>() no longer needs to return an Optional<> type now
        that our dictionary structures are all default constructible after
        <https://trac.webkit.org/changeset/206974>.

        * bindings/js/JSDOMConvert.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryHeaderContent):
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::convertDictionary<TestEventConstructor::Init>):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):
        (WebCore::convertDictionary<TestObj::ParentDictionary>):
        (WebCore::convertDictionary<TestObj::ChildDictionary>):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:

2016-10-18  Chris Dumez  <cdumez@apple.com>

        Leverage new union type support for HTMLSelectElement.add() / HTMLOptionsCollection.add()
        https://bugs.webkit.org/show_bug.cgi?id=163608

        Reviewed by Ryosuke Niwa.

        Leverage new union type support for HTMLSelectElement.add() / HTMLOptionsCollection.add():
        - https://html.spec.whatwg.org/#htmlselectelement
        - https://html.spec.whatwg.org/#htmloptionscollection

        No new tests, rebaseline existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyCaller):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::constructJSTestOverloadedConstructorsWithSequence1):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionFuncCaller):
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::setLength):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:

2016-10-18  Aaron Chu  <aaron_chu@apple.com>

        Web Inspector: AXI: focused/focusable state should be based on Accessibility Object instead of Element
        https://bugs.webkit.org/show_bug.cgi?id=163088
        <rdar://problem/16421985>

        Reviewed by Darin Adler.

        Changed code in InspectDOMAgent so that it determines the focusability of a Node based
        on the AccessibilityNodeObject and not the Element class.

        Covered by existing tests: 
        LayoutTests/inspector/dom/getAccessibilityPropertiesForNode.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2016-10-18  Anders Carlsson  <andersca@apple.com>

        Get rid of more WebHistoryItem cruft
        https://bugs.webkit.org/show_bug.cgi?id=163623

        Reviewed by Tim Horton.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::setViewportArguments):
        (WebCore::HistoryItem::bookmarkID): Deleted.
        (WebCore::HistoryItem::setBookmarkID): Deleted.
        (WebCore::HistoryItem::sharedLinkUniqueIdentifier): Deleted.
        (WebCore::HistoryItem::setSharedLinkUniqueIdentifier): Deleted.

2016-10-18  Dave Hyatt  <hyatt@apple.com>

        Fix Windows build.
 
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):

2016-10-18  Antoine Quint  <graouts@apple.com>

        Modern media controls don't update their rendering correctly
        https://bugs.webkit.org/show_bug.cgi?id=163603
        <rdar://problem/28826022>

        Reviewed by Dean Jackson.

        There are rendering issues when we use an absolutely-positioned element
        as the top-most element in a media element's shadow root (webkit.org/b/163592).
        Since we only need for that element to be positioned, we can use "position: relative"
        instead, which removes the rendering issues.

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

2016-10-18  Dean Jackson  <dino@apple.com>

        Add preliminary support for extended colors to WebCore::Color
        https://bugs.webkit.org/show_bug.cgi?id=162878
        <rdar://problem/28596413>

        Follow-up review comments from Darin Adler.

        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop): Use nullptr.
        * platform/graphics/Color.cpp:
        (WebCore::Color::Color): Explicitly zero before assigning the pointer.
        * platform/graphics/Color.h: Add some comments about the failings of operator== and hash.
        (WebCore::Color::Color): Add some static_asserts to the constructors. Move the empty and deleted values
        to static constants.
        (WebCore::Color::isHashTableDeletedValue):
        (WebCore::Color::hash): Replacement for asUint64, which was only being used for a hash.
        (WebCore::Color::asUint64): Deleted.
        * platform/graphics/ColorHash.h: Use new hash functions. Use "using" instead of typedef.
        (WTF::ColorHash::hash):

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

        REGRESSION (r201471): Keyboard remains visible when swiping back on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=163581
        <rdar://problem/27739558>

        Reviewed by Simon Fraser.

        The bug was caused by Chrome::elementDidBlur not getting called, which resulted in
        StopAssistingNode not getting sent to the UI process.

        Test: fast/forms/ios/hide-keyboard-on-node-removal.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement): Restore the behavior prior to r201471 by calling
        Chrome::elementDidBlur explicitly.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent): Added a comment about ordering.

2016-10-17  Anders Carlsson  <andersca@apple.com>

        Move some history specific HistoryItem code to WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=163567

        Reviewed by Tim Horton.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::addRedirectURL): Deleted.
        (WebCore::HistoryItem::redirectURLs): Deleted.
        (WebCore::HistoryItem::setRedirectURLs): Deleted.
        * history/HistoryItem.h:

2016-10-18  Dave Hyatt  <hyatt@apple.com>

        [CSS Parser] Get all the properties turned on
        https://bugs.webkit.org/show_bug.cgi?id=163605

        Reviewed by Dean Jackson.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFunctionValue.h:
        * css/CSSPendingSubstitutionValue.cpp: Added.
        (WebCore::CSSPendingSubstitutionValue::customCSSText):
        * css/CSSPendingSubstitutionValue.h: Added.
        (WebCore::CSSPendingSubstitutionValue::create):
        (WebCore::CSSPendingSubstitutionValue::shorthandValue):
        (WebCore::CSSPendingSubstitutionValue::shorthandPropertyId):
        (WebCore::CSSPendingSubstitutionValue::equals):
        (WebCore::CSSPendingSubstitutionValue::CSSPendingSubstitutionValue):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isPendingSubstitutionValue):
        * css/CSSValueKeywords.in:
        * css/StylePropertyShorthand.cpp:
        (WebCore::transitionShorthandForParsing):
        * css/StylePropertyShorthand.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::completeURL):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseValue):
        (WebCore::CSSParserImpl::consumeDeclaration):
        (WebCore::CSSParserImpl::consumeDeclarationValue):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContext::completeURL):
        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::parseAsCSSPropertyID):
        (WebCore::CSSParserToken::parseAsUnresolvedCSSPropertyID): Deleted.
        * css/parser/CSSParserToken.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::cssPropertyID):
        (WebCore::CSSPropertyParser::addProperty):
        (WebCore::CSSPropertyParser::addExpandedPropertyForValue):
        (WebCore::CSSPropertyParser::parseValue):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseValueStart):
        (WebCore::CSSPropertyParser::consumeCSSWideKeyword):
        (WebCore::consumeTransformOrigin):
        (WebCore::consumeWillChange):
        (WebCore::consumeFontFeatureTag):
        (WebCore::consumeFontFeatureSettings):
        (WebCore::consumePage):
        (WebCore::consumeQuotes):
        (WebCore::FontVariantLigaturesParser::consumeLigature):
        (WebCore::FontVariantLigaturesParser::finalizeValue):
        (WebCore::consumeFontVariantLigatures):
        (WebCore::consumeFontVariantCaps):
        (WebCore::FontVariantNumericParser::consumeNumeric):
        (WebCore::FontVariantNumericParser::finalizeValue):
        (WebCore::consumeFontVariantNumeric):
        (WebCore::consumeFontVariantCSS21):
        (WebCore::consumeFontVariantList):
        (WebCore::consumeFontWeight):
        (WebCore::consumeFamilyName):
        (WebCore::consumeGenericFamily):
        (WebCore::consumeFontFamily):
        (WebCore::consumeSpacing):
        (WebCore::consumeTabSize):
        (WebCore::consumeTextSizeAdjust):
        (WebCore::consumeFontSize):
        (WebCore::consumeLineHeight):
        (WebCore::createPrimitiveValuePair):
        (WebCore::consumeCounter):
        (WebCore::consumePageSize):
        (WebCore::consumeSize):
        (WebCore::consumeTextIndent):
        (WebCore::validWidthOrHeightKeyword):
        (WebCore::consumeMaxWidthOrHeight):
        (WebCore::consumeWidthOrHeight):
        (WebCore::consumeMarginOrOffset):
        (WebCore::consumeClipComponent):
        (WebCore::consumeClip):
        (WebCore::consumeTouchAction):
        (WebCore::consumeLineClamp):
        (WebCore::consumeLocale):
        (WebCore::consumeColumnWidth):
        (WebCore::consumeColumnCount):
        (WebCore::consumeColumnGap):
        (WebCore::consumeColumnSpan):
        (WebCore::consumeZoom):
        (WebCore::consumeAnimationIterationCount):
        (WebCore::consumeAnimationName):
        (WebCore::consumeTransitionProperty):
        (WebCore::consumeCubicBezier):
        (WebCore::consumeAnimationTimingFunction):
        (WebCore::consumeAnimationValue):
        (WebCore::isValidAnimationPropertyList):
        (WebCore::consumeAnimationPropertyList):
        (WebCore::CSSPropertyParser::consumeAnimationShorthand):
        (WebCore::consumeZIndex):
        (WebCore::parseSingleShadow):
        (WebCore::consumeShadow):
        (WebCore::consumeFilterFunction):
        (WebCore::consumeFilter):
        (WebCore::consumeTextDecorationLine):
        (WebCore::consumeTextEmphasisStyle):
        (WebCore::consumeOutlineColor):
        (WebCore::consumeLineWidth):
        (WebCore::consumeBorderWidth):
        (WebCore::consumeTextStrokeWidth):
        (WebCore::consumeColumnRuleWidth):
        (WebCore::consumeTranslate3d):
        (WebCore::consumeNumbers):
        (WebCore::consumePerspective):
        (WebCore::consumeTransformValue):
        (WebCore::consumeTransform):
        (WebCore::consumePositionLonghand):
        (WebCore::consumePositionX):
        (WebCore::consumePositionY):
        (WebCore::consumePaintStroke):
        (WebCore::consumePaintOrder):
        (WebCore::consumeNoneOrURI):
        (WebCore::consumeFlexBasis):
        (WebCore::consumeStrokeDasharray):
        (WebCore::consumeBaselineShift):
        (WebCore::consumeRxOrRy):
        (WebCore::consumeCursor):
        (WebCore::consumeAttr):
        (WebCore::consumeCounterContent):
        (WebCore::consumeContent):
        (WebCore::consumePositionList):
        (WebCore::consumeScrollSnapCoordinate):
        (WebCore::consumeScrollSnapPoints):
        (WebCore::consumeBorderRadiusCorner):
        (WebCore::consumeVerticalAlign):
        (WebCore::consumeShapeRadius):
        (WebCore::consumeBasicShapeCircle):
        (WebCore::consumeBasicShapeEllipse):
        (WebCore::consumeBasicShapePolygon):
        (WebCore::complete4Sides):
        (WebCore::consumeRadii):
        (WebCore::consumeBasicShapeInset):
        (WebCore::consumeBasicShape):
        (WebCore::consumeWebkitClipPath):
        (WebCore::consumeShapeOutside):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::consumeBorderImageRepeatKeyword):
        (WebCore::consumeBorderImageRepeat):
        (WebCore::consumeBorderImageSlice):
        (WebCore::consumeBorderImageOutset):
        (WebCore::consumeBorderImageWidth):
        (WebCore::consumeBorderImageComponents):
        (WebCore::consumeWebkitBorderImage):
        (WebCore::consumeReflect):
        (WebCore::consumeImageOrientation):
        (WebCore::consumeBackgroundBlendMode):
        (WebCore::consumeBackgroundAttachment):
        (WebCore::consumeBackgroundBox):
        (WebCore::consumeBackgroundComposite):
        (WebCore::consumePrefixedBackgroundBox):
        (WebCore::consumeBackgroundSize):
        (WebCore::consumeGridAutoFlow):
        (WebCore::consumeBackgroundComponent):
        (WebCore::addBackgroundValue):
        (WebCore::consumeCommaSeparatedBackgroundComponent):
        (WebCore::consumeSelfPositionKeyword):
        (WebCore::consumeSelfPositionOverflowPosition):
        (WebCore::consumeAlignItems):
        (WebCore::consumeJustifyItems):
        (WebCore::consumeFitContent):
        (WebCore::consumeCustomIdentForGridLine):
        (WebCore::consumeGridLine):
        (WebCore::isGridTrackFixedSized):
        (WebCore::consumeGridBreadth):
        (WebCore::consumeGridTrackSize):
        (WebCore::consumeGridLineNames):
        (WebCore::consumeGridTrackRepeatFunction):
        (WebCore::consumeGridTrackList):
        (WebCore::consumeGridTemplatesRowsOrColumns):
        (WebCore::consumeGridTemplateAreas):
        (WebCore::consumeFontFaceUnicodeRange):
        (WebCore::consumeFontFaceSrcURI):
        (WebCore::consumeFontFaceSrcLocal):
        (WebCore::consumeFontFaceSrc):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        (WebCore::CSSPropertyParser::consumeSystemFont):
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::CSSPropertyParser::consumeFontVariantShorthand):
        (WebCore::CSSPropertyParser::consumeBorderSpacing):
        (WebCore::consumeSingleViewportDescriptor):
        (WebCore::CSSPropertyParser::parseViewportDescriptor):
        (WebCore::consumeColumnWidthOrCount):
        (WebCore::CSSPropertyParser::consumeColumns):
        (WebCore::CSSPropertyParser::consumeShorthandGreedily):
        (WebCore::CSSPropertyParser::consumeFlex):
        (WebCore::CSSPropertyParser::consumeBorder):
        (WebCore::CSSPropertyParser::consume4Values):
        (WebCore::CSSPropertyParser::consumeBorderImage):
        (WebCore::CSSPropertyParser::consumeLegacyBreakProperty):
        (WebCore::consumeBackgroundPosition):
        (WebCore::consumeRepeatStyleComponent):
        (WebCore::consumeRepeatStyle):
        (WebCore::CSSPropertyParser::consumeBackgroundShorthand):
        (WebCore::CSSPropertyParser::consumeGridItemPositionShorthand):
        (WebCore::CSSPropertyParser::consumeGridAreaShorthand):
        (WebCore::CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns):
        (WebCore::CSSPropertyParser::consumeGridTemplateShorthand):
        (WebCore::CSSPropertyParser::consumeGridShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        (WebCore::unresolvedCSSPropertyID): Deleted.
        * css/parser/CSSPropertyParser.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeIdent):
        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
        (WebCore::CSSPropertyParserHelpers::consumeString):
        (WebCore::CSSPropertyParserHelpers::consumeImageSet):
        * css/parser/CSSPropertyParserHelpers.h:

2016-10-18  Brent Fulgham  <bfulgham@apple.com>

        Correct Document::removeAllEventListeners
        https://bugs.webkit.org/show_bug.cgi?id=163558
        <rdar://problem/28716840>

        Reviewed by Chris Dumez.

        Tested by fast/dom/node-move-to-new-document-crash-main.html.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners): Clear out the wheel and
        touch event targets when clearing all data.

2016-10-18  Dean Jackson  <dino@apple.com>

        Remove dependency cycle with UIKit
        https://bugs.webkit.org/show_bug.cgi?id=163577
        <rdar://problem/28786160>

        Reviewed by Tim Horton.

        Soft link against UIKit. Followup patch because
        I screwed up and forgot to edit the simulator
        configuration.

        * Configurations/WebCoreTestSupport.xcconfig:

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

        SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
        https://bugs.webkit.org/show_bug.cgi?id=116470

        Reviewed by Simon Fraser.

        When we encounter a shorthand css property, we set m_implicitShorthand
        to true to tell addProperty() later that the individual properties are
        all set through a short hand one. We need to make sure that setting 
        m_implicitShorthand to true will not be leaked after finishing parsing
        the short hand property.

        Test: fast/css/implicit-property-restore.html

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseBorderRadius):
        (WTF::ImplicitScope::ImplicitScope): Deleted.
        (WTF::ImplicitScope::~ImplicitScope): Deleted.
        Get rid of ImplicitScope and replace its calls by TemporaryChange<bool>.
        
        * css/parser/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        Restore m_implicitShorthand value after setting it temporarily to true.

2016-10-18  Chris Dumez  <cdumez@apple.com>

        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163580

        Reviewed by Sam Weinig.

        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor as in the specification:
        - https://html.spec.whatwg.org/#the-trackevent-interface

        No new tests, updated existing tests.

        * html/track/TrackEvent.cpp:
        (WebCore::TrackEvent::TrackEvent):
        * html/track/TrackEvent.h:
        * html/track/TrackEvent.idl:

2016-10-18  Commit Queue  <commit-queue@webkit.org>

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

        Introduced many test failures and timeouts, causing release
        bot to exit early (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[GTK] Several tests crashing on debug bot in (anonymous
        namespace)::MediaPlayerPrivateGStreamerBase::repaint"
        https://bugs.webkit.org/show_bug.cgi?id=163511
        http://trac.webkit.org/changeset/207409

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

        [MediaStream] Resolve constraints and enumerate devices in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=162147
        <rdar://problem/28803569>

        Reviewed by Darin Adler.

        Restructure gUM constraint validation and MediaDevices.enumerateDevices so all media device
        access happens in the UI process.

        No new tests, updated results of existing tests.

        * CMakeLists.txt: Add MediaDevicesEnumerationRequest.cpp, delete UserMediaPermissionCheck.cpp.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::create): Only create from MediaConstraintsData.
        (WebCore::MediaConstraintsImpl::initialize): Deleted.
        * Modules/mediastream/MediaConstraintsImpl.h:

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Added.
        (WebCore::MediaDevicesEnumerationRequest::create):
        (WebCore::MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest):
        (WebCore::MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest):
        (WebCore::MediaDevicesEnumerationRequest::userMediaDocumentOrigin):
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin):
        (WebCore::MediaDevicesEnumerationRequest::contextDestroyed):
        (WebCore::MediaDevicesEnumerationRequest::start):
        (WebCore::MediaDevicesEnumerationRequest::cancel):
        (WebCore::MediaDevicesEnumerationRequest::setDeviceInfo):
        (WebCore::MediaDevicesEnumerationRequest::finish):
        * Modules/mediastream/MediaDevicesEnumerationRequest.h: Added.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::~MediaDevicesRequest): Clear the enumeration request.
        (WebCore::MediaDevicesRequest::contextDestroyed): Ditto.
        (WebCore::MediaDevicesRequest::start): Create and use a MediaDevicesEnumerationRequest.
        (WebCore::MediaDevicesRequest::didCompletePermissionCheck): Deleted.
        * Modules/mediastream/MediaDevicesRequest.h:

        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::enumerateMediaDevices): New.
        (WebCore::UserMediaController::cancelMediaDevicesEnumerationRequest): New.
        (WebCore::UserMediaController::checkUserMediaPermission): Deleted.
        (WebCore::UserMediaController::cancelUserMediaPermissionCheck): Deleted.

        * Modules/mediastream/UserMediaPermissionCheck.h: Deleted.
        * Modules/mediastream/UserMediaPermissionCheck.cpp: Deleted.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::deny):
        (WebCore::UserMediaRequest::constraintsValidated): Deleted.
        (WebCore::UserMediaRequest::userMediaAccessGranted): Deleted.
        (WebCore::UserMediaRequest::userMediaAccessDenied): Deleted.
        (WebCore::UserMediaRequest::constraintsInvalid): Deleted.
        (WebCore::UserMediaRequest::didCreateStream): Deleted.
        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError): Deleted.
        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError): Deleted.
        * Modules/mediastream/UserMediaRequest.h:

        * WebCore.xcodeproj/project.pbxproj: Add MediaDevicesEnumerationRequest.*.

        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::CaptureDevice):
        (WebCore::CaptureDevice::setPersistentId): Add setter for argument decoder.
        (WebCore::CaptureDevice::setLabel): Ditto.
        (WebCore::CaptureDevice::setGroupId): Ditto.
        (WebCore::CaptureDevice::setKind): Ditto.

        * platform/mediastream/CaptureDeviceManager.h: Remove unnecessary include.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaConstraint::encode): New.
        (WebCore::MediaConstraint::decode): Ditto.
        (WebCore::NumericConstraint::encode): Ditto.
        (WebCore::NumericConstraint::decode): Ditto.

        * platform/mediastream/MediaStreamCreationClient.h: Deleted.

        * platform/mediastream/RealtimeMediaSourceCenter.h: Use completion handlers instead of client interface.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::refreshCaptureDeviceList): Drive-by fix: don't initialize
        group id, we don't support it.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): Update for interface change.
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): Ditto.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): Ditto.
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Ditto.
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable): Ditto.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Ditto.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2016-10-18  Zan Dobersek  <zdobersek@igalia.com>

        [WebIDL] Support BufferSource
        https://bugs.webkit.org/show_bug.cgi?id=163541

        Reviewed by Youenn Fablet.

        Add support for the BufferSource typedef in WebIDL. The implementation
        adds the necessary handling for this type in the generator scripts and
        the specialization of the Converter<> template for the IDLBufferSource
        struct that enables exposing ArrayBuffer or ArrayBufferView objects by
        having WebCore::BufferSource objects pointing to their data.

        The SourceBuffer interface in the MSE module has the appendBuffer()
        operation modified to accept a BufferSource parameter, instead of
        overloading it for ArrayBuffer and ArrayBufferView parameters.

        The bindings generator tests cover BufferSource as both an operation
        parameter and as a dictionary member.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBuffer):
        (WebCore::SourceBuffer::appendBufferInternal):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/IDLTypes.h:
        * bindings/js/BufferSource.h: Added.
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLBufferSource>::convert):
        * bindings/scripts/CodeGenerator.pm:
        (SkipIncludeHeader):
        (IsWrapperType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddClassForwardIfNeeded):
        (GetBaseIDLType):
        (IsHandledByDOMConvert):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::jsTestObjPrototypeFunctionBufferSourceParameter):
        (WebCore::jsTestObjPrototypeFunctionBufferSourceParameterCaller):
        * bindings/scripts/test/TestObj.idl:

2016-10-18  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Different width of grid container between initial load and refresh
        https://bugs.webkit.org/show_bug.cgi?id=163535

        Reviewed by Manuel Rego Casasnovas.

        Grid's layout logic manages two different override sizes; one it's
        designed to implement the grid item's stretching behavior, identified
        with the concept of 'overrideContentLogicalSize'; there is another
        override size, known as overrideContainingBlockContentLogicalSize,
        used to implement the Grid Area abstraction, which will behave as
        the actual containing block of any grid item.

        During grid's layout logic these override sizes are set according
        to the CSS style rules. This affects how the grid container and its
        children are going to be sized during layout. Grid Tracks sizing
        algorithm depends on these override sizes.

        In order to ensure that the tracks sizing algorithm produces the
        same results when it's run consecutively several times, we need to
        clear these override sizes and perform a layout of the affected grid
        items. Otherwise, the affected items will return sizing values which
        depend on the override values set in the previous layout, which in
        some cases, like orthogonal flows, may change through different runs
        of the sizing algorithm.

        Test: fast/css-grid-layout/repeating-layout-must-produce-the-same-results.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):

2016-10-18  Youenn Fablet  <youenn@apple.com>

        CachedResourceLoader should not need to remove fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=163015

        Reviewed by Darin Adler.

        No expected change for non-window port.
        For window port, CachedResourceLoader will strip the fragment identifier of the URL passed to subresourceForURL
        before querying the memory cache.

        Removing the fragment identifier from the request stored in CachedResourceRequest.
        The fragment identifier is stored in a separate field.

        This allows CachedResourceLoader to not care about fragment identifier.
        CachedResource can then get access to it.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::finishRequestInitialization): Deleted.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachedResource):
        Updated the method taking a const String& to strip the fragment identifier if needed.
        Updated the method taking a const URL& to assert if the fragment identifier is present.
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        (WebCore::CachedResourceRequest::splitFragmentIdentifierFromRequestURL):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::releaseFragmentIdentifier):
        (WebCore::CachedResourceRequest::clearFragmentIdentifier):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::shouldRemoveFragmentIdentifier):
        (WebCore::MemoryCache::removeFragmentIdentifierIfNeeded):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequest):
        * loader/cache/MemoryCache.h:

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

        Rename setNeedsStyleRecalc to invalidateStyle
        https://bugs.webkit.org/show_bug.cgi?id=163542

        Reviewed by Darin Adler.

        Also rename StyleChangeType enum and some related functions for clarity. For example

            element.setNeedsStyleRecalc(SyntheticStyleChange);

        becomes

            element.invalidateStyleAndLayerComposition();

        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateIfNeeded):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateViewportUnitsOnResize):
        (WebCore::Document::setCSSTarget):
        (WebCore::unwrapFullScreenRenderer):
        (WebCore::Document::setAnimatingFullScreen):
        * dom/Element.cpp:
        (WebCore::Element::setActive):
        (WebCore::Element::setFocus):
        (WebCore::Element::setHovered):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::invalidateStyle):
        (WebCore::Element::invalidateStyleAndLayerComposition):
        (WebCore::Element::invalidateStyleForSubtree):
        (WebCore::Element::invalidateStyleAndRenderersForSubtree):

            Move public invalidation functions to Element tightening typing.
            Use separate functions instead of enum values.
            This way the call sites look nicer and only useful combinations are exposed.

        (WebCore::Element::addShadowRoot):
        (WebCore::checkForEmptyStyleChange):
        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::needsStyleInvalidation):
        (WebCore::Element::setContainsFullScreenElement):
        * dom/Element.h:
        (WebCore::Element::setHasFocusWithin):
        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle):
        (WebCore::Node::adjustStyleValidity):

            Update validity and mode separately. There was a potential bug here where
            SyntheticStyleChange could overwrite FullStyleChange (no known repro).

        (WebCore::Node::updateAncestorsForStyleRecalc):
        (WebCore::Node::invalidateStyle):
        (WebCore::Node::insertedInto):
        (WebCore::Node::setNeedsStyleRecalc): Deleted.
        * dom/Node.h:
        (WebCore::Node::needsStyleRecalc):
        (WebCore::Node::styleValidity):
        (WebCore::Node::styleResolutionShouldRecompositeLayer):
        (WebCore::Node::setHasValidStyle):
        (WebCore::Node::styleChangeType): Deleted.
        (WebCore::Node::clearNeedsStyleRecalc): Deleted.
        (WebCore::Node::setStyleChange): Deleted.
        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup::remove):
        (WebCore::RadioButtonGroup::setNeedsStyleRecalcForAllButtons):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setResetStyleInheritance):
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::removeSlotElementByName):
        (WebCore::SlotAssignment::didChangeSlot):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::invalidateStyleAttribute):
        * dom/Text.cpp:
        (WebCore::Text::updateRendererAfterContentChange):
        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::invalidateStyleForAllLinks):
        (WebCore::VisitedLinkState::invalidateStyleForLink):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::minOrMaxAttributeChanged):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::setValue):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
        (WebCore::HTMLElement::calculateAndAdjustDirectionality):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::addInvalidDescendant):
        (WebCore::HTMLFieldSetElement::removeInvalidDescendant):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        (WebCore::HTMLFormControlElement::readOnlyAttributeChanged):
        (WebCore::HTMLFormControlElement::requiredAttributeChanged):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        (WebCore::HTMLFormElement::resetDefaultButton):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::finishedInsertingSubtree):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition):
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc): Deleted.
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute):
        (WebCore::HTMLFrameSetElement::willRecalcStyle):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        (WebCore::HTMLInputElement::setAutoFilled):
        (WebCore::HTMLInputElement::maxLengthAttributeChanged):
        (WebCore::HTMLInputElement::minLengthAttributeChanged):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        (WebCore::HTMLObjectElement::childrenChanged):
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::setSelectedState):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::setDisplayState):
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        (WebCore::HTMLPlugInImageElement::finishParsingChildren):
        (WebCore::HTMLPlugInImageElement::resumeFromDocumentSuspension):
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        (WebCore::HTMLSelectElement::reset):
        * html/HTMLTableElement.cpp:
        (WebCore::isTableCellAncestor):
        (WebCore::setTableCellsChanged):
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValueCommon):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/InputType.cpp:
        (WebCore::InputType::setValue):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::minOrMaxAttributeChanged):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::subtreeHasChanged):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseAttribute):
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::updateSelectedChild):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::updateAnimations):
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationController::cancelAnimations):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateDragState):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::TreeResolver::popParent):
        (WebCore::Style::clearNeedsStyleResolution):
        (WebCore::Style::TreeResolver::resolveComposedTree):
        * style/StyleUpdate.h:
        * style/StyleValidity.h: Added.

            StyleChangeType enum splits into Style::Validity and Style::InvalidationMode.
            Move to a file of its own.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::svgAttributeChanged):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::applyCSSPropertyToTarget):
        (WebCore::removeCSSPropertyFromTarget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::willRecalcStyle):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGPresentationAttributeStyle):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::handleAttributeChange):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::invalidateShadowTree):
        * testing/Internals.cpp:
        (WebCore::styleValidityToToString):
        (WebCore::Internals::styleChangeType):
        (WebCore::styleChangeTypeToString): Deleted.

2016-10-17  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Constrain by min|max-height on auto repeat computation
        https://bugs.webkit.org/show_bug.cgi?id=163540

        Reviewed by Darin Adler.

        The max-height (if definite) is used to compute the number of auto repeat rows whenever the
        height is indefinite. We were using the min-height only in case both values were indefinite.

        Although not explicitly mentioned by grid specs, it's reasonable to assume that
        the min-height trumps the used value of height/max-height like it always does, per CSS
        2.2. Note that the number of rows still needs to fit within that size even if using
        min-height, because we're just using min-height to compute the used value of the height
        property. If both height and max-height are indefinite we keep doing the same, i.e., compute
        the minimum number of rows that fulfill min-height (if definite).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeAutoRepeatTracksCount):

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Use NativeCallFrameTracer for operations used for DOMJIT slow calls
        https://bugs.webkit.org/show_bug.cgi?id=163586

        Reviewed by Saam Barati.

        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::toWrapperSlow):

2016-10-18  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Build break since r207442
        https://bugs.webkit.org/show_bug.cgi?id=163587

        Unreviewed.

        Since r207442, setRGB is moved to private.

        * rendering/RenderThemeEfl.cpp:
        (WebCore::fillColorsFromEdjeClass):

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

        Remove dependency cycle with UIKit
        https://bugs.webkit.org/show_bug.cgi?id=163577
        <rdar://problem/28786160>

        Reviewed by Tim Horton.

        Soft link against UIKit.

        * Configurations/WebCoreTestSupport.xcconfig:
        * testing/Internals.mm:

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

        Allow creation of ExtendedColors and make Color immutable
        https://bugs.webkit.org/show_bug.cgi?id=163557
        <rdar://problem/28805360>

        Reviewed by Darin Adler and Dave Hyatt.

        1. Support the creation of ExtendedColor objects via the
        Color class.

        2. Fix the remaining few places where a Color object is
        modified after creation, instead creating a new Color.
        Move all the mutation methods into the private section,
        making Color now immutable.

        Changes to Color are covered by existing tests. Changes
        to ExtendedColor are covered by the ExtendedColor API test.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::fastParseColor): Return a new named Color.

        * dom/Document.cpp:
        (WebCore::Document::resetActiveLinkColor): Set to be the named "red" color.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLColorToStyle): Use the string-based constructor
        where possible.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS): No need to
        use the string "black" here - we have a constant value.

        * platform/graphics/cairo/GraphicsContextCairo.cpp: Don't use setRGB.

        * platform/graphics/Color.cpp:
        (WebCore::findNamedColor): Move this up in the file.
        (WebCore::Color::Color): Copy in the code from setNamedColor. Also
        add a constructor for ExtendedColor.
        (WebCore::Color::serialized): Call ExtendedColor's serializer if necessary.
        (WebCore::Color::cssText): Ditto.
        (WebCore::Color::setNamedColor): Deleted.
        (WebCore::Color::tagAsExtended): Deleted.

        * platform/graphics/Color.h: Add a new constructor.
        (WebCore::Color::setRGB): Move to private.

        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::cssText): Implement serializer.
        * platform/graphics/ExtendedColor.h:

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback): Construct a new Color rather than changing an existing object.

2016-10-17  Simon Fraser  <simon.fraser@apple.com>

        Implement DOMRect/DOMRectReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=163464

        Reviewed by Darin Adler.
        
        Implement the DOMRectInit/DOMRectReadOnly/DOMRect interfaces specified in
        https://dev.w3.org/fxtf/geometry/
        
        DOMRects allow negative height/width and require double storage, so we can't just
        use FloatRect for storage. They also require handling of NaN and Infinity.
        
        To have the left/right/top/bottom accessors follow IEEE NaN rules, we need to use
        custom min/max functions that return NaN if either argument is NaN, so add 
        nanPropagatingMin/nanPropagatingMax helpers to MathExtras.h.

        Test: fast/dom/domrect.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMRect.h: Added.
        (WebCore::DOMRect::create):
        (WebCore::DOMRect::fromRect):
        (WebCore::DOMRect::setX):
        (WebCore::DOMRect::setY):
        (WebCore::DOMRect::setWidth):
        (WebCore::DOMRect::setHeight):
        (WebCore::DOMRect::DOMRect):
        * dom/DOMRect.idl: Added.
        * dom/DOMRectInit.h: Added.
        * dom/DOMRectInit.idl: Added.
        * dom/DOMRectReadOnly.h: Added.
        (WebCore::DOMRectReadOnly::create):
        (WebCore::DOMRectReadOnly::fromRect):
        (WebCore::DOMRectReadOnly::x):
        (WebCore::DOMRectReadOnly::y):
        (WebCore::DOMRectReadOnly::width):
        (WebCore::DOMRectReadOnly::height):
        (WebCore::DOMRectReadOnly::top):
        (WebCore::DOMRectReadOnly::right):
        (WebCore::DOMRectReadOnly::bottom):
        (WebCore::DOMRectReadOnly::left):
        (WebCore::DOMRectReadOnly::DOMRectReadOnly):
        * dom/DOMRectReadOnly.idl: Added.

2016-10-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Basic MediaController
        https://bugs.webkit.org/show_bug.cgi?id=163539
        <rdar://problem/28797542>

        Reviewed by Darin Adler.

        We add a new main.js file which acts as the entry point by implementing the createControls()
        function that HTMLMediaElement::ensureMediaControlsInjectedScript() once the shadow root has
        been created. That functions creates an instance of the new MediaController class, which is
        the controller object that will handle communication between the media controls and the media
        element. At first, this MediaController class is very limited and assumes macOS inline
        layout traits and forces a start button to be shown over the media, which can be played
        to start the media and show the full controls. More functionality will be added by future patches.

        Tests: media/modern-media-controls/media-controller/media-controller-click-to-start.html
               media/modern-media-controls/media-controller/media-controller-constructor.html
               media/modern-media-controls/media-controller/media-controller-resize.html

        * Modules/modern-media-controls/main.js: Added.
        (createControls):
        * Modules/modern-media-controls/media/media-controller.js: Added.
        (MediaController):
        (MediaController.prototype.set pageScaleFactor):
        (MediaController.prototype.set usesLTRUserInterfaceLayoutDirection):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype.buttonWasClicked):
        (MediaController.prototype._updateControlsSize):
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):

2016-10-17  Anders Carlsson  <andersca@apple.com>

        Remove an unused HistoryItem function
        https://bugs.webkit.org/show_bug.cgi?id=163565

        Reviewed by Tim Horton.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::isAncestorOf): Deleted.
        * history/HistoryItem.h:

2016-10-17  Nan Wang  <n_wang@apple.com>

        AX: [Mac] mapping for output elements
        https://bugs.webkit.org/show_bug.cgi?id=163471

        Reviewed by Chris Fleizach.

        Mapped the output element to status role and exposed its text content
        as AXTitle. 

        Test: accessibility/mac/output-element.html

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::visibleText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isOutput):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXOutputText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXOutputText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXOutputText):

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Use DOMJIT::Patchpoint in IC
        https://bugs.webkit.org/show_bug.cgi?id=163223

        Reviewed by Saam Barati.

        Make DOMJITPatchpointParams non-const.

        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJITHelpers::toWrapper):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::createCallDOMForOffsetAccess):
        (WebCore::checkNode):
        (WebCore::NodeNodeTypeDOMJIT::callDOM):

2016-10-17  Chris Dumez  <cdumez@apple.com>

        Move form.reportValidity() behind InteractiveFormValidation setting
        https://bugs.webkit.org/show_bug.cgi?id=163550

        Reviewed by Darin Adler.

        Move form.reportValidity() behind InteractiveFormValidation setting for consistency
        given that the two features are strongly related.

        Also enable the setting by default so we can get feedback on the implementation.

        Demos:
        - Interactive form validation: http://jsfiddle.net/tj_vantoll/HdSqt/
        - Report validity: https://googlechrome.github.io/samples/report-validity/

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setInteractiveFormValidationEnabled):
        (WebCore::RuntimeEnabledFeatures::interactiveFormValidationEnabled):
        * html/HTMLButtonElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:

2016-10-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add a MediaControlsHost API to retrieve images as base64
        https://bugs.webkit.org/show_bug.cgi?id=163502
        <rdar://problem/28792017>

        Reviewed by Darin Adler.

        Add a new `base64StringForIconAndPlatform()` method to MediaControlsHost such that we
        may load images from the modern-media-controls directory in the WebCore.framework bundle.
        We use this new method in the iconService singleton when a `mediaControlsHost` is set,
        which will be set in a later patch.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::base64StringForIconAndPlatform):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype.urlForIconNameAndLayoutTraits):
        (const.iconService.new.IconService):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsBase64StringForIconAndPlatform):
        (WebCore::RenderTheme::mediaControlsScript): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconAndPlatform):

2016-10-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Add a MediaControlsHost API to retrieve the shadow root CSS
        https://bugs.webkit.org/show_bug.cgi?id=163501
        <rdar://problem/28792014>

        Reviewed by Darin Adler.

        Add a new `shadowRootCSSText` property to MediaControlsHost so that we may obtain the
        concatenated CSS sources for the media controls shadow root via JS. Actually using this
        API will be done in a later patch. We also no longer inject those styles as a user-agent
        stylesheet when the runtime flag is on since it will no longer be necessary.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::shadowRootCSSText):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):

2016-10-17  Simon Fraser  <simon.fraser@apple.com>

        Implement DOMPoint/DOMPointReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=133916

        Reviewed by Darin Adler.

        Patch mostly by Dirk Schultz <krit@webkit.org>.

        Implement DOMPoint/DOMPointReadOnly following https://drafts.fxtf.org/geometry/
        (although we may need to match https://www.w3.org/TR/geometry-1/ to be compatible
        with Chrome).
        
        Test: geometry/DOMPoint-001.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMPoint.h: Added.
        * dom/DOMPoint.idl: Added.
        * dom/DOMPointInit.h: Added.
        * dom/DOMPointInit.idl: Added.
        * dom/DOMPointReadOnly.h: Added.
        (WebCore::DOMPointReadOnly::create):
        (WebCore::DOMPointReadOnly::fromPoint):
        (WebCore::DOMPointReadOnly::x):
        (WebCore::DOMPointReadOnly::y):
        (WebCore::DOMPointReadOnly::z):
        (WebCore::DOMPointReadOnly::w):
        (WebCore::DOMPointReadOnly::DOMPointReadOnly):
        * dom/DOMPointReadOnly.idl: Added.

2016-10-17  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Use modern-media-controls module sources for media controls stylesheet and script injection
        https://bugs.webkit.org/show_bug.cgi?id=163500
        <rdar://problem/28792010>

        Reviewed by Darin Adler.

        Add files from the Modules/modern-media-controls directory to the Xcode project and add a copy phase
        to copy those files with their directory stucture as a subdirectory of the WebCore.framework Resources
        directory.

        Additionally, use the modern-media-controls Module CSS and JS files when concatenating the media controls
        scripts and styles in RenderTheme when the runtime flag is on.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsStyleSheet):
        (WebCore::RenderThemeMac::mediaControlsScript):

2016-10-17  Simon Fraser  <simon.fraser@apple.com>

        Fix typo in error message.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerFunction):

2016-10-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        preprocessor.pm: cl.exe outputs processing filenames if Windows Perl is used
        https://bugs.webkit.org/show_bug.cgi?id=163435

        Reviewed by Alex Christensen.

        cl.exe outputs processing filenames to stderr. Suppress this
        annoying messages by using open3 instead of open2.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor): Use open3 in case of Windows Perl.

2016-10-17  Mark Lam  <mark.lam@apple.com>

        Use the reject() helper function for conditionally throwing TypeErrors.
        https://bugs.webkit.org/show_bug.cgi?id=163491

        Reviewed by Filip Pizlo.

        No new tests because this patch does not introduce new behavior.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaKeyGenParams):
        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::createObjectStore):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):

2016-10-17  Miguel Gomez  <magomez@igalia.com>

        [GTK] Several tests crashing on debug bot in (anonymous namespace)::MediaPlayerPrivateGStreamerBase::repaint
        https://bugs.webkit.org/show_bug.cgi?id=163511

        Reviewed by Carlos Garcia Campos.

        Perform the video repaint in the main thread when accelerated compositing is disabled.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2016-10-17  Konstantin Tokarev  <annulen@yandex.ru>

        Eleminate code duplication between ResourceRequest encoding/decoding implementations
        https://bugs.webkit.org/show_bug.cgi?id=163507

        Reviewed by Carlos Garcia Campos.

        ResourceRequestBase::encodeWithoutPlatformData() and Soup implementation of
        ArgumentCoder<ResourceRequest>::encodePlatformData() share most of the code,
        ditto for decoding implementations.

        No new tests needed.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::encodeBase):
        (WebCore::ResourceRequestBase::decodeBase):
        (WebCore::ResourceRequestBase::encodeWithoutPlatformData):
        (WebCore::ResourceRequestBase::decodeWithoutPlatformData):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::encodeWithPlatformData):
        (WebCore::ResourceRequest::decodeWithPlatformData):

2016-10-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Move user agent quirks to cross-platform location
        https://bugs.webkit.org/show_bug.cgi?id=163508

        Reviewed by Carlos Garcia Campos.

        Tested by Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp.

        * PlatformGTK.cmake:
        * platform/UserAgent.h: Renamed from Source/WebCore/platform/gtk/UserAgentGtk.h.
        * platform/UserAgentQuirks.cpp: Added. Moved from UserAgentGtk.cpp.
        (WebCore::urlRequiresChromeBrowser): Sneakily tighten up Google domain detection, it should
        only apply to sites if the base domain matches google.*, not any base domain that starts
        with google.
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::UserAgentQuirks::quirksForURL):
        (WebCore::UserAgentQuirks::stringForQuirk):
        * platform/UserAgentQuirks.h: Moved from UserAgentGtk.cpp. prepare-ChangeLog thinks it was
        renamed from Source/WebCore/platform/efl/UserAgentEfl.h, but prepare-ChangeLog is dumb.
        (WebCore::UserAgentQuirks::UserAgentQuirks):
        (WebCore::UserAgentQuirks::add):
        (WebCore::UserAgentQuirks::contains):
        (WebCore::UserAgentQuirks::isEmpty):
        * platform/efl/UserAgentEfl.cpp:
        (WebCore::standardUserAgentForURL):
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):
        (WebCore::standardUserAgentForURL):
        (): Deleted.
        (WebCore::UserAgentQuirks::UserAgentQuirks): Deleted.
        (WebCore::UserAgentQuirks::add): Deleted.
        (WebCore::UserAgentQuirks::contains): Deleted.
        (WebCore::UserAgentQuirks::isEmpty): Deleted.
        (WebCore::urlRequiresChromeBrowser): Deleted.
        (WebCore::urlRequiresMacintoshPlatform): Deleted.

2016-10-17  Alberto Garcia  <berto@igalia.com>

        [GTK] gobject-introspection on package build with webkit2gtk fails without active X session
        https://bugs.webkit.org/show_bug.cgi?id=163105

        Reviewed by Carlos Garcia Campos.

        Don't call XCompositeQueryExtension() or XDamageQueryExtension()
        if m_display is NULL.

        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::supportsXComposite):
        (WebCore::PlatformDisplayX11::supportsXDamage):

2016-10-16  Nan Wang  <n_wang@apple.com>

        AX: [Mac] roleDescription for AXTextField input types
        https://bugs.webkit.org/show_bug.cgi?id=163419
        <rdar://problem/28766192>

        Reviewed by Darin Adler.

        Provided more detailed role description for input types that
        exposed as standard text fields on the mac.

        Changes are covered in modified test expectation.

        * English.lproj/Localizable.strings:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXEmailFieldText):
        (WebCore::AXTelephoneFieldText):
        (WebCore::AXURLFieldText):
        (WebCore::AXDateFieldText):
        (WebCore::AXTimeFieldText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXEmailFieldText):
        (WebCore::AXTelephoneFieldText):
        (WebCore::AXURLFieldText):
        (WebCore::AXDateFieldText):
        (WebCore::AXTimeFieldText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXEmailFieldText):
        (WebCore::AXTelephoneFieldText):
        (WebCore::AXURLFieldText):
        (WebCore::AXDateFieldText):
        (WebCore::AXTimeFieldText):

2016-10-16  Chris Dumez  <cdumez@apple.com>

        Update WebKit localizable strings
        https://bugs.webkit.org/show_bug.cgi?id=163513

        Reviewed by Dan Bernstein.

        Update WebKit localizable strings as it was missing the "too short" one needed
        by form validation. This was causing a "Localized string not found" message to
        be shown when testing the following sample on WebKit ToT:
        - https://googlechrome.github.io/samples/report-validity/

        * English.lproj/Localizable.strings:

2016-10-16  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r206750): Crash when pressing Caps Lock if “Use the Caps Lock key to switch to and from U.S.” is selected in Input Sources preferences
        https://bugs.webkit.org/show_bug.cgi?id=163506
        <rdar://problem/28792483>

        Reviewed by Darin Adler.

        As per the NSEvent documentation [1], calling [NSEvent characters] is only
        valid on key up / key down events and will raise an NSInternalInconsistencyException
        if accessed on any other kind of event object. The crash happens when keyForKeyEvent()
        is called with the third kind of key event (NSFlagsChanged) which is used for
        detecting modifier keys. We normally detect the modifier key and return early before
        calling [NSEvent characters]. However, in some rare cases, we fail to detect the
        modifier key and we fall through.

        To address the issue, we now return "Unidentified" for NSFlagsChanged events, if we
        fail to detect the modifier key and before calling [NSEvent characters].

        [1] https://developer.apple.com/reference/appkit/nsevent/1534183-characters

        No new test, not easily testable.

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):

2016-10-16  Darin Adler  <darin@apple.com>

        Move CSS classes from ExceptionCode to Exception
        https://bugs.webkit.org/show_bug.cgi?id=163494

        Reviewed by Sam Weinig.

        Removed the "get" prefix from the names of many CSSPrimitiveValue
        functions to match WebKit coding style and to disambiguate them
        from the public CSS DOM functions that raise exceptions.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::propertyNamePrefix): Use enum class.
        (WebCore::parseJavaScriptCSSPropertyName): Tweak style a bit.
        (WebCore::stylePropertyGetter): Refactor to simplify structure.
        (WebCore::stylePropertyGetterPixelOrPosPrefix): Ditto. Also use floatValue.
        (WebCore::JSCSSStyleDeclaration::putDelegate): Use findIgnoringASCIICase,
        and use propagateException to handle ExcpetionOr.
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue): Tweak style a bit.
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames): Use a lambda to
        initialize a global here.

        * bindings/js/JSDOMBinding.h: Added toJSString to support bindings for
        functions returning ExceptionOr<String>.

        * bindings/scripts/gobject-generate-headers.pl: Deleted.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLengthSize): Use pairValue.
        (WebCore::convertToCenterCoordinate): Use valueID and pairValue.
        (WebCore::cssValueToBasicShapeRadius): Ditto.
        * css/CSSBasicShapes.cpp:
        (WebCore::serializePositionOffset): Ditto.
        (WebCore::buildSerializablePositionOffset): Ditto.
        (WebCore::CSSBasicShapeCircle::cssText): Ditto.
        (WebCore::CSSBasicShapeEllipse::cssText): Ditto.
        (WebCore::updateCornerRadiusWidthAndHeight): Ditto.
        * css/CSSBorderImageSliceValue.h: Use quadValue.
        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory): Use floatValue and doubleValue.

        * css/CSSCharsetRule.h: Use ExceptionOr. Also made more things private.
        * css/CSSCharsetRule.idl: Use non-legacy exceptions.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::setCssText): Use ExceptionOr.
        (WebCore::ComputedStyleExtractor::propertyMatches): Use valueID.
        (WebCore::CSSComputedStyleDeclaration::setProperty): Use ExceptionOr.
        (WebCore::CSSComputedStyleDeclaration::removeProperty): Ditto.
        (WebCore::CSSComputedStyleDeclaration::setPropertyInternal): Ditto.
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue): Return
        a Ref instead of a RefPtr.
        * css/CSSComputedStyleDeclaration.h: Updated for above changes.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::fixedSize): Use floatValue.
        (WebCore::CSSCrossfadeValue::image): Ditto.
        (WebCore::CSSCrossfadeValue::blend): Use doubleValue.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::calculateStyleMask): Use valueID.
        (WebCore::CSSFontFace::calculateWeightMask): Ditto.
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::familyNameFromPrimitive): Ditto.
        (WebCore::CSSFontFaceSet::matchingFaces): Use ExceptoinOr.
        (WebCore::CSSFontFaceSet::check): Ditto.
        * css/CSSFontFaceSet.h: Updated for above changes.

        * css/CSSGradientValue.cpp:
        (WebCore::compareStops): Use doubleValue.
        (WebCore::CSSGradientValue::addStops): Use floatValue.
        (WebCore::positionFromValue): Use floatValue and valudID.
        (WebCore::CSSLinearGradientValue::customCSSText): Use doubleValue and valueID.
        (WebCore::CSSLinearGradientValue::createGradient): Use floatValue and valueID.
        (WebCore::CSSRadialGradientValue::customCSSText): Use doubleValue and valueID.
        (WebCore::CSSRadialGradientValue::resolveRadius): Use floatValue.
        (WebCore::CSSRadialGradientValue::createGradient): Use valueID.

        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::insertRule): Use ExceptionOr.
        (WebCore::CSSGroupingRule::deleteRule): Ditto.
        * css/CSSGroupingRule.h: Updated for above changes.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::subimageIsPending): Use valueID.
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue): Ditto.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::fillImageSet): Use floatValue.

        * css/CSSMediaRule.idl: Use non-legacy exceptions.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeDegrees): Use doubleValue.
        (WebCore::CSSPrimitiveValue::setFloatValue): Use ExceptionOr.
        (WebCore::CSSPrimitiveValue::getFloatValue): Replaced getDoubleValue with this,
        since getDoubleValue is unused, moving the call to clampTo into this function.
        Also changed this to use ExceptionOr.
        (WebCore::CSSPrimitiveValue::doubleValue): Renamed from getDoubleValue.
        (WebCore::CSSPrimitiveValue::doubleValueInternal): Use Optional instead of a bool
        and an out argument to return the value and check for type failure.
        (WebCore::CSSPrimitiveValue::setStringValue): Use ExceptionOr.
        (WebCore::CSSPrimitiveValue::getStringValue): Ditto.
        (WebCore::CSSPrimitiveValue::stringValue): Renamed from getStringValue.
        (WebCore::CSSPrimitiveValue::getCounterValue): Use ExceptionOr.
        (WebCore::CSSPrimitiveValue::getRectValue): Use ExceptionOr.
        (WebCore::CSSPrimitiveValue::getQuadValue): Deleted.
        (WebCore::CSSPrimitiveValue::getLengthRepeatValue): Deleted.
        (WebCore::CSSPrimitiveValue::getRGBColorValue): Use ExceptionOr.
        (WebCore::CSSPrimitiveValue::getPairValue): Deleted.
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText): Use new names for functions.
        * css/CSSPrimitiveValue.h: Reorganized the class, moved large inline function bodies
        out of the class definition. Updated for the above changes.
        * css/CSSPrimitiveValue.idl: Use non-legacy exceptions.

        * css/CSSPrimitiveValueMappings.h: Use value instead of getValue, etc.

        * css/CSSRule.cpp:
        (WebCore::CSSRule::setCssText): Use ExceptionOr.
        * css/CSSRule.h: Updated for above change.
        * css/CSSRule.idl: Use non-legacy exceptions.

        * css/CSSStyleDeclaration.h: Use ExceptionOr.
        * css/CSSStyleDeclaration.idl: Use non-legacy exceptions.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::deprecatedInsertRule): Use ExceptionOr.
        (WebCore::CSSStyleSheet::insertRule): Ditto.
        (WebCore::CSSStyleSheet::deleteRule): Ditto.
        (WebCore::CSSStyleSheet::addRule): Ditto.
        * css/CSSStyleSheet.h: Updated for the above changes.
        * css/CSSStyleSheet.idl: Use non-legacy exceptions.

        * css/CSSSupportsRule.idl: Use non-legacy exceptions.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillAttachment): Use valueID instead of getValueID, etc.
        (WebCore::convertToLengthSize): Ditto.
        (WebCore::CSSToStyleMap::mapFillSize): Ditto.
        (WebCore::CSSToStyleMap::mapFillXPosition): Ditto.
        (WebCore::CSSToStyleMap::mapFillYPosition): Ditto.
        (WebCore::CSSToStyleMap::mapFillMaskSourceType): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationDirection): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationFillMode): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationIterationCount): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationName): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationPlayState): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationProperty): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction): Ditto.
        (WebCore::CSSToStyleMap::mapAnimationTrigger): Ditto.
        (WebCore::CSSToStyleMap::mapNinePieceImageSlice): Ditto.
        (WebCore::CSSToStyleMap::mapNinePieceImageQuad): Ditto.
        (WebCore::CSSToStyleMap::mapNinePieceImageRepeat): Ditto.

        * css/CSSValue.h: Use ExceptionOr.
        * css/CSSValue.idl: Use non-legacy exceptions.

        * css/Counter.h: Use stringValue instead of getStringValue, etc.

        * css/FontFace.cpp:
        (WebCore::FontFace::create): Use ExceptionOr.
        (WebCore::FontFace::setFamily): Ditto.
        (WebCore::FontFace::setStyle): Ditto.
        (WebCore::FontFace::setWeight): Ditto.
        (WebCore::FontFace::setStretch): Ditto.
        (WebCore::FontFace::setUnicodeRange): Ditto.
        (WebCore::FontFace::setVariant): Ditto.
        (WebCore::FontFace::setFeatureSettings): Ditto.
        * css/FontFace.h: Updated for above changes.
        * css/FontFace.idl: Use non-legacy exceptions.

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::load): Use ExceptionOr.
        (WebCore::FontFaceSet::check): Ditto.
        * css/FontFaceSet.h: Updated for above changes.
        * css/FontFaceSet.idl: Use non-legacy exceptions.

        * css/FontVariantBuilder.cpp:
        (WebCore::extractFontVariantLigatures): Use valueID instead of getValueID, etc.
        (WebCore::extractFontVariantNumeric): Ditto.
        (WebCore::extractFontVariantEastAsian): Ditto.

        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText): Use ExceptionOr.
        (WebCore::MediaList::deleteMedium): Ditto.
        (WebCore::MediaList::appendMedium): Ditto.
        * css/MediaList.h: Updated for above changes.
        * css/MediaList.idl: Use non-legacy exceptions.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::doubleValue): Use valueID instead of getValueID, etc.
        (WebCore::colorGamutEvaluate): Ditto.
        (WebCore::invertedColorsEvaluate): Ditto.
        (WebCore::orientationEvaluate): Ditto.
        (WebCore::evaluateResolution): Ditto.
        (WebCore::computeLength): Ditto.
        (WebCore::viewModeEvaluate): Ditto.
        (WebCore::hoverEvaluate): Ditto.
        (WebCore::pointerEvaluate): Ditto.
        (WebCore::prefersReducedMotionEvaluate): Ditto.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText): Use ExceptionOr.
        (WebCore::PropertySetCSSStyleDeclaration::setProperty): Ditto.
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty): Ditto.
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal): Ditto.
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal): Ditto.
        * css/PropertySetCSSStyleDeclaration.h: Updated for above changes.
        Also marked a couple additional functions private.

        * css/StyleBuilderConverter.h: Use doubleValue instead of getDoubleValue, etc.
        * css/StyleBuilderCustom.h: Ditto.
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties): Ditto.
        (WebCore::StyleResolver::colorFromPrimitiveValueIsDerivedFromElement): Ditto.
        (WebCore::StyleResolver::colorFromPrimitiveValue): Ditto.
        (WebCore::StyleResolver::createFilterOperations): Ditto.
        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue): Ditto.
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::getViewportArgumentValue): Ditto.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::WebKitCSSMatrix): Tweaked constructors a bit,
        getting rid of the one that uses an ExceptionCode.
        (WebCore::WebKitCSSMatrix::create): Moved in here, and use ExceptionOr.
        (WebCore::WebKitCSSMatrix::setMatrixValue): Use ExceptionOr.
        (WebCore::WebKitCSSMatrix::multiply): Tweak coding style a bit.
        (WebCore::WebKitCSSMatrix::inverse): Use ExceptionOr.
        (WebCore::WebKitCSSMatrix::translate): Return a Ref instead of RefPtr.
        (WebCore::WebKitCSSMatrix::scale): Ditto.
        (WebCore::WebKitCSSMatrix::rotate): Ditto.
        (WebCore::WebKitCSSMatrix::rotateAxisAngle): Ditto.
        (WebCore::WebKitCSSMatrix::skewX): Ditto.
        (WebCore::WebKitCSSMatrix::skewY): Ditto.
        (WebCore::WebKitCSSMatrix::toString): Tweaked formatting a bit.
        * css/WebKitCSSMatrix.h: Updated for above changes.
        * css/WebKitCSSMatrix.idl: Use non-legacy extensions.

        * css/makeprop.pl:
        (handleCurrentColorValue): Use valueID instead of getValueID.
        (generateValueSetter): Ditto.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parse4ValuesFillPosition): Use valueID instead of getValueID, etc.
        (WebCore::CSSParser::parse3ValuesFillPosition): Ditto.
        (WebCore::CSSParser::parseFillPosition): Ditto.
        (WebCore::CSSParser::parseFillRepeat): Ditto.
        (WebCore::CSSParser::parseGridPosition): Ditto.
        (WebCore::CSSParser::parseGridTemplateRowsAndAreasAndColumns): Ditto.
        (WebCore::isGridTrackFixedSized): Ditto.
        (WebCore::CSSParser::parseRadialGradient): Ditto.
        (WebCore::CSSParser::parseBuiltinFilterArguments): Ditto.

        * css/parser/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue): Removed the unneeded call to
        setPrimitiveType here. The createParserOperator returns an object that
        already has the correct primitive type.

        * css/parser/CSSPropertyParser.cpp: Updated most cases of calling the old
        getXXXValue functions, but not sure if it's right since it is commented out
        code that I did not compile.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent): Use intValue instead of getIntValue, etc.
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters): Ditto.
        (WebCore::CSSPropertyParserHelpers::isHorizontalPositionKeywordOnly): Ditto.
        (WebCore::CSSPropertyParserHelpers::isVerticalPositionKeywordOnly): Ditto.
        (WebCore::CSSPropertyParserHelpers::positionFromThreeOrFourValues): Ditto.
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient): Ditto.

        * dom/Range.cpp: Added now-needed include of ExceptionCode.h.
        * dom/SelectorQuery.cpp: Ditto.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::toIdentifier): Use valueID instead of getValueID, etc.
        (WebCore::ApplyStyleCommand::computedFontSize): Ditto.
        * editing/EditingStyle.cpp:
        (WebCore::identifierForStyleProperty): Ditto.
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::EditingStyle::extractFontSizeDelta): Ditto.
        (WebCore::EditingStyle::textDirection): Ditto.
        (WebCore::EditingStyle::prepareToApplyAt): Ditto.
        (WebCore::EditingStyle::textDirectionForSelection): Ditto.
        (WebCore::fontWeightIsBold): Ditto.
        (WebCore::legacyFontSizeFromCSSValue): Ditto.
        (WebCore::isTransparentColorValue): Ditto.
        (WebCore::hasTransparentBackgroundColor): Ditto.
        (WebCore::backgroundColorInEffect): Ditto.

        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement): Removed IGNORE_EXCEPTION; that is
        what we do by default for things returning ExceptionOr.
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply): Ditto.
        (WebCore::RemoveCSSPropertyCommand::doUnapply): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline): Ditto.

        * editing/cocoa/HTMLConverter.mm:
        (floatValueFromPrimitiveValue): Use floatValue instead of getFloatValue, etc.
        * editing/markup.cpp:
        (WebCore::propertyMissingOrEqualToNone): Ditto.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule): Updated to call ExceptionOr-returning functions.
        (WebCore::InspectorStyleSheet::deleteRule): Ditto.
        (WebCore::InspectorStyleSheet::setStyleText): Ditto.

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::fromCSSPrimitiveValue): Use floatValue instead of getFloatValue.

2016-10-16  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Styles for StartButton are missing
        https://bugs.webkit.org/show_bug.cgi?id=163499
        <rdar://problem/28792009>

        Reviewed by Darin Adler.

        Add styling for StartButton so that instances are always displayed in the center of their container.

        Test: media/modern-media-controls/start-button/start-button-styles.html

        * Modules/modern-media-controls/controls/start-button.css: Added.
        (button.start):
        (button.start > *):
        (button.start > div):
        (button.start > img):
        (button.start:active > img):

2016-10-16  Simon Fraser  <simon.fraser@apple.com>

        Implement serializer = { attribute }
        https://bugs.webkit.org/show_bug.cgi?id=163466
        
        Follow-up fix to die if "serializer {...}" lists an attribute not present
        on the interface. I don't think this is testable with the current bindings tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerFunction):

2016-10-16  Simon Fraser  <simon.fraser@apple.com>

        Add the "Geometry Interfaces" to features.json.

        * features.json:

2016-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Document request not updated after willSendRequest is called for a redirect
        https://bugs.webkit.org/show_bug.cgi?id=163436

        Reviewed by Michael Catanzaro.

        The first willSendRequest happens before DocumentLoader::startLoadingMainResource(), that calls setRequest, but
        the second one happens after DocumentLoader::redirectReceived() and then the request is never updated again.

        Covered by GTK+ unit tests.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willContinueMainResourceLoadAfterRedirect): Set the new request.
        * loader/DocumentLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal): Notify the document loader when loading the main resource
        and called for a redirection.

2016-10-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Delete the animated image catchup code
        https://bugs.webkit.org/show_bug.cgi?id=163410

        Reviewed by Simon Fraser.

        This patch fixes two issues in the animated image workflow:

        1) Setting the animation timer should follow the following rules:
        
            -- Initial case: Which happens before drawing the first frame. We
            should set the timer to fire after the current_frame_duration.

            -- Late case (Slow animation): This happens if the current_time is
            past the next_frame_desired_time. In this case we should fire the
            timer immediately.

            -- Early case (Fast animation): This happens when there is still time
            before the next_frame_desired_time. In this case we should set the
            timer to fire after the difference between the next_frame_desired_time
            and the current_time.

        2) Deleting the code for catching up the current_frame:
        
            This code used to run in the slow animation case. It was never used
            on iOS. It was trying to adjust the current_frame according to the
            current_time as if there were no delay. It turned out that this might
            cause a bigger delay because most likely the decoder decodes the image
            frames incrementally; i.e. to decode frame k, it has to have frame
            (k - 1) decoded.

        Test: fast/images/ordered-animated-image-frames.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw): Remove the iOS specific code.
        (WebCore::BitmapImage::startAnimation): Move the animation finishing code from 
        BitmapImage::internalAdvanceAnimation() to this function. Simplify the timer
        duration code as it is described above.

        (WebCore::BitmapImage::advanceAnimation): Merge BitmapImage::internalAdvanceAnimation()
        into this function.

        (WebCore::BitmapImage::resetAnimation):
        
        (WebCore::BitmapImage::internalAdvanceAnimation): Deleted.
        * platform/graphics/BitmapImage.h:

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::startAnimation):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::startAnimation):
        * svg/graphics/SVGImage.h:
        Remove the catchup code form the Image and SVGImage classes.

2016-10-15  Darin Adler  <darin@apple.com>

        Move Web SQL database and WebSockets off legacy exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163284

        Reviewed by Chris Dumez.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase): Use ExceptionOr.
        * Modules/webdatabase/DOMWindowWebDatabase.h: Update for above.
        * Modules/webdatabase/DOMWindowWebDatabase.idl: Ditto.

        * Modules/webdatabase/SQLResultSet.cpp:
        (WebCore::SQLResultSet::SQLResultSet): Move initialization of
        many data members into the class definition.
        (WebCore::SQLResultSet::insertId): Use ExceptionOr.
        (WebCore::SQLResultSet::rowsAffected): Moved into class definition.
        (WebCore::SQLResultSet::rows): Ditto.
        (WebCore::SQLResultSet::setInsertId): Ditto.
        (WebCore::SQLResultSet::setRowsAffected): Ditto.

        * Modules/webdatabase/SQLResultSet.h: Updated for above.

        * Modules/webdatabase/SQLResultSet.idl: Use non-legacy exceptions.
        Added a FIXME about the mismatch between long and int64_t.

        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::execute): Use reference instead of pointer.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::isValidProtocolString): Use StringView.
        (WebCore::WebSocket::subprotocolSeparator): Fixed capitalization and
        spelling error in the name of this function.
        (WebCore::WebSocket::WebSocket): Move initialization of many data
        members into the class definition.
        (WebCore::WebSocket::create): Use ExceptionOr.
        (WebCore::WebSocket::connect): Ditto.
        (WebCore::WebSocket::send): Ditto.
        (WebCore::WebSocket::close): Ditto.
        (WebCore::WebSocket::binaryType): Update to use enum class.
        (WebCore::WebSocket::setBinaryType): Use ExecptionOr and update to
        use enum class.
        (WebCore::WebSocket::didReceiveBinaryData): Ditto.

        * Modules/websockets/WebSocket.h: Updated for above. Changed the
        BinaryType enum into an enum class.

        * Modules/websockets/WebSocket.idl: Use non-legacy exceptions.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        Updated for name change to subprotocolSeparator.

        * dom/ExceptionOr.h: Added a constructor for scalar types that does not
        require an rvalue reference. We can refine this more later, but for now
        this is sufficient to obviate the need for WTFMove where it otherwise would
        have been needed in the code above.

        * inspector/InspectorDatabaseAgent.cpp: Use reference instead of pointer.

        * page/DOMWindow.idl: Touched this file to work around bugs in the dependency
        analysis of the current CMake build system, since otherwise it doesn't process the
        change to the partial interface WebSocket. Edited lots of comments, removed many
        others, and tweaked formatting.

2016-10-14  Sam Weinig  <sam@webkit.org>

        MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
        https://bugs.webkit.org/show_bug.cgi?id=163475

        Reviewed by Simon Fraser.

        Start fleshing out union support, starting with MessageEvent.
        - Simplify things a bit for now by requiring interface types to use RefPtr<T> as their type when
          used in sequences and unions. We should revisit this later, and see if we can use Ref<T> where
          possible, but it causes complications for dictionaries, since they want a Ref<T> uninitialized.

        * bindings/generic/IDLTypes.h:
        Switch IDLInterface to use RefPtr<T> as its implementation type.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Detail::VariadicConverterBase::convert):
        - Remove isJSDOMWrapperType() optimization. It was not correct, due to not being able to detect window
          and window shell, and not always an optimization, e.g. in the case of a single interface.
        - Switch from JSC::jsDynamicCast<WrapperType*>() to WrapperType::toWrapped() which can be faster and
          handles window and window shell correctly.
        - Also fix an issue where we would wrongly assert that one interface had to match.

        * bindings/js/JSDOMWrapper.h:
        (WebCore::isJSDOMWrapperType): Deleted.
        Remove unused predicate.

        * bindings/scripts/IDLParser.pm:
        (parseType):
        Add missing support for nullable unions.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:
        Add new tests for unions (both non-null and nullable) in dictionaries.
 
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::append):
        (WebCore::ContainerNode::prepend):
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
        (WebCore::Node::convertNodesOrStringsIntoNode):
        (WebCore::Node::before):
        (WebCore::Node::after):
        (WebCore::Node::replaceWith):
        * dom/Node.h:
        Add using declaration for NodeOrString and change it to use RefPtr<Node>.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::source):
        (WebCore::isValidSource): Deleted.
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::event):
        Change MessageEvent's source to be a std::experimental::variant<RefPtr<DOMWindow>, RefPtr<MessagePort>>.
        For now, we only enforce this on setting, and leave the getter a EventTarget?, but that should not be
        observable, and will rectified in subsequent patches.

2016-10-15  Chris Dumez  <cdumez@apple.com>

        Add support for reportValidity() on form and form control elements
        https://bugs.webkit.org/show_bug.cgi?id=163479

        Reviewed by Darin Adler.

        Add support for reportValidity() on form and form control elements:
        - https://html.spec.whatwg.org/#dom-form-reportvalidity
        - https://html.spec.whatwg.org/#dom-cva-reportvalidity

        Firefox and Chrome already support this.

        Demo: https://googlechrome.github.io/samples/report-validity/

        No new tests, rebaselined existing tests.

        * html/HTMLButtonElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        Add reportValidity() operation.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):

        (WebCore::HTMLFormControlElement::reportValidity):
        Add implementation for reportValidity() for form control elements.
        First, it calls checkValidity() and returns early if there is no
        constraint violation. if the JS canceled the 'invalid' event
        fired by checkValidity(), then return early as well, as per the
        specification. If the element is focusable, we scroll to it,
        focus it and show the validation message. Otherwise, we log a
        error message to the console. The last part of the behavior
        matches what we already did in HTMLFormElement::validateInteractively()
        and complies with the behavior in the specification.

        (WebCore::HTMLFormControlElement::focusAndShowValidationMessage):
        Add utility function to scroll to the form control element, focus
        it and show its validation message. This code was moved from
        HTMLFormElement::validateInteractively() so that it could be reused
        in HTMLFormControlElement::reportValidity().

        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        Move the early abort checks to the existing call site (prepareForSubmission)
        so that we can reuse this method for reportValidity().

        (WebCore::HTMLFormElement::prepareForSubmission):
        Only call validateInteractively() if we really should validate. Those checks
        used to be in validateInteractively() but I moved them here so we could more
        easily reuse validateInteractively().

        (WebCore::HTMLFormElement::checkValidity):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        Update Vector type to be a Vector of HTMLFormControlElement given that we
        only add HTMLFormControlElement objects to it and that it results it simpler
        code.

        (WebCore::HTMLFormElement::reportValidity):
        Add implementation for reportValidity() for form elements. The
        implementation calls our already existing validateInteractively()
        method, as per the specification.

        * html/HTMLFormElement.h:

        * html/HTMLObjectElement.h:
        reportValidity() returns true unconditionally for object elements,
        similarly to checkValidity().

2016-10-15  Simon Fraser  <simon.fraser@apple.com>

        Sort the project file.

        * WebCore.xcodeproj/project.pbxproj:

2016-10-15  Simon Fraser  <simon.fraser@apple.com>

        Implement serializer = { attribute }
        https://bugs.webkit.org/show_bug.cgi?id=163466

        Reviewed by Darin Adler.

        Fix the code generator to generate code for serializer = { attribute }.
        In IDLParser, extend domSerializable with flags for the 'inherit', 'getter' and
        'attribute' values (the first two are still unsupported). Fix parseSerializationPattern()
        to detect these; it needs to create the domSerializable() now. Basic support
        for isSerializableAttribute() is added (primitive types only).
        
        GenerateSerializerFunction is fixed to output code for the serializable attributes
        in the order specified in "serializer = {}", as specified in WebIDL.
        
        Removed custom serialization for ClientRect and PerformanceTiming.
        
        Other minor cleanup to always get $interfaceName from $interface->name, and to fix
        ObjectConstructor.h to be included as <runtime/ObjectConstructor.h>.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSClientRectCustom.cpp: Removed.
        * bindings/js/JSPerformanceTimingCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateSerializerFunction):
        * bindings/scripts/IDLParser.pm:
        (parseSerializerRest):
        (parseSerializationPattern):
        (parseSerializationAttributes):
        (isSerializableAttribute):
        (applyMemberList):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionToJSONCaller):
        * bindings/scripts/test/JS/JSTestSerialization.cpp: Added.
        * bindings/scripts/test/JS/JSTestSerialization.h: Added.
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerialization.idl: Copied from Source/WebCore/dom/ClientRect.idl.
        * dom/ClientRect.idl:
        * page/PerformanceTiming.idl:

2016-10-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Restore user agent quirk for Yahoo
        https://bugs.webkit.org/show_bug.cgi?id=163481

        Reviewed by Carlos Garcia Campos.

        finance.yahoo.com is sending a mobile version in response to our standard user agent.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2016-10-15  Chris Dumez  <cdumez@apple.com>

        Setting HTMLMediaElement.volume to NaN or Inf should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=163472

        Reviewed by Sam Weinig.

        Setting HTMLMediaElement.volume to NaN or Inf should throw a TypeError:
        - https://html.spec.whatwg.org/#dom-media-volume

        This is because the attribute is of type double (not unrestricted double in the IDL).

        Chrome and Firefox agree with the specification. WebKit throws an IndexSizeErr instead.

        No new tests, rebaselined existing test.

        * html/HTMLMediaElement.idl:

2016-10-15  Zalan Bujtas  <zalan@apple.com>

        CounterNode::resetRenderers is so inefficient.
        https://bugs.webkit.org/show_bug.cgi?id=163480

        Reviewed by Simon Fraser.

        CounterNode::resetRenderers() removes all the associated renderers from this CounterNode
        and sets the dirty bit on them.
        This patch does all that in a loop, instead of traversing the linked tree on each removal.

        No change in functionality.

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::~CounterNode):
        (WebCore::CounterNode::nextInPreOrderAfterChildren):
        (WebCore::CounterNode::lastDescendant):
        (WebCore::CounterNode::addRenderer): These assertions do not seem super useful.
        (WebCore::CounterNode::removeRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::RenderCounter):
        (WebCore::RenderCounter::~RenderCounter):
        (WebCore::RenderCounter::originalText):
        (WebCore::updateCounters):
        (WebCore::RenderCounter::invalidate): Deleted.
        * rendering/RenderCounter.h:

2016-10-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] macOS inline controls
        https://bugs.webkit.org/show_bug.cgi?id=163444
        <rdar://problem/27989473>

        Reviewed by Dean Jackson.

        Introducing the new MacOSMediaControls and MacOSInlineMediaControls classes. MacOSMediaControls is a MediaControls subclass
        that adds specific buttons to the macOS platform and sets the layout traits to be macOS. This class has a new subclass,
        MacOSInlineMediaControls, which sets the layout traits to also include inline and implements custom layout to drop
        controls as necessary as the width of the controls varies. It also shows the volume slider when the mute button is hovered.
        
        Tests: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-buttons-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-constructor.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-controls-bar-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-layout.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-time-control-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-volume-slider-visibility.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-volume-styles.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html
               media/modern-media-controls/macos-media-controls/macos-media-controls.html

        * Modules/modern-media-controls/controls/macos-inline-media-controls.css: Added.
        (.media-controls.mac.inline > .controls-bar):
        (.media-controls.mac.inline > .controls-bar > *):
        (.media-controls.mac.inline button):
        (.media-controls.mac.inline button:active):
        (.media-controls.mac.inline > .controls-bar button):
        (.media-controls.mac.inline > .controls-bar,):
        (.media-controls.mac.inline button.play-pause):
        (.media-controls.mac.inline button.skip-back):
        (.media-controls.mac.inline .scrubber.slider):
        (.media-controls.mac.inline button.mute):
        (.media-controls.mac.inline button.airplay):
        (.media-controls.mac.inline button.pip):
        (.media-controls.mac.inline button.tracks):
        (.media-controls.mac.inline button.fullscreen):
        (.media-controls.mac.inline .time-label):
        (.media-controls.mac.inline .volume-slider-container):
        (.media-controls.mac.inline .volume-slider-container:before):
        (.media-controls.mac.inline .volume.slider):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js: Added.
        (MacOSInlineMediaControls.prototype.layout):
        (MacOSInlineMediaControls.prototype.handleEvent):
        * Modules/modern-media-controls/controls/macos-media-controls.js: Added.
        (MacOSMediaControls):

2016-10-14  Antti Koivisto  <antti@apple.com>

        100% CPU on homedepot.com page
        https://bugs.webkit.org/show_bug.cgi?id=163452
        <rdar://problem/28730708>

        Reviewed by Simon Fraser.

        The site has a keyframe animation on body. Currently this causes the animation to invalidate the
        style of the entire document.

        Animations use SyntheticStyleChange to invalidate elements when animation progresses and currently
        that causes full subtree invalidation. However animation only ever affect individual elements and
        the normal style resolution mechanism should be able to deal with things like inheritance as needed.

        Test: fast/animation/animation-style-update-size.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        (WebCore::Document::lastStyleUpdateSizeForTesting):

            Testing support.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

            Don't force subtree style resolution for SyntheticStyleChange.

        * style/StyleUpdate.h:
        (WebCore::Style::Update::size):
        * testing/Internals.cpp:
        (WebCore::Internals::lastStyleUpdateSize):
        * testing/Internals.h:
        * testing/Internals.idl:

2016-10-14  Chris Dumez  <cdumez@apple.com>

        Setting HTMLMediaElement.muted to the same value should not fire a volume change event
        https://bugs.webkit.org/show_bug.cgi?id=163474

        Reviewed by Eric Carlson.

        Setting HTMLMediaElement.muted to the same value should not fire a volume
        change event:
        - https://html.spec.whatwg.org/#dom-media-muted

        Chrome and Firefox agree with the specification.

        No new tests, rebaselined existing test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):

2016-10-14  Dean Jackson  <dino@apple.com>

        Add Display P3 ColorSpace
        https://bugs.webkit.org/show_bug.cgi?id=162880
        <rdar://problem/28598564>

        Reviewed by Sam Weinig.

        Re-landing with a version that hopefully compiles on El Capitan.

        Add a new ColorSpace for Display P3.

        This will be tested once the Color class can create
        objects that reference other color spaces.

        * platform/graphics/ColorSpace.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::displayP3ColorSpaceRef):
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::cachedCGColorSpace):

2016-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Minor cleanups
        https://bugs.webkit.org/show_bug.cgi?id=162953

        Reviewed by Dean Jackson.

        Code cleanup. No change in behavior.

        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::frameIsCompleteAtIndex):
        (WebCore::ImageDecoder::frameBytesAtIndex):

2016-10-14  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2016-10-14  Anders Carlsson  <andersca@apple.com>

        Pass on networking settings to the PKPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=163462
        rdar://problem/28567629

        Reviewed by Dan Bernstein.

        Add new SPI.

        * platform/spi/cocoa/PassKitSPI.h:

2016-10-14  Dean Jackson  <dino@apple.com>

        CSS parsing should use Color not RGBA32
        https://bugs.webkit.org/show_bug.cgi?id=163423
        <rdar://problem/28766903>

        Reviewed by Simon Fraser.

        Re-landing this after it was rolled out in https://trac.webkit.org/r207342.

        In order to allow CSS to use the ExtendedColor variant of
        Color, we need to stop using RGBA32. This is a fairly big
        change that goes through all the places in the parser
        related to colors, and moves them from RGBA32 to Color.

        No change in functionality, so covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj: Add the new ColorHash.h file.

        * css/CSSPrimitiveValue.cpp: CSSPrimitiveValue now can hold a Color*
        rather than an unsigned int for colors.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h: Move to Color* and also use some
        nullptrs.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add a new inline
        constructor.

        * css/CSSValuePool.cpp: Move to Color.
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createColorValue):
        * css/CSSValuePool.h: Change the ColorValueCache to a new type.

        * css/StyleResolver.cpp: Move to Color.
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        * css/parser/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromString):
        (WebCore::CSSParser::parseSystemColor):
        (WebCore::fastParseColorInternal):
        (WebCore::CSSParser::fastParseColor):
        (WebCore::CSSParser::parseColorFromValue):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::fastParseColorInternal):
        (WebCore::CSSParserFastPaths::parseColor):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        * css/parser/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * editing/EditingStyle.cpp:
        (WebCore::cssValueToColor):
        (WebCore::textColorFromStyle):
        (WebCore::backgroundColorFromStyle):
        (WebCore::rgbaBackgroundColorInEffect):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::isTransparentColorValue):
        (WebCore::cssValueToRGBA): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::colorPropertyValueForNode):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/canvas/CanvasRenderingContext2D.cpp: Ditto, but leave a FIXME to
        remind myself to come back when colorWithOverrideAlpha has been updated.
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::isCurrentColorString):
        (WebCore::parseColor):
        (WebCore::currentColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        * html/canvas/CanvasStyle.h:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

        * platform/graphics/Color.h: Add new constructors for the special
        empty and deleted Color values used in HashTables.
        (WebCore::Color::Color):
        (WebCore::Color::isHashTableDeletedValue):
        (WebCore::Color::asUint64): New accessor to get the raw uint64_t value.

        * platform/graphics/ColorHash.h: Added. Implement the traits for a Color HashTable.
        (WTF::ColorHash::hash):
        (WTF::ColorHash::equal):
        (WTF::HashTraits<WebCore::Color>::emptyValue):
        (WTF::HashTraits<WebCore::Color>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Color>::isDeletedValue):

2016-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Implement basic SVG support
        https://bugs.webkit.org/show_bug.cgi?id=163349

        Reviewed by Brent Fulgham.

        Direct2D needs access to the target graphics context when generating bitmap
        images so that it can properly match pixel format and other settings.

        Add implementations for a number of drawing primitives used in the SVG
        test cases. Correct some differences between CG and Direct2D for drawing
        different primitives.

        No new tests. Tested by existing 'svg' tests.

        * platform/graphics/BitmapImage.cpp:
       (WebCore::BitmapImage::frameImageAtIndex): Take optional target graphics
       context. Also pass the graphics context to the image decoder.
       (WebCore::BitmapImage::nativeImage): Accept an optional target context.
       (WebCore::BitmapImage::nativeImageForCurrentFrame): Ditto.
       (WebCore::BitmapImage::draw): Pass target graphics context to the
       'frameImageAtIndex' method.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::create): Moved from header. Add create function that
        takes an optional GraphicsContext argument.
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageFrameCache.cpp: Add missing include needed to build
        under Direct2D.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setDecoderTargetContext): Added.
        (WebCore::ImageSource::setRenderTarget): Deleted.
        * platform/graphics/ImageSource.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextPlatformPrivate::endDraw): Log error state instead of crashing
        each time.
        (WebCore::GraphicsContext::drawEllipse): Ellipses are defined in D2D as a center, an
        X-radius, and a Y-radius.
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::clearRect): Use 'Clear' function if possible. Don't clear
        anything if the clear rect is outside the drawing area.
        (WebCore::GraphicsContext::strokeRect): Provide implementation (needed by SVG).
        (WebCore::GraphicsContext::platformFillEllipse): Ellipses are defined in D2D as
        a center, an X-radius, and a Y-radius.
        (WebCore::GraphicsContext::platformStrokeEllipse): Ditto.
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer): Accept optional GraphicsContext argument.
        (WebCore::ImageBuffer::ImageBuffer): Ditto.
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::setTargetContext): Renamed from 'setRenderTarget'.
        (WebCore::ImageDecoder::createFrameImageAtIndex): Take optional GraphicsContext argument.
        (WebCore::ImageDecoder::setRenderTarget): Deleted.
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::BitmapImage::setRenderTarget): Deleted.
        * platform/graphics/win/NativeImageDirect2D.cpp: Add missing include.
        * platform/graphics/win/PatternDirect2D.cpp: 
        (WebCore::Pattern::createPlatformPattern): Revise for new signature.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded): Pass GraphicsContext
        to ImageBuffer constructor.
        (WebCore::FilterEffectRendererHelper::beginFilterEffect): Pass target context to
        filter when allocating backing store.
        * rendering/FilterEffectRenderer.h: Add GraphicsContext as argument to constructor.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasFilterThatIsPainting): Supply GraphicsContext argument when
        building new FilterEffectRenderer and helper.
        (WebCore::RenderLayer::setupFilters): Ditto.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame): Revise to take optional GraphicsContext
        argument.
        (WebCore::SVGImage::nativeImage): Ditto.
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::nativeImageForCurrentFrame): Ditto.
        * svg/graphics/SVGImageForContainer.h:

2016-10-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r207319.

        Regressed Dromaeo and may have caused crashes under
        GuardMalloc (rdar://problem/28780835)

        Reverted changeset:

        "[Web IDL] Add support for [SameObject] extended attribute"
        https://bugs.webkit.org/show_bug.cgi?id=163414
        http://trac.webkit.org/changeset/207319

2016-10-14  Anders Carlsson  <andersca@apple.com>

        Clean up BackForwardClient
        https://bugs.webkit.org/show_bug.cgi?id=163454

        Reviewed by Sam Weinig.

        Remove iOS specific member functions that are only used from WebKit.

        * history/BackForwardClient.h:
        * loader/EmptyClients.cpp:

2016-10-13  Anders Carlsson  <andersca@apple.com>

        Move BackForwardList from WebCore to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=163418

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardController.h:
        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):
        * page/Page.cpp:
        (WebCore::Page::Page):

2016-10-14  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Changing the argument on fit-content() doesn't cause the grid to be relayout
        https://bugs.webkit.org/show_bug.cgi?id=163434

        Reviewed by Sergio Villar Senin.

        When fit-content() was implemented a new attribute
        m_fitContentTrackBreadth was added to GridTrackSize.
        However we forgot to include it in the == operator implementation,
        so we were missing the changes on that value.

        Now if you change the argument of a fit-content() track,
        the track size is properly recomputed.

        Test: fast/css-grid-layout/grid-change-fit-content-argument.html

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::operator==): Check m_fitContentTrackBreadth.

2016-10-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r207317.
        https://bugs.webkit.org/show_bug.cgi?id=163448

        This change caused an existing LayoutTest to fail on all
        platforms (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "CSS parsing should use Color not RGBA32"
        https://bugs.webkit.org/show_bug.cgi?id=163423
        http://trac.webkit.org/changeset/207317

2016-10-14  Antti Koivisto  <antti@apple.com>

        Share inline stylesheets between shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=163353

        Reviewed by Ryosuke Niwa and Andreas Kling.

        If shadow trees have identical inline stylesheets the data structures can be shared.
        In future this will also allow sharing style resolvers.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::createInline):

            Move StyleSheetContents construction to the client.

        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        (WebCore::CSSParserContextHash::equal):
        (WTF::HashTraits<WebCore::CSSParserContext>::constructDeletedValue):
        (WTF::HashTraits<WebCore::CSSParserContext>::isDeletedValue):
        (WTF::HashTraits<WebCore::CSSParserContext>::emptyValue):

            Make CSSParserContext hashable.

        * dom/ExtensionStyleSheets.cpp:
        (WebCore::createExtensionsStyleSheet):
        (WebCore::ExtensionStyleSheets::pageUserSheet):
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache):

            Don't use CSSStyleSheet::createInline, these are not really inline stylesheets.
            Code cleanups.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::parserContextForForElement):
        (WebCore::makeInlineStyleSheetCacheKey):
        (WebCore::inlineStyleSheetCache):

            Implement a simple cache for sharing stylesheets with identical text and context.

        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::clearCache):
        * dom/InlineStyleSheetOwner.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):

2016-10-14  Chris Dumez  <cdumez@apple.com>

        [Mac] Allow throttling of background tabs that have media elements with no audible audio
        https://bugs.webkit.org/show_bug.cgi?id=163402
        <rdar://problem/28056151>

        Reviewed by Gavin Barraclough.

        Allow throttling of background tabs that have media elements with no audible audio.
        We were taking an media assertion from the PageThrottler as soon as there was a
        media element playing on the page. This prevented throttling of background tabs
        even if those media elements had no audible audio, which was unfortunate.

        We now have more fine-grained rules for when HTMLMediaElement should take an
        assertion. I also added release logging to help debug such issues in the
        future.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::updateAudioAssertionState):
        (WebCore::HTMLMediaElement::effectiveMuted): Deleted.
        * html/HTMLMediaElement.h:

2016-10-14  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Cleanup patch, fix small inconsistencies
        https://bugs.webkit.org/show_bug.cgi?id=163329

        Reviewed by Youenn Fablet.

        Cleanup patch, fixed 3 small inconsistences between implementation and spec.

        No change in behaviour.

        * Modules/streams/ReadableStream.idl: Added optional parameter in getReader.
        * Modules/streams/ReadableStreamDefaultController.js:
        (error): Call readableStreamDefaultControllerError instead of readableStreamError.
        * Modules/streams/ReadableStreamInternals.js: Added missing ASSERT in readableStreamDefaultControllerCallPullIfNeeded.

2016-10-14  Youenn Fablet  <youenn@apple.com>

        http://trac.webkit.org/changeset/207330 broke Mac Windows build
        https://bugs.webkit.org/show_bug.cgi?id=163442

        Unreviewed.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::toPlatformRequestCachePolicy): Do not explicitly use CFURLRequestCachePolicy enumeration values.

2016-10-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] GraphicsContext3D::ImageExtractor fails to extract images
        https://bugs.webkit.org/show_bug.cgi?id=163439

        Reviewed by Carlos Garcia Campos.

        In the Cairo implementation of GraphicsContext3D::ImageExtractor,
        don't check for frame completeness at index 0. This information
        is now cached only after the frame for that index is decoded and
        marked as completed, which is done after this check.

        Becuase of this the current check forces extractImage() to return
        early and abort WebGL texture uploads from image sources.

        This bug was most likely exposed after the refactoring in r206481.
        https://trac.webkit.org/changeset/206481

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2016-10-14  Youenn Fablet  <youenn@apple.com>

        MediaResourceLoader should use CachedResource::ressourceError to do CORS checks
        https://bugs.webkit.org/show_bug.cgi?id=163279

        Reviewed by Darin Adler.

        Covered by existing tests.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived): Making use of CachedResource::ressourceError to detect CORS failures.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest): Activating loader options checks
        before reusing the resource.
        (WebCore::isResourceSuitableForDirectReuse): Disabling direct reuse of MediaResource since reuse of raw
        resources does not work yet for media resources.

2016-10-14  Youenn Fablet  <youenn@apple.com>

        Make NetworkCache aware of fetch cache mode
        https://bugs.webkit.org/show_bug.cgi?id=163332

        Reviewed by Antti Koivisto.

        Tests: imported/w3c/web-platform-tests/fetch/api/request/request-cache-default-conditional.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-default.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-force-cache.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-no-cache.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-no-store.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-only-if-cached.html
               imported/w3c/web-platform-tests/fetch/api/request/request-cache-reload.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::updateRequestAccordingCacheMode): Setting request cache policy according cache mode.
        Basically, these two are about the same.
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Making use of cache policy instead of cache mode.
        * platform/network/ResourceRequestBase.h: Adding new cache policies, aligned with fetch cache modes.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::toPlatformRequestCachePolicy): If policy is not supported by CFNetwork, fallback to ReloadIgnoringCacheData.
        This is the best approximate we might find.
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest): Only updating cache policy, if cache policy is the default.
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm: Doing the same modifications as for ResourceRequestCFNet.
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::toPlatformRequestCachePolicy):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2016-10-13  Youenn Fablet  <youenn@apple.com>

        Binding generated code for private operations should assert for casted-this checks
        https://bugs.webkit.org/show_bug.cgi?id=163326

        Reviewed by Darin Adler.

        Covered by existing tests.

        Private operations are not exposed to user scripts and are only called by built-in scripts or other WebKit-controlled code.
        The call sites already ensure that the caller is of the right type so there is no need to do that work twice.

        Introducing a casted-this-error Assert mode for casted-this checks, which may be reused for other binding generated code.
        Updated binding generator to use that mode for private operations.

        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::callPromiseOperation):
        (WebCore::BindingCaller::callOperation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunction):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionPrivateMethod):

2016-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebView and WebPage URLs not updated after URL is modified by InjectedBundlePageResourceLoadClient::willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=146306

        Reviewed by Darin Adler.

        Notify about the provisional URL change when new request set for main resource load in DocumentLoader has a
        different URL than the previous one.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):

2016-10-13  Youenn Fablet  <youenn@apple.com>

        Update serializer and iterator binding generated code
        https://bugs.webkit.org/show_bug.cgi?id=163325

        Reviewed by Darin Adler.

        No change of behavior.
        Covered by existing tests and rebased binding generated code.

        Making use of BindingCaller::callOperation within serializer and iterator operations.
        Refactored serializer code to use direct attribute getters.

        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorCreate):
        (WebCore::iteratorForEach):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerFunction):
        (GenerateImplementationIterableFunctions):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::jsTestIterablePrototypeFunctionSymbolIteratorCaller):
        (WebCore::jsTestIterablePrototypeFunctionSymbolIterator):
        (WebCore::jsTestIterablePrototypeFunctionEntriesCaller):
        (WebCore::jsTestIterablePrototypeFunctionEntries):
        (WebCore::jsTestIterablePrototypeFunctionKeysCaller):
        (WebCore::jsTestIterablePrototypeFunctionKeys):
        (WebCore::jsTestIterablePrototypeFunctionValuesCaller):
        (WebCore::jsTestIterablePrototypeFunctionValues):
        (WebCore::jsTestIterablePrototypeFunctionForEachCaller):
        (WebCore::jsTestIterablePrototypeFunctionForEach):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunctionSymbolIteratorCaller):
        (WebCore::jsTestNodePrototypeFunctionSymbolIterator):
        (WebCore::jsTestNodePrototypeFunctionEntriesCaller):
        (WebCore::jsTestNodePrototypeFunctionEntries):
        (WebCore::jsTestNodePrototypeFunctionKeysCaller):
        (WebCore::jsTestNodePrototypeFunctionKeys):
        (WebCore::jsTestNodePrototypeFunctionValuesCaller):
        (WebCore::jsTestNodePrototypeFunctionValues):
        (WebCore::jsTestNodePrototypeFunctionForEachCaller):
        (WebCore::jsTestNodePrototypeFunctionForEach):
        (WebCore::jsTestNodePrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionToJSON):

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r207318.
        https://bugs.webkit.org/show_bug.cgi?id=162951

        This fixes the API test WebKit2.PendingAPIRequestURL which asserted when trying to hash a null String.

        * loader/DocumentLoader.cpp:
        (WebCore::isRemoteWebArchive):
        If the mimeType is a null String, it is not in the set webArchiveMIMETypes, so return false instead of hashing it.

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Hosts of URLs with non-special schemes should be case-sensitive, and non-ASCII characters in such hosts should be punycode-encoded
        https://bugs.webkit.org/show_bug.cgi?id=163413

        Reviewed by Tim Horton.

        This retains compatibility with the canonicalization Chrome, Firefox, and Safari with uppercase characters
        in the hosts of URLs with unrecognized schemes.  Safari treats such characters as the host, while Firefox
        and Chrome treat such characters as part of the path, starting with the "//" after the ':'
        Behavior of non-ASCII characters is inconsistent, and since we need to have a host, we should punycode-encode
        the host to be consistent with special schemes because percent-encoding hosts sometimes is inconsistent.
        
        This solution was proposed to the spec in https://github.com/whatwg/url/issues/148

        Covered by updated API and layout tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        (WebCore::URLParser::percentDecode):
        (WebCore::URLParser::domainToASCII):
        (WebCore::URLParser::hasInvalidDomainCharacter):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::URLParser::formURLDecode):
        (WebCore::percentDecode): Deleted.
        (WebCore::domainToASCII): Deleted.
        (WebCore::hasInvalidDomainCharacter): Deleted.
        (WebCore::formURLDecode): Deleted.
        * platform/URLParser.h:

2016-10-13  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Add support for [SameObject] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=163414

        Reviewed by Darin Adler.

        Add support for [SameObject] Web IDL extended attribute:
        - https://heycam.github.io/webidl/#SameObject

        Start using it on DOM / HTML attributes where the specification
        mandates it.

        Test: js/dom/SameObject-support.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (ShouldCacheAttribute):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * dom/DataTransfer.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/MutationRecord.idl:
        * dom/Node.idl:
        * dom/NodeIterator.idl:
        * dom/ParentNode.idl:
        * dom/TreeWalker.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDataListElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMeterElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * page/Location.idl:
        * page/Navigator.idl:

2016-10-13  Andy Estes  <aestes@apple.com>

        [iOS] Support Web Archive previews generated by QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=162951
        <rdar://problem/28607920>

        Reviewed by Brady Eidson.

        QuickLook might generate a Web Archive preview for some resource types, but WebKit would
        refuse to load it due to the prohibition on loading remote Web Archives. Even though the
        original resource might be from a remote origin, the QuickLook-generated preview is a
        trusted local resource, so allow it to be loaded.

        No test possible.

        * loader/DocumentLoader.cpp:
        (WebCore::isRemoteWebArchive): Added. Moved the remote web archive check from
        continueAfterContentPolicy() to here, and added a check for responses containing the
        QuickLook preview protocol.
        (WebCore::DocumentLoader::continueAfterContentPolicy): Called isRemoteWebArchive().

2016-10-13  Dean Jackson  <dino@apple.com>

        CSS parsing should use Color not RGBA32
        https://bugs.webkit.org/show_bug.cgi?id=163423
        <rdar://problem/28766903>

        Reviewed by Simon Fraser.

        In order to allow CSS to use the ExtendedColor variant of
        Color, we need to stop using RGBA32. This is a fairly big
        change that goes through all the places in the parser
        related to colors, and moves them from RGBA32 to Color.

        No change in functionality, so covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj: Add the new ColorHash.h file.

        * css/CSSPrimitiveValue.cpp: CSSPrimitiveValue now can hold a Color*
        rather than an unsigned int for colors.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h: Move to Color* and also use some
        nullptrs.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add a new inline
        constructor.

        * css/CSSValuePool.cpp: Move to Color.
        (WebCore::CSSValuePool::CSSValuePool):
        (WebCore::CSSValuePool::createColorValue):
        * css/CSSValuePool.h: Change the ColorValueCache to a new type.

        * css/StyleResolver.cpp: Move to Color.
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        * css/parser/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromString):
        (WebCore::CSSParser::parseSystemColor):
        (WebCore::fastParseColorInternal):
        (WebCore::CSSParser::fastParseColor):
        (WebCore::CSSParser::parseColorFromValue):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::fastParseColorInternal):
        (WebCore::CSSParserFastPaths::parseColor):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        * css/parser/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * editing/EditingStyle.cpp:
        (WebCore::cssValueToColor):
        (WebCore::textColorFromStyle):
        (WebCore::backgroundColorFromStyle):
        (WebCore::rgbaBackgroundColorInEffect):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::isTransparentColorValue):
        (WebCore::cssValueToRGBA): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::colorPropertyValueForNode):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/canvas/CanvasRenderingContext2D.cpp: Ditto, but leave a FIXME to
        remind myself to come back when colorWithOverrideAlpha has been updated.
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::isCurrentColorString):
        (WebCore::parseColor):
        (WebCore::currentColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        * html/canvas/CanvasStyle.h:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

        * platform/graphics/Color.h: Add new constructors for the special
        empty and deleted Color values used in HashTables.
        (WebCore::Color::Color):
        (WebCore::Color::isHashTableDeletedValue):
        (WebCore::Color::asUint64): New accessor to get the raw uint64_t value.

        * platform/graphics/ColorHash.h: Added. Implement the traits for a Color HashTable.
        (WTF::ColorHash::hash):
        (WTF::ColorHash::equal):
        (WTF::HashTraits<WebCore::Color>::emptyValue):
        (WTF::HashTraits<WebCore::Color>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Color>::isDeletedValue):

2016-10-13  Nan Wang  <n_wang@apple.com>

        AX: [Mac] better accessibility support for Summary elements
        https://bugs.webkit.org/show_bug.cgi?id=163367
        <rdar://problem/28745010>

        Reviewed by Chris Fleizach.

        Exposed summary elements as AXButton and used the text node's content
        as AXTitle. Also exposed the details parent's expanded status on the summary
        element, so that users would see it as a collapsed/expanded button.

        Changes are covered in the modified tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::parentObjectUnignored):
        (WebCore::AccessibilityObject::scrollViewAncestor):
        (WebCore::AccessibilityObject::headingElementForNode):
        (WebCore::AccessibilityObject::matchedParent):
        (WebCore::AccessibilityObject::isDescendantOfObject):
        (WebCore::AccessibilityObject::isInsideARIALiveRegion):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        (WebCore::AccessibilityObject::isExpanded):
        (WebCore::AccessibilityObject::isARIAHidden):
        (WebCore::AccessibilityObject::focusableAncestor):
        (WebCore::AccessibilityObject::editableAncestor):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isSummary):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityListAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityLandmarkAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityFieldsetAncestor]):
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        (-[WebAccessibilityObjectWrapper tableParent]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper detailParentForSummaryObject:]):
        (-[WebAccessibilityObjectWrapper detailParentForObject:]):
        (matchedParent): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2016-10-13  Zalan Bujtas  <zalan@apple.com>

        [Clean RenderTree] LayoutTests/imported/blink/fast/table/crash-bad-child-table-continuation.html fails.
        https://bugs.webkit.org/show_bug.cgi?id=163399

        Reviewed by David Hyatt.

        When we try to insert a renderer before a child whose direct parent is a (anonymus) RenderTable, continuation logic
        should dismiss the RenderTable as the parent and find a more appropriate ancestor.
        RenderTables assumes a certain descendant tree structure which might not be available in the continuation.

        Will be testable with webkit.org/b/162834

        * rendering/RenderInline.cpp:
        (WebCore::canUseAsParentForContinuation):
        (WebCore::RenderInline::addChildToContinuation):

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Disable URLParser for non-Safari iOS and Mac apps for now
        https://bugs.webkit.org/show_bug.cgi?id=163397

        Reviewed by Tim Horton.

        r207268 was an awful hack, and it was insufficient.
        Disable the URLParser for other apps for now.  Hopefully we can enable it everywhere soon.

        No change in behavior for testing infrastructure.  
        Old URLs were well tested before making the switch, and nothing has changed for them.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::URLParser::setEnabled):
        (WebCore::URLParser::enabled):
        * platform/URLParser.h:

2016-10-13  Chris Dumez  <cdumez@apple.com>

        Rename [ConstructorTemplate=*] to [LegacyConstructorTemplate=*]
        https://bugs.webkit.org/show_bug.cgi?id=163390

        Reviewed by Darin Adler.

        Rename [ConstructorTemplate=*] to [LegacyConstructorTemplate=*] as the
        modern way of doing this is to use a constructor that takes in a
        dictionary. I am working on getting rid of this extended attribute
        entirely but the remaining uses require better support for union types.

        * Modules/applepay/ApplePayValidateMerchantEvent.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/mediastream/RTCTrackEvent.idl:
        * bindings/scripts/CodeGenerator.pm:
        (IsConstructorTemplate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        (IsConstructable):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Event.idl:
        * dom/ProgressEvent.idl:
        * dom/UIEvent.idl:
        * html/track/TrackEvent.idl:

2016-10-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207297.

        This change broke the iOS build.

        Reverted changeset:

        "Disable URLParser for non-Safari iOS and Mac apps for now"
        https://bugs.webkit.org/show_bug.cgi?id=163397
        http://trac.webkit.org/changeset/207297

2016-10-13  Anders Carlsson  <andersca@apple.com>

        Get rid of the HistoryItemVector typedef
        https://bugs.webkit.org/show_bug.cgi?id=163398

        Reviewed by Beth Dakin.

        Expand the HistoryitemVector typedef instead to make it more clear what types we are dealing with.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        (WebCore::BackForwardList::entries):
        * history/BackForwardList.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::children):
        * history/HistoryItem.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::currentFramesMatchItem):

2016-10-13  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] MediaControls base class
        https://bugs.webkit.org/show_bug.cgi?id=163387
        <rdar://problem/28753955>

        Reviewed by Dean Jackson.

        Introducing the new MediaControls class which will serve as a basis for all media controls.
        We will introduce specific MediaControls subclasses for macOS inline, macOS fullscreen and
        iOS inline in future patches.

        Tests: media/modern-media-controls/media-controls/media-controls-constructor.html
               media/modern-media-controls/media-controls/media-controls-placard.html
               media/modern-media-controls/media-controls/media-controls-start-button.html

        * Modules/modern-media-controls/controls/media-controls.css: Added.
        (.media-controls,):
        * Modules/modern-media-controls/controls/media-controls.js: Added.
        (MediaControls.):
        (MediaControls.prototype.get showsStartButton):
        (MediaControls.prototype.set showsStartButton):
        (MediaControls.prototype.get showsPlacard):
        (MediaControls.prototype.showPlacard):
        (MediaControls.prototype.hidePlacard):

2016-10-13  Alex Christensen  <achristensen@webkit.org>

        Disable URLParser for non-Safari iOS and Mac apps for now
        https://bugs.webkit.org/show_bug.cgi?id=163397

        Reviewed by Tim Horton.

        r207268 was an awful hack, and it was insufficient.
        Disable the URLParser for other apps for now.  Hopefully we can enable it everywhere soon.

        No change in behavior for testing infrastructure.  
        Old URLs were well tested before making the switch, and nothing has changed for them.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::URLParser::setEnabled):
        (WebCore::URLParser::enabled):
        * platform/URLParser.h:

2016-10-13  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] TimeControl and TimeLabel
        https://bugs.webkit.org/show_bug.cgi?id=163356
        <rdar://problem/28741376>

        Reviewed by Dean Jackson.

        We introduce the TimeControl and TimeLabel classes. A TimeControl object
        provides two TimeLabels, one for the elapsed time, one for the remaining
        time, and a Scrubber in between them. Depending on a TimeControl's width,
        it will adjust its layout such that the scrubber takes all the available
        space between the labels, and can indicate whether it's large enough to
        meet the minimal required width to show the scrubber, such that a container
        node may decide not to show the TimeControl at all.

        TimeLabel nodes simply show an integer time value in miliseconds in a
        nicely formatted way.

        Tests: media/modern-media-controls/time-control/time-control.html
               media/modern-media-controls/time-label/time-label.html

        * Modules/modern-media-controls/controls/time-control.js: Added.
        (TimeControl.prototype.get width):
        (TimeControl.prototype.set width):
        (TimeControl.prototype.get isSufficientlyWide):
        * Modules/modern-media-controls/controls/time-label.css: Added.
        (.time-label):
        * Modules/modern-media-controls/controls/time-label.js: Added.
        (TimeLabel.prototype.get value):
        (TimeLabel.prototype.set value):
        (TimeLabel.prototype.commitProperty):
        (TimeLabel.prototype._formattedTime):

2016-10-13  Jer Noble  <jer.noble@apple.com>

        CRASH at WebCore::SourceBuffer::removeCodedFrames + 37
        https://bugs.webkit.org/show_bug.cgi?id=163336

        Reviewed by Alex Christensen.

        Test: media/media-source/media-source-remove-crash.html

        A null-deref crash can occur if a SourceBuffer is removed from a MediaSource after
        SourceBuffer.remove() is called, but before the removeTimer is fired.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeTimerFired):

2016-10-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] SHOULD NEVER BE REACHED ../../Source/WebCore/platform/URL.cpp(1291) : void WebCore::URL::parse(const WTF::String&)
        https://bugs.webkit.org/show_bug.cgi?id=163392

        Reviewed by Alex Christensen.

        Fix the URL constructor to work with URLParser.

        * platform/soup/URLSoup.cpp:
        (WebCore::URL::URL):

2016-10-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207286.

        Caused LayoutTest http/tests/misc/acid3.html to fail.

        Reverted changeset:

        "Share inline stylesheets between shadow trees"
        https://bugs.webkit.org/show_bug.cgi?id=163353
        http://trac.webkit.org/changeset/207286

2016-10-13  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Use min-size instead of min-content contribution for intrinsic maximums resolution
        https://bugs.webkit.org/show_bug.cgi?id=163283

        Reviewed by Manuel Rego Casasnovas.

        This was recently modified in the specs
        https://hg.csswg.org/drafts/diff/575fb847e29d/css-grid/Overview.bs. Specifically this is
        addressing the last one. It used to be "min-content contribution" but now it says "min-size
        contribution".

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::currentItemSizeForTrackSizeComputationPhase):

2016-10-11  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Fix intrinsic maximums resolution with fit-content and auto
        https://bugs.webkit.org/show_bug.cgi?id=163282

        Reviewed by Manuel Rego Casasnovas.

        The step 2.5 in section 12.5 https://drafts.csswg.org/css-grid/#algo-content of the specs,
        details how to sizes tracks with intrinsic max track sizing functions.

        Not so long ago there were only two max track sizing functions min-content and max-content
        (auto was always resolved to max-content). However there were some recent changes that force
        us to consider 2 new values: auto (which is not internally translated to max-content
        although it still works the same) and specially the newly added fit-content.

        Some of the new test cases are commented due to bug http://wkb.ug/163283.

        Test: fast/css-grid-layout/grid-intrinsic-maximums.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::shouldProcessTrackForTrackSizeComputationPhase):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes):
        (WebCore::GridTrackSize::hasIntrinsicMinTrackBreadth):
        (WebCore::GridTrackSize::hasIntrinsicMaxTrackBreadth):
        (WebCore::GridTrackSize::hasAutoOrMinContentMinTrackBreadthAndIntrinsicMaxTrackBreadth):

2016-10-13  Miguel Gomez  <magomez@igalia.com>

        [GTK] Video playback doesn't work properly with accelerated compositing disabled
        https://bugs.webkit.org/show_bug.cgi?id=163386

        Reviewed by Carlos Garcia Campos.

        Trigger a repaint of the player when a new frame arrives and accelerated compositing is disabled.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):

2016-10-13  Antti Koivisto  <antti@apple.com>

        Share inline stylesheets between shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=163353

        Reviewed by Ryosuke Niwa and Andreas Kling.

        If shadow trees have identical inline stylesheets the data structures can be shared.
        In future this will also allow sharing style resolvers.

        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        (WebCore::CSSParserContextHash::equal):
        (WTF::HashTraits<WebCore::CSSParserContext>::constructDeletedValue):
        (WTF::HashTraits<WebCore::CSSParserContext>::isDeletedValue):
        (WTF::HashTraits<WebCore::CSSParserContext>::emptyValue):

            Make CSSParserContext hashable.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::makeInlineStyleSheetCacheKey):
        (WebCore::inlineStyleSheetCache):

            Implement a simple cache for sharing stylesheets with identical text and context.

        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::clearCache):
        * dom/InlineStyleSheetOwner.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):

2016-10-13  Antti Koivisto  <antti@apple.com>

        Revert patch landed with wrong commit message.

2016-10-12  Per Arne Vollan  <pvollan@apple.com>

        [Win] Encode function pointers.
        https://bugs.webkit.org/show_bug.cgi?id=163331

        Reviewed by Brent Fulgham.

        We should encode stored function pointers.

        * platform/win/SoftLinking.h:

2016-10-13  Youenn Fablet  <youenn@apple.com>

        Remove CachedResourceRequest::mutableResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=163277

        Reviewed by Sam Weinig.

        No change of behavior.

        Removing CachedResourceRequest::mutableResourceRequest requires call sites to either update the ResourceRequest
        before creating the CachedResourceRequest or to add methods at CachedResourceRequest.

        Adding CachedResourceRequest::releaseResourceRequest for CachedResource constructor.

        Most new CachedResourceRequest methods are used by CachedResourceLoader which is passed a CachedResourceRequest.
        This allows code in CachedResourceLoader to be easier to read.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::loadBestFitImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::loadImage):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScriptWithCache):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::startPreflight):
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::prepareFetch):
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::acceptHeaderValueFromType): Deleted.
        (WebCore::updateRequestAccordingCacheMode): Deleted.
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
        (WebCore::CachedResourceRequest::updateForAccessControl):
        (WebCore::CachedResourceRequest::upgradeInsecureRequestIfNeeded):
        (WebCore::CachedResourceRequest::setDomainForCachePartition):
        (WebCore::acceptHeaderValueFromType):
        (WebCore::CachedResourceRequest::setAcceptHeaderIfNone):
        (WebCore::CachedResourceRequest::updateAccordingCacheMode):
        (WebCore::CachedResourceRequest::removeFragmentIdentifierIfNeeded):
        (WebCore::CachedResourceRequest::applyBlockedStatus):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::releaseResourceRequest):
        (WebCore::CachedResourceRequest::setCachingPolicy):
        (WebCore::CachedResourceRequest::mutableResourceRequest): Deleted.
        (WebCore::CachedResourceRequest::setCacheModeToNoStore): Deleted.
        * 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):

2016-10-13  Antti Koivisto  <antti@apple.com>

        Support scoped style for user agent shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=163212
        <rdar://problem/28715318>

        Reviewed by Ryosuke Niwa and Andreas Kling.

        This patch adds support for user agent shadow trees that have scoped style. This means
        that the shadows can be styled via <style> elements contained in the tree instead of
        using pseudo elements on the global UA sheet. Since the style is scoped it can use
        normal id and class selectors.

        Elements in the shadow tree can still be exposed for author styling if needed by giving
        them pseudo ids

        The patch also uses the new mechanism for the <meter> element.

        The mechanism is not optimized yet, each shadow tree gets its own copy of style-related data
        structures. This can be improved later.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/ElementRuleCollector.cpp:
        (WebCore::MatchRequest::MatchRequest):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):

            Make treeContextOrdinal an int so we can use negative ordinals. This is used to allow author pseudo
            elements from earlier tree context to win over the shadow tree (matching CSS scoping spec language).

        * css/ElementRuleCollector.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::CascadedProperties::addImportantMatches):
        * css/StyleResolver.h:
        * css/html.css:
        (meter::-webkit-meter-inner-element): Deleted.
        (meter::-webkit-meter-bar): Deleted.
        (meter::-webkit-meter-optimum-value): Deleted.
        (meter::-webkit-meter-suboptimum-value): Deleted.
        (meter::-webkit-meter-even-less-good-value): Deleted.

            Remove meter pseudo elements from the UA sheet.

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::childShouldCreateRenderer):

            Don't create shadow renderers when we have appearance (are using RenderMeter).

        (WebCore::setValueClass):

            Move this logic here from MeterShadowElement.cpp.
            Set both class and pseudo id. The latter is needed to keep author styling working.

        (WebCore::HTMLMeterElement::didElementStateChange):
        (WebCore::HTMLMeterElement::renderMeter):

            RenderMeter is now only instantiated when appearance is enabled.

        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot):

            Build the shadow tree out of <div>s instead of special shadow elements.

        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Removed.
        * html/shadow/MeterShadowElement.h: Removed.

            Not needed anymore.

        * html/shadow/meterElementShadow.css: Added.
        (div#inner):
        (div#bar):
        (div#value):
        (div#value.optimum):
        (div#value.suboptimum):
        (div#value.even-less-good):

            Stylesheet for meter element shadow tree using normal id and class selectors.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::shouldUseSharedUserAgentShadowTreeStyleResolver):

            Switch to per-scope style resolver for UA shadow trees if there is stylesheets in the tree.

        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::resolverIfExists):
        * style/StyleScope.h:

2016-10-12  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Drop support for legacy [ConstructorConditional=*]
        https://bugs.webkit.org/show_bug.cgi?id=163368

        Reviewed by Ryosuke Niwa.

        Drop support for legacy [ConstructorConditional=*] webkit-specific IDL
        extended attribute. This was introduced to disable DOM4 event
        constructors at compile time. However, nowadays, those constructors are
        enabled everywhere.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/scripts/CodeGenerator.pm:
        (GenerateConstructorConditionalString): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::getConstructData): Deleted.
        * bindings/scripts/test/TestInterface.idl:
        * dom/UIEvent.idl:

2016-10-12  Chris Dumez  <cdumez@apple.com>

        The bindings generator should provide a better error message when it does not find a dictionary definition
        https://bugs.webkit.org/show_bug.cgi?id=163377

        Reviewed by Ryosuke Niwa.

        The bindings generator should provide a better error message when it does
        not find a dictionary definition.

        * bindings/scripts/CodeGenerator.pm:
        (GetDictionaryByName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (assert):
        (GenerateDictionaryImplementationContent):
        (GenerateHeader):
        (GenerateDictionaryHeader):

2016-10-12  Chris Dumez  <cdumez@apple.com>

        Update WebKitMediaKeyMessageEvent / WebKitMediaKeyNeededEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163369

        Reviewed by Ryosuke Niwa.

        Update WebKitMediaKeyMessageEvent / WebKitMediaKeyNeededEvent to stop
        using legacy [ConstructorTemplate=Event] and use regular constructors
        instead.

        This also adds support for having dictionary members that are typed
        arrays because this was needed.

        Test: fast/events/webkit-media-key-events-constructor.html

        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        (WebCore::WebKitMediaKeyMessageEvent::WebKitMediaKeyMessageEvent):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.h:
        (WebCore::WebKitMediaKeyMessageEvent::create):
        (WebCore::WebKitMediaKeyMessageEvent::createForBindings): Deleted.
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        (WebCore::WebKitMediaKeyNeededEvent::WebKitMediaKeyNeededEvent):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.h:
        (WebCore::WebKitMediaKeyNeededEvent::create):
        (WebCore::WebKitMediaKeyNeededEvent::createForBindings): Deleted.
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl:
        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLInterface<JSC::GenericTypedArrayView<Adaptor>>>::convert):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h:
        * dom/InputEvent.idl:

2016-10-12  Chris Dumez  <cdumez@apple.com>

        Update HTMLSelectElement::recalcListItems() to ignore nested optgroup elements
        https://bugs.webkit.org/show_bug.cgi?id=163358

        Reviewed by Kent Tamura.

        Update HTMLSelectElement::recalcListItems() to ignore nested optgroup elements.
        As per the specification, we only want optgroup elements that are direct
        children of the select element. This also matches the behavior of Chrome.

        Test: fast/dom/HTMLSelectElement/nested-optgroup.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):

2016-10-12  Zalan Bujtas  <zalan@apple.com>

        RenderRubyRun should not mark child renderers dirty at the end of layout.
        https://bugs.webkit.org/show_bug.cgi?id=163359
        <rdar://problem/28711840>

        Reviewed by David Hyatt.

        The current layout logic does not support marking renderers dirty for subsequent layouts.
        Layout needs to exit with a clean tree.
        Should relayoutChild be insufficient, we could also mark the base/text dirty for the justified content.

        Test: fast/ruby/rubyrun-has-bad-child.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        (WebCore::RenderRubyRun::layoutBlock):
        * rendering/RenderRubyRun.h:

2016-10-12  Simon Fraser  <simon.fraser@apple.com>

        Crash when using megaplan.ru
        https://bugs.webkit.org/show_bug.cgi?id=163276
        rdar://problem/28446672

        Reviewed by Sam Weinig.

        Make sure we allocate enough space in the vector of CGPoints that we use for path building.

        Test: css3/masking/large-clip-path.html

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::polygonPathFromPoints):

2016-10-12  Alex Christensen  <achristensen@webkit.org>

        Fix out-of-bounds reading in URLParser when parsing improperly percent-encoded values
        https://bugs.webkit.org/show_bug.cgi?id=163376

        Reviewed by Saam Barati.

        Covered by new API tests, which used to crash under asan.

        * platform/URLParser.cpp:
        (WebCore::percentDecode):
        If you subtract 2 from size_t's smaller than 2, you're gonna have a bad time.

2016-10-12  Alex Christensen  <achristensen@webkit.org>

        Mail needs nonspecial URLs to keep case in host and not have slash after host
        https://bugs.webkit.org/show_bug.cgi?id=163373

        Reviewed by Saam Barati.
        
        Mail uses urls like scheme://HoSt which were not changed when canonicalized 
        before enabling the URLParser but now are canonicalized to scheme://host/
        I manually verified this fixes the issue.
        This should be reverted once Mail will accept modern canonicalized URLs.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parseHostAndPort):
        * platform/URLParser.h:
        If the application is mail and the scheme is nonspecial, don't make the host lower case and don't add a slash after the host.

2016-10-11  Dean Jackson  <dino@apple.com>

        Add preliminary support for extended colors to WebCore::Color
        https://bugs.webkit.org/show_bug.cgi?id=162878
        <rdar://problem/28596413>

        Reviewed by Darin Adler.

        Add an ExtendedColor class that will hold the data necessary
        for wider-than-sRGB (and more precise) colors. In order to
        avoid increasing the size of Color, implement a tagged
        pointer that is either referencing an ExtendedColor, or
        is a 64-bit number with the top 32-bits being the RGBA, and
        the bottom 2 bits indicating an invalid RGBA or a valid RGBA,
        plus the tag.

        Add copy constructors and operator= so that the new Color objects
        are correctly copied.

        There isn't yet a way to create an ExtendedColor. That's coming
        in a followup patch (and will require changes to the CSS parser).

        Covered by existing tests, and new API tests in Color.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * platform/graphics/Color.cpp: Update everything to use m_rgbaAndFlags
        instead of m_color + m_valid.
        (WebCore::Color::Color):
        (WebCore::Color::~Color):
        (WebCore::Color::operator=):
        (WebCore::Color::nameForRenderTreeAsText):
        (WebCore::Color::setNamedColor):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        (WebCore::Color::setValid):
        (WebCore::Color::setExtended):
        (WebCore::Color::isExtended):
        (WebCore::Color::asExtended):
        * platform/graphics/Color.h: Implement the tagged union.
        (WebCore::Color::Color):
        (WebCore::Color::isValid):
        (WebCore::Color::red):
        (WebCore::Color::green):
        (WebCore::Color::blue):
        (WebCore::Color::alpha):
        (WebCore::Color::rgb):
        (WebCore::Color::setRGB):
        (WebCore::operator==):

        * platform/graphics/ExtendedColor.cpp: New file. Holds floating point
        red, green, blue and alpha, plus a color space.
        (WebCore::ExtendedColor::create):
        (WebCore::ExtendedColor::~ExtendedColor):
        (WebCore::ExtendedColor::ref):
        (WebCore::ExtendedColor::deref):
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::red):
        (WebCore::ExtendedColor::green):
        (WebCore::ExtendedColor::blue):
        (WebCore::ExtendedColor::alpha):
        (WebCore::ExtendedColor::colorSpace):
        (WebCore::ExtendedColor::ExtendedColor):

        * platform/graphics/cg/ColorCG.cpp: Update the constructors for
        the platform specific color classes.
        (WebCore::Color::Color):
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::Color):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::Color):

        * rendering/RenderEmbeddedObject.cpp: Use NeverDestroyed.
        (WebCore::replacementTextRoundedRectPressedColor):
        (WebCore::replacementTextRoundedRectColor):
        (WebCore::replacementTextColor):
        (WebCore::unavailablePluginBorderColor):

        * rendering/RenderFrameSet.cpp: Ditto.
        (WebCore::borderStartEdgeColor):
        (WebCore::borderEndEdgeColor):
        (WebCore::borderFillColor):

        * rendering/RenderTableCell.cpp: This grows in size slightly
        because it can no longer pack bits.

2016-10-12  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Sliders: scrubber and volume
        https://bugs.webkit.org/show_bug.cgi?id=163328
        <rdar://problem/28733838>

        Reviewed by Dean Jackson.

        We add a new Slider class that provides a custom slider backed by an
        invisible <input type="range"> element and a fill underlay to provide
        a custom color between the left edge of the slider and the slider thumb.
        As the slider's value changes, a UI delegate receives messages to track
        such changes.

        Tests: media/modern-media-controls/scrubber/scrubber.html
               media/modern-media-controls/slider/slider-constructor.html
               media/modern-media-controls/slider/slider-fill.html
               media/modern-media-controls/slider/slider-styles.html
               media/modern-media-controls/volume-slider/volume-slider-value.html
               media/modern-media-controls/volume-slider/volume-slider.html

        * Modules/modern-media-controls/controls/scrubber.css: Added.
        (.scrubber.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/scrubber.js: Added.
        (Scrubber):
        * Modules/modern-media-controls/controls/slider.css: Added.
        (.slider):
        (.slider > input,):
        (.slider > .fill):
        (.slider > input):
        (.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/slider.js: Added.
        (Slider.prototype.get value):
        (Slider.prototype.set value):
        (Slider.prototype.get width):
        (Slider.prototype.set width):
        (Slider.prototype.handleEvent):
        (Slider.prototype.commitProperty):
        (Slider.prototype._handleInputEvent):
        (Slider.prototype._handleChangeEvent):
        (Slider.prototype._updateFill):
        * Modules/modern-media-controls/controls/volume-slider.css: Added.
        (.volume.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/volume-slider.js: Added.
        (VolumeSlider):

2016-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add experimental support for the "formatForeColor" inputType
        https://bugs.webkit.org/show_bug.cgi?id=163348
        <rdar://problem/28739334>

        Reviewed by Ryosuke Niwa.

        Adds support for the "formatForeColor" attribute. This patch introduces a simple hook in Editor.cpp to extract
        data for an input event from an EditingStyle when performing an editing action.

        Test: fast/events/input-events-forecolor-data.html

        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/Editor.cpp:
        (WebCore::inputEventDataForEditingStyleAndAction):

        Added a new static helper to compute the data attribute of an InputEvent when handling a style change.

        (WebCore::Editor::computeAndSetTypingStyle):

2016-10-12  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Generated bindings include the wrong header when ImplementedAs is used on a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=163352

        Reviewed by Ryosuke Niwa.

        Generated bindings include the wrong header when ImplementedAs is used
        on a dictionary.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryHeader):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterCaller):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        (WebCore::convertDictionary<TestStandaloneDictionary>): Deleted.
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/TestStandaloneDictionary.idl:

2016-10-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT][JSC] Explore the way to embed nodeType into JSC::JSType in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=163245

        Reviewed by Filip Pizlo.

        Node.nodeType accessor is so frequently called. For example, jQuery's $ function uses
        this to distinguish DOM objects from the other JS objects. So every time you call `$(dom)`,
        nodeType accessor is called. In addition to that, jQuery's prev, next, parent etc. also uses
        this `nodeType`. And Ember.js also uses it. And ... So this function is super critical for DOM
        performance.

        The challenge is that there is no room for putting NodeType into C++ Node class. Node class
        has a 32bit field to store some data. However, these bits are already exhausted. Extending
        Node class is unacceptable since it significantly enlarges memory consumption of WebKit (Node
        is everywhere!). Unfortunately, current Node::nodeType is implemented as a virtual function
        even though this function is frequently called from JS world.

        Interestingly, we already store some duplicate data in JSObject, JSC::JSType. WebCore already
        extends it with JSElementType, JSNodeType, and JSDocumentWrapperType. And these types are
        corresponding to specific NodeTypes. For example, JSElementType should have ELEMENT_NODE type.

        This patch further extends this JSC::JSType in WebCore side safely. We embed NodeType bits into
        JSC::JSType. This design offers significantly faster nodeType implementation. Furthermore, it
        makes DOMJIT easy for nodeType accessor.

        Even without the IC change[1], Dromaeo dom-query shows 8 - 10% improvement,
        1452.96 runs/s vs 1578.56 runs/s. We can expect that this improvement will be applied to the
        other benchmarks / real applications when the IC change is landed.

        [1]: https://bugs.webkit.org/show_bug.cgi?id=163226

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/JSNodeCustom.h:
        (WebCore::JSNode::nodeType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSTypeForNode):
        (GenerateHeader):
        * dom/Node.idl:
        * dom/NodeConstants.h: Copied from Source/JavaScriptCore/domjit/DOMJITGetterSetter.h.
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::createCallDOMForOffsetAccess):
        (WebCore::NodeFirstChildDOMJIT::callDOM):
        (WebCore::NodeLastChildDOMJIT::callDOM):
        (WebCore::NodeNextSiblingDOMJIT::callDOM):
        (WebCore::NodePreviousSiblingDOMJIT::callDOM):
        (WebCore::NodeParentNodeDOMJIT::callDOM):
        (WebCore::NodeNodeTypeDOMJIT::checkDOM):
        (WebCore::NodeNodeTypeDOMJIT::callDOM):

2016-10-12  Chris Dumez  <cdumez@apple.com>

        Update more events to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163339

        Reviewed by Ryosuke Niwa.

        Update more events to stop using legacy [ConstructorTemplate=Event]
        and use regular constructors instead.

        No new tests, updated existing tests.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::convertDictionary<TestEventConstructor::Init>):
        (WebCore::JSTestEventConstructorConstructor::construct):
        (WebCore::JSTestEventConstructorConstructor::prototypeForStructure):
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        (WebCore::JSTestEventConstructor::createPrototype):
        (WebCore::JSTestEventConstructorPrototype::create): Deleted.
        (WebCore::JSTestEventConstructorPrototype::createStructure): Deleted.
        (WebCore::JSTestEventConstructorPrototype::JSTestEventConstructorPrototype): Deleted.
        (WebCore::setJSTestEventConstructorConstructor): Deleted.
        (WebCore::JSTestEventConstructor::getConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::wrapped):
        (WebCore::JSTestEventConstructor::create): Deleted.
        (WebCore::toJS): Deleted.
        (WebCore::toJSNewlyCreated): Deleted.
        * bindings/scripts/test/TestEventConstructor.idl:
        * css/CSSFontFaceLoadEvent.cpp:
        (WebCore::CSSFontFaceLoadEvent::CSSFontFaceLoadEvent):
        * css/CSSFontFaceLoadEvent.h:
        * css/CSSFontFaceLoadEvent.idl:
        * html/canvas/WebGLContextEvent.cpp:
        (WebCore::WebGLContextEvent::WebGLContextEvent):
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLContextEvent.idl:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h:
        * storage/StorageEvent.idl:

2016-10-12  Andreas Kling  <akling@apple.com>

        Make Document::existingAXObjectCache() fast with accessibility disabled.
        <https://webkit.org/b/163347>

        Reviewed by Antti Koivisto.

        Instruments says we were spending 2.3% of Dromaeo/dom-modify.html in this function,
        traversing ancestors. Track whether we've ever had a cache, and use that knowledge
        to return early if possible.

        * dom/Document.cpp:
        (WebCore::Document::existingAXObjectCache):
        (WebCore::Document::axObjectCache):

2016-10-12  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        [SOUP] trunk r207192 fails to compile due to missing std::function being unavailable (missing #include <functional>)
        https://bugs.webkit.org/show_bug.cgi?id=163340

        Reviewed by Michael Catanzaro.

        * platform/network/soup/SoupNetworkSession.h: Add missing #include <functional>

2016-10-12  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Revise vertex array attribute checks to account for lazy memory allocation.
        https://bugs.webkit.org/show_bug.cgi?id=163149
        <rdar://problem/28629774>

        Reviewed by Dean Jackson.

        Tested by fast/canvas/webgl/webgl-drawarrays-crash-2.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes):

2016-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Now playing media sessions are always cleared for the active foreground tab
        https://bugs.webkit.org/show_bug.cgi?id=163310
        <rdar://problem/28573301>

        Reviewed by Jer Noble.

        Currently, we clear out Now Playing info whenever we set the visibility of Now Playing controls to Never. This
        is incorrect, as the Now Playing session needs to still be active (just not visible) in this state. Instead, we
        should not be taking the active/foregrounded-ness of a media session for Now Playing into account in
        MediaElementSession::canShowControlsManager so that even if a media session is in the active/foreground tab, we
        will update the Now Playing session with the latest info. However, when setting the visibility, we now check
        and see if the session allows Now Playing visibility, and set the Now Playing visibility to Always or Never
        depending on the answer.

        Tweaked existing unit tests in NowPlayingControlsTests.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager):
        (WebCore::MediaElementSession::allowsNowPlayingControlsVisibility):
        (WebCore::MediaElementSession::pageAllowsNowPlayingControls): Deleted.
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::allowsNowPlayingControlsVisibility):
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

2016-10-12  Zalan Bujtas  <zalan@apple.com>

        Refactor LineLayoutState's float box handling.
        https://bugs.webkit.org/show_bug.cgi?id=163286

        Reviewed by David Hyatt.
        
        We keep track of float boxes both per line (RootInlineBox::m_floats) and
        per flow block (LineLayoutState::m_floats) during layout.
        As we lay out the lines and iterate through RootInlineBox::m_floats, we
        increment LineLayoutState::m_floatIndex. This LineLayoutState::m_floatIndex is
        later used to find the matching float box in the per-block-flow float list.
        This logic works fine as long as the lists and the index manipulation are tightly coded.
        However due to the complexity of the line/float layout code, this is no longer the case.

        This patch makes float box handling more secure by changing this index based setup
        to a list iterator. It helps to eliminate potential vector overflow issues.

        LineLayoutState::FloatList (new class) keeps track of all the floats for the block flow.
        It groups the float box related functions/members and provides an iterator interface to ensure safer
        syncing between this and the line based floats.

        No change in functionality.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendFloatingObjectToLastLine):
        (WebCore::repaintDirtyFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::checkFloatInCleanLine):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::determineEndPosition):
        (WebCore::RenderBlockFlow::repaintDirtyFloats): Deleted.
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine): Deleted.
        * rendering/line/LineLayoutState.h:
        (WebCore::FloatWithRect::create):
        (WebCore::FloatWithRect::renderer):
        (WebCore::FloatWithRect::rect):
        (WebCore::FloatWithRect::everHadLayout):
        (WebCore::FloatWithRect::adjustRect):
        (WebCore::FloatWithRect::FloatWithRect):
        (WebCore::LineLayoutState::FloatList::append):
        (WebCore::LineLayoutState::FloatList::setLastFloat):
        (WebCore::LineLayoutState::FloatList::lastFloat):
        (WebCore::LineLayoutState::FloatList::setLastCleanFloat):
        (WebCore::LineLayoutState::FloatList::lastCleanFloat):
        (WebCore::LineLayoutState::FloatList::floatWithRect):
        (WebCore::LineLayoutState::FloatList::begin):
        (WebCore::LineLayoutState::FloatList::end):
        (WebCore::LineLayoutState::FloatList::find):
        (WebCore::LineLayoutState::FloatList::isEmpty):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::floatList):
        (WebCore::LineLayoutState::lastFloat): Deleted.
        (WebCore::LineLayoutState::setLastFloat): Deleted.
        (WebCore::LineLayoutState::floats): Deleted.
        (WebCore::LineLayoutState::floatIndex): Deleted.
        (WebCore::LineLayoutState::setFloatIndex): Deleted.

2016-10-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, fix Windows build break after r207182.

        * platform/graphics/cg/ImageDecoderCG.cpp:

2016-10-12  Chris Dumez  <cdumez@apple.com>

        Update remaining DOM events to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163319

        Reviewed by Darin Adler.

        Update remaining DOM events to stop using legacy [ConstructorTemplate=Event]
        and use regular constructors instead.

        No new tests, updated existing tests.

        * dom/AutocompleteErrorEvent.h:
        * dom/AutocompleteErrorEvent.idl:
        * dom/BeforeLoadEvent.h:
        * dom/BeforeLoadEvent.idl:
        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::CompositionEvent):
        * dom/CompositionEvent.h:
        * dom/CompositionEvent.idl:
        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::ErrorEvent):
        * dom/ErrorEvent.h:
        * dom/ErrorEvent.idl:
        * dom/FocusEvent.cpp:
        (WebCore::FocusEvent::FocusEvent):
        * dom/FocusEvent.h:
        * dom/FocusEvent.idl:
        * dom/HashChangeEvent.h:
        * dom/HashChangeEvent.idl:
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::OverflowEvent):
        * dom/OverflowEvent.h:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.cpp:
        (WebCore::PageTransitionEvent::PageTransitionEvent):
        * dom/PageTransitionEvent.h:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent):
        (WebCore::PopStateEvent::create):
        * dom/PopStateEvent.h:
        * dom/PopStateEvent.idl:
        * dom/SecurityPolicyViolationEvent.h:
        * dom/SecurityPolicyViolationEvent.idl:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        * dom/TouchEvent.h:
        * dom/TouchEvent.idl:
        * dom/TransitionEvent.cpp:
        (WebCore::TransitionEvent::TransitionEvent):
        * dom/TransitionEvent.h:
        * dom/TransitionEvent.idl:
        * dom/WebKitAnimationEvent.cpp:
        (WebCore::WebKitAnimationEvent::WebKitAnimationEvent):
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEvent::WebKitTransitionEvent):
        * dom/WebKitTransitionEvent.h:
        * dom/WebKitTransitionEvent.idl:

2016-10-12  Chris Dumez  <cdumez@apple.com>

        Stop using PassRefPtr in platform/efl
        https://bugs.webkit.org/show_bug.cgi?id=163321

        Reviewed by Laszlo Gombos.

        Stop using PassRefPtr in platform/efl.

        * platform/efl/BatteryProviderEfl.cpp:
        (WebCore::batteryProperties):
        (WebCore::BatteryProviderEfl::setBatteryStatus):
        (WebCore::BatteryProviderEfl::dispatchEvent):
        * platform/efl/BatteryProviderEfl.h:
        * platform/efl/BatteryProviderEflClient.h:
        * platform/efl/PlatformSpeechSynthesisProviderEfl.cpp:
        (WebCore::PlatformSpeechSynthesisProviderEfl::voiceName):
        (WebCore::PlatformSpeechSynthesisProviderEfl::speak):
        * platform/efl/PlatformSpeechSynthesisProviderEfl.h:

2016-10-12  Youenn Fablet  <youenn@apple.com>

        Attribute setter binding generated code should use more references
        https://bugs.webkit.org/show_bug.cgi?id=163275

        Reviewed by Alex Christensen.

        No change of behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2016-10-11  Youenn Fablet  <youenn@apple.com>

        Refactor binding generated casted-this checks for methods
        https://bugs.webkit.org/show_bug.cgi?id=163198

        Reviewed by Darin Adler.

        Covered by existing tests and binding rebased tests..

        Introducing BindingCaller::callMethod and callPromiseMethod to encapsulate casted-this checks for methods.
        This is supported for all methods except seralizer and iterators methods.

        Introduced castForMethod similarly to castForAttribute.
        Moved this from static methods of JSClass to static methods of BindingCaller<JSClass>
        This allows removing the corresponding declarations from JSClass header file.

        Note the difference of handling thisValue between the two in case of CustomProxyToJSObject.
        This should be made more consistent.

        In case of bad casted this check, CustomProxyToJSObject objects will throw a TypeError with an error message like other methods.
        Before the patch, a TypeError without error message was thrown.

        EventTarget being different, added a specialization of BindingCaller for it.
        This allows also removing some binding generated code dedicated to EventTarget.
        A similar approach might also be done for CustomProxyToJSObject objects to further simplify the binding generator.


        * bindings/js/JSDOMBinding.cpp:
        (WebCore::rejectPromiseWithThisTypeError):
        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::callPromiseMethod):
        (WebCore::BindingCaller::callMethod):
        * bindings/js/JSEventTargetCustom.h:
        (WebCore::BindingCaller<JSEventTarget>::callMethod):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateFunctionCastedThis): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * 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/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2016-10-11  Youenn Fablet  <youenn@apple.com>

        MediaResourceLoader::requestResource should take a ResourceRequest&& as input
        https://bugs.webkit.org/show_bug.cgi?id=160397

        Reviewed by Alex Christensen.

        No change in behavior.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource): Passing a ResourceRequest&& as input parameter.
        * loader/MediaResourceLoader.h:
        * platform/graphics/PlatformMediaResourceLoader.h: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart): Creating an extra copy since MediaResourceLoader::requestResource expects a Resourcerequest&&.

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update AnimationEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163312

        Reviewed by Ryosuke Niwa.

        Update AnimationEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor as in the specification:
        - https://drafts.csswg.org/css-animations/#interface-animationevent

        * dom/AnimationEvent.cpp:
        (WebCore::AnimationEvent::AnimationEvent):
        * dom/AnimationEvent.h:
        * dom/AnimationEvent.idl:

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update DeviceProximityEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163311

        Reviewed by Ryosuke Niwa.

        Update DeviceProximityEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor instead, as in the specification:
        - https://www.w3.org/TR/2015/WD-proximity-20150903/#deviceproximityevent-interface

        * Modules/proximity/DeviceProximityEvent.cpp:
        (WebCore::DeviceProximityEvent::DeviceProximityEvent):
        * Modules/proximity/DeviceProximityEvent.h:
        (WebCore::DeviceProximityEvent::create):
        (WebCore::DeviceProximityEventInit::DeviceProximityEventInit): Deleted.
        * Modules/proximity/DeviceProximityEvent.idl:

2016-10-11  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, EFL build fix because of r207173.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::forcedPrefersReducedMotionValue):

2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Add the option to immediately decode an image frame and control its memory caching
        https://bugs.webkit.org/show_bug.cgi?id=163298

        Reviewed by Simon Fraser.

        This patch fixes two things. (1) An option is added to immediately decode an
        image frame. This can be done by adding kCGImageSourceShouldCacheImmediately
        to the ImageSource options dictionary. (2) BitmapImage should also control
        when the image frame is actually deleted from memory. This can be done by
        calling CGImageSourceCreateThumbnailAtIndex(). CG does not keep a reference
        to the returned CGImageRef.

        * platform/graphics/ImageFrame.h: Adding the DecodingMode enum class.
        Ideally this should be a member of ImageDecoder class. But since we
        have three header files for ImageDecoder, this can be added here till
        the three files combined in one header file.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setRenderTarget): Deleted.
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setRenderTarget):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::setRenderTarget): Deleted.
        Unrelated change. The native image decoder is available from the ImageSource.
        ImageSource::setTarget() does not need not to get it through ImageFrameCache.
        
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::createImageSourceOptions): Clean this function by using CFMutableDictionary.
        (WebCore::imageSourceOptions): Cache two default ImageSource options and create new
        ones for the non default cases.

        (WebCore::ImageDecoder::createFrameImageAtIndex): Use the appropriate ImageSource function

        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ImageDecoder.h:
         Change functions' signature to include a DecodingMode argument.

2016-10-11  Chris Dumez  <cdumez@apple.com>

        select.options may return too many option elements
        https://bugs.webkit.org/show_bug.cgi?id=163296

        Reviewed by Ryosuke Niwa.

        select.options may return too many option elements. We're only supposed
        to return the option element children of the select element, and the
        option element children of all the optgroup element children of the
        select element, in tree order:
        - https://html.spec.whatwg.org/#dom-select-options
        - https://html.spec.whatwg.org/#concept-select-option-list

        Firefox and Chrome agrees with the specification. However, WebKit was
        returning all the option elements that are descendants of the select
        element.

        Test: imported/w3c/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/htmloptionscollection.html

        * html/HTMLOptionsCollection.h:

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Fix assertion when creating first WebCore::URL from non-main thread after r207162
        https://bugs.webkit.org/show_bug.cgi?id=163304

        Reviewed by Filip Pizlo.

        This fixes assertions when running UserContentWorld.NormalWorld API tests.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::atomicCanonicalTextEncodingName):
        The new URLParser requires a TextEncoding& in its constructor, which defaults to UTF8Encoding.
        When creating the first TextEncoding in a process, it calls buildBaseTextCodecMaps which asserts
        it's on the main thread because it initializes static variables.  Since we are getting a lock right 
        after this call anyway, just put this function call inside the lock.

2016-10-11  Dean Jackson  <dino@apple.com>

        color-gamut media query shouldn't ASSERT on invalid values
        https://bugs.webkit.org/show_bug.cgi?id=163303
        <rdar://problem/28724566>

        Reviewed by Simon Fraser.

        Remove the ASSERT_NOT_REACHED in the evaluation, since it
        can be hit when there is a valid CSS keyword that is not
        expected in the query.

        Updated fast/media/mq-color-gamut.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::colorGamutEvaluate):

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update MediaStream events to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163289

        Reviewed by Sam Weinig.

        Update MediaStream events to stop using legacy [ConstructorTemplate=Event]
        and use regular constructors instead.

        * Modules/mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEvent::create):
        (WebCore::MediaStreamEvent::MediaStreamEvent):
        * Modules/mediastream/MediaStreamEvent.h:
        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        (WebCore::MediaStreamTrackEvent::create):
        (WebCore::MediaStreamTrackEvent::MediaStreamTrackEvent):
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/OverconstrainedErrorEvent.h:
        (WebCore::OverconstrainedErrorEvent::create):
        (WebCore::OverconstrainedErrorEvent::OverconstrainedErrorEvent):
        (WebCore::OverconstrainedErrorEvent::~OverconstrainedErrorEvent): Deleted.
        * Modules/mediastream/OverconstrainedErrorEvent.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):
        (WebCore::RTCDTMFToneChangeEvent::RTCDTMFToneChangeEvent):
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCTrackEvent.cpp:
        (WebCore::RTCTrackEvent::create):
        (WebCore::RTCTrackEvent::RTCTrackEvent):
        * Modules/mediastream/RTCTrackEvent.h:
        * Modules/mediastream/RTCTrackEvent.idl:

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update UIRequestEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163288

        Reviewed by Darin Adler.

        Update UIRequestEvent to stop using legacy [ConstructorTemplate=Event]
        and use a constructor as in the specification:
        - https://dvcs.w3.org/hg/IndieUI/raw-file/default/src/indie-ui-events.html#UIRequestEvent

        * Modules/indieui/UIRequestEvent.cpp:
        (WebCore::UIRequestEvent::create):
        (WebCore::UIRequestEvent::UIRequestEvent):
        (WebCore::UIRequestEvent::createForBindings): Deleted.
        * Modules/indieui/UIRequestEvent.h:
        * Modules/indieui/UIRequestEvent.idl:

2016-10-11  Dean Jackson  <dino@apple.com>

        Implement prefers-reduced-motion media query
        https://bugs.webkit.org/show_bug.cgi?id=163250
        <rdar://problem/28704129>

        Reviewed by Simon Fraser.

        Implement the prefers-reduced-motion media query, as
        described in https://github.com/w3c/csswg-drafts/issues/442.

        Tests: fast/media/mq-prefers-reduced-motion-forced-value.html
               fast/media/mq-prefers-reduced-motion.html

        * Configurations/WebCoreTestSupport.xcconfig: Link against AppKit and UIKit.

        * css/CSSValueKeywords.in: New keyword for "reduce".

        * css/MediaFeatureNames.h: Add prefers-reduced-motion.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersReducedMotionEvaluate):
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):

        * platform/Theme.h: New API to detect the system accessibility settings.
        (WebCore::Theme::userPrefersReducedMotion):
        * platform/ios/ThemeIOS.h:
        * platform/ios/ThemeIOS.mm:
        (WebCore::ThemeIOS::userPrefersReducedMotion):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::userPrefersReducedMotion):

        * testing/Internals.cpp: Expose the same API to internals, so that
        a test can examine the value too.
        (WebCore::Internals::userPrefersReducedMotion):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm:
        (WebCore::Internals::userPrefersReducedMotion):

        * page/Settings.h: New setting to override the system value...
        * page/Settings.in:

        * testing/InternalSettings.cpp: ... plumbed through internals.
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::forcedPrefersReducedMotionValue):
        (WebCore::InternalSettings::setForcedPrefersReducedMotionValue):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::userPrefersReducedMotion):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm:
        (WebCore::Internals::userPrefersReducedMotion):


2016-10-10  Ryosuke Niwa  <rniwa@webkit.org>

        Annotate DOM API with CEReactions
        https://bugs.webkit.org/show_bug.cgi?id=163268

        Reviewed by Darin Adler.

        Added CEReactions IDL attribute to APIs defined in https://dom.spec.whatwg.org.

        No new tests since existing tests cover the code change.
        Added a dedicated code generation test: JSTestCEReactions.idl and TestCEReactionsStringifier.idl.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Generate CustomElementReactionStack in attribute setters. In the case of PutForwards,
        check the extended attributes of the target attribute's stringifier.
        * bindings/scripts/test/JS/JSTestCEReactions.cpp: Added.
        * bindings/scripts/test/JS/JSTestCEReactions.h: Added.
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h: Added.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithNeedsCustomElementReactionStack): Deleted.
        * bindings/scripts/test/TestCEReactions.idl: Added.
        * bindings/scripts/test/TestCEReactionsStringifier.idl: Added.
        * bindings/scripts/test/TestObj.idl:
        * dom/Attr.idl:
        * dom/ChildNode.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/ParentNode.idl:
        * dom/Range.idl:
        * html/DOMTokenList.idl:

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update CloseEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163293

        Reviewed by Darin Adler.

        Update CloseEvent to stop using legacy [ConstructorTemplate=Event] and
        use a regular constructor as in the specification:
        - https://html.spec.whatwg.org/multipage/comms.html#the-closeevent-interfaces

        No new tests, updated existing test.

        * Modules/websockets/CloseEvent.h:
        (WebCore::CloseEvent::create):
        (WebCore::CloseEvent::CloseEvent):
        * Modules/websockets/CloseEvent.idl:

2016-10-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] DOMJIT::Patchpoint should have a way to receive constant folded arguments
        https://bugs.webkit.org/show_bug.cgi?id=163224

        Reviewed by Filip Pizlo.

        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJITHelpers::toWrapper):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::createCallDOMForOffsetAccess):

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Enable URLParser by default
        https://bugs.webkit.org/show_bug.cgi?id=162660
        <rdar://28601706>

        Reviewed by Sam Weinig.

        Covered by updates to many LayoutTests.

        * platform/URLParser.cpp:
        Make the default value true for URLParser::enabled.
        This is the most impactful and well-documented one-line change I've ever written.

2016-10-11  Daniel Bates  <dabates@apple.com>

        [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps
        https://bugs.webkit.org/show_bug.cgi?id=163244
        <rdar://problem/27250015>

        Reviewed by Jer Noble.

        Adds a new setting to toggle requiring a user gesture to load a video (enabled by default).
        Disable this setting for apps built against iOS 9 or earlier.

        Tests: media/loadedmetadata-fires-without-user-gesture-when-setRequiresUserGestureToLoadVideo-false.html
               media/require-user-gesture-to-load-video.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Only require a user gesture to load a video
        when Settings::requiresUserGestureToLoadVideo() is true.
        * page/Settings.cpp: Enable setting requiresUserGestureToLoadVideo by default.
        * page/Settings.in: Add setting, requiresUserGestureToLoadVideo.

2016-10-11  Sam Weinig  <sam@webkit.org>

        Fix the iOS build.

        * bindings/js/JSDOMConvert.h:

2016-10-11  Daniel Bates  <dabates@apple.com>

        [iOS] Sandbox QuickLook previews
        https://bugs.webkit.org/show_bug.cgi?id=163240
        <rdar://problem/25961633>

        Fix bad merge following r207151.

        * platform/network/cf/ResourceResponse.h: Define m_isQuickLook.

2016-10-11  Daniel Bates  <dabates@apple.com>

        [iOS] Sandbox QuickLook previews
        https://bugs.webkit.org/show_bug.cgi?id=163240
        <rdar://problem/25961633>

        Reviewed by Brent Fulgham.

        Use a unique origin for- and limit the capabilities of- QuickLook previews.

        Tests: http/tests/quicklook/at-import-stylesheet-blocked.html
               http/tests/quicklook/base-url-blocked.html
               http/tests/quicklook/cross-origin-iframe-blocked.html
               http/tests/quicklook/csp-header-ignored.html
               http/tests/quicklook/document-domain-is-empty-string.html
               http/tests/quicklook/external-stylesheet-blocked.html
               http/tests/quicklook/hide-referer-on-navigation.html
               http/tests/quicklook/submit-form-blocked.html
               http/tests/quicklook/top-navigation-blocked.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Call ContentSecurityPolicy::didReceiveHeader().
        (WebCore::Document::processReferrerPolicy): Do not process referrer policy for QuickLook previews.
        (WebCore::Document::initSecurityContext): Apply sandbox for QuickLook previews.
        (WebCore::Document::shouldEnforceQuickLookSandbox): Added.
        (WebCore::Document::applyQuickLookSandbox): Added.
        * dom/Document.h:
        * page/csp/ContentSecurityPolicy.h: Change accessibility of didReceiveHeader() from private to public.
        (WebCore::ContentSecurityPolicy::processHTTPEquiv): Deleted.
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::isQuickLook): Added.
        (WebCore::ResourceResponse::setIsQuickLook): Added.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse): Modified to mark
        resource response as a QuickLook preview, if appropriate. Also remove the name of the first argument
        and the need to use UNUSED_PARAM(connection) as we no longer make use of the first argument
        following r207151.
        * platform/network/ios/QuickLook.mm:
        (-[WebResourceLoaderQuickLookDelegate _sendDidReceiveResponseIfNecessary]): Ditto.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Ditto. Fix style nits,
        including renaming the function argument "r" to "resource" to better describe its purpose.

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Fix bindings tests after r207150.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        URLParser should percent-encode non-ASCII and non-printable characters in fragment
        https://bugs.webkit.org/show_bug.cgi?id=163287

        Reviewed by Brady Eidson.

        Based on discussion in https://github.com/whatwg/url/issues/150
        If that discussion decides to keep the spec as-is (which keeps non-ASCII characters in the fragment
        to match IE and Edge's behavior, which Chrome has followed for special schemes) then we can revert
        this change later after enabling the URL parser.  Making this change keeps behavior matching Safari
        and Firefox, as well as Chrome's handling of non-special schemes, such as data URLs.

        Covered by updated API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::appendToASCIIBuffer):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::syntaxViolation):
        (WebCore::URLParser::currentPosition):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::fragmentSyntaxViolation): Deleted.
        * platform/URLParser.h:
        No more non-ASCII characters in canonicalized URLs.

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Remove dead networking code
        https://bugs.webkit.org/show_bug.cgi?id=163263

        Reviewed by Daniel Bates.

        There are no more Cocoa platforms using CFURLConnection.
        USE(CFNETWORK) is being replaced by USE(CFURLCONNECTION) and it is only used on the AppleWin port.

        No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCorePrefix.h:
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        (WebCore::SubresourceLoader::willCacheResponse): Deleted.
        * loader/mac/DocumentLoaderMac.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse): Deleted.
        * 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.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ProtectionSpaceBase.cpp:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::createCF):
        (WebCore::core):
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        (WebCore::CredentialStorage::saveToPersistentStorage): Deleted.
        * platform/network/cf/LoaderRunLoopCF.cpp:
        * platform/network/cf/LoaderRunLoopCF.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStorage):
        * platform/network/cf/ProtectionSpaceCFNet.cpp:
        * platform/network/cf/ProtectionSpaceCFNet.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::shouldSniffConnectionProperty):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::schedule): Deleted.
        (WebCore::ResourceHandle::unschedule): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::encodingRequiresPlatformData):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setStorageSession):
        (WebCore::findCFURLRequestSetContentDispositionEncodingFallbackArrayFunction): Deleted.
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        (WebCore::ResourceResponse::platformCertificateInfo):
        * platform/network/cf/SynchronousLoaderClientCFNet.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling):
        (WebCore::adjustMIMETypeIfNecessary):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cocoa/CredentialCocoa.h:
        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::Credential::Credential): Deleted.
        (WebCore::Credential::cfCredential): Deleted.
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::ProtectionSpace::ProtectionSpace): Deleted.
        (WebCore::ProtectionSpace::cfSpace): Deleted.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::nsURLRequest):
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo):
        (WebCore::ResourceResponse::nsURLResponse): Deleted.
        (WebCore::ResourceResponse::ResourceResponse): Deleted.
        * platform/network/ios/QuickLook.h:
        * platform/network/ios/QuickLook.mm:
        (-[WebQuickLookHandleAsDelegate initWithConnectionDelegate:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didReceiveDataArray:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didReceiveData:lengthReceived:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connectionDidFinishLoading:]): Deleted.
        (-[WebQuickLookHandleAsDelegate connection:didFailWithError:]): Deleted.
        (-[WebQuickLookHandleAsDelegate detachHandle]): Deleted.
        (WebCore::QuickLookHandle::create): Deleted.
        (WebCore::QuickLookHandle::cfResponse): Deleted.
        * platform/network/ios/ResourceHandleIOS.mm: Removed.
        * platform/network/ios/ResourceRequestIOS.mm: Removed.
        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender setCFChallenge:]): Deleted.
        (-[WebCoreAuthenticationClientAsChallengeSender cfChallenge]): Deleted.
        (WebCore::core): Deleted.
        (WebCore::mac): Deleted.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookieStorage):
        (WebCore::addCookie):
        * platform/network/mac/CredentialStorageMac.mm:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceErrorMac.mm:
        (NSErrorFromCFError): Deleted.
        (WebCore::ResourceError::ResourceError): Deleted.
        (WebCore::ResourceError::nsError): Deleted.
        (WebCore::ResourceError::operator NSError *): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::continueWillCacheResponse):
        (WebCore::ResourceHandle::getConnectionTimingData): Deleted.
        * platform/network/mac/ResourceRequestMac.mm: Removed.
        * platform/network/mac/SynchronousLoaderClient.mm:
        (WebCore::SynchronousLoaderClient::platformBadResponseError):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        * platform/win/TemporaryLinkStubs.cpp:
        * testing/js/WebCoreTestSupportPrefix.h:

2016-10-10  Sam Weinig  <sam@webkit.org>

        Use IDLTypes in more places
        https://bugs.webkit.org/show_bug.cgi?id=163247

        Reviewed by Darin Adler.

        Switch JS -> Native type conversions to use convert<IDLType>(...) rather
        than convert<NativeType>(...). This allows us to differentiate things like
        conversion from JSValue to DOMString vs. JSValue to USVString which have different
        rules.

        * bindings/generic/IDLTypes.h:
        Add predicate for integer types.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyPathFromValue):
        * bindings/js/JSApplePaySessionCustom.cpp:
        (WebCore::JSApplePaySession::completeShippingMethodSelection):
        (WebCore::JSApplePaySession::completeShippingContactSelection):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams):
        (WebCore::createRsaKeyGenParams):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::getCSSCanvasContext):
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::setDecisionPoint):
        (WebCore::toDecision):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        Switch to new convert<IDLType> style.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray): Deleted.
        (WebCore::toNativeArray): Deleted.
        These can now be called as convert<IDLSequence<IDLInterface<T>>> and convert<IDLType> respectively.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLNullable<T>>::convert):
        (WebCore::Converter<IDLBoolean>::convert):
        (WebCore::Converter<IDLInterface<T>>::convert):
        (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):
        (WebCore::Converter<IDLFloat>::convert):
        (WebCore::Converter<IDLUnrestrictedFloat>::convert):
        (WebCore::Converter<IDLDouble>::convert):
        (WebCore::Converter<IDLUnrestrictedDouble>::convert):
        (WebCore::Converter<IDLDOMString>::convert):
        (WebCore::Converter<IDLUSVString>::convert):
        (WebCore::Detail::ArrayConverter::convert):
        (WebCore::Converter<IDLSequence<T>>::convert):
        (WebCore::Converter<IDLFrozenArray<T>>::convert):
        (WebCore::Converter<IDLDictionary<T>>::convert):
        (WebCore::Converter<IDLEnumeration<T>>::convert):
        (WebCore::Detail::VariadicConverterBase::convert):
        (WebCore::Detail::VariadicConverterBase<IDLInterface<T>>::convert):
        (WebCore::convertVariadicArguments):
        (WebCore::convertWrapperType): Deleted.
        (WebCore::convertWrapperTypeSequence): Deleted.
        (WebCore::Converter<bool>::convert): Deleted.
        (WebCore::Converter<String>::convert): Deleted.
        (WebCore::Converter<Vector<T>>::convert): Deleted.
        (WebCore::Converter<int8_t>::convert): Deleted.
        (WebCore::Converter<uint8_t>::convert): Deleted.
        (WebCore::Converter<int16_t>::convert): Deleted.
        (WebCore::Converter<uint16_t>::convert): Deleted.
        (WebCore::Converter<int32_t>::convert): Deleted.
        (WebCore::Converter<uint32_t>::convert): Deleted.
        (WebCore::Converter<int64_t>::convert): Deleted.
        (WebCore::Converter<uint64_t>::convert): Deleted.
        Switch Converter to be specialized on IDLTypes. Add support for IDLNullable, IDLSequence, and IDLFrozenArray.

        * bindings/scripts/CodeGenerator.pm:
        (GetFlattenedMemberTypes): Deleted.
        (GetNumberOfNullableMemberTypes): Deleted.
        (GetIDLUnionMemberTypes): Deleted.
        (GetBaseIDLType): Deleted.
        (GetIDLType): Deleted.
        Move IDLType conversion logic to CodeGeneratorJS so it can use GetEnumerationClassName and GetDictionaryClassName.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToImplIncludesForIDLType):
        Add support for sequences, FrozenArrays and external dictionaries.

        (GenerateEnumerationsImplementationContent):
        (GenerateEnumerationsHeaderContent):
        Change the name of parse<enum> and convert<enum> to parseEnumeration<enum> and convertEnumeration<enum>
        to make them more consistent with dictionary conversion specialization and not interfere with the convert
        function specialization.

        (GenerateDictionaryImplementationContent):
        Simplify by using convert<IDLType>.

        (GetFlattenedMemberTypes):
        (GetNumberOfNullableMemberTypes):
        (GetIDLUnionMemberTypes):
        (GetBaseIDLType):
        (GetIDLType):
        Moved from CodeGenerator.pm

        (IsHandledByDOMConvert):
        (JSValueToNative):
        Start switching JSValueToNative over to using convert<IDLType>. Use IsHandledByDOMConvert as a predicate
        for what is supported.

        * bindings/scripts/IDLParser.pm:
        (applyTypedefs):
        (cloneType):
        (applyTypedefsForSignature):
        (parseTypedef):
        (parseOperationOrIterator):
        (parseSpecialOperation):
        Make typedefs work with aggregate types (unions, sequences and FrozenArrays).

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results.

        * bindings/scripts/test/TestTypedefs.idl:
        Add additional tests for typedefs that use unions and sequences.

        * testing/InternalSettings.idl:
        Change the name of a parameter to avoid a name collision.

2016-10-11  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed compilation with !ENABLE(SVG_FONTS)
        https://bugs.webkit.org/show_bug.cgi?id=163281

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):

2016-10-11  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r207140.

        * PlatformAppleWin.cmake: Add missing compile file.

2016-10-10  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add initial Pattern handling implementation
        https://bugs.webkit.org/show_bug.cgi?id=163270

        Reviewed by Simon Fraser.

        Provide an implemenation of Patterns for Direct2D.

        No new tests. Covered by fast/borders/border-image-01.html and others.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Pattern.h: Add D2D definitions.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::solidStrokeBrush): Use a more generic return type.
        (WebCore::GraphicsContext::solidFillBrush): Ditto.
        (WebCore::GraphicsContext::patternStrokeBrush): Added.
        (WebCore::GraphicsContext::patternFillBrush): Added.
        (WebCore::GraphicsContext::drawPattern): Provide D2D implementation.
        (WebCore::GraphicsContext::applyStrokePattern): Ditto.
        (WebCore::GraphicsContext::applyFillPattern): Ditto.
        (WebCore::GraphicsContext::drawPath): Use stroke pattern if available.
        (WebCore::GraphicsContext::fillPath): Use fill pattern if available.
        (WebCore::GraphicsContext::strokePath): Use stroke pattern if available.
        (WebCore::GraphicsContext::fillRect): Use fill pattern if available.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/PatternDirect2D.cpp: Added.

2016-10-11  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=163272

        Reviewed by Brent Fulgham.

        When compiling with older SDKs, some CoreText symbols are redefined.
        This patch checks if the relevant CoreText header file has been
        included before defining the symbol.

        * platform/spi/win/CoreTextSPIWin.h:

2016-10-11  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Buttons container
        https://bugs.webkit.org/show_bug.cgi?id=163238
        <rdar://problem/28701864>

        Reviewed by Dean Jackson.

        We add a new ButtonsContainer class which contains a group of Button objects
        and positions them based on the provided padding and margin between buttons.
        Buttons that aren't enabled or marked as dropped are not added to the tree of
        LayoutNodes, and thus the DOM.

        Additionally, we fix a few issues we found while working on tests for ButtonsContainer
        where LayoutNodes would schedule layout callbacks even when they would not do any work
        during the layout callback due to not resetting the `needsLayout` flag to false and
        removing any scheduled tasks when a layout was completed.

        Finally, we fix a few style issues that had not been caught so far and an unused
        `size` property on IconButton.

        Tests: media/modern-media-controls/buttons-container/buttons-container-buttons-property.html
               media/modern-media-controls/buttons-container/buttons-container-constructor.html
               media/modern-media-controls/buttons-container/buttons-container-layout.html

        * Modules/modern-media-controls/controls/airplay-button.js:
        (AirplayButton.prototype.set on):
        (AirplayButton):
        * Modules/modern-media-controls/controls/buttons-container.css:
        (.buttons-container):
        * Modules/modern-media-controls/controls/buttons-container.js:
        (ButtonsContainer.prototype.get buttons):
        (ButtonsContainer.prototype.set buttons):
        (ButtonsContainer.prototype.layout):
        * Modules/modern-media-controls/controls/icon-button.js:
        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.set needsLayout):
        (LayoutNode.prototype.markDirtyProperty):
        (LayoutNode.prototype._markNodeManipulation):
        (LayoutNode.prototype._updateDirtyState):
        (performScheduledLayout):
        (elementFromString):
        * Modules/modern-media-controls/controls/scheduler.js:
        (const.scheduler.new.prototype.unscheduleLayout):

2016-10-11  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Support Request cache mode
        https://bugs.webkit.org/show_bug.cgi?id=162281

        Reviewed by Alex Christensen.

        Covered by updated test.

        Added support for only-if-cached mode at Request level.

        Added support for cache mode at CachedResourceLoader, by setting HTTP headers and ResourceRequest cache policy
        based on https://fetch.spec.whatwg.org/#concept-request-cache-mode and https://fetch.spec.whatwg.org/#http-network-or-cache-fetch.

        Disabled default cache policy computation (done in FrameLoader) when cache mode is different from the default.
        Activated no-store cache mode for EventSource as per https://html.spec.whatwg.org/#the-eventsource-interface.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setCache): Adding support for only-if-cached.
        (WebCore::buildOptions): Throw if only-if-cached and fetch mode is not same-origin.
        * loader/FetchOptions.h: Adding support for only-if-cached.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultRequestCachingPolicy): Introduced to ease readability.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Updating cache policy only if request has the default cache policy.
        This allows bypassing the default behavior for fetch cache mode different from "default".
        * loader/FrameLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::updateRequestAccordingCacheMode): Introduced to set headers and request cache policy according fetch cache mode.
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Ensure bypassing the memory cache in no-store and reload cases.
        We reload in case of cache mode=reload to refresh the meory cache entry.
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::setCacheModeToNoStore):
        * page/EventSource.cpp:
        (WebCore::EventSource::connect): Use no-store cache mode as per https://html.spec.whatwg.org/#the-eventsource-interface.
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::addIfNotPresent): Helper routine.
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPHeaderValues.cpp:
        * platform/network/HTTPHeaderValues.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderFieldIfNotPresent):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::hasHTTPHeaderField):
        * platform/network/ResourceRequestBase.h:

2016-10-10  Antti Koivisto  <antti@apple.com>

        Stop copying author shadow pseudo rules into shadow tree style resolver
        https://bugs.webkit.org/show_bug.cgi?id=163232

        Reviewed by Darin Adler.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):

            If we are resolving a user agent shadow tree also look up pseudo element rules from the host scope author sheet.
            This is needed to keep web exposed ::-webkit-foo pseudo elements working.

        (WebCore::ElementRuleCollector::collectMatchingShadowPseudoElementRules):

            Factor to a function.

        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::copyShadowPseudoElementRulesFrom): Deleted.
        * css/RuleSet.h:
        * dom/Document.cpp:
        (WebCore::Document::userAgentShadowTreeStyleResolver):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::updateStyleResolver):

            No need to awkwardly copy these rules anymore.

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update IDBVersionChangeEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163266

        Reviewed by Darin Adler.

        Update IDBVersionChangeEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor instead, as in the specification:
        - http://w3c.github.io/IndexedDB/#request-idbversionchangeevent

        This patch also fixes a bug where the IDBVersionChangeEvent was ignoring the
        EventInit dictionary members passed by the JavaScript (e.g. bubbles).

        No new tests, updated existing test.

        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * bindings/js/JSDOMConvert.h:
        (WebCore::convertNullable):
        (WebCore::convert): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        * bindings/scripts/test/TestObj.idl:

2016-10-11  Chris Dumez  <cdumez@apple.com>

        Update WebKitPlaybackTargetAvailabilityEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163265

        Reviewed by Darin Adler.

        Update WebKitPlaybackTargetAvailabilityEvent to stop using legacy
        [ConstructorTemplate=Event] and use a regular constructor instead.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::createForBindings):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent): Deleted.
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl:

2016-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Add ENABLE_ENCRYPTED_MEDIA configuration option
        https://bugs.webkit.org/show_bug.cgi?id=163219

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        Add the ENABLE_ENCRYPTED_MEDIA configuration option. It will be used
        to enable or disable the new EME implementation at build-time.
        * DerivedSources.make: Group the legacy option and the new option together.

2016-10-10  Youenn Fablet  <youenn@apple.com>

        CachedResourceRequest constructor should be made more efficient
        https://bugs.webkit.org/show_bug.cgi?id=163210

        Reviewed by Alex Christensen.

        No change of behavior.

        Refactoring to use one CachedResourceRequest constructor that will move its request and charset to improve efficiency.

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:

2016-10-10  Adam Bergkvist  <adam.bergkvist@ericsson.com> and Alejandro G. Castro <alex@igalia.com>

        WebRTC: Make MediaEndpointPeerConnection handle remotely assigned mids correctly
        https://bugs.webkit.org/show_bug.cgi?id=163202

        Reviewed by Eric Carlson.

        An RTCRtpTransceiver has a null mid until it's been associated with a
        media description (with a mid) [1]. During that time, it's identified by
        a provisional mid that might become its real mid, but the transceiver
        can also get its mid assigned by a remote media description. In the
        second case, the mid value is initially unknown. A transceiver's
        RTCRtpSender must directly (synchronously in the script) provide a muted
        remote source that is playable by, for example, a media element. This
        source is initially registered in the MediaEndpoint (WebRTC backend)
        with the transceiver's provisional mid. So, if the real mid is set by a
        remote description, the registered mid must be updated to preserve the
        association between the registered source and the transceiver.

        [1] https://w3c.github.io/webrtc-pc/archives/20160913/webrtc.html#dom-rtcrtptransceiver-mid

        Test: fast/mediastream/RTCPeerConnection-remotely-assigned-transceiver-mid.html

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        Don't break after finding the first transceiver in the loop that builds the send source map.
        Update the mid used to register the muted remote source if the a transceiver's mid gets
        assigned by a remote media description.
        (WebCore::createSourceMap):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/MediaEndpoint.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::MockMediaEndpoint):
        (WebCore::MockMediaEndpoint::updateReceiveConfiguration):
        (WebCore::MockMediaEndpoint::updateSendConfiguration):
        (WebCore::MockMediaEndpoint::createMutedRemoteSource):
        (WebCore::MockMediaEndpoint::replaceMutedRemoteSourceMid):
        (WebCore::MockMediaEndpoint::emulatePlatformEvent):
        Add "unmute-remote-sources-by-mid" action that emulates data arriving on media descriptions
        which unmutes the remote sources.
        (WebCore::MockMediaEndpoint::updateConfigurationMids):
        (WebCore::MockMediaEndpoint::unmuteRemoteSourcesByMid):
        (WebCore::MockMediaEndpoint::unmuteTimerFired):
        * platform/mock/MockMediaEndpoint.h:

2016-10-10  Darin Adler  <darin@apple.com>

        Move audio module off of legacy exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163269

        Reviewed by Alex Christensen.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::setFftSize): Use ExceptionOr.
        (WebCore::AnalyserNode::setMinDecibels): Ditto.
        (WebCore::AnalyserNode::setMaxDecibels): Ditto.
        (WebCore::AnalyserNode::setSmoothingTimeConstant): Ditto.
        * Modules/webaudio/AnalyserNode.h: Update for above.
        * Modules/webaudio/AnalyserNode.idl: Ditto.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        Initialize m_needAutomaticPull in class definition.
        (WebCore::AudioBasicInspectorNode::connect): Use ExceptionOr.
        (WebCore::AudioBasicInspectorNode::disconnect): Ditto.
        * Modules/webaudio/AudioBasicInspectorNode.h: Updated for above.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::createFromAudioFileData): Use reference.
        (WebCore::AudioBuffer::AudioBuffer): Initialize m_gain in class definition.
        (WebCore::AudioBuffer::getChannelData): Use ExceptionOr.
        (WebCore::AudioBuffer::channelData): Rename to disambiguate with getChannelData.
        (WebCore::AudioBuffer::zero): Use modern for loop.
        * Modules/webaudio/AudioBuffer.h: Update for above.
        * Modules/webaudio/AudioBuffer.idl: Ditto.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process): Use reference.
        (WebCore::AudioBufferSourceNode::setBuffer): Use channelData.
        (WebCore::AudioBufferSourceNode::start): Use ExceptionOr.
        (WebCore::AudioBufferSourceNode::startPlaying): Ditto.
        * Modules/webaudio/AudioBufferSourceNode.h: Update for above.
        * Modules/webaudio/AudioBufferSourceNode.idl: Ditto.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createBuffer): Use ExceptionOr.
        (WebCore::AudioContext::createMediaElementSource): Ditto.
        (WebCore::AudioContext::createMediaStreamSource): Ditto.
        (WebCore::AudioContext::createScriptProcessor): Ditto.
        (WebCore::AudioContext::createDelay): Ditto.
        (WebCore::AudioContext::createChannelSplitter): Ditto.
        (WebCore::AudioContext::createChannelMerger): Ditto.
        (WebCore::AudioContext::createPeriodicWave): Ditto.
        * Modules/webaudio/AudioContext.h: Update for above.
        * Modules/webaudio/AudioContext.idl: Ditto.

        * Modules/webaudio/AudioDestinationNode.h: Use unsigned instead
        of unsigned long for maxChannelCount.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect): Use ExceptionOr.
        (WebCore::AudioNode::disconnect): Ditto.
        (WebCore::AudioNode::channelCount): Use unsigned.
        (WebCore::AudioNode::setChannelCount): Use ExceptionOr and unsigned.
        (WebCore::AudioNode::setChannelCountMode): Ditto.
        (WebCore::AudioNode::setChannelInterpretation): Ditto.
        * Modules/webaudio/AudioNode.h: Update for above.
        * Modules/webaudio/AudioNode.idl: Ditto.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        Initialize data members in class definition.
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo): Take
        a reference instead of a pointer to the audio bus.
        (WebCore::AudioScheduledSourceNode::start): Use ExceptionOr.
        (WebCore::AudioScheduledSourceNode::stop): Ditto.
        * Modules/webaudio/AudioScheduledSourceNode.h: Update for above.

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode): Initialize m_normalize
        in class definition.
        (WebCore::ConvolverNode::setBuffer): Use ExceptionOr.
        * Modules/webaudio/ConvolverNode.h: Update for above.
        * Modules/webaudio/ConvolverNode.idl: Ditto.

        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        Initialize m_numberOfInputChannels in class definition.
        (WebCore::DefaultAudioDestinationNode::maxChannelCount): Use unsigned.
        (WebCore::DefaultAudioDestinationNode::setChannelCount): Use ExceptionOr.
        * Modules/webaudio/DefaultAudioDestinationNode.h: Update for changes above.

        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode): Moved exception logic out of constructor.
        (WebCore::DelayNode::create): Added. Moved exception logic in here.
        (WebCore::DelayNode::delayTime): Moved typecast here from header.
        * Modules/webaudio/DelayNode.h: Update for above.

        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::OfflineAudioContext): Marked inline.
        (WebCore::OfflineAudioContext::create): Use ExceptionOr.
        (WebCore::OfflineAudioContext::~OfflineAudioContext): Deleted. Unneeded.
        * Modules/webaudio/OfflineAudioContext.h: Update for above.
        * Modules/webaudio/OfflineAudioContext.idl: Ditto.

        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender): Use channelData.

        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode): Updated for change to setType.
        (WebCore::OscillatorNode::setType): Use ExceptionOr.
        (WebCore::OscillatorNode::process): Use a reference.
        * Modules/webaudio/OscillatorNode.h: Update for above.
        * Modules/webaudio/OscillatorNode.idl: Ditto.

        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::process): Use channelData.

        * bindings/js/JSDOMBinding.h: Added overloads of toJS to it can be used on
        references to array buffers and array buffer views, not just pointers.

2016-10-10  Youenn Fablet  <youenn@apple.com>

        Change HTTPHeaderValues from a struct to a namespace
        https://bugs.webkit.org/show_bug.cgi?id=163203

        Reviewed by Alex Christensen.

        No change of behavior.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * platform/network/HTTPHeaderValues.cpp:
        (WebCore::HTTPHeaderValues::textPlainContentType):
        (WebCore::HTTPHeaderValues::formURLEncodedContentType):
        (WebCore::HTTPHeaderValues::TextPlainContentType): Deleted.
        (WebCore::HTTPHeaderValues::FormURLEncodedContentType): Deleted.
        * platform/network/HTTPHeaderValues.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Update WheelEvent / MouseEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163254

        Reviewed by Darin Adler.

        Update WheelEvent / MouseEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor instead, as in the specification:
        - https://www.w3.org/TR/uievents/#interface-mouseevent
        - https://www.w3.org/TR/uievents/#interface-wheelevent

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateDictionaryHeader):
        Fix our broken dependency tracking when it comes to dictionaries.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * dom/MouseEventInit.h: Added.
        * dom/MouseEventInit.idl: Added.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * dom/WheelEvent.h:
        * dom/WheelEvent.idl:

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Add support for languagechange event
        https://bugs.webkit.org/show_bug.cgi?id=163222

        Reviewed by Ryosuke Niwa.

        Add support for languagechange event:
        - https://html.spec.whatwg.org/#dom-navigator-languages

        Firefox and Chrome already support this.

        Test: fast/dom/window-languagechange-event.html

        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * page/DOMWindow.cpp:
        (WebCore::languagesChangedCallback):
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::languagesChanged):
        (WebCore::DOMWindow::canShowModalDialog): Deleted.
        (WebCore::DOMWindow::removeEventListener): Deleted.
        * page/DOMWindow.h:
        * page/WindowEventHandlers.idl:

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Update GamepadEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163243

        Reviewed by Darin Adler.

        Update GamepadEvent to stop using legacy [ConstructorTemplate=Event]
        and use a proper constructor as in the specification:
        - https://w3c.github.io/gamepad/#gamepadevent-interface

        * Modules/gamepad/GamepadEvent.cpp:
        (WebCore::GamepadEvent::GamepadEvent):
        * Modules/gamepad/GamepadEvent.h:
        (WebCore::GamepadEvent::create):
        (WebCore::GamepadEvent::~GamepadEvent): Deleted.
        * Modules/gamepad/GamepadEvent.idl:

2016-10-10  Darin Adler  <darin@apple.com>

        Move Fetch from legacy to new DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163195

        Reviewed by Chris Dumez.

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader): Use ExceptionOr.
        (WebCore::FetchHeaders::append): Ditto.
        (WebCore::FetchHeaders::remove): Ditto.
        (WebCore::FetchHeaders::get): Ditto.
        (WebCore::FetchHeaders::has): Ditto.
        (WebCore::FetchHeaders::set): Ditto.
        (WebCore::FetchHeaders::filterAndFill): Ditto.
        (WebCore::FetchHeaders::Iterator::next): Got rid of unneeded code to
        clear out m_keys after the last call to next, since it will be deleted
        as soon as the iterator is deleted.

        * Modules/fetch/FetchHeaders.h: Use pragma once. Use ExceptionOr.

        * Modules/fetch/FetchHeaders.idl: Move to non-legacy exceptions.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody): Use ExceptionOr.
        (WebCore::FetchRequest::clone): Ditto.

        * Modules/fetch/FetchRequest.h: Use pragma once. Use ExceptionOr.

        * Modules/fetch/FetchRequest.idl: Move to non-legacy exceptions.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::redirect): Use ExceptionOr.
        (WebCore::FetchResponse::setStatus): Ditto.

        * Modules/fetch/FetchResponse.h: Use ExceptionOr.

        * Modules/fetch/FetchResponse.idl: Move to non-legacy exceptions.

        * bindings/js/JSDOMBinding.h: Added implementation of toJSNullableString.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValue): Call toJSNullableString and toJSString for
        functions that return ExceptionOr<String>.

2016-10-10  Nan Wang  <n_wang@apple.com>

        AX: Expose invalid status for input types with that information
        https://bugs.webkit.org/show_bug.cgi?id=163252
        <rdar://problem/28704409>

        Reviewed by Chris Fleizach.

        For input types with invalid input value, we should expose the invalid 
        status to the assitive technology.

        Test: accessibility/mac/invalid-status-for-input-types.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::invalidStatus):

2016-10-10  Konstantin Tokarev  <annulen@yandex.ru>

        Added override specifier to PluginViewBase::isPluginViewBase()
        https://bugs.webkit.org/show_bug.cgi?id=163218

        Reviewed by Alex Christensen.

        No new tests needed.

        * plugins/PluginViewBase.h:

2016-10-10  Alex Christensen  <achristensen@webkit.org>

        Don't run SecurityOrigin's port through URLParser
        https://bugs.webkit.org/show_bug.cgi?id=163253

        Reviewed by Brady Eidson.

        No change in behavior.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::create):
        We used to parse URLs like "file://:0/" which are valid when using URL::parse
        but aren't valid when we start using the URLParser, which matches other browsers' failure
        to parse URLs with a port but no host. There is no reason to write and parse the port.
        Setting m_port directly accomplishes the same thing.
 
2016-10-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        <Error>: CGContextSetLineDash: invalid dash array: at least one element must be non-zero
        https://bugs.webkit.org/show_bug.cgi?id=138555

        Reviewed by Simon Fraser.

        Ensure the dashArray has at least one non-zero element before calling
        GraphicsContext::setLineDash(). Call GraphicsContext::setStrokeStyle()
        instead, if the dashArray does not have one.

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):

2016-10-10  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Correct Radial Graident Bug
        https://bugs.webkit.org/show_bug.cgi?id=163241

        Reviewed by Darin Adler.

        Radial gradients were not working correctly under Direct2D because the
        points and radius values used were incorrect. D2D wants a center point and
        an offset, not a start and end point. It wants an X and Y radius (for an
        ellipse), not a radius at the start point, and a radius at the end point.

        Covered by existing fast/gradients/css-radial-gradients.html (and others).

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Remove 'notImplemented' code path.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient): Use correct input values to
        the Radial Gradient constructor.
        (WebCore::Gradient::fill): Generate a gradient if we have no active
        one to use.

2016-10-10  Jiewen Tan  <jiewen_tan@apple.com>

        Rename CryptoAlgorithmParameters to CryptoAlgorithmParametersDeprecated
        https://bugs.webkit.org/show_bug.cgi?id=163163
        <rdar://problem/28681544>

        Reviewed by Brent Fulgham.

        Replace all uses of 'CryptoAlgorithmParameters' with 'CryptoAlgorithmParametersDeprecated' in preparation for a new CryptoAlgorithmParameters type.

        No changes of behaviors. No new tests.

        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        * crypto/CryptoAlgorithm.cpp:
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParametersDeprecated.h: Renamed from Source/WebCore/crypto/CryptoAlgorithmParameters.h.
        * crypto/CryptoKeySerialization.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * 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:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * 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/keys/CryptoKeySerializationRaw.cpp:
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp:
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp:
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp:
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        * crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmAesCbcParams.h.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmAesKeyGenParams.h.
        * crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmHmacKeyParams.h.
        * crypto/parameters/CryptoAlgorithmHmacParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmHmacParams.h.
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h.
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHashDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h.
        * crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaOaepParams.h.
        * crypto/parameters/CryptoAlgorithmRsaSsaParamsDeprecated.h: Renamed from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaParams.h.

2016-10-10  Darin Adler  <darin@apple.com>

        Move NotificationCenter from legacy to new DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163217

        Reviewed by Chris Dumez.

        * Modules/notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::webkitNotifications): Pass reference to
        document instead of pointer. Also use auto and early return.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification): Move checks that can lead to
        throwing an exception out of the constructor into the create function.
        (WebCore::Notification::create): Changed to use ExceptionOr. Also moved
        checks that can lead to throwing an exception here.
        (WebCore::Notification::show): Update since NotificationController::client
        now returns a reference.
        (WebCore::Notification::permission): Ditto.
        (WebCore::Notification::requestPermission): Ditto.

        * Modules/notifications/Notification.h: Updated for above changes.

        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create): Take a reference to the script execution
        context instead of a pointer.
        (WebCore::NotificationCenter::NotificationCenter): Ditto.
        (WebCore::NotificationCenter::createNotification): Use ExceptionOr.
        (WebCore::NotificationCenter::requestPermission): Take an rvalue reference.

        * Modules/notifications/NotificationCenter.h: Use pragma once.
        Marked the class final. Updated for changes above.

        * Modules/notifications/NotificationCenter.idl: Use non-legacy exceptions.

        * Modules/notifications/NotificationController.cpp:
        (WebCore::NotificationController::NotificationController): Use a reference rather
        than a pointer for m_client, since it is never null.
        (WebCore::NotificationController::~NotificationController): Ditto.
        (WebCore::NotificationController::clientFrom): Updated for the change above.

        * Modules/notifications/NotificationController.h: Updated for the change above.

        * Modules/notifications/WorkerGlobalScopeNotifications.cpp:
        (WebCore::WorkerGlobalScopeNotifications::webkitNotifications): Updated to
        pass a reference for the script execution context. Also added FIXME about the
        fact that the client is always null.

2016-10-10  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Placards
        https://bugs.webkit.org/show_bug.cgi?id=163110
        <rdar://problem/28669342>

        Reviewed by Dean Jackson.

        Inline media controls need to display placards when the video is no longer playing inline,
        such as when the video is playing fullscreen or via AirPlay. To that end, we introduce a
        new Placard class and two subclasses for display during fullscreen or AirPlay playback.
        Note that localization will be done in a later patch.

        Tests: media/modern-media-controls/airplay-placard/airplay-placard.html
               media/modern-media-controls/pip-placard/pip-placard.html
               media/modern-media-controls/placard/placard.html

        * Modules/modern-media-controls/controls/airplay-placard.js:
        (AirplayPlacard):
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/pip-placard.js:
        (PiPPlacard):
        * Modules/modern-media-controls/controls/placard.css:
        (.placard):
        (.placard .container):
        (.placard .icon):
        (.placard .title,):
        (.placard .title):
        (.placard .description):
        * Modules/modern-media-controls/controls/placard.js:
        (Placard.):
        * Modules/modern-media-controls/images/iOS/airplay-placard@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/airplay-placard@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/airplay-placard@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-placard@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-placard@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-placard@3x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay-placard@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay-placard@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-placard@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-placard@2x.png: Added.

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Add support for Navigator.languages attribute
        https://bugs.webkit.org/show_bug.cgi?id=163220

        Reviewed by Darin Adler.

        Add support for Navigator.languages attribute:
        - https://html.spec.whatwg.org/#navigatorlanguage

        Firefox and Chrome already support this.

        Currently, we always return a single language for privacy reasons so
        this API does not actually bring anything new besides interoperability
        with other browsers and compliance with the HTML specification.

        No new tests, rebaselined existing tests.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::languages):
        * page/NavigatorBase.h:
        * page/NavigatorLanguage.idl:

2016-10-10  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Implement dashed and dotted border line drawing
        https://bugs.webkit.org/show_bug.cgi?id=163235

        Reviewed by Alex Christensen.

        Covered by existing fast/border tests.

        * platform/graphics/GraphicsContext.cpp: Use custom 'setPlatformStrokeStyle' for D2D.
        * platform/graphics/Path.cpp:
        (WebCore::Path::length): Don't use default implementation for Direct2D.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextPlatformPrivate::brushWithColor): Initialize pointer to nullptr.
        (WebCore::GraphicsContext::drawRect): Use proper stroke style.
        (WebCore::GraphicsContextPlatformPrivate::setLineCap): Added.
        (WebCore::GraphicsContextPlatformPrivate::setLineJoin): Added.
        (WebCore::GraphicsContextPlatformPrivate::setStrokeStyle): Added.
        (WebCore::GraphicsContextPlatformPrivate::setMiterLimit): Added.
        (WebCore::GraphicsContextPlatformPrivate::setDashOffset): Added.
        (WebCore::GraphicsContextPlatformPrivate::setPatternWidth): Added.
        (WebCore::GraphicsContextPlatformPrivate::setPatternOffset): Added.
        (WebCore::GraphicsContextPlatformPrivate::setStrokeThickness): Added.
        (WebCore::GraphicsContextPlatformPrivate::setDashes): Added.
        (WebCore::GraphicsContextPlatformPrivate::recomputeStrokeStyle): Added.
        (WebCore::GraphicsContextPlatformPrivate::strokeStyle): Added.
        (WebCore::GraphicsContext::drawLine): Use proper stroke style.
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        (WebCore::GraphicsContext::drawPath): Ditto.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::setPlatformStrokeStyle): Added.
        (WebCore::GraphicsContext::setMiterLimit): Tell D2D context about miter limit.
        (WebCore::GraphicsContext::setLineCap): Ditto for line cap.
        (WebCore::GraphicsContext::setLineDash): Ditto for dashes.
        (WebCore::GraphicsContext::setLineJoin): Ditto for join style.
        (WebCore::GraphicsContext::setPlatformStrokeThickness): Ditto for stroke thickness.
        (WebCore::GraphicsContext::platformStrokeEllipse): Use proper stroke style.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::currentPoint): Zero-initialize a value.
        (WebCore::Path::length): Added.

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Update ProgressEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163221

        Reviewed by Darin Adler.

        Update ProgressEvent to stop using legacy [ConstructorTemplate=Event]
        and use a regular constructor as in the specification:
        - https://xhr.spec.whatwg.org/#firing-events-using-the-progressevent-interface

        * dom/ProgressEvent.cpp:
        (WebCore::ProgressEvent::ProgressEvent):
        * dom/ProgressEvent.h:
        (WebCore::ProgressEvent::create):
        * dom/ProgressEvent.idl:

2016-10-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address some review feedback from r206979 and r207010
        https://bugs.webkit.org/show_bug.cgi?id=163236

        Reviewed by Tim Horton.

        In TypingCommand.h, some methods on TypingCommand should be marked as final to reflect the fact that they
        override methods in CompositeEditCommand. Also, HTMLFormControlElement::dispatchFormControlInputEvent does not
        need to specify HTMLElement::dispatchInputEvent() when calling dispatchInputEvent().

        No new tests, since there is no behavior change.

        * editing/TypingCommand.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent):

2016-10-10  Chris Dumez  <cdumez@apple.com>

        Update MessageEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163187

        Reviewed by Darin Adler.

        Update MessageEvent to stop using legacy [ConstructorTemplate=Event] and
        use a regular constructor as in the specification:
        - https://html.spec.whatwg.org/multipage/comms.html#the-messageevent-interfaces

        No new tests, updated existing test.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray):
        * bindings/js/JSDOMConvert.h:
        (WebCore::convertWrapperTypeSequence):
        (WebCore::convertWrapperType): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateDictionaryImplementationContent):
        (GetNativeType):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::trySerializeData):
        (WebCore::MessageEvent::createForBindings): Deleted.
        (WebCore::MessageEvent::initMessageEvent): Deleted.
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:

2016-10-10  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Buttons
        https://bugs.webkit.org/show_bug.cgi?id=163109
        <rdar://problem/28668954>

        Reviewed by Dean Jackson.

        We introduce specific IconButton subclasses for the various buttons we will be using
        in media controls on macOS (inline and fullscreen) and iOS. One class, StartButton, is
        a subclass of Button and not IconButton because we're only interested in having it display
        an <img> element rather than use a mask and requires additional DOM structure.

        Tests: media/modern-media-controls/airplay-button/airplay-button-on.html
               media/modern-media-controls/airplay-button/airplay-button.html
               media/modern-media-controls/aspect-ratio-button/aspect-ratio-button.html
               media/modern-media-controls/forward-button/forward-button.html
               media/modern-media-controls/fullscreen-button/fullscreen-button.html
               media/modern-media-controls/mute-button/mute-button.html
               media/modern-media-controls/pip-button/pip-button.html
               media/modern-media-controls/play-pause-button/play-pause-button.html
               media/modern-media-controls/rewind-button/rewind-button.html
               media/modern-media-controls/skip-back-button/skip-back-button.html
               media/modern-media-controls/start-button/start-button.html
               media/modern-media-controls/tracks-button/tracks-button.html

        * Modules/modern-media-controls/controls/airplay-button.css:
        (button.airplay.on):
        * Modules/modern-media-controls/controls/airplay-button.js:
        (AirplayButton):
        (AirplayButton.prototype.set on):
        * Modules/modern-media-controls/controls/aspect-ratio-button.js:
        (AspectRatioButton):
        (AspectRatioButton.prototype.get scalesToFill):
        (AspectRatioButton.prototype.set scalesToFill):
        * Modules/modern-media-controls/controls/forward-button.js:
        (ForwardButton):
        * Modules/modern-media-controls/controls/fullscreen-button.js:
        (FullscreenButton):
        * Modules/modern-media-controls/controls/icon-button.js:
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/mute-button.js:
        (MuteButton):
        (MuteButton.prototype.get muted):
        (MuteButton.prototype.set muted):
        * Modules/modern-media-controls/controls/pip-button.js:
        (PiPButton):
        * Modules/modern-media-controls/controls/play-pause-button.js:
        (PlayPauseButton):
        (PlayPauseButton.prototype.get playing):
        (PlayPauseButton.prototype.set playing):
        * Modules/modern-media-controls/controls/rewind-button.js:
        (RewindButton):
        * Modules/modern-media-controls/controls/skip-back-button.js:
        (SkipBackButton):
        * Modules/modern-media-controls/controls/start-button.js:
        (StartButton):
        * Modules/modern-media-controls/controls/tracks-button.js:
        (TracksButton):
        * Modules/modern-media-controls/images/iOS/airplay@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/airplay@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/pause@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-in@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-in@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/pip-in@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/play@1x.png: Added.
        * Modules/modern-media-controls/images/iOS/play@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/play@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/start@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/airplay@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/exit-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/exit-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/forward@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/forward@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/interval-skip-back@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/interval-skip-back@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/media-selection@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-in@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pip-in@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/play-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/play-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/play@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/play@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/rewind@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/rewind@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/scale-to-fill@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/scale-to-fill@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/scale-to-fit@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/scale-to-fit@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-mute@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume-mute@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/volume@2x.png: Added.

2016-10-10  Nan Wang  <n_wang@apple.com>

        AX: Update AXPlaceHolder algorithm
        https://bugs.webkit.org/show_bug.cgi?id=163229

        Reviewed by Chris Fleizach.

        From https://w3c.github.io/html-aam/
        When the placeholder and aria-placeholder attributes are both present, we
        should expose the value of the placeholder attribute. Updated the algorithm
        for that.

        Changes are covered in the modified test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::placeholderValue):

2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Node accessors in DOMJIT
        https://bugs.webkit.org/show_bug.cgi?id=163005

        Reviewed by Filip Pizlo.

        This patch implements DOMJIT accessors in WebCore. We plan to offer 2 things in DOMJIT.

            1. Hand written DOM inlining.

            We inject DOMJIT::Patchpoint compiler into JSC. And JSC uses this to inline DOM operation,
            and drop type checks. Since the operation is fully inlined, potentially it has large
            performance boost. Note that CSS Selector JIT compiler already does the similar things:
            accessing parentNode etc. directly by using offsets.

            2. Exposing signature information.

            We will offer function type signature by some representation and pass it to JSC.
            JSC will use to drop type checks. Since IDL code generator already knows this,
            we can automatically generate such a information. Since we don't perform any inlining,
            the performance boost may be limited. But it's worth doing.

        This patch implements the first one, hand written DOM inlining facility. We add a new IDL attribute,
        "DOMJIT". This means that "This readonly attribute have a DOMJIT patchpoint compiler".
        We annotate several accessors at first. "firstChild", "lastChild", "nextSibling", "previousSibling",
        and "parentNode". And we implement DOMJIT::Patchpoint for that in JSNodeDOMJIT.cpp.

        This patchpoint will be integrated into JSC's DFG and FTL. And these tiers can drop type checks and
        inline the entire code of these accessors. JSC compiler still does not know much about DOM. And WebCore
        does not know much about each tier of JSC. WebCore just offers the generic patchpoints and they are
        used in both DFG and FTL tiers. The layer separation is still kept.

        While very small microbenchmark[1] shows performance benefit, still we cannot improve DOM
        benchmarks due to the lack of following implementations. Once the following implementations
        are implemented, we will get performance boost.

        1. Super polymorphic sites.

            This inlining is super effective if we run some microbenchmarks. However, Dromaeo does not
            show so much performance benefit. This is because Dromaeo's dom-traverse.html is super
            polymorphic call site where JSC gives up optimization. For example, in the following
            dromaeo's benchmark, we can see so various DOM nodes at the `cur.firstChild` site, like,
            HTMLDivElement, HTMLAnchorElement, Text, Comment etc. JSC gives up optimization since we
            encounter so many Structures. This should be optimized since they share the large part of
            prototype-chain and they hit the exactly same CustomGetter, Node.prototype.firstChild.
            We will handle this and when we optimize it, this DOMJIT works well on Dromaeo.

                test( "firstChild", function(){
                    var nodes = document.body.childNodes, nl = nodes.length;

                    for ( var i = 0; i < num; i++ ) {
                        for ( var j = 0; j < nl; j++ ) {
                            var cur = nodes[j];
                            while ( cur )
                                cur = cur.firstChild;
                            ret = cur;
                        }
                    }
                });

        2. Emit code in IC.

            Currently, we only optimize DOMJIT accessors in DFG and FTL. However, we should leverage
            this DOMJIT::Patchpoint to emit inlined code even in Inline Caching (IC). We will emit
            CheckDOM's code for IC's guard phase, and emit CallDOM's code for IC's get phase. This
            offers performance benefit even if we live in baseline JIT code. And this should be easy.

        [1]: With the following one, we can see 3x improvement (26ms v.s. 80ms).

            var element = document.getElementsByTagName('div')[3];
            var before = Date.now();
            for (var i = 0; i < 1e7; ++i)
                element.firstChild;
            console.log(Date.now() - before);

        * CMakeLists.txt:
        * ForwardingHeaders/domjit/DOMJITGetterSetter.h:
        * ForwardingHeaders/domjit/DOMJITPatchpoint.h: Copied from Source/JavaScriptCore/domjit/DOMJITSlowPathCalls.h.
        * ForwardingHeaders/domjit/DOMJITPatchpointParams.h: Copied from Source/JavaScriptCore/domjit/DOMJITSlowPathCalls.h.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::offsetOfWrapped):
        (WebCore::JSDOMWrapper::wrapped): Deleted.
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::offsetOfWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSCAttributesForAttribute):
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        (GenerateImplementation):
        (GenerateHashTableValueArray):
        * bindings/scripts/IDLAttributes.txt:
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::lastChildMemoryOffset):
        (WebCore::ContainerNode::lastChild): Deleted.
        * dom/Node.h:
        (WebCore::Node::flagIsContainer):
        (WebCore::Node::flagIsText): Deleted.
        * dom/Node.idl:
        * domjit/DOMJITHelpers.h: Added.
        (WebCore::DOMJITHelpers::branchIfNotWorldIsNormal):
        (WebCore::DOMJITHelpers::branchIfNotWeakIsLive):
        (WebCore::DOMJITHelpers::tryLookUpWrapperCache):
        (WebCore::DOMJITHelpers::toWrapper):
        (WebCore::DOMJITHelpers::branchIfDOMWrapper):
        (WebCore::DOMJITHelpers::branchIfNotDOMWrapper):
        (WebCore::DOMJITHelpers::branchIfNode):
        (WebCore::DOMJITHelpers::branchIfNotNode):
        (WebCore::DOMJITHelpers::branchIfElement):
        (WebCore::DOMJITHelpers::branchIfNotElement):
        (WebCore::DOMJITHelpers::branchIfDocumentWrapper):
        (WebCore::DOMJITHelpers::branchIfNotDocumentWrapper):
        * domjit/JSNodeDOMJIT.cpp: Added.
        (WebCore::toWrapperSlow):
        (WebCore::createCallDOMForOffsetAccess):
        (WebCore::checkNode):
        (WebCore::NodeFirstChildDOMJIT::checkDOM):
        (WebCore::NodeFirstChildDOMJIT::callDOM):
        (WebCore::NodeLastChildDOMJIT::checkDOM):
        (WebCore::NodeLastChildDOMJIT::callDOM):
        (WebCore::NodeNextSiblingDOMJIT::checkDOM):
        (WebCore::NodeNextSiblingDOMJIT::callDOM):
        (WebCore::NodePreviousSiblingDOMJIT::checkDOM):
        (WebCore::NodePreviousSiblingDOMJIT::callDOM):
        (WebCore::NodeParentNodeDOMJIT::checkDOM):
        (WebCore::NodeParentNodeDOMJIT::callDOM):

2016-10-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support InputEvent.data for the new InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163113
        <rdar://problem/28681935>

        Reviewed by Darin Adler.

        Introduces InputEvent.data, a string attribute that, if non-null, indicates the text to be inserted by an input
        event. For text areas and text inputs, the 'insertText', 'insertFromPaste', 'insertFromDrop', and
        'insertReplacementText' input types should cause subsequent `input` and `beforeinput` events to have non-null
        data. However, for contenteditable areas, only 'insertText' leads to having data in resulting InputEvents.

        To implement this, we introduce a new virtual method, CompositeEditCommand::inputEventData, which gives
        composite editing commands the chance to vend a data string for input events they might fire (by default, this
        is null).

        Tests: fast/events/input-events-paste-data.html
               fast/events/input-events-typing-data.html

        * dom/InputEvent.cpp:
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h:
        * dom/InputEvent.idl:

        Currently, our InputEventInit struct is wrong. According to the UI-Events spec at www.w3.org/TR/uievents/, the
        init struct for an InputEvent should contain a data string (added in this patch) as well as an isComposing flag
        (to be added in a future patch along with composition support). While adding support for the data attribute, we
        tweak the InputEvent IDL and headers slightly to adjust for this.

        * dom/Node.cpp:
        (WebCore::Node::dispatchInputEvent):
        * dom/Node.h:
        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::inputEventData):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::isEditingTextAreaOrTextInput):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchInputEvent):
        (WebCore::dispatchBeforeInputEvents):
        (WebCore::dispatchInputEvents):
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::computeAndSetTypingStyle):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::inputEventData):
        * editing/ReplaceRangeWithTextCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::inputEventData):
        * editing/ReplaceSelectionCommand.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::inputEventData):
        * editing/SpellingCorrectionCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::inputEventData):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/TypingCommand.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setEditingValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::dispatchChangeEventForMenuList):

2016-10-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206972.
        https://bugs.webkit.org/show_bug.cgi?id=163227

        Making EWS flaky (Requested by bfulgham_ on #webkit).

        Reverted changeset:

        "[CMake] CMake does not support the dep files for implicit
        dependency"
        https://bugs.webkit.org/show_bug.cgi?id=161433
        http://trac.webkit.org/changeset/206972

2016-10-10  Darin Adler  <darin@apple.com>

        Move media source from legacy to new DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163201

        Reviewed by Chris Dumez.

        * Modules/mediasource/MediaSource.cpp: Removed unneeded includes.
        (WebCore::MediaSource::create): Use auto.
        (WebCore::MediaSource::MediaSource): Initialize m_mediaElement in class definition.
        (WebCore::MediaSource::setLiveSeekableRange): Use ExceptionOr.
        (WebCore::MediaSource::clearLiveSeekableRange): Ditto.
        (WebCore::MediaSource::setDuration): Ditto.
        (WebCore::MediaSource::setDurationInternal): Ditto.
        (WebCore::MediaSource::endOfStream): Ditto.
        (WebCore::MediaSource::streamEndedWithError): Use bufferedInternal.
        (WebCore::MediaSource::addSourceBuffer): Use ExceptionOr.
        (WebCore::MediaSource::removeSourceBuffer): Ditto.
        (WebCore::MediaSource::detachFromElement): Use removeSourceBuffer
        without IGNORE_EXCEPTION since that is now the default behavior.
        (WebCore::MediaSource::activeRanges): Use bufferedInternal.
        (WebCore::MediaSource::createSourceBufferPrivate): Use ExceptionOr.

        * Modules/mediasource/MediaSource.h: Removed unneeded includes.
        Made more things private and also private rather than protected.

        * Modules/mediasource/MediaSource.idl: Use non-legacy exceptions.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::buffered): Use ExceptionOr.
        (WebCore::SourceBuffer::setTimestampOffset): Ditto.
        (WebCore::SourceBuffer::setAppendWindowStart): Ditto.
        (WebCore::SourceBuffer::setAppendWindowEnd): Ditto.
        (WebCore::SourceBuffer::appendBuffer): Ditto.
        (WebCore::SourceBuffer::abort): Ditto.
        (WebCore::SourceBuffer::remove): Ditto.
        (WebCore::SourceBuffer::appendBufferInternal): Ditto.
        (WebCore::SourceBuffer::setMode): Ditto.

        * Modules/mediasource/SourceBuffer.h: Removed unneeded includes.
        Updated for above changes. Made more things private.

        * Modules/mediasource/SourceBuffer.idl: Use non-legacy exceptions.

        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h:
        Added now-needed include of MediaSourcePrivate.h.

2016-10-10  Jer Noble  <jer.noble@apple.com>

        Address flaky airplay-* LayouTests
        https://bugs.webkit.org/show_bug.cgi?id=163044

        Reviewed by Brent Fulgham.

        Two separate problems conspired to make airplay tests a bit flaky:

        For one, when the HTMLMediaElement clears its MediaPlayer, it won't necessarily notify
        clients that it has stopped playing to a wireless target. The WebMediaSessionManager may
        eventually cause this value to reset, but it's asynchronous, and may fire after the next
        test starts. Reset this state explicitly.

        For two, the state of the mock playback target picker was not being reset between test
        invocations.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2016-10-10  Brent Fulgham  <bfulgham@apple.com>

        Correct typo in comment (patining -> painting).

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::centerLineAndCutOffCorners):

2016-10-10  Brent Fulgham  <bfulgham@apple.com>

        Reduce code duplication between CG, Cairo, and Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=163157

        Reviewed by Darin Adler.

        Move a number of routines that have been copied-and-pasted to different
        platform files into the main GraphicsContext.cpp file.

        No new tests because there is no change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::dashedLineCornerWidthForStrokeWidth): Added.
        (WebCore::GraphicsContext::dashedLinePatternWidthForStrokeWidth): Added.
        (WebCore::GraphicsContext::dashedLinePatternOffsetForPatternAndStrokeWidth): Added.
        (WebCore::GraphicsContext::centerLineAndCutOffCorners): Added.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine): Call new helper function.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine): Ditto.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawLine): Ditto.

2016-10-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r206731): [SOUP] Network process crash in gotHeadersCallback
        https://bugs.webkit.org/show_bug.cgi?id=163170

        Reviewed by Michael Catanzaro.

        Do not assume NetworkingContext is non-null and valid before using it.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):

2016-10-10  Youenn Fablet  <youenn@apple.com>

        Images and scripts should be said as clean based on CachedResource::isCORSSameOrigin
        https://bugs.webkit.org/show_bug.cgi?id=162390

        Reviewed by Darin Adler.

        No observable change of behavior.

        Renaming CachedResource::isClean to isCORSSameOrigin to match html spec terminology.
        Making use of it to check whether images taint canvas and whether script errors should be sanitized.

        Some asserts are added to ensure that a resource fetched using one origin is not reused for another origin.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isOriginClean):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::isCORSSameOrigin):
        * loader/cache/CachedResource.h:

2016-10-10  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Memory cache should not bypass redirect mode
        https://bugs.webkit.org/show_bug.cgi?id=162959

        Reviewed by Darin Adler.

        Test: http/tests/fetch/redirectmode-and-preload.html

        Ensure reloading of resources if the redirect modes are different between request and cached resource, and
        cached resource has redirections.

        As a temporary workaround, we activate resource update for raw resources in
        shouldUpdateCachedResourceWithCurrentRequest but disable it in canUpdateFromResource.
        This allows handling reloading of resources with different redirection mode in canUpdateFromResource.

        A future patch should allow loading cached raw resources from other cached raw resources.

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasRedirections):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):
        (WebCore::canUpdateFromResource):
        (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest):

2016-10-10  Youenn Fablet  <youenn@apple.com>

        Attribute getter binding generated code should use more references
        https://bugs.webkit.org/show_bug.cgi?id=163179

        Reviewed by Darin Adler.

        No change of behavior.

        Using more references in attribute getter generated code since BindingCaller::attribute can do the
        pointer-to-references checks once for all.

        Needed to update GenerateCallWith and NativeToJSValue to handle the case where references (attribute getters) or
        pointers (methods and attribute setters) are to be used.
        Future refactoring should allign methods/attribute setters to attribute getters.

        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::attribute):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateCallWith):
        (NativeToJSValue):
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestException.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/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:

2016-10-10  Youenn Fablet  <youenn@apple.com>

        Fix Mac Win build after https://trac.webkit.org/changeset/206966
        https://bugs.webkit.org/show_bug.cgi?id=163199

        Unreviewed.

        * bindings/js/JSDOMBinding.h: Marking rejectPromiseWithGetterTypeError as WEBCORE_EXPORT.

2016-10-09  Antti Koivisto  <antti@apple.com>

        Enable optimized stylesheet updates in shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=163180

        Reviewed by Darin Adler.

        When we get a new stylesheet (for example when load completes) we invalidate only
        those elements in DOM that are affected by the new sheet. This patch makes the
        optimization also work in shadow trees.

        Test: fast/shadow-dom/scoped-style-invalidation.html

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * css/StyleInvalidationAnalysis.h:
        * dom/Document.cpp:
        (WebCore::Document::didRemoveAllPendingStylesheet):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::removePendingSheet):
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        (WebCore::Style::Scope::updateActiveStyleSheets):

2016-10-10  Youenn Fablet  <youenn@apple.com>

        Refactor binding generated casted-this checks for attribute setters
        https://bugs.webkit.org/show_bug.cgi?id=163181

        Reviewed by Darin Adler.

        No change of behavior.
        Covered by existing tests and binding expectations.

        Adding support for attribute setter in BindingCaller.
        Updating binding generator to make use of it.
        Future refactoring should use more reference and rename castedThis to thisObject, like for getters.

        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::setAttribute):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2016-10-09  Darin Adler  <darin@apple.com>

        Move encrypted media from legacy to new DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163194

        Reviewed by Youenn Fablet.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::createSession): Take a reference instead of a pointer.
        * Modules/encryptedmedia/CDM.h: Updated for above change.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::create): Take a reference instead of a pointer.
        (WebCore::WebKitMediaKeySession::MediaKeySession): Ditto.
        (WebCore::WebKitMediaKeySession::~MediaKeySession): Removed unneeded code that
        sets m_session to null.
        (WebCore::WebKitMediaKeySession::keyRequestTimerFired): Use auto.
        (WebCore::WebKitMediaKeySession::update): Use ExceptionOr.
        (WebCore::WebKitMediaKeySession::addKeyTimerFired): Use m_keys directly instead
        of calling the keys function.
        (WebCore::WebKitMediaKeySession::sendError): Set m_error directly instead of
        calling the setError function.
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory): Use auto.
        (WebCore::WebKitMediaKeySession::hasPendingActivity): Check m_session directly
        instead of writing !isClosed.
        (WebCore::WebKitMediaKeySession::setError): Deleted.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h: Use pragma once. Removed
        unneeded includes. Changed create to take a reference instead of a pointer.
        Made most members and base classes private instead of public. Also removed
        a few now-unneeded functions. Made everything that was formerly protected
        private instead, since the two are the same in a final class.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl: Removed unneeded comments.
        Moved from MayThrowLegacyException to MayThrowException.

        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        (WebCore::WebKitMediaKeys::create): Use ExceptionOr.
        (WebCore::WebKitMediaKeys::MediaKeys): Made argument be an rvalue reference.
        Also initialize m_mediaElement in the class definition.
        (WebCore::WebKitMediaKeys::~MediaKeys): Call detachKeys instead of setKeys(nullptr).
        (WebCore::WebKitMediaKeys::createSession): Use ExceptionOr. Also pass reference
        insteead of pointer to create. Also removed unneeded separate checks for null
        strings in code that already calls isEmpty.
        (WebCore::WebKitMediaKeys::isTypeSupported): Removed unneeded checks for null strings
        in code that already calls isEmpty.
        (WebCore::WebKitMediaKeys::cdmMediaPlayer): Tweaked a bit.
        (WebCore::WebKitMediaKeys::cachedKeyForKeyId): Use auto.

        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h: Use pragma once. Removed unneeded includes.
        Changed cdm() function to return a reference. Initialize m_mediaElement.
        Use private instead of protected.

        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl: Use ConstructorMayThrowException
        and MayThrowException instead of the legacy versions.

2016-10-09  Zan Dobersek  <zdobersek@igalia.com>

        ENABLE_LEGACY_ENCRYPTED_MEDIA interfaces should have a hard-coded WebKit prefix
        https://bugs.webkit.org/show_bug.cgi?id=162982

        Reviewed by Jer Noble.

        Have the Web-exposed interfaces guarded by ENABLE_LEGACY_ENCRYPTED_MEDIA also use
        the WebKit prefix in the implementations. This will prevent conflicts between
        interfaces with same names in both the legacy API and the future EME API.

        Most of the interfaces in this legacy API already used the WebKit prefix when
        exposed via JS bindings. The only exception is MediaKeyNeededEvent, which gets
        prefixed in this patch.

        The interface implementations for this legacy API are also moved under the
        Modules/encryptedmedia/legacy/ directory.

        No new tests -- covered by existing tests (with the relevant changes reflected
        in the updated baselines).

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/encryptedmedia/CDM.cpp:
        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::generateKeyRequest):
        (WebCore::CDMSessionClearKey::update):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp.
        (WebCore::WebKitMediaKeyMessageEvent::WebKitMediaKeyMessageEvent):
        (WebCore::WebKitMediaKeyMessageEvent::~WebKitMediaKeyMessageEvent):
        (WebCore::WebKitMediaKeyMessageEvent::eventInterface):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.h: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.h.
        (WebCore::WebKitMediaKeyMessageEvent::create):
        (WebCore::WebKitMediaKeyMessageEvent::createForBindings):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.idl.
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.cpp.
        (WebCore::WebKitMediaKeyNeededEvent::WebKitMediaKeyNeededEvent):
        (WebCore::WebKitMediaKeyNeededEvent::~WebKitMediaKeyNeededEvent):
        (WebCore::WebKitMediaKeyNeededEvent::eventInterface):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.h: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.h.
        (WebCore::WebKitMediaKeyNeededEvent::create):
        (WebCore::WebKitMediaKeyNeededEvent::createForBindings):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeyNeededEvent.idl.
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp.
        (WebCore::WebKitMediaKeySession::create):
        (WebCore::WebKitMediaKeySession::WebKitMediaKeySession):
        (WebCore::WebKitMediaKeySession::~WebKitMediaKeySession):
        (WebCore::WebKitMediaKeySession::setError):
        (WebCore::WebKitMediaKeySession::close):
        (WebCore::WebKitMediaKeySession::cachedKeyForKeyId):
        (WebCore::WebKitMediaKeySession::sessionId):
        (WebCore::WebKitMediaKeySession::generateKeyRequest):
        (WebCore::WebKitMediaKeySession::keyRequestTimerFired):
        (WebCore::WebKitMediaKeySession::update):
        (WebCore::WebKitMediaKeySession::addKeyTimerFired):
        (WebCore::WebKitMediaKeySession::sendMessage):
        (WebCore::WebKitMediaKeySession::sendError):
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory):
        (WebCore::WebKitMediaKeySession::hasPendingActivity):
        (WebCore::WebKitMediaKeySession::stop):
        (WebCore::WebKitMediaKeySession::activeDOMObjectName):
        (WebCore::WebKitMediaKeySession::canSuspendForDocumentSuspension):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeySession.h.
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeySession.idl.
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp.
        (WebCore::WebKitMediaKeys::create):
        (WebCore::WebKitMediaKeys::WebKitMediaKeys):
        (WebCore::WebKitMediaKeys::~WebKitMediaKeys):
        (WebCore::WebKitMediaKeys::createSession):
        (WebCore::WebKitMediaKeys::isTypeSupported):
        (WebCore::WebKitMediaKeys::setMediaElement):
        (WebCore::WebKitMediaKeys::cdmMediaPlayer):
        (WebCore::WebKitMediaKeys::keyAdded):
        (WebCore::WebKitMediaKeys::cachedKeyForKeyId):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeys.h.
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl: Renamed from Source/WebCore/Modules/encryptedmedia/MediaKeys.idl.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::setMediaKeys):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::keys):
        * html/HTMLMediaElement.idl:
        * html/WebKitMediaKeyError.h: Renamed from Source/WebCore/html/MediaKeyError.h.
        (WebCore::WebKitMediaKeyError::create):
        (WebCore::WebKitMediaKeyError::WebKitMediaKeyError):
        * html/WebKitMediaKeyError.idl: Renamed from Source/WebCore/html/MediaKeyError.idl.
        * testing/MockCDM.cpp:
        (WebCore::MockCDMSession::generateKeyRequest):
        (WebCore::MockCDMSession::update):

2016-10-09  Zan Dobersek  <zdobersek@igalia.com>

        Remove stale ENABLE(ENCRYPTED_MEDIA) code in HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=163111

        Reviewed by Alex Christensen.

        Remove three method implementations in HTMLMediaElement which had their
        declarations and the related WebIDL entries removed in the first ENCRYPTED_MEDIA
        purge in r206440.

        No new tests -- no changes in behavior.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitGenerateKeyRequest): Deleted.
        (WebCore::HTMLMediaElement::webkitAddKey): Deleted.
        (WebCore::HTMLMediaElement::webkitCancelKeyRequest): Deleted.

2016-10-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support InputEvent.inputType for the new InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163025
        <rdar://problem/28658092>

        Reviewed by Darin Adler.

        Adds support for the inputType attribute of InputEvent. To do this, we introduce a helper to
        map EditActions to inputType names, and also split out ambiguous EditActions (such as
        EditActionTyping) into more specific subtypes (such as EditActionTypingDeleteBackward,
        EditActionTypingInsertParagraph, etc.), each of which corresponds to an inputType.

        In places where we create CompositeEditCommands, we now pass in these specific EditActions
        where appropriate, and when dispatching `beforeinput` and `input` events, we ask the
        CompositeEditCommand for its input type name, which it derives from its editingAction.

        Tests: fast/events/before-input-prevent-biu.html
               fast/events/before-input-prevent-cut.html
               fast/events/before-input-prevent-paste.html
               fast/events/before-input-prevent-typing.html
               fast/events/before-input-prevent-undo.html

        * dom/InputEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchInputEvent):
        * dom/Node.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::inputEventTypeName):

        Allows a CompositeEditCommand to specify the inputType its corresponding `beforeinput` and `input` events
        should have.

        * editing/CompositeEditCommand.h:
        (WebCore::CompositeEditCommand::shouldStopCaretBlinking): Deleted.
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::willUnapplyEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::willReapplyEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::computeAndSetTypingStyle):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::editingAction):
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::preservesTypingStyle): Deleted.
        (WebCore::InsertListCommand::editingAction): Deleted.
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::ReplaceRangeWithTextCommand):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        * editing/TypingCommand.cpp:
        (WebCore::editActionForTypingCommand):
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::inputEventTypeName):

        The editingAction() of a TypingCommand is the first editing action the TypingCommand was initialized using.
        Since subsequent typing commands update the last open typing command, we override inputEventTypeName here to
        use the last updated editing action rather than the default (initial) editing action.

        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/TypingCommand.h:

2016-10-09  Darin Adler  <darin@apple.com>

        Move ApplePaySession from legacy to new DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163191

        Reviewed by Sam Weinig.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create): Use ExceptionOr.
        (WebCore::ApplePaySession::ApplePaySession): Moved initialization
        of two of the data members to class definition.
        (WebCore::ApplePaySession::supportsVersion): Use ExceptionOr.
        (WebCore::ApplePaySession::canMakePayments): Ditto.
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): Ditto.
        (WebCore::ApplePaySession::openPaymentSetup): Ditto.
        (WebCore::ApplePaySession::begin): Ditto.
        (WebCore::ApplePaySession::abort): Ditto.
        (WebCore::ApplePaySession::completeMerchantValidation): Ditto.
        (WebCore::ApplePaySession::completeShippingMethodSelection): Ditto.
        (WebCore::ApplePaySession::completeShippingContactSelection): Ditto.
        (WebCore::ApplePaySession::completePaymentMethodSelection): Ditto.
        (WebCore::ApplePaySession::completePayment): Ditto.
        (WebCore::ApplePaySession::validateMerchant): Use auto and get instead of
        using a RefPtr type and * for event dispatching.
        (WebCore::ApplePaySession::didAuthorizePayment): Ditto.
        (WebCore::ApplePaySession::didSelectShippingMethod): Ditto.
        (WebCore::ApplePaySession::didSelectShippingContact): Ditto.
        (WebCore::ApplePaySession::didSelectPaymentMethod): Ditto.
        (WebCore::ApplePaySession::didCancelPayment): Ditto.
        (WebCore::ApplePaySession::paymentCoordinator): Moved dereferencing
        inside the downcast.

        * Modules/applepay/ApplePaySession.h: Updated for changes above.

        * Modules/applepay/ApplePaySession.idl: Use MayThrowException.

        * bindings/js/JSApplePaySessionCustom.cpp:
        (WebCore::JSApplePaySession::completeShippingMethodSelection):
        Use propagateException.
        (WebCore::JSApplePaySession::completeShippingContactSelection): Ditto.
        (WebCore::JSApplePaySession::completePaymentMethodSelection): Ditto.

        * bindings/js/JSDOMBinding.h: Added implementation of toJSBoolean.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition): Generate the different arguments for
        toJSNewlyCreated when ConstructorMayThrowException is specified that
        activate the version of that function that handles exceptions.

        * bindings/scripts/IDLAttributes.txt: Added ConstructorMayThrowException.

2016-10-09  Darin Adler  <darin@apple.com>

        Replace all uses of ExceptionCodeWithMessage with WebCore::Exception
        https://bugs.webkit.org/show_bug.cgi?id=163178

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::stringToDirection): Return an Optional instead of
        using an ExceptionCode out argument, since this function just needs to
        indicate failure, not actually throw an exception.
        (WebCore::IDBCursor::update): Return ExceptionOr instead of using an
        ExceptionCodeWithMessage out argument.
        (WebCore::IDBCursor::advance): Ditto.
        (WebCore::IDBCursor::continueFunction): Ditto.
        (WebCore::IDBCursor::deleteFunction): Ditto.
        * Modules/indexeddb/IDBCursor.h: Updated for above changes.

        * Modules/indexeddb/IDBCursor.idl: Sorted extended attributes alphabetically.
        Use MayThrowException instead of MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBDatabase::transaction): Ditto.
        (WebCore::IDBDatabase::deleteObjectStore): Ditto.
        * Modules/indexeddb/IDBDatabase.h: Updated for above changes.

        * Modules/indexeddb/IDBDatabase.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBFactory::openInternal): Ditto.
        (WebCore::IDBFactory::deleteDatabase): Ditto.
        (WebCore::IDBFactory::cmp): Ditto.
        * Modules/indexeddb/IDBFactory.h: Updated for above changes.

        * Modules/indexeddb/IDBFactory.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBIndex::count): Ditto.
        (WebCore::IDBIndex::doCount): Ditto.
        (WebCore::IDBIndex::openKeyCursor): Ditto.
        (WebCore::IDBIndex::get): Ditto.
        (WebCore::IDBIndex::doGet): Ditto.
        (WebCore::IDBIndex::getKey): Ditto.
        (WebCore::IDBIndex::doGetKey): Ditto.
        * Modules/indexeddb/IDBIndex.h: Updated for above changes.

        * Modules/indexeddb/IDBIndex.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only): Return ExceptionOr instead of
        using an ExceptionCode out argument.
        (WebCore::IDBKeyRange::lowerBound): Ditto.
        (WebCore::IDBKeyRange::upperBound): Ditto.
        (WebCore::IDBKeyRange::bound): Ditto.
        * Modules/indexeddb/IDBKeyRange.h: Updated for above changes.
        * Modules/indexeddb/IDBKeyRange.idl: Use MayThrowException instead of
        MayThrowLegacyException.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBObjectStore::get): Ditto.
        (WebCore::IDBObjectStore::add): Ditto.
        (WebCore::IDBObjectStore::put): Ditto.
        (WebCore::IDBObjectStore::putForCursorUpdate): Ditto.
        (WebCore::IDBObjectStore::putOrAdd): Ditto.
        (WebCore::IDBObjectStore::deleteFunction): Ditto.
        (WebCore::IDBObjectStore::doDelete): Ditto.
        (WebCore::IDBObjectStore::clear): Ditto.
        (WebCore::IDBObjectStore::createIndex): Ditto.
        (WebCore::IDBObjectStore::index): Ditto.
        (WebCore::IDBObjectStore::deleteIndex): Ditto.
        (WebCore::IDBObjectStore::count): Ditto.
        (WebCore::IDBObjectStore::doCount): Ditto.
        * Modules/indexeddb/IDBObjectStore.h: Updated for above changes.

        * Modules/indexeddb/IDBObjectStore.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::errorCode): Deleted. Was dead code.
        (WebCore::IDBRequest::error): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        * Modules/indexeddb/IDBRequest.h: Updated for above changes.

        * Modules/indexeddb/IDBRequest.idl: Use GetterMayThrowException instead of
        GetterMayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::stringToMode): Return an Optional instead of
        using an ExceptionCode out argument, since this function just needs to
        indicate failure, not actually throw an exception.
        (WebCore::IDBTransaction::db): Tweaked code a bit.
        (WebCore::IDBTransaction::error): Return a pointer instead of a RefPtr.
        (WebCore::IDBTransaction::objectStore): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBTransaction::abortDueToFailedRequest): Call internalAbort.
        (WebCore::IDBTransaction::abort): Return ExceptionOr instead of
        using an ExceptionCodeWithMessage out argument.
        (WebCore::IDBTransaction::internalAbort): Added a version that asserts
        instead of throwing an exception for internal use.
        (WebCore::IDBTransaction::stop): Call internalAbort.
        * Modules/indexeddb/IDBTransaction.h: Updated for above changes.

        * Modules/indexeddb/IDBTransaction.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::openDatabase): Updated to return
        a Ref instead of a RefPtr, since the function can never return null.
        (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase): Ditto.
        * Modules/indexeddb/client/IDBConnectionProxy.h: Updated for above changes.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask): Updated
        exception handling to use ExceptionOr instead of ExceptionCodeWithMessage.
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask): Ditto.
        * Modules/mediastream/MediaEndpointSessionDescription.cpp:
        (WebCore::MediaEndpointSessionDescription::create): Ditto.
        * Modules/mediastream/MediaEndpointSessionDescription.h: Updated for above change.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMException): Added overload for Exception.
        (WebCore::throwDOMException): Deleted overload for ExceptionCodeWithMessage.
        Updated code to call the new createDOMException function.
        (WebCore::setDOMExceptionSlow): Ditto.
        (WebCore::setDOMException): Ditto.

        * bindings/js/JSDOMBinding.h: Added overload of createDOMException that takes
        an Exception. Deleted functions dealing with ExceptionCodeWithMessage. Fixed
        interface of toJSNumber and toJSNullableNumber and implemented toJSNumber.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::reject): Added overload that takes an Exception.
        * bindings/js/JSDOMPromise.h: Updated for above change.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState): Use propagateException to deal with
        ExceptionOr instead of ExceptionCodeWithMessage.
        (WebCore::JSHistory::replaceState): Ditto.

        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::createObjectStore): Use toJS and
        to deal with ExceptionOr rather than setDOMException to deal
        with ExceptionCodeWithMessage.

        * bindings/js/JSIDBRequestCustom.cpp:
        (WebCore::JSIDBRequest::result): Use propagateException and
        Exception rather than setDOMException and ExceptionCodeWithMessage.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Removed support for GetterMayThrowLegacyExceptionWithMessage,
        SetterMayThrowLegacyExceptionWithMessage, and MayThrowLegacyExceptionWithMessage.
        (GenerateReturnParameters): Ditto.
        (GenerateImplementationFunctionCall): Ditto.
        (GenerateConstructorDefinition): Ditto.

        * bindings/scripts/IDLAttributes.txt: Removed GetterMayThrowLegacyExceptionWithMessage,
        SetterMayThrowLegacyExceptionWithMessage, and MayThrowLegacyExceptionWithMessage.

        * bindings/scripts/test/JS/JSTestObj.cpp: Regenerated.
        * bindings/scripts/test/TestObj.idl: Removed tests cases for now-removed attributes.

        * dom/CustomElementRegistry.idl: Use MayThrowException instead of
        MayThrowLegacyExceptionWithMessage.

        * dom/ExceptionCode.h: Removed ExceptionCodeWithMessage. Also updated to use pragma
        once, removed include of WTFString.h and switched to using instead of typedef.

        * history/HistoryItem.h: Return a pointer instead of a RefPtr from stateObject
        to cut down a little on unnecessary reference count churn.

        * inspector/InspectorIndexedDBAgent.cpp: Updated all the code that uses IDB
        classes to use the new versions rather than the old ExceptionCodeWithMessage versions.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::history): Pass a reference instead of a pointer.

        * page/History.cpp:
        (WebCore::History::History): Take a reference instead of a pointer.
        (WebCore::History::length): Tweaked to use a local variable.
        (WebCore::History::state): Return a pointer instead of a PassRefPtr.
        (WebCore::History::stateInternal): Ditto. Also use early return consistently.
        (WebCore::History::isSameAsCurrentState): Updated for above change.
        (WebCore::History::stateObjectAdded): Return ExceptionOr rather than taking an
        ExceptionCodeWithMessage out argument.

        * page/History.h: Use pragma once. Removed some unneeded includes. Marked class final.
        Updated for changes above.

        * page/History.idl: Use MayThrowException instead of MayThrowLegacyException.

2016-10-07  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r165103): labels list doesn't get invalidated when other lists are invalidated at document level
        https://bugs.webkit.org/show_bug.cgi?id=163145

        Reviewed by Darin Adler.

        The bug was caused by Document::invalidateNodeListAndCollectionCaches removing all node lists regardless
        of whether they have been invalidated or not.

        Fixed the bug by removing only those node lists that got invalidated via LiveNodeList::invalidateCache.

        Test: fast/dom/NodeList/form-labels-length.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::unregisterNodeListForInvalidation): Removed the conditional which allowed removal to
        happen while m_listsInvalidatedAtDocument is empty inside invalidateNodeListAndCollectionCaches.
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches): Just remove the node lists being invalidated via
        LiveNodeList's invalidateCache, which calls unregisterNodeListForInvalidation, instead of removing them all.
        We make a copy of the list of node lists into a local vector because mutating HashMap while iterating over it
        is not a safe operation.

2016-10-09  Chris Dumez  <cdumez@apple.com>

        Update generated bindings code so that dictionary structures no longer need explicit constructors
        https://bugs.webkit.org/show_bug.cgi?id=163188

        Reviewed by Darin Adler.

        Update generated bindings code so that dictionary structures no longer
        need explicit constructors. We now call the default constructor and
        then initialize the members one by one.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):
        (WebCore::convertDictionary<TestObj::ParentDictionary>):
        (WebCore::convertDictionary<TestObj::ChildDictionary>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<TestStandaloneDictionary>):
        * dom/ClipboardEvent.h:
        * dom/CustomEvent.h:
        * dom/EventInit.h:
        (WebCore::EventInit::EventInit): Deleted.
        * dom/EventModifierInit.h:
        (WebCore::EventModifierInit::EventModifierInit): Deleted.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/UIEventInit.h:
        (WebCore::UIEventInit::UIEventInit): Deleted.
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):

2016-10-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] CMake does not support the dep files for implicit dependency
        https://bugs.webkit.org/show_bug.cgi?id=161433

        Reviewed by Brent Fulgham.

        Created a Perl script to generate all IDL bindings for CMake.
        This script can regenerate outdated bindings by based on the
        supplemental dependency and dep files created by
        '--write-dependencies' switch of generate-bindings.pl.

        add_custom_target is used to invoke the script instead of
        add_custom_command because Ninja deletes all output files before
        executing the command in case of add_custom_command.

        USES_TERMINAL option of add_custom_target has two effects:
        1) Not buffering output of the command
        2) Invoking the command in the special Ninja pool which inhibits parallel build
        One needs to use CMake 3.2 or later to enable this feature.

        * CMakeLists.txt: Specified target names for
        GENERATE_BINDINGS. Added dependency for the targets.
        * bindings/scripts/generate-bindings-all.pl: Added.

2016-10-09  Chris Dumez  <cdumez@apple.com>

        Update KeyboardEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163176

        Reviewed by Darin Adler.

        Update KeyboardEvent to stop using legacy [ConstructorTemplate=Event]
        and use a proper constructor instead, like in the specification:
        - https://www.w3.org/TR/uievents/#interface-keyboardevent

        Also add support for passing modifierAltGraph / modifierCapsLock
        in the inialization dictionary as we support those modifiers via
        getModifierState().

        No new tests, extended existing test.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventModifierInit.h: Added.
        (WebCore::EventModifierInit::EventModifierInit):
        * dom/EventModifierInit.idl: Added.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::getModifierState):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        * dom/UIEvent.h:
        (WebCore::UIEvent::create): Deleted.
        * dom/UIEventInit.h: Added.
        (WebCore::UIEventInit::UIEventInit):
        * dom/UIEventInit.idl: Added.
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::altGraphKey):
        (WebCore::UIEventWithKeyState::capsLockKey):
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        (WebCore::UIEventWithKeyState::ctrlKey): Deleted.
        (WebCore::UIEventWithKeyState::shiftKey): Deleted.
        (WebCore::UIEventWithKeyState::altKey): Deleted.
        (WebCore::UIEventWithKeyState::metaKey): Deleted.

2016-10-09  Youenn Fablet  <youenn@apple.com>

        Promise attribute getters should reject promises in case of casted-this errors
        https://bugs.webkit.org/show_bug.cgi?id=163167

        Reviewed by Darin Adler.

        Covered by updated test and binding test.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::throwGetterTypeError):
        (WebCore::rejectPromiseWithGetterTypeError): Added to reject promises for attribute getters
        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::attribute): Introducing promise rejection for type cast errors.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp: Rebased test. As can be seen, only custom promise attributes are supported.
        (WebCore::jsTestObjTestReadOnlyPromiseAttribute):
        (WebCore::jsTestObjTestReadOnlyPromiseAttributeGetter):
        * bindings/scripts/test/TestObj.idl:

2016-10-08  Chris Dumez  <cdumez@apple.com>

        [Mac] Write WebArchive to the pasteboard when copying image in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=163100

        Reviewed by Darin Adler.

        Write WebArchive to the pasteboard when copying image in WebKit. This
        fixes pasting such images to a content editable field in WebKit because
        Web archives take priority over RTFD when reading from the pasteboard
        in WebKit.

        Using RTFD when pasting the image in WebKit was causing issues because:
        1. The pasted image would not be displayed because our RTFD import code
           is buggy.
        2. The pasted image URL was a webkit-fake-url://
        3. Formatting associated to the image (e.g. inline style) would be lost

        No new tests, unskipped existing test on WebKit2.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::imageInWebArchiveFormat):
        (WebCore::Editor::writeImageToPasteboard):
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::Pasteboard): Deleted.
        (WebCore::Pasteboard::createForCopyAndPaste): Deleted.

2016-10-08  Chris Dumez  <cdumez@apple.com>

        Update CustomEvent to stop using legacy [ConstructorTemplate=Event]
        https://bugs.webkit.org/show_bug.cgi?id=163174

        Reviewed by Darin Adler.

        Update CustomEvent to stop using legacy [ConstructorTemplate=Event] and
        use an actual constructor instead, like in the specification:
        - https://dom.spec.whatwg.org/#interface-customevent

        There is a very minor behavior change when explictly passing undefined
        as detail value in CustomEventInit. We used to initialize detail to
        undefined but we now initialize it to null instead, which is its default
        value. The new behavior matches the one of Chrome and Firefox.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        * bindings/scripts/test/TestObj.idl:
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::CustomEvent):
        * dom/CustomEvent.h:
        * dom/CustomEvent.idl:
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:

2016-10-08  Chris Dumez  <cdumez@apple.com>

        Add support for ClipboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=163164

        Reviewed by Darin Adler.

        Add support for ClipboardEvent:
        - https://www.w3.org/TR/clipboard-apis/#clipboard-event-interfaces

        Firefox and Chrome both already support this.

        This gives us 5 more points on html5test.com.

        Tests: editing/pasteboard/clipboard-event.html
               fast/events/clipboard-event-constructor.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJSNewlyCreated): Deleted.

        * bindings/scripts/CodeGeneratorJS.pm:
        (WillConvertUndefinedToDefaultParameterValue):
        We use [] as implicit default value for dictionary parameters. This change
        is so we call convertDictionary<>() even if the parameter is undefined
        because we want to pass a struct to the implementation initialized with
        the default member values defined in the IDL.

        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::ClipboardEvent):
        (WebCore::ClipboardEvent::eventInterface):
        * dom/ClipboardEvent.h:
        * dom/ClipboardEvent.idl: Added.
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        * dom/Event.idl:
        * dom/EventInit.h: Added.
        * dom/EventInit.idl: Added.
        * dom/EventNames.in:
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::dataTransfer):
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):

2016-10-06  Darin Adler  <darin@apple.com>

        Next step on moving to modern way to return DOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=163016

        Reviewed by Ryosuke Niwa.

        * Modules/fetch/FetchRequest.idl:
        Added MayThrowException to initializeWith since it throws an exception.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        (WebCore::reportCurrentException):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::reportException):
        Use JSC::Exception explicitly to avoid ambiguity with WebCore::Exception,
        or in some cases use auto instead.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::hasUnpairedSurrogate): Factored this inline function out of valueToUSVString
        for clarity.
        (WebCore::createDOMException): Removed unused TRY_TO_CREATE_EXCEPTION macro.
        (WebCore::propagateExceptionSlowPath): Added.
        (WebCore::propagateException): Added.
        (WebCore::setDOMException): Removed overload that takes an exception code and message
        string separately; no longer needed.

        * bindings/js/JSDOMBinding.h: Include the ExceptionOr header
        rather than forward declaring. Added more of the ExceptionOr handling
        functions; some just declared and not yet defined. Updated for changes
        to ExceptionOr interface. Removed the createDOMException function that takes
        only an exception code; not needed outside JSDOMBinding.cpp.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send): Rewrote this to use ExceptionOr instead
        of ExceptionCode. Added some FIXMEs as well.
        (WebCore::JSXMLHttpRequest::responseText): Ditto.
        (WebCore::JSXMLHttpRequest::retrieveResponse): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Fixed if statements to follow WebKit coding style
        rather than using extra braces. Added call to propagateException for SetterMayThrowException.
        (GenerateSerializerFunction): Fixed if statements as above.
        (GenerateParametersCheck): Ditto. Also added call to propagateException for functions with
        void return type and MayThrowException.
        (GenerateReturnParameters): Tweaked coding style a bit.
        (addIterableProperties): Fixed if statements as above.
        (NativeToJSValue): Added code to handle various cases of GetterMayThrowException
        and MayThrowException.
        (GenerateConstructorDefinition): Used encodedJSValue() instead of
        JSValue::encode(JSValue()), a longer way to say the same thing.

        * bindings/scripts/IDLAttributes.txt: Added GetterMayThrowException,
        MayThrowException, and SetterMayThrowException.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        Regenerated results.

        * bindings/scripts/test/TestObj.idl: Added some test cases.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocumentType): Tweaked formatting.
        (WebCore::DOMImplementation::createDocument): Ditto.

        * dom/DOMImplementation.idl: Added MayThrowException to two functions since
        I am abandoning, for now, the ability to throw exceptions without any extended
        attribute in the IDL file. This feature may return at some point if we figure
        out a way to do it for functions without return values as well as functions with.

        * dom/Document.cpp:
        (WebCore::Document::exitPointerLock): Rewrote to streamline logic.
        (WebCore::Document::pointerLockElement): Ditto.
        (WebCore::Document::inputCursor): Added. No need for this to be inlined.
        (WebCore::Document::setInputCursor): Changed to take Ref&&.
        (WebCore::Document::getSelection): Added. Moved here from TreeScope.

        * dom/Document.h: Updated for above changes.

        * dom/Document.idl: Tweaked formatting.

        * dom/Exception.h: Merged the two constructors into one with a default
        argument value, which should be equally efficient. Added releaseMessage function.
        Added assertion that this is only created for actual exceptions with non-zero
        ExceptionCode. Unlike ExceptionCode, which has a value of 0 which means no
        exception, we do not create an Exception if there is no exception.

        * dom/ExceptionOr.h: Renamed takeReturnValue to releaseReturnValue. Replaced
        exceptionCode and exceptionMessage with releaseException. Added ExceptionOr<void>
        specialization.

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::~TreeScope): Removed code dealing with
        m_selection, which is now in Document.
        (WebCore::TreeScope::getSelection): Deleted.

        * dom/TreeScope.h: Removed DOMSelection.

        * page/DOMSelection.cpp:
        (WebCore::selectionShadowAncestor): Changed to take a reference rather than
        a guaranteed-non-null pointer.
        (WebCore::DOMSelection::DOMSelection): Changed to take a Frame& instead of
        of a TreeScope*.
        (WebCore::DOMSelection::clearTreeScope): Deleted.
        (WebCore::DOMSelection::isCollapsed): Updated call to selectionShadowAncestor.
        (WebCore::DOMSelection::type): Took out obsolete uneeeded comment. Got rid
        of case where this returns a null string. Use ASCIILiteral.
        (WebCore::DOMSelection::rangeCount): Streamlined code.
        (WebCore::DOMSelection::collapse): Removed redundant check of m_frame for
        null which is already handled by the isValidForPosition function.
        Removed non-helpful FIXME.
        (WebCore::DOMSelection::collapseToEnd): Changed to use ExceptionOr instead of
        ExceptionCode.
        (WebCore::DOMSelection::collapseToStart): Ditto.
        (WebCore::DOMSelection::setBaseAndExtent): Removed redundant check of m_frame
        for null which is already handled by the isValidForPosition function. Removed
        non-helpful FIXME.
        (WebCore::DOMSelection::setPosition): Ditto.
        (WebCore::DOMSelection::extend): Changed to use ExceptionOr instead of
        ExceptionCode.
        (WebCore::DOMSelection::getRangeAt): Ditto.
        (WebCore::DOMSelection::isValidForPosition): Changed to return false when
        m_frame is null rather than asserting is is non-null and having every caller
        check m_frame before calling this.

        * page/DOMSelection.h: Use #pragma once. Fix indentation. Removed unneeded
        comments. Use ExceptionOr rather than ExceptionCode.

        * page/DOMSelection.idl: Move from MayThrowLegacyException to MayThrowException.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetDOMWindowProperties): Sorted properties alphabetically
        to make it more obvious if any are accidentally omitted or listed twice.
        (WebCore::DOMWindow::getSelection): Changed ownership so that the window owns
        the selection like all the other objects, rather than having it be owned by the
        document instead.

        * page/DOMWindow.h: Added m_selection, sorted all the other related properties
        alphabetically so it's easy to compare the list here with elsewhere.

        * replay/ReplayController.cpp:
        (WebCore::ReplayController::frameNavigated): Updated to call setInputCursor
        with a reference rather than a pointer.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText): Use ExceptionOr rather than ExceptionCode.
        (WebCore::XMLHttpRequest::responseXML): Ditto.
        (WebCore::XMLHttpRequest::setTimeout): Ditto.
        (WebCore::XMLHttpRequest::setResponseType): Ditto.
        (WebCore::XMLHttpRequest::setWithCredentials): Ditto.
        (WebCore::XMLHttpRequest::open): Ditto.
        (WebCore::XMLHttpRequest::prepareToSend): Changed to return an
        Optional<ExceptionOr> to reflect the three different states: an exception,
        a value to return without sending, or "continue with the send algorithm".
        The old code did this with a boolean plus an exception code. This sounds
        confusing but is easy to read at the call sites, so probably OK to keep.
        (WebCore::XMLHttpRequest::send): Use ExceptionOr rather than ExceptionCode.
        (WebCore::XMLHttpRequest::sendBytesData): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Ditto.
        (WebCore::XMLHttpRequest::overrideMimeType): Ditto.
        (WebCore::XMLHttpRequest::setRequestHeader): Ditto.

        * xml/XMLHttpRequest.h: Updated for changes above.

        * xml/XMLHttpRequest.idl: Sorted interface extended attributes alphabetically.
        Changed from MayThrowLegacyException to MayThrowException.

2016-10-06  Sam Weinig  <sam@webkit.org>

        Autogenerate passing union types as part of a functions variadic arguments
        https://bugs.webkit.org/show_bug.cgi?id=162919

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Remove deleted files.

        * bindings/generic/IDLTypes.h:
        Switch to use std::reference_wrapper as it's implementation type. We may need more
        granularity here in the future, but this will work for now.

        * bindings/js/JSCharacterDataCustom.cpp: Removed.
        * bindings/js/JSDocumentTypeCustom.cpp: Removed.
        * bindings/js/JSNodeOrString.cpp: Removed.
        * bindings/js/JSNodeOrString.h: Removed.

        * bindings/js/JSDOMBinding.h:
        (WebCore::VariadicHelperBase::convert): Deleted.
        (WebCore::toArguments): Deleted.
        Moved to JSDOMConvert.h and renamed to convertVariadicArguments and make
        it work in terms of IDLTypes.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLInterface<T>>::convert):
        (WebCore::VariadicConverterBase::convert):
        (WebCore::VariadicConverterBase<IDLInterface<T>>::convert):
        (WebCore::convertVariadicArguments):

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::prepend): Deleted.
        (WebCore::JSDocument::append): Deleted.
        * bindings/js/JSDocumentFragmentCustom.cpp:
        (WebCore::JSDocumentFragment::prepend): Deleted.
        (WebCore::JSDocumentFragment::append): Deleted.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::before): Deleted.
        (WebCore::JSElement::after): Deleted.
        (WebCore::JSElement::replaceWith): Deleted.
        (WebCore::JSElement::prepend): Deleted.
        (WebCore::JSElement::append): Deleted.
        Remove now generated functions.

        * bindings/scripts/CodeGenerator.pm:
        (assert):
        Add assert to help debugging.

        (ParseInterface):
        Don't treat union types as interfaces.

        (GetFlattenedMemberTypes):
        (GetNumberOfNullableMemberTypes):
        (GetIDLUnionMemberTypes):
        Implement WebIDL algorithms for getting the flattened member list of union, and use it
        to construct the c++ IDLType.

        (GetBaseIDLType):
        (GetIDLType):
        Add helper to convert an parsed idlType to a c++ IDLType.

        (IsWrapperType):
        Don't treat union types as wrappers.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToImplIncludesForIDLType):
        Add helper for adding #includes based on a parsed idlType. It recursively handles union types.

        (GenerateParametersCheck):
        Use the new convertVariadicArguments function to handle all variadic arguments, including
        union types.

        * bindings/scripts/IDLParser.pm:
        (parseDictionaryMember):
        (parseAttributeRest):
        (parseOptionalOrRequiredArgument):
        (parseExceptionField):
        Add an idlType to domSignature and populate it.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod13):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethod):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors5):
        * bindings/scripts/test/TestObj.idl:
        Add and update tests.

        * dom/ChildNode.idl:
        * dom/ParentNode.idl:
        Remove Custom extended attribute.

        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        * dom/Node.h:
        Switch to using std::reference_wrapper instead of Ref<> for passed in parameters.

2016-10-08  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Request constructor should provide exception messages
        https://bugs.webkit.org/show_bug.cgi?id=162382

        Reviewed by Darin Adler.

        No change of behavior, except that exceptions now have error messages.

        Added support of exception messages to ExceptionOr.
        Making use of ExceptionOr for Request constructor parameter checking.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setReferrerPolicy):
        (WebCore::setMode):
        (WebCore::setCredentials):
        (WebCore::setCache):
        (WebCore::setRedirect):
        (WebCore::setMethod):
        (WebCore::setReferrer):
        (WebCore::buildOptions):
        (WebCore::FetchRequest::initializeOptions):
        (WebCore::FetchRequest::initializeWith):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * dom/Exception.h:
        (WebCore::Exception::code):
        (WebCore::Exception::message):
        (WebCore::Exception::Exception):
        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::exceptionMessage):

2016-10-08  Youenn Fablet  <youenn@apple.com>

        Refactor binding generated casted-this checks
        https://bugs.webkit.org/show_bug.cgi?id=162677

        Reviewed by Darin Adler.

        No change of behavior.

        Split the attribute getter function in two, one with the signature expected by JSCore and one used after casted-this checks.

        The second function takes directly a JSXX object and returns a JSValue instead of an EncodedJSValue.
        In the future, the second function should only take references.

        Introducing BindingCaller as a way to templatize binding code used to cast thisValue with the desired JSXX value.
        This allows implementing the first function using the second function as template parameter.

        Introducing JSClass::castForAttribute as a way to encapsulate differences in the way to handle thisValue access.

        * bindings/js/JSDOMBinding.h:
        (WebCore::BindingCaller::attribute):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.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:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSattribute.h:

2016-10-08  Enrique Ocaña González  <eocanha@igalia.com>

        Missing include in MediaDescription
        https://bugs.webkit.org/show_bug.cgi?id=162873

        Reviewed by Xabier Rodriguez-Calvar.

        Added missing header.

        * platform/MediaDescription.h:

2016-10-08  Antti Koivisto  <antti@apple.com>

        Move StyleResolver ownership from Document/ShadowRoot to Style::Scope
        https://bugs.webkit.org/show_bug.cgi?id=163148

        Reviewed by Andreas Kling.

        Reduce duplication between Document and ShadowRoot.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::ElementRuleCollector::matchSlottedPseudoElementRules):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentElementUserAgentStyle):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::mediaConditionMatches):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::isPageBoxVisible):
        (WebCore::Document::pageSizeAndMarginsInPixels):
        (WebCore::Document::userAgentShadowTreeStyleResolver):
        (WebCore::Document::fontsNeedUpdate):
        (WebCore::Document::didClearStyleResolver):
        (WebCore::Document::updateViewportUnitsOnResize):
        (WebCore::Document::createStyleResolver): Deleted.
        (WebCore::Document::clearStyleResolver): Deleted.
        * dom/Document.h:
        (WebCore::Document::styleResolverIfExists): Deleted.
        (WebCore::Document::ensureStyleResolver): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::styleResolver):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::styleResolver): Deleted.
        (WebCore::ShadowRoot::styleResolverIfExists): Deleted.
        (WebCore::ShadowRoot::resetStyleResolver): Deleted.
        * dom/ShadowRoot.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Page.cpp:
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostStyle):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostStyle):
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostStyle):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::resolverIfExists):
        (WebCore::Style::Scope::clearResolver):
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        (WebCore::Style::Scope::updateStyleResolver):
        (WebCore::Style::Scope::styleResolver): Deleted.
        (WebCore::Style::Scope::styleResolverIfExists): Deleted.
        * style/StyleScope.h:
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::resolve):
        (WebCore::Style::SharingResolver::canShareStyleWithElement):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::resolve):

2016-10-07  Chris Dumez  <cdumez@apple.com>

        window.navigator.language incorrectly returns all lowercase string
        https://bugs.webkit.org/show_bug.cgi?id=163096

        Reviewed by Darin Adler.

        Update navigator.language so that it no longer returns an all lowercase
        string (e.g. 'en-us' -> 'en-US'). This matches the behavior of other
        browsers and the specification which indicate we should return a
        BCP 47 language tag:
        - https://html.spec.whatwg.org/#dom-navigator-language
        - https://tools.ietf.org/html/bcp47

        The other call sites relying on userPreferredLanguages() use case
        insensitive comparison so they will not break.

        No new tests, updated existing test.

        * platform/Language.h:

2016-10-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support onbeforeinput event handling for the new InputEvent spec
        https://bugs.webkit.org/show_bug.cgi?id=163021
        <rdar://problem/28658073>

        Reviewed by Darin Adler.

        Adds support for parsing the onbeforeinput attribute, and for sending default-preventable
        `beforeinput` InputEvents to the page. To do this, we introduce two new virtual methods:
        willApplyCommand and didApplyCommand on the CompositeEditCommand that are called before and
        after CompositeEditCommand::doApply, respectively. willApplyCommand indicates whether or not
        the composite editor command should proceed with applying the command.

        Tweaks existing layout tests and adds new tests.

        Tests: fast/events/before-input-events-different-start-end-elements.html
               fast/events/before-input-events-prevent-default-in-textfield.html
               fast/events/before-input-events-prevent-default.html

        * dom/Document.idl:
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchInputEvent):
        (WebCore::Node::defaultEventHandler):

        Currently, we fire input events in Node in response to dispatching a webkitEditableContentChangedEvent. After
        some discussion, Ryosuke and I believe that it will be ok to instead directly dispatch the input event where we
        would normally dispatch a webkitEditableContentChangedEvent.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):

        Added calls to Editor::willUnapplyEditing and Editor::willReapplyEditing.

        (WebCore::CompositeEditCommand::willApplyCommand):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::didApplyCommand):

        Added new virtual functions, willApplyCommand and didApplyCommand, that surround a call to
        CompositeEditCommand::doApply. By default, they call willApplyEditing and appliedEditing on the editor, but may
        be overridden in special cases, such as in TypingCommand, where we invoke appliedEditing after adding a new
        typing command to the last open command.

        If willApplyCommand returns false, CompositeEditCommand::apply will bail and not proceed with the command.

        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchBeforeInputEvents):
        (WebCore::dispatchInputEvents):
        (WebCore::Editor::willApplyEditing):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::willUnapplyEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::willReapplyEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::computeAndSetTypingStyle):
        (WebCore::dispatchEditableContentChangedEvents): Deleted.
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::willApplyCommand):
        (WebCore::TypingCommand::didApplyCommand):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::deleteSelection):

        These now invoke willAddTypingToOpenCommand before proceeding with creating the command and applying it. The
        flow is now:
            - willAddTypingToOpenCommand
            - create and apply a new command
            - typingAddedToOpenCommand

        * editing/TypingCommand.h:
        (WebCore::TypingCommand::preservesTypingStyle): Deleted.
        (WebCore::TypingCommand::shouldRetainAutocorrectionIndicator): Deleted.
        (WebCore::TypingCommand::setShouldRetainAutocorrectionIndicator): Deleted.
        (WebCore::TypingCommand::shouldStopCaretBlinking): Deleted.
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2016-10-07  Nan Wang  <n_wang@apple.com>

        AX: <figcaption> should be AXTitleUIElement for other content inside the <figure>
        https://bugs.webkit.org/show_bug.cgi?id=108996

        Reviewed by Chris Fleizach.

        Exposed the figcaption element to be the AXTitleUIElement for the figure element. And used
        the figcaption's content as the accessible name of the figure. Also, updated the figure element's
        role description on Mac.
        Accessible name and description calculation for figure elements: 
        https://w3c.github.io/html-aam/#figure-and-figcaption-elements

        Test: accessibility/mac/figure-element.html

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::captionForFigure):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isFigure):
        (WebCore::AccessibilityObject::isSuperscriptStyleGroup): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXFigureText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXFigureText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXFigureText):

2016-10-07  Alex Christensen  <achristensen@webkit.org>

        Non-special URL fragments should percent-encode non-ASCII characters
        https://bugs.webkit.org/show_bug.cgi?id=163153

        Reviewed by Tim Horton.

        This is needed to keep compatibility with data URLs with non-ASCII characters after a '#'
        which works in Chrome, Firefox, and Safari, while maintaining compatibility with Chrome, IE, and Edge
        which keep non-ASCII characters in the fragments of special URLs.
        This was proposed to the spec in https://github.com/whatwg/url/issues/150

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::syntaxViolation):
        Removed assertion because we now have fragments that need percent encoding but are all ASCII.
        (WebCore::URLParser::fragmentSyntaxViolation):
        (WebCore::URLParser::parse):

2016-10-07  Brent Fulgham  <bfulgham@apple.com>

        EventHandler functions that need to guarantee event handler lifetime need to use Ref<Frame>
        https://bugs.webkit.org/show_bug.cgi?id=98617
        <rdar://problem/12778649>

        Reviewed by Daniel Bates.

        Improve stability by ensuring that the Frame holding an active EventHandler is kept
        alive while in the process of handling events and executing JavaScript.

        No new tests since there is no change in behavior.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick): Protect the Frame with a Ref<>.
        (WebCore::EventHandler::handleMousePressEvent): Ditto.
        (WebCore::EventHandler::handleMouseDraggedEvent): Ditto.
        (WebCore::EventHandler::eventMayStartDrag): Ditto.
        (WebCore::EventHandler::handleMouseReleaseEvent): Ditto.
        (WebCore::EventHandler::hitTestResultAtPoint): Ditto.
        (WebCore::EventHandler::scrollRecursively): Ditto.
        (WebCore::EventHandler::logicalScrollRecursively): Ditto.
        (WebCore::EventHandler::selectCursor): Ditto.
        (WebCore::EventHandler::handleMouseDoubleClickEvent): Ditto.
        (WebCore::EventHandler::mouseMoved): Ditto.
        (WebCore::EventHandler::handleMouseMoveEvent): Ditto.
        (WebCore::EventHandler::handleMouseForceEvent): Ditto.
        (WebCore::EventHandler::dispatchDragEvent): Ditto.
        (WebCore::EventHandler::updateDragAndDrop): Ditto.
        (WebCore::EventHandler::cancelDragAndDrop): Ditto.
        (WebCore::EventHandler::performDragAndDrop): Ditto.
        (WebCore::EventHandler::prepareMouseEvent): Ditto.
        (WebCore::EventHandler::updateMouseEventTargetNode): Ditto.
        (WebCore::EventHandler::dispatchMouseEvent): Ditto.
        (WebCore::EventHandler::platformCompleteWheelEvent): Ditto.
        (WebCore::EventHandler::handleWheelEvent): Ditto.
        (WebCore::EventHandler::defaultWheelEventHandler): Ditto.
        (WebCore::EventHandler::sendContextMenuEvent): Ditto.
        (WebCore::EventHandler::sendContextMenuEventForKey): Ditto.
        (WebCore::EventHandler::hoverTimerFired): Ditto.
        (WebCore::EventHandler::keyEvent): Ditto.
        (WebCore::EventHandler::defaultKeyboardEventHandler): Ditto.
        (WebCore::EventHandler::handleDrag): Ditto.
        (WebCore::EventHandler::handleTextInputEvent): Ditto.
        (WebCore::EventHandler::defaultSpaceEventHandler): Ditto.
        (WebCore::EventHandler::defaultTabEventHandler): Ditto.
        (WebCore::EventHandler::sendScrollEvent): Ditto.
        (WebCore::EventHandler::handleTouchEvent): Ditto.
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::focusDocumentView): Ditto.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompleteWheelEvent): Ditto.

2016-10-07  Chris Dumez  <cdumez@apple.com>

        Regression(r201970): productSub / vendor / vendorSub should not be exposed on WorkerNavigator
        https://bugs.webkit.org/show_bug.cgi?id=163124

        Reviewed by Ryosuke Niwa.

        productSub / vendor / vendorSub should not be exposed on WorkerNavigator:
        - https://html.spec.whatwg.org/#navigatorid

        Test case:
        - http://w3c-test.org/submissions/3881/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker

        Note that the specification also restricts NavigatorID's appCodeName and
        product attributes to Window. However, it seems the HTML specification is
        about to get updated so that these get exposed to workers:
        - https://github.com/whatwg/html/pull/1870

        No new tests, updated existing test.

        * bindings/scripts/generate-bindings.pl:
        (shouldPropertyBeExposed):
        * page/NavigatorID.idl:

2016-10-07  Alex Christensen  <achristensen@webkit.org>

        Disable URLParser logs by default in all builds
        https://bugs.webkit.org/show_bug.cgi?id=163135

        Reviewed by Brady Eidson.

        In debug builds with the URLParser enabled, some tests time out because
        parameters to generate log strings are being evaluated for each character of each URL
        and then not being used if URLParser logs are disabled.  Generating these unused parameters
        is too slow even for debug builds.  Let's only generate them if they are to be used.

        No change in behaviour.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        (WebCore::URLParser::allValuesEqual):

2016-10-07  Andreas Kling  <akling@apple.com>

        [WK2] didRemoveFrameFromHierarchy callback doesn't fire for subframes when evicting from PageCache.
        <https://webkit.org/b/163098>
        <rdar://problem/28663488>

        Reviewed by Antti Koivisto.

        Fix a bug where WK2 didRemoveFrameFromHierarchy callbacks wouldn't fire for subframes that were getting
        kicked out of PageCache. The problem was happening because CachedFrame would disconnect the Frame from
        its Page just before calling FrameLoader::detachViewsAndDocumentLoader() where the callbacks are fired.
        Without a Page, the WebFrame on WK2 side can't find its WebPage, and so it can't fire its callbacks.

        The fix is just to switch the order of those two lines.

        This bug was causing frequent DOM and window object leaks in some clients *cough* Safari *cough* that
        were relying on didRemoveFrameFromHierarchy to release their isolated worlds.

        Test: WebKit2.DidRemoveFrameFromHiearchyInPageCache

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::destroy):

2016-10-07  Nan Wang  <n_wang@apple.com>

        AX: AXRoleDescription for details and summary elements
        https://bugs.webkit.org/show_bug.cgi?id=163094

        Reviewed by Chris Fleizach.

        details and summary elements should have AXRoleDescription that is consistent with other
        elements that have custom AXSubRole.

        Test: accessibility/mac/details-summary-role-description.html

        * English.lproj/Localizable.strings:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXDetailsText):
        (WebCore::AXSummaryText):
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXDetailsText):
        (WebCore::AXSummaryText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXDetailsText):
        (WebCore::AXSummaryText):

2016-10-07  Ryan Haddad  <ryanhaddad@apple.com>

        Fix the Windows build after r206917.

        Unreviewed build fix.

        * dom/DOMAllInOne.cpp:

2016-10-07  Antti Koivisto  <antti@apple.com>

        Rename AuthorStyleSheets to Style::Scope
        https://bugs.webkit.org/show_bug.cgi?id=163108

        Reviewed by Andreas Kling.

        It represents the style scope in DOM.
        Also move the file under style/.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::styleSheetScope):
        * css/CSSStyleSheet.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        * css/InspectorCSSOMWrappers.h:
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::detachFromDocument):
        * dom/AuthorStyleSheets.cpp: Removed.
        * dom/AuthorStyleSheets.h: Removed.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setContentLanguage):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::needsStyleRecalc):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::didRemoveAllPendingStylesheet):
        (WebCore::Document::usesStyleBasedEditability):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::preferredStylesheetSet):
        (WebCore::Document::selectedStylesheetSet):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::haveStylesheetsLoaded):
        * dom/Document.h:
        (WebCore::Document::styleScope):
        (WebCore::Document::authorStyleSheets): Deleted.
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::clearPageUserSheet):
        (WebCore::ExtensionStyleSheets::updatePageUserSheet):
        (WebCore::ExtensionStyleSheets::invalidateInjectedStyleSheetCache):
        (WebCore::ExtensionStyleSheets::addUserStyleSheet):
        (WebCore::ExtensionStyleSheets::addAuthorStyleSheetForTesting):
        (WebCore::ExtensionStyleSheets::styleResolverChangedTimerFired):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::insertedIntoDocument):
        (WebCore::InlineStyleSheetOwner::removedFromDocument):
        (WebCore::InlineStyleSheetOwner::clearDocumentData):
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::sheetLoaded):
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):
        * dom/InlineStyleSheetOwner.h:
        (WebCore::InlineStyleSheetOwner::styleScope):
        (WebCore::InlineStyleSheetOwner::styleSheetScope): Deleted.
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::~ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::insertedInto):
        (WebCore::ProcessingInstruction::removedFrom):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::styleResolver):
        (WebCore::ShadowRoot::styleScope):
        (WebCore::ShadowRoot::updateStyle):
        (WebCore::ShadowRoot::authorStyleSheets): Deleted.
        * dom/ShadowRoot.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::insertedInto):
        (WebCore::HTMLLinkElement::removedFrom):
        (WebCore::HTMLLinkElement::addPendingSheet):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLStyleElement.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::collectAllDocumentStyleSheets):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::resetPseudoStates):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::setPagination):
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        * page/Page.cpp:
        (WebCore::Page::setViewMode):
        (WebCore::Page::setNeedsRecalcStyleInAllFrames):
        (WebCore::Page::invalidateInjectedStyleSheetCacheInAllFrames):
        * style/StyleScope.cpp: Copied from dom/AuthorStyleSheets.cpp.
        (WebCore::Style::Scope::Scope):
        (WebCore::Style::Scope::styleResolver):
        (WebCore::Style::Scope::styleResolverIfExists):
        (WebCore::Style::Scope::forNode):
        (WebCore::Style::Scope::removePendingSheet):
        (WebCore::Style::Scope::addStyleSheetCandidateNode):
        (WebCore::Style::Scope::removeStyleSheetCandidateNode):
        (WebCore::Style::Scope::collectActiveStyleSheets):
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        (WebCore::Style::Scope::updateStyleResolver):
        (WebCore::Style::Scope::activeStyleSheetsForInspector):
        (WebCore::Style::Scope::activeStyleSheetsContains):
        (WebCore::Style::Scope::flushPendingUpdate):
        (WebCore::Style::Scope::clearPendingUpdate):
        (WebCore::Style::Scope::scheduleActiveSetUpdate):
        (WebCore::Style::Scope::didChangeCandidatesForActiveSet):
        (WebCore::Style::Scope::didChangeContentsOrInterpretation):
        (WebCore::Style::Scope::pendingUpdateTimerFired):
        (WebCore::AuthorStyleSheets::AuthorStyleSheets): Deleted.
        (WebCore::AuthorStyleSheets::styleResolver): Deleted.
        (WebCore::AuthorStyleSheets::styleResolverIfExists): Deleted.
        (WebCore::AuthorStyleSheets::forNode): Deleted.
        (WebCore::AuthorStyleSheets::removePendingSheet): Deleted.
        (WebCore::AuthorStyleSheets::addStyleSheetCandidateNode): Deleted.
        (WebCore::AuthorStyleSheets::removeStyleSheetCandidateNode): Deleted.
        (WebCore::AuthorStyleSheets::collectActiveStyleSheets): Deleted.
        (WebCore::AuthorStyleSheets::analyzeStyleSheetChange): Deleted.
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets): Deleted.
        (WebCore::AuthorStyleSheets::updateStyleResolver): Deleted.
        (WebCore::AuthorStyleSheets::activeStyleSheetsForInspector): Deleted.
        (WebCore::AuthorStyleSheets::activeStyleSheetsContains): Deleted.
        (WebCore::AuthorStyleSheets::flushPendingUpdate): Deleted.
        (WebCore::AuthorStyleSheets::clearPendingUpdate): Deleted.
        (WebCore::AuthorStyleSheets::scheduleActiveSetUpdate): Deleted.
        (WebCore::AuthorStyleSheets::didChangeCandidatesForActiveSet): Deleted.
        (WebCore::AuthorStyleSheets::didChangeContentsOrInterpretation): Deleted.
        (WebCore::AuthorStyleSheets::pendingUpdateTimerFired): Deleted.
        * style/StyleScope.h: Copied from dom/AuthorStyleSheets.h.
        * style/StyleTreeResolver.cpp:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::removedFrom):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2016-10-07  Zalan Bujtas  <zalan@apple.com>

        https://vuldb.com/?cvssv3.2012 takes long time to load.
        https://bugs.webkit.org/show_bug.cgi?id=162994
        <rdar://problem/28593746>

        Reviewed by Darin Adler.

        Stop visiting cousins when we hit the style sharing search threshold.

        In addition to mistakenly ignoring the threshold at SharingResolver::findSibling(), we
        continued on searching for cousin elements. 

        Test: fast/selectors/slow-style-sharing-with-long-cousin-list.html

        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::resolve):
        (WebCore::Style::SharingResolver::findSibling):
        (WebCore::Style::SharingResolver::locateCousinList):

2016-10-07  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement generic reader functions
        https://bugs.webkit.org/show_bug.cgi?id=163003

        Reviewed by Darin Adler.

        Implements reader generic functions defined by spec in order to prepare BYOBReader integration.
        Generic functions factorize some code that is used by both DefaultReader and BYOBReader.

        No change in behaviour.

        * Modules/streams/ReadableStreamDefaultReader.js:
        (cancel): Rely on readableStreamReaderGenericCancel.
        (releaseLock): Rely on readableStreamReaderGenericRelease.
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultReader): Rely on readableStreamReaderGenericInitialize.
        (readableStreamReaderGenericInitialize): Added.
        (readableStreamReaderGenericCancel): Added.
        (readableStreamReaderGenericRelease): Added.

2016-10-07  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Misc gardening: Use typedefs consistently and remove unused code
        https://bugs.webkit.org/show_bug.cgi?id=163104

        Reviewed by Philippe Normand.

        Miscellaneous WebRTC gardening. See file list below for details.

        Testing: No change in behavior.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        Move NotImplemented include to cpp-file.
        * platform/mediastream/MediaEndpoint.h:
        Use MediaPayloadVector typedef (instead of Vector<RefPtr<MediaPayload>>).
        * platform/mediastream/PeerMediaDescription.h:
        (WebCore::PeerMediaDescription::source): Deleted.
        (WebCore::PeerMediaDescription::setSource): Deleted.
        Sources are passed to updateSendConfiguration() via a source map and not added to each
        PeerMediaDescription anymore. Remove unused code.
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::getDefaultAudioPayloads):
        (WebCore::MockMediaEndpoint::getDefaultVideoPayloads):
        Use MediaPayloadVector typedef.
        * platform/mock/MockMediaEndpoint.h:
        Use MediaPayloadVector typedef.

2016-10-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Remove unneeded creation of TextureMapperPlatformLayerProxy
        https://bugs.webkit.org/show_bug.cgi?id=163101

        Reviewed by Žan Doberšek.

        Covered by existing tests.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData): Modified not to create
        TextureMapperPlatformLayerProxy if it is not created for the
        accelerated 2d canvas.

2016-10-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use 'use lib $FindBin::Bin' to append Perl module include path
        https://bugs.webkit.org/show_bug.cgi?id=162256

        Reviewed by Carlos Garcia Campos.

        Some Perl  scripts are needed to  be executed with '-I'  switch to
        explicitly append Perl module include path.  Use 'use lib' as well
        as other Perl scripts do.

        * CMakeLists.txt: Removed '-I' options from invocation of Perl.
        * DerivedSources.make: Ditto.
        * bindings/scripts/generate-bindings.pl: Use 'use lib'.
        * bindings/scripts/preprocess-idls.pl: Ditto.
        * css/make-css-file-arrays.pl: Ditto.
        * css/makegrammar.pl: Ditto.
        * css/makeprop.pl: Ditto.
        * css/makevalues.pl: Ditto.
        * dom/make_dom_exceptions.pl: Ditto.
        * dom/make_event_factory.pl: Ditto.
        * dom/make_names.pl: Ditto.
        * page/make_settings.pl: Ditto.

2016-10-07  Youenn Fablet  <youenn@apple.com>

        Refactor CachedResourceClient::notifyFinished
        https://bugs.webkit.org/show_bug.cgi?id=162060

        Reviewed by Darin Adler.

        No change of behavior.

        Making CachedResourceClient and CachedRawResourceClient callbacks take CachedResource references and not pointers.
        In most cases, the CachedResource parameter is only used for assertions.
        Removing that parameter might be contemplated in the future.
        The only real case is in RenderImage.

        Removed the CachedResource parameter from ContentFilter methods as code was calling these methods with null values.

        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished):
        * dom/LoadableClassicScript.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::continueAfterResponseReceived):
        (WebCore::ContentFilter::continueAfterDataReceived):
        (WebCore::ContentFilter::continueAfterNotifyFinished):
        (WebCore::ContentFilter::deliverResourceData):
        * loader/ContentFilter.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::notifyFinished):
        * loader/CrossOriginPreflightChecker.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::dataReceived):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        (WebCore::DocumentThreadableLoader::dataSent):
        (WebCore::DocumentThreadableLoader::responseReceived):
        (WebCore::DocumentThreadableLoader::dataReceived):
        (WebCore::DocumentThreadableLoader::notifyFinished):
        * loader/DocumentThreadableLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::triggerEvents):
        (WebCore::LinkLoader::notifyFinished):
        * loader/LinkLoader.h:
        * loader/LinkPreloadResourceClients.cpp:
        (WebCore::LinkPreloadResourceClient::triggerEvents):
        * loader/LinkPreloadResourceClients.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        (WebCore::MediaResource::shouldCacheResponse):
        (WebCore::MediaResource::redirectReceived):
        (WebCore::MediaResource::dataSent):
        (WebCore::MediaResource::dataReceived):
        (WebCore::MediaResource::notifyFinished):
        (WebCore::MediaResource::getOrCreateReadBuffer):
        * loader/MediaResourceLoader.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        (WebCore::TextTrackLoader::deprecatedDidReceiveCachedResource):
        (WebCore::TextTrackLoader::notifyFinished):
        * loader/TextTrackLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::notifyClientsDataWasReceived):
        (WebCore::CachedRawResource::didAddClient):
        (WebCore::CachedRawResource::redirectReceived):
        (WebCore::CachedRawResource::responseReceived):
        (WebCore::CachedRawResource::shouldCacheResponse):
        (WebCore::CachedRawResource::didSendData):
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::dataSent):
        (WebCore::CachedRawResourceClient::responseReceived):
        (WebCore::CachedRawResourceClient::shouldCacheResponse):
        (WebCore::CachedRawResourceClient::dataReceived):
        (WebCore::CachedRawResourceClient::redirectReceived):
        (WebCore::CachedRawResourceClient::getOrCreateReadBuffer):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::checkNotify):
        (WebCore::CachedResource::didAddClient):
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::notifyFinished):
        (WebCore::CachedResourceClient::deprecatedDidReceiveCachedResource):
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::updateData):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:
        * loader/soup/CachedRawResourceSoup.cpp:
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::responseReceived):
        (WebCore::WebCoreAVCFResourceLoader::dataReceived):
        (WebCore::WebCoreAVCFResourceLoader::notifyFinished):
        (WebCore::WebCoreAVCFResourceLoader::fulfillRequestWithResource):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):
        (WebCore::WebCoreAVFResourceLoader::dataReceived):
        (WebCore::WebCoreAVFResourceLoader::notifyFinished):
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderImage.h:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::setRenderer):
        (WebCore::RenderLayer::FilterInfo::notifyFinished):
        * rendering/RenderLayerFilterInfo.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFEImageElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyFinished):
        * svg/SVGUseElement.h:
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):
        * xml/parser/XMLDocumentParser.h:

2016-10-06  Youenn Fablet  <youenn@apple.com>

        CachedXSLStylesheet does not need to be updated according Origin/Fetch mode
        https://bugs.webkit.org/show_bug.cgi?id=162389

        Reviewed by Darin Adler.

        No change of behavior.

        Making clear that there is no reason to update cached XSLT resources according the origin, given that CORS is never checked and loading is always same-origin.

        Renaming CachedResource::isClean to CachedResource::isCORSSameOrigin to better match spec terminology.
        Updating HTMLLinkElement accordingly.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::isCORSSameOrigin): Ensuring that this method is not called for resource types for which CORS is not to be used.
        (WebCore::CachedResource::isClean): Deleted.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):

2016-10-06  Youenn Fablet  <youenn@apple.com>

        Add a place for common HTTP Header values
        https://bugs.webkit.org/show_bug.cgi?id=163002

        Reviewed by Alex Christensen.

        No change of behavior.

        Introducing HTTPHeaderValues with two Content-Type values.

        * CMakeLists.txt:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/HTTPHeaderValues.cpp: Added.
        (WebCore::HTTPHeaderValues::TextPlainContentType):
        (WebCore::HTTPHeaderValues::FormURLEncodedContentType):
        * platform/network/HTTPHeaderValues.h: Added.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2016-10-06  Youenn Fablet  <youenn@apple.com>

        CachedResourceRequest should not need to store defer and preload options
        https://bugs.webkit.org/show_bug.cgi?id=163004

        Reviewed by Alex Christensen.

        No change of behavior.

        Removing CachedResourceRequest defer and preload fields.
        These fields are computed inside CachedResourceLoader instead.

        Updated setting of priority from CachedResourceRequest to CachedResource.
        Priority is set for any new resource (this covers all cases where no cached resource can be reused from the memory cache).
        Priority is set for a cached resource if the request is not a preload request.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::priority):
        (WebCore::CachedResourceRequest::forPreload): Deleted.
        (WebCore::CachedResourceRequest::setForPreload): Deleted.
        (WebCore::CachedResourceRequest::defer): Deleted.
        (WebCore::CachedResourceRequest::setDefer): Deleted.

2016-10-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Variation fonts don't affect glyph advances
        https://bugs.webkit.org/show_bug.cgi?id=163093

        Reviewed by Darin Adler.

        Work around known bug <rdar://problem/28662086>. For variation fonts,
        CTFontGetAdvancesForGlyphs() gives correct answers but
        CTFontGetUnsummedAdvancesForGlyphsAndStyle() doesn't.

        Test: fast/text/variations/advances.html

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hasVariations):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformWidthForGlyph):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):

2016-10-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206713.
        https://bugs.webkit.org/show_bug.cgi?id=163097

        triggers apparent codegen bug on ARM 32-bit (Requested by smfr
        on #webkit).

        Reverted changeset:

        "Support transitions/animations of background-position with
        right/bottom-relative values"
        https://bugs.webkit.org/show_bug.cgi?id=162048
        http://trac.webkit.org/changeset/206713

2016-10-06  Daniel Bates  <dabates@apple.com>

        Remove unused WebCore::contentDispositionType()
        https://bugs.webkit.org/show_bug.cgi?id=163095

        Reviewed by Alex Christensen.

        The function WebCore::contentDispositionType() was only used by the Chromium and Qt ports
        to parse the Content-Disposition HTTP header. Both of these ports have long since been
        removed from the repository. We should remove WebCore::contentDispositionType().

        * platform/network/HTTPParsers.cpp:
        (WebCore::contentDispositionType): Deleted.
        * platform/network/HTTPParsers.h:

2016-10-06  Ryosuke Niwa  <rniwa@webkit.org>

        Upgrading and constructing element should always report exception instead of rethrowing
        https://bugs.webkit.org/show_bug.cgi?id=162996

        Reviewed by Darin Adler.

        The latest HTML specification specifies that we must report exceptions thrown during element upgrades:
        https://html.spec.whatwg.org/#upgrades

        In addition, F2F during 2016 TPAC had a consensus that we should do the same for document.createElement:
        https://github.com/w3c/webcomponents/issues/569

        Since the HTML parser already reports the exception thrown during custom element construction as it does
        not have any JS stack, these changes make exceptions thrown during upgrades and constructions.

        In our implementation, this only reduces the code complexity as now we can push the logic to fallback
        to HTMLUnknownElement into JSCustomElementInterface's constructElement, which has been renamed
        to constructElementWithFallback, and eliminate ShouldClearException enum class entirely. Moreover,
        constructElementWithFallback can now return Ref instead of RefPtr.

        No new tests. Existing tests have been updated.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback): Create a HTMLUnknownElement if
        an attempt to construct a custom element had failed in lieu of returning nullptr.
        (WebCore::JSCustomElementInterface::tryToConstructCustomElement): Renamed from constructElement.
        Always report exceptions (the same behavior as ShouldClearException::Clear).
        (WebCore::JSCustomElementInterface::upgradeElement): Report exceptions instead of rethrowing.
        * bindings/js/JSCustomElementInterface.h:
        * dom/Document.cpp:
        (WebCore::createHTMLElementWithNameValidation):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):

2016-10-06  Chris Dumez  <cdumez@apple.com>

        Overwriting an attribute event listener can lead to wrong event listener firing order
        https://bugs.webkit.org/show_bug.cgi?id=163083

        Reviewed by Darin Adler.

        Overwriting an attribute event listener could lead to wrong event listener
        firing order in WebKit. This is because we were removing the old event
        listener and then appending the new one instead of actually *replacing*
        the old one.

        No new tests, rebaselined existing tests.

        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::replace):
        * dom/EventListenerMap.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::hasActiveEventListeners): Deleted.
        (WebCore::EventTarget::dispatchEventForBindings): Deleted.
        * dom/EventTarget.h:

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        URLParser: Non-ASCII characters in Non-UTF-8 encoded queries of relative URLs with ws, wss, or nonspecial schemes should be UTF-8 encoded
        https://bugs.webkit.org/show_bug.cgi?id=163089

        Reviewed by Tim Horton.

        This is a change similar to r206818 but with relative URLs.
        This matches the spec, URL::parse, and other browsers' behavior.
        Covered by new API tests for URLParser.
        This also fixes tests like http/tests/misc/url-in-utf32le.html when URLParser is enabled.

        * platform/URL.cpp:
        (WebCore::URL::URL):
        Use the same encoding for the URL constructor whether or not the URLParser is enabled.
        * platform/URLParser.cpp:
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::parse):
        (WebCore::isSpecial): Deleted.
        * platform/URLParser.h:
        Use UTF-8 for non-special, ws, or wss schemes.

2016-10-06  Zalan Bujtas  <zalan@apple.com>

        Add back ASSERT(!needsLayout) to RenderTableSection which is now valid
        https://bugs.webkit.org/show_bug.cgi?id=92954
        <rdar://problem/12147973>

        Reviewed by Dan Bernstein.

        LayoutTests pass fine now with this assert on.

        Covered by existing tests.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):

2016-10-06  Jiewen Tan  <jiewen_tan@apple.com>

        Add a dummy SubtleCrypto interface
        https://bugs.webkit.org/show_bug.cgi?id=162992
        <rdar://problem/28643573>

        Reviewed by Brent Fulgham.

        Add a dummy SubtleCrypto interface and rename KeyPair to CryptoKeyPair.

        Tests: crypto/subtle/gc-2.html
               crypto/subtle/gc-3.html
               crypto/subtle/gc.html
               crypto/webkitSubtle/aes-cbc-192-encrypt-decrypt.html
               crypto/webkitSubtle/aes-cbc-256-encrypt-decrypt.html
               crypto/webkitSubtle/aes-cbc-encrypt-decrypt-with-padding.html
               crypto/webkitSubtle/aes-cbc-encrypt-decrypt.html
               crypto/webkitSubtle/aes-cbc-generate-key.html
               crypto/webkitSubtle/aes-cbc-import-jwk.html
               crypto/webkitSubtle/aes-cbc-invalid-length.html
               crypto/webkitSubtle/aes-cbc-unwrap-failure.html
               crypto/webkitSubtle/aes-cbc-unwrap-rsa.html
               crypto/webkitSubtle/aes-cbc-wrap-rsa-non-extractable.html
               crypto/webkitSubtle/aes-cbc-wrap-rsa.html
               crypto/webkitSubtle/aes-cbc-wrong-key-class.html
               crypto/webkitSubtle/aes-export-key.html
               crypto/webkitSubtle/aes-kw-key-manipulation.html
               crypto/webkitSubtle/aes-kw-wrap-unwrap-aes.html
               crypto/webkitSubtle/aes-postMessage.html
               crypto/webkitSubtle/argument-conversion.html
               crypto/webkitSubtle/array-buffer-view-offset.html
               crypto/webkitSubtle/crypto-key-algorithm-gc.html
               crypto/webkitSubtle/crypto-key-usages-gc.html
               crypto/webkitSubtle/hmac-check-algorithm.html
               crypto/webkitSubtle/hmac-export-key.html
               crypto/webkitSubtle/hmac-generate-key.html
               crypto/webkitSubtle/hmac-import-jwk.html
               crypto/webkitSubtle/hmac-postMessage.html
               crypto/webkitSubtle/hmac-sign-verify-empty-key.html
               crypto/webkitSubtle/hmac-sign-verify.html
               crypto/webkitSubtle/import-jwk.html
               crypto/webkitSubtle/jwk-export-use-values.html
               crypto/webkitSubtle/jwk-import-use-values.html
               crypto/webkitSubtle/rsa-export-generated-keys.html
               crypto/webkitSubtle/rsa-export-key.html
               crypto/webkitSubtle/rsa-export-private-key.html
               crypto/webkitSubtle/rsa-indexeddb-non-exportable-private.html
               crypto/webkitSubtle/rsa-indexeddb-non-exportable.html
               crypto/webkitSubtle/rsa-indexeddb-private.html
               crypto/webkitSubtle/rsa-indexeddb.html
               crypto/webkitSubtle/rsa-oaep-generate-non-extractable-key.html
               crypto/webkitSubtle/rsa-oaep-key-manipulation.html
               crypto/webkitSubtle/rsa-oaep-plaintext-length.html
               crypto/webkitSubtle/rsa-oaep-wrap-unwrap-aes.html
               crypto/webkitSubtle/rsa-postMessage.html
               crypto/webkitSubtle/rsaes-pkcs1-v1_5-decrypt.html
               crypto/webkitSubtle/rsaes-pkcs1-v1_5-wrap-unwrap-aes.html
               crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent.html
               crypto/webkitSubtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/webkitSubtle/rsassa-pkcs1-v1_5-import-jwk-small-key.html
               crypto/webkitSubtle/rsassa-pkcs1-v1_5-import-jwk.html
               crypto/webkitSubtle/rsassa-pkcs1-v1_5-sign-verify.html
               crypto/webkitSubtle/sha-1.html
               crypto/webkitSubtle/sha-224.html
               crypto/webkitSubtle/sha-256.html
               crypto/webkitSubtle/sha-384.html
               crypto/webkitSubtle/sha-512.html
               crypto/webkitSubtle/unimplemented-unwrap-crash.html
               crypto/webkitSubtle/unwrapKey-check-usage.html
               crypto/webkitSubtle/wrapKey-check-usage.html
               crypto/workers/subtle/aes-postMessage-worker.html
               crypto/workers/subtle/gc-worker.html
               crypto/workers/subtle/hmac-postMessage-worker.html
               crypto/workers/subtle/hrsa-postMessage-worker.html
               crypto/workers/subtle/multiple-postMessage-worker.html
               crypto/workers/subtle/rsa-postMessage-worker.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CryptoKeyPair.idl:
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::SubtleCrypto):
        * crypto/SubtleCrypto.h:
        (WebCore::SubtleCrypto::create):
        * crypto/SubtleCrypto.idl: Added.
        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        (WebCore::Crypto::subtle):
        * page/Crypto.h:
        * page/Crypto.idl:

2016-10-06  Anders Carlsson  <andersca@apple.com>

        Crash when ApplePaySession.completeMerchantValidation is not passed a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=163074
        rdar://problem/27824842

        Reviewed by Tim Horton.

        Raise a type error on a null initializer object.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completeMerchantValidation):

2016-10-06  Antti Koivisto  <antti@apple.com>

        Mutating styleSheet in shadow tree doesn't update the style
        https://bugs.webkit.org/show_bug.cgi?id=162744
        <rdar://problem/28550588>

        Reviewed by Ryosuke Niwa.

        We weren't always invalidating the right AuthorStyleSheets (to be renamed) instance
        for the scope after mutations.

        Test: fast/shadow-dom/mutating-stylesheet-in-shadow-tree.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):
        (WebCore::CSSStyleSheet::didMutate):
        (WebCore::CSSStyleSheet::clearOwnerNode):
        (WebCore::CSSStyleSheet::rootStyleSheet):
        (WebCore::CSSStyleSheet::ownerDocument):
        (WebCore::CSSStyleSheet::styleSheetScope):

            Invalidate the right scope after stylesheet mutations.

        * css/CSSStyleSheet.h:
        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::styleResolver):
        (WebCore::AuthorStyleSheets::styleResolverIfExists):

            Take care to update the right style resolver.

        (WebCore::AuthorStyleSheets::forNode):
        (WebCore::AuthorStyleSheets::removeStyleSheetCandidateNode):

            Start the update timer so clients don't need to request update separately.

        (WebCore::AuthorStyleSheets::analyzeStyleSheetChange):
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):
        (WebCore::AuthorStyleSheets::updateStyleResolver):
        * dom/AuthorStyleSheets.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::insertedIntoDocument):

            Save the scope we were inserted into so removals can be done reliably.

        (WebCore::InlineStyleSheetOwner::removedFromDocument):

            Use and clear the saved scope.
            Remove didChangeCandidatesForActiveSet() as it is now done by removeStyleSheetCandidateNode() call.

        (WebCore::InlineStyleSheetOwner::clearDocumentData):
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::sheetLoaded):
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):
        (WebCore::authorStyleSheetsForElement): Deleted.
        * dom/InlineStyleSheetOwner.h:
        (WebCore::InlineStyleSheetOwner::styleSheetScope):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::styleResolverIfExists):
        * dom/ShadowRoot.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom):

            Remove didChangeCandidatesForActiveSet() as it is now done by removeStyleSheetCandidateNode() call.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::~HTMLStyleElement):
        (WebCore::HTMLStyleElement::parseAttribute):

            Fix a bug where we wouldn't create stylesheet if a style element was activated by removing a media attribute.

        (WebCore::HTMLStyleElement::insertedInto):
        (WebCore::HTMLStyleElement::removedFrom):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::~SVGStyleElement):
        (WebCore::SVGStyleElement::insertedInto):
        (WebCore::SVGStyleElement::removedFrom):

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        Skip tabs and newlines between end of query and beginning of fragment in non-UTF-8-encoded URLs
        https://bugs.webkit.org/show_bug.cgi?id=163071

        Reviewed by Tim Horton.

        Covered by a new API test that would have asserted before this change.

        * platform/URLParser.cpp:
        (WebCore::URLParser::encodeQuery):
        Skip tabs and newlines before asserting that we are at the end.

2016-10-06  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse file URLs with ports consistently
        https://bugs.webkit.org/show_bug.cgi?id=163075

        Reviewed by Brady Eidson.

        Covered by API tests.  We used to assert when parsing the newly tested URLs.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2016-10-06  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Add support for having dictionaries in their own IDL file
        https://bugs.webkit.org/show_bug.cgi?id=162912

        Reviewed by Darin Adler.

        Add support for having dictionaries in their own IDL file so that they
        can be shared by multiple interfaces.

        Leverage this new support to merge Element::ScrollToOptions and
        DOMWindow::ScrollToOptions.

        No new tests, extended bindings tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (IDLFileForInterface):
        (GetDictionaryByName):
        (IsDictionaryType):
        (HasEnumImplementationNameOverride): Deleted.
        (GetEnumImplementationNameOverride): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionary):
        (GetEnumerationClassName):
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationHeaderContent):
        (GetDictionaryClassName):
        (GenerateDefaultValue):
        (GenerateDictionaryHeaderContent):
        (GenerateDictionariesHeaderContent):
        (GenerateDictionaryImplementationContent):
        (GenerateDictionariesImplementationContent):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateDictionaryHeader):
        (GenerateDictionaryImplementation):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GetNativeType):
        (JSValueToNative):
        (GetNestedClassName): Deleted.
        (GenerateConversionRuleWithLeadingComma): Deleted.
        (addIterableProperties): Deleted.
        * bindings/scripts/preprocess-idls.pl:
        (containsInterfaceOrExceptionFromIDL):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameter):
        (WebCore::jsTestObjPrototypeFunctionAttachShadowRoot): Deleted.
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp: Added.
        (WebCore::convertDictionary<TestStandaloneDictionary>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h: Added.
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestStandaloneDictionary.idl: Added.
        * dom/Element.h:
        * dom/Element.idl:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollTo):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/ScrollToOptions.h: Added.
        * page/ScrollToOptions.idl: Added.

2016-10-06  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * platform/graphics/Image.cpp: Add missing include
        for 'NotImplemented' when building under Direct2D.

2016-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add Direct2D CMake rules
        https://bugs.webkit.org/show_bug.cgi?id=162925

        Reviewed by Brent Fulgham.

        Modify PlatformAppleWin.cmake to conditionally build the CoreGraphics
        and CoreAnimation implementation, or the Direct2D files, depending
        on whether the USE_DIRECT2D macro is set in the CMake build options.
        By default it builds the normal CA/CG way.

        Add a stub GraphicsLayer implementation for Direct2D.

        No new tests because there is no change in our active ports.

        * PlatformAppleWin.cmake: Conditionalize the build for CA/CG or
        Direct2D.
        * config.h: Make sure CA is turned of for Direct2D builds.
        * page/win/FrameWinDirect2D.cpp: Add missing include file.
        * platform/graphics/win/GraphicsLayerDirect2D.cpp: Added.
        * platform/graphics/win/GraphicsLayerDirect2D.h: Added.

2016-10-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore][JSC] Use new @throwTypeError and @throwRangeError intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=163001

        Reviewed by Keith Miller.

        Replace `throw new @XXXError(...)` to @throwXXXError intrinsic.
        It reduces the size of bytecode sequence and facilitate inlining.

        No behavior change.

        * Modules/fetch/FetchHeaders.js:
        (initializeFetchHeaders):
        * Modules/fetch/FetchInternals.js:
        (fillFetchHeaders):
        * Modules/fetch/FetchRequest.js:
        (initializeFetchRequest):
        * Modules/fetch/FetchResponse.js:
        (initializeFetchResponse):
        (clone):
        * Modules/mediastream/NavigatorUserMedia.js:
        (webkitGetUserMedia):
        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):
        (getLocalStreams):
        (getStreamById):
        (addStream):
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        (getReader):
        * Modules/streams/ReadableStreamDefaultController.js:
        (enqueue):
        (error):
        (close):
        * Modules/streams/ReadableStreamDefaultReader.js:
        (releaseLock):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultReader):
        (privateInitializeReadableStreamDefaultController):
        (doStructuredClone):
        (readableStreamError):
        * Modules/streams/StreamInternals.js:
        (validateAndNormalizeQueuingStrategy):
        (enqueueValueWithSize):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (state):
        * xml/XMLHttpRequest.js:
        (response):

2016-10-06  John Wilander  <wilander@apple.com>

        Update Resource Load Statistics
        https://bugs.webkit.org/show_bug.cgi?id=162811

        Reviewed by Alex Christensen.

        No new tests. The counting is based on top privately owned domains
        which currently is not supported by layout tests nor API tests.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
            Now captures statistics for web sockets too.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/ResourceLoadObserver.cpp:
            Now captures statistics for synchronous XHR too.
        (WebCore::is3xxRedirect):
            Convenience function.
        (WebCore::ResourceLoadObserver::shouldLog):
            Convenience function.
        (WebCore::ResourceLoadObserver::logFrameNavigation):
            Updated to make use of new convenience functions.
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
            Updated to make use of new convenience functions.
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
            Added.
        (WebCore::ResourceLoadObserver::logUserInteraction):
            Updated to make use of new convenience functions.
        (WebCore::ResourceLoadObserver::primaryDomain):
            Now makes use of the Public Suffix list.
            Removed old custom parsing of primary domain.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::prevalentResourceDomainsWithoutUserInteraction):
            Convenience function.
        (WebCore::ResourceLoadStatisticsStore::processStatistics): Deleted.
        * loader/ResourceLoadStatisticsStore.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
            Moved logging call higher up and added a check for whether we
            are loading the main resource. The reason for moving it up is
            to capture the request before some data may be cleared out in
            redirect handling. We also want to capture failed CORS requests
            since they are sent and then cancelled on the way back.

2016-10-06  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Add support for the iceconnectionstatechange event in MediaEndpointPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=162961

        Reviewed by Eric Carlson.

        Implement MediaEndpointPeerConnection's iceTransportStateChanged callback. When called, it
        updates the ICE transport state of the corresponding transceiver and determines if the
        RTCPeerConnection's aggregated iceConnectionState needs to be updated.

        Update MediaEndpointMock's emulatePlatformEvent feature to support a new action:
        "step-ice-transport-states". When initiated, this action replays a predefined set of ICE
        transport state changes on a set of transceivers which can be observed via the
        iceTransportStateChanged (mentioned above).

        Test: fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::deriveAggregatedIceConnectionState):
        (WebCore::MediaEndpointPeerConnection::iceTransportStateChanged):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * platform/mediastream/MediaEndpoint.h:
        (WebCore::MediaEndpointClient::~MediaEndpointClient):
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::MockMediaEndpoint):
        (WebCore::MockMediaEndpoint::emulatePlatformEvent):
        (WebCore::MockMediaEndpoint::stepIceTransportStates):
        (WebCore::MockMediaEndpoint::iceTransportTimerFired):
        * platform/mock/MockMediaEndpoint.h:

2016-10-06  Youenn Fablet  <youenn@apple.com>

        CachedResource client handling methods should take reference
        https://bugs.webkit.org/show_bug.cgi?id=163014

        Reviewed by Alex Christensen.

        No change of behavior.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::~CachedScriptSourceProvider):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::~CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::loadSubimages):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::~CSSFilterImageValue):
        (WebCore::CSSFilterImageValue::loadSubimages):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::~CSSFontFaceSource):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::~StyleRuleImport):
        (WebCore::StyleRuleImport::requestStyleSheet):
        * dom/DataTransfer.cpp:
        (WebCore::DragImageLoader::startLoading):
        (WebCore::DragImageLoader::stopLoading):
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::create):
        (WebCore::LoadableClassicScript::~LoadableClassicScript):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::~ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::process):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::~CrossOriginPreflightChecker):
        (WebCore::CrossOriginPreflightChecker::startPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::clearMainResource):
        (WebCore::DocumentLoader::becomeMainResourceClient):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::~DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::clearResource):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::clearImageWithoutConsideringPendingLoadEvent):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::~LinkLoader):
        (WebCore::LinkLoader::notifyFinished):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkPreloadResourceClients.h:
        (WebCore::LinkPreloadResourceClient::addResource):
        (WebCore::LinkPreloadResourceClient::clearResource):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::MediaResource):
        (WebCore::MediaResource::stop):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::~TextTrackLoader):
        (WebCore::TextTrackLoader::cancelLoad):
        (WebCore::TextTrackLoader::load):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::didAddClient):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        (WebCore::CachedImage::didRemoveClient):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::didAddClient):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        (WebCore::CachedResource::Callback::timerFired):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasClient):
        (WebCore::CachedResource::didRemoveClient):
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeImageFromCache):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::stopLoading):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):
        (WebCore::WebCoreAVCFResourceLoader::stopLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        (WebCore::WebCoreAVFResourceLoader::stopLoading):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::shutdown):
        (WebCore::RenderImageResource::setCachedImage):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::addClient):
        (WebCore::StyleCachedImage::removeClient):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences):
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::~SVGFontFaceUriElement):
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::~SVGUseElement):
        (WebCore::SVGUseElement::updateExternalDocument):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::~XSLImportRule):
        (WebCore::XSLImportRule::setXSLStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2016-10-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][OWR] GL rendering support
        https://bugs.webkit.org/show_bug.cgi?id=162972

        Reviewed by Žan Doberšek.

        When GStreamer-GL is enabled the GL context needs to be properly passed
        to the GStreamer pipeline running within the OpenWebRTC video renderer.
        This is now supported using a new OpenWebRTC API that allows the
        renderer to request the context from the application using a callback
        registered within the renderer.

        The player's GL context/display set-up was refactored to a new
        method, requestGLContext, which is used as callback for the
        OpenWebRTC request_context handler.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::requestGLContext):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::gstGLContext):
        (WebCore::MediaPlayerPrivateGStreamerBase::gstGLDisplay):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::createVideoSink):

2016-10-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Icon service and the IconButton class
        https://bugs.webkit.org/show_bug.cgi?id=162970
        <rdar://problem/28631803>

        Reviewed by Dean Jackson.

        We introduce the new IconButton class to display buttons that show an icon
        in modern media controls. An IconButton uses a CSS mask-image to display the icon
        such that we may set the actual button color to any value by setting the element's
        background-color property.

        Icons are obtained through the `iconService` singleton which knows how to load the
        right icon for the current layout traits and resolution. Icons loaded through the
        icon service are cached. In a later patch, we will be introducing functionality,
        through the MediaControlsHost, to load the icon from the WebCore bundle.

        Tests: media/modern-media-controls/icon-button/icon-button-active-state.html
               media/modern-media-controls/icon-button/icon-button.html
               media/modern-media-controls/icon-service/icon-service.html

        * Modules/modern-media-controls/controls/button.css:
        (button):
        * Modules/modern-media-controls/controls/icon-button.css: Copied from Source/WebCore/Modules/modern-media-controls/controls/button.css.
        (button.icon):
        (button.icon:active):
        * Modules/modern-media-controls/controls/icon-button.js: Added.
        (IconButton):
        (IconButton.prototype.get iconName):
        (IconButton.prototype.set iconName):
        (IconButton.prototype.handleEvent):
        (IconButton.prototype.layout):
        (IconButton.prototype._imageDidLoad):
        (IconButton.prototype._updateImage):
        * Modules/modern-media-controls/controls/icon-service.js: Copied from Source/WebCore/Modules/modern-media-controls/controls/layout-item.js.
        (const.iconService.new.IconService):
        (const.iconService.new.IconService.prototype.imageForIconNameAndLayoutTraits):
        (const.iconService.new.IconService.prototype.urlForIconNameAndLayoutTraits):
        * Modules/modern-media-controls/controls/layout-item.js:
        * Modules/modern-media-controls/images/iOS/pause@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/pause@3x.png: Added.
        * Modules/modern-media-controls/images/iOS/start@2x.png: Added.
        * Modules/modern-media-controls/images/iOS/start@3x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause-fullscreen@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause-fullscreen@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/pause@2x.png: Added.
        * Modules/modern-media-controls/images/macOS/start@1x.png: Added.
        * Modules/modern-media-controls/images/macOS/start@2x.png: Added.

2016-10-06  Miguel Gomez  <magomez@igalia.com>

        [GTK] Fix build with GSTREAMER_GL enabled and ACCELERATED_2D_CANVAS disabled
        https://bugs.webkit.org/show_bug.cgi?id=163008

        Reviewed by Carlos Garcia Campos.

        Put functions using cairo-gl behind appropriate guards.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToCairoSurface): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2016-10-06  Miguel Gomez  <magomez@igalia.com>

        [GTK] Copying video textures to webgl should not depend on cairo-gl
        https://bugs.webkit.org/show_bug.cgi?id=162904

        Reviewed by Žan Doberšek.

        Perform the texture copy without using cairo-gl.

        Covered by existent tests.

        * platform/GStreamer.cmake:
        Add the new VideoTextureCopierGStreamer class to the build.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        Use VideoTextureCopierGStreamer to perform the copy.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Add a VideoTextureCopierGStreamer as a class attribute.
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp: Added.
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::updateTextureSpaceMatrix):
        Recalculates the matrix used as the texture coordinates transformation.
        (WebCore::VideoTextureCopierGStreamer::updateTransformationMatrix):
        Recalculates the matrices used as the vertices coordinates transformation.
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        Performs the texture copy by using a shader that applies the rotation needed to follow
        the video orientation.
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h: Added.

2016-10-06  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Build fix for X11 and GStreamerGL after r183731
        https://bugs.webkit.org/show_bug.cgi?id=163000

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Include gstgldisplay_egl.h if platform uses EGL.

2016-10-06  Mario Sanchez Prada  <mario@endlessm.com>

        [GStreamer] Can't play any video with GSTREAMER_GL enabled
        https://bugs.webkit.org/show_bug.cgi?id=162669

        Reviewed by Philippe Normand.

        Make sure an EGLDisplay type is passed when creating the GstGlDisplay
        for the EGL code path, instead of a native X11 display type, so
        that we get a valid GstGlDisplay as a result, not a dummy one.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):

2016-10-06  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Forbid redirection to non-HTTP(s) URL in non-navigation mode.
        https://bugs.webkit.org/show_bug.cgi?id=162785

        Reviewed by Alex Christensen.

        Covered by rebased and existing tests.

        Ensuring non-HTTP redirection URLs are not followed at DocumentThreadableLoader level for fetch API only.
        This should be applied to all clients at some point, but there is still some uncertainty for data URLs.

        Did some refactoring to better separate the case of security checks in case of regular request or redirected request.
        This allows in particular to handle more clearly the case of data URLs which are allowed in all modes for regular requests.
        But they are not allowed for same-origin redirected requests.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::reportRedirectionWithBadScheme): Reporting bad scheme redirection error.
        (WebCore::DocumentThreadableLoader::redirectReceived): Checking that redirection URLs are HTTP(s) in case of Fetch API.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy):
        (WebCore::isSameOriginDataURL):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::canRequestAfterRedirection):
        (WebCore::CachedResourceLoader::canRequestInContentDispositionAttachmentSandbox):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:

2016-10-06  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Use ReadableStream pull to transfer binary data to stream when application needs it
        https://bugs.webkit.org/show_bug.cgi?id=162892

        Reviewed by Alex Christensen.

        Covered by existing tests.

        Before this patch, FetchResponse was never resolving the start promise.
        This way, it could enqueue data, error or close the stream whenever desired.

        With this patch, FetchResponse will feed the stream when being asked to.
        This allows keeping the data in WebCore until the application needs it.
        This is only implemented for network data.
        For other data owned by response (blob, text...), data will be enqueued like previously as fast as possible.

        Note that FetchResponse can enqueue/error/close the stream at any time since JSFetchResponse has a reference to the stream.
        And the stream has a reference to the controller.

        In addition to transfer binary chunks to ReadableStream only when needed, WebCore is now aware of the data
        stored in the response, which may allow applying backpressure to the network source in the future.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didReceiveData): Enqueuing only if stream is pulling.
        Otherwise, storing in FetchBodyConsumer. If stream is pulling, we enqueue both buffered data and received chunk.
        (WebCore::FetchResponse::consumeBodyAsStream): Resolving pull promise if we enqueued some buffered data.
        (WebCore::FetchResponse::closeStream):
        (WebCore::FetchResponse::feedStream): If we have some buffered data, we enqueue it. If there is no loader, the stream can be closed.
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponseSource.cpp:
        (WebCore::FetchResponseSource::doPull):
        (WebCore::FetchResponseSource::close):
        (WebCore::FetchResponseSource::error):
        * Modules/fetch/FetchResponseSource.h:
        * Modules/streams/ReadableStreamSource.h:
        (WebCore::ReadableStreamSource::isPulling): Renamed from isStarting.
        (WebCore::ReadableStreamSource::isStarting): Deleted.

2016-10-06  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Add support for the icecandidate event in MediaEndpointPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=162957

        Reviewed by Eric Carlson.

        Implement MediaEndpointPeerConnection's gotIceCandidate and doneGatheringCandidates
        callbacks. These are used by the MediaEndpoint (WebRTC backend implementation) to
        notify about ICE events.

        Add API to Internals to emulate WebRTC platform events, such as dispatching a set of ICE
        candidates followed by a gathering done indication. Initially, only a single action,
        "dispatch-fake-ice-candidates", is supported, but the intention is to extend the set of
        actions to support more test cases.

        Test: fast/mediastream/RTCPeerConnection-icecandidate-event.html

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::emulatePlatformEvent):
        (WebCore::MediaEndpointPeerConnection::gotIceCandidate):
        (WebCore::MediaEndpointPeerConnection::doneGatheringCandidates):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCIceTransport.h: Added.
        RTCIceCandidate will eventually be part of the JS API, but right now it's
        only used to keep track of the ICE states related to a RTCRtpTranscevier.
        (WebCore::RTCIceTransport::create):
        (WebCore::RTCIceTransport::~RTCIceTransport):
        (WebCore::RTCIceTransport::transportState):
        (WebCore::RTCIceTransport::setTransportState):
        (WebCore::RTCIceTransport::gatheringState):
        (WebCore::RTCIceTransport::setGatheringState):
        (WebCore::RTCIceTransport::RTCIceTransport):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::emulatePlatformEvent):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::RTCRtpTransceiver):
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::iceTransport):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaEndpoint.h:
        (WebCore::MediaEndpoint::emulatePlatformEvent):
        * platform/mediastream/PeerConnectionStates.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::MockMediaEndpoint):
        (WebCore::MockMediaEndpoint::updateReceiveConfiguration):
        (WebCore::MockMediaEndpoint::emulatePlatformEvent):
        (WebCore::MockMediaEndpoint::dispatchFakeIceCandidates):
        (WebCore::MockMediaEndpoint::iceCandidateTimerFired):
        * platform/mock/MockMediaEndpoint.h:
        * testing/Internals.cpp:
        (WebCore::Internals::emulateRTCPeerConnectionPlatformEvent):
        Generic API to signal down to the WebRTC platform mock.
        * testing/Internals.h:
        * testing/Internals.idl:

2016-10-06  Nan Wang  <n_wang@apple.com>

        AX:[Mac] Unable to edit text input, textarea fields in iframe using VO naivgation
        https://bugs.webkit.org/show_bug.cgi?id=162999

        Reviewed by Chris Fleizach.

        In WebKit1, the top web area setting the selection to an input element inside an iframe
        will make the input field not editable. The issue is that when the web area and the input element
        have different documents, the setSelection function in FrameSelection will set the selection on
        the input's frame and cause the caret to disappear. I fixed it by not setting the selection in such case.

        Test: accessibility/mac/wk1-set-selected-text-marker-range-input-element.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):

2016-10-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206845.
        https://bugs.webkit.org/show_bug.cgi?id=162998

        broke el capitan build (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Add Display P3 ColorSpace"
        https://bugs.webkit.org/show_bug.cgi?id=162880
        http://trac.webkit.org/changeset/206845

2016-10-05  Youenn Fablet  <youenn@apple.com>

        Reuse CodeGenerator::UpdateFile in Tools CodeGenerator
        https://bugs.webkit.org/show_bug.cgi?id=162960

        Reviewed by Alex Christensen.

        No change of behavior.

        * bindings/scripts/CodeGenerator.pm:
        (UpdateFile): Adding FIXME to enable lazy writing when feasible.

2016-10-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] HostTLSCertificateSet should not use SHA-1 hashes to compare certificates
        https://bugs.webkit.org/show_bug.cgi?id=162965

        Reviewed by Carlos Garcia Campos.

        Use SHA-256 instead.

        No new tests, covered by TestSSL.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2016-10-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Bump Chrome version in Chrome user agent quirk
        https://bugs.webkit.org/show_bug.cgi?id=162984

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2016-10-05  Dean Jackson  <dino@apple.com>

        Add Display P3 ColorSpace
        https://bugs.webkit.org/show_bug.cgi?id=162880
        <rdar://problem/28598564>

        Reviewed by Sam Weinig.

        Add a new ColorSpace for Display P3.

        This will be tested once the Color class can create
        objects that reference other color spaces.

        * platform/graphics/ColorSpace.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::displayP3ColorSpaceRef):
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::cachedCGColorSpace):

2016-10-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce InputEvent bindings in preparation for the input events spec
        https://bugs.webkit.org/show_bug.cgi?id=162954

        Reviewed by Ryosuke Niwa.

        Creates new bindings for InputEvent. Also introduces a runtime switch that allows Node to dispatch InputEvents
        rather than generic events of type 'input'. Adds a new test verifying that when the switch is enabled, inputs
        and contenteditable divs fire these new InputEvents on input. So far, only inputType is a part of the object
        prototype, since we will be implementing this first. getTargetRanges() will follow once the finer details of
        StaticRange are hashed out. See https://bugs.webkit.org/show_bug.cgi?id=162947 for more details.

        Tests: fast/events/input-events-fired-when-typing.html
               fast/events/ios/input-events-fired-when-typing-in-contenteditable.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Event.cpp:
        (WebCore::Event::composed):
        (WebCore::Event::isInputEvent):
        * dom/Event.h:
        * dom/EventNames.in:
        * dom/InputEvent.cpp: Added.
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h: Added.
        * dom/InputEvent.idl: Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchInputEvent):
        (WebCore::Node::defaultEventHandler):
        * dom/Node.h:
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setEditingValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxOnChange):
        (WebCore::HTMLSelectElement::dispatchChangeEventForMenuList):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        URLParser should parse IPv4 addresses as the last two pieces of an IPv6 address
        https://bugs.webkit.org/show_bug.cgi?id=162991

        Reviewed by Saam Barati.

        The last 32 bits of an IPv6 address can be written in the form of an IPv4 address,
        but the syntax is stricter than if it were just an IPv4 address.  There must be 4 pieces,
        and each piece must be decimal (no octal or hex allowed).  These should serialize to
        regular hex IPv6 addresses.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Piece):
        (WebCore::URLParser::parseIPv4Host):
        (WebCore::URLParser::parseIPv4PieceInsideIPv6):
        (WebCore::URLParser::parseIPv4AddressInsideIPv6):
        (WebCore::URLParser::parseIPv6Host):
        (WebCore::URLParser::parseIPv4Number): Deleted.
        * platform/URLParser.h:

2016-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Put variation fonts work behind a compile-time flag
        https://bugs.webkit.org/show_bug.cgi?id=162949

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontVariationValue.cpp:
        * css/CSSFontVariationValue.h:
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontFeatureValue): Deleted.
        (WebCore::CSSValue::isFontVariationValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontVariationSettings): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritFontFeatureSettings): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritFontVariationSettings): Deleted.
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontVariationSettings): Deleted.
        * css/parser/CSSParserMode.h:
        * page/Settings.in:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::blendFunc): Deleted.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::computeHash):
        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::setFeatureSettings): Deleted.
        (WebCore::FontDescription::setVariationSettings): Deleted.
        * platform/graphics/FontTaggedSettings.cpp:
        (WebCore::operator<<): Deleted.
        * platform/graphics/FontTaggedSettings.h:
        (WebCore::FontVariationSettings::isEmpty):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontVariationSettings): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontVariationSettings): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::variationFontsEnabled):
        (WebCore::InternalSettings::setVariationFontsEnabled):
        * testing/InternalSettings.h:

2016-10-05  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r206830

        * platform/graphics/win/FontPlatformDataWin.cpp: Add missing include
        when building with Direct2D.

2016-10-05  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Disable some CoreGraphics and CoreAnimation-based logic when building for D2D
        https://bugs.webkit.org/show_bug.cgi?id=162977

        Reviewed by Alex Christensen.

        Currently the Direct2D implementation does not support some of the accelerated compositing
        features that require CoreAnimation. During this bring-up, we want to disable these routines
        so that we can build and run in (mostly) unaccelerated drawing.

        This patch mostly consists of adding "#if USE(CG)" and "#if USE(CA)" to files that are
        specific to those implementations.

        This change should have no impact on non-Direct2D ports.

        No change in behavior for active ports.

        * config.h: Turn of CG when building in Direct2D.
        * css/CSSFontFaceSource.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedSVGFont.cpp:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/win/FrameCGWin.cpp:
        * page/win/FrameDirect2D.cpp: Added.
        * platform/graphics/Font.cpp:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCALayer.cpp:
        * platform/graphics/ca/TileController.cpp:
        * platform/graphics/ca/TileGrid.cpp:
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        * platform/graphics/ca/win/PlatformCAAnimationWin.h:
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        * platform/graphics/win/FontCGWin.cpp:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:
        * platform/graphics/win/GradientDirect2D.cpp:
        * platform/graphics/win/PathDirect2D.cpp: Fix a few build problems I didn't notice
        while building without Direct2D active.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/win/DragImageCGWin.cpp:
        * platform/win/DragImageDirect2D.cpp: Added.
        * rendering/RenderMediaControls.cpp:

2016-10-05  Chris Dumez  <cdumez@apple.com>

        KeyboardEvent.getModifierState() should support "CapsLock" modifier
        https://bugs.webkit.org/show_bug.cgi?id=162861

        Reviewed by Darin Adler.

        Add support for "CapsLock" modifier on Mac / iOS for KeyboardEvent's
        getModifierState() API, as per:
        - https://w3c.github.io/uievents/#dom-keyboardevent-getmodifierstate

        No new tests, updated existing test.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::getModifierState):
        * dom/KeyboardEvent.h:
        * platform/PlatformEvent.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::modifiersForEvent):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyIdentifierForKeyEvent):

2016-10-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve OS X UA quirk
        https://bugs.webkit.org/show_bug.cgi?id=162613

        Reviewed by Carlos Garcia Campos.

        Include OS X version number in user agent, like Safari does.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2016-10-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve comment in platformVersionForUAString
        https://bugs.webkit.org/show_bug.cgi?id=162612

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString):

2016-10-05  Zalan Bujtas  <zalan@apple.com>

        Missing quotation mark when <q> gets reparented.
        https://bugs.webkit.org/show_bug.cgi?id=162940

        Reviewed by Darin Adler.

        When an opening RenderQuote gets removed due to some change in the render tree,
        we notify the closing RenderQuote so that it can update its content (") accordingly (and vice versa).
        However when the same RenderQuote is added back to the render tree (aka reparenting), we fail to
        let the other RenderQuote know about it and its content becomes stale.  
        This patch ensures that when either the opening or closing part of the quotation mark gets reparented,
        we inform the other, corresponding opening/closing renderer about it.

        Test: fast/css-generated-content/missing-quotes-with-dynamic-content.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didAttachRenderers):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::insertedIntoTree):
        * rendering/RenderQuote.h:

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly strip unnecessary 0's in IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162979

        Reviewed by Brady Eidson.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv6Host):
        Strip leading 0's and any 0's before the last 0 if the value is 0.

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        UTF-8 encode queries of nonspecial and websocket schemes
        https://bugs.webkit.org/show_bug.cgi?id=162956

        Reviewed by Geoffrey Garen and Brady Eidson.

        The URL spec says in the query state:
        'If url is not special or url's scheme is either "ws" or "wss", set encoding to UTF-8.'
        This should be determined as soon as we are done parsing the scheme.
        
        Covered by new API tests.
        This also fixes tests like fast/loader/javascript-url-encoding-2.html when URLParser is enabled.

        * platform/URLParser.cpp:
        (WebCore::isValidSchemeCharacter):
        Renamed Scheme to ValidScheme so I can use Scheme as the name of an enum class in the same namespace.
        (WebCore::isSpecial):
        (WebCore::scheme):
        Separate functionality so we can have different behavior for different sets of
        ws and wss schemes, special, and non-special schemes.
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::parse):
        Set isUTF8Encoding to true when we finish parsing the scheme if the scheme is ws, wss, or non-special,
        according to spec.  This also matches existing behavior.  This way we will already know whether to go
        into UTF8Query or NonUTF8Query state when we see a '?'.
        (WebCore::isSpecialScheme): Deleted.

2016-10-05  Alex Christensen  <achristensen@webkit.org>

        Prepare to enable URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162974

        Reviewed by Brady Eidson.

        * platform/URL.cpp:
        (WebCore::URL::serialize):
        When we enable the URLParser, this attempt to make serialized URLs more spec compliant
        won't be needed any more.

2016-10-05  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add initial D2D Path and Gradient implementation
        https://bugs.webkit.org/show_bug.cgi?id=162923

        Reviewed by Alex Christensen.

        This patch lands a set of new files that implements initial Path
        and Gradient features on Windows using Direct2D.

        No new tests until complete backend lands.

        * platform/graphics/Gradient.h:
        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/win/GradientDirect2D.cpp: Added.
        * platform/graphics/win/PathDirect2D.cpp: Added.

2016-10-05  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Align function names with spec
        https://bugs.webkit.org/show_bug.cgi?id=162967

        Reviewed by Darin Adler.

        Align function names with spec. Behaviour was already in line with spec, but previous function names had
        sometimes been preserved to track the changes more easily. This led to some inconsistencies (for instance,
        enqueueInReadableStream was still used even though it works on a controller instead of a stream) and it
        also made it more difficult to compare spec and implementation.

        No change in behaviour.

        * Modules/fetch/FetchInternals.js:
        (consumeStream): Updated with new function names.
        * Modules/fetch/FetchResponse.js:
        (clone): Updated with new function names.
        * Modules/streams/ReadableStream.js:
        (tee): Updated with new function names.
        * Modules/streams/ReadableStreamDefaultController.js:
        (enqueue): Updated with new function names.
        (error): Updated with new function names.
        * Modules/streams/ReadableStreamDefaultReader.js:
        (read): Updated with new function names.
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultController): Updated with new function names.
        (readableStreamDefaultControllerError): Updated with new function names.
        (readableStreamTee): Updated with new function names.
        (readableStreamTeePullFunction): Updated with new function names.
        (readableStreamTeeBranch2CancelFunction): Updated with new function names.
        (readableStreamError): Updated with new function names.
        (readableStreamCancel): Updated with new function names.
        (readableStreamDefaultControllerPull): Updated with new function names.
        (readableStreamDefaultControllerClose): Updated with new function names.
        (readableStreamClose): Updated with new function names.
        (readableStreamDefaultControllerEnqueue): Updated with new function names.
        (readableStreamDefaultReaderRead): Updated with new function names.

2016-10-05  Chris Dumez  <cdumez@apple.com>

        [Bindings] Declare dictionary / enumeration template specializations in the header
        https://bugs.webkit.org/show_bug.cgi?id=162929

        Reviewed by Darin Adler.

        Declare dictionary / enumeration template specializations in the header
        so that:
        - They can be used from custom bindings code.
        - Dictionaries / enumerations can be used to their own IDL files to
          share them (Bug 162912).

        No new tests, rebaselined bindings tests.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/IDLTypes.h:
        * bindings/js/JSDOMConvert.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationHeaderContent):
        (GenerateDictionaryHeaderContent):
        (GenerateHeader):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GenerateDefaultValue): Deleted.
        (GenerateDictionaryImplementationContent): Deleted.
        (GenerateParametersCheck): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:

2016-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=162903

        Reviewed by Alex Christensen.

        Rename build guards for the remaining implementation of the legacy EME API
        to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
        of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.

        No new tests -- no change in behavior.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/encryptedmedia/CDM.cpp:
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMPrivate.h:
        * Modules/encryptedmedia/CDMPrivateClearKey.cpp:
        * Modules/encryptedmedia/CDMPrivateClearKey.h:
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp:
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h:
        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        * Modules/encryptedmedia/CDMSessionClearKey.h:
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeyNeededEvent.cpp:
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        * Modules/encryptedmedia/MediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.cpp:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/encryptedmedia/MediaKeys.idl:
        * bindings/js/JSDictionary.cpp:
        * bindings/js/JSDictionary.h:
        * dom/Element.idl:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::webkitGenerateKeyRequest):
        (WebCore::HTMLMediaElement::webkitAddKey):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaError.h:
        * html/MediaError.idl:
        * html/MediaKeyError.h:
        * html/MediaKeyError.idl:
        * page/Settings.h:
        * platform/graphics/CDMSession.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsKeySystem):
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::playerKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockCDM.cpp:
        * testing/MockCDM.h:

2016-10-05  Daniel Bates  <dabates@apple.com>

        Do not follow redirects when sending violation report
        https://bugs.webkit.org/show_bug.cgi?id=162520
        <rdar://problem/27957639>

        Reviewed by Alex Christensen.

        Do not follow redirects when sending a Content Security Policy or XSS Auditor violation report
        as redirects can be used to forward report details to a third-party.

        This changes makes WebKit more closely conform to the reporting requirements in section Reporting
        of the Content Security Level 2 standard: <https://w3c.github.io/webappsec-csp/2/#violation-reports>
        (Editor's Draft, 25 April 2016).

        Tests: http/tests/security/contentSecurityPolicy/report-blocked-uri-and-do-not-follow-redirect-when-sending-report.php
               http/tests/security/xssAuditor/report-script-tag-and-do-not-follow-redirect-when-sending-report.html
               http/tests/security/xssAuditor/report-script-tag-full-block-and-do-not-follow-redirect-when-sending-report.html

        * loader/LoaderStrategy.h: Modified createPingHandle() to take a boolean, shouldFollowRedirects,
        whether to follow redirect responses for a ping request.
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage): Pass ShouldFollowRedirects::Yes to PingLoader::startPingLoad to
        keep our current behavior.
        (WebCore::PingLoader::sendPing): Ditto. Note our current behavior of following redirects matches
        the behavior described in the section "Hyperlink auditing" of the HTML standard:
        <https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing> (23 September 2016).
        (WebCore::PingLoader::sendViolationReport): Pass ShouldFollowRedirects::No to PingLoader::startPingLoad
        so that we do not follow redirects when sending a violation report.
        (WebCore::PingLoader::startPingLoad): Modified to take argument shouldFollowRedirects whether to
        follow redirect responses for a ping request.
        * loader/PingLoader.h:
        * platform/network/PingHandle.h: Add boolean m_shouldFollowRedirects. I grouped this boolean with
        the existing boolean, m_shouldUseCredentialStorage, as opposed to appending to the end of the class
        definition to avoid increasing object size as clang will coalesces the two bools into a single
        machine word. Override ResourceHandleClient::willSendRequest() and ResourceHandleClient::willSendRequestAsync()
        to follow a redirect, if applicable. 

2016-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move global TLS errors handling from ResourceHandle to SoupNetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=162910

        Reviewed by Alex Christensen.

        So that it will be shared with network session code. Also remove setHostAllowsAnyHTTPSCertificate() that we have
        never actually used.

        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::tlsErrorsChangedCallback): Use SoupNetworkSession::checkTLSErrors().
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::HostTLSCertificateSet::add):
        (WebCore::HostTLSCertificateSet::contains):
        (WebCore::HostTLSCertificateSet::computeCertificateHash):
        (WebCore::clientCertificates):
        (WebCore::SoupNetworkSession::setShouldIgnoreTLSErrors):
        (WebCore::SoupNetworkSession::checkTLSErrors):
        (WebCore::SoupNetworkSession::allowSpecificHTTPSCertificateForHost):
        * platform/network/soup/SoupNetworkSession.h:

2016-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move request HTTP body handling to ResourceRequestSoup and simplify it
        https://bugs.webkit.org/show_bug.cgi?id=162891

        Reviewed by Michael Catanzaro.

        We are currently adding the HTTP body to the message in ResourceHandleSoup, but we could do it as part of the
        ResourceRequest::updateSoupMessage() method, since the HTTP body is indeed part of the request. The code can be
        also simplified, especially the handling of files, by using SharedBuffer that already mmaps the file when
        possible, instead of using GMappedFile API.

        * platform/SharedBuffer.h: Add createSoupBuffer() method.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupMessageForHandleAndRequest):
        (WebCore::milisecondsSinceRequest): Deleted.
        (WebCore::ResourceHandle::didStartRequest): Deleted.
        (WebCore::startingCallback): Deleted.
        (WebCore::networkEventCallback): Deleted.
        (WebCore::ResourceHandle::start): Deleted.
        (WebCore::ResourceHandle::releaseForDownload): Deleted.
        (WebCore::ResourceHandle::timeoutFired): Deleted.
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::appendEncodedBlobItemToSoupMessageBody): Helper method to append the blob to the request message body.
        (WebCore::ResourceRequest::updateSoupMessageBody): Add HTTPBody to the request message body.
        (WebCore::ResourceRequest::updateSoupMessage): Call updateSoupMessageBody() to also update the body.
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::createSoupBuffer): Returns a new SoupBuffer for the SharedBuffer.

2016-10-04  Chris Dumez  <cdumez@apple.com>

        Implement KeyboardEvent.code from the UI Event spec
        https://bugs.webkit.org/show_bug.cgi?id=149584

        Reviewed by Darin Adler.

        Add support for Keyboard.code attribute:
        - https://w3c.github.io/uievents/#dom-keyboardevent-code
        - https://w3c.github.io/uievents-code/

        The feature is only enabled on Mac for now as the implementation is
        platform-specific and Mac only.

        Test: fast/events/keyboardevent-code.html

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::code):
        (WebCore::PlatformKeyboardEvent::unmodifiedText): Deleted.
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::codeForKeyEvent):
        (WebCore::keyIdentifierForKeyEvent):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):

2016-10-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The dragged image should be the current frame only of the animated image
        https://bugs.webkit.org/show_bug.cgi?id=162109

        Reviewed by Tim Horton.

        Instead of creating an NSImage with all the frames for the dragImage,
        create an NSImage with the current frame only.

        * dom/DataTransferMac.mm:
        (WebCore::DataTransfer::createDragImage): Call snapshotNSImage() to create the dragImage.
        * editing/cocoa/HTMLConverter.mm:
        (fileWrapperForElement):  Call the Image function with its new name.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::nsImage): Rename getNSImage() to nsImage().
        (WebCore::Image::snapshotNSImage): Returns the NSImage of the current frame.
        (WebCore::Image::tiffRepresentation): Rename getTIFFRepresentation() to tiffRepresentation().
        (WebCore::Image::getNSImage): Deleted.
        (WebCore::Image::getTIFFRepresentation): Deleted.
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::tiffRepresentation): Rename getTIFFRepresentation() to tiffRepresentation().
        (WebCore::BitmapImage::nsImage): Rename getNSImage() to nsImage().
        (WebCore::BitmapImage::snapshotNSImage): Returns the NSImage of the current frame.
        (WebCore::BitmapImage::getTIFFRepresentation): Deleted.
        (WebCore::BitmapImage::getNSImage): Deleted.
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor): Call snapshotNSImage() since the cursor does not animate anyway.
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage): Use snapshotNSImage() for the dragImage.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write): Call the Image function with its new name.

2016-10-04  Andy Estes  <aestes@apple.com>

        [iOS] Crash in WebResourceLoaderQuickLookDelegate when the client cancels the navigation to a QuickLook resource
        https://bugs.webkit.org/show_bug.cgi?id=162950
        <rdar://problem/23759114>

        Reviewed by Brady Eidson.

        When we receive data from QLPreviewConverter for the first time, we call
        ResourceLoader::didReceiveResponse() with the preview NSURLResponse from QuickLook. If the
        client decides to cancel this navigation in decidePolicyForResponse(),
        WebResourceLoaderQuickLookDelegate will end up with a null _resourceLoader after
        didReceiveResponse() returns. This change adds null checks in the methods that use
        _resourceLoader after calling -_sendDidReceiveResponseIfNecessary.

        New API test: QuickLook.CancelNavigationAfterResponse

        * platform/network/ios/QuickLook.mm:
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveDataArray:]): Changed to only
        call ResourceLoader::didReceiveDataArray() if _resourceLoader is non-null.
        (-[WebResourceLoaderQuickLookDelegate connection:didReceiveData:lengthReceived:]): Ditto for
        ResourceLoader::didReceiveData().
        (-[WebResourceLoaderQuickLookDelegate connection:didFailWithError:]): Ditto for
        ResourceLoader::didFail().

2016-10-04  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.isComposing attribute
        https://bugs.webkit.org/show_bug.cgi?id=162921

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.isComposing attribute:
        - https://www.w3.org/TR/uievents/#dom-keyboardevent-iscomposing
        - https://www.w3.org/TR/uievents/#ref-for-dom-keyboardevent-iscomposing-3

        Manual test: https://jsfiddle.net/ay92sr08/9/

        No new tests, extended existing tests.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:

2016-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        ShadowRoot interface should have elementFromPoint
        https://bugs.webkit.org/show_bug.cgi?id=162882

        Reviewed by Chris Dumez.

        Add elementFromPoint to ShadowRoot's prototype as specified at:
        https://www.w3.org/TR/shadow-dom/#extensions-to-the-documentorshadowroot-mixin
        with changes proposed at https://github.com/w3c/csswg-drafts/issues/556

        Added TreeScope::retargetToScope which implements 

        This patch also factors DocumentOrShadowRoot.idl out of Document and ShadowRoot interfaces to better match
        the latest DOM specification: https://dom.spec.whatwg.org/#mixin-documentorshadowroot

        Test: fast/shadow-dom/Document-prototype-elementFromPoint.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::nodeFromPoint): Moved to TreeScope.
        (WebCore::Document::elementFromPoint): Moved to TreeScope.
        * dom/Document.h:
        * dom/Document.idl: Moved elementFromPoint and activeElement to DocumentOrShadowRoot.idl.
        * dom/DocumentOrShadowRoot.idl: Added.
        * dom/EventPath.cpp:
        (WebCore::RelatedNodeRetargeter::checkConsistency): Use newly added TreeScope::retargetToScope.
        * dom/ShadowRoot.idl: Moved activeElement to DocumentOrShadowRoot.idl.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::retargetToScope): Added. Implements https://dom.spec.whatwg.org/#retarget efficiently.
        Instead of checking whether A (node) is a shadow-including inclusive ancestor of B (this scope) at each
        parent, find the lowest ancestor which contains both A and B, and return the self-inclusive ancestor of B
        in that tree. To find the lowest common ancestor in O(n), traverse all ancestors of A and B separately and
        do a top-down traversal. The last tree scope in which A's ancestor and B's ancestor match is the lowest
        common ancestor.
        (WebCore::TreeScope::nodeFromPoint): Moved from Document.
        (WebCore::TreeScope::elementFromPoint): Moved from Document. Use retargetToScope and parentInComposedTree
        instead of parentNode and ancestorInThisScope to match the semantics proposed in
        https://github.com/w3c/csswg-drafts/issues/556
        * dom/TreeScope.h:

2016-10-04  Myles C. Maxfield  <mmaxfield@apple.com>

        font-family: cursive should map to KaiTi in Chinese
        https://bugs.webkit.org/show_bug.cgi?id=162889
        <rdar://problem/28363547>

        Reviewed by Tim Horton.

        According to Bobby Tung, this is a better mapping. Previously, we were
        relying on the system fallback mechanism. However, an explicit mapping
        is more robust.

        Test: fast/text/cursive-zh.html

        * page/cocoa/SettingsCocoa.mm:
        (WebCore::Settings::initializeDefaultFontFamilies):

2016-10-04  Alex Christensen  <achristensen@webkit.org>

        URLParser: query-only URLs relative to file URLs should just add a query
        https://bugs.webkit.org/show_bug.cgi?id=162888

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        Like bug 206749 but with queries instead of fragments.

2016-10-04  Alex Christensen  <achristensen@webkit.org>

        URLParser should match URL::parse and other browsers when parsing a URL containing only scheme://
        https://bugs.webkit.org/show_bug.cgi?id=162909

        Reviewed by Tim Horton.

        If there's no host in this case we shouldn't fail, but rather make a valid URL with the // in the path.
        This matches Chrome, Firefox, and Safari's behavior.
        Covered by API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2016-10-04  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r206773.

        Exclude Direct2D definitions when building for normal CG Windows.

        * platform/graphics/GraphicsContext.h:

2016-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
        https://bugs.webkit.org/show_bug.cgi?id=162916

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/domjit/DOMJITGetterSetter.h: Added.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWin.cmake:

2016-10-04  Chris Dumez  <cdumez@apple.com>

        Return null when window.open() is popup blocked
        https://bugs.webkit.org/show_bug.cgi?id=162897

        Reviewed by Michael Catanzaro.

        The return value of window.open() when the popup is blocked should be null:
        - https://github.com/whatwg/html/pull/1854
        - https://github.com/whatwg/html/issues/1851

        Firefox / Edge return null.

        No new tests, rebaselined existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open):

2016-10-04  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Add support for dictionary inheritance
        https://bugs.webkit.org/show_bug.cgi?id=162907

        Reviewed by Sam Weinig.

        Add support for dictionary inheritance to our Web IDL parser and
        bindings generator. Leverage this new support for EventTarget's
        EventListenerOptions / AddEventListenerOptions dictionaries, in
        order to match the DOM specification:
        - https://dom.spec.whatwg.org/#interface-eventtarget

        Also update the bindings generator to convert the dictionary
        members in lexicographical order, as per:
        - https://heycam.github.io/webidl/#es-dictionary (Step 5.1)

        No new tests, rebaselined bindings tests.

        * bindings/scripts/CodeGenerator.pm:
        (GetDictionaryByName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/IDLParser.pm:
        (parseDictionary):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):
        (WebCore::convertDictionary<TestObj::ParentDictionary>):
        (WebCore::convertDictionary<TestObj::ChildDictionary>):
        * bindings/scripts/test/TestObj.idl:
        * dom/EventTarget.idl:

2016-10-04  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add initial D2D GraphicsContext implementation
        https://bugs.webkit.org/show_bug.cgi?id=162917

        Reviewed by Dean Jackson.

        This patch lands a set of new files that implement the GraphicsContext
        features on Windows using Direct2D.

        No new tests until complete backend lands.

        * platform/graphics/Color.h: Add new casting operator.
        * platform/graphics/FloatSize.h: Ditto.
        * platform/graphics/GraphicsContext.cpp: Update for Direct2D
        implementation.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_VECTOR_4F): Added.
        * platform/graphics/win/GraphicsContextCGWin.cpp: Add compiler
        guard to avoid building when using Direct2D.
        * platform/graphics/win/GraphicsContextDirect2D.cpp: Added.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h: Added.
        * platform/graphics/win/GraphicsContextWin.cpp: Update for Direct2D
        includes.
        * platform/graphics/win/TransformationMatrixDirect2D.cpp: Fix comment.

2016-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove SSLPolicyFlags from SoupNetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=162906

        Reviewed by Michael Catanzaro.

        All soup based ports are setting SSLUseSystemCAFile flag unconditionally, so we can just use that when creating
        the session like we do for all other construct parameters.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::createTestingSession):
        (WebCore::SoupNetworkSession::setupLogger):
        (WebCore::SoupNetworkSession::SoupNetworkSession): Deleted.
        (WebCore::SoupNetworkSession::clearOldSoupCache): Deleted.
        (WebCore::SoupNetworkSession::setHTTPProxy): Deleted.
        * platform/network/soup/SoupNetworkSession.h:
        (WebCore::SoupNetworkSession::soupSession): Deleted.

2016-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls are displayed in the incorrect state momentarily after switching between tabs playing media
        https://bugs.webkit.org/show_bug.cgi?id=162766
        <rdar://problem/28533523>

        Reviewed by Jer Noble.

        When showing Now Playing controls for a media session, we should first set up the Now Playing info and
        playback state before telling MediaRemote to make the session visible. This is WebKit work in ensuring that
        when switching Now Playing sessions by switching tabs, we do not first display an invalid Now Playing state
        before updating to the expected state.

        Adds 2 new WebKit API tests in NowPlayingControlsTests: NowPlayingControlsHideAfterShowingClearsInfo and
        NowPlayingControlsClearInfoAfterSessionIsNoLongerValid.

        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingTitle):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingDuration):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingElapsedTime):
        (WebCore::PlatformMediaSessionManager::hasActiveNowPlayingSession): Deleted.
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

2016-10-04  Youenn Fablet  <youenn@apple.com>

        [Fetch API] ReadableStream should be errored with TypeError values
        https://bugs.webkit.org/show_bug.cgi?id=162895

        Reviewed by Alex Christensen.

        Test: imported/w3c/web-platform-tests/fetch/api/basic/error-after-response.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail): Removing FIXME.
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::error<String>): Erroring with TypeError values.

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Bindings do not throw a TypeError if a required dictionary member is missing
        https://bugs.webkit.org/show_bug.cgi?id=162734

        Reviewed by Geoffrey Garen.

        Bindings should throw a TypeError if a required dictionary member is missing.
        For example, if there is a "required long id" member in a dictionary that is
        missing, our bindings would prevously pass 0 to the implementation instead
        of throwing a TypeError.

        Relevant specification:
        - https://heycam.github.io/webidl/#es-dictionary

        I aligned our bindings generator implementation with the specification,
        except for the support for dictionary inheritance that is still missing
        and will be addressed in a follow-up patch.

        No new tests, I rebaselined the bindings tests and this is already covered
        by fast/events/touch/touch-constructor.html on iOS.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/js/JSDOMConvert.h:
        (WebCore::convert): Deleted.
        (WebCore::Converter<bool>::convert): Deleted.
        (WebCore::Converter<String>::convert): Deleted.
        (WebCore::Converter<IDLDOMString>::convert): Deleted.
        (WebCore::Converter<IDLUSVString>::convert): Deleted.
        (WebCore::Converter<JSC::JSValue>::convert): Deleted.
        (WebCore::Converter<int8_t>::convert): Deleted.
        (WebCore::Converter<uint8_t>::convert): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):

2016-10-03  Zalan Bujtas  <zalan@apple.com>

        [ListItems] Render tree should be all clean by the end of FrameView::layout().
        https://bugs.webkit.org/show_bug.cgi?id=162832

        Reviewed by Simon Fraser.

        List item markers are inserted into the tree during layout, right before laying out
        the list item (that's a big FIXME). At this point we already know what part of the tree
        needs to be laid out. Inserting a list item marker does not expand this dirty area.
        However whenever we insert a new renderer into the tree, we call setNeedsLayout on the contining block chain.
        In certain cases (floating renderers), it could potentially trigger some unintentional markings
        and we return from FrameView::layout() with a dirty subtree.

        This patch preemptively marks the list item and its marker dirty so that
        when the marker is getting inserted into the tree, we stop the marking at the parent.

        Not testable.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):

2016-10-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement rendering of font-variation-settings
        https://bugs.webkit.org/show_bug.cgi?id=162782

        Reviewed by Zalan Bujtas.

        (Re-landing after fixing tests.)

        Because the heavy lifting for font-variation-settings is done by CoreText, 
        this patch is fairly minimal. It simply hooks up the CSS property to CoreText. 

        There is an existing bug in CoreText where variations inside fonts do not 
        survive the addition of a cascade list. Therefore, FontPlatformData::ctFont() 
        needs to work around this (conditionally) by resupplying the variation at 
        the same time as the cascade list. The CoreText bug is <rdar://problem/28449441>. 

        Tests: fast/text/variations/duplicate.html
               fast/text/variations/exist.html
               fast/text/variations/inheritance.html
               fast/text/variations/order.html
               fast/text/variations/outofbounds.html

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAttributesDictionary):
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::cascadeToLastResortFontDescriptor): Deleted.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser should strip tabs at all locations
        https://bugs.webkit.org/show_bug.cgi?id=162836

        Reviewed by Geoffrey Garen.

        Covered by adding tabs to each location of each API test
        except tests that test the encoding of surrogate pairs,
        because inserting a tab between the pairs changes the encoding.

        * platform/URLParser.cpp:
        (WebCore::URLParser::takesTwoAdvancesUntilEnd):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parseIPv4Number):
        (WebCore::URLParser::parseIPv4Host):
        * platform/URLParser.h:

2016-10-03  Antti Koivisto  <antti@apple.com>

        Remove Document::elementSheet()
        https://bugs.webkit.org/show_bug.cgi?id=162876

        Reviewed by Andreas Kling.

        This is a Document owned stylesheet that exists as a context for parsing element inline style.
        It never contains any rules and is generally confusing.

        This patch removes the requirement for a stylesheet to be present for CSSParser to operate in
        the correct context. Inline style is now parsed without stylesheet and a context object is
        passed instead.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::root):
        * bindings/js/JSCSSStyleDeclarationCustom.h:
        (WebCore::root): Deleted.
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        (WebCore::PropertySetCSSStyleDeclaration::cssParserContext):
        (WebCore::StyleRuleCSSStyleDeclaration::parentStyleSheet):
        (WebCore::StyleRuleCSSStyleDeclaration::cssParserContext):
        (WebCore::InlineCSSStyleDeclaration::parentStyleSheet):
        (WebCore::InlineCSSStyleDeclaration::cssParserContext):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::didMutate): Deleted.
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setProperty):
        (WebCore::MutableStyleProperties::setCustomProperty):
        (WebCore::MutableStyleProperties::parseDeclaration):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseCustomPropertyValue):
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseInlineStyleDeclaration):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::usesStyleBasedEditability):
        (WebCore::Document::setHasElementUsingStyleBasedEditability):
        (WebCore::Document::elementSheet): Deleted.
        * dom/Document.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleFromString):
        (WebCore::StyledElement::invalidateStyleAttribute):

            The usesStyleBasedEditability bit used to be set via the elementSheet. Instead check for it after inline style mutations.

        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::addPropertyToPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute): Deleted.
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::applyCSSPropertyToTarget):

2016-10-03  Brent Fulgham  <bfulgham@apple.com>

        Avoid null dereference when changing focus in design mode.
        https://bugs.webkit.org/show_bug.cgi?id=162877
        <rdar://problem/28061261>

        Reviewed by Chris Dumez.

        The bare m_frame pointer in DOMWindow can be cleared when setting focus to a new element. Check
        that the m_frame pointer is non-null before using it after calling a routine that could
        clear the pointer value.

        Test: fast/frames/iframe-focus-crash.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus): Check that the pointer is still non-null after setting the
        current focused element to nullptr.

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.key attribute
        https://bugs.webkit.org/show_bug.cgi?id=36267

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.key attribute:
        - https://w3c.github.io/uievents/#dom-keyboardevent-key

        This is behind a compile time flag that is only enabled on Mac and
        iOS and the implementation is still missing for other platforms.

        Test: fast/events/keyboardevent-key.html

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::key):
        * platform/cocoa/KeyEventCocoa.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyForCharCode):
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder): Deleted.
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.key attribute
        https://bugs.webkit.org/show_bug.cgi?id=36267

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.key attribute:
        - https://w3c.github.io/uievents/#dom-keyboardevent-key

        This is behind a compile time flag that is only enabled on Mac and
        iOS and the implementation is still missing for other platforms.

        Test: fast/events/keyboardevent-key.html

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::key):
        * platform/cocoa/KeyEventCocoa.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyForCharCode):
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder): Deleted.
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser: fragment-only URLs relative to file URLs should just add a fragment
        https://bugs.webkit.org/show_bug.cgi?id=162871

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):
        Instead of adding ///# after copying the base URL to the query, just add an #.

2016-10-03  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] LayoutItem and Button classes
        https://bugs.webkit.org/show_bug.cgi?id=162868
        <rdar://problem/28590166>

        Reviewed by Dean Jackson.

        We introduce the new Button class and its parent class LayoutItem. We will subclass Button
        a lot in coming patches, as it provides a way to create a button and provide a delegate to
        respond to UI events via the `uiDelegate` property. A Button extends a LayoutItem, another
        class that we'll subclass heavily in coming patches, which is simply a LayoutNode with a
        `layoutDelegate` which allows to set the node's `layoutTraits`, a bit-mask allowing to
        specify layout attributes such as the platform and playback styles. 

        Tests: media/modern-media-controls/button/button.html
               media/modern-media-controls/layout-item/layout-item.html

        * Modules/modern-media-controls/controls/button.css: Added.
        (button):
        * Modules/modern-media-controls/controls/button.js: Added.
        (Button):
        (Button.prototype.get enabled):
        (Button.prototype.set enabled):
        (Button.prototype.handleEvent):
        (Button.prototype._handleUIEvent):
        * Modules/modern-media-controls/controls/layout-item.js: Added.
        (LayoutItem.prototype.get layoutTraits):
        (LayoutItem):

2016-10-03  Andy Estes  <aestes@apple.com>

        ASSERTION FAILED: url.containsOnlyASCII() in WebCore::checkEncodedString() when parsing an invalid CSS cursor URL
        https://bugs.webkit.org/show_bug.cgi?id=162763
        <rdar://problem/28572758>

        Reviewed by Youenn Fablet.

        CSSCursorImageValue copies the URL of its underlying CSSImageValue by using the
        ParsedURLString URL constructor on the String returned by CSSImageValue::url(). While
        CSSImageValues were always being constructed from a URL implicitly converted to a String,
        nothing ensured that the URL was valid. For invalid URLs, URL::string() returns the string
        it was constructed with, which might still represent a relative URL or contain non-ASCII
        characters, violating the preconditions of the ParsedURLString URL constructor and causing
        an assertion to fail in Debug builds.

        Fix this by having CSSImageValue store its image URL using a WebCore::URL rather than a
        String. CSSCursorImageValue can then copy this URL instead of attempting to re-parse a
        possibly-invalid URL string.

        Test: fast/css/cursor-with-invalid-url.html

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue): Copied m_imageValue.url() into
        m_originalURL instead of using the ParsedURLString URL constructor, since
        CSSImageValue::url() now returns a WebCore::URL.
        (WebCore::CSSCursorImageValue::loadImage): Created a URL from cursorElement->href() by
        calling Document::completeURL().
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue): Changed to take a URL&& instead of a const String&.
        (WebCore::CSSImageValue::loadImage): Stopped calling Document::completeURL(), since m_url is
        now a WebCore::URL.
        * css/CSSImageValue.h: Changed url() to return a const URL&, and changed m_url to be a URL.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForPresentationAttribute): Removed a call to
        URL::string().
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute): Ditto.
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForPresentationAttribute): Ditto.

2016-10-03  Zalan Bujtas  <zalan@apple.com>

        Log an error to stderr when FrameView::layout() fails to clean all the renderers.
        https://bugs.webkit.org/show_bug.cgi?id=162835

        Reviewed by Simon Fraser.

        We've come across multiple layout/painting bugs caused by renderers left dirty
        after FrameView::layout(). This patch helps catching such issues early.
        Once all the blocking bugs are fixed (webkit.org/b/162835), logging should be replaced with ASSERT(). 

        Not testable.

        * page/FrameView.cpp:
        (WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker):
        (WebCore::FrameView::layout):

2016-10-03  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add D2D Bitmap Image handling code
        https://bugs.webkit.org/show_bug.cgi?id=162761

        Reviewed by Dean Jackson.

        This patch lands a set of new files that implement
        Image and BitmapImage features on Windows using
        Direct2D.

        The desired ID2D1RenderTarget handle is needed by the
        image decoder so that it can load the resulting bitmap
        into the GPU.

        No new tests until complete backend lands.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw): Tell the Direct2D image decoder
        which render target to use.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setRenderTarget): Added.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::decoder): Added.
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::setRenderTarget):
        * platform/graphics/win/ImageBufferDataDirect2D.cpp: Added.
        * platform/graphics/win/ImageBufferDataDirect2D.h: Added.
        * platform/graphics/win/ImageBufferDirect2D.cpp: Added.
        * platform/graphics/win/ImageCGWin.cpp:
        * platform/graphics/win/ImageDecoderDirect2D.cpp: Added.
        * platform/graphics/win/ImageDecoderDirect2D.h: Added.
        * platform/graphics/win/ImageDirect2D.cpp: Added.
        * platform/graphics/win/NativeImageDirect2D.cpp: Added.

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove unused methods toSoupMessage from ResourceRequest/Response
        https://bugs.webkit.org/show_bug.cgi?id=162867

        Reviewed by Sergio Villar Senin.

        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage): Deleted.
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage): Deleted.

2016-10-03  Youenn Fablet  <youenn@apple.com>

        Remove FetchBody::m_isEmpty
        https://bugs.webkit.org/show_bug.cgi?id=162857

        Reviewed by Alex Christensen.

        No change of behavior.

        Moving handling of null bodies in FetchBodyOwner, by having an Optional<FetchBody> in FetchBodyOwner.
        Moving storage of m_contentType in FetchBodyOwner.

        Moving header storage from FetchResponse/FetchRequest to FetchBodyOwner, as it helps updating m_contentType.

        * Modules/fetch/FetchBody.cpp: removing m_isEmpty and m_contentType.
        (WebCore::FetchBody::extract): Computes the default content-type which is stored in FetchBodyOwner.
        (WebCore::FetchBody::blob):
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::loadingSucceeded):
        (WebCore::FetchBody::bodyForInternalRequest):
        (WebCore::FetchBody::clone):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::loadingBody):
        (WebCore::FetchBody::FetchBody):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::FetchBodyOwner):
        (WebCore::FetchBodyOwner::stop):
        (WebCore::FetchBodyOwner::arrayBuffer):
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::cloneBody): Needs to clone m_contentType as well.
        (WebCore::FetchBodyOwner::extractBody):
        (WebCore::FetchBodyOwner::updateContentType):
        (WebCore::FetchBodyOwner::consumeOnceLoadingFinished):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::json):
        (WebCore::FetchBodyOwner::text):
        (WebCore::FetchBodyOwner::loadBlob):
        (WebCore::FetchBodyOwner::blobLoadingSucceeded):
        (WebCore::FetchBodyOwner::blobLoadingFailed):
        (WebCore::FetchBodyOwner::finishBlobLoading):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::body):
        (WebCore::FetchBodyOwner::isBodyNull):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody):
        (WebCore::FetchRequest::internalRequest):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchRequest.h:
        (WebCore::FetchRequest::FetchRequest):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::initializeWith):
        (WebCore::FetchResponse::FetchResponse):
        (WebCore::FetchResponse::cloneForJS):
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::BodyLoader::start):
        (WebCore::FetchResponse::createReadableStreamSource):
        * Modules/fetch/FetchResponse.h:

2016-10-03  Andy Estes  <aestes@apple.com>

        ASSERTION FAILED: result in WebCore::CSSParser::parseURI
        https://bugs.webkit.org/show_bug.cgi?id=141638
        <rdar://problem/27709952>

        Reviewed by Andreas Kling.

        CSSParser::parseURIInternal() failed to parse unquoted URLs with Unicode escape sequences
        greater than 0xFF, even when the destination character type was multi-byte. Fixed by
        checking the size of DestCharacterType instead of SrcCharacterType.

        Updated fast/css/url-with-multi-byte-unicode-escape.html to test for an unquoted URL.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseURIInternal): For code points greater than 0xFF, only returned
        false if sizeof(DestCharacterType) == 1.

2016-10-03  Alex Christensen  <achristensen@webkit.org>

        URLParser: empty relative URLs should not copy fragment from the base URL
        https://bugs.webkit.org/show_bug.cgi?id=162864

        Reviewed by Chris Dumez.

        Covered by new API tests.

        * platform/URL.cpp:
        (WebCore::URL::removeFragmentIdentifier):
        Optimize removing fragments, now that it happens more often. We don't need to reparse, 
        because the result will always be equal to just a substring when removing the fragment at the end.
        * platform/URLParser.cpp:
        (WebCore::URLParser::copyASCIIStringUntil):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::containsOnlyC0ControlOrSpace):
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parse):
        * platform/URLParser.h:
        Because we are not copying the fragment, we can simplify and remove some unreachable code.

2016-10-03  Chris Dumez  <cdumez@apple.com>

        td.scope should only return known values
        https://bugs.webkit.org/show_bug.cgi?id=162755

        Reviewed by Sam Weinig.

        td.scope should only return known values:
        - https://html.spec.whatwg.org/#dom-th-scope

        Firefox conforms to the specification.

        No new tests, rebaselined existing test.

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::scope):

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Simplify AuthenticationChallenge
        https://bugs.webkit.org/show_bug.cgi?id=162784

        Reviewed by Alex Christensen.

        We don't really need to keep references to the SoupSession and SoupMessage in AuthenticationChallenge, the
        SoupNetworkSession callback already forwards the challenge to the right ResourceHandle.

        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):
        (WebCore::AuthenticationChallenge::soupSession): Deleted.
        (WebCore::AuthenticationChallenge::soupMessage): Deleted.
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::continueDidReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::authenticateCallback):

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Cleanup persistent credential storage code
        https://bugs.webkit.org/show_bug.cgi?id=162777

        Reviewed by Alex Christensen.

        We have this feature behind ENABLE_CREDENTIAL_STORAGE flag, which is confusing, because we use credential
        storage unconditionally and this is only about persistent storage. Also the flag assumes libsecret is available,
        and since it's only used by GTK sometimes we use GTK ifdefs instead of CREDENTIAL_STORAGE. So, I think we should
        use USE(LIBSECRET) instead, and reduce a bit the ifdefs in common soup code. Another problem is that current
        implementation is always used, while it should depend on the current network storage session and never used in
        ephemeral sessions. This patch moves the code from CredentialBackingStore to NetworkStorageSessionSoup and
        modernizes a bit.

        * PlatformGTK.cmake: Remove CredentialBackingStore.cpp.
        * platform/gtk/GRefPtrGtk.cpp: Use USE(LIBSECRET)
        * platform/gtk/GRefPtrGtk.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/gtk/CredentialBackingStore.cpp: Removed.
        * platform/network/gtk/CredentialBackingStore.h: Removed.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::schemeFromProtectionSpaceServerType):
        (WebCore::authTypeFromProtectionSpaceAuthenticationScheme):
        (WebCore::NetworkStorageSession::getCredentialFromPersistentStorage):
        (WebCore::NetworkStorageSession::saveCredentialToPersistentStorage):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Deleted.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Deleted.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::continueDidReceiveAuthenticationChallenge): Deleted.
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential): Deleted.
        (WebCore::ResourceHandle::receivedCancellation): Deleted.

2016-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with coordinated graphics enabled after r206712.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):

2016-10-02  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.getModifierState() operation
        https://bugs.webkit.org/show_bug.cgi?id=162855

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.getModifierState() operation:
        - https://w3c.github.io/uievents/#dom-keyboardevent-getmodifierstate

        Test: fast/events/constructors/keyboard-event-getModifierState.html

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::getModifierState):
        * dom/KeyboardEvent.idl:

2016-10-02  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.repeat attribute
        https://bugs.webkit.org/show_bug.cgi?id=162854

        Reviewed by Darin Adler.

        Add support for KeyboardEvent.repeat attribute:
        - https://w3c.github.io/uievents/#dom-keyboardevent-repeat

        No new tests, extended existing test.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:

2016-10-02  Darin Adler  <darin@apple.com>

        Rename ExceptionCode-based exception handling to "legacy"
        https://bugs.webkit.org/show_bug.cgi?id=162859

        Reviewed by Chris Dumez.

        RaisesException is now MayThrowLegacyException.

        A follow-up patch soon will add MayThrowException for the new style,
        where we use ExceptionOr<> as the return type instead of an ExceptionCode
        out argument.

        * bindings/scripts/CodeGeneratorJS.pm:
        Removed the quotation marks from the syntax object->{PropertyName} so the
        renaming script could handle it. Tweaked various comments and logic for clarity.
        Changed to use the perl "x if y" syntax for brevity in many places.
        Renamed with the script and by hand. Added code to skip including the same header
        in both the implementation file and the header, just to make generated bindings
        slightly smaller and faster to compile. Used "using" instead of "typedef".

        * bindings/scripts/IDLAttributes.txt: Updated from old names to new ones.

        * Modules/applepay/ApplePaySession.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchResponse.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/test/TestImplements.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestNondeterministic.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValue.idl:
        * css/FontFace.idl:
        * css/FontFaceSet.idl:
        * css/MediaList.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ChildNode.idl:
        * dom/CustomElementRegistry.idl:
        * dom/DataTransferItemList.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/EventTarget.idl:
        * dom/MessagePort.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/ParentNode.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLVideoElement.idl:
        * html/ImageData.idl:
        * html/MediaController.idl:
        * html/TimeRanges.idl:
        * html/URLUtils.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPath.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLRenderingContextBase.idl:
        * html/track/DataCue.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Crypto.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Performance.idl:
        * page/UserMessageHandler.idl:
        * page/WindowOrWorkerGlobalScope.idl:
        * storage/Storage.idl:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedString.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPointList.idl:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStyleElement.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransformList.idl:
        * svg/SVGViewSpec.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathResult.idl:
        Allowed the rename script to rename the exception-related extended attributes.

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * 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/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.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.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/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.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/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:
        Regenerated.


2016-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls for Soundcloud easily falls out of sync with what's actually playing
        https://bugs.webkit.org/show_bug.cgi?id=162843
        <rdar://problem/28176874>

        Reviewed by Beth Dakin.

        Currently, audio elements are subject to the same main content restrictions as video elements. This is
        problematic on sites where audio elements are really the main content, such as soundcloud. We need a different
        heuristic for determining whether audio elements such as these should be allowed to show playback controls.

        Furthermore, we currently forbid autoplaying audio from showing controls if it has user gesture restrictions
        (i.e. it started playing via script). This is, again, problematic on sites where audio elements are played one
        after another (such as on soundcloud). Even though a subsequent audio element may have been triggered via
        script, we might want still want to show controls for it if the user has explicitly triggered other elements on
        the page to begin playing. However, if the user has not gestured on any media in the page, we still should not
        show controls for audio elements that begin playing via script.

        Adds two new unit tests to TestWebKitAPI simulating audio playback behavior on soundcloud.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::removeBehaviorRestriction):
        (WebCore::MediaElementSession::canShowControlsManager):
        (WebCore::MediaElementSession::allowsPlaybackControlsForAutoplayingAudio):
        * html/MediaElementSession.h:
        * page/Page.h:
        (WebCore::Page::allowsPlaybackControlsForAutoplayingAudio):
        (WebCore::Page::setAllowsPlaybackControlsForAutoplayingAudio):

2016-10-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206683.

        This change caused API test WebKit2.FindMatches to fail on
        Mac.

        Reverted changeset:

        "The dragged image should be the current frame only of the
        animated image"
        https://bugs.webkit.org/show_bug.cgi?id=162109
        http://trac.webkit.org/changeset/206683

2016-10-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r206692 and r206718.

        Seems to have caused >200 failures on Sierra

        Reverted changesets:

        "Implement rendering of font-variation-settings"
        https://bugs.webkit.org/show_bug.cgi?id=162782
        http://trac.webkit.org/changeset/206692

        "Tried to fix the build after r206692."
        http://trac.webkit.org/changeset/206718

2016-10-02  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build after r206692.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):

2016-10-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206716.
        https://bugs.webkit.org/show_bug.cgi?id=162858

        It is breaking Mac CMake Debug build (Requested by youenn on
        #webkit).

        Reverted changeset:

        "[Fetch API] Forbid redirection to non-HTTP(s) URL in non-
        navigation mode."
        https://bugs.webkit.org/show_bug.cgi?id=162785
        http://trac.webkit.org/changeset/206716

2016-10-02  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Forbid redirection to non-HTTP(s) URL in non-navigation mode.
        https://bugs.webkit.org/show_bug.cgi?id=162785

        Reviewed by Alex Christensen.

        Covered by rebased and existing tests.

        Ensuring non-HTTP redirection URLs are not followed at DocumentThreadableLoader level for fetch API only.
        This should be applied to all clients at some point, but there is still some uncertainty for data URLs.

        Did some refactoring to better separate the case of security checks in case of regular request or redirected request.
        This allows in particular to handle more clearly the case of data URLs which are allowed in all modes for regular requests.
        But they are not allowed for same-origin redirected requests.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::reportRedirectionWithBadScheme): Reporting bad scheme redirection error.
        (WebCore::DocumentThreadableLoader::redirectReceived): Checking that redirection URLs are HTTP(s) in case of Fetch API.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy):
        (WebCore::isSameOriginDataURL):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::canRequestAfterRedirection):
        (WebCore::CachedResourceLoader::canRequestInContentDispositionAttachmentSandbox):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:

2016-10-01  Simon Fraser  <simon.fraser@apple.com>

        Support transitions/animations of background-position with right/bottom-relative values
        https://bugs.webkit.org/show_bug.cgi?id=162048

        Reviewed by Dean Jackson.
        
        Make transitions between "background-position: 10px 20px" and "background-position: right 10px bottom 20px"
        work. We do this by by converting "right 10px" to "calc(100% - 10px)" when blending.
        
        Also improve logging of calculated lengths, and better animation logging for FillLayer properties.

        Test: transitions/background-position-transitions.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::FillLayerAnimationPropertyWrapperBase::FillLayerAnimationPropertyWrapperBase): Keep the propertyID
        around so logging can use it.
        (WebCore::FillLayerAnimationPropertyWrapperBase::property):
        (WebCore::FillLayerPropertyWrapperGetter::FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::value):
        (WebCore::FillLayerPropertyWrapper::FillLayerPropertyWrapper):
        (WebCore::createCalculatedLength):
        (WebCore::FillLayerPositionPropertyWrapper::FillLayerPositionPropertyWrapper):
        (WebCore::FillLayerRefCountedPropertyWrapper::FillLayerRefCountedPropertyWrapper):
        (WebCore::FillLayerStyleImagePropertyWrapper::FillLayerStyleImagePropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::CSSPropertyAnimation::blendProperties): Blend then log, so that the logging
        can show the result.
        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionNumber::dump):
        (WebCore::CalcExpressionBinaryOperation::dump):
        (WebCore::CalcExpressionLength::dump):
        (WebCore::CalcExpressionBlendLength::dump):
        (WebCore::operator<<):
        * platform/CalculationValue.h:
        * platform/Length.cpp:
        (WebCore::operator<<):

2016-10-01  Simon Fraser  <simon.fraser@apple.com>

        Bad cast when CSS position programmatically changed from -webkit-sticky to fixed
        https://bugs.webkit.org/show_bug.cgi?id=160826

        Reviewed by Zalan Bujtas.
        
        If a scrolling state tree node changed type (e.g. from sticky to fixed), we'd fail
        to recreate the node so keep a node with the wrong type.
        
        Fix by destroying the node and making a new one with a new ID in this case. The
        new ID is necessary to ensure that the scrolling tree is updated.

        Test: fast/scrolling/sticky-to-fixed.html

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeTypeAndParentMatch):
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/ScrollingStateTree.h:

2016-10-01  Youenn Fablet  <youenn@apple.com>

        removing FetchBoyd::m_type

        Remove FetchBody::m_type
        https://bugs.webkit.org/show_bug.cgi?id=162841

        Reviewed by Sam Weinig.

        No change of behavior.

        Removing FetchBody::m_type and using m_data in lieu.
        Introducing temporarily FetchBody::m_isEmpty to handle the case of null bodies.
        Null body handling should be moved to FetchBodyOwner in a follow-up patch.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::FetchBody):
        (WebCore::FetchBody::extract):
        (WebCore::FetchBody::arrayBuffer):
        (WebCore::FetchBody::blob):
        (WebCore::FetchBody::json):
        (WebCore::FetchBody::text):
        (WebCore::FetchBody::consumeOnceLoadingFinished):
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::loadingSucceeded):
        (WebCore::FetchBody::bodyForInternalRequest):
        (WebCore::FetchBody::clone):
        (WebCore::FetchBody::consumeText): Deleted.
        (WebCore::FetchBody::consumeBlob): Deleted.
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::isEmpty):
        (WebCore::FetchBody::isBlob):
        (WebCore::FetchBody::isFormData):
        (WebCore::FetchBody::isArrayBuffer):
        (WebCore::FetchBody::isArrayBufferView):
        (WebCore::FetchBody::isURLSearchParams):
        (WebCore::FetchBody::isText):
        (WebCore::FetchBody::FetchBody):
        (WebCore::FetchBody::setContentType): Deleted.
        (WebCore::FetchBody::urlSearchParamsBody): Deleted.
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::consumeOnceLoadingFinished):
        (WebCore::FetchBodyOwner::blobLoadingSucceeded):
        (WebCore::FetchBodyOwner::finishBlobLoading): Deleted.
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::body): Deleted.
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::consume):
        (WebCore::FetchResponse::consumeBodyAsStream):
        (WebCore::FetchResponse::createReadableStreamSource):
        (WebCore::FetchResponse::finishConsumingStream): Deleted.
        * Modules/fetch/FetchResponse.h:

2016-09-30  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r203424): WebCore::ImageBuffer::createCompatibleBuffer() in ImageBufferCG.cpp over-releases CGColorSpaceRef objects
        <https://webkit.org/b/162823>
        <rdar://problem/27723268>

        Reviewed by Joseph Pecoraro.

        Code is covered by existing tests, but no crashes have been
        observed in practice.  May require running one test multiple
        times to reproduce.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer): Don't use
        adoptCF() when the function doesn't return a +1 retained
        CGColorSpaceRef.

2016-09-30  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix build break since r206661. Unreviewed
        https://bugs.webkit.org/show_bug.cgi?id=162825

        No new tests, no new behaviours.

        * rendering/RenderLayer.cpp:
        (WebCore::ClipRects::ClipRects):

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Declare that our variation fonts work is in progress
        https://bugs.webkit.org/show_bug.cgi?id=162816

        Reviewed by Simon Fraser.

        * features.json:

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Turn variation fonts on by default
        https://bugs.webkit.org/show_bug.cgi?id=162818

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::variationFontsEnabled):

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement rendering of font-variation-settings
        https://bugs.webkit.org/show_bug.cgi?id=162782

        Reviewed by Zalan Bujtas.

        Because the heavy lifting for font-variation-settings is done by CoreText,
        this patch is fairly minimal. It simply hooks up the CSS property to CoreText.

        There is an existing bug in CoreText where variations inside fonts do not
        survive the addition of a cascade list. Therefore, FontPlatformData::ctFont()
        needs to work around this (conditionally) by resupplying the variation at
        the same time as the cascade list. The CoreText bug is <rdar://problem/28449441>.

        Tests: fast/text/variations/duplicate.html
               fast/text/variations/exist.html
               fast/text/variations/inheritance.html
               fast/text/variations/order.html
               fast/text/variations/outofbounds.html

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAttributesDictionary):
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::cascadeToLastResortFontDescriptor): Deleted.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2016-09-29  Sam Weinig  <sam@webkit.org>

        Add initial support for IDL union conversion
        https://bugs.webkit.org/show_bug.cgi?id=161576

        Reviewed by Chris Dumez.

        * WebCore.xcodeproj/project.pbxproj:
        Add IDLTypes.h

        * bindings/generic/IDLTypes.h: Added.
        Add a basic type hierarchy for types defined by WebIDL and their corresponding
        WebCore implementation types.

        * bindings/js/JSDOMConvert.h:
        (WebCore::Converter<IDLDOMString>::convert):
        (WebCore::Converter<IDLUSVString>::convert):
        Add Converters for IDLDOMString and IDLUSVString.

        (WebCore::ConditionalConverter<typename ReturnType, typename T, bool enabled>)
        Add a struct to allow conditional conversion of types based on a compile boolean
        value. This allows the union code to work, by ensuring that code for types that don't
        exist doesn't get compiled.

        (WebCore::Converter<IDLUnion>::convert):
        Add template meta programming based version of the WebIDL conversion algorithm. It uses
        introspection of the typelist to conditionally execute the parts of the algorithm that
        apply and relies on the compiler eliminate the dead code it produces. This initial cut
        doesn't implement the full algorithm, just a subset needed to see if this method will work
        out.

        * bindings/js/JSDOMWrapper.h:
        (WebCore::isJSDOMWrapperType):
        Add JSDOMWrapperType to the list of well known types to allow quick checking of wrappers
        by the union code.

        * bindings/js/JSNodeOrString.cpp:
        (WebCore::toNodeOrStringVector):
        Switch to new IDLUnion based converter.

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement animation of font-variation-settings
        https://bugs.webkit.org/show_bug.cgi?id=162783

        Reviewed by Simon Fraser.

        Modify CSSPropertyAnimation to understand FontVariationSettings objects and how
        to interpolate them.

        If two FontVariationSettings objects are unlike (meaning they specify different
        variation axes), for now the interpolation simply returns an empty object. This
        might change in the future, but for now, this is a reasonable place to start.

        Because CSSPropertyAnimation interacts with RenderStyles instead of
        FontDescriptions, this patch adds a transparent accessor from the RenderStyle
        to the inner FontDescription.

        Tests: animations/font-variation-settings-order.html
               animations/font-variation-settings-unlike.html
               animations/font-variation-settings.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperFontVariationSettings::PropertyWrapperFontVariationSettings):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontVariationSettings):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontVariationSettings):

2016-09-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] layout nodes
        https://bugs.webkit.org/show_bug.cgi?id=162799
        <rdar://problem/28569301>

        Reviewed by Dean Jackson.

        Modern media controls will be using a tree of LayoutNode objects that commit to the DOM
        in coordinated `requestAnimationFrame()` calls to ensure all layouts are done in an efficient
        and coordinated manner. As a preamble, we introduced the `scheduler` singleton in
        https://webkit.org/b/162726 which is in charge of scheduling callbacks.

        A LayoutNode is created by providing an Element to its constructor, or an HTML string. Not
        providing a parameter creates a simple <div>.

        When we set a property on a LayoutNode, we call `markDirtyProperty(propertyName)` which keeps
        track of dirty properties in the `_dirtyProperties` set. When this set is non-empty, the node
        is marked as dirty and registered in the global `dirtyNodes` map, asking the shared scheduler
        that a layout is needed. When the layout is performed, all nodes in the `dirtyNodes` map are
        processed such that `commitProperty(propertyName)` is called to commit dirty properties for
        a given node to the DOM, and `layout()` is called to allow subclasses of LayoutNode to conduct
        custom layout logic that goes beyond committing a given property.

        Another reason why a node may be marked as dirty is when a DOM hierarchy change is needed. A
        host of DOM-like methods are exposed to allow flexible manipulations of nodes, with an extra
        `children` property which allows wholesale change of a node's subtree with a single array
        property assignment. Changes to the DOM hierarchy are performed in the same scheduler callback
        as style properties.

        Nodes can be marked for layout explicitly with by setting the `needsLayout` property.

        Tests: media/modern-media-controls/layout-node/addChild.html
               media/modern-media-controls/layout-node/children.html
               media/modern-media-controls/layout-node/constructor.html
               media/modern-media-controls/layout-node/height.html
               media/modern-media-controls/layout-node/insertAfter.html
               media/modern-media-controls/layout-node/insertBefore.html
               media/modern-media-controls/layout-node/parent.html
               media/modern-media-controls/layout-node/remove.html
               media/modern-media-controls/layout-node/removeChild.html
               media/modern-media-controls/layout-node/subclassing.html
               media/modern-media-controls/layout-node/visible.html
               media/modern-media-controls/layout-node/width.html
               media/modern-media-controls/layout-node/x.html
               media/modern-media-controls/layout-node/y.html

        * Modules/modern-media-controls/controls/layout-node.js: Added.
        (LayoutNode):
        (LayoutNode.prototype.get x):
        (LayoutNode.prototype.set x):
        (LayoutNode.prototype.get y):
        (LayoutNode.prototype.set y):
        (LayoutNode.prototype.get width):
        (LayoutNode.prototype.set width):
        (LayoutNode.prototype.get height):
        (LayoutNode.prototype.set height):
        (LayoutNode.prototype.get visible):
        (LayoutNode.prototype.set visible):
        (LayoutNode.prototype.get needsLayout):
        (LayoutNode.prototype.set needsLayout):
        (LayoutNode.prototype.get parent):
        (LayoutNode.prototype.get children):
        (LayoutNode.prototype.set children):
        (LayoutNode.prototype.addChild):
        (LayoutNode.prototype.insertBefore):
        (LayoutNode.prototype.insertAfter):
        (LayoutNode.prototype.removeChild):
        (LayoutNode.prototype.remove):
        (LayoutNode.prototype.markDirtyProperty):
        (LayoutNode.prototype.commitProperty):
        (LayoutNode.prototype.layout):
        (LayoutNode.prototype._markNodeManipulation):
        (LayoutNode.prototype._updateDirtyState):
        (LayoutNode.prototype._updateChildren):
        (performScheduledLayout):
        (elementFromString):

2016-09-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The dragged image should be the current frame only of the animated image
        https://bugs.webkit.org/show_bug.cgi?id=162109

        Reviewed by Tim Horton.

        Instead of creating an NSImage with all the frames for the dragImage,
        create an NSImage with the current frame only.

        * dom/DataTransferMac.mm:
        (WebCore::DataTransfer::createDragImage): Call currentFrameNSImage() to create the dragImage.
        * editing/cocoa/HTMLConverter.mm:
        (fileWrapperForElement):  Call the Image function with its new name.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::nsImage): Rename getNSImage() to nsImage().
        (WebCore::Image::currentFrameNSImage): Returns the NSImage of the current frame.
        (WebCore::Image::tiffRepresentation): Rename getTIFFRepresentation() to tiffRepresentation().
        (WebCore::Image::getNSImage): Deleted.
        (WebCore::Image::getTIFFRepresentation): Deleted.
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::tiffRepresentation): Rename getTIFFRepresentation() to tiffRepresentation().
        (WebCore::BitmapImage::nsImage): Rename getNSImage() to nsImage().
        (WebCore::BitmapImage::currentFrameNSImage): Returns the NSImage of the current frame.
        (WebCore::BitmapImage::getTIFFRepresentation): Deleted.
        (WebCore::BitmapImage::getNSImage): Deleted.
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor): Call currentFrameNSImage() since the cursor does not animate anyway.
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage): Use currentFrameNSImage() for the dragImage.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write): Call the Image function with its new name.

2016-09-30  Chris Dumez  <cdumez@apple.com>

        [iOS] Allow sequence<Touch> input in TouchEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=162806
        <rdar://problem/28566429>

        Reviewed by Ryosuke Niwa.

        Allow sequence<Touch> input in TouchEvent constructor in addition to
        TouchList objects. It is convenient for developers to pass arrays of
        Touch objects.

        No new tests, already covered by:
        imported/w3c/web-platform-tests/touch-events/touch-touchevent-constructor.html

        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefNativeArray):
        (WebCore::toRefPtrNativeArray):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Parse font-variation-settings
        https://bugs.webkit.org/show_bug.cgi?id=162781

        Reviewed by Simon Fraser.

        CSS Fonts level 4 [1] details the font-variation-settings property which allows variations
        to be applied to fonts which accept it. The property accepts a list of key/value
        pairs where the keys are four-character Ascii codes and the values are floating
        point values. The implementation uses font-feature-settings as a model, but with one
        big difference: font-variation-settings can be animated. The set of variation points
        are animated individually.

        This font variations work is being done behind a run-time switch, which is settable from
        the Safari Develop menu.

        Now that FontDescription is growing, I'd like to do an investigation into the possibility of
        moving some of the rare pieces of it into their own class to reduce memory. However, upon
        advice, this investigation will be fairly involved and should be done in its own bug.

        Test: fast/text/variations/getComputedStyle.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontVariationValue.cpp: Copied from Source/WebCore/platform/graphics/FontTaggedSettings.cpp.
        (WebCore::CSSFontVariationValue::CSSFontVariationValue):
        (WebCore::CSSFontVariationValue::customCSSText):
        (WebCore::CSSFontVariationValue::equals):
        * css/CSSFontVariationValue.h: Copied from Source/WebCore/platform/graphics/FontTaggedSettings.cpp.
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontVariationValue):
        (WebCore::CSSValue::isFontFeatureValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontVariationSettings):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialFontVariationSettings):
        (WebCore::StyleBuilderCustom::applyInheritFontVariationSettings):
        (WebCore::StyleBuilderCustom::applyInheritFontFeatureSettings): Deleted.
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFeatureSettings):
        (WebCore::CSSParser::parseFontVariationTag):
        (WebCore::CSSParser::parseFontVariationSettings):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserMode.h:
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::computeHash):
        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::variationSettings):
        (WebCore::FontDescription::setVariationSettings):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::featureSettings): Deleted.
        (WebCore::FontDescription::setFeatureSettings): Deleted.
        * platform/graphics/FontTaggedSettings.cpp:
        (WebCore::FontVariationSettings::hash):
        (WebCore::operator<<):
        * platform/graphics/FontTaggedSettings.h:

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Followup patch to r206664
        https://bugs.webkit.org/show_bug.cgi?id=162774

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/FontTaggedSettings.h:
        (WebCore::FourCharacterTagHashTraits::isDeletedValue): Deleted.

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix fast/text/trak-optimizeLegibility.html
        https://bugs.webkit.org/show_bug.cgi?id=162779

        Reviewed by Simon Fraser.

        I accidentally created this test to allow an unnecessary delta
        in the width comparison. This covered the fact that the fonts
        were not being selected correctly in our testing code. Update the
        font selection code to work with system fonts correctly and
        update the test to not use a delta when performing width
        comparisons.

        Test: fast/text/trak-optimizeLegibility.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::isSystemFont):
        (WebCore::platformFontLookupWithFamily):

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Create runtime flag for variation font work
        https://bugs.webkit.org/show_bug.cgi?id=162780

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        Variation font work should be behind a runtime flag.

        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::variationFontsEnabled):
        (WebCore::InternalSettings::setVariationFontsEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2016-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Templatize internal FontFeatureSettings class for variation font support
        https://bugs.webkit.org/show_bug.cgi?id=162774

        Reviewed by Alex Christensen.

        Font features and font variations are similar in that they are identified
        by four-character tags and an associated value. However, the value is an
        int for font features and is a float for font variations. In order to
        simplify code, we can use the same class for both, and use a template
        argument to distinguish between the two. Then, typedefs can be used to
        name them.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj: Rename FontFeatureSettings.{cpp,h}
        to FontTaggedSettings.{cpp,h}
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontFeatureValue.cpp:
        (WebCore::CSSFontFeatureValue::CSSFontFeatureValue):
        * css/CSSFontFeatureValue.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::featureSettings):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFeatureTag):
        * loader/cache/CachedFont.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontFeatureSettings.cpp:
        (WebCore::FontFeature::FontFeature): Deleted.
        (WebCore::FontFeature::operator==): Deleted.
        (WebCore::FontFeature::operator<): Deleted.
        (WebCore::FontFeatureSettings::insert): Deleted.
        (WebCore::FontFeatureSettings::hash): Deleted.
        * platform/graphics/FontFeatureSettings.h: Removed.
        (WebCore::fontFeatureTag): Deleted.
        (WebCore::FontFeatureTagHash::hash): Deleted.
        (WebCore::FontFeatureTagHash::equal): Deleted.
        (WebCore::FontFeatureTagHashTraits::constructDeletedValue): Deleted.
        (WebCore::FontFeatureTagHashTraits::isDeletedValue): Deleted.
        (WebCore::FontFeature::operator!=): Deleted.
        (WebCore::FontFeature::tag): Deleted.
        (WebCore::FontFeature::value): Deleted.
        (WebCore::FontFeature::enabled): Deleted.
        (WebCore::FontFeatureSettings::operator==): Deleted.
        (WebCore::FontFeatureSettings::operator!=): Deleted.
        (WebCore::FontFeatureSettings::size): Deleted.
        (WebCore::FontFeatureSettings::operator[]): Deleted.
        (WebCore::FontFeatureSettings::at): Deleted.
        (WebCore::FontFeatureSettings::begin): Deleted.
        (WebCore::FontFeatureSettings::end): Deleted.
        * platform/graphics/FontTaggedSettings.cpp: Renamed from Source/WebCore/platform/graphics/FontFeatureSettings.cpp.
        (WebCore::FontFeatureSettings::hash):
        * platform/graphics/FontTaggedSettings.h: Added.
        (WebCore::fontFeatureTag):
        (WebCore::FourCharacterTagHash::hash):
        (WebCore::FourCharacterTagHash::equal):
        (WebCore::FourCharacterTagHashTraits::constructDeletedValue):
        (WebCore::FourCharacterTagHashTraits::isDeletedValue):
        (WebCore::FontTaggedSetting::operator!=):
        (WebCore::FontTaggedSetting::tag):
        (WebCore::FontTaggedSetting::value):
        (WebCore::FontTaggedSetting::enabled):
        (WebCore::FontTaggedSetting<T>::FontTaggedSetting):
        (WebCore::=):
        (WebCore::FontTaggedSetting<T>::operator<):
        (WebCore::FontTaggedSettings::operator==):
        (WebCore::FontTaggedSettings::operator!=):
        (WebCore::FontTaggedSettings::isEmpty):
        (WebCore::FontTaggedSettings::size):
        (WebCore::FontTaggedSettings::operator[]):
        (WebCore::FontTaggedSettings::at):
        (WebCore::FontTaggedSettings::begin):
        (WebCore::FontTaggedSettings::end):
        (WebCore::FontTaggedSettings<T>::insert):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::tagEquals):
        (WebCore::appendOpenTypeFeature):
        * platform/graphics/mac/FontCustomPlatformData.h:

2016-09-30  Chris Dumez  <cdumez@apple.com>

        Fragment serialization should always use 'xml:' prefix for attributes in XML namespace
        https://bugs.webkit.org/show_bug.cgi?id=162803

        Reviewed by Sam Weinig.

        Fragment serialization should always use 'xml:' prefix for attributes in XML namespace:
        - https://html.spec.whatwg.org/#serialising-html-fragments
        """
        If the attribute is in the XML namespace
        -> The attribute's serialized name is the string "xml:" followed by the attribute's local name.
        """

        - https://www.w3.org/TR/DOM-Parsing/#dfn-concept-xml-serialization-algorithm
        """
        If ns is the XML namespace, then let qualified name be the concatenation of the string "xml:"
        and the value of node's localName.
        """

        Firefox complies with the specification.

        No new tests, rebaselined existing test.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendAttribute):

2016-09-30  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, rolling out r206611.

        Scroll perf did not recover.

        Reverted changeset:

        "Unreviewed, rolling out r206483."
        https://bugs.webkit.org/show_bug.cgi?id=162750
        http://trac.webkit.org/changeset/206611

2016-09-30  Zalan Bujtas  <zalan@apple.com>

        Remove ClipRects's custom refcounting.
        https://bugs.webkit.org/show_bug.cgi?id=162798

        Reviewed by Simon Fraser.

        It's safer to use RefCounted<>. 

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::ClipRects::ClipRects):
        (WebCore::ClipRectsCache::getClipRects):
        (WebCore::ClipRectsCache::setClipRects):
        (WebCore::ClipRectsCache::getIndex):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::ClipRects::ref): Deleted.
        (WebCore::ClipRects::deref): Deleted.

2016-09-30  Chris Dumez  <cdumez@apple.com>

        FileSaver.js does not work in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=162788

        Reviewed by Sam Weinig.

        FileSaver.js does not work in WebKit:
        - https://eligrey.com/demos/FileSaver.js/

        It works in Firefox and Chrome, but in WebKit, we were getting a
        "Synthetic clicks on anchors that have a download attribute are
        ignored." warning. We were too strict in restricting synthetic clicks.
        We now allow synthetic clicks as long as they are triggered by a user
        gesture.

        Test: fast/dom/HTMLAnchorElement/anchor-download-user-triggered-synthetic-click.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Breakpoints on blank lines or comments don't break
        https://bugs.webkit.org/show_bug.cgi?id=9885
        <rdar://problem/6134406>

        Reviewed by Mark Lam.

        Tests: inspector/debugger/breakpoints/resolved-dump-all-pause-locations.html
               inspector/debugger/breakpoints/resolved-dump-each-line.html

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping out of a function finishes the line that called it.
        https://bugs.webkit.org/show_bug.cgi?id=155325
        <rdar://problem/25094578>

        Reviewed by Mark Lam.

        Tests: inspector/debugger/stepping/stepInto.html
               inspector/debugger/stepping/stepOut.html
               inspector/debugger/stepping/stepOver.html
               inspector/debugger/stepping/stepping-arrow-functions.html
               inspector/debugger/stepping/stepping-classes.html
               inspector/debugger/stepping/stepping-control-flow.html
               inspector/debugger/stepping/stepping-function-calls.html
               inspector/debugger/stepping/stepping-function-default-parameters.html
               inspector/debugger/stepping/stepping-literal-construction.html
               inspector/debugger/stepping/stepping-loops.html
               inspector/debugger/stepping/stepping-misc.html
               inspector/debugger/stepping/stepping-switch.html
               inspector/debugger/stepping/stepping-template-string.html
               inspector/debugger/stepping/stepping-try-catch-finally.html

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::stepInto): Deleted.
        Setting this state in step-into does not make sense since we do not
        know when the debugger resumes and won't know when to clear it.

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        Fix off-by-one error in URLParser::parseIPv4Host
        https://bugs.webkit.org/show_bug.cgi?id=162789

        Reviewed by Tim Horton.

        The spec says "If any but the last item in numbers is greater than 255, return failure."
        This means check up to size - 1, not size - 2.

        Covered by a new API test.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Host):

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        URLParser: parsing a URL with an empty host and a colon should fail
        https://bugs.webkit.org/show_bug.cgi?id=162795

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseHostAndPort):

2016-09-30  Alex Christensen  <achristensen@webkit.org>

        URLParser: handle syntax violations in non-UTF-8 encoded queries
        https://bugs.webkit.org/show_bug.cgi?id=162770

        Reviewed by Tim Horton.

        There is a fast path for queries of URLs that use UTF-8 encoding, which are quite common.
        For non-UTF-8 encoded queries, which are less common, we put the code points in a Vector<UChar>
        and encode them all at once.  If there is a syntax violation in the query, we need to copy the
        syntax-violation-free string up to the beginning of the query, then encode the query.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::percentEncodeByte):
        (WebCore::URLParser::encodeQuery):
        (WebCore::URLParser::parse):
        * platform/URLParser.h:

2016-09-27  Anders Carlsson  <andersca@apple.com>

        Remove a couple of unused members from PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=162641

        Reviewed by Tim Horton.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::nativeVirtualKeyCode): Deleted.
        (WebCore::PlatformKeyboardEvent::macCharCode): Deleted.
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):

2016-09-30  Antti Koivisto  <antti@apple.com>

        Remove "rem" unit optimization for document element font size changes
        https://bugs.webkit.org/show_bug.cgi?id=162778

        Reviewed by Alex Christensen.

        We awkwardly track from the parser level if any stylesheet in a document uses any rem units. This is only used to minimally
        optimize a case where document element's (<html>) font size changes dynamically.

        In practice such changes are rare. Browsing around I couldn't find a single case where this optimization got used.
        Even if it was used it would be of low value as a full style resolution is likely to happen anyway (as font inherits)
        and the only thing really saved is that we don't need to invalidate the matched properties cache.

        * css/CSSGrammar.y.in:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        * css/StyleSheetContents.h:
        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):
        * dom/AuthorStyleSheets.h:
        (WebCore::AuthorStyleSheets::usesRemUnits): Deleted.
        (WebCore::AuthorStyleSheets::setUsesRemUnit): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateBaseURL):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

2016-09-30  Zalan Bujtas  <zalan@apple.com>

        RenderLayer::clipRects may return nullptr.
        https://bugs.webkit.org/show_bug.cgi?id=162729

        Reviewed by Chris Dumez.

        This patch refactors RenderLayer::updateClipRects(), parentClipRects() and backgroundClipRect()
        so that we don't have to rely on this seemingly unsafe line: clipRects = *parent()->clipRects(clipRectsContext);
        Now updateClipRects() returns the computed/cached clip rects as opposed to update and refetch them.
        While this patch makes the code look more readable/safer, it also eliminates cached item tripple retrievals.  

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::ClipRectsCache::getClipRects):
        (WebCore::ClipRectsCache::setClipRects):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::clipRects):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

2016-09-30  Youenn Fablet  <youenn@apple.com>

        Add a way to go from a RefPtr<T> to Ref<const T>
        https://bugs.webkit.org/show_bug.cgi?id=162683

        Reviewed by Alex Christensen.

        No change of behavior.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):

2016-09-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, fix 32-bit build.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::decodedSizeChanged):

2016-09-30  Youenn Fablet  <youenn@apple.com>

        FetchBody should use UTF8Encoding to encode text data
        https://bugs.webkit.org/show_bug.cgi?id=162775

        Reviewed by Sam Weinig.

        Covered by added tests.

        Removing unnecesary vector allocation when extracting UTF8 bytes from a Request/Response text/URLSearchParams body.
        Making use of UTF8Encoding for consistency with  the upload code path.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::consumeText):
        (WebCore::extractBytesFromText): Deleted.

2016-09-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Change the MemoryCache and CachedResource adjustSize functions to take a long argument
        https://bugs.webkit.org/show_bug.cgi?id=162708
        <rdar://problem/28555702>

        Reviewed by Brent Fulgham.

        Because the MemoryCache stores the size of the cached memory in unsigned,
        two problems my happen when reporting a change in the size of the memory:
        
        1. Signed integer overflow -- which can happen because MemoryCache::adjustSize()
           takes a signed integer argument. If the allocated or the freed memory size is
           larger than the maximum of a signed integer, an overflow will happen.
           For the image caching code, this can be seen where the unsigned decodedSize
           is casted to an integer before passing it to ImageObserver::decodedSizeChanged().

        2. Unsigned integer overflow -- which can happen if the new allocated memory
           size plus the currentSize exceeds the maximum of unsigned.
           This can be seen in MemoryCache::adjustSize() where we add delta to m_liveSize
           or m_deadSize without checking whether this addition will overflow or not. We
           do not assert for overflow although we assert for underflow.
           
        The fix for these two problems can be the following:
        
        1. Make all the adjustSize functions all the way till MemoryCache::adjustSize()
           take a signed long integer argument.
           
        2. Do not create a NativeImagePtr for an ImageFrame if its frameBytes plus the
           ImageFrameCache::decodedSize() will exceed the maximum of an unsigned integer.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::decodedSizeChanged): Change the argument to be long. No overflow will happen when casting the argument from unsigned to long.
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp: 
        (WebCore::CachedResource::setDecodedSize): Use long integer casting when calling MemoryCache::adjustSize().
        (WebCore::CachedResource::setEncodedSize): Ditto.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache): Add as static assert to ensure sizeof(long long) can hold any unsigned or its negation.
        (WebCore::MemoryCache::revalidationSucceeded): Use long integer casting when calling MemoryCache::adjustSize().
        (WebCore::MemoryCache::remove): Ditto.
        (WebCore::MemoryCache::adjustSize): Change the function argument to long integer. No overflow will happen when casting the argument from unsigned to long.
        * loader/cache/MemoryCache.h:
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::destroyIncompleteDecodedData): Call a function with its new name.
        (WebCore::ImageFrameCache::decodedSizeChanged): Change the function argument to long integer. No overflow will happen when casting the argument from unsigned to long.
        (WebCore::ImageFrameCache::decodedSizeIncreased): Use long integer casting when calling decodedSizeChanged().
        (WebCore::ImageFrameCache::decodedSizeDecreased): Ditto.
        (WebCore::ImageFrameCache::decodedSizeReset): Ditto.
        (WebCore::ImageFrameCache::didDecodeProperties): Ditto.
        (WebCore::ImageFrameCache::frameAtIndex): Do not create the NativeImage if adding its frameByes to the MemoryCache will cause numerical overflow.
        (WebCore::ImageFrameCache::decodedSizeIncremented): Deleted. This function is renamed decodedSizeIncreased().
        (WebCore::ImageFrameCache::decodedSizeDecremented): Deleted. This function is renamed decodedSizeDecreased().
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageObserver.h:
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::unclampedArea): Returns the area of an IntSize in size_t.
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::decodedSizeChanged): Use long integer casting when calling ImageObserver::decodedSizeChanged().

2016-09-30  Chris Dumez  <cdumez@apple.com>

        Add support for ImageData.data attribute
        https://bugs.webkit.org/show_bug.cgi?id=162767

        Reviewed by Sam Weinig.

        Add support for ImageData.data attribute:
        - https://html.spec.whatwg.org/#imagedata

        Firefox already supports it.

        No new tests, updated existing tests.

        * html/ImageData.idl:

2016-09-30  Youenn Fablet  <youenn@apple.com>

        DumpRenderTree crashed in com.apple.WebCore: WTF::Optional<WebCore::FetchBodyOwner::BlobLoader>::operator bool const + 12
        https://bugs.webkit.org/show_bug.cgi?id=162483

        Reviewed by Alex Christensen.

        Test: fetch/closing-while-fetching-blob.html
        No change of behavior.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::stop): Asserting m_blobLoader is null (meaning that unsetPendingActivity was done)
        only in case FetchBodyOwner has no risk being destroyed.

2016-09-30  Youenn Fablet  <youennf@gmail.com>

        [Fetch API] Add support for URLSearchParams body
        https://bugs.webkit.org/show_bug.cgi?id=162667

        Reviewed by Alex Christensen.

        Tests: imported/w3c/web-platform-tests/fetch/api/basic/request-upload-worker.html
               imported/w3c/web-platform-tests/fetch/api/basic/request-upload.html

        * Modules/fetch/FetchBody.cpp:
        (WebCore::extractBytesFromText): Moving to a static function that should be moved to a String method.
        (WebCore::FetchBody::FetchBody): Adding constructor for URLSearchParams.
        (WebCore::FetchBody::extract): Adding URLSearchParams body initialization.
        (WebCore::FetchBody::consume): Consuming URLSearchParams bodies.
        (WebCore::FetchBody::consumeAsStream): Ditto.
        (WebCore::FetchBody::consumeText): Updated to take a parameter to handle both text and URLSearchParams bodies.
        (WebCore::FetchBody::bodyForInternalRequest): Add URLSearchParams body upload.
        (WebCore::FetchBody::clone): Add URLSearchParams body cloning
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::urlSearchParamsBody):
        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::toString):
        * html/URLSearchParams.h:

2016-09-29  Simon Fraser  <simon.fraser@apple.com>

        Re-order the arguments to drawPattern() functions
        https://bugs.webkit.org/show_bug.cgi?id=162772

        Reviewed by Zalan Bujtas.
        
        Re-order the arguments to have the destination rect come near the front,
        leaving CompositeOperator and BlendMode hanging out at the back like
        other drawing functions.

        No behavior change.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cg/ImageCG.cpp: This file can probably be removed and the code moved, since the
        code is almost the same as the cairo code, and not platform-specific.
        (WebCore::Image::drawPattern):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawPattern::DrawPattern):
        (WebCore::DisplayList::DrawPattern::apply):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawPattern::create):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawPattern):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:

2016-09-29  Chris Dumez  <cdumez@apple.com>

        Add support for download attribute on area elements
        https://bugs.webkit.org/show_bug.cgi?id=162765

        Reviewed by Brent Fulgham.

        Add support for download attribute on area elements:
        - https://html.spec.whatwg.org/#htmlanchorelement

        Because HTMLAreaElement inherits from HTMLAnchorElement on native side,
        and because HTMLAnchorElement already supports the download attribute,
        all that was needed was to add the download attribute to
        HTMLAreaElement.idl file.

        Test: http/tests/download/area-download.html

        * html/HTMLAreaElement.idl:

2016-09-29  Ryosuke Niwa  <rniwa@webkit.org>

        Editor::findStringAndScrollToVisible is unused
        https://bugs.webkit.org/show_bug.cgi?id=162762

        Reviewed by Simon Fraser.

        Deleted the unused function.

        * editing/Editor.cpp:
        (WebCore::Editor::findStringAndScrollToVisible): Deleted.
        * editing/Editor.h:

2016-09-29  Jiewen Tan  <jiewen_tan@apple.com>

        Expose CryptoKey to web workers
        https://bugs.webkit.org/show_bug.cgi?id=162640
        <rdar://problem/28182204>

        Reviewed by Brent Fulgham.

        Tests: crypto/workers/aes-postMessage-worker.html
               crypto/workers/hmac-postMessage-worker.html
               crypto/workers/hrsa-postMessage-worker.html
               crypto/workers/multiple-postMessage-worker.html
               crypto/workers/rsa-postMessage-worker.html

        * crypto/CryptoKey.idl:
        * crypto/SerializedCryptoKeyWrap.h:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::deleteDefaultWebCryptoMasterKey):
        Add a way to delete the default web crypto master key such that we can test
        these APIs and cleanup.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):
        * workers/WorkerGlobalScope.h:

2016-09-29  Nan Wang  <n_wang@apple.com>

        AX: iOS: Tapping <input> in Safari zooms in a bit when page has max scale = 1
        https://bugs.webkit.org/show_bug.cgi?id=162471

        Reviewed by Simon Fraser.

        If the author has defined a maximum scale, we should honor that when keyboard focus moves
        to a text field, instead of using the forceAlwaysUserScalableMaximumScale.

        Tests: fast/forms/ios/user-scalable-does-not-scale-for-keyboard-focus-with-author-defined-scale.html
               fast/forms/ios/user-scalable-does-not-scale-for-keyboard-focus-with-user-scalable-no.html
               fast/forms/ios/user-scalable-scales-for-keyboard-focus-with-no-author-defined-scale.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::allowsUserScaling):
        (WebCore::ViewportConfiguration::allowsUserScalingIgnoringAlwaysScalable):
        (WebCore::ViewportConfiguration::allowsUserScalingIgnoringForceAlwaysScaling): Deleted.
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::maximumScaleIgnoringAlwaysScalable):
        (WebCore::ViewportConfiguration::maximumScale): Deleted.

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        Fix syntax violation handling in IPv4 address parsing
        https://bugs.webkit.org/show_bug.cgi?id=162756

        Reviewed by Tim Horton.

        When we are parsing the up to 4 numbers in an IPv4 address, if we find a syntax violation 
        (the canonicalized address would be different than the input string) then wait to report
        it until we have determined that this is a valid IPv4 address that will be canonicalized.
        If it is not a valid IPv4 address, then we will just treat the characters as the host, and
        that could be no syntax violation.

        Covered by a new API test and existing API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parseIPv4Number):
        (WebCore::URLParser::parseIPv4Host):
        * platform/URLParser.h:

2016-09-29  Chris Dumez  <cdumez@apple.com>

        Fix post-landing nits after r206561.
        https://bugs.webkit.org/show_bug.cgi?id=162659

        Reviewed by Alex Christensen.

        Uses more StringViews and constness.

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        * dom/SecurityContext.h:
        * 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::relList):
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::isSupported):
        * html/LinkRelAttribute.h:

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly parse ports with leading 0's
        https://bugs.webkit.org/show_bug.cgi?id=162752

        * platform/URLParser.cpp:
        (WebCore::URLParser::parsePort):
        Followup.  Remove branches based on Geoffrey's feedback.

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly parse ports with leading 0's
        https://bugs.webkit.org/show_bug.cgi?id=162752

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parsePort):

2016-09-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206483.
        https://bugs.webkit.org/show_bug.cgi?id=162750

        May have caused iOS perf regression (Requested by smfr on
        #webkit).

        Reverted changeset:

        "REGRESSION (r204552): Yelp carousel animation is not smooth."
        https://bugs.webkit.org/show_bug.cgi?id=162632
        http://trac.webkit.org/changeset/206483

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser: make parsing invalid IPv4 addresses more robust and correct
        https://bugs.webkit.org/show_bug.cgi?id=162746

        Reviewed by Tim Horton.

        If parsing an IPv4 address fails, the characters are just treated as a regular domain.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Number):
        (WebCore::URLParser::parseIPv4Host):

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser: IPv6 addresses followed by a colon are invalid
        https://bugs.webkit.org/show_bug.cgi?id=162747

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv6Host):

2016-09-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] scheduler for layout nodes
        https://bugs.webkit.org/show_bug.cgi?id=162726
        <rdar://problem/28543043>

        Reviewed by Dean Jackson.

        For the work on the modern media controls we will be using a tree of LayoutNode objects that will
        commit to the DOM in coordinated `requestAnimationFrame()` calls to ensure all layouts are done
        in an efficient and coordinated manner. As a preamble, we introduce a `scheduler` singleton which
        provides a single public method `scheduleLayout(callback)` to queue callbacks to be fired in the
        next `requestAnimationFrame()` callback.

        Tests: media/modern-media-controls/scheduler/not-reentrant.html
               media/modern-media-controls/scheduler/single-callback-when-registered-multiple-times.html

        * Modules/modern-media-controls/controls/scheduler.js: Added.
        (const.scheduler.new.prototype.scheduleLayout):
        (const.scheduler.new.prototype._requestFrameIfNeeded):
        (const.scheduler.new.prototype._frameDidFire):
        (const.scheduler.new.prototype._layout):

2016-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Text nodes assigned to a linked slot are not clickable
        https://bugs.webkit.org/show_bug.cgi?id=162091
        <rdar://problem/28383300>

        Reviewed by Antti Koivisto.

        The bug was caused by updateMouseEventTargetNode adjusting the target to its parent element when
        the original target was a text node. Fixed the bug by using the parent element in the composed tree.

        Also fixed the bug that the hit testing was not finding the anchor element and keeping the cursor
        in I-beam by traversing the composed tree instead.

        Test: fast/shadow-dom/click-text-inside-linked-slot.html

        * dom/Node.cpp:
        (WebCore::Node::enclosingLinkEventParentOrSelf): Fixed the cursor problem.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode): Fixed the activation problem.

2016-09-29  Sam Weinig  <sam@webkit.org>

        Allow overriding some NSURLSessionConfiguration properties on a per-NetworkProcess basis
        <rdar://problem/27648683>
        https://bugs.webkit.org/show_bug.cgi?id=162735

        Reviewed by Dan Bernstein.

        * platform/spi/cf/CFNetworkSPI.h:
        Forward declare _sourceApplicationSecondaryIdentifier and _CTDataConnectionServiceType

2016-09-29  Antti Koivisto  <antti@apple.com>

        Remove addSubresourceStyleURLs functions
        https://bugs.webkit.org/show_bug.cgi?id=162731

        Reviewed by Ryosuke Niwa.

        Use the generic std::function taking traverseSubresources instead. This prevents bugs caused by the code paths
        not being in sync.

        These functions are only used by the legacy webarchive code to gather URLs to locate CachedResources from the memory cache.
        This can be improved further by returning the cached resources themselves instead of the URLs.

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::addSubresourceStyleURLs): Deleted.
        * css/CSSFontFaceSrcValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::addSubresourceStyleURLs): Deleted.
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::addSubresourceStyleURLs): Deleted.
        * css/CSSReflectValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::addSubresourceStyleURLs): Deleted.
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::addSubresourceStyleURLs): Deleted.
        * css/CSSValueList.h:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::addSubresourceStyleURLs): Deleted.
        * css/StyleProperties.h:
        * css/StyleRuleImport.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::traverseSubresources):

            Fix a bug where this would miss @import rules in @imported stylesheets.
            Include the CachedResource for the imported stylesheet itself.

            Tested by the test cases under LayoutTests/webarchive

        (WebCore::StyleSheetContents::addSubresourceStyleURLs): Deleted.
        * css/StyleSheetContents.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs):

2016-09-29  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add D2D Font handling code
        https://bugs.webkit.org/show_bug.cgi?id=162712

        Reviewed by Brent Fulgham.

        This patch lands a set of new files that implement 

        No new tests until complete backend lands.

        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::syntheticObliqueAngle): Added helper function.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::dwFont): Added.
        (WebCore::FontPlatformData::dwFontFace): Ditto.
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs): Use helper function.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs): Ditto.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Add case for Direct2D.
        * platform/graphics/win/FontCascadeDirect2D.cpp: Added.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Fix whitespace.
        (WebCore::FontCustomPlatformData::fontPlatformData): Add Direct2D case.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Clean up C++ initializers.
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        * platform/graphics/win/FontPlatformDataDirect2D.cpp: Added.
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Clean up C++ initializers.
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp: Added.
        * platform/graphics/win/SimpleFontDataDirect2D.cpp: Added.
        * platform/graphics/win/TextAnalyzerHelper.cpp: Added.
        * platform/graphics/win/TextAnalyzerHelper.h: Added.

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should fail to parse unclosed IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162715

        Reviewed by Tim Horton.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseHostAndPort):

2016-09-29  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore tabs at all possible locations
        https://bugs.webkit.org/show_bug.cgi?id=162711

        Reviewed by Tim Horton.

        The URL spec says to remove all tabs and newlines before parsing a URL.
        To reduce passes on the URL and copies of data, I chose to just ignore them every time I increment the iterator.
        This is fragile, but faster.  It can be completely tested, though.  That is what this patch does.

        Covered by an addition to the API tests that tries inserting one tab at each location of each test.

        * platform/URLParser.cpp:
        (WebCore::URLParser::advance):
        (WebCore::URLParser::isWindowsDriveLetter):
        (WebCore::URLParser::appendWindowsDriveLetter):
        (WebCore::URLParser::isPercentEncodedDot):
        (WebCore::URLParser::isSingleDotPathSegment):
        (WebCore::URLParser::isDoubleDotPathSegment):
        (WebCore::URLParser::consumeSingleDotPathSegment):
        (WebCore::URLParser::consumeDoubleDotPathSegment):
        (WebCore::URLParser::checkLocalhostCodePoint):
        (WebCore::URLParser::isAtLocalhost):
        (WebCore::URLParser::isLocalhost):
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parse):
        (WebCore::isPercentEncodedDot): Deleted.
        (WebCore::isSingleDotPathSegment): Deleted.
        (WebCore::isDoubleDotPathSegment): Deleted.
        (WebCore::consumeSingleDotPathSegment): Deleted.
        (WebCore::consumeDoubleDotPathSegment): Deleted.
        * platform/URLParser.h:
        (WebCore::URLParser::advance):

2016-09-29  Simon Fraser  <simon.fraser@apple.com>

        Fix hit testing on display:block <svg> elements
        https://bugs.webkit.org/show_bug.cgi?id=162717
        rdar://problem/23261130

        Reviewed by Zalan Bujtas.

        RenderSVGRoot::nodeAtPoint() needs to test for both the HitTestBlockBackground and
        HitTestChildBlockBackground phases, since we only get the HitTestChildBlockBackground
        phase when the <svg> is a block. This is similar to code in RenderTable::nodeAtPoint(),
        and matches Blink code.
        
        This fixes the point dragging on http://anthonydugois.com/svg-path-builder/.

        Test: svg/hittest/block-svg.html

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2016-09-29  Chris Dumez  <cdumez@apple.com>

        Assigning non-numeric to input.minlength should set minlength to 0
        https://bugs.webkit.org/show_bug.cgi?id=162727

        Reviewed by Ryosuke Niwa.

        There was a typo when we were updating the m_minLength member from the 'min'
        content attribute instead of the 'minlength' one.

        Test: imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/minlength.html.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):

2016-09-29  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Fix overload resolution when the distinguishing argument is a Window
        https://bugs.webkit.org/show_bug.cgi?id=162728

        Reviewed by Ryosuke Niwa.

        Fix overload resolution when the distinguishing argument is a Window.
        Window is special because we could have a window or a proxy to the
        Window (JSDOMWindowShell).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadedFunctionOrConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod13):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/TestObj.idl:

2016-09-29  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=162262

        Reviewed by Anders Carlsson.

        If CoreText.h is included, we will get redefinition compile errors on some older SDK
        versions. 

        * platform/spi/win/CoreTextSPIWin.h:

2016-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove WebCoreSynchronousLoader from ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=162723

        Reviewed by Sergio Villar Senin.

        Since all soup based ports switched to NetworkProcess this is dead code.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2016-09-29  Nan Wang  <n_wang@apple.com>

        AX: Meter: [Mac] Content in label element should be used as AXTitle or AXDescription
        https://bugs.webkit.org/show_bug.cgi?id=162586

        Reviewed by Chris Fleizach.

        Exposed the label element's text as AXDescription for meter elements.
        Also refactored the code for fetching the label element's text and taken care of 
        the case where aria-label and aria-labelledby attributes are used on label elements. 

        Test: accessibility/mac/meter-with-label-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isLabelable):
        (WebCore::AccessibilityNodeObject::textForLabelElement):
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::title):
        (WebCore::AccessibilityNodeObject::usesAltTagForTextComputation): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):

2016-09-29  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Streams API] Improve ReadableStreamDefaultController.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=160293

        Reviewed by Youenn Fablet.

        Various small improvements in ReadableStreamDefaultController code (helper methods and asserts).

        No change in behaviour.

        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::isControlledReadableStreamLocked): Added an assert and updated based 
        on new helper methods.
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::close): Updated based on new helper methods.
        (WebCore::ReadableStreamDefaultController::error): Updated based on new helper methods.
        (WebCore::ReadableStreamDefaultController::enqueue): Added an assert and updated based on new helper methods.
        (WebCore::ReadableStreamDefaultController::jsController): New helper method.
        (WebCore::ReadableStreamDefaultController::globalObject): Return reference instead of pointer.
        (WebCore::ReadableStreamDefaultController::globalExec): New helper; return reference after performing an assert.
        (WebCore::ReadableStreamDefaultController::error<String>): Added an assert and updated based on new helper methods.

2016-09-29  Jon Davis  <jond@apple.com>

        Added Beacon API to the Feature Status page.
        https://bugs.webkit.org/show_bug.cgi?id=162630

        Reviewed by Alex Christensen.

        * features.json:

2016-09-28  Chris Dumez  <cdumez@apple.com>

        Drop first 'state' parameter to JSDOMWindow::toWrapped() / JSEventTarget::toWrapped()
        https://bugs.webkit.org/show_bug.cgi?id=162709

        Reviewed by Alex Christensen.

        Drop first 'state' parameter to JSDOMWindow::toWrapped() / JSEventTarget::toWrapped()
        as it is unused. This is the quickest way to allow DOMWindow / EventTarget members
        in IDL dictionaries. This is because the generated bindings code relies on
        convertWrapperType() in JSDOMConvert.h which calls toWrapped() with a single
        parameter. Right now, the only type that requires an ExecState for its toWrapped()
        is XPathNSResolver (which should likely be a callback interface rather than a
        regular interface).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (JSValueToNative):

2016-09-28  Chris Dumez  <cdumez@apple.com>

        Log console messages when the anchor download attribute is ignored
        https://bugs.webkit.org/show_bug.cgi?id=162703

        Reviewed by Alex Christensen.

        Log console messages when the anchor download attribute is ignored so
        that the developer can better understand what's happening.

        No new tests, rebaselined existing tests.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2016-09-28  Chris Dumez  <cdumez@apple.com>

        Add support for DOMTokenList.supports()
        https://bugs.webkit.org/show_bug.cgi?id=162659

        Reviewed by Ryosuke Niwa.

        Add support for DOMTokenList.supports():
        - https://dom.spec.whatwg.org/#dom-domtokenlist-supports

        Firefox and Chrome already recently implemented it (Chrome since
        version 50 and Firefox since version 49).

        Test: fast/dom/DOMTokenList-supports.html

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        (WebCore::SecurityContext::enforceSandboxFlags): Deleted.
        * dom/SecurityContext.h:
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::DOMTokenList):
        (WebCore::DOMTokenList::supports):
        (WebCore::DOMTokenList::replace): Deleted.
        * html/DOMTokenList.h:
        (WebCore::DOMTokenList::DOMTokenList):
        * html/DOMTokenList.idl:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        (WebCore::HTMLAnchorElement::relList):
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::sandbox):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::relList):
        * html/HTMLTableCellElement.idl:
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::isSupported):
        (WebCore::LinkRelAttribute::LinkRelAttribute): Deleted.
        * html/LinkRelAttribute.h:

2016-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        DOMTokenList’s value and stringifier should not return parsed tokens
        https://bugs.webkit.org/show_bug.cgi?id=161076

        Reviewed by Chris Dumez.

        Updated our implementation of DOMTokenList.prototype.value and its toString function
        to match the latest DOM specification: https://dom.spec.whatwg.org/#interface-domtokenlist

        "value" attribute, on getting, runs its serialize steps, which simply gets the attribute value.
        On setting, it sets the attribute value with the given value.

        The stringification behavior returns the same serialize steps as "value" attribute on getting.

        This change simplifies our implementation of DOMTokenList and removes the need for m_cachedValue,
        which has been removed in this patch.

        No new tests since existing tests cover this.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::value): Just call getAttribute.
        (WebCore::DOMTokenList::setValue): Just call setAttribute.
        (WebCore::DOMTokenList::updateTokensFromAttributeValue):
        (WebCore::DOMTokenList::associatedAttributeValueChanged):
        (WebCore::DOMTokenList::updateAssociatedAttributeFromTokens): Moved the code to update the tokens
        from from the attribute value. This is the "update steps".
        * html/DOMTokenList.h:

2016-09-28  Jer Noble  <jer.noble@apple.com>

        CRASH at WebCore::CDMSessionAVStreamSession::update + 950
        https://bugs.webkit.org/show_bug.cgi?id=162701

        Reviewed by Beth Dakin.

        If the SourceBuffer backing a <video> element is removed before CDMSessionAVStreamSession::update() gets
        a chance to run, the protectedSourceBuffer will be null. Just bail early and indicate an error.

        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update):

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should properly handle unexpected periods and overflows in IPv4 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162655

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Number):
        (WebCore::URLParser::parseIPv4Host):
        * platform/URLParser.h:

2016-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Some media tests are crashing due to soft-linking failures
        https://bugs.webkit.org/show_bug.cgi?id=162698

        Reviewed by Jer Noble.

        We should be handling soft-linking failures for MRMediaRemoteSetNowPlayingVisibility gracefully. Guards these
        calls with canLoad_MediaRemote_MRMediaRemoteSetParentApplication and also use the
        SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER macro when soft linking.

        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore tabs in authority
        https://bugs.webkit.org/show_bug.cgi?id=162694

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseAuthority):

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should ignore extra slashes after scheme:// and handle a missing slash after the port
        https://bugs.webkit.org/show_bug.cgi?id=162690

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2016-09-28  Alex Christensen  <achristensen@webkit.org>

        URLParser should correctly canonicalize uppercase IPv6 addresses
        https://bugs.webkit.org/show_bug.cgi?id=162680

        Reviewed by Tim Horton.

        Covered by a new API test.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv6Host):
        If there is an uppercase character in the IPv6 address part, then it is a syntax violation
        because the canonicalized IPv6 address differs from the input String.

2016-09-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build.

        * bindings/js/ios/TouchConstructors.cpp:

2016-09-28  Chris Dumez  <cdumez@apple.com>

        It should be possible to dispatch events on template documents
        https://bugs.webkit.org/show_bug.cgi?id=162687

        Reviewed by Ryosuke Niwa.

        It should be possible to dispatch events on template documents. Firefox
        supports this. Chrome does not but this is likely not intentional as
        Chrome generally supports dispatching events on frameless documents.

        Test: fast/dom/template-document-dispatchEvent.html

        * dom/Document.cpp:
        (WebCore::Document::ensureTemplateDocument):

2016-09-27  Dean Jackson  <dino@apple.com>

        Use Color references where possible
        https://bugs.webkit.org/show_bug.cgi?id=162643
        <rdar://problem/28506550>

        Reviewed by Simon Fraser.

        There were a bunch of places where we pass or use
        Colors by value. As the Color class gets a bit more
        complicated, it would be nice to avoid copying, so
        use references where possible.

        * css/CSSGradientValue.cpp:
        (WebCore::interpolate):
        * css/StyleColor.h:
        (WebCore::StyleColor::getColor):
        (WebCore::StyleColor::resolve):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::backgroundColor):
        * dom/Document.h:
        (WebCore::Document::textColor):
        * editing/FrameSelection.cpp:
        (WebCore::disappearsIntoBackground):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/track/TextTrackCueGeneric.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::setBackgroundColor):
        * page/PageOverlay.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperColor::PropertyWrapperColor):
        (WebCore::PropertyWrapperMaybeInvalidColor::PropertyWrapperMaybeInvalidColor):
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::strokeColor):
        (WebCore::GraphicsContext::fillColor):
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::foregroundColor):
        (WebCore::GenericCueData::setForegroundColor):
        (WebCore::GenericCueData::backgroundColor):
        (WebCore::GenericCueData::setBackgroundColor):
        (WebCore::GenericCueData::highlightColor):
        (WebCore::GenericCueData::setHighlightColor):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawFocusRingPath::color):
        (WebCore::DisplayList::DrawFocusRingRects::color):
        (WebCore::DisplayList::FillRectWithColor::color):
        (WebCore::DisplayList::FillCompositedRect::color):
        (WebCore::DisplayList::FillRoundedRect::color):
        (WebCore::DisplayList::FillRectWithRoundedHole::color):
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::lightingColor):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDropShadow.h:
        (WebCore::FEDropShadow::shadowColor):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::floodColor):
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::lightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FilterOperation.h:
        * rendering/BorderEdge.h:
        (WebCore::BorderEdge::color):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        * rendering/InlineTextBox.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::borderStartEdgeColor):
        (WebCore::borderEndEdgeColor):
        (WebCore::borderFillColor):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderInline.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextWithShadows):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::color):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::color):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::color):
        (WebCore::RenderStyle::visitedLinkColor):
        (WebCore::RenderStyle::setColor):
        (WebCore::RenderStyle::setVisitedLinkColor):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::borderLeftColor):
        (WebCore::RenderStyle::borderRightColor):
        (WebCore::RenderStyle::borderTopColor):
        (WebCore::RenderStyle::borderBottomColor):
        (WebCore::RenderStyle::backgroundColor):
        (WebCore::RenderStyle::columnRuleColor):
        (WebCore::RenderStyle::outlineColor):
        (WebCore::RenderStyle::textEmphasisColor):
        (WebCore::RenderStyle::textFillColor):
        (WebCore::RenderStyle::textStrokeColor):
        (WebCore::RenderStyle::visitedLinkBackgroundColor):
        (WebCore::RenderStyle::visitedLinkBorderLeftColor):
        (WebCore::RenderStyle::visitedLinkBorderRightColor):
        (WebCore::RenderStyle::visitedLinkBorderBottomColor):
        (WebCore::RenderStyle::visitedLinkBorderTopColor):
        (WebCore::RenderStyle::visitedLinkOutlineColor):
        (WebCore::RenderStyle::visitedLinkColumnRuleColor):
        (WebCore::RenderStyle::textDecorationColor):
        (WebCore::RenderStyle::visitedLinkTextDecorationColor):
        (WebCore::RenderStyle::visitedLinkTextEmphasisColor):
        (WebCore::RenderStyle::visitedLinkTextFillColor):
        (WebCore::RenderStyle::visitedLinkTextStrokeColor):
        (WebCore::RenderStyle::stopColor):
        (WebCore::RenderStyle::floodColor):
        (WebCore::RenderStyle::lightingColor):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):

2016-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        assignedNodes should include fallback contents when flattened option is set
        https://bugs.webkit.org/show_bug.cgi?id=162656

        Reviewed by Antti Koivisto.

        Fixed the bug by traversing through fallback contents when there are no assigned nodes.

        Tests: imported/w3c/web-platform-tests/shadow-dom/slots.html
               imported/w3c/web-platform-tests/shadow-dom/slots-fallback.html

        * html/HTMLSlotElement.cpp:
        (WebCore::flattenAssignedNodes):
        (WebCore::HTMLSlotElement::assignedNodes):

2016-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Adopt MediaRemote SPI to achieve desired Now Playing behavior
        https://bugs.webkit.org/show_bug.cgi?id=162658
        <rdar://problem/28499358>

        Reviewed by Jer Noble.

        Restores the changes previously rolled out in r206444, and adopts new MediaRemote SPI to achieve the desired
        behavior for media in background tabs without breaking other features.

        Introduces 2 new unit tests in NowPlayingControlsTests.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::pageAllowsNowPlayingControls):
        * page/Page.cpp:
        (WebCore::Page::setViewState):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::hasActiveNowPlayingSession):
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:
        * platform/spi/mac/MediaRemoteSPI.h:

2016-09-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r206481): ASSERTION FAILED: isDecoderAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=162665

        Reviewed by Simon Fraser.

        Remove a wrong assertion from ImageSource::destroyDecodedData(). Before
        r206481, the original function BitmapImage::destroyDecodedData() did not
        have this assertion. Destroying the decoded ImageFrames can happen after
        releasing the ImageDecoder. And it can happen also if decoding the image
        fails and BitmapImage::isNull() is true. See CachedImage::finishLoading().

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::destroyDecodedData):

2016-09-28  Youenn Fablet  <youenn@apple.com>

        WebCore::ResourceErrorBase::setType is crashing
        https://bugs.webkit.org/show_bug.cgi?id=162484
        <rdar://problem/28390828>

        Reviewed by Alex Christensen.

        Test: http/tests/xmlhttprequest/on-network-timeout-error-during-preflight.html

        Behavior is slightly changed as we are no longer casting Timeout preflight errors as AccessControl errors.
        This is more inline with fetch spec which prescribes to send back any error received by preflight as response error for fetch.

        Ideally, we should not need to change errors received during preflight loads but the error type is important for some clients:
        - EventSource may try to reconnect if error is not AccessControl
        - XMLHttpRequest will send abort events in case of Cancellation errors and timeout events in case of Timeout errors

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::notifyFinished): Setting error type to AccessControl except in case of Timeout.
        (WebCore::CrossOriginPreflightChecker::doPreflight): Ditto.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::preflightFailure): Removing ASSERT since Timeout errors may be returned.
        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::isGeneral): New getter.

2016-09-28  Jer Noble  <jer.noble@apple.com>

        PiP shows incorrect state of play button.
        https://bugs.webkit.org/show_bug.cgi?id=162652

        Reviewed by Eric Carlson.

        After getting a new WebPlaybackSessionModel, the first thing WebVideoFullscreenInterfaceMac
        should do is query for it's playbackRate() and isPlaying() properties.

        * platform/mac/WebVideoFullscreenInterfaceMac.mm:
        (WebCore::WebVideoFullscreenInterfaceMac::WebVideoFullscreenInterfaceMac):

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add Chrome UA quirk
        https://bugs.webkit.org/show_bug.cgi?id=162617

        Reviewed by Carlos Garcia Campos.

        Add Chrome UA quirk and use it on typekit.net, typekit.com, youtube.com, slack.com, and
        any domain that begins with "google".

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):
        (WebCore::urlRequiresChromeBrowser):
        (WebCore::standardUserAgentForURL):

2016-09-28  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] In SourceBufferPrivateAVFObjC::abort(), support reseting parser to the last appended initialization segment.
        https://bugs.webkit.org/show_bug.cgi?id=135164

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-abort-resets-parser.html

        Use the -[AVStreamDataParser appendStreamData:withFlags:] to implement "resetting" the parser. In this case,
        the parser isn't explicitly reset during resetParserState(), but rather a flag is set so that the next append
        signals a data discontinuity, and the parser is reset at that point.

        Because a previous append operation may be in-flight during this abort(), care must be taken to invalidate any
        operations which may have already started on a background thread. So SourceBufferPrivateAVFObjC will use a
        separate WeakPtrFactory for its append operations, will invalidate any outstanding WeakPtrs during an abort(),
        and will block until the previous append() operation completes.

        This will require the WebAVStreamDataParserListener object to occasionally have it's WeakPtr pointing back to the
        SourceBufferPrivateAVFObjC to be reset after an abort(), so make that ivar an @property. Rather than passing a
        RetainPtr to itself in all the callbacks it handles, the WebAVStreamDataParserListener can just pass in a copy
        of its own WeakPtr (which may be invalidated during an abort()).

        Break the distinct operations of "abort()" and "resetParserState()" into their own methods in SourceBufferPrivate
        and all its subclasses.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::resetParserState):
        (WebCore::SourceBuffer::abortIfUpdating):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):
        (-[WebAVStreamDataParserListener initWithParser:parent:]): Deleted.
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::resetParserState):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::resetParserState):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/spi/mac/AVFoundationSPI.h:

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] User agent should always claim to be Intel
        https://bugs.webkit.org/show_bug.cgi?id=162610

        Reviewed by Carlos Garcia Campos.

        We should always claim to be running on Intel regardless of actual CPU type. See discussion
        in bug #162548 for details. In particular, we can never advertise ARM because it causes dumb
        websites to send mobile pages.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString):
        (WebCore::buildUserAgentString):
        (WebCore::cpuDescriptionForUAString): Deleted.

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Adjust OS X UA quirks list
        https://bugs.webkit.org/show_bug.cgi?id=162616

        Reviewed by Carlos Garcia Campos.

        Remove the OS X quirk for yahoo.com as it's no longer needed. Add quirks for taobao.com and
        whatsapp.com.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::standardUserAgentForURL):

2016-09-28  Alejandro G. Castro  <alex@igalia.com>

        Add WebIDL special operation support: serializer
        https://bugs.webkit.org/show_bug.cgi?id=156293

        Reviewed by Youenn Fablet.

        Added support for the serializer special operation for WebIDLs,
        current implementation adds support for:
          - just the keyword: serializer; It will return all the
            attributes of in an object.
          - map of entries with the attributes: serializer = {attribute1,
            attribute2, ...}

        It creates a toJSON method that returns the serialized value
        converted into an ECMAScript value. For more information check the
        definition of the operation:

        http://heycam.github.io/webidl/#idl-serializers

        We have created a new function in the API of the objects
        that are marked as serializer.

        Used the support to add new API for RTCIceCandidate and
        RTCSessionDescription.

        Updated the tests expectations of the bindings.

        Tests: bindings/scripts/test/TestNode.idl
               bindings/scripts/test/TestObj.idl
               fast/mediastream/RTCIceCandidate.html
               fast/mediastream/RTCSessionDescription.html

        * Modules/mediastream/RTCIceCandidate.idl: Added the serializer
        operation.
        * Modules/mediastream/RTCSessionDescription.idl: Added the
        serializer operation.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Added the calls to the serializer
        code generator.
        (GenerateSerializerFunction): Added, generates the toJSON function
        adding all the serializable->attributes value to an object as
        defined in the spec.
        * bindings/scripts/IDLParser.pm: Modified the serializer parser
        that was unused to support the WebIDL spec parts. Added a new
        domSerializable type to store the list of attributes in the
        possible map.
        (parseSerializer): Modified the function to follow the
        semicolon rule in the spec, now the serializer line must have a
        semicolon like any other line.
        (parseSerializerRest): The function now has to get the attributes
        list from the pattern parsing function and add them to the
        domSerializable item.
        (parseSerializationPattern): Now this function returns the list of
        attributes in the serializable map or list if we have one.
        (parseSerializationAttributes): Added, this function replaces the
        Map and List functions, the currently supported parts are similar
        for both situations.
        (applyMemberList): Added the serializable item to the interface
        variable and populate the serializable in case there is not a
        defined map.
        (parseSerializationPatternMap): Replaced with
        parseSerializationAttributes.
        (parseSerializationPatternList): Ditto.
        * bindings/scripts/test/JS/JSTestNode.cpp: Modified the expected result.
        (WebCore::jsTestNodePrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestObj.cpp: Modified the expected result.
        (WebCore::jsTestObjPrototypeFunctionToJSON):
        * bindings/scripts/test/TestNode.idl: Added the serializer test.
        * bindings/scripts/test/TestObj.idl: Added serializer map test.

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Simplify platformForUAString
        https://bugs.webkit.org/show_bug.cgi?id=162614

        Reviewed by Carlos Garcia Campos.

        Note in particular that the previous PLATFORM(MAC) check was wrong here, as that is never
        true for GTK; this patch risks changing it to OS(MAC_OS_X), on the hope that advertising Mac
        when running on Mac might not break anything. If it does, then we should remove it and just
        always pretend to be on X11.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformForUAString):

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Bump fake Safari version in UA
        https://bugs.webkit.org/show_bug.cgi?id=162615

        Reviewed by Carlos Garcia Campos.

        Pretend to be Safari 10.0 to fix sites that don't work when we pretend to be Safari 8.0.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2016-09-28  Khaled Hosny  <khaledhosny@eglug.org>

        Use new woff2 API
        https://bugs.webkit.org/show_bug.cgi?id=162608

        Reviewed by Michael Catanzaro.

        Test: fast/text/woff2-totalsfntsize.html

        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::WOFF2VectorOut::WOFF2VectorOut):
        (WebCore::WOFF2VectorOut::Write):
        (WebCore::WOFF2VectorOut::Size):
        (WebCore::convertWOFFToSfnt):

2016-09-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add warning comment in UserAgentGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=162618

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/UserAgentGtk.cpp:

2016-09-28  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Streams API] Align cancelReadableStream() with spec
        https://bugs.webkit.org/show_bug.cgi?id=162556

        Reviewed by Xabier Rodriguez-Calvar.

        Aligned cancelReadableStream() with Streams API. In particular, private cancel() method
        was added to ReadableStreamDefaultController and function name was replaced by readableStreamCancel().
        Implementation of cancel() (as well as pull()) is actually made in ReadableStreamInternals.js to
        avoid creating new function for each controller.

        No change in behaviour.

        * Modules/streams/ReadableStream.js:
        (cancel): Updated with reference to readableStreamCancel().
        * Modules/streams/ReadableStreamDefaultReader.js:
        (cancel): Updated with reference to readableStreamCancel().
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultController): Refer to external functions (cancel/pull) to avoid
        creating new functions.
        (teeReadableStreamBranch2CancelFunction): Updated with reference to readableStreamCancel().
        (readableStreamCancel): New name for cancelReadableStream(), behaviour aligned with spec.
        (readableStreamDefaultControllerCancel): Added to avoid creating new function for each controller.
        (readableStreamDefaultControllerPull): Added to avoid creating new function for each controller.
        (readFromReadableStreamDefaultReader): Updated call to pull method to pass controller.
        * bindings/js/WebCoreBuiltinNames.h: Added "cancel".

2016-09-27  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix debug build break since r206481. Unreviewed
        https://bugs.webkit.org/show_bug.cgi?id=162662

        No new tests, no new behaviours.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):

2016-09-27  Nan Wang  <n_wang@apple.com>

        AX: CrashTracer: com.apple.WebKit.WebContent at WebCore::AXObjectCache::localCaretRectForCharacterOffset(WebCore::RenderObject*&, WebCore::CharacterOffset const&) + 116
        https://bugs.webkit.org/show_bug.cgi?id=162654

        Reviewed by Chris Fleizach.

        rangeForUnorderedCharacterOffsets() can return a null Range but we failed to
        do a null check in localCaretRectForCharacterOffset() before dereferencing it.

        Test: accessibility/mac/bounds-for-range-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::localCaretRectForCharacterOffset):

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        Inline critical functions in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=162653

        Reviewed by Myles C. Maxfield.

        This gives me about a 15% speed improvement.

        * platform/URLParser.cpp:
        (WebCore::CodePointIterator::CodePointIterator):
        (WebCore::CodePointIterator::operator==):
        (WebCore::CodePointIterator::operator!=):
        (WebCore::CodePointIterator::operator=):
        (WebCore::CodePointIterator::atEnd):
        (WebCore::CodePointIterator::codeUnitsSince):
        (WebCore::CodePointIterator<LChar>::operator):
        (WebCore::CodePointIterator<UChar>::operator):
        (WebCore::appendCodePoint):
        (WebCore::isC0Control):
        (WebCore::isC0ControlOrSpace):
        (WebCore::isTabOrNewline):
        (WebCore::isInSimpleEncodeSet):
        (WebCore::isInDefaultEncodeSet):
        (WebCore::isInUserInfoEncodeSet):
        (WebCore::isInvalidDomainCharacter):
        (WebCore::isPercentOrNonASCII):
        (WebCore::isSlashQuestionOrHash):
        (WebCore::isValidSchemeCharacter):
        (WebCore::URLParser::advance):
        (WebCore::URLParser::isWindowsDriveLetter):
        (WebCore::URLParser::appendToASCIIBuffer):
        (WebCore::percentEncodeByte):
        (WebCore::URLParser::utf8PercentEncode):
        (WebCore::URLParser::utf8QueryEncode):
        (WebCore::isDefaultPort):
        (WebCore::isSpecialScheme):
        (WebCore::isPercentEncodedDot):
        (WebCore::isSingleDotPathSegment):
        (WebCore::isDoubleDotPathSegment):
        (WebCore::consumeSingleDotPathSegment):
        (WebCore::consumeDoubleDotPathSegment):
        (WebCore::URLParser::popPath):
        (WebCore::URLParser::parsedDataView):
        (WebCore::URLParser::currentPosition):
        (WebCore::zeroSequenceLength):
        (WebCore::findLongestZeroSequence):
        (WebCore::pow256):
        (WebCore::percentDecode):
        (WebCore::containsOnlyASCII):
        (WebCore::domainToASCII):
        (WebCore::hasInvalidDomainCharacter):
        (WebCore::formURLDecode):
        (WebCore::serializeURLEncodedForm):

2016-09-27  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r204552): Yelp carousel animation is not smooth.
        https://bugs.webkit.org/show_bug.cgi?id=162632

        Reviewed by Simon Fraser.

        For composited state changes when the layers don't need rebuilding, the updateGeometry() traversal
        is post-order (see webkit.org/162634), so we can't rely on the offsetfromRenderer() value when
        computing the graphics layer position on the descendants. We need this workaround until after webkit.org/162634
        gets fixed.

        Tests: compositing/hidpi-composited-container-and-graphics-layer-gap-changes.html
               compositing/hidpi-negative-composited-bounds-on-device-pixel.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeOffsetFromAncestorGraphicsLayer):
        (WebCore::ComputedOffsets::ComputedOffsets):
        (WebCore::ComputedOffsets::fromAncestorGraphicsLayer):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect):

2016-09-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Move caching the ImageFrame from BitmapImage to ImageSource
        https://bugs.webkit.org/show_bug.cgi?id=155498

        Reviewed by Simon Fraser.

        BitmapImage has two modes of operation regarding its image decoding state.
        The first mode happens when a remote image is loaded as encoded data and
        which requires an ImageDecoder to generate the image metadata and the
        the ImageFrames. The second mode happens when a BitmapImage is created
        with a NativeImagePtr. In this case, no ImageDecoder is needed.

        To remove this burden from the BitmapImage the member 'm_frames' is removed
        from BitmapImage. A new member named 'm_frameCache' of type ImageFrameCache
        is added to ImageSource. This class handles caching and recaching the image
        metadata and the ImageFrames if the image needs decoding. When the BitmapImage
        is initialized with a memory image, the ImageFrameCache initializes its
        metadata and ImageFrames directly from the NativeImagePtr.

        The plan for ImageFrameCache is to be extended for the asynchronous image
        decoding and also to be used by the non CG image decoders which cache
        other copies of the ImageFrames. This double caching should be removed.

        When the BitmapImage is replying to the ImageFrame queries, it will ask the
        ImageSource which will pass the query the ImageFrameCache. ImageFrameCache
        will ensure the requested ImageFrame is cached and is valid for the requested
        SubSamplingLevel before accessing the data members of this ImageFrame.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add and ImageFrameCache.cpp to the WebCore project.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage): Move initializing the image metadata to
        ImageSource. Add initializers for the remaining members in the class declaration.

        (WebCore::BitmapImage::destroyDecodedData): Move most of the logic of this
        function to ImageFrameCache::destroyDecodedData(). The only part which can't
        be moved is the call invalidatePlatformData().

        (WebCore::BitmapImage::destroyDecodedDataIfNecessary): Move the logic of this
        function to ImageFrameCache::destroyDecodedDataIfNecessary().

        (WebCore::BitmapImage::dataChanged): Move the logic of this function to
        ImageSource::dataChanged().

        (WebCore::BitmapImage::frameImageAtIndex): Move most of the logic of this
        function to ImageFrameCache::frameImageAtIndex(). The only part which can't
        be moved is the call invalidatePlatformData() if the required subsampling
        level is different from the subsampling level for the cached frame image.

        (WebCore::BitmapImage::draw): Replace the BitmapImage  cached metadata with
        the corresponding ImageSource cached metadata.
        (WebCore::BitmapImage::drawPattern): Ditto.
        (WebCore::BitmapImage::shouldAnimate): Ditto.
        (WebCore::BitmapImage::startAnimation): Ditto.
        (WebCore::BitmapImage::internalAdvanceAnimation): Ditto.

        (WebCore::BitmapImage::dump): Call ImageSource::dump() to dump the image
        cached metadata.

        (WebCore::BitmapImage::haveFrameImageAtIndex): Deleted.
        (WebCore::BitmapImage::destroyMetadataAndNotify): Deleted.
        (WebCore::BitmapImage::cacheFrame): Deleted.
        (WebCore::BitmapImage::didDecodeProperties): Deleted.
        (WebCore::BitmapImage::updateSize): Deleted.
        (WebCore::BitmapImage::size): Deleted.
        (WebCore::BitmapImage::sizeRespectingOrientation): Deleted.
        (WebCore::BitmapImage::hotSpot): Deleted.
        (WebCore::BitmapImage::frameCount): Deleted.
        (WebCore::BitmapImage::isSizeAvailable): Deleted.
        (WebCore::BitmapImage::ensureFrameAtIndexIsCached): Deleted.
        (WebCore::BitmapImage::frameIsCompleteAtIndex): Deleted.
        (WebCore::BitmapImage::frameDurationAtIndex): Deleted.
        (WebCore::BitmapImage::frameHasAlphaAtIndex): Deleted.
        (WebCore::BitmapImage::currentFrameKnownToBeOpaque): Deleted.
        (WebCore::BitmapImage::frameOrientationAtIndex): Deleted.
        (WebCore::BitmapImage::singlePixelSolidColor): Deleted.
        (WebCore::BitmapImage::repetitionCount): Deleted.
        * platform/graphics/BitmapImage.h:
        Managing the ImageFrames caching is moved to ImageFrameCache. Caching the
        image metadata is now moved to the ImageSource.
        
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::orientationForCurrentFrame):
        (WebCore::Image::singlePixelSolidColor):
        Change currentFrameKnownToBeOpaque(), orientationForCurrentFrame() and
        singlePixelSolidColor() to be const.
        
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::defaultFrame): Returns an empty ImageFrame to get the default ImageFrame metadata.
        (WebCore::ImageFrame::fillMetadata): Deleted. Moved to ImageFrameCache.
        (WebCore::ImageFrame::initialize): Deleted. Ditto.
        
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::setDuration): Change the type of the argument to float instead of unsigned.
        (WebCore::ImageFrame::hasAlpha): Protect the unset m_hasAlpha by checking hasMetadata() first.

        * platform/graphics/ImageFrameCache.cpp: Added.
        (WebCore::ImageFrameCache::ImageFrameCache): Two constructors similar to what we do for ImageSource and BitmapImage.
        (WebCore::ImageFrameCache::destroyDecodedData): Moved from BitmapImage.cpp.
        (WebCore::ImageFrameCache::destroyDecodedDataIfNecessary): Ditto.
        (WebCore::ImageFrameCache::destroyIncompleteDecodedData): Ditto.
        (WebCore::ImageFrameCache::decodedSizeChanged): Ditto.
        (WebCore::ImageFrameCache::decodedSizeIncremented): Ditto.
        (WebCore::ImageFrameCache::decodedSizeDecremented): Ditto.
        (WebCore::ImageFrameCache::decodedSizeReset): Ditto.
        (WebCore::ImageFrameCache::didDecodeProperties): Ditto.
        (WebCore::ImageFrameCache::growFrames): Grows the size of m_frames if necessary.
        (WebCore::ImageFrameCache::setNativeImage): Initializes the ImageFrame metadata directly from the NativeImagePtr. 
        (WebCore::ImageFrameCache::setFrameNativeImage): Initializes the ImageFrame image and the metadata.
        (WebCore::ImageFrameCache::setFrameMetadata): Initializes the ImageFrame metadata from the ImageDecoder.
        (WebCore::ImageFrameCache::frameAtIndex): Returns an ImageFrame given its index. Cache or recache the requested ImageFrame if necessary.
        (WebCore::ImageFrameCache::clearMetadata): Invalidates the cached image metadata.
        (WebCore::ImageFrameCache::metadata): A template function which returns an image metadata property.
        (WebCore::ImageFrameCache::frameMetadataAtIndex): A template function which returns an ImageFrame metadata property.
        (WebCore::ImageFrameCache::isSizeAvailable): An image metadata property.
        (WebCore::ImageFrameCache::frameCount): Ditto.
        (WebCore::ImageFrameCache::repetitionCount): Ditto.
        (WebCore::ImageFrameCache::filenameExtension): Ditto.
        (WebCore::ImageFrameCache::hotSpot): Ditto.
        (WebCore::ImageFrameCache::size): An image metadata property but we get it from the first ImageFrame.
        (WebCore::ImageFrameCache::sizeRespectingOrientation): Ditto.
        (WebCore::ImageFrameCache::singlePixelSolidColor): Ditto.
        (WebCore::ImageFrameCache::frameIsCompleteAtIndex): An ImageFrame metadata property.
        (WebCore::ImageFrameCache::frameHasAlphaAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameHasImageAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameHasInvalidNativeImageAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameSubsamplingLevelAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameSizeAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameBytesAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameDurationAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameOrientationAtIndex): Ditto.
        (WebCore::ImageFrameCache::frameImageAtIndex): Ditto.

        * platform/graphics/ImageFrameCache.h: Added.
        (WebCore::ImageFrameCache::setDecoder): Sets the current ImageDecoder which is owned by the ImageSource.
        (WebCore::ImageFrameCache::decodedSize): Returns the size of the cached NativeImages.
        (WebCore::ImageFrameCache::isDecoderAvailable): Returns whether an ImageDecoder is available.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource): Initializes the ImageFrameCache based on the image decoding state.
        (WebCore::ImageSource::clearFrameBufferCache): Replace initialized() with isDecoderAvailable().
        (WebCore::ImageSource::clear): Clears the ImageDecoder of the ImageFrameCache.
        (WebCore::ImageSource::destroyDecodedData): Moved from BitmapImage.cpp.
        (WebCore::ImageSource::destroyDecodedDataIfNecessary): Ditto.
        (WebCore::ImageSource::ensureDecoderAvailable): Creates an ImageDecoder if necessary and sets it in ImageFrameCache.
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::dataChanged): Moved from BitmapImage.cpp.
        (WebCore::ImageSource::isAllDataReceived):
        (WebCore::ImageSource::maximumSubsamplingLevel): Rename calculateMaximumSubsamplingLevel() to maximumSubsamplingLevel().
        (WebCore::ImageSource::subsamplingLevelForScale):
        (WebCore::ImageSource::createFrameImageAtIndex):
        (WebCore::ImageSource::dump):
        (WebCore::ImageSource::calculateMaximumSubsamplingLevel): Deleted. Renamed to maximumSubsamplingLevel().
        (WebCore::ImageSource::updateMetadata): Deleted. Not needed. Caching the image metadata is the responsibility of ImageFrameCache. 
        (WebCore::ImageSource::bytesDecodedToDetermineProperties): Deleted. Not needed.
        (WebCore::ImageSource::isSizeAvailable): Deleted. Moved to ImageSource.h. 
        (WebCore::ImageSource::size): Deleted. Ditto.
        (WebCore::ImageSource::sizeRespectingOrientation): Deleted. Ditto.
        (WebCore::ImageSource::frameCount): Deleted. Ditto.
        (WebCore::ImageSource::repetitionCount): Deleted. Ditto.
        (WebCore::ImageSource::filenameExtension): Deleted. Ditto.
        (WebCore::ImageSource::hotSpot): Deleted. Ditto.
        (WebCore::ImageSource::frameIsCompleteAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameHasAlphaAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameAllowSubsamplingAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameSizeAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameBytesAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameDurationAtIndex): Deleted. Ditto.
        (WebCore::ImageSource::frameOrientationAtIndex): Deleted. Ditto.

        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::isDecoderAvailable): initialized() was renamed to isDecoderAvailable().
        (WebCore::ImageSource::decodedSize): Send the query to ImageFrameCache.
        (WebCore::ImageSource::isSizeAvailable): Ditto.
        (WebCore::ImageSource::frameCount): Ditto.
        (WebCore::ImageSource::repetitionCount): Ditto.
        (WebCore::ImageSource::filenameExtension): Ditto.
        (WebCore::ImageSource::hotSpot): Ditto.
        (WebCore::ImageSource::size): Ditto.
        (WebCore::ImageSource::sizeRespectingOrientation): Ditto.
        (WebCore::ImageSource::singlePixelSolidColor): Ditto.
        (WebCore::ImageSource::frameIsCompleteAtIndex): Ditto.
        (WebCore::ImageSource::frameHasAlphaAtIndex): Ditto.
        (WebCore::ImageSource::frameHasImageAtIndex): Ditto.
        (WebCore::ImageSource::frameHasInvalidNativeImageAtIndex): Ditto.
        (WebCore::ImageSource::frameSubsamplingLevelAtIndex): Ditto.
        (WebCore::ImageSource::frameSizeAtIndex): Ditto.
        (WebCore::ImageSource::frameBytesAtIndex): Ditto.
        (WebCore::ImageSource::frameDurationAtIndex): Ditto.
        (WebCore::ImageSource::frameOrientationAtIndex): Ditto.
        (WebCore::ImageSource::frameImageAtIndex): Ditto.
        (WebCore::ImageSource::decoder): Deleted. Not needed.
        (WebCore::ImageSource::initialized): Deleted. Was renamed to isDecoderAvailable().
        (WebCore::ImageSource::setNeedsUpdateMetadata): Deleted. Not needed.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): Ditto.
        
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder): Make the constructor of ImageDecoder be the same for all ports. 
        (WebCore::ImageDecoder::setData): Removed unused overloaded function.
        (WebCore::ImageDecoder::size): Deleted.  Removed unused function.

        * platform/graphics/cg/ImageDecoderCG.h:
        (WebCore::ImageDecoder::create): Make the constructor of CG ImageDecoder be like the other ports.
        (WebCore::ImageDecoder::isAllDataReceived): Make this property owned by ImageDecoder.

        * platform/graphics/cg/PDFDocumentImage.h: Change currentFrameKnownToBeOpaque() to be const.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData): m_frames is owned by ImageFrameCache. ImageFrameCache::frameCount() has to 
        be equal to ImageFrame::m_frames.size().

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder): Ditto.
        (WebCore::ImageDecoder::frameCount): Make frameCount const so it can be passed to the template function ImageFrameCache::metadata().
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        (WebCore::GIFImageDecoder::frameCount): Make frameCount const so it can be passed to the template function ImageFrameCache::metadata().
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/gif/GIFImageReader.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder): 
        (WebCore::ICOImageDecoder::frameCount): Make frameCount const so it can be passed to the template function ImageFrameCache::metadata().
        (WebCore::ICOImageDecoder::decode): Move resizing the m_frameBufferCache from ICOImageDecoder::frameCount() to ICOImageDecoder::decode().
        (WebCore::ICOImageDecoder::decodeAtIndex): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder): AlphaOption and GammaAndColorProfileOption are moved out of ImageSource.
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::frameCount): Make frameCount const so it can be passed to the template function ImageFrameCache::metadata().
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

        * svg/graphics/SVGImage.h: Make currentFrameKnownToBeOpaque() be const.
        * svg/graphics/SVGImageForContainer.h: Ditto.

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        Correctly parse URLs with the first tab in the fragment
        https://bugs.webkit.org/show_bug.cgi?id=162650

        Reviewed by Saam Barati.

        Covered by a new API test.

        * platform/URLParser.cpp:
        (WebCore::URLParser::fragmentSyntaxViolation):

2016-09-27  Chris Dumez  <cdumez@apple.com>

        <a download> does not honor the same-origin requirement
        https://bugs.webkit.org/show_bug.cgi?id=156100

        Reviewed by Alex Christensen.

        We now completely ignore the "download" attribute on anchors if the
        href URL is cross-origin. We therefore navigate to the URL instead
        of forcefully downloading it in this case and leave it up to the server
        to give us the right headers if it should be downloaded. This is
        conservative and matches Firefox.

        Chrome and the HTML specification ignore only the suggested filename
        if the URL is cross-origin but still download the file.

        No new tests, updated existing test.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser: Handle windows drive letters after two slashes in relative URLs according to spec
        https://bugs.webkit.org/show_bug.cgi?id=162646

        Reviewed by Saam Barati.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::CodePointIterator::codeUnitsSince):
        (WebCore::URLParser::appendWindowsDriveLetter):
        (WebCore::URLParser::parse):
        (WebCore::isWindowsDriveLetter): Deleted.
        (WebCore::URLParser::checkWindowsDriveLetter): Deleted.
        * platform/URLParser.h:

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        URLs with @ in the user should only search for the last @ until the end of the authority and host
        https://bugs.webkit.org/show_bug.cgi?id=162635

        Reviewed by Geoffrey Garen.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2016-09-27  Chris Dumez  <cdumez@apple.com>

        It should be possible to dispatch events on documents created using DOMParser
        https://bugs.webkit.org/show_bug.cgi?id=26147

        Reviewed by Ryosuke Niwa.

        It should be possible to dispatch events on documents created using
        DOMParser. It did not work because we were not setting the context
        document on the newly created document in DOMParser::parseFromString().

        Firefox and Chrome both already support this.

        Test: fast/dom/parsed-document-dispatchEvent.html

        * xml/DOMParser.cpp:
        (WebCore::DOMParser::DOMParser):
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h:
        (WebCore::DOMParser::create):
        * xml/DOMParser.idl:

2016-09-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Improve performance of complex text codepath
        https://bugs.webkit.org/show_bug.cgi?id=161936

        Reviewed by Simon Fraser.

        CoreText exposes a bit on the CTRunStatus which represents whether
        the run actually uses the glyph origins concept introduced in
        r205396. If this bit is not set, we can use the (slightly faster)
        call to CTRunGetAdvances() instead of
        CTRunGetBaseAdvancesAndOrigins(). In addition, if none of the runs
        have this bit set, we don't need to allocate storage for the vector
        of origins at all, thereby using less memory.

        No new tests because there is no behavior change.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::glyphOrigins):
        (WebCore::ComplexTextController::glyphOrigin):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * platform/spi/cocoa/CoreTextSPI.h:

2016-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Import w3c shadow DOM tests and fix one assertion
        https://bugs.webkit.org/show_bug.cgi?id=162629

        Reviewed by Chris Dumez.

        The assertion failure was caused by RelatedNodeRetargeter's constructor mixing up the ancestor tree scopes
        for the target and the related target. Fixed the bug by reversing the two.

        Tests: imported/w3c/web-platform-tests/shadow-dom/event-composed-path-with-related-target.html

        * dom/EventPath.cpp:
        (WebCore::RelatedNodeRetargeter::RelatedNodeRetargeter): i and m_ancestorTreeScopes are for the related target
        and j and targetTreeScopeAncestors are for the target.

2016-09-27  Chris Dumez  <cdumez@apple.com>

        It should be possible to dispatch events on documents that do not have a browsing context
        https://bugs.webkit.org/show_bug.cgi?id=162620

        Reviewed by Ryosuke Niwa.

        It should be possible to dispatch events on documents that do not have a browsing
        context (e.g. Documents created using DOMImplementation.createHTMLDocument()).
        Gecko and Blink both allow this but WebKit did not.

        The approach chosen to support this is similar to the one in Blink. When constructing
        a new document (e.g. using DOMImplementation.createHTMLDocument()) we now keep track
        of the context document. When requesting the scriptExecutionContext(), we now return
        the context document if the document has one instead of the document itself.

        Test: imported/w3c/web-platform-tests/dom/events/Event-dispatch-other-document.html

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitAdditionalChildren):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/Document.cpp:
        (WebCore::Document::create):
        (WebCore::Document::cloneDataFromDocument):
        (WebCore::Document::contextDocument):
        (WebCore::Document::takeDOMWindowFrom): Deleted.
        * dom/Document.h:
        (WebCore::Document::setContextDocument):
        (WebCore::Node::scriptExecutionContext):
        (WebCore::Node::isDocumentNode): Deleted.
        * dom/Document.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):

2016-09-27  Alex Christensen  <achristensen@webkit.org>

        Implement URLParser::syntaxViolation
        https://bugs.webkit.org/show_bug.cgi?id=162593

        Reviewed by Geoffrey Garen.

        Most of the time when parsing URLs, we just look at the URL, find offsets of the host, path, query, etc., 
        and the String can be used untouched.  When this happens, we do not want to allocate and copy the String.
        We want to just add a reference to an existing String.

        Sometimes we need to canonicalize the String because there has been a syntaxViolation,
        defined as any String that is different than its canonicalized URL String.  In such cases we need to
        allocate a new String and fill it with the canonicalized URL String.  When a syntaxViolation happens for the
        first time, we know that everything in the input String up to that point is equal to what it would have been
        if we had canonicalized the beginning of the URL, copy it into a buffer, and continue parsing in a mode where
        instead of just looking at the input URL String, we canonicalize each code point into the buffer.

        Changes to behavior involve additional spec compliance with tabs and newlines in different places in URLs,
        as well as additional spec compliance when parsing empty and null URLs relative to other URLs.
        Both are covered by new API tests. Existing behavior covered by existing API tests.

        This is about a 15% speed improvement on my URL parsing benchmark.

        * platform/URL.cpp:
        (WebCore::assertProtocolIsGood):
        (WebCore::URL::protocolIs):
        (WebCore::protocolIs):
        * platform/URL.h:
        * platform/URLParser.cpp:
        (WebCore::isTabOrNewline):
        (WebCore::URLParser::incrementIteratorSkippingTabsAndNewlines):
        (WebCore::URLParser::isWindowsDriveLetter):
        (WebCore::URLParser::appendToASCIIBuffer):
        (WebCore::URLParser::checkWindowsDriveLetter):
        (WebCore::URLParser::shouldCopyFileURL):
        (WebCore::URLParser::utf8PercentEncode):
        (WebCore::URLParser::utf8QueryEncode):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::syntaxViolation):
        (WebCore::URLParser::fragmentSyntaxViolation):
        (WebCore::URLParser::parsedDataView):
        (WebCore::URLParser::currentPosition):
        (WebCore::URLParser::URLParser):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parseAuthority):
        (WebCore::URLParser::parseIPv4Number):
        (WebCore::URLParser::parseIPv4Host):
        (WebCore::URLParser::parseIPv6Host):
        (WebCore::URLParser::parsePort):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::serializeURLEncodedForm):
        (WebCore::URLParser::allValuesEqual):
        (WebCore::URLParser::internalValuesConsistent):
        (WebCore::URLParser::incrementIteratorSkippingTabAndNewLine): Deleted.
        (WebCore::URLParser::syntaxError): Deleted.
        (WebCore::parseIPv4Number): Deleted.
        * platform/URLParser.h:
        (WebCore::URLParser::incrementIteratorSkippingTabsAndNewlines):

2016-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Related videos on YouTube (and YouTube playlists) cause media controls to disappear
        https://bugs.webkit.org/show_bug.cgi?id=162621
        <rdar://problem/28484193>

        Reviewed by Jer Noble.

        Tweaks the main content media heuristic for better Now Playing behavior on YouTube by making the following
        changes:
        - Remove the strict requirement for audio to be actively playing for the session to be able to show
          controls for the purpose of Now Playing, making it the same as our policy for the controls manager.
        - Make playback requirement restrictions apply only for the controls manager. Videos that do not
          autoplay will still have the correct behavior with respect to Now Playing, since we will bail in the
          hasEverNotifiedAboutPlaying() check.
        - Only consider the main content heuristic as preventing media controls from showing up for the purposes
          of the controls manager. Now Playing should instead account for this by preferring elements large
          enough for main content after collecting all of the candidate sessions.

        * html/HTMLMediaElement.cpp:
        (WebCore::mediaElementSessionInfoForSession):
        (WebCore::preferMediaControlsForCandidateSessionOverOtherCandidateSession):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager):
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::sessionWillBeginPlayback):

2016-09-27  Chris Dumez  <cdumez@apple.com>

        Second parameter to MutationObserver.observe() should be optional
        https://bugs.webkit.org/show_bug.cgi?id=162627

        Reviewed by Ryosuke Niwa.

        Second parameter to MutationObserver.observe() should be optional:
        - https://dom.spec.whatwg.org/#interface-mutationobserver

        Firefox agrees with the specification. There is no real behavior change
        except that MutationObserver.prototype.observe.length is now 1 instead
        of 2. Passing only one parameter will still throw a TypeError because
        the Dictionary is empty. However, this parameter needs to be marked as
        optional because Web IDL requires the last parameter to be optional if
        it is a Dictionary.

        No new tests, rebaselined existing test.

        * dom/MutationObserver.idl:

2016-09-20  Anders Carlsson  <andersca@apple.com>

        PlatformEvent::m_modifiers should be an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=162326

        Reviewed by Daniel Bates.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAccessKey):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::accessKeyModifiers):
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::shiftKey):
        (WebCore::PlatformEvent::ctrlKey):
        (WebCore::PlatformEvent::altKey):
        (WebCore::PlatformEvent::metaKey):
        (WebCore::PlatformEvent::modifiers):
        (WebCore::PlatformEvent::PlatformEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::modifiersForEvent):
        (WebCore::typeForEvent):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformKeyboardEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformKeyboardEvent>::decodeValue):
        * replay/WebInputs.json:

2016-09-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Handle Wayland & X11 correctly for GST_GL
        https://bugs.webkit.org/show_bug.cgi?id=162619

        Reviewed by Carlos Garcia Campos.

        The checks for GST_GL consider X11 and Wayland are exclusive alternatives, but it
        turns out we can enable both! We need to check them independently and also include
        a runtime check.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext): fix checks for X11 and
        Wayland to handle the case where both are enabled. Includes a runtime check.

2016-09-27  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Restructure MediaConstraints classes
        https://bugs.webkit.org/show_bug.cgi?id=162571

        Reviewed by Jer Noble.

        No new tests, no functional changes.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::initialize): Deleted, no longer used.
        * Modules/mediastream/MediaConstraintsImpl.h:

        * bindings/js/JSMediaDevicesCustom.cpp:
        (WebCore::createStringConstraint): Return Optional<> instead of RefPtr<>.
        (WebCore::createBooleanConstraint): Ditto.
        (WebCore::createDoubleConstraint): Ditto.
        (WebCore::createIntConstraint): Ditto.
        (WebCore::parseMediaTrackConstraintSetForKey): Deal with above change.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::verifyConstraintsForMediaType): Use constraints.mandatoryConstraints.filter
          instead of direct enumeration.
        (CaptureDeviceManager::sessionSupportsConstraint): Use downcast<>.
        (CaptureDeviceManager::isSupportedFrameRate): Ditto.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::StringConstraint::find): Lose the ConstraintType parameter.
        (WebCore::StringConstraint::merge): Use downcast<>.
        (WebCore::FlattenedConstraint::set): Use ConstraintHolder.
        (WebCore::FlattenedConstraint::merge): Ditto.
        (WebCore::MediaTrackConstraintSetMap::forEach): New.
        (WebCore::MediaTrackConstraintSetMap::filter): Ditto.
        (WebCore::MediaTrackConstraintSetMap::isEmpty): Ditto.
        (WebCore::MediaTrackConstraintSetMap::set): Ditto.
        (WebCore::MediaConstraint::copy): Deleted.
        (WebCore::IntConstraint::copy): Deleted.
        (WebCore::DoubleConstraint::copy): Deleted.
        (WebCore::BooleanConstraint::copy): Deleted.
        (WebCore::StringConstraint::copy): Deleted.
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaConstraint::MediaConstraint):
        (WebCore::MediaConstraint::isEmpty):
        (WebCore::MediaConstraint::isMandatory):
        (WebCore::MediaConstraint::merge):
        (WebCore::MediaConstraint::isInt):
        (WebCore::MediaConstraint::isDouble):
        (WebCore::MediaConstraint::isBoolean):
        (WebCore::MediaConstraint::isString):
        (WebCore::MediaConstraint::dataType):
        (WebCore::MediaConstraint::constraintType):
        (WebCore::NumericConstraint::getMin):
        (WebCore::NumericConstraint::getMax):
        (WebCore::NumericConstraint::getExact):
        (WebCore::NumericConstraint::getIdeal):
        (WebCore::NumericConstraint::fitnessDistance):
        (WebCore::NumericConstraint::validForRange):
        (WebCore::NumericConstraint::find):
        (WebCore::NumericConstraint::NumericConstraint):
        (WebCore::NumericConstraint::innerMerge):
        (WebCore::FlattenedConstraint::isEmpty):
        (WebCore::FlattenedConstraint::iterator::iterator):
        (WebCore::FlattenedConstraint::iterator::operator*):
        (WebCore::FlattenedConstraint::iterator::operator++):
        (WebCore::FlattenedConstraint::iterator::operator==):
        (WebCore::FlattenedConstraint::iterator::operator!=):
        (WebCore::FlattenedConstraint::begin):
        (WebCore::FlattenedConstraint::end):
        (WebCore::FlattenedConstraint::ConstraintHolder::create):
        (WebCore::FlattenedConstraint::ConstraintHolder::~ConstraintHolder):
        (WebCore::FlattenedConstraint::ConstraintHolder::constraint):
        (WebCore::FlattenedConstraint::ConstraintHolder::dataType):
        (WebCore::FlattenedConstraint::ConstraintHolder::constraintType):
        (WebCore::FlattenedConstraint::ConstraintHolder::ConstraintHolder):
        (WebCore::MediaConstraint::getMin): Deleted.
        (WebCore::MediaConstraint::getMax): Deleted.
        (WebCore::MediaConstraint::getExact): Deleted.
        (WebCore::MediaConstraint::getIdeal): Deleted.
        (WebCore::MediaConstraint::validForRange): Deleted.
        (WebCore::MediaConstraint::find): Deleted.
        (WebCore::MediaConstraint::fitnessDistance): Deleted.
        (WebCore::MediaConstraint::type): Deleted.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance): Use downcast<>.
        (WebCore::applyNumericConstraint):
        (WebCore::RealtimeMediaSource::applyConstraint): Ditto.
        (WebCore::RealtimeMediaSource::selectSettings): Ditto. Use constraints.mandatoryConstraints.filter
          instead of direct enumeration.
        (WebCore::RealtimeMediaSource::applyConstraints):
        (WebCore::RealtimeMediaSource::setSampleRate): Sample rate is an int, not a double.
        (WebCore::RealtimeMediaSource::setSampleSize): Sample size is also an int.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::sessionSupportsConstraint): Use downcast<>.

        * platform/mock/MediaConstraintsMock.cpp:
        (WebCore::isIntMediaConstraintSatisfiable): Use downcast<>.
        (WebCore::isDoubleMediaConstraintSatisfiable): Ditto.
        (WebCore::isBooleanMediaConstraintSatisfiable): Ditto.
        (WebCore::isStringMediaConstraintSatisfiable):
        (WebCore::isSatisfiable):
        (WebCore::MediaConstraintsMock::verifyConstraints): Use constraints.mandatoryConstraints.filter
          instead of direct enumeration.
        * platform/mock/MediaConstraintsMock.h:

        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):

2016-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Some Now Playing behavior is broken after r206315
        https://bugs.webkit.org/show_bug.cgi?id=162625
        <rdar://problem/28496755>

        Reviewed by Jer Noble.

        Reverts the part of our heuristic that disables Now Playing in active tabs in the main window.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::pageAllowsNowPlayingControls):
        * page/Page.cpp:
        (WebCore::Page::setViewState):

2016-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Remove an unneeded assert in InspectorOverlay.cpp
        https://bugs.webkit.org/show_bug.cgi?id=162581

        Reviewed by Alexey Proskuryakov.

        This assertion was added to catch unknown issues, but it is firing frequently enough on certain Inspector
        tests that it is causing more harm than good.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildQuadObjectForCSSRegionContentClip):
        (WebCore::evaluateCommandInOverlay):

2016-09-27  Jer Noble  <jer.noble@apple.com>

        Remove deprecated ENCRYPTED_MEDIA implementation.
        https://bugs.webkit.org/show_bug.cgi?id=161010

        Reviewed by Eric Carlson.

        Remove all references to the deprecated ENABLE_ENCRYPTED_MEDIA (leaving in place
        the soon-to-be deprecated ENABLE_ENCRYPTED_MEDIA_V2).

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMHTMLMediaElement.h:
        * bindings/objc/DOMHTMLMediaElement.mm:
        (-[DOMHTMLMediaElement canPlayType:]):
        (-[DOMHTMLMediaElement canPlayType:keySystem:]): Deleted.
        * bindings/js/JSDictionary.cpp:
        * bindings/js/JSDictionary.h:
        * dom/Element.idl:
        * dom/EventNames.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::exceptionCodeForMediaKeyException): Deleted.
        (WebCore::HTMLMediaElement::canPlayType): Deleted.
        (WebCore::HTMLMediaElement::mediaPlayerKeyAdded): Deleted.
        (WebCore::HTMLMediaElement::mediaPlayerKeyError): Deleted.
        (WebCore::HTMLMediaElement::mediaPlayerKeyMessage): Deleted.
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded): Deleted.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaError.h:
        * html/MediaError.idl:
        * html/MediaKeyError.h:
        * html/MediaKeyError.idl:
        * html/MediaKeyEvent.cpp: Removed.
        (WebCore::MediaKeyEvent::MediaKeyEvent): Deleted.
        (WebCore::MediaKeyEvent::~MediaKeyEvent): Deleted.
        (WebCore::MediaKeyEvent::eventInterface): Deleted.
        * html/MediaKeyEvent.h: Removed.
        * html/MediaKeyEvent.idl: Removed.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::nextBestMediaEngine):
        (WebCore::MediaPlayer::generateKeyRequest): Deleted.
        (WebCore::MediaPlayer::addKey): Deleted.
        (WebCore::MediaPlayer::cancelKeyRequest): Deleted.
        (WebCore::MediaPlayer::keyAdded): Deleted.
        (WebCore::MediaPlayer::keyError): Deleted.
        (WebCore::MediaPlayer::keyMessage): Deleted.
        (WebCore::MediaPlayer::keyNeeded): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerKeyAdded): Deleted.
        (WebCore::MediaPlayerClient::mediaPlayerKeyError): Deleted.
        (WebCore::MediaPlayerClient::mediaPlayerKeyMessage): Deleted.
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded): Deleted.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::addKey): Deleted.
        (WebCore::MediaPlayerPrivateInterface::generateKeyRequest): Deleted.
        (WebCore::MediaPlayerPrivateInterface::cancelKeyRequest): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::update):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::generateKeyRequest): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::addKey): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelKeyRequest): Deleted.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::supportsType): Deleted.
        * testing/MockCDM.h:

2016-09-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Use Ref<const T> in FetchBody::m_data variant
        https://bugs.webkit.org/show_bug.cgi?id=162599

        Reviewed by Alex Christensen.

        Covered by existing tests.

        Using Ref<const T> for all variants of m_data except for FormData since FetchBody is actually creating it and may modifiy it.
        Updating blob loading code path to use a const Blob& instead of a Blob&.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::FetchBody):
        (WebCore::FetchBody::extract):
        (WebCore::FetchBody::clone):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::blobBody):
        (WebCore::FetchBody::arrayBufferBody):
        (WebCore::FetchBody::arrayBufferViewBody):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadBlob):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchLoader.h:

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed typo fix

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

2016-09-27  Youenn Fablet  <youenn@apple.com>

        Clean-up CachedImage constructor
        https://bugs.webkit.org/show_bug.cgi?id=162601

        Reviewed by Sam Weinig.

        No change of behavior.
        Removing an unused constructor.
        Specializing one constructor for manually cached images.
        Cleaning initialization of some CachedImage fields.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [FreeType] Add comment further justifying use of FT_LOAD_FORCE_AUTOHINT
        https://bugs.webkit.org/show_bug.cgi?id=162607

        Reviewed by Martin Robinson.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):

2016-09-27  Mario Sanchez Prada  <mario@endlessm.com>

        Build fails for X11+EGL due to missing gst_gl_display_x11_new_with_display()
        https://bugs.webkit.org/show_bug.cgi?id=162606

        Reviewed by Gustavo Noronha Silva.

        Use the right check to retrieve the right instance of GstGLDisplay
        depending on whether we're using GLX or EGL, not X11 or Wayland.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):

2016-09-27  Youenn Fablet  <youenn@apple.com>

        [GTK][EFL] imported/w3c/web-platform-tests/fetch/api/basic/accept-header.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=162547

        Reviewed by Michael Catanzaro.

        Covered by existing tests.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::createTestingSession): Setting the underlying soupSession.

2016-09-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Remove ReadableStreamSource firstReadCallback
        https://bugs.webkit.org/show_bug.cgi?id=162339

        Reviewed by Sam Weinig.

        No observable change of behavior.
        Removing ReadableStreamSource firstReadCallback.
        This makes the enqueuing of data to happen when the stream is created.
        In the future, we may want to implement doPull() to enqueue data when stream actually needs it.

        * Modules/fetch/FetchResponseSource.cpp:
        (WebCore::FetchResponseSource::doPull): Introduced as we introduce pull() in ReadableStreamSource.
        * Modules/fetch/FetchResponseSource.h:
        * Modules/streams/ReadableStreamInternals.js:
        (readFromReadableStreamDefaultReader): Removing firstReadCallback use.
        * Modules/streams/ReadableStreamSource.h: Renaming m_startPromise in m_promise since m_promise may store start and pull promises.
        (WebCore::ReadableStreamSource::isStarting):
        (WebCore::ReadableStreamSource::start):
        (WebCore::ReadableStreamSource::pull): Introduced to support ReadableStreamSource pulling.
        (WebCore::ReadableStreamSource::startFinished):
        (WebCore::ReadableStreamSource::pullFinished): Ditto.
        (WebCore::ReadableStreamSource::clean):
        * Modules/streams/ReadableStreamSource.idl: Ditto.
        * bindings/js/JSReadableStreamSourceCustom.cpp: Refactoring to use callPromiseFunction
        (WebCore::startReadableStream):
        (WebCore::JSReadableStreamSource::start):
        (WebCore::pullReadableStream): Introduced to support ReadableStreamSource pulling.
        (WebCore::JSReadableStreamSource::pull): Ditto.
        * bindings/js/WebCoreBuiltinNames.h: Removing firstReadCallback

2016-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r205883): Letterpressed text is invisible
        https://bugs.webkit.org/show_bug.cgi?id=162590
        <rdar://problem/28141512>

        Reviewed by Simon Fraser.

        r205883 removed the last place where we use CGFonts directly in WebKit. However,
        our letterpress code is sensitive to the current state of the CGContext.

        Tests: fast/text/letterpress-different.html
               fast/text/letterpress-paint.html

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):

2016-09-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Refactor FetchBody to use std::experimental::variant
        https://bugs.webkit.org/show_bug.cgi?id=162559

        Reviewed by Alex Christensen.

        Covered by exiting tests.

        Using variant to represent the variant data types.
        Adding nullptr as a specific type for default empty values and to allow clean-up.
        Adding FetchBody::clone as the default copy constructor is deleted with this change.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::FetchBody):
        (WebCore::FetchBody::json):
        (WebCore::FetchBody::text):
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::consumeArrayBuffer):
        (WebCore::FetchBody::consumeArrayBufferView):
        (WebCore::FetchBody::consumeText):
        (WebCore::FetchBody::consumeBlob):
        (WebCore::FetchBody::extractFromText):
        (WebCore::FetchBody::bodyForInternalRequest):
        (WebCore::FetchBody::clone):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::blobBody):
        (WebCore::FetchBody::formDataBody):
        (WebCore::FetchBody::arrayBufferBody):
        (WebCore::FetchBody::arrayBufferViewBody):
        (WebCore::FetchBody::textBody):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::cloneForJS):

2016-09-26  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix debug build break since r204205. Unreviewed
        https://bugs.webkit.org/show_bug.cgi?id=162596

        No new tests, no new behaviours.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameImageAtIndex):

2016-09-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        If you play a youtube video from now playing after it finished in Safari, controls disappear
        https://bugs.webkit.org/show_bug.cgi?id=162589
        <rdar://problem/28484047>

        Reviewed by Jer Noble.

        Tweaks the main content heuristic slightly to remove the "mostly in mainframe" requirement in the case of Now
        Playing. This was added in the case of the controls manager as an additional way to identify video elements that
        should not show controls, since we relax audio and video constraints for showing videos in the controls manager,
        so that a video element is prevented from showing controls on grounds of lacking audio only if it has never had
        audio before. In the case of Now Playing, we have stricter requirements for videos, which must have audio, which
        makes the mainframe heuristic not necessary.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager):

2016-09-26  Antti Koivisto  <antti@apple.com>

        Setter on style element's textContent or cssText doesn't trigger style recalc
        https://bugs.webkit.org/show_bug.cgi?id=160331
        <rdar://problem/27609715>

        Reviewed by Ryosuke Niwa and Daniel Bates.

        We would not notify the parent when text node content changed in a shadow tree.

        Test: fast/shadow-dom/shadow-style-text-mutation.html

        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):

            Invalidate shadow root children instead of the root itself when doing full invalidation.
            The invalidity bits have no meaning for non-element, non-texts.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        (WebCore::CharacterData::notifyParentAfterChange):

            Add a helper and call it also in shadow trees.

        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/CharacterData.h:

2016-09-26  Antti Koivisto  <antti@apple.com>

        Input elements don't work inside shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=160427

        Reviewed by Darin Adler.

        There is a bug in ComposedTreeIterator. If the iterator is initialized with an initial state where the root
        is inside a shadow tree it won't iterate into slots.

        If an input element is in a shadow tree it generates narrowly scoped style updates. When RenderTreeUpdater
        applies such an update the update root will be inside the shadow tree and the bug will prevent the render tree
        for slotted content from updating.

        Added tests for both the iterator behavior and the specific symptom with input elements.

        Tests: fast/shadow-dom/composed-tree-shadow-child-subtree.html
               fast/shadow-dom/input-element-in-shadow.html

        * dom/ComposedTreeIterator.cpp:
        (WebCore::ComposedTreeIterator::ComposedTreeIterator):

            Check and cache if the root is inside shadow tree.

        (WebCore::ComposedTreeIterator::traverseNextInShadowTree):
        * dom/ComposedTreeIterator.h:
        (WebCore::ComposedTreeIterator::traverseNext):

            If it is, always use the shadow traversal code path.

2016-09-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Seeking video doesn't update seek position
        https://bugs.webkit.org/show_bug.cgi?id=162575
        <rdar://problem/28457219>

        Reviewed by Jer Noble.

        On ToT, seeking in a video causes the playhead to stutter, and does not actually update media remote's seek
        position. This is partly due to how we do not update media remote with new information when beginning to respond
        to remote seek commands, so media remote continues to think that a playing video is still playing despite the
        user attempting to seek through it.

        To fix this, we introduce timer-based guards around remote seek commands, such that a seek "gesture" begins when
        we receive the first seek command and ends when no seek command has been received in a set amount of time (this
        is 0.5 seconds, which is approximately what other clients around the platform use).

        Also, when responding to a remote seek, perform the seek with no tolerance. This prevents the playhead from
        stuttering at the end of a seek from the final requested destination of the seek to the last actually seeked
        time in the video.

        When beginning to seek, we must pause the media. Through existing mechanisms, this causes the media session
        manager to update its Now Playing information, which informs media remote that we are no longer playing and
        prevents us from stuttering. However, when ending a seek, we must also trigger an additional update to again
        refresh media remote's view of the current time. This prevents a flicker when playing media after seeking.

        Unit tests to be added in a follow-up due to time constraints.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::handleSeekToPlaybackPosition):
        (WebCore::HTMLMediaElement::seekToPlaybackPositionEndedTimerFired):
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand):
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::scheduleUpdateNowPlayingInfo):
        (WebCore::PlatformMediaSessionManager::sessionDidEndRemoteScrubbing):
        (WebCore::PlatformMediaSessionManager::sessions): Deleted.
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary):
        (WebCore::MediaSessionManagerMac::scheduleUpdateNowPlayingInfo):
        (WebCore::MediaSessionManagerMac::sessionDidEndRemoteScrubbing):
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

2016-09-26  Chris Dumez  <cdumez@apple.com>

        [WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
        https://bugs.webkit.org/show_bug.cgi?id=162568

        Reviewed by Alex Christensen.

        Update BlobResourceHandle to wait for continueDidReceiveResponse() to be
        called after it calls the client's didReceiveResponseAsync(), before
        actually reading the Blob Data.

        No new tests, covered by existing tests.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::continueDidReceiveResponse):
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):

2016-09-26  Daniel Bates  <dabates@apple.com>

        Mark Ping{Handle, Load} as final
        https://bugs.webkit.org/show_bug.cgi?id=162576

        Reviewed by Alex Christensen.

        We should not support subclassing of a ping handle or overriding its ResourceHandleClient
        callbacks because there are security/privacy implications with a ping request. We should
        not encourage subclassing without careful consideration.

        * platform/network/PingHandle.h:

2016-09-26  Daniel Bates  <dabates@apple.com>

        Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
        https://bugs.webkit.org/show_bug.cgi?id=162365

        Reviewed by Simon Fraser.

        Repurpose the feature name TEXT_AUTOSIZING for the ENABLE(IOS_TEXT_AUTOSIZING)-guarded code
        as this code represents WebKit's automatic text size adjustment machinery and is compiled
        on both macOS and iOS.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::updateFont):
        * css/StyleResolver.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::CSSParser::parseValue):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserMode.h:
        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree):
        * dom/Document.h:
        * editing/EditingStyle.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/Settings.in:
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontDescription.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderElement.cpp:
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        * rendering/RenderText.h:
        * rendering/TextAutoSizing.cpp:
        * rendering/TextAutoSizing.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        * rendering/style/StyleInheritedData.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/TextSizeAdjustment.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setTextAutosizingEnabled):
        (WebCore::InternalSettings::setTextAutosizingWindowSizeOverride):
        * testing/InternalSettings.h:

2016-09-26  Nan Wang  <n_wang@apple.com>

        AX: Progress: [Mac] Content in label element should be used as AXTitle or AXDescription
        https://bugs.webkit.org/show_bug.cgi?id=162573

        Reviewed by Chris Fleizach.

        Exposed the label element's text as the AXTitle of the progress indicator.

        Test: accessibility/mac/progress-with-label-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::title):

2016-09-26  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r206386.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.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/JSTestNondeterministic.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/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2016-09-26  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_origin || m_type == CachedResource::MainResource
        https://bugs.webkit.org/show_bug.cgi?id=162472
        <rdar://problem/28431522>

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Fixing the last CachedImage constructor.
        Using CachedResource protected constructor.
        * loader/cache/CachedResource.h: Small clean-up.

2016-09-26  Youenn Fablet  <youenn@apple.com>

        [GTK][EFL] imported/w3c/web-platform-tests/fetch/api/basic/accept-header.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=162547

        Reviewed by Carlos Garcia Campos.

        Covered by LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/accept-header.html now passing.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::createTestingSession): Setting a default Accept-Language value.

2016-09-26  Mark Lam  <mark.lam@apple.com>

        Added RETURN_IF_EXCEPTION() macro and use it for exception checks.
        https://bugs.webkit.org/show_bug.cgi?id=162521

        Reviewed by Saam Barati.

        No new tests because this patch is mostly refactoring.  The only change in
        behavior is that functions that have a JSValue return type will now return the
        empty JSValue when an exception is thrown.  I tested this behavior by running
        the existing JSC and layout tests.

        * bindings/js/ArrayValue.cpp:
        (WebCore::ArrayValue::get):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        * bindings/js/JSApplePaySessionCustom.cpp:
        (WebCore::JSApplePaySession::completeShippingMethodSelection):
        (WebCore::JSApplePaySession::completeShippingContactSelection):
        (WebCore::JSApplePaySession::completePaymentMethodSelection):
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::constructJSBlob):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        (WebCore::getHashAlgorithm):
        (WebCore::createAesCbcParams):
        (WebCore::createAesKeyGenParams):
        (WebCore::createHmacKeyParams):
        (WebCore::createRsaKeyGenParams):
        (WebCore::createRsaOaepParams):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getStringFromJSON):
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents):
        (WebCore::buildJSONForRSAComponents):
        (WebCore::addUsagesToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::getCustomElementCallback):
        (WebCore::JSCustomElementRegistry::define):
        (WebCore::whenDefinedPromise):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::valueToUSVString):
        (WebCore::hasIteratorMethod):
        (WebCore::toSmallerInt):
        (WebCore::toSmallerUInt):
        (WebCore::toInt32EnforceRange):
        (WebCore::toUInt32EnforceRange):
        (WebCore::toInt64EnforceRange):
        (WebCore::toUInt64EnforceRange):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJSSequence):
        (WebCore::toJS):
        (WebCore::jsFrozenArray):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::rejectPromiseWithExceptionIfAny):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::handlePostMessage):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::constructJSDataCue):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::readAccelerationArgument):
        (WebCore::readRotationRateArgument):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::tryGetProperty):
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::tryGetPropertyAndResult):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::getCSSCanvasContext):
        * bindings/js/JSFileCustom.cpp:
        (WebCore::constructJSFile):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::createObjectStore):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::fillMessagePortArray):
        * bindings/js/JSMessagePortCustom.h:
        (WebCore::handlePostMessage):
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::setDecisionPoint):
        (WebCore::toDecision):
        (WebCore::JSMockContentFilterSettings::setDecision):
        (WebCore::JSMockContentFilterSettings::setUnblockRequestDecision):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        * bindings/js/JSNodeOrString.cpp:
        (WebCore::toNodeOrStringVector):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter):
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContextBase::getExtension):
        (WebCore::JSWebGLRenderingContextBase::getFramebufferAttachmentParameter):
        (WebCore::JSWebGLRenderingContextBase::getParameter):
        (WebCore::JSWebGLRenderingContextBase::getProgramParameter):
        (WebCore::JSWebGLRenderingContextBase::getShaderParameter):
        (WebCore::toVector):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::JSWebKitSubtleCrypto::generateKey):
        (WebCore::importKey):
        (WebCore::JSWebKitSubtleCrypto::importKey):
        (WebCore::exportKey):
        (WebCore::JSWebKitSubtleCrypto::exportKey):
        (WebCore::JSWebKitSubtleCrypto::unwrapKey):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::constructJSWorker):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::importScripts):
        (WebCore::JSWorkerGlobalScope::setTimeout):
        (WebCore::JSWorkerGlobalScope::setInterval):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (GenerateConstructorDefinition):
        * html/HTMLMediaElement.cpp:
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wtautological-compare triggered in URLParser::internalValuesConsistent
        https://bugs.webkit.org/show_bug.cgi?id=162551

        Reviewed by Alex Christensen.

        Fix logic error.

        * platform/URLParser.cpp:
        (WebCore::URLParser::internalValuesConsistent):

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add CairoUniquePtr and use it in FontPlatformDataFreetype.cpp
        https://bugs.webkit.org/show_bug.cgi?id=162557

        Reviewed by Alex Christensen.

        * platform/graphics/cairo/CairoUniquePtr.h: Added.
        (WebCore::CairoPtrDeleter<cairo_font_options_t>::operator()):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultCairoFontOptions): Return a smart pointer.
        (WebCore::FontPlatformData::buildScaledFont): Use smart pointer.

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Silence unused parameter warnings from Geoclue2Interface.c
        https://bugs.webkit.org/show_bug.cgi?id=162545

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        std::unique_ptr deleter functions should not check if pointer is null
        https://bugs.webkit.org/show_bug.cgi?id=162558

        Reviewed by Alex Christensen.

        std::unique_ptr already does this before calling the deleter.

        * platform/graphics/x11/XUniquePtr.h:
        (WebCore::XPtrDeleter::operator()):
        (WebCore::XPtrDeleter<XImage>::operator()):
        (WebCore::XPtrDeleter<_XGC>::operator()):
        (WebCore::XPtrDeleter<__GLXcontextRec>::operator()):

2016-09-26  Per Arne Vollan  <pvollan@apple.com>

        [Win][Debug] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=162550

        Reviewed by Alex Christensen.

        Windows headers need the FragmentForwardIterator '==' operator in debug mode.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator==):

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unnecessary extern functions in FontPlatformDataFreeType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=162555

        Reviewed by Carlos Garcia Campos.

        These functions should be file-static.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::convertFontConfigSubpixelOrder):
        (WebCore::convertFontConfigHintStyle):
        (WebCore::setCairoFontOptionsFromFontConfigPattern):

== Rolled over to ChangeLog-2016-09-26 ==
