2020-05-22  James Savage  <james.savage@apple.com>

        Create Swift overlay for WebKit framework
        https://bugs.webkit.org/show_bug.cgi?id=211270
        <rdar://problem/60549174>

        Reviewed by Brady Eidson.

        Provides Swift-only overlay methods for our NS_REFINED_FOR_SWIFT API.
        The overlay does not provide different API than its Objective-C counterparts,
        so overlay testing focuses on ensuring that the overlay produces the
        expected interface, and provides the expected mappings to and from ObjC.

        The overlay is defined in a separate Xcode project (from WebKit) by
        recommendation from the Swift team. Due to build system constraints this
        project cannot be a sibbling of WebKit.xcodeproj, and must live in a
        subdirectory. However, because it generally acts as part of the WebKit
        framework, it still uses the same Version.xcconfig and source file
        locations as standard WebKit sources.

        * SwiftOverlay/Configurations/Base.xcconfig: Added. Set some default
            warnings and product configuration.
        * SwiftOverlay/Configurations/WebKitSwiftOverlay-maccatalyst.xcconfig: Added.
            Override SDK configurations to build for Catalyst.
        * SwiftOverlay/Configurations/WebKitSwiftOverlay.xcconfig: Added.
            These flags were all provided by the Xcode template.
        * SwiftOverlay/Configurations/WebKitSwiftOverlayTests-maccatalyst.xcconfig: Added.
            See above.
        * SwiftOverlay/Configurations/WebKitSwiftOverlayTests.xcconfig: Added.
            See above.
        * SwiftOverlay/SwiftOverlay/install-swiftmodules.sh: Added. Provided by the
            Swift team.
        * SwiftOverlay/Tests/WebKitSwiftOverlayTests-Info.plist: Added.
        * SwiftOverlay/Tests/WebKitTests.swift: Added.
        (WebKitTests.testAPI): This ensures that the function names come through as we
            expect them to. It also ensures that the functions were correctly set to
            public visiblity.
        (WebKitTests.testWKPDFConfigurationRect): This does the same as the above, but
            also exercises the null <-> nil conversion, and that regular values are
            correctly round tripped to Objective-C.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/project.pbxproj: Added.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/xcshareddata/xcschemes/Everything (Catalyst).xcscheme: Added.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/xcshareddata/xcschemes/Everything.xcscheme: Added.
        * UIProcess/API/Cocoa/WebKitSwiftOverlay.swift: Added.
        (WKPDFConfiguration.rect): Provide mapping of CGRect.null to nil for Swift.
        (WKWebView.callAsyncJavaScript(_:arguments:in:completion:)): Provide a Result
        in the completion handler, and default value for arguments.
        (WKWebView.evaluateJavaScript(_:in:completion:)): Ditto.
        (WKWebView.createPDF(configuration:completionHandler:)): Provide a Swift function
            that takes a Result<Data, Error> instead of (Data?, Error?) tuple. Provide
            a default value for the configuration.
        (WKWebView.createWebArchiveData(completionHandler:)): See above.
        (WKWebView.find(_:configuration:completionHandler:)): See above.

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

        RELEASE_ASSERT() that InitializeWebKit2() is getting called on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=212283

        Reviewed by Alex Christensen.

        RELEASE_ASSERT() that InitializeWebKit2() is getting called on the main thread, behind
        a linked-on-after check. In r217137, we tried to add a dispatch_sync() to the main thread to
        work around the issue but it was a hack and it can cause deadlocks. It is best to force
        developers to fix their code by crashing.

        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        (WebKit::InitializeWebKit2):
        * UIProcess/Cocoa/VersionChecks.h:

2020-05-22  Alex Christensen  <achristensen@webkit.org>

        Make download resume workaround forgiving of changes in CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=212273

        Reviewed by Geoffrey Garen.

        They broke my workaround.  See rdar://problem/63512518

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):

2020-05-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [IPC] Add support for specifying `Async WantsConnection` in message files
        https://bugs.webkit.org/show_bug.cgi?id=212276

        Reviewed by Alex Christensen.

        Augments the IPC message receiver generation script to allow for "Async WantsConnection" in `.message.in` files.
        Currently, specifying this in a message causes the `connection` argument to be passed twice when handling the
        IPC message. This is because normal async IPC messages without replies normally don't have the `IPC::Connection`
        argument, and use the overloaded `handleMessage(Connection& connection, ...)` version of `handleMessage` when
        `WantsConnection` is specified.

        However, in the `Async` reply case, we already pass in the `IPC::Connection`. Instead of overloading the method
        signature, we introduce a different method instead, named `handleMessageAsyncWantsConnection`, which forwards
        the given `IPC::Connection` along to the member function.

        Test: TestAsyncMessageWithConnection

        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageAsyncWantsConnection):

        Add another variant of the message receiver template, for the case where the message receiver wants a connection.
        This is similar to handleMessageSynchronousWantsConnection, above.

        * Scripts/test-superclassMessageReceiver.cpp:
        (Messages::WebPage::TestAsyncMessageWithConnection::callReply):
        (Messages::WebPage::TestAsyncMessageWithConnection::cancelReply):
        (Messages::WebPage::TestAsyncMessageWithConnection::send):
        (WebKit::WebPage::didReceiveMessage):
        * Scripts/test-superclassMessages.h:
        (Messages::WebPage::TestAsyncMessageWithConnection::name):
        (Messages::WebPage::TestAsyncMessageWithConnection::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessageWithConnection::TestAsyncMessageWithConnection):
        (Messages::WebPage::TestAsyncMessageWithConnection::arguments const):
        * Scripts/webkit/messages.py:
        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/test-superclass.messages.in:

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

        Excessive hang time in iOS Safari under waitForDidUpdateActivityState
        https://bugs.webkit.org/show_bug.cgi?id=212272
        <rdar://problem/62787789>

        Reviewed by Andy Estes.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
        Make the view state change timeout equivalent on iOS and macOS.

        We believe that it is preferable to paint white than block the UI
        process main thread for half a second. Reduce the timeout on iOS
        to be the same as it has been for years on macOS.

2020-05-22  Alex Christensen  <achristensen@webkit.org>

        Add SPI to unblock third party cookies from WKWebViews with ResourceLoadStatistics turned on
        https://bugs.webkit.org/show_bug.cgi?id=212058
        <rdar://problem/60595539>

        Reviewed by John Wilander.

        This value makes NetworkDataTaskCocoa::blockCookies() not do anything for certain WKWebViews.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::blockCookies):
        (WebKit::NetworkDataTaskCocoa::unblockCookies):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::setAllowAllThirdPartyCookies):
        (API::PageConfiguration::allowAllThirdPartyCookies const):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _allowAllThirdPartyCookies]):
        (-[WKWebViewConfiguration _setAllowAllThirdPartyCookies:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::addParametersShared):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):

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

        Regression(r254859) DOM storage event gets fired at the frame that caused the storage modification
        https://bugs.webkit.org/show_bug.cgi?id=211503
        <rdar://problem/62983284>

        Reviewed by Maciej Stachowiak.

        r254859 refactored StorageAreaMap's dispatchSessionStorageEvent() &
        dispatchLocalStorageEvent() to share more code by moving that code to
        a new framesForEventDispatching() static function. However,
        framesForEventDispatching() was always using the session storage no
        matter the call site. It should be using the local storage when called
        from dispatchLocalStorageEvent().

        Test: storage/domstorage/events/storage-event-not-in-originator.html

        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::framesForEventDispatching):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):

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

        REGRESSION (r261978): Cannot click on links with trackpad on iPad
        https://bugs.webkit.org/show_bug.cgi?id=212262

        Reviewed by Andy Estes.

        No new tests; our current WKMouseGestureRecognizer testing strategy
        unfortunately bypasses this particular problem.

        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer _hoverEntered:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverMoved:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverExited:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverCancelled:withEvent:]):
        Don't call super in any of the hover callbacks now that we derive from
        UIHoverGestureRecognizer. We want to wholly own the state of the gesture,
        including differences from UIHoverGestureRecognizer behavior such as
        remaining in the recognizing state while the trackpad button is pressed.
        We don't need any of the code in the default implementation, so just
        override it entirely. This returns behavior to what it was like before r261978.

2020-05-21  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Move Color coder definitions to Color to allow for future encaspulation improvements
        https://bugs.webkit.org/show_bug.cgi?id=212247

        Reviewed by Simon Fraser.

        Move IPC encoder/decoder definitions from WebKit down into Color itself to move closer
        to making Color::rgb() private.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Color>::encode): Deleted.
        (IPC::ArgumentCoder<Color>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

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

        Fix issues of the Picture-in-Picture API under stress tests
        https://bugs.webkit.org/show_bug.cgi?id=212191

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::enterFullscreen):
        Mock the behavior of the VideoFullscreenInterface[AVKit|Mac] regarding
        the Picture-in-Picture mode support.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):
        Add callbacks for the end of entering/exiting fullscreen.

2020-05-21  Tyler Wilcock  <twilco.o@protonmail.com>

        Fix misspelling -- m_releaseNetwrokActivityTimer --> m_releaseNetworkActivityTimer
        https://bugs.webkit.org/show_bug.cgi?id=212237

        Reviewed by Simon Fraser.

        No new tests required -- simply fixing a misspelling.

        * UIProcess/Cocoa/NavigationState.h: Rename m_releaseNetwrokActivityTimer to m_releaseNetworkActivityTimer
        * UIProcess/Cocoa/NavigationState.mm: Rename m_releaseNetwrokActivityTimer to m_releaseNetworkActivityTimer
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::releaseNetworkActivity):
        (WebKit::NavigationState::didChangeIsLoading):

2020-05-21  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Remove trivial uses of Color::rgb()
        https://bugs.webkit.org/show_bug.cgi?id=212231

        Reviewed by Darin Adler.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (scrollViewBackgroundColor):
        Replace colorWithOverrideAlpha() with Color::colorWithAlphaUsingAlternativeRounding() to avoid
        unnecessary use of Color::rgb()

2020-05-21  Alex Christensen  <achristensen@webkit.org>

        Use an OptionSet instead of uint8_t for MessageFlags
        https://bugs.webkit.org/show_bug.cgi?id=212230
        <rdar://problem/63496543>

        Reviewed by Darin Adler.

        I also reduce the encoding size of OptionSet.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<OptionSet<T>>::encode):
        (IPC::ArgumentCoder<OptionSet<T>>::decode):
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::isSyncMessage const):
        (IPC::Decoder::shouldDispatchMessageWhenWaitingForSyncReply const):
        (IPC::Decoder::shouldUseFullySynchronousModeForTesting const):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::isSyncMessage const):
        (IPC::Encoder::shouldDispatchMessageWhenWaitingForSyncReply const):
        (IPC::Encoder::setIsSyncMessage):
        (IPC::Encoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::Encoder::setFullySynchronousModeForTesting):
        (IPC::Encoder::messageFlags):
        (IPC::Encoder::messageFlags const):
        * Platform/IPC/Encoder.h:
        * Platform/IPC/MessageFlags.h:
        (): Deleted.

2020-05-21  John Wilander  <wilander@apple.com>

        Storage Access API: Allow configurable storage access scope
        https://bugs.webkit.org/show_bug.cgi?id=212114
        <rdar://problem/63423063>

        Reviewed by Alex Christensen.

        The scope of storage access as per-frame or per-page was discussed in the
        standards process here: https://github.com/privacycg/storage-access/issues/3

        The decision was to have per-page storage access by default. Recent feedback
        from Google and conversation with Mozilla suggest that we might want to
        support the caller choosing the scope.

        This patch adds support for different scope configurations while keeping the
        existing default as per-frame. A later patch will switch the default and add
        test cases for per-page scope.

        Most of the changes is piping through the new enum
        WebCore::StorageAccessScope from the call side to encode per-frame and
        per-page access, and piping through the new struct
        WebCore::RequestStorageAccessResult on the return side which carries full
        information about the storage access request result.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::CompletionHandler<void):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessEphemeral):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessEphemeral):
        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccessInStorageSession):
            Renamed from WebResourceLoadStatisticsStore::grantStorageAccess()
            to reduce confusion since we already have another function called
            WebResourceLoadStatisticsStore::grantStorageAccess().
        (WebKit::WebResourceLoadStatisticsStore::callGrantStorageAccessHandler):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * Scripts/webkit/messages.py:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestStorageAccess):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebPage/WebPage.h:

2020-05-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Add minimal WKView API to enable TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=211868

        Reviewed by Alex Christensen.

        Enable TestWebKitAPI

        * Platform/IPC/Connection.h:
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::open):
        Add SocketMonitor to monitor received messages.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        Add PlayStation specific members: WebProcess and NetworkProcess paths, and user ID.

        * UIProcess/Launcher/ProcessLauncher.h:
        Add PlayStation specific members: Process path and user ID.

        * NetworkProcess/EntryPoint/playstation/NetworkProcessMain.cpp: Copied from Tools\TestWebKitAPI\playstation\main.cpp.
        (loadLibraryOrExit):
        (main):
        * PlatformPlayStation.cmake:
        * Shared/API/c/playstation/WKEventPlayStation.cpp: Added.
        (WKKeyboardEventMake):
        (WKMouseEventMake):
        (WKWheelEventMake):
        * Shared/API/c/playstation/WKEventPlayStation.h: Added.
        * UIProcess/API/C/playstation/WKAPICastPlayStation.h:
        (WebKit::toAPI<>):
        (WebKit::toImpl<>):
        * UIProcess/API/C/playstation/WKContextConfigurationPlayStation.cpp: Copied from Tools\TestWebKitAPI\playstation\PlatformUtilitiesPlayStation.cpp.
        (WKContextConfigurationSetWebProcessPath):
        (WKContextConfigurationCopyWebProcessPath):
        (WKContextConfigurationSetNetworkProcessPath):
        (WKContextConfigurationCopyNetworkProcessPath):
        (WKContextConfigurationSetUserId):
        (WKContextConfigurationGetUserId):
        * UIProcess/API/C/playstation/WKContextConfigurationPlayStation.h: Copied from Source\WebKit\UIProcess\API\C\playstation\WKView.h.
        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp: Added.
        (WKPageHandleKeyboardEvent):
        (WKPageHandleMouseEvent):
        (WKPageHandleWheelEvent):
        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.h: Copied from Source\WebKit\UIProcess\API\C\playstation\WKView.h.
        * UIProcess/API/C/playstation/WKView.cpp: Copied from Source\WebKit\WebProcess\InjectedBundle\playstation\InjectedBundlePlayStation.cpp.
        (WKViewCreate):
        (WKViewGetPage):
        * UIProcess/API/C/playstation/WKView.h:
        * UIProcess/Launcher/playstation/ProcessLauncherPlayStation.cpp:
        (WebKit::defaultProcessPath):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * UIProcess/playstation/PageClientImpl.cpp: Added.
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::requestScroll):
        (WebKit::PageClientImpl::viewScrollPosition):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::preferencesDidChange):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::didChangeContentSize):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves):
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        (WebKit::PageClientImpl::accessibilityScreenToRootView):
        (WebKit::PageClientImpl::rootViewToAccessibilityScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::fullScreenManagerProxyClient):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureWillEnd):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        (WebKit::PageClientImpl::willRecordNavigationSnapshot):
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        (WebKit::PageClientImpl::didFailLoadForMainFrame):
        (WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):
        (WebKit::PageClientImpl::didChangeBackgroundColor):
        (WebKit::PageClientImpl::isPlayingAudioWillChange):
        (WebKit::PageClientImpl::isPlayingAudioDidChange):
        (WebKit::PageClientImpl::refView):
        (WebKit::PageClientImpl::derefView):
        (WebKit::PageClientImpl::didRestoreScrollPosition):
        (WebKit::PageClientImpl::userInterfaceLayoutDirection):
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/playstation/PageClientImpl.h: Added.
        * UIProcess/playstation/WebProcessPoolPlayStation.cpp:
        (WebKit::WebProcessPool::platformInitialize):
        * UIProcess/playstation/PlayStationWebView.cpp: Copied from Source\WebKit\UIProcess\playstation\WebProcessPoolPlayStation.cpp.
        (WebKit::PlayStationWebView::create):
        (WebKit::PlayStationWebView::PlayStationWebView):
        (WebKit::PlayStationWebView::~PlayStationWebView):
        (WebKit::PlayStationWebView::isActive const):
        (WebKit::PlayStationWebView::isFocused const):
        (WebKit::PlayStationWebView::isVisible const):
        * UIProcess/playstation/PlayStationWebView.h: Copied from Source\WebKit\WebProcess\InjectedBundle\playstation\InjectedBundlePlayStation.cpp.
        (WebKit::PlayStationWebView::page):
        * WebProcess/EntryPoint/playstation/WebProcessMain.cpp: Copied from Tools\TestWebKitAPI\playstation\main.cpp.
        (loadLibraryOrExit):
        (main):
        * WebProcess/InjectedBundle/playstation/InjectedBundlePlayStation.cpp:
        (WebKit::InjectedBundle::initialize):
        (WebKit::InjectedBundle::setBundleParameter):
        * WebProcess/WebPage/AcceleratedSurface.cpp:
        (WebKit::AcceleratedSurface::create):

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

        Address post review comments from Mitz after r262004.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::sandboxDataVaultParentDirectory):

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

        [WK2] WebKit abandons compiled sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=212177
        <rdar://problem/54613619>

        Reviewed by Saam Barati.

        WebKit generates new compiled sandbox profiles whenever sandbox profiles are updated or
        whenever webkit directories change (which is super common for WebKitTestRunner). Previous
        compiled sandbox profiles do not get deleted and therefore may accumulate.

        To address the issue, we now save compiled sandbox profiles under _CS_DARWIN_USER_TEMP_DIR
        instead of _CS_DARWIN_USER_CACHE_DIR. The system takes care of deleting the files under
        _CS_DARWIN_USER_TEMP_DIR upon reboot or if they have not been accessed for 3 days.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::sandboxDataVaultParentDirectory):

2020-05-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS 13.4 build after r261978

        * Platform/spi/ios/UIKitSPI.h:

        Only declare `_UIHoverEventRespondable` if HAVE(UI_HOVER_EVENT_RESPONDABLE) is defined.

        * UIProcess/ios/WKMouseGestureRecognizer.mm:

        If `_UIHoverEventRespondable` is not present, fall back to declaring internal methods on
        `UIHoverGestureRecognizer`.

2020-05-21  Yoshiaki JITSUKAWA  <yoshiaki.jitsukawa@sony.com>

        [ConnectionUnix] Set MSG_NOSIGNAL to avoid SIGPIPE
        https://bugs.webkit.org/show_bug.cgi?id=211719

        Reviewed by Don Olmstead.

        Set MSG_NOSIGNAL to sendmsg()/resvmsg() in order to avoid
        SIGPIPE when the other process disappears.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::readBytesFromSocket):
        (IPC::Connection::sendOutputMessage):

2020-05-21  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][GTK][WPE] Expose and honor the media content types requiring hardware support setting
        https://bugs.webkit.org/show_bug.cgi?id=211950

        Reviewed by Adrian Perez de Castro.

        Expose mediaContentTypesRequiringHardwareSupport as a setting on WPE and WebKitGTK.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate):
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_media_content_types_requiring_hardware_support):
        (webkit_settings_set_media_content_types_requiring_hardware_support):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/wpe/WebKitSettings.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2020-05-20  Darin Adler  <darin@apple.com>

        Dictation context should be an object identifier, not a type-punned pointer
        https://bugs.webkit.org/show_bug.cgi?id=212174

        Reviewed by Anders Carlsson.

        * Scripts/webkit/messages.py: Added DictationContext to the list of types that are
        not C++ classes.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DictationAlternative>::encode): Updated for change to
        DictationAlternative structure.
        (IPC::ArgumentCoder<DictationAlternative>::decode): Ditto.

        * UIProcess/Cocoa/PageClientImplCocoa.h: Use DictationContext instead of uint64_t.
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::addDictationAlternatives): Ditto.
        (WebKit::PageClientImplCocoa::removeDictationAlternatives): Ditto.
        (WebKit::PageClientImplCocoa::dictationAlternatives): Ditto.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync): Ditto.
        * UIProcess/PageClient.h: Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showDictationAlternativeUI): Ditto.
        (WebKit::WebPageProxy::removeDictationAlternatives): Ditto.
        (WebKit::WebPageProxy::dictationAlternatives): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/ios/PageClientImplIOS.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto.
        * UIProcess/mac/PageClientImplMac.h: Ditto.
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto.

        * UIProcess/mac/WebPageProxyMac.mm: Removed unneeded include of
        DictationAlternative.h.

        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: Use DictationContext
        instead of uint64_t. Also marked class final and made everything private.
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        (WebKit::WebAlternativeTextClient::removeDictationAlternatives): Ditto.
        (WebKit::WebAlternativeTextClient::showDictationAlternativeUI): Ditto.
        (WebKit::WebAlternativeTextClient::dictationAlternatives): Ditto.

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

        WKMouseGestureRecognizer should be implemented without using UIKit internals
        https://bugs.webkit.org/show_bug.cgi?id=212173
        <rdar://problem/61163726>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):
        * UIProcess/ios/WKMouseGestureRecognizer.h:
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer _hoverEntered:withEvent:]):
        (-[WKMouseGestureRecognizer initWithTarget:action:]): Deleted.
        (-[WKMouseGestureRecognizer setView:]): Deleted.
        (-[WKMouseGestureRecognizer _wantsHoverEvents]): Deleted.
        (-[WKMouseGestureRecognizer canPreventGestureRecognizer:]): Deleted.
        (-[WKMouseGestureRecognizer canBePreventedByGestureRecognizer:]): Deleted.
        Reimplement WKMouseGestureRecognizer as a UIHoverGestureRecognizer subclass,
        so we can decouple ourselves a bit from UIKit internals.

2020-05-20  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix message filter sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=212100
        <rdar://problem/63407155>

        Reviewed by Brent Fulgham.

        A message needs to be added to the message filter in the WebContent sandbox on iOS.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-05-20  Sam Weinig  <weinig@apple.com>

        Replace Color::getHSL() with sRGBToHSL to ensure it at least gives somewhat sensible results for ExtendedColors and reduce code duplication
        https://bugs.webkit.org/show_bug.cgi?id=212143

        Reviewed by Simon Fraser.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _updateScrollViewBackground]):
        Switch to using Color::lightness().

2020-05-20  Megan Gardner  <megan_gardner@apple.com>

        Hide password echo when screen is being captured.
        https://bugs.webkit.org/show_bug.cgi?id=212060
        <rdar://problem/47653578>

        Reviewed by Wenson Hsieh.

        Use the UIScreen state and notification to determine if the
        screen is being shared or captured. This flag is for all
        capture methods, Air Play, Screen Recording, etc. If the screen is
        being captured, turn off the password echo to prevent the password from
        being leaked.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView _screenCapturedDidChange:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setIsScreenCaptured):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::isScreenCaptured const):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isScreenCaptured const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setIsScreenCaptured):

2020-05-20  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement connected and disconnected events of GAMEPAD API with libmanette
        https://bugs.webkit.org/show_bug.cgi?id=133854

        Reviewed by Carlos Garcia Campos.

        This patch brings initial GAMEPAD API support to the gtk port. We use libmanette,
        a simple GObject game controller library to handle gamepad connection and input.

        * SourcesGTK.txt:
        * UIProcess/Gamepad/UIGamepadProvider.cpp: Add a build flag to void default interface
        * UIProcess/Gamepad/gtk/UIGamepadProviderGtk.cpp: Added to retrieve WebPageProxy to which
          a gamepad connects. The returned WebPageProxy handles input events from the gamepad.
        (WebKit::getWebPageProxy):
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        * UIProcess/Gamepad/manette/UIGamepadProviderManette.cpp: Added.
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):

2020-05-20  Kate Cheney  <katherine_cheney@apple.com>

        Support operating dates in ResourceLoadStatisticsDatabaseStore
        https://bugs.webkit.org/show_bug.cgi?id=212034
        <rdar://problem/63349242>

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed-database.html
               http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed.html
               http/tests/resourceLoadStatistics/operating-dates-all-website-data-removed-database.html
               http/tests/resourceLoadStatistics/operating-dates-all-website-data-removed.html

        Patch to support Operating Dates in the ResourceLoadStatisticsDatabaseStore.
        Moves functions out of ResourceLoadStatisticsStore now that each store
        needs its own implementation.

        Adds a new function for testing which inserts an expired statistic
        and makes sure the proper behavior occurs depending on additional
        parameters.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::createTableQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getLeastRecentOperatingDate):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeOperatingDates):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStatisticsExpired const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        Migrated Operating Dates functions from ResourceLoadStatisticsStore and implemented
        them using SQLite instead of a vector. Functionality is
        identical to the original in-memory implementation.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        (WebKit::ResourceLoadStatisticsMemoryStore::mergeOperatingDates):
        (WebKit::ResourceLoadStatisticsMemoryStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStatisticsExpired const):
        (WebKit::ResourceLoadStatisticsMemoryStore::insertExpiredStatisticForTesting):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        Migrated Operating Dates functions from ResourceLoadStatisticsStore
        now that the database store does not use them.

        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp:
        (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk):
        Spelling error.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
        (WebKit::ResourceLoadStatisticsStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsStore::statisticsEpirationTime const): Deleted.
        (WebKit::ResourceLoadStatisticsStore::mergeOperatingDates): Deleted.
        (WebKit::ResourceLoadStatisticsStore::includeTodayAsOperatingDateIfNecessary): Deleted.
        (WebKit::ResourceLoadStatisticsStore::hasStatisticsExpired const): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::OperatingDate::year const):
        (WebKit::OperatingDate::month const):
        (WebKit::OperatingDate::monthDay const):
        These functions should be public now that they are needed outside
        of this file after migrating OperatingDates functions.

        (WebKit::ResourceLoadStatisticsStore::parameters const):
        (WebKit::ResourceLoadStatisticsStore::operatingDates const): Deleted.
        (WebKit::ResourceLoadStatisticsStore::clearOperatingDates): Deleted.
        Moved OperatingDates functions to the memory store. Moved
        operatingDatesWindow constexpr variables to the header file so that
        the database and memory stores can both use them.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::insertExpiredStatisticForTesting):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::insertExpiredStatisticForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetStatisticsExpiredStatistic):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::insertExpiredStatisticForTesting):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
        (WebKit::WebsiteDataStore::insertExpiredStatisticForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Function to add expired statistic to the ITP store.

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

        Deprecate WKBundlePageSetPolicyClient() Injected bundle C API
        https://bugs.webkit.org/show_bug.cgi?id=212166

        Reviewed by Alex Christensen.

        Deprecate WKBundlePageSetPolicyClient() Injected bundle C API. Approving navigations from
        the injected bundle can lead to WebProcess terminations like in <rdar://problem/60340647>
        because the WebProcess is not in a position to do sandbox checks when navigating to file
        URLs.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

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

        Plumb the display's nominal refresh rate down to ScrollingTree for use in scroll synchronization
        https://bugs.webkit.org/show_bug.cgi?id=212159

        Reviewed by Tim Horton.

        Plumb an Optional<unsigned> down windowScreenDidChange, which contains the nominal
        display refresh rate (as frames per second) if available. On macOS, we get this
        from CVDisplayLinkGetNominalOutputVideoRefreshPeriod().

        To read it, WebProcessPool::nominalFramesPerSecondForDisplay() makes a DisplayLink
        that doesn't get any observers, but that DisplayLink will very likely get used
        as soon as we schedule a rendering update.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::nominalFramesPerSecondForDisplay):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowDidChangeScreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowScreenDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::nominalFramesPerSecond const):
        * UIProcess/mac/DisplayLink.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowScreenDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        [iPadOS] -webkit-text-size-adjust:percentage doesn't work in native apps
        https://bugs.webkit.org/show_bug.cgi?id=212122
        <rdar://problem/54560875>

        Reviewed by Wenson Hsieh.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

2020-05-20  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r261892) [ Mac Debug ] 4 API tests failing related to ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=212153
        <rdar://problem/63452541>

        Reviewed by Sihui Liu.

        Accidentally deleted necessary reset() call for a SQLite statement
        when converting stored statements to SQLiteStatementAutoResetScope in
        https://trac.webkit.org/changeset/261892/webkit.

        This statement is used in a loop with multiple bind() calls so it must be reset.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):

2020-05-20  Eric Carlson  <eric.carlson@apple.com>

        Update some media logging
        https://bugs.webkit.org/show_bug.cgi?id=212109
        <rdar://problem/63424816>

        Unreviewed, remove a change unintentionally included in r261899.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _interactivePinchDismissChanged:]):

2020-05-20  Andy Estes  <aestes@apple.com>

        [Mac] UI processes spin when creating the "Share" context menu item
        https://bugs.webkit.org/show_bug.cgi?id=212137
        <rdar://problem/54498394>

        Reviewed by Wenson Hsieh.

        On Mac, WebKit has been using the +[NSMenuItem standardShareMenuItemForItems:] SPI to create
        the "Share" context submenu and menu item. This call performs synchronous IPC and can result
        in UI process spins.

        Where available, switch to using the asynchronous
        -[NSSharingServicePicker getMenuWithCompletion:] SPI instead. This method only creates the
        submenu, not the menu item, so when using this new method we must create the "Share" menu
        item ourselves.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::getStandardShareMenuItem):
        (WebKit::WebContextMenuProxyMac::getShareMenuItem):
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::getContextMenuItem):
        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyMac::createShareMenuItem): Deleted.
        (WebKit::WebContextMenuProxyMac::createContextMenuFromItems): Deleted.
        (WebKit::WebContextMenuProxyMac::createContextMenuItem): Deleted.

2020-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build with GTK 3.98.4

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkitPrintOperationRunDialog):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseAddDialog):
        (webkitWebViewBaseRemoveChild):
        (webkitWebViewBaseContainerForall):
        (webkitWebViewBaseAddWebInspector):
        (webkitWebViewBaseRemoveWebInspector):
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseSizeAllocate):
        (webkitWebViewBaseConstructed):
        (webkit_web_view_base_class_init):
        * UIProcess/API/gtk/WebKitWebViewBase.h: Removed.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/Inspector/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::platformSave):
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSave):
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):

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

        [GTK4] Add support for drag and drop operations
        https://bugs.webkit.org/show_bug.cgi?id=211779

        Reviewed by Adrian Perez de Castro.

        * UIProcess/API/gtk/DragSource.h:
        * UIProcess/API/gtk/DragSourceGtk4.cpp:
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DropTarget.h:
        * UIProcess/API/gtk/DropTargetGtk4.cpp:
        (WebKit::DropTarget::DropTarget):
        (WebKit::DropTarget::~DropTarget):
        (WebKit::DropTarget::accept):
        (WebKit::DropReadAsyncData::DropReadAsyncData):
        (WebKit::DropTarget::loadData):
        (WebKit::DropTarget::didLoadData):
        (WebKit::DropTarget::enter):
        (WebKit::DropTarget::update):
        (WebKit::DropTarget::didPerformAction):
        (WebKit::DropTarget::leave):
        (WebKit::DropTarget::drop):

2020-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r258919): fast/events/ios/key-events-comprehensive/key-events-control tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=212124
        <rdar://problem/60893744>

        Reviewed by Tim Horton.

        After the changes in r258919, WKContentView's text input traits report that we're in a single line input, even
        when there is no editable focused element. This prevents UIKit from allowing WebKit to handle the `CTRL + M`
        key command, which is interpreted at the system level as inserting a line break in a multi-line editable area.

        It seems odd to consider ourselves in a single line input when there isn't even an editable element focused
        element; for now, we can fix these failing tests by just going with the default value for the text input traits'
        `setIsSingleLineDocument` property, but not explicitly setting it to either `NO` or `YES` when no element is
        focused.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInputTraits]):

2020-05-19  Sam Weinig  <weinig@apple.com>

        Remove almost always incorrect Color::getRGBA
        https://bugs.webkit.org/show_bug.cgi?id=212059

        Reviewed by Darin Adler and Simon Fraser.

        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkitColorFillFromWebCoreColor):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::getDocumentBackgroundColor):
        Replace Color::getRGBA with Color::toSRGBAComponentsLossy()

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

        Use an ObjectIdentifier<> for DisplayLink observer IDs
        https://bugs.webkit.org/show_bug.cgi?id=212112

        Reviewed by Per Arne Vollan.

        Replace unsigned observerID with DisplayLinkObserverID, which is a typesafe ObjectIdentifier<>.

        Use PlatformDisplayID in more places.

        * Scripts/webkit/messages.py:
        * Shared/DisplayLinkObserverID.h: Copied from Source/WebKit/UIProcess/mac/DisplayLink.h.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::startDisplayLink):
        (WebKit::WebProcessPool::stopDisplayLink):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        * UIProcess/mac/DisplayLink.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::startDisplayLink):
        (WebKit::WebProcessProxy::stopDisplayLink):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):

2020-05-19  Alex Christensen  <achristensen@webkit.org>

        Add _WKDownloadDelegate callback including totalBytesWritten
        https://bugs.webkit.org/show_bug.cgi?id=212110
        <rdar://problem/63358981>

        Reviewed by Geoffrey Garen.

        Without this new callback, after resuming a download, a client has no way to tell whether the download was successfully
        resumed by a server that has proper etag and range request support or whether the download began at the beginning again.
        A client was guessing that the download did not restart, causing incorrect reported download sizes when the download did restart.
        Luckily, the data on disk was not corrupted, just the UI.  This allows us to fix the UI.

        Testing covered by expanding the API test for resuming downloads.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveData):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::writeDownload):
        * NetworkProcess/NetworkDataTaskBlob.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveData):
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::expectedContentLength const): Deleted.
        (WebKit::DownloadProxy::setExpectedContentLength): Deleted.
        (WebKit::DownloadProxy::bytesLoaded const): Deleted.
        (WebKit::DownloadProxy::setBytesLoaded): Deleted.
        * UIProcess/Downloads/DownloadProxy.messages.in:

2020-05-19  Kate Cheney  <katherine_cheney@apple.com>

        ITP database should finalize all prepared statements before closing
        https://bugs.webkit.org/show_bug.cgi?id=211929
        <rdar://problem/63246945>

        Reviewed by John Wilander.

        No new tests, behavior confirmed by existing tests.

        Convert all SQLite statement objects to be unique pointers to better
        manage the lifetime of each statement object. Only initialize and
        prepare an object when it is needed instead of preparing all objects
        at once. Set each statement to null before closing the database
        because ~SQLiteStatement() will finalize the statement.

        This patch removes all reset() commands now that we initialize
        each statement using SQLiteStatementAutoResetScope.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::close):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getScopedStatement const):
        Function to initialize and prepare a statement.

        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationship):
        This function is not used and can be deleted.

        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isMigrationNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::destroyStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::merge):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        (WebKit::CompletionHandler<void):
        (WebKit::ResourceLoadStatisticsDatabaseStore::prepareStatements): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        Updated all statement variables to end with "Statement" to follow the
        established pattern.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):

2020-05-19  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix message filter sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=212100
        <rdar://problem/63407155>

        Reviewed by Andy Estes.

        A message needs to be added to the message filter in the WebContent sandbox on iOS.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-05-19  Kate Cheney  <katherine_cheney@apple.com>

        Revert WebKitTestRunner to reset ITP to the memory store between all tests.
        https://bugs.webkit.org/show_bug.cgi?id=212094
        <rdar://problem/63405806>

        Reviewed by Chris Dumez.

        Changing this in https://bugs.webkit.org/show_bug.cgi?id=211637 caused
        test flakiness.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):

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

        Push a PlatformDisplayID to scrolling trees, and allow the scrolling thread to get displayDidRefresh notifications
        https://bugs.webkit.org/show_bug.cgi?id=211034

        Reviewed by Sam Weinig.

        Prep work for webkit.org/b210884.

        Have EventDispatcher call displayDidRefresh() on each scrolling tree it knows about. It calls this
        on the EventDispatcher thread; the scrolling tree is responsible for bouncing that to the scrolling thread.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::displayDidRefreshOnScrollingThread):
        (WebKit::EventDispatcher::displayWasRefreshed):
        * WebProcess/WebPage/EventDispatcher.h:

2020-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Drag and drop within a contenteditable area duplicates attachment-backed images
        https://bugs.webkit.org/show_bug.cgi?id=212075
        <rdar://problem/62434146>

        Reviewed by Andy Estes.

        When the attachment API is enabled, starting a drag on an attachment-element-backed image within a
        contenteditable area sometimes causes the ranged selection to collapse. This is because `WebViewImpl::startDrag`
        has a separate codepath for starting a drag with attachment metadata that doesn't invoke `NSView`'s deprecated
        `-dragImage:at:offset:event:pasteboar:source:slideBack:` method, but instead uses
        `-beginDraggingSessionWithItems:event:source:`. While the former spins the runloop until the end of the drag
        session, the latter does not and returns immediately after beginning the drag. As a result,
        `WebPageProxy::didStartDrag()` is actually invoked after the drag ends when dragging non-attachment content,
        whereas `WebPageProxy::didStartDrag()` is invoked immediately after beginning the drag when starting a drag in
        an attachment or attachment-backed image element.

        This call to `didStartDrag()` is used to inform the web process that dragging has begun, and sets the
        `m_isStartingDrag` flag on `WebPage` to false. As a result, `m_isStartingDrag` is true over the course of the
        drag session when dragging non-attachment elements, but it's only true while starting the drag when dragging
        attachments. This flag is consulted in `WebPage::mouseEvent()` to determine whether we should avoid handling the
        incoming mouse event when beginning a drag. This prevents these incoming mouse events from triggering selection
        changes while dragging (for more details, refer to <http://trac.webkit.org/r176687>).

        Now, if we combine this with the fact that mouse events can be queued up in the UI process (refer to
        <https://trac.webkit.org/r230817>), it's possible to end up handling these queued mouse events in the web
        process after `m_isStartingDrag` has been set back to false when dragging an attachment. This doesn't happen
        when dragging non-attachment content, since we don't call `didStartDrag()` until the drag has already ended, so
        any queued mouse events are sent to the web process and immediately dropped on the floor since
        `m_isStartingDrag` is true.

        To address this, we make a couple of minor adjustments:

        1.  Invoke `didStartDrag()` right before calling into `-dragImage:at:offset:event:pasteboar:source:slideBack:`,
            so that we don't wait until the drag ends to set `m_isStartingDrag` to false. This makes the behavior of
            both codepaths for starting a drag (attachment and non-attachment) consistent, and also makes it consistent
            with iOS.

        2.  In `didStartDrag()`, discard any queued mouse events to prevent them from being handled by the page (e.g.
            causing the selection to change immediately after starting the drag). We already have identical logic to do
            this when showing a context menu, so we can factor this out into a private `WebPageProxy` helper and call it
            from both places.

        Test: WKAttachmentTestsMac.DraggingAttachmentBackedImagePreservesRangedSelection

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::startDrag):

        Invoke `didStartDrag()` earlier when starting a drag using the deprecated method, such that we don't wait until
        the drag ends to set `m_isStartingDrag` to false in the web process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::discardQueuedMouseEvents):

        Refactor logic to discard all queued mouse events into a separate private helper.

        (WebKit::WebPageProxy::didStartDrag):

        Use the above helper to empty queued mouse events when starting a drag.

        (WebKit::WebPageProxy::showContextMenu):
        * UIProcess/WebPageProxy.h:

2020-05-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add testing and logging for ApplePaySetup
        https://bugs.webkit.org/show_bug.cgi?id=211972
        <rdar://problem/63291965>

        Reviewed by Alex Christensen.

        * Shared/ApplePay/PaymentSetupConfiguration.mm:
        (WebKit::toPlatformConfiguration):
        (WebKit::PaymentSetupConfiguration::PaymentSetupConfiguration):
        * Shared/ApplePay/PaymentSetupConfigurationWebKit.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::getSetupFeatures):
        (WebKit::WebPaymentCoordinator::beginApplePaySetup):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2020-05-19  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r243149): createMediaElementSource not working
        https://bugs.webkit.org/show_bug.cgi?id=211394
        <rdar://problem/62866132>

        Reviewed by Per Arne Vollan.

        I removed access to some Audio services in r243149, because we believed they were already
        blocked by a global deny command. However, Sandbox rules override generic rules with
        explicit rules, so the imported sandbox rules were not being blocked.

        This patch re-adds the rules needed to support these audio routines on iOS hardware.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::mediaRelatedMachServices):

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

        [iOS] Port Foreground process assertion to RunningBoard
        https://bugs.webkit.org/show_bug.cgi?id=211795
        <rdar://problem/61831863>

        Reviewed by Geoffrey Garen.

        Port Foreground process assertion to RunningBoard now that <rdar://problem/62614429>
        has been fixed.

        * Configurations/WebKit.xcconfig:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAssertion::isValid const):

2020-05-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add testing and logging for ApplePaySetup
        https://bugs.webkit.org/show_bug.cgi?id=211972
        <rdar://problem/63291965>

        Reviewed by Alex Christensen.

        * Shared/ApplePay/PaymentSetupConfiguration.mm:
        (WebKit::toPlatformConfiguration):
        (WebKit::PaymentSetupConfiguration::PaymentSetupConfiguration):
        * Shared/ApplePay/PaymentSetupConfigurationWebKit.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::getSetupFeatures):
        (WebKit::WebPaymentCoordinator::beginApplePaySetup):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2020-05-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Add WEBKIT_EDITING_COMMAND_PASTE_AS_PLAIN_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=212038

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitEditingCommands.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitEditingCommands.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2020-05-18  David Kilzer  <ddkilzer@apple.com>

        Replace TextIndicatorOptions with OptionSet<TextIndicatorOption>
        <https://webkit.org/b/212051>
        <rdar://problem/63368556>

        Reviewed by Simon Fraser.

        Use OptionSet<TextIndicatorOption> everywhere
        TextIndicatorOptions was previously used, plus:
        - Make TextIndicatorOption an enum class.  Remove
          "TextIndicatorOption" prefix so TextIndicatorOptionBar becomes
          TextIndicatorOption::Bar.
        - Remove TextIndicatorOptionDefault because OptionSet<>
          initializes to zero.
        - Replace static variables (including two globals in WebCore)
          with constexpr variables.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::insertDroppedImagePlaceholders):
        (WebKit::WebPage::computeAndSendEditDragSnapshot):
        (WebKit::linkIndicatorPositionInformation):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2020-05-18  Andy Estes  <aestes@apple.com>

        http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html fails in public SDK builds
        https://bugs.webkit.org/show_bug.cgi?id=212000
        <rdar://problem/63323082>

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * Shared/WebCoreArgumentCoders.h:

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

        Rare crash under -[WKContentView resignFirstResponderForWebView]
        https://bugs.webkit.org/show_bug.cgi?id=212050
        <rdar://problem/60187111>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponderForWebView]):
        Reorganize this block so that it always takes a strong reference /before/
        null checking and using the pointer. Also, add a _page null check.
        This is a speculative fix for an unreproducible low-rate crash.

        In theory the existing time-of-check race here should not be a problem,
        since WKWebView is supposed to be freed on the main thread, and this code
        runs on the main thread, but we have ample evidence of WKWebView
        being freed off the main thread in various clients.

2020-05-18  David Kilzer  <ddkilzer@apple.com>

        Use default initializers in TextIndicatorData
        <https://webkit.org/b/212039>
        <rdar://problem/63355619>

        Reviewed by Alex Christensen.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        - Switch from decodeEnum() and encodeEnum() to modern
          equivalents that check for valid enum values.

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace uses of +self with +class
        https://bugs.webkit.org/show_bug.cgi?id=212041

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/_WKFrameHandle.mm:
        (-[_WKFrameHandle isEqual:]):
        (-[_WKFrameHandle initWithCoder:]):
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setAttachmentFileWrapperClass:]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::allocFileWrapperInstance const):
        (WebKit::PageClientImplCocoa::serializableFileWrapperClasses const):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (+[WKTransformView layerClass]):
        (+[WKSimpleBackdropView layerClass]): Deleted.
        (+[WKShapeView layerClass]): Deleted.
        (-[WKRemoteView initWithFrame:contextID:]): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::~ScrollingTreeScrollingNodeDelegateIOS):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::resetScrollViewDelegate):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollView const):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectFormAccessoryPickerRow:]):
        (-[WKContentView selectFormPopoverTitle]):

2020-05-18  Alex Christensen  <achristensen@webkit.org>

        WebPageProxy::DidCommitLoadForFrame should use FrameLoadType instead of casting to/from uint32_t for IPC
        https://bugs.webkit.org/show_bug.cgi?id=212028
        <rdar://problem/63343021>

        Reviewed by David Kilzer.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Single selection <select> with <optgroups> shows multiple selected options
        https://bugs.webkit.org/show_bug.cgi?id=199485
        <rdar://problem/52757531>

        Reviewed by Megan Gardner.

        Fixes a long-standing bug in WKMultipleSelectPicker. Prior to this patch, we rely on the delegate method
        `-pickerView:row:column:checked:` to be called twice whenever an item is selected: one time for the item that is
        no longer checked, and another for the newly checked item. This method is responsible for updating the cached
        `FocusedElementInformation` that determines the data model for the select menu, with the expectation that the
        unchecked item would be updated to have `isSelected = false;`, and the new checked item would have `isSelected`
        `= true;`.

        However, `-pickerView:row:column:checked:` is only called for visible item cells. This means that if the user
        checks an item, scrolls the select menu items down so that the checked item is offscreen, and then checks a
        different item, we only get notified that the new item is checked, and as a result, fail to uncheck the previous
        item.

        To address this, tweak our logic for handling a single select so that when an item is checked, we additionally
        update the previously checked item to not be selected. Also, fix what seems to be a bug in the logic for
        updating `_singleSelectionIndex`, which is currently updated even when the item is unchecked. It seems to work
        out at the moment, because `-pickerView:row:column:checked:` seems to be called with `checked := YES` after the
        previous item was unchecked (assuming that it was visible).

        Test: fast/forms/ios/no-stale-checked-items-in-select-picker.html

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView selectFormAccessoryHasCheckedItemAtRow:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectFormAccessoryHasCheckedItemAtRow:]):

        Add plumbing for a new testing hook.

        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl selectFormAccessoryHasCheckedItemAtRow:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKMultipleSelectPicker selectRow:inComponent:extendingSelection:]):

        Also, fix an existing bug in this testing helper method that crashed the test runner due to calling an
        unimplemented selector. Instead of trying to invoke `-pickerView:didSelectRow:inComponent:`, we should be using
        `-pickerView:row:column:checked:` instead for multiple select pickers (which, somewhat confusingly, are still
        used for single select elements that have `optgroup`s.)

        (-[WKMultipleSelectPicker selectFormAccessoryHasCheckedItemAtRow:]):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unexpected capitalization of next word after repositioning caret
        https://bugs.webkit.org/show_bug.cgi?id=211969
        <rdar://problem/62605526>

        Reviewed by Alex Christensen.

        The changes in r242551 refactored synchronous autocorrection context request logic such that it uses
        `waitForAndDispatchImmediately` instead of `sendSync`, in order to make it interruptible by unbounded sync IPC
        sent from the web process. If the UI process receives sync IPC, it will immediately cancel the autocorrection
        context request (returning an empty context), before proceeding to handle the incoming sync IPC.

        In a more recent version of iOS, other changes around spellchecking have caused the synchronous message
        `WebPageProxy::checkTextOfParagraph` to be sent from the web process in such a way that it now frequently
        coincides with the synchronous autocorrection context request being sent from the UI process. The result is that
        we now frequently end up cancelling autocorrection requests early by responding with empty contexts. This
        manifests in the keyboard sometimes losing information about its autocapitalization context and believing that
        it is in an empty text field, which reverts to default autocorrection suggestions and autocapitalizes the
        software keyboard.

        To fix this, instead of using the `InterruptWaitingIfSyncMessageArrives` option when waiting for the IPC
        response, add and use a new flag that allows us to process an incoming sync IPC message if we're waiting for
        the sync message response. We use this new IPC flag when waiting synchronously for HandleAutocorrectionContext.

        Test: editing/selection/ios/changing-selection-does-not-trigger-autocapitalization.html

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::processIncomingMessage):

        If the new IPC flag is set and the incoming message is synchronous, allow it to immediately dispatch the sync
        message by enqueueing it and then waking up `m_waitForMessageCondition` so that it can process the message.

        * Platform/IPC/Connection.h:
        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

        Use `DispatchIncomingSyncMessagesWhileWaiting` instead of `InterruptWaitingIfSyncMessageArrives`.

2020-05-18  Lauro Moura  <lmoura@igalia.com>

        webkitpy: Update test data after r261776
        https://bugs.webkit.org/show_bug.cgi?id=212008

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * Scripts/test-legacyMessageReceiver.cpp:
        * Scripts/test-legacyMessages.h:
        (Messages::WebPage::DidCreateWebProcessConnection::DidCreateWebProcessConnection):
        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/test-legacy.messages.in:

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.29.1 release

        * gtk/NEWS: Add release notes for 2.29.1.

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move iOS files from Source/WebKit/Sources.txt to Source/WebKit/SourcesCocoa.txt
        https://bugs.webkit.org/show_bug.cgi?id=212014

        Unreviewed. Move platform specific files to the platform sources file.

        * Sources.txt:
        * SourcesCocoa.txt:

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] "ASSERTION FAILED: !m_adoptionIsRequired" when double clicking on a word
        https://bugs.webkit.org/show_bug.cgi?id=211957

        Reviewed by Adrian Perez de Castro.

        Remove WebSelectionData wrapper since we can just encode/decode WebCore::SelectionData.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::ArgumentCoder<SelectionData>::decode): Use modern decoder.
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/WebSelectionData.cpp: Removed.
        * Shared/gtk/WebSelectionData.h: Removed.
        * SourcesGTK.txt:
        * UIProcess/API/gtk/DragSource.h:
        * UIProcess/API/gtk/DragSourceGtk3.cpp:
        (WebKit::DragSource::DragSource):
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DragSourceGtk4.cpp:
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DropTarget.h:
        * UIProcess/API/gtk/DropTargetGtk3.cpp:
        (WebKit::DropTarget::accept):
        (WebKit::DropTarget::enter):
        (WebKit::DropTarget::update):
        (WebKit::DropTarget::leaveTimerFired):
        (WebKit::DropTarget::drop):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseStartDrag):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::startDrag):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/gtk/Clipboard.h:
        * UIProcess/gtk/ClipboardGtk3.cpp:
        (WebKit::WriteAsyncData::WriteAsyncData):
        (WebKit::Clipboard::write):
        * UIProcess/gtk/ClipboardGtk4.cpp:
        (WebKit::Clipboard::write):
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::writeCustomData):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToClipboard):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitContextMenuItemType for paste as plaintext
        https://bugs.webkit.org/show_bug.cgi?id=177638

        Reviewed by Michael Catanzaro.

        Add WEBKIT_CONTEXT_MENU_ACTION_PASTE_AS_PLAIN_TEXT.

        * Shared/API/glib/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetActionTag):
        (webkitContextMenuActionGetForContextMenuItem):
        (webkitContextMenuActionGetLabel):
        * UIProcess/API/gtk/WebKitContextMenuActions.h:
        * UIProcess/gtk/KeyBindingTranslator.cpp:

2020-05-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move to new Pasteboard API
        https://bugs.webkit.org/show_bug.cgi?id=177633

        Reviewed by Adrian Perez de Castro.

        Enable custom pasteboard data.

        * Shared/WebPreferencesDefaultValues.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::ArgumentCoder<SelectionData>::encode):
        (IPC::ArgumentCoder<SelectionData>::decode):
        * UIProcess/WebPasteboardProxy.cpp:
        * UIProcess/gtk/ClipboardGtk3.cpp:
        (WebKit::Clipboard::write): Add support for writing URI list and custom data.
        * UIProcess/gtk/ClipboardGtk4.cpp:
        (WebKit::Clipboard::write): Ditto.
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        (WebKit::WebPasteboardProxy::writeCustomData):

2020-05-16  Andy Estes  <aestes@apple.com>

        REGRESSION (r260717): installmentConfiguration member is no longer available on ApplePayPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=211911
        <rdar://problem/63236367>

        Reviewed by Tim Horton.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::encode):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::decode):
        (IPC::finishDecoding): Deleted.
        (IPC::finishEncoding): Deleted.

2020-05-16  Yury Semikhatsky  <yurys@chromium.org>

        [GTK] Do not leak pages created by window.open
        https://bugs.webkit.org/show_bug.cgi?id=211970

        Reviewed by Carlos Garcia Campos.

        Previously webkitWebViewCreateNewPage created unbalanced refence to WebPageProxy and returned
        it as a raw pointer. That raw pointer was later wrapped in a RefPtr in WebKitUIClient.
        This change ensures that all refs are balanced by returnin RefPtr instead of
        a raw pointer.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewCreateNewPage):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        Use enum serialization instead of casting to/from uint32_t
        https://bugs.webkit.org/show_bug.cgi?id=211885

        Reviewed by Geoffrey Garen.

        * Scripts/webkit/messages.py:
        * Shared/DocumentEditingContext.h:
        * Shared/ios/GestureTypes.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWebGLLoadPolicy):
        (WebKit::toAPI):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::toWebCoreWebGLLoadPolicy):
        (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const):
        (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectForWebView:]):
        (toUIWKSelectionFlags):
        (toSelectionFlags):
        (toWKTextGranularity):
        (toWKSelectionDirection):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:withFlags:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView selectWordForReplacement]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::gestureCallback):
        (WebKit::WebPageProxy::touchesCallback):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::extendSelection):
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange rangeByExpandingToWordBoundaryByCharacters:inDirection:]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::webGLPolicyForURL const):
        (WebKit::WebFrameLoaderClient::resolveWebGLPolicyForURL const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::webGLPolicyForURL):
        (WebKit::WebPage::resolveWebGLPolicyForURL):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):
        (WebKit::WebPage::getSelectionContext):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::rangeAtWordBoundaryForPosition):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::selectWithTwoTouches):
        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::selectWordBackward):
        (WebKit::WebPage::moveSelectionByOffset):
        (WebKit::WebPage::getRectsForGranularityWithSelectionOffset):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPage::rangeForGranularityAtPoint):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::beginSelectionInDirection):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::applyAutocorrectionInternal):
        (WebKit::WebPage::autocorrectionContext):
        (WebKit::dataDetectorLinkPositionInformation):
        (WebKit::moveByGranularityRespectingWordBoundary):
        (WebKit::WebPage::requestDocumentEditingContext):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::webGLPolicyForURL):
        (WebKit::WebPage::resolveWebGLPolicyForURL):

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        [iOS Simulator] TestWebKitAPI._WKDownload.Resume is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=211786

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        Regression (iOS 13.4, r249142): WKWebView.loading is never reset after a Back navigation in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=211449

        Reviewed by Geoffrey Garen.

        Always call clearPendingAPIRequest in WebPageProxy::didStartProvisionalLoadForFrameShared.
        r249142 regressed this and caused more "loading appears to continue forever" bugs fixed in r249890.
        This should fix both, by removing the problematic half of r249142.

        Covered by an API test.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):

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

        [GTK3] Bring back usage of GtkMenu for context menus
        https://bugs.webkit.org/show_bug.cgi?id=211557

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (contextMenuDismissed): Removed.
        (webkitWebViewPopulateContextMenu): Use WebContextMenuProxyGtk::widgetDismissedSignal
        and move the code from contextMenuDismissed() into an inline lambda.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (activeContextMenuClosed): Removed.
        (webkitWebViewBaseSetActiveContextMenuProxy): Use WebContextMenuProxyGtk::widgetDismissedSignal
        and move the code from activeContextMenuClosed() into an inline lambda.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Add helper functions to manipulate the actual
        widget used for context menus depending on whether GTK3 or GTK4 is being used. The GTK3
        versions bring back bits of code removed in r260889.
        (WebKit::createMenuWidget): Added.
        (WebKit::popupMenuWidget): Added.
        (WebKit::popdownMenuWidget): Added.
        (WebKit::menuWidgetHasItems): Added.
        (WebKit::bindModelToMenuWidget): Added.
        (WebKit::WebContextMenuProxyGtk::populate): Use context menu widget helper functions.
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems): Ditto.
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk): Ditto. Also handle the
        signal triggered when the context menu is dismissed and arrange to call
        webkitWebViewContextMenuDismissed() and webkitWebViewBaseContextMenuDismissed().
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Use helper functions.
        * UIProcess/gtk/WebContextMenuProxyGtk.h: Add WebContextMenuProxyGtk::widgetDismissedSignal
        constant.

2020-05-14  Kate Cheney  <katherine_cheney@apple.com>

        Attribute non-network loads and loads with html strings as automatically app-bound
        https://bugs.webkit.org/show_bug.cgi?id=211913
        <rdar://problem/63157801

        Reviewed by Brent Fulgham.

        Move logic from WebsiteDataStoreCocoa to WebPageProxy to check for
        special app-bound protocols and set m_limitsNavigationToAppBoundDomains
        to force these WebViews into app-bound mode.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isForcedIntoAppBoundMode:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Testing SPI to see whether m_limitsNavigationsToAppBoundDomains was
        set.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        Check for html string loads and force WebView into app-bound mode if needed.
        No need to worry about setting this variable even if the app hasn't
        opted in because setIsNavigatingToAppBoundDomainAndCheckIfPermitted
        does an early return before checking this variable if
        WKAppBoundDomains does not exist.

        (WebKit::shouldTreatURLProtocolAsAppBound):
        Adds javascript protocols to this check.

        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted):
        Check for special protocols here and force WebView into app-bound mode.

        (WebKit::WebPageProxy::isForcedIntoAppBoundModeTesting):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::beginAppBoundDomainCheck):
        (WebKit::shouldTreatURLProtocolAsAppBound): Deleted.

2020-05-14  Timothy Hatcher  <timothy@apple.com>

        Add baseURL version of _WKUserStyleSheet forWKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=211926
        rdar://problem/62074675

        Reviewed by Devin Rousso.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:baseURL:level:userContentWorld:]): Added.
        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:level:userContentWorld:]): Clean up WebCore::UserStyleSheet initializer.
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]): Ditto.
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]): Ditto.
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]): Ditto.
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:level:userContentWorld:]): Ditto.

2020-05-14  John Wilander  <wilander@apple.com>

        Add quirk for cookie blocking latch mode aolmail.com redirecting to aol.com under aol.com
        https://bugs.webkit.org/show_bug.cgi?id=211925
        <rdar://problem/61901041>

        Reviewed by Brent Fulgham.

        No new tests. Just a new quirk for a pair of domains added by request.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::needsFirstPartyCookieBlockingLatchModeQuirk const):

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

        Regression(r261163) Causes crashes on builds without libwebrtc.dylib
        https://bugs.webkit.org/show_bug.cgi?id=211924
        <rdar://problem/63206792>

        Reviewed by Jer Noble.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):

2020-05-14  Timothy Hatcher  <timothy@apple.com>

        Add sourceURL to _evaluateJavaScript: so the scripts appear in Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=211904
        rdar://problem/62074376

        Reviewed by Devin Rousso.

        Added sourceURL version of _evaluateJavaScript: that passes the sourceURL to RunJavaScriptParameters.
        If the sourceURL is invalid, generate a unique user script URL so the source code errors are not showing
        up with the frame's document URL and bogus locations.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): pass API::UserScript::generateUniqueURL() for the sourceURL.
        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]): Clean up WebCore::UserScript initializer.
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]): Ditto.
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:userContentWorld:]): Ditto.
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:contentWorld:]): Ditto.
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:contentWorld:]): Ditto.
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:contentWorld:deferRunningUntilNotification:]): Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]): Renamed to add sourceURL.
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withSourceURL:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]): Added sourceURL.
        (-[WKWebView _evaluateJavaScript:withSourceURL:inFrame:inContentWorld:completionHandler:]): Added. Pass sourceURL through.
        (-[WKWebView evaluateJavaScript:completionHandler:]): Call new method with sourceURL as nil.
        (-[WKWebView evaluateJavaScript:inContentWorld:completionHandler:]): Ditto.
        (-[WKWebView callAsyncJavaScript:arguments:inContentWorld:completionHandler:]): Ditto.
        (-[WKWebView _callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]): Ditto.
        (-[WKWebView _evaluateJavaScript:inFrame:inContentWorld:completionHandler:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

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

        WebsiteDataStore functions should only send IPC to WebProcesses that are associated with its session
        https://bugs.webkit.org/show_bug.cgi?id=211917

        Reviewed by Alex Christensen.

        WebsiteDataStore functions should only send IPC to WebProcesses that are associated with its session.
        setResourceLoadStatisticsEnabled() / clearResourceLoadStatisticsInWebProcesses() were talking to all
        WebProcesses, even those associated with other sessions, which was wrong.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearResourceLoadStatistics): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebsiteDataStore::clearResourceLoadStatisticsInWebProcesses):

2020-05-14  Daniel Bates  <dabates@apple.com>

        [iOS] Remove dead dictation code
        https://bugs.webkit.org/show_bug.cgi?id=211871

        Reviewed by Wenson Hsieh.

        UIKit has long removed all callers that would call -nextUnperturbedDictationResultBoundaryFromPosition
        and -previousUnperturbedDictationResultBoundaryFromPosition. So, remove the implementations.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previousUnperturbedDictationResultBoundaryFromPosition:]): Deleted.
        (-[WKContentView nextUnperturbedDictationResultBoundaryFromPosition:]): Deleted.

2020-05-14  Brady Eidson  <beidson@apple.com>

        Crash in PDFPlugin::ensureDataBufferLength
        <rdar://problem/62932155> and https://bugs.webkit.org/show_bug.cgi?id=211818

        Reviewed by Tim Horton.

        There's some currently unreproducible case(s) where a range request finishes
        while there's no m_data to append it to.
        
        It's fair hardening to handle that case.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::getResourceBytesAtPositionMainThread): Handle null m_data.
        (WebKit::PDFPlugin::ensureDataBufferLength): Ditto.

2020-05-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filtering rules in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211188

        Reviewed by Brent Fulgham.

        Based on telemetry and local testing, update the message filtering rules in the WebContent process' sandbox on iOS.
        Messages that have not been observed being in use, should be denied.

        No new tests, covered by existing tests.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        Non-unified build fixed, mid May 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=211859

        Unreviewed build fix.

        * UIProcess/gtk/Clipboard.cpp: Add missing includes for <mutex>, wtf/NeverDestroyed.h, and
        wtf/text/WTFString.h.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Add missing
        SharedBufferDataReference.h include.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h: Add missing namespace to usage of
        the WebCore::SharedBuffer type.

2020-05-13  David Kilzer  <ddkilzer@apple.com>

        [IPC] Use templates to reduce duplicate code in IPC::Decoder and IPC::Encoder classes
        <https://webkit.org/b/211861>
        <rdar://problem/62360390>

        Reviewed by Alex Christensen.

        In broad strokes, this change fixes the following issues:
        - Change `unsigned` type to `size_t` for `alignment` parameters
          for consistency on 32-bit platforms.
        - Templatize Encoder::encode(), Decoder::decode() and
          Decoder::operator>>() methods to reduce duplicate code.  This
          deleted code in source files, added template methods to header
          files, and required a few changes to existing templates in
          header files to disambiguate std::is_arithmetic parameter
          types.
        - Use `typename E` for all template methods that handle enum
          types.
        - Use `typename T` for all other template method types.
        - Move WARN_UNUSED_RETURN to same line as `bool` return type.
        - Add FIXME comments to validate enum values.

        * Platform/IPC/Decoder.cpp:
        (IPC::roundUpToAlignment):
        (IPC::Decoder::alignBufferPosition):
        (IPC::Decoder::bufferIsLargeEnoughToContain const):
        (IPC::Decoder::decodeFixedLengthData):
        (IPC::decodeValueFromBuffer): Delete.
        (IPC::Decoder::getOptional): Delete.
        (IPC::Decoder::operator>>): Delete.
        (IPC::Decoder::decode): Delete.
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::decode):
        (IPC::Decoder::operator>>):
        (IPC::Decoder::decodeEnum):
        * Platform/IPC/Encoder.cpp:
        (IPC::roundUpToAlignment):
        (IPC::Encoder::grow):
        (IPC::Encoder::encodeFixedLengthData):
        (IPC::copyValueToBuffer): Delete.
        (IPC::Encoder::encode): Delete.
        * Platform/IPC/Encoder.h:

2020-05-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: `RuntimeEnabledFeatures` should also be enabled when remotely inspecting
        https://bugs.webkit.org/show_bug.cgi?id=211874

        Reviewed by Timothy Hatcher.

        * WebProcess/Inspector/WebInspectorUI.h:
        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::enableFrontendFeatures): Added.
        (WebKit::WebInspectorUI::WebInspectorUI):
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::RemoteWebInspectorUI):

2020-05-13  Megan Gardner  <megan_gardner@apple.com>

        Unreviewed Build Fix.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setMouseEventPolicy):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker controlEndEditing]):

2020-05-13  Kate Cheney  <katherine_cheney@apple.com>

        SHOULD NEVER BE REACHED in WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary
        https://bugs.webkit.org/show_bug.cgi?id=211637
        <rdar://problem/63031185>

        Reviewed by John Wilander.

        No new tests, behavior confirmed by existing tests.

        Stop reseting ITP to use the memory store between tests. This results
        in consecutive calls to NetworkSession::recreateResourceLoadStatisticStore
        if two database tests occur in a row, which can set the m_resourceLoadStatistics
        object before a previous call to WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore
        is done.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):

2020-05-13  Megan Gardner  <megan_gardner@apple.com>

        Change Date/Time popovers to contextMenus.
        https://bugs.webkit.org/show_bug.cgi?id=211825
        <rdar://problem/63102524>

        Reviewed by Wenson Hsieh.

        Update the Date/Time picker to use UIContextMenus instead of popovers.
        Removed all the unneeded popover code.
        Renamed WKFormInputControl to WKDateTimeInputControl because it was only used
        for date and time controls, unneccessary abstraction.
        We need to ensure the poisition information is up to date before presenting
        the context menu, or the position it will be presented from can be stale.

        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView _updateAccessory]):
        (mayContainSelectableText):
        (createInputPeripheralWithView):
        (-[WKContentView inputLabelText]):
        (-[WKContentView _removeContextMenuViewIfPossible]):
        (-[WKContentView inputLabelTextForViewController:]):
        (-[WKContentView formInputControl]):
        (-[WKContentView setTimePickerValueToHour:minute:]):
        (-[WKContentView timePickerValueHour]):
        (-[WKContentView timePickerValueMinute]):
        * UIProcess/ios/forms/WKDateTimeInputControl.h: Renamed from Source/WebKit/UIProcess/ios/forms/WKFormInputControl.h.
        * UIProcess/ios/forms/WKDateTimeInputControl.mm: Renamed from Source/WebKit/UIProcess/ios/forms/WKFormInputControl.mm.
        (-[WKDateTimeContextMenuViewController init]):
        (-[WKDateTimeContextMenuViewController preferredContentSize]):
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKDateTimePicker contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKDateTimePicker _contextMenuInteraction:styleForMenuWithConfiguration:]):
        (-[WKDateTimePicker contextMenuInteraction:configurationForMenuAtLocation:]):
        (-[WKDateTimePicker contextMenuInteraction:willEndForConfiguration:animator:]):
        (-[WKDateTimePicker removeContextMenuInteraction]):
        (-[WKDateTimePicker ensureContextMenuInteraction]):
        (-[WKDateTimePicker showDateTimePicker]):
        (-[WKDateTimePicker reset:]):
        (-[WKDateTimePicker calendarType]):
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker setDateTimePickerToInitialValue]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker viewController]):
        (-[WKDateTimePicker controlEndEditing]):
        (-[WKDateTimeInputControl initWithView:]):
        (-[WKDateTimeInputControl setTimePickerHour:minute:]):
        (-[WKDateTimeInputControl dateTimePickerCalendarType]):
        (-[WKDateTimeInputControl timePickerValueHour]):
        (-[WKDateTimeInputControl timePickerValueMinute]):
        * WebKit.xcodeproj/project.pbxproj:

2020-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix tvOS and watchOS builds after r261638

        `-[UIPasteboard itemProviders]` is not present on watchOS and tvOS.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _writePromisedAttachmentToPasteboard:]):

2020-05-13  Timothy Horton  <timothy_horton@apple.com>

        Build fix.

        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2020-05-13  Jer Noble  <jer.noble@apple.com>

        Replace isNullFunctionPointer with real weak-linking support
        https://bugs.webkit.org/show_bug.cgi?id=211751

        Reviewed by Sam Weinig.

        Use the new WTF_WEAK_LINK_FORCE_IMPORT macro.

        * Platform/classifier/cocoa/ResourceLoadStatisticsClassifierCocoa.cpp:
        (WebKit::ResourceLoadStatisticsClassifierCocoa::canUseCorePrediction):

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

        Add SPI for reverting to touch events for iPad trackpad interactions
        https://bugs.webkit.org/show_bug.cgi?id=211824
        <rdar://problem/61363084>

        Reviewed by Megan Gardner.

        New Test: IOSMouseSupport.WebsiteMouseEventPolicies

        Plumb a "mouse event policy" WKWebpagePreference, which has two values:

        - Default, which means that WebKit decides whether or not indirect
        pointing devices send mouse or touch events.

        - SynthesizeTouchEvents, which ensures that WebKit will always send
        touch events from indirect pointing devices.
        This value is only available on platforms that implement touch events.

        We use the WKWebpagePreferences mechanism in order to make it easy to
        implement it as a "per-site" quirk, but unlike most WKWebpagePreferences,
        it turns around and changes UI process state (the enablement of the
        WKMouseGestureRecgonizer).

        * Scripts/webkit/messages.py:
        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (WebKit::mouseEventPolicy):
        (WebKit::coreMouseEventPolicy):
        (-[WKWebpagePreferences _setMouseEventPolicy:]):
        (-[WKWebpagePreferences _mouseEventPolicy]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::setMouseEventPolicy):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setMouseEventPolicy):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldUseMouseGestureRecognizer]):
        (-[WKContentView setUpMouseGestureRecognizer]):
        (-[WKContentView _configureMouseGestureRecognizer]):
        (-[WKContentView _setMouseEventPolicy:]):
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer setEnabled:]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):

2020-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] "Copy" context menu action for attachment element does not work in Mail
        https://bugs.webkit.org/show_bug.cgi?id=211817
        <rdar://problem/58043110>

        Reviewed by Tim Horton.

        Implements support for copying an attachment element, via context menu actions. To achieve this, we first
        refactor code in WebCore that is currently responsible for converting an attachment element into a
        PromisedAttachmentInfo, which provides a handle to an UI-process-side API attachment object. We then use this
        helper in WebKit to send PromisedAttachmentInfo back to the UI process when handling the copy action from the
        context menu on iOS.

        On iOS, we then take this promised attachment info in the UI process, map it to an API::Attachment object, and
        use the file handle to create and write an NSItemProvider to the general pasteboard. (In the future, similar
        logic could be implemented on macOS as well to handle copying attachment elements by implementing a version of
        writePromisedAttachmentToPasteboard in PageClientImplMac. Currently, we fall back to treating this case as if
        we're copying a text selection containing a single attachment element).

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:

        Add a new helper function to simulate an element action (_WKElementActionType) for an element at the given
        location. This is used by the new API test.

        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _simulateElementAction:atLocation:]):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::writePromisedAttachmentToPasteboard):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::writePromisedAttachmentToPasteboard):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Add an IPC message for the UI process to receive a PromisedAttachmentInfo, and copy it to the system pasteboard
        if it maps to an actual API::Attachment. For now, we only support copying data if the attachment is backed by
        a file wrapper in the UI process (as opposed to blob data written by the web process).

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::writePromisedAttachmentToPasteboard):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (createItemProvider):

        Create a helper function to convert PromisedAttachmentInfo into an NSItemProvider. This is similar to
        `-_prepareToDragPromisedAttachment:`, but with a couple differences: (1) we only create an NSItemProvider
        instead of going through `WebItemProviderRegistrationInfoList`; (2) since there's no opportunity to clean up
        temporary after pasting, serialize the attachment data using `-serializedRepresentation`, and provide the
        attachment data instead of a file URL.

        Ideally, we would offer the data directly to the pasteboard so that even if Mail terminates, the contents of the
        pasteboard can still be provided when pasting; however, it doesn't seem like we can do this while being able to
        offer a suggested name for the item we're writing. Some other apps work around this limitation by writing the
        file name as plain text on the pasteboard, but this doesn't work then attempting to copy a plain text file that
        has a file name.

        (-[WKContentView _writePromisedAttachmentToPasteboard:]):
        (-[WKContentView _simulateElementAction:atLocation:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performActionOnElement):

2020-05-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filtering rules in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211188

        Reviewed by Brent Fulgham.

        Based on telemetry and local testing, update the message filtering rules in the WebContent process' sandbox on iOS.
        Messages that have not been observed being in use, should be denied.

        No new tests, covered by existing tests.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-05-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] In CFPrefs direct mode, the WebContent sandbox needs to allow access to plist files
        https://bugs.webkit.org/show_bug.cgi?id=211782

        Reviewed by Brent Fulgham.

        Since preference files will be read directly in CFPrefs direct mode, the WebContent sandbox on iOS needs to allow reading these files.

        No new tests. There is API test coverage for this in PreferenceChanges.mm, but these tests are only run on simulator, not device.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        Add the feature flags plist file back
        https://bugs.webkit.org/show_bug.cgi?id=211816

        Reviewed by Jer Noble.

        Add the WebKit.plist file to the WebKit project and use it instead of the one from the WebKitAdditions.

        * FeatureFlags/WebKit.plist: Added.
        * WebKit.xcodeproj/project.pbxproj:

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

        Allow WebAudioBufferList to dynamically change its number of frames
        https://bugs.webkit.org/show_bug.cgi?id=211720

        Reviewed by Eric Carlson.

        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::setStorage):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::audioSamplesAvailable):
        * WebProcess/cocoa/RemoteCaptureSampleManager.h:

2020-05-13  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed compile fix after r261584.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

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

        REGRESSION (r261254): Broke Apple Pay on macOS
        https://bugs.webkit.org/show_bug.cgi?id=211826
        <rdar://problem/63161750>

        Reviewed by Alex Christensen.

        r261254 dropped the code needed to add the WebPaymentCoordinatorProxy as an IPC message receiver.
        This patch re-introduces the code in order to address the regression.

        No new tests, tested manually on https://applepaydemo.apple.com.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAddMessageReceiver):
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorRemoveMessageReceiver):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy):
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver):
        (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver):
        * UIProcess/WebPageProxy.h:

2020-05-13  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r260571): RequestedScrollPosition doesn't have its scroll change applied to layers anymore
        https://bugs.webkit.org/show_bug.cgi?id=211374

        Reviewed by Carlos Garcia Campos.

        Use WebPage::finalizeRenderingUpdate() to perform the compositing state flush
        and the scrolling tree layer positioning, instead of doing things half-baked
        by manually invoking the FrameView method.

        Additional WebPage calls (updateRendering(), flushPendingEditorStateUpdate())
        are moved into CompositingCoordinator::flushPendingLayerChanges() from the
        LayerTreeHost::layerFlushTimerFired() method for consistency. The additional
        CompositingCoordinator::syncDisplayState() method call is removed -- this call
        triggered any necessary layout, but that's already done through WebPage::updateRendering().

        CompositingCoordinator::flushPendingLayerChanges() doesn't rely on the
        FrameView flush return value since that's not available anymore -- instead,
        true is returned always.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):

2020-05-13  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed compile fix after r261584.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:

2020-05-13  Tomoki Imai  <Tomoki.Imai@sony.com>

        Selected element on Web Inspector is not highlighted with CPU Rendering.
        https://bugs.webkit.org/show_bug.cgi?id=195933

        Reviewed by Devin Rousso.

        Since WebInspectorClient::drawHighlight was not called while non accelerated compositing mode, we cannot see element highlight on web inspector.
        This patch adds WebInspectorClient::drawHighlight call in WebPage::drawRect, which draws webpage image while non accelerated compositing mode, to overlay the highlight.
        WebInspectorClient::highlight and WebInspectorClient::hideHighlight currently requests re-paint whole web page, but it should be able to optimize by only updating dirty rects in the future.

        * WebProcess/Inspector/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight): If it's not acceleratedCompositingEnabled, then just request repaint.
        (WebKit::WebInspectorClient::hideHighlight): If it's not acceleratedCompositingEnabled, then just request repaint.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect): Draw inspector overlay here if it's not accelerated compositing mode.

2020-05-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK debug build after r261554

        Remove writeToClipboard that receives a const SelectionData& that is no longer used.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Add the feature flag plist file parser
        https://bugs.webkit.org/show_bug.cgi?id=211457

        Reviewed by Tim Horton.

        WebKit needs to parse the feature flags plist by itself in some cases.

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm: Added.
        (WebKit::featureFlagEnabled):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultAsyncFrameAndOverflowScrollingEnabled):
        (WebKit::defaultUseGPUProcessForMedia):
        (WebKit::defaultRenderCanvasInGPUProcessEnabled):
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):
        (WebKit::defaultWebGL2Enabled):
        (WebKit::defaultWebGPUEnabled):
        (WebKit::defaultInAppBrowserPrivacy):
        (WebKit::defaultIncrementalPDFEnabled):
        (WebKit::defaultWebXREnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2020-05-12  Alex Christensen  <achristensen@webkit.org>

        Give some NetworkLoadMetrics to WebCoreNSURLSession's delegate
        https://bugs.webkit.org/show_bug.cgi?id=211759
        <rdar://problem/62909440>

        Reviewed by Jer Noble.

        This also reduces duplicate lookups in RemoteMediaResourceManager

        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::loadFinished):
        * GPUProcess/media/RemoteMediaResource.h:
        * GPUProcess/media/RemoteMediaResourceManager.cpp:
        (WebKit::RemoteMediaResourceManager::responseReceived):
        (WebKit::RemoteMediaResourceManager::redirectReceived):
        (WebKit::RemoteMediaResourceManager::dataSent):
        (WebKit::RemoteMediaResourceManager::dataReceived):
        (WebKit::RemoteMediaResourceManager::accessControlCheckFailed):
        (WebKit::RemoteMediaResourceManager::loadFailed):
        (WebKit::RemoteMediaResourceManager::loadFinished):
        * GPUProcess/media/RemoteMediaResourceManager.h:
        * GPUProcess/media/RemoteMediaResourceManager.messages.in:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:
        (WebKit::RemoteMediaResourceProxy::loadFinished):
        * WebProcess/GPU/media/RemoteMediaResourceProxy.h:

2020-05-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Don't assume extensions always exist
        https://bugs.webkit.org/show_bug.cgi?id=211760
        <rdar://problem/61217642>

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::processGoogleLegacyAppIdSupportExtension):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::processGoogleLegacyAppIdSupportExtension):

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

        [WK2] Neuter WKFrameIsFrameSet() / WKPageGetFrameSetLargestFrame() C API
        https://bugs.webkit.org/show_bug.cgi?id=211808

        Reviewed by Darin Adler.

        Neuter WKFrameIsFrameSet() / WKPageGetFrameSetLargestFrame() C API. This is only SPI and is only used for slightly
        different printing behavior in Safari. Framesets are no longer supported in HTML5 and are now super rare. Support
        for this C API adds quite a bit of code complexity and crashes such as <rdar://problem/60322282>, it just does not
        seem worth it anymore.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameIsFrameSet):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetFrameSetLargestFrame):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didCommitLoad):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setIsFrameSet): Deleted.
        (WebKit::WebFrameProxy::isFrameSet const): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet): Deleted.
        (WebKit::WebPageProxy::frameSetLargestFrameChanged): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::focusedFrame const):
        (WebKit::WebPageProxy::frameSetLargestFrame const): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged const):
        (WebKit::findLargestFrameInFrameSet): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidBecomeFrameset): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2020-05-12  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Rebuild MobileGestalt cache if needed
        https://bugs.webkit.org/show_bug.cgi?id=211739

        Reviewed by Darin Adler.

        This patch was written by Geoff Garen and myself. Rebuild the MobileGestalt cache in the UI process if the
        MobileGestalt cache is stale. This should be done before starting a new WebContent process. If the cache
        is not rebuilt, every MobileGestalt query in the WebContent process will fail, since access to the daemon
        is denied.

        No new tests, since testing this is not trivial. It would involve deleting the MobileGestalt cache and
        making sure it is rebuilt afterwards. This could be an API test, but API tests are not supported on iOS
        devices.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

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

        [GTK] Rework drag and drop handling in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=211723

        Reviewed by Adrian Perez de Castro.

        Split DragAndDropHelper class into DragSource and DropTarget classes. This separates the source and destination
        parts making it easier to follow. This patch also adds PageClient::didPerformDragControllerAction() to notify
        back the view when an operation is done to update the result.

        * SourcesGTK.txt:
        * UIProcess/API/gtk/DragSource.h: Added.
        * UIProcess/API/gtk/DragSourceGtk3.cpp: Added.
        (WebKit::DragSource::DragSource):
        (WebKit::DragSource::~DragSource):
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DropTarget.h: Added.
        * UIProcess/API/gtk/DropTargetGtk3.cpp: Added.
        (WebKit::DropTarget::DropTarget):
        (WebKit::DropTarget::~DropTarget):
        (WebKit::DropTarget::accept):
        (WebKit::DropTarget::enter):
        (WebKit::DropTarget::update):
        (WebKit::DropTarget::dataReceived):
        (WebKit::DropTarget::didPerformAction):
        (WebKit::DropTarget::leaveTimerFired):
        (WebKit::DropTarget::leave):
        (WebKit::DropTarget::drop):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        (WebKit::PageClientImpl::didPerformDragControllerAction):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseStartDrag):
        (webkitWebViewBaseDidPerformDragControllerAction):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/gtk/DragAndDropHandler.cpp: Removed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:

2020-05-12  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r261557.

        This commit caused testing to exit early due to too many
        crashes on macOS Catalina Asan

        Reverted changeset:

        "Allow WebAudioBufferList to dynamically change its number of
        frames"
        https://bugs.webkit.org/show_bug.cgi?id=211720
        https://trac.webkit.org/changeset/261557

2020-05-12  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed crash fix.

        Use correct global name for icon service in RELEASE_ASSERT.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChooseFilesForOpenPanelWithDisplayStringAndIcon):

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

        Allow WebAudioBufferList to dynamically change its number of frames
        https://bugs.webkit.org/show_bug.cgi?id=211720

        Reviewed by Eric Carlson.

        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::setStorage):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::audioSamplesAvailable):
        * WebProcess/cocoa/RemoteCaptureSampleManager.h:

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

        [GTK4] Add support for clipboard operations
        https://bugs.webkit.org/show_bug.cgi?id=211561

        Reviewed by Adrian Perez de Castro.

        * UIProcess/gtk/Clipboard.h:
        * UIProcess/gtk/ClipboardGtk4.cpp:
        (WebKit::Clipboard::Clipboard):
        (WebKit::Clipboard::type const):
        (WebKit::Clipboard::formats):
        (WebKit::ReadTextAsyncData::ReadTextAsyncData):
        (WebKit::Clipboard::readText):
        (WebKit::ReadFilePathsAsyncData::ReadFilePathsAsyncData):
        (WebKit::Clipboard::readFilePaths):
        (WebKit::ReadBufferAsyncData::ReadBufferAsyncData):
        (WebKit::Clipboard::readBuffer):
        (WebKit::Clipboard::write):
        (WebKit::Clipboard::clear):

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

        [GTK] Rework clipboard handling in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=211511

        Reviewed by Adrian Perez de Castro.

        Use async APIs to avoid blocking the UI process during the communication with the clipboard. In GTK4 only async
        APIs are available. Add Clipboard class to handle the communication with the clipboard with the GTK
        implementation in ClipboardGtk3 and ClipboardGtk4 files.

        * Shared/gtk/WebSelectionData.cpp:
        (WebKit::WebSelectionData::WebSelectionData): Add constructor receivnig an rvalue reference.
        * Shared/gtk/WebSelectionData.h:
        * SourcesGTK.txt:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/gtk/Clipboard.cpp: Added.
        (WebKit::clipboard):
        (WebKit::primary):
        (WebKit::Clipboard::get):
        * UIProcess/gtk/Clipboard.h: Added.
        * UIProcess/gtk/ClipboardGtk3.cpp: Added.
        (WebKit::Clipboard::Clipboard):
        (WebKit::isPrimaryClipboard):
        (WebKit::Clipboard::type const):
        (WebKit::FormatsAsyncData::FormatsAsyncData):
        (WebKit::Clipboard::formats):
        (WebKit::ReadTextAsyncData::ReadTextAsyncData):
        (WebKit::Clipboard::readText):
        (WebKit::ReadFilePathsAsyncData::ReadFilePathsAsyncData):
        (WebKit::Clipboard::readFilePaths):
        (WebKit::ReadBufferAsyncData::ReadBufferAsyncData):
        (WebKit::Clipboard::readBuffer):
        (WebKit::Clipboard::write):
        (WebKit::Clipboard::clear):
        * UIProcess/gtk/ClipboardGtk4.cpp: Added.
        (WebKit::Clipboard::Clipboard):
        (WebKit::Clipboard::type const):
        (WebKit::Clipboard::formats):
        (WebKit::Clipboard::readText):
        (WebKit::Clipboard::readFilePaths):
        (WebKit::Clipboard::readBuffer):
        (WebKit::Clipboard::write):
        (WebKit::Clipboard::clear):
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::getTypes):
        (WebKit::WebPasteboardProxy::readText):
        (WebKit::WebPasteboardProxy::readFilePaths):
        (WebKit::WebPasteboardProxy::readBuffer):
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::clearClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::types):
        (WebKit::WebPlatformStrategies::readTextFromClipboard):
        (WebKit::WebPlatformStrategies::readFilePathsFromClipboard):
        (WebKit::WebPlatformStrategies::readBufferFromClipboard):
        (WebKit::WebPlatformStrategies::writeToClipboard):
        (WebKit::WebPlatformStrategies::clearClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Introduce a RealtimeMediaSource video sample observer
        https://bugs.webkit.org/show_bug.cgi?id=211718

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::videoSampleAvailable):
        (WebKit::MediaRecorderPrivate::stopRecording):
        (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Deleted.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:

2020-05-12  Mark Lam  <mark.lam@apple.com>

        Wasm::enableFastMemory() was called too late.
        https://bugs.webkit.org/show_bug.cgi?id=211773

        Reviewed by Yusuke Suzuki.

        Previously, we were calling Wasm::enableFastMemory() in WebProcess::initializeWebProcess().
        By then, it is too late because the JSC::Config and WTF::Config have already been
        frozen.  There is nothing special about Wasm::enableFastMemory() that it needs to
        be called this late.  This patch moves it into JSC::initializeThreading() where
        it belongs.

        This change also make the initialization of Wasm fast memory consistent with how
        we have always done it for the jsc shell i.e. it is initialized at the end of
        JSC::initializeThreading().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

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

        Fix problems caught by replacing WTF::Optional with std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211703

        Reviewed by Chris Dumez.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::plainTextForContext): Clarified ambiguous overload resolution by writing
        the conversion from a live range to a SimpleRange out explicitly. Also fixed a typo
        where there was a missing "&" in a "const&" argument.

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

        [ macOS ] scrollingcoordinator/mac/latching/scrolling-select-should-not-latch-mainframe.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211747

        Reviewed by Tim Horton.

        Add an option to monitorWheelEvents to reset latching.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageStartMonitoringScrollOperations):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2020-05-11  Kate Cheney  <katherine_cheney@apple.com>

        Fail navigations to non app-bound domains after use of app-bound APIs
        https://bugs.webkit.org/show_bug.cgi?id=211647
        <rdar://problem/62978159>

        Reviewed by Brent Fulgham.

        A lot of this patch is deleting the unnecessary variable/function
        hasNavigatedAwayFromAppBoundDomain now that navigating away from an
        app-bound domain is not possible.
        
        To address the bug, this sets the default isNavigatingToAppBoundDomain
        value to be WTF::nullopt. This will allow app-bound behaviors until
        a navigation has been attempted, in which case it will fail or will
        update isNavigatingToAppBoundDomain to the correct value.


        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * Shared/PolicyDecision.h:
        (WebKit::PolicyDecision::encode const):
        (WebKit::PolicyDecision::decode):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
        (WebKit::WebPageProxy::hasNavigatedAwayFromAppBoundDomain const): Deleted.
        Remove hasNavigatedAwayFromAppBoundDomain.

        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted):
        Check for new m_hasExecutedAppBoundBehaviorBeforeNavigation parameter
        and fail the navigation if a WebView has used app-bound behavior then
        tries to navigate to a non app-bound domain.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Update error message to be more general now that more than one error
        can occur.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setHasExecutedAppBoundBehaviorBeforeNavigation):
        * UIProcess/WebPageProxy.messages.in:
        New parameter to indicate a WebView has used app-bound APIs before
        navigating.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::shouldEnableInAppBrowserPrivacyProtections):
        (WebKit::WebFrameLoaderClient::hasNavigatedAwayFromAppBoundDomain): Deleted.
        (WebKit::WebFrameLoaderClient::needsInAppBrowserPrivacyQuirks const): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        Combined two functions into a simpler function:
        shouldEnableInAppBrowserPrivacyProtections().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPage::updatePreferences):
        Store the special app-bound domain flag to gate the service worker
        API. This should be stored separately from
        m_isNavigatingToAppBoundDomain, because in the WebPage constructor we
        don't yet know whether the WKAppBoundDomains key exists.

        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        (WebKit::WebPage::didReceivePolicyDecision):
        Remove hasNavigatedAwayFromAppBoundDomain.

        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::setIsNavigatingToAppBoundDomain):
        (WebKit::WebPage::shouldEnableInAppBrowserPrivacyProtections):
        If m_needsInAppBrowserPrivacyQuirks are on for testing, don't enable
        protections. Only notify the WebPageProxy of app-bound behavior if
        a navigation has not occured and we know the webView is not app-bound
        (in order to limit IPC).

        (WebKit::m_isNavigatingToAppBoundDomain): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isNavigatingToAppBoundDomain const):
        (WebKit::WebPage::setIsNavigatingToAppBoundDomain): Deleted.
        (WebKit::WebPage::hasNavigatedAwayFromAppBoundDomain const): Deleted.
        (WebKit::WebPage::setHasNavigatedAwayFromAppBoundDomain): Deleted.
        (WebKit::WebPage::needsInAppBrowserPrivacyQuirks const): Deleted.

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

        Remove some unnecessary indirection when getting Document’s Editor
        https://bugs.webkit.org/show_bug.cgi?id=211744

        Reviewed by Geoffrey Garen.

        See WebCore ChangeLog for more information. No change in behavior.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performActionOnElement):

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

        Fix possible crash in ViewGestureController on macOS
        https://bugs.webkit.org/show_bug.cgi?id=211745

        Reviewed by Tim Horton.

        When ViewGestureController::resetState() clears m_swipeCancellationTracker, it should set it to canceled so that
        any pending -trackSwipeEventWithOptions:... which is holding a reference to the WKSwipeCancellationTracker knows
        to stop.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::resetState):
        (WebKit::ViewGestureController::reset):

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

        Enable the mock video presentation mode in related layout tests and fix test failures
        https://bugs.webkit.org/show_bug.cgi?id=211645

        Reviewed by Darin Adler.

        Fix the mistake in VideoFullscreenManager::supportsVideoFullscreen() introduced in r202274.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreen const):

2020-05-11  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filtering rules in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211188
        <rdar://problem/60922910>

        Reviewed by Brent Fulgham.

        Based on telemetry and local testing, update the message filtering rules in the WebContent process' sandbox on iOS.
        Messages that have not been observed being in use, should be denied.

        No new tests, covered by existing tests.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        [iOS] WKWebView.evaluateJavaScript should run at foreground priority when app is foreground
        https://bugs.webkit.org/show_bug.cgi?id=211734

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):

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

        REGRESSION (r253267): issues on touchstart/touchend/touchmove (pointerdown/pointerup/pointermove) events
        https://bugs.webkit.org/show_bug.cgi?id=211521
        <rdar://problem/62942374>

        Reviewed by Darin Adler.

        As a brief refresher, deferring gesture recognizers allow us to handle otherwise blocking touch events
        asynchronously by having all preventable native gesture recognizers require the deferring gesture recognizer to
        fail; we only fail the deferring gesture recognizer once the web process has handled the touch event, and did
        not call `preventDefault()`.

        These additional failure requirements can cause preventable gestures to be linked together in the same gesture
        dependency subgraph; since each subgraph is reset only once all gestures in the subgraph have failed or ended,
        this might cause some gestures to be reset after a delay (rather than being reset immediately). To mitigate
        this, we divide the set of preventable gestures into multiple (currently, 2) subgraphs: one for gestures that
        are reset after a delay, and another for gestures that are immediately resettable. This way, immediately
        resettable gestures are able to reset and recognize again, without having to wait for other slower preventable
        gesture recognizers to reset.

        When fast-clicking is disabled (e.g. when loading a desktop web page on a mobile form factor, or when the
        viewport has been zoomed in), the blocking synthetic double tap gesture recognizer (that is, `WKContentView`'s
        `_doubleTapGestureRecognizer`) is enabled, and adds itself as a dynamic failure requirement to the content
        view's synthetic single tap gesture recognizer (`_singleTapGestureRecognizer`). In terms of the gesture
        dependency graph, this causes the single tap gesture to form an edge with the double tap gesture, which ends up
        uniting both deferring gesture recognizers under the same subgraph. This means UIWebTouchEventsGestureRecognizer,
        which should be one of the gestures in the immediately resettable subgraph, is now connected to the rest of the
        delayed resettable gestures, meaning that it cannot recognize until "slowly resettable" gestures such as the
        tap-and-half text selection gesture have also been reset. This delay causes touch events to be dropped, as is
        the case in this bug.

        To fix this, simply quarantine the single tap and double tap gestures inside their own subgraph by introducing a
        separate deferring gesture recognizer for them. When fast-clicking is enabled, this does not hinder the ability
        for the single tap gesture to fire in rapid succession, since the double tap gesture is disabled (and thus, not
        a part of the graph at all). when fast-clicking is disabled, then the double tap gesture will prevent the single
        tap gesture from being immediately reset anyways, due to the direct failure requirement between the double and
        single tap gesture.

        Doing this ensures that no other immediately resettable gesture (`UIWebTouchEventsGestureRecognizer` included)
        is accidentally blocked from immediately resetting due to being linked to the delayed resettable gestures by way
        of the synthetic single and double tap gestures.

        Test: fast/events/touch/ios/tap-and-half-when-viewport-is-not-responsive.html

        * UIProcess/ios/WKContentViewInteraction.h:

        Add a dedicated deferring gesture recognizer for the synthetic single tap and double tap gesture recognizers.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView cleanUpInteraction]):

        Use -_deferringGestureRecognizers instead of hard-coding logic for each deferring gesture.

        (-[WKContentView _removeDefaultGestureRecognizers]): Ditto.
        (-[WKContentView _addDefaultGestureRecognizers]): Ditto.
        (-[WKContentView _deferringGestureRecognizers]):

        We now have 3 distinct deferring gestures; instead of handling the three deferring gestures individually in
        various places in this file, group them all behind a getter that returns an array of deferring gestures, and use
        this instead.

        (-[WKContentView _doneDeferringNativeGestures:]): Ditto.
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Ditto.
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

        Partition the synthetic single tap and double tap gestures into their own subgraph.

2020-05-11  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, reverting r261296.

        Rolling r260769 back in, since this was not causing a
        regression.

        Reverted changeset:

        "Unreviewed, reverting r260769."
        https://bugs.webkit.org/show_bug.cgi?id=211578
        https://trac.webkit.org/changeset/261296

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

        Unreviewed, fix the watchOS build after r261457

        Put -[WKActionSheetAssistant suggestedActionsForContextMenuWithPositionInformation:] behind a USE(UICONTEXTMENU)
        compiler guard; currently, it is declared everywhere, but only implemented if ENABLE(DATA_DETECTION) &&
        USE(UICONTEXTMENU). However, WKContentView only invokes it behind code that is guarded by USE(UICONTEXTMENU).

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant suggestedActionsForContextMenuWithPositionInformation:]):

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

        [GTK] Media and audio permission request unit tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=158257

        Reviewed by Carlos Garcia Campos.

        Add new private API to disable secure capture device contexts.
        This is needed for the API tests.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewSetMediaCaptureRequiresSecureConnection):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:

2020-05-10  Basuke Suzuki  <basuke.suzuki@sony.com>

        Add ENABLE_PERIODIC_MEMORY_MONITOR flag.
        https://bugs.webkit.org/show_bug.cgi?id=211704

        Reviewed by Yusuke Suzuki.

        No new tests because there's no behavior change.

        Replace PLATFORM() macros with ENABLE() macro.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2020-05-10  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r261270): Broke build with python3
        https://bugs.webkit.org/show_bug.cgi?id=211699

        Reviewed by Yusuke Suzuki.

        Remove the problematic print statement. It causes the script to fail. If fixed, it spams the
        build output. We only print messages during the build when there are problems to be fixed.

        * Scripts/generate-message-receiver.py:
        (main):

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

        Clicking a tel:// link on iPad with a trackpad presents different UI than tapping on it
        https://bugs.webkit.org/show_bug.cgi?id=211686
        <rdar://problem/57941589>

        Reviewed by Wenson Hsieh.

        Previously, iOS WebKit had code in handleTap, handleTwoFingerTapAtPoint, and commitPotentialTap,
        which introspected the hit element /before/ dispatching the tap (or synthetic click) to the DOM,
        short circuiting all normal event handling machinery in order to prevent the default action
        and present the Data Detectors UI for the given link.

        There's one immediate problem with this, which is that there is no similar code in the direct
        click event handler path, which we now use for trackpad/mouse input on iPad. There's also a
        secondary problem (which we have not seen in practice), which is that pages cannot preventDefault
        to avoid launching the Data Detectors UI on a link, like they could to prevent an ordinary
        link from being followed.

        In order to resolve both issues and reduce duplication of logic, move the code that introspects
        the element and invokes Data Detectors UI from high-level WebKit event dispatch code (where it
        doesn't really belong) down to WebCore's default click event handler for anchors, right next to
        the code that would ordinarily cause a navigation. This way, no matter how we get here, whether
        by synthetic click or real click, we'll invoke the Data Detectors UI.

        One alternative considered at length: we could actually let the navigation happen, and instead
        handle the switch in navigation policy code, but there are a few reasons that did not seem ideal:
        1) We'd need to plumb platform-specific data structures through a ton of FrameLoader code.
        2) Clients often block non-HTTP(S) navigations, so in order to keep the feature functional,
           we'd have to disregard the client's policy decision, defeating much of the purpose of making
           use of the navigation mechanism in the first place.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showDataDetectorsUIForPositionInformation):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showDataDetectorsUIForPositionInformation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::showDataDetectorsUIForElement):
        Plumb showDataDetectorsUIForPositionInformation from iOS WebKit's ChromeClient
        implementation all the way to WKContentView.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsUIForPositionInformation:]):
        (-[WKActionSheetAssistant contextMenuInteraction:configurationForMenuAtLocation:]):
        (-[WKActionSheetAssistant contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]): Deleted.
        Make it possible to push InteractionInformationAtPosition into WKActionSheetAssistant,
        instead of having it always pull a fresh one upon invocation, so that we can use the
        position information passed along with the showDataDetectorsUIForPositionInformation message.

        (-[WKActionSheetAssistant _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]):
        (-[WKActionSheetAssistant suggestedActionsForContextMenuWithPositionInformation:]):
        Fix an existing bug where Data Detectors context menus would show extra default actions,
        by moving our implementation of the -_contextMenuInteraction:overrideSuggestedActionsForConfiguration:
        delegate here, sharing it with WKContentViewInteraction.

        In a future patch, we should reconsider having three separate UIContextMenuInteractions.

        Also, remove the contextMenuPresentationLocationForActionSheetAssistant: delegate,
        since it will be wrong in the case of pushed-in position information, and instead
        use the position information's original hit test point.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showDataDetectorsUI]):
        (-[WKContentView _showDataDetectorsUIForPositionInformation:]):
        (-[WKContentView _actionForLongPressFromPositionInformation:]):
        (-[WKContentView _didNotHandleTapAsClick:]):
        (-[WKContentView dataDetectionContextForPositionInformation:]):
        (-[WKContentView dataDetectionContextForActionSheetAssistant:positionInformation:]):
        (-[WKContentView _showDataDetectorsSheet]): Deleted.
        (-[WKContentView currentPositionInformation]): Deleted.
        (-[WKContentView dataDetectionContextForActionSheetAssistant:]): Deleted.
        Instead of exposing an unnecessary -currentPositionInformation getter on WKActionSheetAssistant,
        provide it as an argument to the WKActionSheetAssistantDelegate methods that actually need it.

        (-[WKContentView contextMenuPresentationLocationForActionSheetAssistant:]): Deleted.
        (-[WKContentView _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]):
        Adopt WKActionSheetAssistant's suggestedActions mechanism so we can share code.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _showActionSheetForURL:atLocation:withAnnotationRect:]):
        (-[WKPDFView dataDetectionContextForActionSheetAssistant:positionInformation:]):
        (-[WKPDFView dataDetectionContextForActionSheetAssistant:]): Deleted.
        Adapt to some WKActionSheetAssistantDelegate changes.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTap):
        Remove the aforementioned short-circuiting paths for Data Detectors links.
2020-05-09  David Kilzer  <ddkilzer@apple.com>

        Attempt #2 to fix internal iOS build

        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        - Use ALLOW_DEPRECATED_IMPLEMENTATIONS_{BEGIN,END}.

2020-05-09  David Kilzer  <ddkilzer@apple.com>

        Attemp to fix internal iOS build

        * Platform/spi/ios/UIKitSPI.h:
        - Define @class UIHoverEvent using header if available, else
          fall back to local class definition.
        - Define methods separately from class definition.
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer setView:]):
        - Use new method if it is available.

2020-05-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r261389.
        https://bugs.webkit.org/show_bug.cgi?id=211678

        Introduced page loading regression. (Requested by perarne on
        #webkit).

        Reverted changeset:

        "[iOS] Update message filtering rules in the WebContent
        process' sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=211188
        https://trac.webkit.org/changeset/261389

2020-05-09  David Kilzer  <ddkilzer@apple.com>

        Adapt LocalCurrentGraphicsContext for iOS
        <https://webkit.org/b/211660>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::convertPlatformImageToBitmap):
        - Use LocalCurrentGraphicsContext for both iOS and Mac code
          paths.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        - Switch from PLATFORM(MAC) and PLATFORM(IOS_FAMIY) to
          USE(APPKIT) to separate platform code.
        (WebKit::convertDragImageToBitmap):
        (WebKit::convertImageToBitmap): Delete.
        (WebKit::convertCGImageToBitmap): Delete.
        - Combine Mac-specific convertImageToBitmap() and iOS-specific
          convertCGImageToBitmap() into a single method using DragImage
          type and special-casing one line of code.
        (WebKit::WebDragClient::startDrag):
        (WebKit::WebDragClient::didConcludeEditDrag):
        - Combine iOS and Mac methods into a singe method.

2020-05-09  David Quesada  <david_quesada@apple.com>

        Remove HAVE_UI_SCROLL_VIEW_INDICATOR_FLASHING_SPI
        https://bugs.webkit.org/show_bug.cgi?id=211662
        rdar://problem/63048713

        Reviewed by Darin Adler.

        Remove this platform conditional and unconditionally use -[UIScrolView _flashScrollIndicatorsForAxes:
        persistingPreviousFlashes:]. All supported platforms with UIScrollView have this SPI, and the conditional
        was excluding Mac Catalyst, making WKKeyboardScrollViewAnimator send a message to its scroll view that
        is no longer implemented.

        * Platform/spi/ios/UIKitSPI.h:
            Remove the declaration of the now unused -_flashScrollIndicatorsPersistingPreviousFlashes:.
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (axesForDelta):
        (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]):

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

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

        Reviewed by Darin Adler.

        * UIProcess/API/win: Removed.

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

        Regression(r210945): No attachment when sharing to mail
        https://bugs.webkit.org/show_bug.cgi?id=211651
        <rdar://problem/63040170>

        Reviewed by Tim Horton.

        When failing to determine foreground state, the code before r210945 was assuming
        'foreground', while the code in r210945 assume 'background'. This causes things
        to not render properly when we fail to determine the foreground state.

        This patch merely restores pre-r210945 behavior. I will investigate why we are
        unable to determinate the host application PID for the MailCompositionService.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::isApplicationForeground):

2020-05-08  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement web-share v2 for files
        https://bugs.webkit.org/show_bug.cgi?id=209265

        Reviewed by Andy Estes.

        Added support for passing file objects over IPC and
        sharing of files to share sheet.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Vector<RawFile>>::encode):
        (IPC::ArgumentCoder<Vector<RawFile>>::decode):
        (IPC::ArgumentCoder<ShareDataWithParsedURL>::encode):
        (IPC::ArgumentCoder<ShareDataWithParsedURL>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Cocoa/ShareableFileWrite.h: Added.
        * UIProcess/Cocoa/ShareableFileWrite.mm: Added.
        (+[WKShareableFileWrite getSharingDirectoryPath]):
        (+[WKShareableFileWrite getFileDirectoryForSharing]):
        (+[WKShareableFileWrite removeFileDirectoryForSharing]):
        (+[WKShareableFileWrite setQuarantineInformationForFilePath:]):
        (+[WKShareableFileWrite applyQuarantineSandboxAndDownloadFlagsToFileAtPath:]):
        (+[WKShareableFileWrite createFilename:]):
        (+[WKShareableFileWrite writeFileToShareableURL:data:]):
        * UIProcess/Cocoa/WKShareSheet.mm:
        (-[WKShareSheet presentWithParameters:inRect:completionHandler:]):
        (-[WKShareSheet _didCompleteWithSuccess:]):
        * WebKit.xcodeproj/project.pbxproj:

2020-05-08  Brent Fulgham  <bfulgham@apple.com>

        Revise sandbox to stop logging some commonly-used properties 
        https://bugs.webkit.org/show_bug.cgi?id=211636
        <rdar://problem/63014244>

        Reviewed by Per Arne Vollan.

        Further living on and testing has shown a handful of sysctl entries that are in regular use, and do not need
        to be logged or considered for removal. This patch has no change in behavior, just reduces logging.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

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

        Make WKWebViewConfiguration._alwaysRunsAtForegroundPriority an alias for _clientNavigationsRunAtForegroundPriority
        https://bugs.webkit.org/show_bug.cgi?id=211632

        Reviewed by Darin Adler.

        Make WKWebViewConfiguration._alwaysRunsAtForegroundPriority an alias for _clientNavigationsRunAtForegroundPriority.
        _alwaysRunsAtForegroundPriority is a frequent source of process assertion leaks that get blamed on WebKit. Clients
        are using this in order to be able to do loads in background views so _clientNavigationsRunAtForegroundPriority
        should suffice and is not leak prone since the process assertion is released after the navigation has completed.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::alwaysRunsAtForegroundPriority const): Deleted.
        (API::PageConfiguration::setAlwaysRunsAtForegroundPriority): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _alwaysRunsAtForegroundPriority]):
        (-[WKWebViewConfiguration _setAlwaysRunsAtForegroundPriority:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:

2020-05-08  Alex Christensen  <achristensen@webkit.org>

        Revert r260390
        https://bugs.webkit.org/show_bug.cgi?id=210759
        <rdar://problem/62608140>

        r260390 was intended to stop hitting some assertions in ~PendingFrameLoad, but it seems to have caused a regression.
        Reverting it and removing the invalid assertions.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::~PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::~SpeculativeLoadManager):

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

        [iOS] caret appears in the middle of a search field when field is focused on agoda.com
        https://bugs.webkit.org/show_bug.cgi?id=211591
        <rdar://problem/60605873>

        Reviewed by Antoine Quint.

        The main search field on the mobile version of this website begins offscreen, with a CSS transform that moves it
        to the far right; tapping the button element that (visually) has a search-field-like appearance on the front
        page programmatically focuses the real offscreen search field, and animates it onscreen by changing the CSS
        transform attribute to remove the x-axis translation.

        On iOS, the caret rect is computed and sent to the UI process via editor state updates; however, the editor
        state is computed immediately after focusing the input field. As such, the caret rect at this moment is computed
        in the middle of the animation, leaving it stuck in an unpredictable location.

        To fix this, add plumbing to call into the WebKit client layer when an animation has ended. On iOS, if the
        selection is visible (i.e. a ranged selection, or editable caret), then check to see whether the element that
        has finished animating contains either endpoint of the selection. If so, then schedule a followup editor state
        update to push updated selection information to the UI process.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::animationDidFinishForElement):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Add a new client hook for when animations end.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::animationDidFinishForElement):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Add logic to schedule a new editor state update if needed, after an animation ends that might affect either
        the start or end of the selection.

        (WebKit::WebPage::animationDidFinishForElement):

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

        REGRESSION (r260228): Linker warning about limitsNavigationsToAppBoundDomains property overriding instance methods from class
        <https://webkit.org/b/211393>

        Reviewed by Brent Fulgham.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration limitsNavigationsToAppBoundDomains]):
        (-[WKWebViewConfiguration setLimitsNavigationsToAppBoundDomains:]):
        - Move from WKPrivate category to main category to fix linker
          warnings.

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

        REGRESSION(r259209) Webview's pending URL is null after restoring session state
        https://bugs.webkit.org/show_bug.cgi?id=211626
        <rdar://problem/62992262>

        Reviewed by Alex Christensen.

        The issue was that WebPageProxy::goToBackForwardItem() would behave differently whether
        the page has a running process or not. In particular, when the page did not have a
        running process, goToBackForwardItem() would return early and call launchProcessWithItem()
        instead. Unlike goToBackForwardItem(), launchProcessWithItem() would fail to set the
        pending API request.

        To address the issue, I am getting rid of launchProcessWithItem() and merging its logic
        into goToBackForwardItem() instead. Both methods shared a lot of code anyway and having
        2 separate code paths that may diverge is error prone.

        Change is covered by new API test.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::launchProcessWithItem): Deleted.
        * UIProcess/WebPageProxy.h:

2020-05-08  Alex Christensen  <achristensen@webkit.org>

        WKWebView.title should be safe browsing warning's title during a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=211403

        Reviewed by Tim Horton.

        Add a new property to PageLoadState, which allows the title to be set underneath it.
        That way, once the safe browsing warning is closed, we can update the title to what it would've been,
        including any changes that happened while the warning was open.

        Covered by an API test.  I also manually verified this fixes rdar://problem/56201982

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges):
        (WebKit::PageLoadState::reset):
        (WebKit::PageLoadState::didCommitLoad):
        (WebKit::PageLoadState::title const):
        (WebKit::PageLoadState::setTitleFromSafeBrowsingWarning):
        * UIProcess/PageLoadState.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):

2020-05-08  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filtering rules in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211188

        Reviewed by Brent Fulgham.

        Based on telemetry and local testing, update the message filtering rules in the WebContent process' sandbox on iOS.
        Messages that have not been observed being in use should be denied.

        No new tests, covered by existing tests.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        Turn processDidBecomeUnresponsive logging into error logging
        https://bugs.webkit.org/show_bug.cgi?id=211629

        Reviewed by Youenn Fablet.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):

2020-05-08  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Close connections to Launch Services after revoking extension
        https://bugs.webkit.org/show_bug.cgi?id=211594

        Reviewed by Brent Fulgham.

        In <https://trac.webkit.org/changeset/258915/webkit>, connections to the Launch Services database mapping
        services were denied, by creating a temporary extension. After revoking this extension in the WebContent
        process, it is important to close any open connections to Launch Services initiated by the mapping.

        No new tests, covered by existing UTI/MIME type tests.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Handle remote audio capture IPC messages in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=211583

        Reviewed by Eric Carlson.

        We introduce RemoteCaptureSampleManager which is responsible to get remote capture sample IPC messages and treat them from a background thread.
        It is currently used to handle audio capture IPC messages.
        We move UserMediaCaptureManager::Source in its own file and rename it to RemoteRealtimeMediaSource.

        Covered by existing tests.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp: Added.
        (WebKit::RemoteCaptureSampleManager::RemoteCaptureSampleManager):
        (WebKit::RemoteCaptureSampleManager::~RemoteCaptureSampleManager):
        (WebKit::RemoteCaptureSampleManager::setConnection):
        (WebKit::RemoteCaptureSampleManager::addSource):
        (WebKit::RemoteCaptureSampleManager::removeSource):
        (WebKit::RemoteCaptureSampleManager::dispatchToThread):
        (WebKit::RemoteCaptureSampleManager::storageChanged):
        (WebKit::RemoteCaptureSampleManager::audioSamplesAvailable):
        * WebProcess/cocoa/RemoteCaptureSampleManager.h: Added.
        * WebProcess/cocoa/RemoteCaptureSampleManager.messages.in: Added.
        * WebProcess/cocoa/RemoteRealtimeMediaSource.cpp: Added.
        (WebKit::RemoteRealtimeMediaSource::RemoteRealtimeMediaSource):
        (WebKit::RemoteRealtimeMediaSource::~RemoteRealtimeMediaSource):
        (WebKit::RemoteRealtimeMediaSource::whenReady):
        (WebKit::RemoteRealtimeMediaSource::didFail):
        (WebKit::RemoteRealtimeMediaSource::setAsReady):
        (WebKit::RemoteRealtimeMediaSource::clone):
        (WebKit::RemoteRealtimeMediaSource::setCapabilities):
        (WebKit::RemoteRealtimeMediaSource::setSettings):
        (WebKit::RemoteRealtimeMediaSource::remoteAudioSamplesAvailable):
        (WebKit::RemoteRealtimeMediaSource::remoteVideoSampleAvailable):
        (WebKit::RemoteRealtimeMediaSource::connection):
        (WebKit::RemoteRealtimeMediaSource::startProducingData):
        (WebKit::RemoteRealtimeMediaSource::stopProducingData):
        (WebKit::RemoteRealtimeMediaSource::setShouldApplyRotation):
        (WebKit::RemoteRealtimeMediaSource::capabilities):
        (WebKit::RemoteRealtimeMediaSource::applyConstraints):
        (WebKit::RemoteRealtimeMediaSource::applyConstraintsSucceeded):
        (WebKit::RemoteRealtimeMediaSource::applyConstraintsFailed):
        (WebKit::RemoteRealtimeMediaSource::hasEnded):
        (WebKit::RemoteRealtimeMediaSource::stopBeingObserved):
        (WebKit::RemoteRealtimeMediaSource::requestToEnd):
        * WebProcess/cocoa/RemoteRealtimeMediaSource.h: Added.
        (WebKit::RemoteRealtimeMediaSource::identifier const):
        (WebKit::RemoteRealtimeMediaSource::settings const):
        (WebKit::RemoteRealtimeMediaSource::setShouldCaptureInGPUProcess):
        (WebKit::RemoteRealtimeMediaSource::shouldCaptureInGPUProcess const):
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::createCaptureSource):
        (WebKit::UserMediaCaptureManager::cloneSource):
        (WebKit::UserMediaCaptureManager::cloneVideoSource):
        (WebKit::UserMediaCaptureManager::AudioFactory::createAudioCaptureSource):
        (WebKit::UserMediaCaptureManager::AudioFactory::setShouldCaptureInGPUProcess):
        (WebKit::UserMediaCaptureManager::VideoFactory::createVideoCaptureSource):
        (WebKit::UserMediaCaptureManager::DisplayFactory::createDisplayCaptureSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:
        * WebProcess/cocoa/UserMediaCaptureManager.messages.in:

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

        Video capture does not get unmuted in case of tab switch on iOS
        https://bugs.webkit.org/show_bug.cgi?id=211509

        Reviewed by Eric Carlson.

        Remove no longer needed code.

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::VideoFactory::setActiveSource):
        * WebProcess/cocoa/UserMediaCaptureManager.h:

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

        Unreviewed. Fix GTK4 build after r261370

        * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
        (webkitScriptDialogIsUserHandled):

2020-05-08  Lauro Moura  <lmoura@igalia.com>

        [WPE][WebDriver] Implement user prompt support
        https://bugs.webkit.org/show_bug.cgi?id=207372

        Reviewed by Carlos Garcia Campos.

        Provide a default implementation for WebDriver dialog commands.
        This implementation will mimic the expected browser behavior of
        accepting/dismissing the dialogs, while not exposing any new API.

        * UIProcess/API/glib/WebKitScriptDialogPrivate.h:
        - Expose new private function to check whether the dialog is using a
        default implementation or is handled by the user.
        * UIProcess/API/glib/WebKitWebView.cpp:
        - Avoid default WebDriver behavior if the dialog is user-handled.
        (webkitWebViewSetCurrentScriptDialogUserInput):
        (webkitWebViewAcceptCurrentScriptDialog):
        (webkitWebViewDismissCurrentScriptDialog):
        * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
        (webkitScriptDialogIsUserHandled):
        - Return whether the dialog is user handled.
        * UIProcess/API/wpe/WebKitScriptDialogWPE.cpp:
        - Added basic behavior for the WebDriver dialog callbacks for WPE.
        (webkitScriptDialogAccept):
        (webkitScriptDialogDismiss):
        (webkitScriptDialogSetUserInput):
        (webkitScriptDialogIsUserHandled):

        * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
        (webkitWebViewScriptDialog):
        - Hold a dialog ref if the webview is controlled by automation and ends
        up calling the default "script-dialog" event handler.

2020-05-07  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Roll back newly created credentials if an error occurs
        https://bugs.webkit.org/show_bug.cgi?id=183530
        <rdar://problem/43357305>

        Reviewed by Brent Fulgham.

        We should clean up any newly created credentials if an error occurs before the relying party
        registers the identity. Otherwise we are left with a dangling credential.

        Covered by API tests.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserVerification):
        (WebKit::LocalAuthenticator::receiveException const):

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

        Unreviewed, reverting r261252.

        Reland r260684 now that a proper fix has landed in Reader

        Reverted changeset:

        "REGRESSION (r260684): Reader background is lost after
        multitasking"
        https://bugs.webkit.org/show_bug.cgi?id=211533
        https://trac.webkit.org/changeset/261252

2020-05-07  Megan Gardner  <megan_gardner@apple.com>

        Build Fix for MacCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=211601

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _removeContextMenuViewIfPossible]):

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

        Crash under WebKit::XPCServiceMain
        https://bugs.webkit.org/show_bug.cgi?id=211600
        <rdar://problem/62875458>

        Reviewed by Darin Adler.

        Made the following changes:
        - Crash under strcmp() could in theory happen if expectedBundleVersion.UTF8String was null, which could
          happen if expectedBundleVersion was null. I now use higher level String types for the versions, make
          sure they are not null and use String comparison to compare them.
        - Call CRASH() instead of __builtin_trap(), to guarantee that we crash with a SIGTRAP (see comment next
          to CRASH() macro).
        - Move CRASH() call to a crashDueWebKitFrameworkVersionMismatch() never inlined function to make it
          clear when it crashes due to a framework version mismatch and distinguish from proper crashes.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::crashDueWebKitFrameworkVersionMismatch):
        (WebKit::XPCServiceMain):

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

        Remove AudioMediaStreamTrackRenderer::muted
        https://bugs.webkit.org/show_bug.cgi?id=211289

        Reviewed by Eric Carlson.

        muted is unnecessary since we are using start/stop instead.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h:

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

        Remove unused USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
        https://bugs.webkit.org/show_bug.cgi?id=211582

        Reviewed by Fujii Hironori.

        After r261264 all ports implemented USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::invalidate):
        (WebKit::ThreadedCompositor::sceneUpdateFinished):
        (WebKit::ThreadedCompositor::displayRefreshMonitor):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDisplayRefreshMonitor const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::createDisplayRefreshMonitor):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::createDisplayRefreshMonitor):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        (WebKit::LayerTreeHost::deviceOrPageScaleFactorChanged):
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:

2020-05-07  Darin Adler  <darin@apple.com>

        Add some missing null checks for DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=211544
        rdar://62843516

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Add a null check before calling DocumentLoader::response.

2020-05-07  Darin Adler  <darin@apple.com>

        Remove USE(INSERTION_UNDO_GROUPING) checks in macOS platform code
        https://bugs.webkit.org/show_bug.cgi?id=211525

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebViewImpl.mm: Use NSTextInputContextSPI.h.
        (WebKit::WebViewImpl::validAttributesForMarkedText): Removed
        USE(INSERTION_UNDO_GROUPING) from the macOS-specific code here.
        (WebKit::WebViewImpl::insertText): Ditto.
        * UIProcess/PageClient.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::registerInsertionUndoGrouping): Deleted.
        This function is not needed at all on iOS.
        * UIProcess/mac/PageClientImplMac.h: Removed USE(INSERTION_UNDO_GROUPING).
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::registerInsertionUndoGrouping): Ditto.

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

        Drop dead platformPrepareToSuspend / platformProcessDidResume in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=211579

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformPrepareToSuspend): Deleted.
        (WebKit::NetworkProcess::platformProcessDidResume): Deleted.
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformPrepareToSuspend): Deleted.
        (WebKit::NetworkProcess::platformProcessDidResume): Deleted.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformPrepareToSuspend): Deleted.
        (WebKit::NetworkProcess::platformProcessDidResume): Deleted.

2020-05-07  Megan Gardner  <megan_gardner@apple.com>

        ContextMenu: entire webpage pops and disappears to generate preview of embedded image
        https://bugs.webkit.org/show_bug.cgi?id=211272
        <rdar://problem/62482013>

        Reviewed by Tim Horton.

        The ActionSheetAssistant is always around, so using the presence of one
        to determine if we need to remove the _contextMenuHintContainerView is incorrect
        and causes it to be around on the next invocation of the context menu, and 
        causing the failure of the creation of a new preview, which then will default to
        popping the whole page. We need to ask the ActionSheetAssistant if it is actively showing
        anything, and then correctly clean up the _contextMenuHintContainerView after the 
        end of the interactions for FileUploadMenu and ActionSheetAssistant are done with their
        interactions. 

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant removeContextMenuInteraction]):
        (-[WKActionSheetAssistant hasContextMenuInteraction]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView removeContextMenuViewIfPossibleForActionSheetAssistant:]):
        (-[WKContentView _canRemoveContextMenuView]):
        (-[WKContentView _removeContextMenuViewIfPossible]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel removeContextMenuInteraction]):

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

        Simplify several IPC sending call sites in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=211575

        Reviewed by Alex Christensen.

        Simplify several IPC sending call sites in the UIProcess by leveraging the fact
        that WebPageProxy subclasses IPC::MessageSender.

        * UIProcess/Cocoa/TextCheckingController.mm:
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        (WebKit::TextCheckingController::removeAnnotationRelativeToSelection):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::speakingErrorOccurred):
        (WebKit::WebPageProxy::boundaryEventOccurred):
        (WebKit::WebPageProxy::voicesDidChange):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
        * UIProcess/Inspector/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::setDiagnosticLoggingAvailable):
        * UIProcess/Inspector/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::setDiagnosticLoggingAvailable):
        * UIProcess/Inspector/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::remoteFileReplaceContentsCallback):
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::fileReplaceContentsCallback):
        * UIProcess/Inspector/mac/RemoteWebInspectorProxyMac.mm:
        (WebKit::RemoteWebInspectorProxy::platformSave):
        (WebKit::RemoteWebInspectorProxy::platformAppend):
        * UIProcess/Inspector/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit::WebInspectorProxy::platformAppend):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::createRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged):
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::collapseSelection):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::setAnimatingFullScreen):
        (WebKit::WebFullScreenManagerProxy::requestExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::saveScrollPosition):
        (WebKit::WebFullScreenManagerProxy::restoreScrollPosition):
        (WebKit::WebFullScreenManagerProxy::setFullscreenInsets):
        (WebKit::WebFullScreenManagerProxy::setFullscreenAutoHideDuration):
        (WebKit::WebFullScreenManagerProxy::setFullscreenControlsHidden):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getCenterForZoomGesture):
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::handleSmartMagnificationGesture):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::handleStylusSingleTapAtPoint):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::willStartUserTriggeredZooming):
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::cancelPotentialTap):
        (WebKit::WebPageProxy::tapHighlightAtPosition):
        (WebKit::WebPageProxy::handleTap):
        (WebKit::WebPageProxy::didRecognizeLongPress):
        (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint):
        (WebKit::WebPageProxy::inspectorNodeSearchMovedToPosition):
        (WebKit::WebPageProxy::inspectorNodeSearchEndedAtPosition):
        (WebKit::WebPageProxy::blurFocusedElement):
        (WebKit::WebPageProxy::setIsShowingInputViewForFocusedElement):
        (WebKit::WebPageProxy::setFocusedElementValue):
        (WebKit::WebPageProxy::setFocusedElementValueAsNumber):
        (WebKit::WebPageProxy::setFocusedElementSelectedIndex):
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        (WebKit::WebPageProxy::contentSizeCategoryDidChange):
        (WebKit::WebPageProxy::generateSyntheticEditingCommand):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::handleMagnificationGestureEvent):
        (WebKit::ViewGestureController::handleSmartMagnificationGesture):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::setMainFrameIsScrollable):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::fontAtSelection):
        (WebKit::WebPageProxy::stringSelectionForPasteboard):
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::replaceSelectionWithPasteboardData):
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        (WebKit::WebPageProxy::uppercaseWord):
        (WebKit::WebPageProxy::lowercaseWord):
        (WebKit::WebPageProxy::capitalizeWord):
        (WebKit::WebPageProxy::setSmartInsertDeleteEnabled):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):

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

        Unreviewed, reverting r260769.
        https://bugs.webkit.org/show_bug.cgi?id=211578

        Introduced regressions related to sharing (Requested by
        perarne on #webkit).

        Reverted changeset:

        "[Cocoa] After r258891, r255119 can be reverted"
        https://bugs.webkit.org/show_bug.cgi?id=211083
        https://trac.webkit.org/changeset/260769

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

        [iOS] AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension while processing the IPC
        https://bugs.webkit.org/show_bug.cgi?id=209928

        Reviewed by Youenn Fablet.

        AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension
        on iOS while processing the IPC. If the process is suspended either before or during
        the IPC, this could result in hangs. This is a speculative fix for the flaky timeouts
        we see on many tests on iOS only. We know that missing activities with
        sendWithAsyncReply has caused test timeouts in the past (Bug 211421).

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::setUseITPDatabase):
        (WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::resetParametersToDefaultValues):
        (WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting):
        (WebKit::NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics):
        (WebKit::NetworkProcessProxy::setShouldDowngradeReferrerForTesting):
        (WebKit::NetworkProcessProxy::setThirdPartyCookieBlockingMode):
        (WebKit::NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting):
        (WebKit::NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting):
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::Activity::Activity):
        (WebKit::ProcessThrottler::Activity::isQuietActivity const):
        (WebKit::ProcessThrottler::Activity::invalidate):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/WebBackForwardCacheEntry.cpp:
        (WebKit::WebBackForwardCacheEntry::~WebBackForwardCacheEntry):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookie):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::setCookies):
        (WebKit::WebCookieManagerProxy::getAllCookies):
        (WebKit::WebCookieManagerProxy::getCookies):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getProcessDisplayName):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setThirdPartyCookieBlockingMode):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::sendPrepareToSuspend):
        (WebKit::WebProcessProxy::activePagesDomainsForTesting):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::insertTextPlaceholder):
        (WebKit::WebPageProxy::removeTextPlaceholder):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::requestEvasionRectsAboveSelection):
        (WebKit::WebPageProxy::updateSelectionWithDelta):
        (WebKit::WebPageProxy::requestDocumentEditingContext):
        (WebKit::WebPageProxy::insertDroppedImagePlaceholders):

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

        [GTK] REGRESSION(r260996): Pressing <Tab> in an HTTP authentication dialog makes the dialog lose focus
        https://bugs.webkit.org/show_bug.cgi?id=211555

        Reviewed by Philippe Normand.

        Bring back webkitWebViewBaseFocus to GTK3. I made it GTK4 only by mistake in r260996.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseFocus):
        (webkit_web_view_base_class_init):

2020-05-07  Philippe Normand  <pnormand@igalia.com>

        [GTK] Build warning fixes

        Rubber-stamped by Žan Doberšek.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseGrabFocus):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):

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

        Sending WebRTC network packets should not go through the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211291

        Reviewed by Eric Carlson.

        Following on receiving RTC packets from a background thread, we also send RTC packets from a background thread.
        Creation of the sockets also happens in a background thread.
        LibWebRTCNetwork is getting the connection whenever a new connection to network process is created.
        It will then hop to the RTC network thread to set the IPC connection to the libwebrtc socket factory.

        At creation of the socket, we get the IPC connection to the network process and keep a ref in the RTC socket.
        In case network process crashed and the IPC connection of the RTC network is null, we hop to the main thread to create a new IPC connection.
        This will fail the creation of the socket (as well as new ones as well) as long as the IPC connection to network process is not valid again.

        Covered by existing tests.

        * WebProcess/Network/webrtc/LibWebRTCNetwork.cpp:
        (WebKit::LibWebRTCNetwork::setAsActive):
        (WebKit::LibWebRTCNetwork::setConnection):
        (WebKit::LibWebRTCNetwork::dispatchToThread):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::connection):
        (WebKit::LibWebRTCNetwork::isActive const):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::startedNetworkThread):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::SendTo):
        (WebKit::LibWebRTCSocket::Close):
        (WebKit::LibWebRTCSocket::SetOption):
        (WebKit::LibWebRTCSocket::suspend):
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::setConnection):
        (WebKit::LibWebRTCSocketFactory::connection):
        (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        (WebKit::LibWebRTCSocketFactory::createNewConnectionSocket):
        (WebKit::LibWebRTCSocketFactory::addSocket):
        (WebKit::LibWebRTCSocketFactory::removeSocket):
        (WebKit::LibWebRTCSocketFactory::forSocketInGroup):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

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

        [GTK4] Stop using the GtkWidget.destroy vfunc
        https://bugs.webkit.org/show_bug.cgi?id=211553

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDestroy): Removed.
        (webkitWebViewBaseDispose): Bring in the code from the removed function, adapt
        to use g_clear_pointer() to destroy the nested dialog.
        (webkit_web_view_base_class_init): Do not set the GtkWidget.destroy vfunc.

2020-05-07  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=211517

        Reviewed by Adrian Perez de Castro.

        * PlatformWPE.cmake: Fix WPEQt build.


2020-05-06  Alex Christensen  <achristensen@webkit.org>

        Fix webkitpy tests after r261254
        https://bugs.webkit.org/show_bug.cgi?id=211112

        test.messages.in was accidentally deleted instead of moved, and messages_unittest.py needed to be told of the new locations of results.
        The rest is just running the generator to update results.

        * Scripts/MessageNames.cpp:
        (IPC::description):
        (IPC::receiverName):
        (IPC::isValidMessageName):
        * Scripts/MessageNames.h:
        * Scripts/testMessageReceiver.cpp:
        (Messages::WebPage::GetPluginProcessConnection::send):
        (Messages::WebPage::TestMultipleAttributes::send):
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * Scripts/testMessages.h:
        (Messages::WebPage::messageReceiverName):
        (Messages::WebPage::LoadURL::name):
        (Messages::WebPage::LoadURL::LoadURL):
        (Messages::WebPage::LoadURL::arguments const):
        (Messages::WebPage::LoadSomething::name):
        (Messages::WebPage::LoadSomething::LoadSomething):
        (Messages::WebPage::LoadSomething::arguments const):
        (Messages::WebPage::TouchEvent::name):
        (Messages::WebPage::TouchEvent::TouchEvent):
        (Messages::WebPage::TouchEvent::arguments const):
        (Messages::WebPage::AddEvent::name):
        (Messages::WebPage::AddEvent::AddEvent):
        (Messages::WebPage::AddEvent::arguments const):
        (Messages::WebPage::LoadSomethingElse::name):
        (Messages::WebPage::LoadSomethingElse::LoadSomethingElse):
        (Messages::WebPage::LoadSomethingElse::arguments const):
        (Messages::WebPage::DidReceivePolicyDecision::name):
        (Messages::WebPage::DidReceivePolicyDecision::DidReceivePolicyDecision):
        (Messages::WebPage::DidReceivePolicyDecision::arguments const):
        (Messages::WebPage::Close::name):
        (Messages::WebPage::Close::arguments const):
        (Messages::WebPage::PreferencesDidChange::name):
        (Messages::WebPage::PreferencesDidChange::PreferencesDidChange):
        (Messages::WebPage::PreferencesDidChange::arguments const):
        (Messages::WebPage::SendDoubleAndFloat::name):
        (Messages::WebPage::SendDoubleAndFloat::SendDoubleAndFloat):
        (Messages::WebPage::SendDoubleAndFloat::arguments const):
        (Messages::WebPage::SendInts::name):
        (Messages::WebPage::SendInts::SendInts):
        (Messages::WebPage::SendInts::arguments const):
        (Messages::WebPage::CreatePlugin::name):
        (Messages::WebPage::CreatePlugin::CreatePlugin):
        (Messages::WebPage::CreatePlugin::arguments const):
        (Messages::WebPage::RunJavaScriptAlert::name):
        (Messages::WebPage::RunJavaScriptAlert::RunJavaScriptAlert):
        (Messages::WebPage::RunJavaScriptAlert::arguments const):
        (Messages::WebPage::GetPlugins::name):
        (Messages::WebPage::GetPlugins::GetPlugins):
        (Messages::WebPage::GetPlugins::arguments const):
        (Messages::WebPage::GetPluginProcessConnection::name):
        (Messages::WebPage::GetPluginProcessConnection::GetPluginProcessConnection):
        (Messages::WebPage::GetPluginProcessConnection::arguments const):
        (Messages::WebPage::TestMultipleAttributes::name):
        (Messages::WebPage::TestMultipleAttributes::arguments const):
        (Messages::WebPage::TestParameterAttributes::name):
        (Messages::WebPage::TestParameterAttributes::TestParameterAttributes):
        (Messages::WebPage::TestParameterAttributes::arguments const):
        (Messages::WebPage::TemplateTest::name):
        (Messages::WebPage::TemplateTest::TemplateTest):
        (Messages::WebPage::TemplateTest::arguments const):
        (Messages::WebPage::SetVideoLayerID::name):
        (Messages::WebPage::SetVideoLayerID::SetVideoLayerID):
        (Messages::WebPage::SetVideoLayerID::arguments const):
        (Messages::WebPage::DidCreateWebProcessConnection::name):
        (Messages::WebPage::DidCreateWebProcessConnection::DidCreateWebProcessConnection):
        (Messages::WebPage::DidCreateWebProcessConnection::arguments const):
        (Messages::WebPage::InterpretKeyEvent::name):
        (Messages::WebPage::InterpretKeyEvent::InterpretKeyEvent):
        (Messages::WebPage::InterpretKeyEvent::arguments const):
        (Messages::WebPage::DeprecatedOperation::name):
        (Messages::WebPage::DeprecatedOperation::DeprecatedOperation):
        (Messages::WebPage::DeprecatedOperation::arguments const):
        (Messages::WebPage::ExperimentalOperation::name):
        (Messages::WebPage::ExperimentalOperation::ExperimentalOperation):
        (Messages::WebPage::ExperimentalOperation::arguments const):
        (Messages::None::messageReceiverName): Deleted.
        * Scripts/testMessagesReplies.h:
        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/test.messages.in: Added.

2020-05-06  Megan Gardner  <megan_gardner@apple.com>

        Context Menus presented from the wrong location when presented from sub-frames
        https://bugs.webkit.org/show_bug.cgi?id=211537
        <rdar://problem/60390846>

        Reviewed by Tim Horton.

        The calculation for bounds for selection Information did not take frames into account,
        so if a frame was used, the location would not be correct in the context of the whole
        page, so the presentation location ended up being way off.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel showDocumentPickerMenu]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::boundsPositionInformation):
        (WebKit::selectionPositionInformation):

2020-05-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260689.
        https://bugs.webkit.org/show_bug.cgi?id=211542

        "Caused regressions deleting text and filling password fields"
        (Requested by ddkilzer on #webkit).

        Reverted changeset:

        "WebPasteboardProxy::getPasteboardStringsForType() and
        WebPasteboardProxy::readURLFromPasteboard() should check
        return value of SharedMemory::createHandle()"
        https://bugs.webkit.org/show_bug.cgi?id=211002
        https://trac.webkit.org/changeset/260689

2020-05-06  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] Shutterstock search bar is not activated on the first tap
        https://bugs.webkit.org/show_bug.cgi?id=211529
        <rdar://problem/58843932>

        Reviewed by Simon Fraser.

        Shutterstock has a “initial click” action which converts some “actionable” elements (<a>) to some other “actionable” elements (<button>).
        If this initial click also happens to be on an element that triggers content observation (input), we see those changes as actionable content and not proceed with the click event (stay at hover).
        Any subsequent click works as expected.
        It’s very difficult to eliminate such false positives since all we see is that some "actionable" content is going away while some "actionable" content is being created.
        This quirk ensures that the first tap on the page does not trigger content observation. (It also means that any hover menu gets submitted on the first tap, but apparently
        the Shutterstock top menu bar works fine with click events.)

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):

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

        Use CocoaColor in more places instead of platform defines
        https://bugs.webkit.org/show_bug.cgi?id=211527

        Reviewed by Darin Adler and Tim Horton.

        Use CocoaColor (added in r261247) in more places, and also introduce `CocoaFont.h` and use it to simplify some
        existing code that uses platform ifdefs for UIFont, NSFont, UIFontDescriptor and NSFontDescriptor.

        No change in behavior.

        * Platform/cocoa/CocoaColor.h:
        * Platform/cocoa/CocoaFont.h: Copied from Source/WebKit/Platform/cocoa/CocoaColor.h.
        * Platform/cocoa/CocoaImage.h:

        Change `@class`es to `OBJC_CLASS`, so that this header can be safely imported in C++ code.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::typeFromObject):
        (IPC::isSerializableValue):
        (IPC::encodeFontInternal):
        (IPC::encodeObject):
        (IPC::platformColorClass): Deleted.
        (IPC::platformFontClass): Deleted.
        * Shared/Cocoa/CoreTextHelpers.h:
        * Shared/Cocoa/CoreTextHelpers.mm:
        (WebKit::fontWithAttributes):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontOfSize):
        (colorForItem):
        (-[WKSafeBrowsingBox setSafeBrowsingBackgroundColor:]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateFontManagerIfNeeded):
        * WebKit.xcodeproj/project.pbxproj:

2020-05-06  Alex Christensen  <achristensen@webkit.org>

        Reduce IPC overhead for message receiver name and message name to 2 bytes
        https://bugs.webkit.org/show_bug.cgi?id=211112

        Reviewed by Chris Dumez.

        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didReceiveInvalidMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAddMessageReceiver): Deleted.
        (WebKit::NetworkConnectionToWebProcess::paymentCoordinatorRemoveMessageReceiver): Deleted.
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::WaitForMessageState::WaitForMessageState):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::addThreadMessageReceiver):
        (IPC::Connection::removeThreadMessageReceiver):
        (IPC::Connection::dispatchThreadMessageReceiverMessage):
        (IPC::Connection::createSyncMessageEncoder):
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchMessageToWorkQueueReceiver):
        (IPC::Connection::dispatchMessageToThreadReceiver):
        (IPC::Connection::dispatchIncomingMessages):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendWithAsyncReply):
        (IPC::Connection::sendSync):
        (IPC::Connection::waitForAndDispatchImmediately):
        * Platform/IPC/Decoder.cpp:
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::messageReceiverName const):
        (IPC::Decoder::messageName const):
        (IPC::Decoder::decode):
        (IPC::Decoder::operator>>):
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::Encoder):
        (IPC::Encoder::encodeHeader):
        * Platform/IPC/Encoder.h:
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageAsync):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::addMessageReceiver):
        (IPC::MessageReceiverMap::removeMessageReceiver):
        (IPC::MessageReceiverMap::dispatchMessage):
        (IPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/IPC/MessageReceiverMap.h:
        * Platform/IPC/MessageSender.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::open):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendOutgoingMessage):
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::create):
        (IPC::MachMessage::MachMessage):
        * Platform/IPC/cocoa/MachMessage.h:
        (IPC::MachMessage::messageReceiverName const):
        (IPC::MachMessage::messageName const):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveInvalidMessage):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/Makefile:
        * Scripts/generate-message-receiver.py:
        (main):
        * Scripts/webkit/LegacyMessages-expected.h: Removed.
        * Scripts/webkit/LegacyMessagesReplies-expected.h: Removed.
        * Scripts/webkit/MessageNames.cpp: Added.
        (IPC::description):
        * Scripts/webkit/MessageNames.h: Added.
        (IPC::receiverName):
        (WTF::isValidEnum):
        * Scripts/webkit/MessageReceiver-expected.cpp: Removed.
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp: Removed.
        * Scripts/webkit/Messages-expected.h: Removed.
        * Scripts/webkit/MessagesReplies-expected.h: Removed.
        * Scripts/webkit/MessagesRepliesSuperclassReplies-expected.h: Removed.
        * Scripts/webkit/MessagesSuperclass-expected.h: Removed.
        * Scripts/webkit/messages.py:
        * Scripts/webkit/test-legacy-messages.in: Removed.
        * Scripts/webkit/test-legacy.messages.in: Copied from Source/WebKit/Scripts/webkit/test-legacy-messages.in.
        * Scripts/webkit/test-legacyMessageReceiver.cpp: Added.
        (Messages::WebPage::GetPluginProcessConnection::send):
        (Messages::WebPage::TestMultipleAttributes::send):
        (WebKit::WebPage::didReceiveWebPageMessage):
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit/test-legacyMessages.h: Added.
        (Messages::WebPage::messageReceiverName):
        (Messages::WebPage::LoadURL::name):
        (Messages::WebPage::LoadURL::LoadURL):
        (Messages::WebPage::LoadURL::arguments const):
        (Messages::WebPage::LoadSomething::name):
        (Messages::WebPage::LoadSomething::LoadSomething):
        (Messages::WebPage::LoadSomething::arguments const):
        (Messages::WebPage::TouchEvent::name):
        (Messages::WebPage::TouchEvent::TouchEvent):
        (Messages::WebPage::TouchEvent::arguments const):
        (Messages::WebPage::AddEvent::name):
        (Messages::WebPage::AddEvent::AddEvent):
        (Messages::WebPage::AddEvent::arguments const):
        (Messages::WebPage::LoadSomethingElse::name):
        (Messages::WebPage::LoadSomethingElse::LoadSomethingElse):
        (Messages::WebPage::LoadSomethingElse::arguments const):
        (Messages::WebPage::DidReceivePolicyDecision::name):
        (Messages::WebPage::DidReceivePolicyDecision::DidReceivePolicyDecision):
        (Messages::WebPage::DidReceivePolicyDecision::arguments const):
        (Messages::WebPage::Close::name):
        (Messages::WebPage::Close::arguments const):
        (Messages::WebPage::PreferencesDidChange::name):
        (Messages::WebPage::PreferencesDidChange::PreferencesDidChange):
        (Messages::WebPage::PreferencesDidChange::arguments const):
        (Messages::WebPage::SendDoubleAndFloat::name):
        (Messages::WebPage::SendDoubleAndFloat::SendDoubleAndFloat):
        (Messages::WebPage::SendDoubleAndFloat::arguments const):
        (Messages::WebPage::SendInts::name):
        (Messages::WebPage::SendInts::SendInts):
        (Messages::WebPage::SendInts::arguments const):
        (Messages::WebPage::CreatePlugin::name):
        (Messages::WebPage::CreatePlugin::CreatePlugin):
        (Messages::WebPage::CreatePlugin::arguments const):
        (Messages::WebPage::RunJavaScriptAlert::name):
        (Messages::WebPage::RunJavaScriptAlert::RunJavaScriptAlert):
        (Messages::WebPage::RunJavaScriptAlert::arguments const):
        (Messages::WebPage::GetPlugins::name):
        (Messages::WebPage::GetPlugins::GetPlugins):
        (Messages::WebPage::GetPlugins::arguments const):
        (Messages::WebPage::GetPluginProcessConnection::name):
        (Messages::WebPage::GetPluginProcessConnection::GetPluginProcessConnection):
        (Messages::WebPage::GetPluginProcessConnection::arguments const):
        (Messages::WebPage::TestMultipleAttributes::name):
        (Messages::WebPage::TestMultipleAttributes::arguments const):
        (Messages::WebPage::TestParameterAttributes::name):
        (Messages::WebPage::TestParameterAttributes::TestParameterAttributes):
        (Messages::WebPage::TestParameterAttributes::arguments const):
        (Messages::WebPage::TemplateTest::name):
        (Messages::WebPage::TemplateTest::TemplateTest):
        (Messages::WebPage::TemplateTest::arguments const):
        (Messages::WebPage::SetVideoLayerID::name):
        (Messages::WebPage::SetVideoLayerID::SetVideoLayerID):
        (Messages::WebPage::SetVideoLayerID::arguments const):
        (Messages::WebPage::DidCreateWebProcessConnection::name):
        (Messages::WebPage::DidCreateWebProcessConnection::DidCreateWebProcessConnection):
        (Messages::WebPage::DidCreateWebProcessConnection::arguments const):
        (Messages::WebPage::InterpretKeyEvent::name):
        (Messages::WebPage::InterpretKeyEvent::InterpretKeyEvent):
        (Messages::WebPage::InterpretKeyEvent::arguments const):
        (Messages::WebPage::DeprecatedOperation::name):
        (Messages::WebPage::DeprecatedOperation::DeprecatedOperation):
        (Messages::WebPage::DeprecatedOperation::arguments const):
        (Messages::WebPage::ExperimentalOperation::name):
        (Messages::WebPage::ExperimentalOperation::ExperimentalOperation):
        (Messages::WebPage::ExperimentalOperation::arguments const):
        * Scripts/webkit/test-legacyMessagesReplies.h: Added.
        * Scripts/webkit/test-messages.in: Removed.
        * Scripts/webkit/test-superclass-messages.in: Removed.
        * Scripts/webkit/test-superclass.messages.in: Copied from Source/WebKit/Scripts/webkit/test-superclass-messages.in.
        * Scripts/webkit/test-superclassMessageReceiver.cpp: Added.
        (Messages::WebPage::TestAsyncMessage::callReply):
        (Messages::WebPage::TestAsyncMessage::cancelReply):
        (Messages::WebPage::TestAsyncMessage::send):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::callReply):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::cancelReply):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::send):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::callReply):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::cancelReply):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::send):
        (Messages::WebPage::TestSyncMessage::send):
        (Messages::WebPage::TestSynchronousMessage::send):
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * Scripts/webkit/test-superclassMessages.h: Added.
        (Messages::WebPage::messageReceiverName):
        (Messages::WebPage::LoadURL::name):
        (Messages::WebPage::LoadURL::LoadURL):
        (Messages::WebPage::LoadURL::arguments const):
        (Messages::WebPage::TestAsyncMessage::name):
        (Messages::WebPage::TestAsyncMessage::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessage::TestAsyncMessage):
        (Messages::WebPage::TestAsyncMessage::arguments const):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::name):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessageWithNoArguments::arguments const):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::name):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::asyncMessageReplyName):
        (Messages::WebPage::TestAsyncMessageWithMultipleArguments::arguments const):
        (Messages::WebPage::TestSyncMessage::name):
        (Messages::WebPage::TestSyncMessage::TestSyncMessage):
        (Messages::WebPage::TestSyncMessage::arguments const):
        (Messages::WebPage::TestSynchronousMessage::name):
        (Messages::WebPage::TestSynchronousMessage::TestSynchronousMessage):
        (Messages::WebPage::TestSynchronousMessage::arguments const):
        * Scripts/webkit/test-superclassMessagesReplies.h: Added.
        * Scripts/webkit/test.messages.in: Added.
        * Scripts/webkit/testMessageReceiver.cpp: Added.
        * Scripts/webkit/testMessages.h: Added.
        (Messages::None::messageReceiverName):
        * Scripts/webkit/testMessagesReplies.h: Added.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy):
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy):
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::addMessageReceiver):
        (WebKit::AuxiliaryProcess::removeMessageReceiver):
        (WebKit::AuxiliaryProcess::didReceiveInvalidMessage):
        * Shared/AuxiliaryProcess.h:
        (WebKit::AuxiliaryProcess::addMessageReceiver):
        (WebKit::AuxiliaryProcess::removeMessageReceiver):
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::didReceiveInvalidMessage):
        * SourcesCocoa.txt:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::addMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::removeMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::logInvalidMessage):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::addMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::removeMessageReceiver):
        (WebKit::AuxiliaryProcessProxy::send):
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didReceiveInvalidMessage):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::messageNamesToIgnoreWhileSuspended):
        (WebKit::SuspendedPageProxy::didReceiveMessage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveInvalidMessage):
        (WebKit::WebProcessPool::addMessageReceiver):
        (WebKit::WebProcessPool::removeMessageReceiver):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldSendPendingMessage):
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didReceiveInvalidMessage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/Inspector/WebInspector.h:
        * WebProcess/Inspector/WebInspectorUI.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateRendering):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

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

        REGRESSION (r260684): Reader background is lost after multitasking
        https://bugs.webkit.org/show_bug.cgi?id=211533
        <rdar://problem/62941837>

        Unreviewed, revert r260684 due to regression.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setShouldFireResizeEvents):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView _willBeginSnapshotSequence]):
        (-[WKApplicationStateTrackingView _didCompleteSnapshotSequence]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setShouldFireResizeEvents):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-05-06  Kate Cheney  <katherine_cheney@apple.com>

        ResourceLoadStatistics data summary call should create a web process pool if one doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=211520
        <rdar://problem/59869619>

        Reviewed by Chris Dumez.

        Ensures that a process pool and network process exist when requesting
        resource load statistics data.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):

2020-05-06  Keith Rollin  <krollin@apple.com>

        Better surfacing of the presenting parent PID in the Network process
        https://bugs.webkit.org/show_bug.cgi?id=211495
        <rdar://problem/62917205>

        Reviewed by Youenn Fablet.

        In Bug 205295, NetworkResourceLoader logging was improved, with one of
        the changes being that the PID of parent process that invoked the
        Network process was logged at the start of
        NetworkResourceLoader::start(). However, there was an execution path
        that skipped calling start()
        (NetworkConnectionToWebProcess::scheduleResourceLoad ->
        NetworkResourceLoader::startWithServiceWorker ->
        serviceWorkerDidNotHandle -> restartNetworkLoad -> startNetworkLoad),
        and so the the logging would not show the parent PID. This logging is
        needed for diagnostic purposes, so tweak the logging a little bit more
        in order to ensure we emit it. In this change, logging is added to
        various loading-related NetworkConnectionToWebProcess entry points
        (not just scheduleResourceLoad) in order to (a) ensure we emit the
        logging we want and (b) to give a clearer picture of what operations
        are being invoked in the Network process.

        No new tests -- no new or changed functionality.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::hasUploadStateChanged):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::serverToContextConnectionNoLongerNeeded):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

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

        Cut and paste from Google Doc to Notes in several (non-Latin) languages doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=211498
        <rdar://problem/56675345>

        Reviewed by Darin Adler.

        Add a new header to allow Cocoa code to reason about UIColors and NSColors on iOS and macOS (respectively)
        without requiring platform ifdefs. A followup patch will adopt this in several places in WebKit, where we
        currently need ifdefs for iOS and macOS.

        * Platform/cocoa/CocoaColor.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2020-05-06  Antoine Quint  <graouts@apple.com>

        pointermove event sometimes has incorrect pointerType of 'mouse' on touch interactions
        https://bugs.webkit.org/show_bug.cgi?id=210716
        <rdar://problem/62084817>

        Reviewed by Darin Adler.

        Set the SyntheticClickType to OneFingerTap when creating a synthetic "mousemove" event for a synthetic "click" event as part of a tap.
        On top of being more indicative of the actual action that triggered the synthetic event, it also has the added quality that it will
        not yield a "pointermove" event.

        Test: pointerevents/ios/click-no-pointermove.html

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::dispatchSyntheticMouseMove):

2020-05-06  John Wilander  <wilander@apple.com>

        Exempt app-bound domains from ITP's website data deletion and third-party cookie blocking between themselves
        https://bugs.webkit.org/show_bug.cgi?id=210674
        <rdar://problem/61950767>

        Reviewed by Chris Dumez.

        This change forwards information about app-bound domains to ITP and web
        processes so that they can be exempt from website data deletion and
        third-party cookie blocking between themselves.

        App-bound domains are configured statically and apply to all website
        data stores. Therefore the setting needs to be forwarded to all
        website data stores and ITP functionality in all network and web
        content processes. This is done through the new static function
        WebsiteDataStore::setAppBoundDomainsForITPIfInitialized().

        Since app-bound domains are loaded lazily from disk and on a background
        thread, this patch forwards them in ResourceLoadStatisticsParameters if
        they've already been loaded. Then every time app-bound domains are
        updated, they are forwarded to ITP. This ensures that ITP will have them
        as soon as possible.

        Setting app-bound domains for the purposes of ITP automatically switches
        ITP's cookie blocking policy to the new
        WebCore::ThirdPartyCookieBlockingMode::AllExceptBetweenAppBoundDomains.
        This is done in WebResourceLoadStatisticsStore::setAppBoundDomains().

        The C API changes are for test purposes.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::setAppBoundDomains):
        (WebKit::ResourceLoadStatisticsStore::resetParametersToDefaultValues):
        (WebKit::ResourceLoadStatisticsStore::shouldExemptFromWebsiteDataDeletion const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::standaloneApplicationDomain const): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setAppBoundDomains):
        (WebKit::WebResourceLoadStatisticsStore::resetParametersToDefaultValues):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setAppBoundDomainsForResourceLoadStatistics):
        (WebKit::NetworkProcess::setThirdPartyCookieBlockingMode):
        (WebKit::NetworkProcess::setShouldBlockThirdPartyCookiesForTesting): Deleted.
            Renamed setThirdPartyCookieBlockingMode.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * Shared/ResourceLoadStatisticsParameters.h:
        (WebKit::ResourceLoadStatisticsParameters::encode const):
        (WebKit::ResourceLoadStatisticsParameters::decode):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetAppBoundDomainsForTesting):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics):
        (WebKit::NetworkProcessProxy::setThirdPartyCookieBlockingMode):
        (WebKit::NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting): Deleted.
            Renamed setThirdPartyCookieBlockingMode.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setThirdPartyCookieBlockingMode):
        (WebKit::WebProcessProxy::setShouldBlockThirdPartyCookiesForTesting): Deleted.
            Renamed setThirdPartyCookieBlockingMode.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::initializeAppBoundDomains):
        (WebKit::WebsiteDataStore::ensureAppBoundDomains const):
        (WebKit::WebsiteDataStore::appBoundDomainsIfInitialized):
            This function allows fetching of app-bound domains without triggering
            the lazy loading. This is just to allow speculative configuration of ITP
            right when it's created — if any app-bound domains are already configured,
            forward them to ITP via ResourceLoadStatisticsParameters.
        (WebKit::WebsiteDataStore::setAppBoundDomainsForTesting):
            This function is Cocoa-specific and only accepts localhost and 127.0.0.1
            to be configured as app-bound domains.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        (WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode):
        (WebKit::WebsiteDataStore::parameters):
        (WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized):
        (WebKit::WebsiteDataStore::setAppBoundDomainsForITP):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setThirdPartyCookieBlockingMode):
        (WebKit::WebProcess::setShouldBlockThirdPartyCookiesForTesting): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2020-05-06  Daniel Bates  <dabates@apple.com>

        [iOS] ASSERTION FAILED: !(_keyboardFlags & WebEventKeyboardInputModifierFlagsChanged) in -[WebEvent charactersIgnoringModifiers] when pressing modifier on PDF
        https://bugs.webkit.org/show_bug.cgi?id=211472

        Reviewed by Darin Adler.

        Do not ask for event character string for a flags changed event: they don't have one.

        Test: fast/events/ios/pdf-modifer-key-down-crash.html

        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):

2020-05-06  Brent Fulgham  <bfulgham@apple.com>

        [MacCatalyst] Processes should check for network entitlement as we do for macOS apps
        https://bugs.webkit.org/show_bug.cgi?id=211474
        <rdar://problem/61182060>

        Reviewed by Alexey Proskuryakov.

        We should make the same entitlement checks in MacCatalyst as we do for macOS.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::checkEntitlements):

2020-05-06  Darin Adler  <darin@apple.com>

        Eliminate checks of USE(DICTATION_ALTERNATIVES) in Cocoa-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211460

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/PageClientImplCocoa.h: Remove USE(DICTATION_ALTERNATIVES).
        Also remove unnecessary use of RetainPtr.
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::PageClientImplCocoa): Ditto.
        (WebKit::PageClientImplCocoa::pageClosed): Ditto.
        (WebKit::PageClientImplCocoa::dictationAlternatives): Ditto.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync): Ditto.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::validAttributesForMarkedText): Ditto.
        (WebKit::WebViewImpl::insertText): Ditto.
        * UIProcess/PageClient.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.mm: Ditto.
        * UIProcess/ios/WKContentViewInteraction.mm: Ditto.
        * UIProcess/mac/PageClientImplMac.h: Ditto.
        * UIProcess/mac/PageClientImplMac.mm: Ditto.
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp: Ditto.

2020-05-06  Lauro Moura  <lmoura@igalia.com>

        [GTK] Cleanup KeyBindingTranslator on WebView disposal
        https://bugs.webkit.org/show_bug.cgi?id=211465

        Reviewed by Carlos Garcia Campos.

        Fixes assertion in debug mode when a test failed and the widget
        followed a destruction pattern where KeyBindingTranslator would be
        destroyed before the container widget is cleaned up.

        Also renamed the method from 'destroyed' to 'invalidate' to try to
        better convey the action being performed on the KeyBindingTranslator.

        Covered by existing tests.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerRemove): Update method name.
        (webkitWebViewBaseDispose): Cleanup keyBindingTranslator when
        disposing this widget.
        * UIProcess/gtk/KeyBindingTranslator.h:
        (WebKit::KeyBindingTranslator::invalidate): Renamed from destroyed.
        (WebKit::KeyBindingTranslator::destroyed): Deleted.

2020-05-06  Darin Adler  <darin@apple.com>

        Reduce HAVE(HOSTED_CORE_ANIMATION)
        https://bugs.webkit.org/show_bug.cgi?id=211423

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Removed redundant #if
        checking both HAVE(HOSTED_CORE_ANIMATION) and !PLATFORM(IOS_FAMILY).

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess): Removed unnecessary
        HAVE(HOSTED_CORE_ANIMATION) check in code that is only compiled for macOS.

2020-05-05  David Kilzer  <ddkilzer@apple.com>

        Fix deprecated NSGraphicsContext methods using 'graphicsPort'
        <https://webkit.org/b/211481>

        Reviewed by Darin Adler.

        - Replace uses of -graphicsPort with -CGContext.
        - Replace uses of -graphicsContextWithGraphicsPort:flipped: with
          -graphicsContextWithCGContext:flipped:.
        - Remove ALLOW_DEPRECATED_DECLARATIONS_{BEGIN,END} if possible.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]):
        (-[WKPrintingView _drawPreview:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage):

2020-05-05  Zalan Bujtas  <zalan@apple.com>

        [Quirk] Job listing page goes blank when scrolling on stackoverflow.com
        https://bugs.webkit.org/show_bug.cgi?id=211480
        <rdar://problem/62558405>

        Reviewed by Wenson Hsieh.

        Add the option of returning "use desktop web content" on any configuration when the host application asks for content recommendation.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommendedForRequest):
        (WebKit::desktopClassBrowsingRecommended):
        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

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

        Crash under _LSSetApplicationInformationItem()
        https://bugs.webkit.org/show_bug.cgi?id=211478
        <rdar://problem/62201314>

        Reviewed by Alex Christensen.

        Given the crashes, I suspect it is not actually safe to call _LSSetApplicationInformationItem()
        from a non main-thread like it was done in r238289. We still run the code asynchronously to
        address the issue that r238289 was trying to fix but we now call _LSSetApplicationInformationItem()
        on the main thread.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::updateActivePages):
        (WebKit::setProcessNameQueue): Deleted.

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

        Update WebKitTestRunner to support running multiple video fullscreen and Picture-in-Picture tests simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=203723

        Reviewed by Jer Noble.

        When the flag MockVideoPresentationModeEnabled is true, the VideoFullscreenManagerProxy in the UI process
        will mock the behavior of the VideoFullscreenInterface[Mac|AVKit].

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        (WebKit::VideoFullscreenManagerProxy::setMockVideoPresentationModeEnabled):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::requestHideAndExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::applicationDidBecomeActive):
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::VideoFullscreenManagerProxy::setHasVideo):
        (WebKit::VideoFullscreenManagerProxy::setVideoDimensions):
        (WebKit::VideoFullscreenManagerProxy::enterFullscreen):
        (WebKit::VideoFullscreenManagerProxy::exitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        (WebKit::VideoFullscreenManagerProxy::setInlineRect):
        (WebKit::VideoFullscreenManagerProxy::setHasVideoContentLayer):
        (WebKit::VideoFullscreenManagerProxy::cleanupFullscreen):
        (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline):
        (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::setMockVideoPresentationModeEnabled):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setMockVideoPresentationModeEnabled):
        (WebKit::WebChromeClient::setUpPlaybackControlsManager):
        (WebKit::WebChromeClient::clearPlaybackControlsManager):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/cocoa/VideoFullscreenManager.h:

2020-05-05  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed fix for MotionMark regression.

        Revert minor part of r260017. Remove telemetry from IOKit filtering allow rules. This telemetry is causing higher
        CPU usage on the system, and is not needed, since we have already confirmed these messages are being used.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-05-05  Daniel Bates  <dabates@apple.com>

        Should show selection highlight during text interaction
        https://bugs.webkit.org/show_bug.cgi?id=211362
        <rdar://problem/59191873>

        Reviewed by Wenson Hsieh.

        Break out text interaction tracking into its own ivar instead of using the
        WebKit::InteractionIsHappening selection suppression reason so that I can
        key off it to only disallow zooming to reveal the focused element during
        a text interaction. The selection suppression machinery does more than this.
        It also deactivates selection assistance, painting of highlights, etc, which
        I don't want.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]): Reset state.
        (-[WKContentView becomeFirstResponderForWebView]): Activate selection assistant
        during a text interaction if the selection assistant is not being suppressed.
        (-[WKContentView _zoomToRevealFocusedElement]): Early return if called during a
        text interaction. The function -_didFinishTextInteractionInTextInputContext will
        trigger the zoom after the interaction completes.
        (-[WKContentView _didCommitLoadForMainFrame]): Reset state.

        (-[WKContentView _willBeginTextInteractionInTextInputContext:]):
        (-[WKContentView _didFinishTextInteractionInTextInputContext:]):
        Update state. While I am here, text interaction is considered a gesture so
        also update _usingGestureForSelection. This means that the selection view
        will be updated immediately on a selection change during a text interaction
        instead of waiting until the next layer tree commit occurs.

2020-05-05  Kate Cheney  <katherine_cheney@apple.com>

        Check for app-bound domains should confirm WKAppBoundDomains key exists when checking for default app-bound protocols.
        https://bugs.webkit.org/show_bug.cgi?id=211451
        <rdar://problem/62715316

        Reviewed by Brent Fulgham.

        Checks for WKAppBoundDomains key before treating a protocol as
        app-bound. This is a regression in expected behavior after making
        In-App Browser privacy opt-in based on the presence of the key.

        Also moves the check for special protocols inside of the completion handler for
        ensureAppBoundDomains to make sure the check for the key has finished.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::beginAppBoundDomainCheck):
        Added a comment to clarify why we need to check for both an empty
        app-bound domains list and the presence of the key for testing
        purposes.

2020-05-05  Timothy Horton  <timothy_horton@apple.com>

        "Essential Skeleton" does not respond to mouse events, only touch events
        https://bugs.webkit.org/show_bug.cgi?id=211439
        <rdar://problem/62694519>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldUseMouseGestureRecognizer]):
        Add a quirk.

2020-05-05  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Compile GPUProcess in WPE port as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=211442

        Reviewed by Don Olmstead.

        Enable GPU Process in WPE.

        This is compilation only. No new tests required.

        * PlatformWPE.cmake: Add Platform/generic include directory.
        * SourcesWPE.txt: Add related source files.

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

        Remove LegacySchemeRegistry::canServiceWorkersHandleURLScheme
        https://bugs.webkit.org/show_bug.cgi?id=211170

        Reviewed by Alex Christensen.

        Remove unused parameters since they are no longer being set in UIProcess.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2020-05-05  Darin Adler  <darin@apple.com>

        Remove now-uneeded HAVE macros related to PDF
        https://bugs.webkit.org/show_bug.cgi?id=211435

        Reviewed by Anders Carlsson.

        * Platform/spi/ios/PDFKitSPI.h: Removed HAVE(PDFHOSTVIEWCONTROLLER_SNAPSHOTTING).

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:mimeType:]): Removed
        HAVE(PDF_HOST_VIEW_CONTROLLER_WITH_BACKGROUND_COLOR).
        (+[WKPDFView web_requiresCustomSnapshotting]): Removed HAVE(PDFHOSTVIEWCONTROLLER_SNAPSHOTTING).
        (-[WKPDFView web_snapshotRectInContentViewCoordinates:snapshotWidth:completionHandler:]):
        Ditto.

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

        Receiving WebRTC network packets should not go through the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211290

        Reviewed by Alex Christensen.

        Instead of going to main thread before going to rtc network thread, we register a message receiver and dispatch directly to rtc network thread.
        This ensures rtc packets are not blocked if main thread is busy.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        (WebKit::LibWebRTCSocketClient::signalSentPacket):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        (WebKit::LibWebRTCSocketClient::signalConnect):
        (WebKit::LibWebRTCSocketClient::signalClose):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::newConnection):
        (WebKit::NetworkRTCProvider::closeListeningSockets):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.cpp: Added
        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::connection):
        (WebKit::LibWebRTCNetwork::~LibWebRTCNetwork):
        (WebKit::LibWebRTCNetwork::networkProcessCrashed):
        (WebKit::LibWebRTCNetwork::setConnection):
        (WebKit::LibWebRTCNetwork::dispatchToThread):
        (WebKit::LibWebRTCNetwork::signalAddressReady):
        (WebKit::LibWebRTCNetwork::signalReadPacket):
        (WebKit::LibWebRTCNetwork::signalSentPacket):
        (WebKit::LibWebRTCNetwork::signalConnect):
        (WebKit::LibWebRTCNetwork::signalClose):
        (WebKit::LibWebRTCNetwork::signalNewConnection):
        * WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in: Added.
        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        * WebProcess/Network/webrtc/WebRTCSocket.cpp: Removed.
        * WebProcess/Network/webrtc/WebRTCSocket.h: Removed.

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

        Excessive error logging from daemons trying to use WebKit, under -[UIDevice currentDevice]
        https://bugs.webkit.org/show_bug.cgi?id=211397
        <rdar://problem/61635403>

        Reviewed by Simon Fraser.

        * Shared/UserInterfaceIdiom.mm:
        (WebKit::userInterfaceIdiomIsPad):
        Adjust userInterfaceIdiomIsPad so that in daemons, it consults only MobileGestalt,
        which returns the actual hardware model, and does not try to use UIDevice.
        UIDevice is more accurate for applications because it will report that
        the device is an iPhone when called inside an iPhone app running on iPad,
        but it cannot be used in daemons that do not have a UIApplication.
        
        For the behaviors we gate on this bit, it makes sense to use iPhone
        behaviors on iPad in the iPhone app jail, so we continue using
        UIDevice if possible.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        Make use of the new mechanism instead of going straight to MobileGestalt,
        for the aforementioned reasons.

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

        Relax WKRemoteObjectRegistry signature validation for bool-equivalent types
        https://bugs.webkit.org/show_bug.cgi?id=211419

        Reviewed by Saam Barati.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (blockSignaturesAreCompatible):
        (replyBlockSignature):
        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        (validateReplyBlockSignature): Deleted.
        Relax reply block signature validation slightly, considering signed char and BOOL,
        which are equivalent and sometimes substituted for each other, to be equal.

        This is still stricter than NSXPC's validation, but this is one of the
        exceptions that they make.

2020-05-04  Darin Adler  <darin@apple.com>

        [Mac] Remove __MAC_OS_X_VERSION_MIN_REQUIRED checks for versions older than 10.14
        https://bugs.webkit.org/show_bug.cgi?id=211420

        Reviewed by Alex Christensen.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume): Remove __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Ditto.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess): Ditto.
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain): Ditto.
        * UIProcess/mac/ServicesController.mm:
        (WebKit::hasCompatibleServicesForItems): Ditto.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::shouldAllowNonValidInjectedCode const): Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(SANDBOX_ISSUE_MACH/READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN)
        https://bugs.webkit.org/show_bug.cgi?id=211427

        Reviewed by Alex Christensen.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType): Remove #if HAVE.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(AUTHORIZATION_STATUS_FOR_MEDIA_TYPE)
        https://bugs.webkit.org/show_bug.cgi?id=211426

        Reviewed by Alex Christensen.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        Remove HAVE(AUTHORIZATION_STATUS_FOR_MEDIA_TYPE).

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(ACCESSIBILITY_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=211425

        Reviewed by Alex Christensen.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h: Remove HAVE(ACCESSIBILITY_SUPPORT)
        and now-unnecessary C include guards.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(SEC_TRUST_EVALUATE_WITH_ERROR)
        https://bugs.webkit.org/show_bug.cgi?id=211429

        Reviewed by Alex Christensen.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _EVOrganizationName]):
        Remove HAVE(SEC_TRUST_EVALUATE_WITH_ERROR).

2020-05-04  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r260791?): Assert not reached in ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary() and ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary()
        https://bugs.webkit.org/show_bug.cgi?id=211305
        <rdar://problem/62737871>

        Reviewed by Alex Christensen.

        This patch adds a busy timeout for the ITP database to allow for
        some concurrency flexibility when running many WebKitTestRunner tests, which
        recreate the ITP database store very often to test both the memory and
        database stores.

        With the timeout, an attempt to write to the database when another
        thread is holding the lock will keep attempting to insert for 5
        seconds as long as the statement execution returns SQLITE_BUSY.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):

2020-05-04  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.WebKit.CustomDisplayName is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=211299

        Reviewed by Chris Dumez.

        Use a serial queue instead of a concurrent queue to set the web process's display name to prevent race conditions.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::setProcessNameQueue):
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::updateActivePages):

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

        [GTK4] Header bars no longer have title and subtitle properties
        https://bugs.webkit.org/show_bug.cgi?id=211412

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * UIProcess/Inspector/gtk/WebKitInspectorWindow.cpp: For GTK4 use a vertical
        box as title widget, with two labels acting as title and subtitle.
        (webkit_inspector_window_init):
        (webkitInspectorWindowSetSubtitle):

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

        [iOS] Make sure TestController::statisticsResetToConsistentState() does not hang due to process suspension
        https://bugs.webkit.org/show_bug.cgi?id=211421

        Reviewed by Maciej Stachowiak.

        We have evidence of hangs in TestController::statisticsResetToConsistentState() on iOS and we suspect it
        is due to process suspension. To address the issue, this patch updates the IPCs being sent as a result of
        a call to statisticsResetToConsistentState() to take a background assertion while waiting for the IPC
        response.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setUseITPDatabase):
        (WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::NetworkProcessProxy::resetParametersToDefaultValues):
        (WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
        (WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting):
        (WebKit::NetworkProcessProxy::setShouldDowngradeReferrerForTesting):
        (WebKit::NetworkProcessProxy::setShouldBlockThirdPartyCookiesForTesting):
        (WebKit::NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting):
        (WebKit::NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setShouldBlockThirdPartyCookiesForTesting):

2020-05-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tapping to focus editable elements should start caret selection at word boundary
        https://bugs.webkit.org/show_bug.cgi?id=211409
        <rdar://problem/62869098>

        Reviewed by Megan Gardner.

        See WebCore/ChangeLog for more details.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):

        Rewrite this using the new VisibleUnits helper function, `wordBoundaryForPositionWithoutCrossingLine`.

2020-05-04  Darin Adler  <darin@apple.com>

        Make __IPHONE_OS_VERSION_MIN_REQUIRED checks against old versions explicit about watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=211402

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkActivityTracker.h: Move from __IPHONE_OS_VERSION_MIN_REQUIRED
        to !PLATFORM(APPLETV). There was already an explicit watchOS case here.

        * Platform/spi/ios/UIKitSPI.h: Move from __IPHONE_OS_VERSION_MIN_REQUIRED to
        PLATFORM(IOS) in one place, and in the other removed the conditional entirely.
        THe one place here that does PLATFORM(IOS) is for a property that is not on
        watchOS and tvOS at this time, related to dragging. Decided not to add a comment
        about it.

        * Shared/WebPreferencesDefaultValues.h: Move from __IPHONE_OS_VERSION_MIN_REQUIRED
        to !PLATFORM(APPLETV). There was already an explicit watchOS case here.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (contentOffsetBoundedInValidRange): Move from __IPHONE_OS_VERSION_MIN_REQUIRED
        to !PLATFORM(WATCHOS) && !PLATFORM(APPLETV).
        (-[WKWebView activeViewLayoutSize:]): Ditto.
        (-[WKWebView _updateScrollViewInsetAdjustmentBehavior]): Ditto.
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (-[WKChildScrollView initWithFrame:]): Ditto.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]): Ditto.
        (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): Ditto.
        * UIProcess/ios/WKScrollView.h: Ditto.
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]): Ditto.

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

        Fix the mistake on macro HAVE_SYSTEM_FEATURE_FLAGS
        https://bugs.webkit.org/show_bug.cgi?id=211416

        Reviewed by Tim Horton.

        We should use "#if HAVE(SYSTEM_FEATURE_FLAGS)" instead of "#if HAVE(HAVE_SYSTEM_FEATURE_FLAGS)".
        And we have to use the function _os_feature_enabled_impl() instead of the macro os_feature_enabled()
        because WebKit is a namespace and cannot be used in os_feature_enabled().

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultAsyncFrameAndOverflowScrollingEnabled):
        (WebKit::defaultUseGPUProcessForMedia):
        (WebKit::defaultRenderCanvasInGPUProcessEnabled):
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):
        (WebKit::defaultWebGL2Enabled):
        (WebKit::defaultWebGPUEnabled):
        (WebKit::defaultInAppBrowserPrivacy):
        (WebKit::defaultIncrementalPDFEnabled):
        (WebKit::defaultWebXREnabled):

2020-05-04  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Eliminate SecurityServer and OCSPD from the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211417
        <rdar://problem/46235370>

        Reviewed by Per Arne Vollan.

        We can now re-block access to these services.

        * WebProcess/com.apple.WebProcess.sb.in:

2020-05-04  Timothy Horton  <timothy_horton@apple.com>

        Unreviewed, reverting r261117.

        Broke lots of API tests

        Reverted changeset:

        "Excessive error logging from daemons trying to use WebKit,
        under -[UIDevice currentDevice]"
        https://bugs.webkit.org/show_bug.cgi?id=211397
        https://trac.webkit.org/changeset/261117

2020-05-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove a few unneeded __IPHONE_OS_VERSION_MIN_REQUIRED checks
        https://bugs.webkit.org/show_bug.cgi?id=211383

        Reviewed by Alexey Proskuryakov.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.h: Removed a check against
        iOS 11, in code that already explicitly checks for watchOS and tvOS.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove HAVE(IOSURFACE) checks in Cocoa-platform-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211389

        Reviewed by Alexey Proskuryakov.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::encodeFrame): Remove HAVE(IOSURFACE) since
        this is Cocoa-specific code.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore): Ditto.
        (WebKit::RemoteLayerBackingStore::clearBackingStore): Ditto.
        (WebKit::RemoteLayerBackingStore::encode const): Ditto.
        (WebKit::RemoteLayerBackingStore::decode): Ditto.
        (WebKit::RemoteLayerBackingStore::bytesPerPixel const): Ditto.
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer): Ditto.
        (WebKit::RemoteLayerBackingStore::display): Ditto.
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer): Ditto.
        (WebKit::RemoteLayerBackingStore::setBufferVolatility): Ditto.
        (WebKit::RemoteLayerBackingStore::Buffer::discard): Ditto.
        (WebKit::RemoteLayerBackingStore::surfaceBufferFormat const): Ditto.
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _takeViewSnapshot]): Ditto.
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): Ditto.
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Ditto.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): Ditto.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::recursivelyMapIOSurfaceBackingStore): Ditto.
        (WebKit::RemoteLayerTreeHost::mapAllIOSurfaceBackingStore): Ditto.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp: Ditto.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h: Ditto.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Ditto.
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createDecoderFactory): Ditto.
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable): Ditto.
        (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable): Ditto.

2020-05-04  David Kilzer  <ddkilzer@apple.com>

        Use default constructor and default initializer for SecItemRequestData
        <https://webkit.org/b/211399>
        <rdar://problem/62861551>

        Reviewed by Darin Adler.

        * Shared/mac/SecItemRequestData.cpp:
        - Remove default constructor implementation.
        * Shared/mac/SecItemRequestData.h:
        - Use default constructor for class.
        - Use default initializer for m_type.

2020-05-04  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r259470): Accessibility Stereo to Mono is not working
        https://bugs.webkit.org/show_bug.cgi?id=211408
        <rdar://problem/62847299>

        Reviewed by Per Arne Vollan.

        The changes in r259470 regressed our Accessibility features. We need to do a rollout of that
        change to restore proper behavior.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2020-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement +[_WKWebAuthenticationPanel clearAllLocalAuthenticatorCredentials]
        https://bugs.webkit.org/show_bug.cgi?id=211369
        <rdar://problem/60246635>

        Reviewed by Brent Fulgham.

        Adds a new SPI for UI clients to clear all existing credentials from the keychain.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel clearAllLocalAuthenticatorCredentials]):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::clearAllCredentials):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::createCredentialPrivateKey const):

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

        Excessive error logging from daemons trying to use WebKit, under -[UIDevice currentDevice]
        https://bugs.webkit.org/show_bug.cgi?id=211397
        <rdar://problem/61635403>

        Reviewed by Simon Fraser.

        * Shared/UserInterfaceIdiom.mm:
        (WebKit::userInterfaceIdiomIsPad):
        Adjust userInterfaceIdiomIsPad so that in daemons, it consults only MobileGestalt,
        which returns the actual hardware model, and does not try to use UIDevice.
        UIDevice is more accurate for applications because it will report that
        the device is an iPhone when called inside an iPhone app running on iPad,
        but it cannot be used in daemons that do not have a UIApplication.
        
        For the behaviors we gate on this bit, it makes sense to use iPhone
        behaviors on iPad in the iPhone app jail, so we continue using
        UIDevice if possible.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        Make use of the new mechanism instead of going straight to MobileGestalt,
        for the aforementioned reasons.

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

        Stop hard-coding get-task-allow entitlement for simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=211392

        Reviewed by Geoffrey Garen.

        Stop hard-coding get-task-allow entitlement for simulator builds and let Xcode inject it as needed.

        * Configurations/BaseXPCService.xcconfig:
        * Resources/ios/XPCService-embedded-simulator.entitlements:

2020-05-04  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (JazzkonE): ResourceLoadStatisticsDatabaseStore checks 'hasHadUserInteraction' without ensuring the domain has been added to the ITP database (211388)
        https://bugs.webkit.org/show_bug.cgi?id=211388
        <rdar://problem/62849919>

        Reviewed by John Wilander.

        A spurious log entry is created if we check 'hasHadUserInteraction' before inserting a row for the domain
        being checked (if that domain had not previosly been observed). This patch changes the order of the two
        commands to avoid this possibility. This makes the database implementation behave like the in-memory version.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::logUserInteraction):

2020-05-04  Alex Christensen  <achristensen@webkit.org>

        Reduce AlternativeService assertion to debug-only assert
        https://bugs.webkit.org/show_bug.cgi?id=211263
        <rdar://problem/61354813>

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        This is asserting sometimes.  No need to crash.  Reduce to debug-only assert.

2020-05-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Throttling requestAnimationFrame should be controlled by RenderingUpdateScheduler
        https://bugs.webkit.org/show_bug.cgi?id=204713

        Reviewed by Simon Fraser.

        Create an IPC message on the DrawingArea to send a message from the
        WebProcess to the UIProcess to setPreferredFramesPerSecond of the
        DisplayRefreshMonitor.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.messages.in:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler setPreferredFramesPerSecond:]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setPreferredFramesPerSecond):
        Set the preferredFramesPerSecond of the CADisplayLink.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::setPreferredFramesPerSecond):
        Forward the call to RemoteLayerTreeDrawingArea.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setPreferredFramesPerSecond):
        Send the IPC message from the WebProcess to the UIProcess.

2020-05-04  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.WebKit.CustomDisplayName is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=211299

        Reviewed by Chris Dumez.

        Sometimes the task queued in WebProcess::updateProcessName happens after the one in WebProcess::updateActivePages.
        Schedule them on the same queue so they happen in deterministic order so we get reliable process names eventually.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateActivePages):

2020-05-04  Brent Fulgham  <bfulgham@apple.com>

        Remove unneeded check for Apple Media Services
        https://bugs.webkit.org/show_bug.cgi?id=211391
        <rdar://problem/62853199>

        Reviewed by Per Arne Vollan.

        Earlier in the development cycle we added an entitlement check for AppleMediaServices, that we now realize
        we do not need. Since this is a non-zero performance cost, remove this check.

        * UIProcess/WebPageProxy.cpp:

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

        Web Inspector: provide a way for inspector to turn on/off ITP debug mode and AdClickAttribution debug mode
        https://bugs.webkit.org/show_bug.cgi?id=209763

        Reviewed by Brian Burg.

        Generalize the `setMockCaptureDevicesEnabledOverride` to be `setDeveloperPreferenceOverride`
        that uses an enum `WebCore::InspectorClient::DeveloperPreference` to know what to do.

        Communicate with the NetworkProcess (from the WebProcess via the UIProcess) in the case of:
         - `AdClickAttributionDebugModeEnabled`
         - `ITPDebugModeEnabled`

        * WebProcess/Inspector/WebInspectorClient.h:
        * WebProcess/Inspector/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::setDeveloperPreferenceOverride): Added.
        (WebKit::WebInspectorClient::setMockCaptureDevicesEnabledOverride): Deleted.
        * WebProcess/Inspector/WebInspector.h:
        * WebProcess/Inspector/WebInspector.cpp:
        (WebKit::WebInspector::setDeveloperPreferenceOverride): Added.
        (WebKit::WebInspector::setMockCaptureDevicesEnabledOverride): Deleted.

        * UIProcess/Inspector/WebInspectorProxy.messages.in:
        * UIProcess/Inspector/WebInspectorProxy.h:
        * UIProcess/Inspector/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::setDeveloperPreferenceOverride): Added.
        (WebKit::WebInspectorProxy::setMockCaptureDevicesEnabledOverride): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setAdClickAttributionDebugMode): Added.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setAdClickAttributionDebugMode): Added.

        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setAdClickAttributionDebugMode): Added.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::setResourceLoadStatisticsDebugMode):

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

        [iOS] Unable to take RunningBoard process assertions in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=211254
        <rdar://problem/62674074>

        Reviewed by Geoffrey Garen.

        Add com.apple.runningboard.assertions.webkit entitlement to iOS Simulator builds so that
        we can take RunningBoard assertions on those platforms too.

        While doing this, I found that we were not adding the entitlements properly for simulator
        builds. For simulator builds, entitlements go into an __entitlements section of the binary,
        rather than in the signature. Use CODE_SIGN_ENTITLEMENTS directive in xcconfig so that
        XCode does the right thing for simulator builds.

        * Configurations/BaseXPCService.xcconfig:
        * Resources/ios/XPCService-embedded-simulator.entitlements: Added.
        * Scripts/process-entitlements.sh:

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneded HAVE(WINDOW_SERVER_OCCLUSION_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=211380

        Reviewed by Sam Weinig.

        * UIProcess/mac/WindowServerConnection.h: Don't check
        HAVE(WINDOW_SERVER_OCCLUSION_NOTIFICATIONS) in this Mac-only header.
        Also removed #pragma once in this header that is only included from .mm files.

        * UIProcess/mac/WindowServerConnection.mm: Wrapped the whole file in
        PLATFORM(MAC) because this is macOS-specific code that may be compiled on
        iOS family platforms. Could wrap it in HAVE(WINDOW_SERVER) instead, but we
        don't have anything like that and PageClientImplMac.mm, the client of this
        code, uses PLATFORM(MAC).
        (WebKit::registerOcclusionNotificationHandler): Ditto.
        (WebKit::WindowServerConnection::WindowServerConnection): Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(UI_REMOTE_VIEW)
        https://bugs.webkit.org/show_bug.cgi?id=211382

        Reviewed by Alex Christensen.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::createRemoteView): Deleted.
        (WebKit::RemoteLayerTreeHost::makeNode): After researching to be sure the method
        is present in the relevant versions of iOS 13, changed this code to use the
        initWithFrame:pid:contextID: method without doing a selector check, and also
        without a HAVE(UI_REMOTE_VIEW) conditional.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: Removed the
        HAVE(UI_REMOTE_VIEW) conditional.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(MENU_CONTROLLER_SHOW_HIDE_API)
        https://bugs.webkit.org/show_bug.cgi?id=211381

        Reviewed by Alex Christensen.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleDOMPasteRequestWithResult:]): Use hideMenuFromView: directly.
        (-[WKContentView _requestDOMPasteAccessWithElementRect:originIdentifier:completionHandler:]):
        Use showMenuFromView: directly.
        (-[WKContentView showGlobalMenuControllerInRect:]): Deleted.
        (-[WKContentView hideGlobalMenuController]): Deleted.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(VOUCHERS)
        https://bugs.webkit.org/show_bug.cgi?id=211379

        Reviewed by Alex Christensen.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer): Remove HAVE(VOUCHERS) checks from this
        Cocoa-only source file.

2020-05-04  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.WebKit.CustomDisplayName is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=211299

        Reviewed by Darin Adler.

        The application name is being set on a background queue, but there's nothing actually keeping the NSString alive.
        This may fix some timeouts we were seeing.  I wonder why ASAN or guard malloc didn't catch this yet.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):

2020-05-04  Darin Adler  <darin@apple.com>

        Remove no-longer-needed HAVE(UISCENE)
        https://bugs.webkit.org/show_bug.cgi?id=211376

        Reviewed by Chris Dumez.

        * Platform/spi/ios/UIKitSPI.h: Don't check HAVE(UISCENE) any more in this
        iOS-family-only source file; it's always true.
        * UIProcess/ApplicationStateTracker.h: Ditto.
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker): Ditto.
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker): Ditto.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView interfaceOrientation]): Ditto.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textEffectsWindow]): Ditto.

2020-05-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix for r261071
        https://bugs.webkit.org/show_bug.cgi?id=211274

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:

2020-05-04  Emilio Cobos Álvarez  <emilio@crisal.io>

        Put lh / rlh units behind a flag until bug 211351 is sorted out.
        https://bugs.webkit.org/show_bug.cgi?id=211356

        Reviewed by Antti Koivisto.

        * Shared/WebPreferences.yaml: Define the runtime flag.

2020-05-03  David Kilzer  <ddkilzer@apple.com>

        Use LocalCurrentGraphicsContext in WebKit::convertPlatformImageToBitmap()
        <https://webkit.org/b/211274>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::convertPlatformImageToBitmap):
        - Use LocalCurrentGraphicsContext to replace code.

2020-05-03  David Kilzer  <ddkilzer@apple.com>

        Use default initializers and default constructors in WebEvent.h
        <https://webkit.org/b/211354>

        Reviewed by Daniel Bates.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent):
        (WebKit::WebKeyboardEvent):
        (WebKit::WebPlatformTouchPoint):
        (WebKit::WebTouchEvent):
        - Change empty constructors to use `default`.
        - Use default initializers to make sure all fields are
          initialized.

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

        handleWheelEventPhase() should include the relevant ScrollingNodeID
        https://bugs.webkit.org/show_bug.cgi?id=211315

        Reviewed by Tim Horton.

        handleWheelEventPhase() is used to send information about wheel event phases
        to the main thread, which make their way to ScrollAnimatorMac::handleWheelEventPhase()
        and are used to update the state of overlay scrollbars. In order to talk to the
        correct set of scrollbars with overflow:scroll, we need to send along the ScrollingNodeID
        and map that to the appropriate ScrollableArea.

        Will be tested by future overlay scrollbar tests.

        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::handleWheelEventPhase):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:

2020-05-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Re-inject key press events not handled by the web process
        https://bugs.webkit.org/show_bug.cgi?id=211286

        Reviewed by Adrian Perez de Castro.

        Use gdk_display_put_event() since gtk_main_do_event() is no longer available in GTK4. Also stop forwarding key
        release events in GTK3 case, this only makes sense for key press events and we were re-injecting every release
        event since they are not handled by web elements in most of the cases.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        (webkitWebViewBaseKeyPressed):

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

        [GTK] Specify action group name when binding context menu models
        https://bugs.webkit.org/show_bug.cgi?id=211288

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::append): Use the action name directly for the menu item.
        (WebKit::WebContextMenuProxyGtk::populate): Indicate the action group name when binding the
        menu model, which automatically adds the group name as action name prefix without needing
        to specify it by hand when adding menu items.

2020-05-02  Devin Rousso  <drousso@apple.com>

        [CSS Easing 1] implement `jump-*` step positions
        https://bugs.webkit.org/show_bug.cgi?id=211271

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<StepsTimingFunction>::encode):
        (IPC::ArgumentCoder<StepsTimingFunction>::decode):

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

        Books sometimes ends up with blank pages, especially after adjusting font size
        https://bugs.webkit.org/show_bug.cgi?id=211265
        <rdar://problem/59898144>

        Reviewed by Darin Adler.

        A few problems:

        - There is short time during page creation where a WKWebView created
        with _clipsToVisibleRect=YES would not yet have sent its viewExposedRect
        to the Web Content process, and if we end up constructing tiles during
        that time, we can make way too many, bogging down the process (or crashing).

        Fix this by always keeping track of the viewExposedRect (on WebPageProxy,
        instead of the somewhat-more-transient DrawingAreaProxy) and sending it
        to the Web Content process in the WebPage creation parameters, to entirely
        remove this window.

        - Even when the viewExposedRect successfully gets to the Web Content
        process, it can still end up wildly wrong: the DrawingArea was tasked with
        watching scrolling changes, applying the scroll offset to the viewExposedRect,
        and pushing it to FrameView in content coordinates.

        It turns out that this was all unnecessary, as we need viewExposedRect
        in root view coordinates (same space as visibleContentRect, which we
        intersect it with), and we just didn't notice because all clients of
        _clipsToVisibleRect: expand the view to its layout size and insert
        a scrolling view outside the web view, and so don't use our scrolling.

        Avoid this conversion and complexity entirely; I tested Mail and Books
        where there is no impact (other than fixing the original bug), and also
        a custom test app with a scrollable WKWebView inside a NSScrollView,
        which improved significantly.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Plumb view exposed rect via WebPage creation parameters.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateViewExposedRect):
        Send viewExposedRect changes to WebPageProxy instead of DrawingAreaProxy.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didChangeViewExposedRect):
        (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
        (WebKit::DrawingAreaProxy::setViewExposedRect): Deleted.
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewExposedRect const): Deleted.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didChangeViewExposedRect):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation const):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setViewExposedRect): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setViewExposedRect):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::viewExposedRect const):
        Maintain viewExposedRect on WebPageProxy instead of DrawingAreaProxy,
        so that we can always store it even if we don't have a DrawingAreaProxy yet
        (or change DrawingAreaProxies) and can send it in WebPage creation parameters.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::setViewExposedRect):
        (WebKit::RemoteLayerTreeDrawingArea::updateRendering):
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): Deleted.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):
        (WebKit::TiledCoreAnimationDrawingArea::setViewExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::scroll): Deleted.
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Deleted.
        Plumb viewExposedRect directly to FrameView, instead of trying to apply
        the root view -> contents mapping ourselves and pushing updates.

2020-05-01  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Refactor createMessageDecoder() for clarity
        <https://webkit.org/b/211322>

        Reviewed by Darin Adler.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::createMessageDecoder):
        - Rename `numDescriptors` to `numberOfPortDescriptors` to match
          variable name in sendOutgoingMessage().
        - Add new `numberOfAttachments` variable to make it clear that
          one port descriptor is left for an out-of-line message body.
        - Add FIXME about another issue.

2020-05-01  Alex Christensen  <achristensen@webkit.org>

        Add SPI to move localStorage to a different domain
        https://bugs.webkit.org/show_bug.cgi?id=209260
        <rdar://problem/60285683>

        Reviewed by Brady Eidson.

        Covered by an API test.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::renameDomainInWebsiteData):
        (WebKit::NetworkProcess::getLocalStorageOriginDetails):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::renameDomain):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::close):
        * NetworkProcess/WebStorage/StorageArea.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::renameDomain):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::renameDomain):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _renameDomain:to:forDataOfTypes:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::renameDomainInWebsiteData):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::renameDomainInWebsiteData):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        [iOS] ProcessThrottler fails to re-take ProcessAssertion if the previous one was invalidated
        https://bugs.webkit.org/show_bug.cgi?id=211297
        <rdar://problem/62542463>

        Reviewed by Jer Noble.

        Our ProcessAssertions may get invalidated upon backgrounding of the app. When the app becomes
        foreground and the ProcessThrottler tries to take a Foreground assertion as a result, it would
        incorrectly think it already had such assertion and not do anything, even though the previous
        one is no longer valid. As a result, the child processes would stay suspended even though the
        app was foregrounded.

        To address the issue, add a isValid() method to ProcessAssertion() and check it in
        ProcessThrottler::setAssertionType() to determine if we need to re-take an assertion or not.
        We also invalidate all pending ProcessThrottler activities upon ProcessAssertion invalidation
        for good measure. This way, the holders of these activities will be able to rely on
        Activity::isValid() to determine if they need to re-take their activities or not.

        * Platform/spi/ios/AssertionServicesSPI.h:
        * Platform/spi/ios/RunningBoardServicesSPI.h:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::isValid const):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::validity const): Deleted.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::setAssertionType):
        (WebKit::ProcessThrottler::assertionWasInvalidated):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::processAssertionWasInvalidated):
        (WebKit::ProcessAssertion::isValid const):
        (WebKit::ProcessAndUIAssertion::updateRunInBackgroundCount):

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

        Unreviewed, reverting r261015.

        Seems to have broken clean builds

        Reverted changeset:

        "[iOS] Unable to take RunningBoard process assertions in the
        iOS Simulator"
        https://bugs.webkit.org/show_bug.cgi?id=211254
        https://trac.webkit.org/changeset/261015

2020-05-01  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] createMessageDecoder() needs a validity check
        <https://webkit.org/b/211260>
        <rdar://problem/61914087>

        Reviewed by Darin Adler.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::createMessageDecoder):
        - Add validity check and early return for
          `numDescriptors`.

2020-05-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Browser: crash when handling `disable`
        https://bugs.webkit.org/show_bug.cgi?id=211251

        Reviewed by Daniel Bates.

        * UIProcess/Inspector/Agents/InspectorBrowserAgent.cpp:
        (WebKit::InspectorBrowserAgent::disable):
        If the inspected page crashed, we won't have a `WebInspectorProxy` anymore.

2020-05-01  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Every running WebContent process should be granted access to frontboard services when Accessibility is enabled
        https://bugs.webkit.org/show_bug.cgi?id=211238

        Reviewed by Daniel Bates.

        Currently, every WebContent process is granted access to frontboard services if Accessibility is enabled at the
        time of startup. However, WebContent processes running at the time when Accessibility is enabled are not granted
        access, which is a bug.

        API test: WebKit.AccessibilityHasFrontboardServiceAccess

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::unblockServicesRequiredByAccessibility):
        (WebKit::WebProcess::unblockAccessibilityServer): Deleted.

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

        [iOS] Unable to take RunningBoard process assertions in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=211254
        <rdar://problem/62674074>

        Reviewed by Tim Horton.

        * Configurations/BaseXPCService.xcconfig:
        Use this directive to add our entitlements:
            CODE_SIGN_ENTITLEMENTS = $(WK_PROCESSED_XCENT_FILE);
        instead of using:
            OTHER_CODE_SIGN_FLAGS = --entitlements $(WK_PROCESSED_XCENT_FILE);
        This is important because entitlements are added differently for iOS Simulator builds,
        so that they only apply inside the simulator (and not for the host system). If we use
        CODE_SIGN_ENTITLEMENTS, then XCode does the right thing on all platforms.

        * Scripts/process-entitlements.sh:
        Add com.apple.runningboard.assertions.webkit entitlement to iOS Simulator builds.

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        [GTK] Add additional exports to support hidden visibility
        https://bugs.webkit.org/show_bug.cgi?id=211246

        Reviewed by Michael Catanzaro.

        * WebProcess/InjectedBundle/API/glib/WebKitWebExtensionPrivate.h:

2020-05-01  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filtering rules in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=211188
        <rdar://problem/60922910>

        Reviewed by Brent Fulgham.

        Based on telemetry and local testing, update the message filtering rules in the WebContent process' sandbox on iOS.
        Messages that have not been observed being in use, should be denied.

        No new tests, covered by existing tests.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):

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

        A PiP window doesn’t actually dismiss after the browser navigates to a different page within the same domain
        https://bugs.webkit.org/show_bug.cgi?id=211257

        Reviewed by Jer Noble.

        Add the support of exitVideoFullscreenToModeWithoutAnimation() in iOS,
        so that the Web process can request the UI process to close the PiP window
        without exchanging IPC messages back and forth.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Only stop the watchdog timer if it is active.
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation):

2020-05-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260920.
        https://bugs.webkit.org/show_bug.cgi?id=211292

        Sandbox compile error is no longer an issue (Requested by
        perarne on #webkit).

        Reverted changeset:

        "Unreviewed sandbox compile fix."
        https://trac.webkit.org/changeset/260920

2020-05-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move focus out of the web view when tab is pressed and there isn't a next element to focus
        https://bugs.webkit.org/show_bug.cgi?id=211283

        Reviewed by Adrian Perez de Castro.

        Implement API::UIClient::takeFocus() that is called when WebCore wants to focus the chrome.

        * UIProcess/API/glib/WebKitUIClient.cpp:

2020-05-01  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r260214): Leak of _WKTextInputContext in -[WKContentView _isTextInputContextFocused:]
        <https://webkit.org/b/211276>
        <rdar://problem/62696724>

        Reviewed by Daniel Bates.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _focusTextInputContext:placeCaretAt:completionHandler:]):
        - Use RetainPtr<> to pass the copy of _WKTextInputContext into
          the block to fix the leak.

2020-05-01  Saam Barati  <sbarati@apple.com>

        We can't cast toLength result to unsigned
        https://bugs.webkit.org/show_bug.cgi?id=211205
        <rdar://problem/62625562>

        Reviewed by Yusuke Suzuki.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::removeProperty):

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

        [GTK4] Disable arrow on context menu popover
        https://bugs.webkit.org/show_bug.cgi?id=211241

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk): Disable the menu popover arrow.

2020-04-30  Ross Kirsling  <ross.kirsling@sony.com>

        TriState should be an enum class and use "Indeterminate" instead of "Mixed"
        https://bugs.webkit.org/show_bug.cgi?id=211268

        Reviewed by Mark Lam.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::validateCommand):

        * WebProcess/WebPage/glib/WebPageGLib.cpp:
        (WebKit::WebPage::getPlatformEditorState const):

2020-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Require user gestures for LocalAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=182893
        <rdar://problem/43357293>

        Reviewed by Brent Fulgham.

        Covered by API tests.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::filterTransports const):
        (WebKit::AuthenticatorManager::getTransports const):
        Checks UserGesture here. Since filterTransports will be overrided in mock testings,
        all mock tests don't require user gestures.

        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        Adds user gesture corresponding fields.

2020-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the Mac Catalyst build after r260979

        The presence of `_contextMenuInteraction` is conditional not only on `USE(UICONTEXTMENU)`, but also
        `HAVE(LINK_PREVIEW)`. Guard logic in `-deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:` with the
        latter as well.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

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

        Clean up some EventHandler coordinate-related naming and fix ScrollableArea::lastKnownMousePosition() conversions
        https://bugs.webkit.org/show_bug.cgi?id=211259

        Reviewed by Zalan Bujtas.

        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::position const):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        * WebProcess/Plugins/PDF/PDFPlugin.h:

2020-04-30  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix confusing idiom for releasing _selectionRects in -[WKTextRange dealloc]
        <https://webkit.org/b/211269>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKTextRange dealloc]):
        - Switch to more common idiom to release an instance variable.
          This fixes a false positive warning from the clang static
          analyzer about releasing a variable not owned by the caller.

2020-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: Double tap dispatches one click event on iOS 13.4 when it would dispatch two on iOS 13.3
        https://bugs.webkit.org/show_bug.cgi?id=211179
        <rdar://problem/62594779>

        Reviewed by Tim Horton.

        https://trac.webkit.org/r253267 introduced deferring gesture recognizers as a way to handle preventable (non-
        passive) touchstart events without blocking the UI process. These deferring gesture recognizers work by having
        other gesture recognizers at or below WKWebView (with few exceptions) require the failure of these deferring
        gestures. These gestures transition to possible state when beginning a touch inside a non-passive touch event
        handling region, and transition to either failed or ended state (depending on whether `preventDefault()` was
        called) after the web content process finished handling the touch event.

        However, this means that the resulting dependency graph now has an edge between each gesture under WKWebView and
        one of the deferring gesture recognizers, due to these new failure requirements. Since gestures that have been
        recognized or have failed don't get reset until all other gestures in the same dependency subgraph have also
        recognized or failed, some gestures (such as the synthetic single tap gesture recognizer in this bug) might not
        be resetting as soon after ending as they did before, since they may be connected to other gesture recognizers
        that are still in possible state by way of the failure requirements added by the new deferring gestures.

        I was already aware of this problem in r253267, and attempted to solve this by bisecting the gesture dependency
        graph into two subgraphs: one containing all the one-finger multi-tap gestures that are reset after a lengthy
        delay, and another containing everything else. To do this, I added two different deferring gesture recognizers:
        one for immediately resettable gestures (meant for gestures in the latter subgraph), and another for gestures
        that are reset after a delay (meant for gestures in the former subgraph).

        Unfortunately, unrelated changes around text interactions in UIKit in iOS 13.4 caused the tap-and-a-half
        gesture for selecting a range of text to now have a delayed reset; this means that gestures in the "immediately
        resettable" gesture subgraph are all forced to wait on the tap-and-a-half text interaction gesture before
        resetting, which causes the bug here, since the synthetic single tap gesture is in this "immediately resettable"
        gesture subgraph.

        To mitigate this, this patch pushes the tap-and-a-half text selection gesture, along with the loupe gesture,
        context menu relationship gesture, and drag lift gestures (i.e. the other gestures that are connected to the
        tap-and-a-half gesture via failure requirements) out of the "immediately resettable" subgraph, and into the
        "delayed" subgraph.

        Test: fast/events/touch/ios/two-click-events-after-double-tap-with-touch-handler.html

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

2020-04-30  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r260932): ASSERTION FAILED: ok in webkit::SandboxExtension::consumePermanently for 3 tests
        https://bugs.webkit.org/show_bug.cgi?id=211253
        <rdar://problem/62673727>

        Reviewed by Per Arne Vollan.

        In r260932 I added an assertion to confirm that a sandbox extension was successfully consumed. This triggered three
        test failures because those tests attempt to pass a sandbox extension from the WebContent process to the UIProcess.

        After speaking with the Sandbox team, I learned that an unsandboxed program that attempts to consume a valid
        sandbox extension will return 0. Sandboxed processes either receive -1 (for error), or a handle representing the
        newly added extension (so that it can be removed when no longer needed).
        
        Since the TestWebKitAPI (and WebKitTestRunner) processes are not sandboxed they receive a zero return value here.

        We should recognize this as a valid and expected result. We should also consider making some form of sandboxed
        driver for WebKit.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::consume): Recognize a 0 handle as valid.

2020-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Optimize LocalAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=183534
        <rdar://problem/43357408>

        Reviewed by Brent Fulgham.

        This patch implements the following small optimizations:
        1. Replacing local constants with ones from FidoConstants.h;
        2. Merging m_assertionResponses and m_existingCredentials by replacing HashSet with Vector in Authenticator::Observer::selectAssertionResponse;
        3. Using Base64 encoded strings as the keys of the HashSet in produceHashSet() instead of the old casting hack;
        4. Invaliding the LAContext in LocalConnection::~LocalConnection() such that any displaying LocalAuthentication dialogs can be dismissed after the object is destroyed;
        5. Sorting existing credentials according to LRU before returning to UI clients;
        6. Improving the LocalAuthentication dialog titles for iOS.

        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::selectAssertionResponse):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::produceHashSet):
        (WebKit::LocalAuthenticatorInternal::toNSData):
        (WebKit::LocalAuthenticatorInternal::getExistingCredentials):
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserVerification):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.h:
        (WebKit::LocalConnection::filterResponses const):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::WebCore::bundleName):
        (WebKit::LocalConnection::~LocalConnection):
        (WebKit::LocalConnection::verifyUser):
        (WebKit::LocalConnection::verifyUser const): Deleted.
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::verifyUser):
        (WebKit::MockLocalConnection::filterResponses const):
        (WebKit::MockLocalConnection::verifyUser const): Deleted.
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetNextAssertionAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.h:

2020-04-30  Kate Cheney  <katherine_cheney@apple.com>

        Change default of "inAppBrowserPrivacyQuirks" testing toggle to use it for tests only
        https://bugs.webkit.org/show_bug.cgi?id=211209
        <rdar://problem/62619659>

        Reviewed by Brent Fulgham.

        No new tests, behavior confirmed by existing tests.

        * Shared/WebPreferences.yaml:

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

        Unreviewed, add missing parenthesis

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMediaEvent):

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

        [iOS][WK2] Add timeout for "Client navigation" foreground assertion
        https://bugs.webkit.org/show_bug.cgi?id=211202

        Reviewed by Alex Christensen.

        Add a 30s timeout for "Client navigation" foreground assertion. Foreground assertions do not timeout
        at RunningBoard level and we thus need to make sure we release them to avoid power leaks.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::setClientNavigationActivity):
        (API::Navigation::setForegroundActivity): Deleted.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::TimedActivity::TimedActivity):
        (WebKit::ProcessThrottler::TimedActivity::operator=):
        (WebKit::ProcessThrottler::TimedActivity::activityTimedOut):
        (WebKit::ProcessThrottler::TimedActivity::updateTimer):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):

2020-04-30  Alex Christensen  <achristensen@webkit.org>

        Add SPI to change a WKWebView's CORS disabling pattern after initialization
        https://bugs.webkit.org/show_bug.cgi?id=211211
        <rdar://problem/61837474>

        Reviewed by Chris Dumez.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _corsDisablingPatterns]):
        (-[WKWebView _setCORSDisablingPatterns:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::corsDisablingPatterns const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::parseAndAllowAccessToCORSDisablingPatterns):
        (WebKit::m_isNavigatingToAppBoundDomain):
        (WebKit::WebPage::updateCORSDisablingPatterns):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-30  Daniel Bates  <dabates@apple.com>

        [iOS] Implement -markedTextRange
        https://bugs.webkit.org/show_bug.cgi?id=211148
        <rdar://problem/57865890>

        Reviewed by Wenson Hsieh.

        Return the UITextRange-like object for the marked text range. Clients can use this range to
        access the selection rects or query for the caret rect at the start or end of the range,
        if desired.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        Encode and decode the marked text selection rects and caret rects at the state and end
        of the marked text range. This is the same information that we compute in order to
        implement -selectedTextRange. I thought about collecting these details into class and
        having editor state hold two instances of it: one for selected text and one for marked text.
        However I decided against it because this class is unlikely to find use outside of what is
        needed to implement -selectedTextRange and -markedTextRange. This is because only those
        functions require such details so as to return an opaque UITextRange-derived object that
        can be passed to- or its sub-objects can be passed to WKContentView's -caretRectForPosition
        and -selectionRectsForRange. Literally, WKContentView does not support other UITextInput
        functions that operate on UITextRange or UITextPosition. I didn't pursue fixing this in
        general because 1) I don't need it to solve my problem and 2) UIWKDocumentContext SPI seems
        to be the new general-purpose solution.

        (WebKit::operator<<): Pretty print all the new marked text details we collect. While I am here,
        use Vector::isEmpty() instead of Vector::size() to check if there are selection rects.
        * Shared/EditorState.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textFirstRect]):
        (-[WKContentView textLastRect]):
        Update code now that the marked text rects are in the post layout data sub-object.

        (-[WKContentView _scaledCaretRectForSelectionStart:]): Extracted from -selectedTextRange.
        (-[WKContentView _scaledCaretRectForSelectionEnd:]): Ditto.
        (-[WKContentView selectedTextRange]): Write in terms of -_scaledCaretRectForSelectionStart
        and -_scaledCaretRectForSelectionEnd. Also modernize the code while I am here.
        (-[WKContentView markedTextRange]): Added.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const): Collect the marked text rects and the caret
        rects at the start and end of the range.

2020-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4][X11] Add support for rendering web view contents
        https://bugs.webkit.org/show_bug.cgi?id=211189

        Reviewed by Adrian Perez de Castro.

        Use GdkDisplayX11::xevent signal instead of filtering events that is no longer available in GTK4. GdkVisual no
        longer exists either, so we get the X visual from the PlatformDisplay.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::XDamageNotifier::add):
        (WebKit::XDamageNotifier::remove):
        (WebKit::XDamageNotifier::filterXDamageEvent):
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::update):
        (WebKit::AcceleratedBackingStoreX11::snapshot):
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::AcceleratedSurfaceX11::AcceleratedSurfaceX11):
        (WebKit::AcceleratedSurfaceX11::createPixmap):

2020-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support click events
        https://bugs.webkit.org/show_bug.cgi?id=211175

        Reviewed by Adrian Perez de Castro.

        Handle button pressed and released events using a GtkGestureClick.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (webkitWebViewBaseButtonPressed):
        (webkitWebViewBaseButtonReleased):
        (webkitWebViewBaseConstructed):
        (webkitWebViewBaseResetClickCounter):

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

        Use initializers in PlatformMouseEvent and WebEvent
        https://bugs.webkit.org/show_bug.cgi?id=211217

        Reviewed by Tim Horton.

        Use initializers im WebEvent.

        * Shared/WebEvent.h:
        * Shared/WebMouseEvent.cpp:

2020-04-29  Brent Fulgham  <bfulgham@apple.com>

        Improve SandboxExtension::HandleArray to reduce boilerplate
        https://bugs.webkit.org/show_bug.cgi?id=211103
        <rdar://problem/62533632>

        Reviewed by Per Arne Vollan.

        There are a number of boilerplate patterns needed when using SandboxExtension::HandleArray.
        We could make these simpler and less error prone by improving the class.

        This patch:
        1. Adds convenience methods to create and consume HandleArrays.
        2. Updates uses of HandleArray to use the convenience methods.

        Tested by existing tests.

        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::decode):
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtension::createHandlesForFiles):
        (WebKit::SandboxExtension::createHandlesForMachLookup):
        (WebKit::SandboxExtension::consumePermanently):
        * Shared/SandboxExtension.h:
        (WebKit::createHandlesForFiles):
        (WebKit::SandboxExtension::consumePermanently):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::unblockPreferenceServiceIfNeeded):
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPathnamesForType):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::extendSandboxForFilesFromOpenPanel):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::unblockPreferenceService):

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

        REGRESSION(r260791) Network process fails to suspend promptly
        https://bugs.webkit.org/show_bug.cgi?id=211207
        <rdar://problem/62620454>

        Reviewed by Alex Christensen.

        After r260791, all WebResourceLoadStatisticsStore instances share a single WorkQueue.
        As a result, the logic to suspend WebResourceLoadStatisticsStore's WorkQueues in
        NetworkProcess::prepareToSuspend() needs to get updated to reflect this.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::suspend):
        (WebKit::WebResourceLoadStatisticsStore::resume):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):

2020-04-29  Adrian Perez de Castro  <aperez@igalia.com>

        REGRESSION(r260889): TestContextMenu:/webkit/WebKitWebView/populate-menu no longer passes
        https://bugs.webkit.org/show_bug.cgi?id=211203

        Reviewed by Aakash Jain.

        No new tests needed.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk): Attach the correct action
        group to the popover widget, instead of a temporary which will always be empty.

2020-04-29  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r246395): Leak of ARQuickLookPreviewItem and ARQuickLookWebKitItem in -[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]
        <https://webkit.org/b/211197>
        <rdar://problem/62612483>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]):
        - Use RetainPtr<> and adoptNS() to fix leaks.

2020-04-29  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed sandbox compile fix.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-04-29  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegate API shouldAllowDeprecatedTLS
        https://bugs.webkit.org/show_bug.cgi?id=210981
        <rdar://problem/61742976>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::shouldAllowLegacyTLS):

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

        [iOS][WK2] Temporarily stop using RunningBoard for the foreground process assertion
        https://bugs.webkit.org/show_bug.cgi?id=211196
        <rdar://problem/62535822>

        Reviewed by Tim Horton.

        Temporarily stop using RunningBoard for the foreground process assertion. On recent iOS builds, there
        are issues where this assertion can time out after 30 seconds, even though the process is still
        foreground.

        * Configurations/WebKit.xcconfig:
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):

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

        Set _STAttributionDisplayName to iOS WebContent Info plist
        https://bugs.webkit.org/show_bug.cgi?id=210772
        <rdar://problem/62075201>

        Reviewed by Eric Carlson.

        Set _STAttributionDisplayName to 'Website' value.

        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-iOS.plist:

2020-04-29  Kate Cheney  <katherine_cheney@apple.com>

        Refactor layout tests after updates to In-App Browser Privacy
        https://bugs.webkit.org/show_bug.cgi?id=211146
        <rdar://problem/62524127>

        Reviewed by Brent Fulgham.

        Tests: http/tests/in-app-browser-privacy/app-bound-domain-gets-app-bound-session.html
               http/tests/in-app-browser-privacy/non-app-bound-domain-does-not-get-app-bound-session.html

        Removes setInAppBrowserPrivacyEnabled, which is no longer needed by
        layout tests. Setting this in TestOptions is enough.
        getWebViewCategory is not needed because this patch deletes the only test
        which uses it. Lastly, adds a new function to clear app-bound sessions
        now that multiple tests are checking for them.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearAppBoundSession):
        (WebKit::NetworkProcess::setInAppBrowserPrivacyEnabled): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::clearAppBoundSession):
        (WebKit::NetworkSession::setInAppBrowserPrivacyEnabled): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::appBoundSession):
        (WebKit::NetworkSessionCocoa::clearAppBoundSession):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreClearAppBoundSession):
        (WKWebsiteDataStoreSetInAppBrowserPrivacyEnabled): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getWebViewCategoryFor:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearAppBoundSession):
        (WebKit::NetworkProcessProxy::setInAppBrowserPrivacyEnabled): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::clearAppBoundSession):
        (WebKit::WebsiteDataStore::setInAppBrowserPrivacyEnabled): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2020-04-29  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GPUP][GTK] compile GPUProcess in GTK port
        https://bugs.webkit.org/show_bug.cgi?id=208814

        Reviewed by Don Olmstead.

        Enable GPUProcess compilation in WebKitGTK as an experimental
        feature

        No new tests required.

        * GPUProcess/GPUConnectionToWebProcess.cpp: guard
        UserMediaCaptureManagerProxy for Cocoa platform only.
        (WebKit::GPUConnectionToWebProcess::dispatchMessage): guard
        messages from UserMediaCaptureManagerProxy for Cocoa platform,
        moving up this guard from video track messages.
        (WebKit::GPUConnectionToWebProcess::mediaKeyStorageDirectory):
        removed guard for this function of ENCRYPTED_MEDIA leaving only
        LEGACY_ENCRYPTED_MEDIA, since it's were it is defined.
        (WebKit::GPUConnectionToWebProcess::setOrientationForMediaCapture):
        guard the content of this function for Cocoa platform, since it is
        calling a UserMediaCaptureManagerProxy object.
        * GPUProcess/GPUProcess.cpp: Replace the included header to match
        with the used symbols in file.
        * GPUProcess/gstreamer/GPUProcessGStreamer.cpp: Added.
        (WebKit::GPUProcess::initializeProcess): Empty function.
        (WebKit::GPUProcess::initializeProcessName): Empty function.
        (WebKit::GPUProcess::initializeSandbox): Empty function.
        * GPUProcess/gstreamer/GPUProcessMainGStreamer.cpp: Added.
        (WebKit::initializeAuxiliaryProcess<GPUProcess>): New function.
        (WebKit::GPUProcessMain): New function.
        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp: changed guard
        for this file from ENCRYPTED_MEDIA to LEGACY_ENCRYPTED_MEDIA to
        match with its header file.
        * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp: Added.
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        New function that raises noImplemented()
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable):
        New function that raises noImplemented()
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged):
        New function that raises noImplemented()
        (WebKit::RemoteMediaPlayerProxy::enterFullscreen): New function
        that raises noImplemented()
        (WebKit::RemoteMediaPlayerProxy::exitFullscreen): New function
        that raises noImplemented()
        * PlatformGTK.cmake: add Platform/generic header directory.
        * SourcesGTK.txt: Add the new files and
        GPUProcess/media/RemoteAudioDestinationManager.cpp
        * WebProcess/GPU/GPUProcessConnection.cpp: guard
        UserMediaCaptureManager for Cocoa platform only.
        (WebKit::GPUProcessConnection::dispatchMessage): guard messages
        from UserMediaCaptureManager for Cocoa platform, moving up this
        guard applied also for video track.
        * WebProcess/GPU/media/RemoteCDM.cpp: include missing header
        GPUProcessConnection.h
        * WebProcess/GPU/media/gstreamer/VideoLayerRemoteGStreamer.cpp: Added.
        (WebKit::createVideoLayerRemote): New function
        that raises noImplemented()

2020-04-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Unreviewed compile-warning fixes

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetEnableBackForwardNavigationGesture):
        (webkitWebViewBaseWillSwapWebProcess):

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

        Make PolicyChecker an inner class of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=211138

        Reviewed by Alex Christensen.

        Adapt to PolicyChecker::ShouldContinue change.

        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::responseReceived):
        * GPUProcess/media/RemoteMediaResource.h:
        * GPUProcess/media/RemoteMediaResourceManager.cpp:
        (WebKit::RemoteMediaResourceManager::responseReceived):
        * GPUProcess/media/RemoteMediaResourceManager.h:
        * GPUProcess/media/RemoteMediaResourceManager.messages.in:
        * Scripts/webkit/messages.py:
        * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:
        (WebKit::RemoteMediaResourceProxy::responseReceived):
        * WebProcess/GPU/media/RemoteMediaResourceProxy.h:

2020-04-29  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Misplaced right click menu on web page due to deprecated gtk_menu_popup()
        https://bugs.webkit.org/show_bug.cgi?id=170553

        Reviewed by Carlos Garcia Campos.

        Replace GtkMenuShell with a GtkPopoverMenu for context menus. The former is not available
        at all in GTK4, and the later allows for simplifying the positioning code: it is enough
        to provide a point in WebKitWebView widget where to place the popup, and GTK takes care
        of everything. This removes the custom positioning code (as it is not needed anymore),
        which did GdkScreen-relative calculations that GTK4 does not support.

        No new tests needed.

        * Shared/glib/WebContextMenuItemGlib.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (contextMenuDismissed): Change parameter from GtkMenuShell to GtkMenuShell to GtkWidget.
        (webkitWebViewPopulateContextMenu): Connect to the GtkPopover::closed signal instead of
        GtkMenuShell::deactivate.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (activeContextMenuClosed): Renamed from activeContextMenuUnmapped(), changed parameter
        from GtkMenuShell to GtkWidget, and compare with WebContextMenuProxyGtk::gtkWidget().
        (activeContextMenuUnmapped): Renamed to activeContextMenuClosed().
        (webkitWebViewBaseSetActiveContextMenuProxy): Connect to the GtkPopover::closed signal
        instead of GtkMenuShell::deactivate.
        (webkitWebViewBaseGetActiveContextMenuProxy):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Arrange to use GtkPopoverMenu instead of
        GtkMenuShell.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::populate):
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems): Simplify using
        m_context.menuLocation() to obtain the location where to make the context menu popup
        next to, which allows removing the ::menuPositionFunction() callback as well.
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h: Remove declarations for ::menuPositionFunction()
        and ::m_popupPosition, which are now unneeded.
        (WebKit::WebContextMenuProxyGtk::gtkWidget const): Renamed from ::gtkMenu(), and made it
        return a GtkWidget.

2020-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260650.
        https://bugs.webkit.org/show_bug.cgi?id=211172

        It is breaking internal bots (Requested by youenn on #webkit).

        Reverted changeset:

        "Call STDynamicActivityAttributionPublisher in the WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=210772
        https://trac.webkit.org/changeset/260650

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

        Web Inspector: Uncaught Exception: SyntaxError: Unexpected identifier 'E'. Expected either a closing ']' or a ',' following an array element.
        https://bugs.webkit.org/show_bug.cgi?id=211163

        Reviewed by Joseph Pecoraro.

        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::updateFindString):
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::updateFindString):
        Use the newly exposed `JSON::Value::escapeString` to ensure that the `findString` will not
        throw a JavaScript exception when placed in the `InspectorFrontendAPI` call.

2020-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for key events
        https://bugs.webkit.org/show_bug.cgi?id=211128

        Reviewed by Adrian Perez de Castro.

        Handle key-pressed and key-released events using a GtkEventControllerKey. To receive key events the widget needs
        to be focused, so also implement GtkWidgetClass::grab_focus and handle enter and leave focus events. GTK4 needs
        the widget used by the key bindings translator to be added to a parent to be able to forward key events, so it's
        now added as a child internal widget of the WebKitWeViewBase.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewChildIsInternalWidget):
        (webkitWebViewBaseContainerRemove):
        (webkitWebViewBaseContainerForall):
        (webkitWebViewBaseFocusEnter):
        (webkitWebViewBaseFocusLeave):
        (webkitWebViewBaseKeyPressed):
        (webkitWebViewBaseKeyReleased):
        (webkitWebViewBaseGrabFocus):
        (webkitWebViewBaseConstructed):
        (webkit_web_view_base_class_init):
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::KeyBindingTranslator::KeyBindingTranslator):
        (WebKit::KeyBindingTranslator::~KeyBindingTranslator):
        (WebKit::handleCustomKeyBindings):
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/KeyBindingTranslator.h:
        (WebKit::KeyBindingTranslator::widget const):
        (WebKit::KeyBindingTranslator::destroyed):

2020-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text manipulation] Add a userInfo dictionary to _WKTextManipulationToken
        https://bugs.webkit.org/show_bug.cgi?id=211151
        <rdar://problem/62329534>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (createUserInfo):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _completeTextManipulationForItems:completion:]):
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h:
        * UIProcess/API/Cocoa/_WKTextManipulationToken.mm:
        (-[_WKTextManipulationToken setUserInfo:]):
        (-[_WKTextManipulationToken userInfo]):

        Add a new `userInfo` dictionary to `_WKTextManipulationToken`, which contains several named
        `NSString` keys.

        (-[_WKTextManipulationToken isEqualToTextManipulationToken:includingContentEquality:]):
        (-[_WKTextManipulationToken _descriptionPreservingPrivacy:]):

2020-04-28  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r260407): Over-release of NSGraphicsContext in WebKit::convertPlatformImageToBitmap()
        <https://webkit.org/b/211160>

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::convertPlatformImageToBitmap): Use retainPtr() instead
        of adoptNS() to fix the over-release.

2020-04-28  David Kilzer  <ddkilzer@apple.com>

        IPC::Decoder::isValid() should just be a nullptr check
        <https://webkit.org/b/211152>
        <rdar://problem/62552699>

        Reviewed by Darin Adler.

        * Platform/IPC/Decoder.h:
        (IPC::Decoder::isValid const): Change to nullptr check.  I
        reviewed the code in Decoder.{cpp,h}, and I didn't see
        m_bufferPos being set without a bounds check.  Also added
        WARN_UNUSED_RETURN to make sure the result is always checked.

2020-04-28  Daniel Bates  <dabates@apple.com>

        Move WebPage::textInputContextsInRect() to WebPageIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=211136

        Reviewed by Eric Carlson.

        The function WebPage::textInputContextsInRect is very specific to a client on iOS.
        Although it's tempting to keep this cross-platform because its implementation does
        not make use of iOS-specific technologies it does a very specific operation, the
        result of which is a list of contexts to editable elements on the page. The contexts
        provide enough info for the specific iOS client, but not enough to ever be useful
        to any other client. Therefore move it to WebPageIOS.mm.

        Only Mac and iOS were ever using this function. The former only for testing purposes
        that have since been removed.

        A side effect of this change is that I also move WebPageProxy::textInputContextsInRect()
        from WebPageProxy.cpp to WebPageProxyIOS.mm.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::textInputContextsInRect): Deleted; moved to WebPageProxyIOS.mm.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::textInputContextsInRect): Moved from WebPageProxy.cpp.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textInputContextsInRect): Deleted; moved to WebPageIOS.mm.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::textInputContextsInRect): Moved from WebPage.cpp.

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

        [iOS][WK2] Drop process assertion logic for holding locked files
        https://bugs.webkit.org/show_bug.cgi?id=206910

        Reviewed by Alex Christensen.

        Drop process assertion logic for holding locked files as it is causing issues and
        should no longer be needed.

        The intention of this code was that the Network Process would send a
        SetIsHoldingLockedFiles(bool) IPC to the UIProcess whenever there are pending
        SQLite transactions and the UIProcess would then take a process assertion on behalf
        of the WebProcess (or release it) to prevent / allow suspension.

        This approach has some issues:
        1. It was noisy in terms of IPC
        2. Because it relies on an IPC to the UIProcess to keep running, it was inherently
           racy
        3. We already have logic to deal with suspension in the network / web processes.
           The UIProcess sends a PrepareForSuspension IPC to its child processes. In turn,
           those processes will make sure to suspend their database threads to prevent any
           further database work. The child processes would then respond to the
           PrepareForSuspension IPC to let the UIProcess know they are ready to suspend.
           The 2 approaches were conflicting, because after the PrepareForSuspension IPC is
           sent, the child process could process a transaction and send the
           SetIsHoldingLockedFiles() IPC to the UIProcess which would incorrectly cancel the
           suspension.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::m_messagePortChannelRegistry): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebSQLiteDatabaseTracker.cpp: Removed.
        * Shared/WebSQLiteDatabaseTracker.h: Removed.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didSetAssertionState):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_nonVisibleProcessCleanupTimer):
        (WebKit::m_webSQLiteDatabaseTracker): Deleted.
        * WebProcess/WebProcess.h:

2020-04-28  Noam Rosenthal  <noam@webkit.org>

        Implement FCP (first contentful paint)
        https://bugs.webkit.org/show_bug.cgi?id=208499

        Reviewed by Simon Fraser.

        Add an experimental runtime flag for paint-timing (paintTimingEnabled).

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPaintTimingEnabled):
        (WKPreferencesGetPaintTimingEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):

2020-04-28  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Align upon the name isCallable instead of isFunction
        https://bugs.webkit.org/show_bug.cgi?id=211140

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):

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

        Web Inspector: find dialog does not populate search string from system find pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=113588
        <rdar://problem/19281466>

        Reviewed by Brian Burg.

        * UIProcess/Inspector/mac/WKInspectorWKWebView.h:
        * UIProcess/Inspector/mac/WKInspectorWKWebView.mm:
        (-[WKInspectorWKWebView dealloc]): Added.
        (-[WKInspectorWKWebView setInspectorWKWebViewDelegate:]):
        (-[WKInspectorWKWebView becomeFirstResponder]): Added.
        (-[WKInspectorWKWebView _handleWindowDidBecomeKey:]): Added.
        * UIProcess/Inspector/mac/WKInspectorViewController.h:
        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController inspectorWKWebViewDidBecomeActive:]): Added.
        * UIProcess/Inspector/WebInspectorProxy.h:
        * UIProcess/Inspector/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter inspectorViewControllerDidBecomeActive:]): Added.
        (WebKit::WebInspectorProxy::didBecomeActive): Added.
        * UIProcess/Inspector/RemoteWebInspectorProxy.h:
        * UIProcess/Inspector/mac/RemoteWebInspectorProxyMac.mm:
        (-[WKRemoteWebInspectorProxyObjCAdapter inspectorWKWebViewDidBecomeActive:]): Added.
        (WebKit::RemoteWebInspectorProxy::didBecomeActive): Added.
        Add a new delegate call chain that notifies the inspector proxy about when the inspector web
        view becomes active, at which point the inspector proxy can get the current find string and
        sent it to the inspector page.

        * WebProcess/Inspector/WebInspectorUI.messages.in:
        * WebProcess/Inspector/WebInspectorUI.h:
        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::updateFindString): Added.
        * WebProcess/Inspector/RemoteWebInspectorUI.messages.in:
        * WebProcess/Inspector/RemoteWebInspectorUI.h:
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::updateFindString): Added.
        Pass along the new find string to the frontend via `InspectorFrontendAPI.updateFindString`.

2020-04-28  Daniel Bates  <dabates@apple.com>

        Remove unused WebPage::focusTextInputContext()
        https://bugs.webkit.org/show_bug.cgi?id=211135

        Reviewed by Anders Carlsson.

        I accidentally forgot to remove the WebPage message and WebPage implementation that
        backed -_focusTextInputContext when I removed it in r260225. Now the implementation
        is unused. Let's remove it.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusTextInputContext): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-28  Christopher Reid  <chris.reid@sony.com>

        [Win] Bundle Inspector Resources in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=210942

        Reviewed by Fujii Hironori.

        Move CMake logic for the inspector resource copy script to
        Source/WebInspectorUI so it can be shared with Win and other platforms.

        * InspectorGResources.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:

2020-04-28  David Kilzer  <ddkilzer@apple.com>

        [MacCatalyst] Add missing symlinks to WebKit.frameworks
        <https://webkit.org/b/211102>
        <rdar://problem/62137758>

        Reviewed by Brent Fulgham.

        * WebKit.xcodeproj/project.pbxproj:
        (Make Frameworks Symbolic Link):
        - Update logic to run for macOS and macCatalyst builds.
        - Add output path.
        (Check For Inappropriate Objective-C Class Names):
        - Let Xcode have its way with the project file by adding a
          newline to the end of the script.
        (Check For Weak VTables and Externals): Ditto.
        (Add XPCServices symlink):
        - Update logic to run for macOS and macCatalyst builds.

2020-04-28  Kate Cheney  <katherine_cheney@apple.com>

        Create a mechanism to add missing ITP Database tables when the schema is updated
        https://bugs.webkit.org/show_bug.cgi?id=211004
        <rdar://problem/62261187>

        Reviewed by John Wilander.

        This patch updates the ITP database to better handle added tables to
        the schema. Currently the database store deletes and re-creates the
        database when any schema change is encountered. This is simple but
        would result in ITP data loss during schema updates, so this patch
        searches the schema for missing tables and adds any it finds.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::createTableQueries):
        Convert the tables array to a mapping of table names to their
        respective CREATE TABLE queries so we can add missing tables on the
        fly.
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        Remove call to createSchema() from the constructor. It makes more
        sense to base this on whether the file is new as opposed to whether
        one table exists.
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary):
        Checks for missing tables and adds them using a best-effort approach.
        Call createUniqueIndices() to call all CREATE UNIQUE INDEX queries,
        even though we may not need them all. It is much simpler than to
        associate each query with its table, and it doesn't hurt to call
        again.

        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        Add missing tables instead of deleting the old database file. Changed
        the function name to reflect this. Deleted a FIXME which this patch
        addresses but added a new FIXME for migrating data when adding new
        columns, which this patch does not address.
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectTableSchema): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndDropOldDatabaseIfNecessary): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::statisticsDatabaseHasAllTables):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::statisticsDatabaseHasAllTables):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _statisticsDatabaseHasAllTables:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::statisticsDatabaseHasAllTables):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::statisticsDatabaseHasAllTables):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Added an SPI call to test that the database schema includes all
        tables. This tests the database is not dropped when a new
        table is added upon opening the database.

2020-04-28  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Global preferences are not accessible in the WebContent process when CFPrefs direct mode is enabled
        https://bugs.webkit.org/show_bug.cgi?id=211075
        <rdar://problem/61866711>

        Reviewed by Brent Fulgham.

        Global preferences in the domain 'kCFPreferencesAnyApplication' are not readable in the WebContent process when CFPrefs direct mode
        is enabled. Fix this by transferring a select set of global preferences to the WebContent process on startup.

        API test: WebKit.GlobalPreferences

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::setGlobalPreferences):
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Remove the WebKit.plist for Feature Flags
        https://bugs.webkit.org/show_bug.cgi?id=210534

        Unreviewed project file clean-up.

        A follow-up patch for r260599. Remove the reference to the WebKit.plist from project.pbxproj.

        * WebKit.xcodeproj/project.pbxproj:

2020-04-28  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API tests after r260790
        https://bugs.webkit.org/show_bug.cgi?id=211093

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        Only call the completion handler once.

2020-04-28  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt kMTSupportNotification_ShouldPlayHDRVideoChanged notification
        https://bugs.webkit.org/show_bug.cgi?id=211028

        Reviewed by Eric Carlson.

        Adopt a new notification which signals that the receiver should re-query for HDR support.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::webProcessPoolHighDynamicRangeDidChangeCallback):
        (WebKit::WebProcessPool::registerHighDynamicRangeChangeCallback):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::registerHighDynamicRangeChangeCallback):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:

2020-04-28  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Unreviewed build fix for Clang 10

        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:
        (webkitInputMethodContextImplGtkGetPreedit): Use the "f" suffix to make constants float to
        prevent a narrowing double-to-float narrowing issue which Clang 10 considers an error. This
        only happens with GTK4 because GdkRGBA now has float members. Using float constants is fine
        with GTK3, because promoting floats to doubles never loses precision.

2020-04-28  Daniel Bates  <dabates@apple.com>

        [iOS] Marked text editor state only needs to be set when layout is up-to-date
        https://bugs.webkit.org/show_bug.cgi?id=211087

        Reviewed by Darin Adler.

        Organize the code to reflect reality: editor state only has marked text rects if layout is
        up-to-date. So, move these fields to from EditorState to EditorState::PostLayoutData.

        While I am in this area of the code I also moved the editor state originIdentifierForPasteboard
        to the top of the struct as it is aesthetically more pleasing to me to have the post layout
        data last. It likely also produces better bit packing though this wasn't my primary motivation.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode const): 
        (WebKit::EditorState::PostLayoutData::decode):
        Move encoding and decoding of marked test fields from EditorState to EditorState::PostLayoutData.

        (WebKit::operator<<): Fix up code now that marked text fields are in PostLayoutData.
        * Shared/EditorState.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textFirstRect]): Update code now that this data is in the post layout data struct.
        (-[WKContentView textLastRect]): Ditto.
        (-[WKContentView _updateChangedSelection:]): Ditto.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::convertContentToRootViewSelectionRects): Added.
        (WebKit::WebPage::getPlatformEditorState const): Update now that marked text fields are in the
        post layout data struct. Simplify the early return as well: only continue if we're not missing post
        layout data. If we're missing post layout data then we either do not have a frame view or layout is
        not up-to-data. Either way we don't want to do anything. I also stored the FrameView in a Ref<> to
        future proof the code should future code cause view detachment and destruction. Note that layout
        could cause this, but the code currently covers this case. So, taking a Ref<> is about future proofing.
        (WebKit::WebPage::getRectsForGranularityWithSelectionOffset): Update to use convertContentToRootViewSelectionRects().
        (WebKit::WebPage::getRectsAtSelectionOffsetWithText): Ditto.
        (WebKit::WebPage::requestAutocorrectionData): Use Vector::map() to convert the selection rects to
        from content to root view FloatRects.
        (WebKit::WebPage::convertSelectionRectsToRootView): Deleted.

2020-04-28  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Fix sandbox violation when uploading a file
        https://bugs.webkit.org/show_bug.cgi?id=210937

        Reviewed by Darin Adler.

        On iOS, the file chooser needs access to frontboard and icon services in the WebContent process. Create and
        consume extensions for these services when choosing files. When done, the extensions should be revoked. This
        patch also fixes an out-of-bounds array exception when running the test created for this patch. Additionally,
        the function thumbnailSizedImageForImage should return a RetainPtr<UIImage>, since it seems unsafe to not
        retain the UIImage after the image context is released in that function.

        Test: fast/forms/file/open-file-panel-crash.html

        * Shared/ios/WebIconUtilities.h:
        * Shared/ios/WebIconUtilities.mm:
        (WebKit::thumbnailSizedImageForImage):
        (WebKit::fallbackIconForFile):
        (WebKit::iconForImageFile):
        (WebKit::iconForVideoFile):
        (WebKit::iconForFile):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[_WKFileUploadItem displayImage]):
        (-[_WKImageFileUploadItem displayImage]):
        (-[_WKVideoFileUploadItem displayImage]):
        (-[WKFileUploadPanel documentPicker:didPickDocumentsAtURLs:]):
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMediaWithInfo:]):
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMultipleMediaWithInfo:]):
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::createIconForFiles):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for motion events
        https://bugs.webkit.org/show_bug.cgi?id=211073

        Reviewed by Adrian Perez de Castro.

        Handle enter, leave and motion events using a GtkEventControllerMotion.

        * Shared/NativeWebMouseEvent.h:
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseEnter):
        (webkitWebViewBaseMotion):
        (webkitWebViewBaseLeave):
        (webkitWebViewBaseConstructed):

2020-04-28  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes late April 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=211099

        Unreviewed build fix.

        * NetworkProcess/NetworkLoad.cpp: Add mising WebCoreArgumentCoders.h header.
        * WebProcess/Automation/WebAutomationDOMWindowObserver.cpp:
        (WebKit::WebAutomationDOMWindowObserver::WebAutomationDOMWindowObserver): Add namespace to
        WebCore::DOMWindow usage.

2020-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for scroll events
        https://bugs.webkit.org/show_bug.cgi?id=211045

        Reviewed by Adrian Perez de Castro.

        Use an event controller to connect to scroll signal and get the GdkEvent.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseHandleWheelEvent):
        (webkitWebViewBaseScroll):
        (webkitWebViewBaseConstructed):

2020-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4][Wayland] Add support for rendering web view contents
        https://bugs.webkit.org/show_bug.cgi?id=211021

        Reviewed by Adrian Perez de Castro.

        Implement GtkWidgetClass::snapshot and GtkWidgetClass::measure instead of GtkWidgetClass::draw and
        GtkWidgetClass::get_preferred_width|height. Add AcceleratedBackingStore::snapshot() pure virtual to be used with
        GTK4 instead of AcceleratedBackingStore::paint(), and implement it for Wayland.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSnapshot): Call AcceleratedBackingStore::snapshot().
        (webkitWebViewBaseMeasure): Return the natural width/height for the WebView.
        (webkit_web_view_base_class_init): Add implementations for snapshot and measure vfuncs.
        * UIProcess/gtk/AcceleratedBackingStore.h:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureGLContext): Always try to realize the context here, since that
        can fail too.
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureTexture): Helper to share the code to prepare the texture.
        (WebKit::AcceleratedBackingStoreWayland::downloadTexture): Helper to share the code to download the texture.
        (WebKit::AcceleratedBackingStoreWayland::snapshot): Use gtk_snapshot_append_texture().
        (WebKit::AcceleratedBackingStoreWayland::paint): Use new helpers.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::snapshot):
        * UIProcess/gtk/AcceleratedBackingStoreX11.h:
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Force accelerated compositing mode for GTK4.

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

        Web Inspector: Storage: can see third-party cookies
        https://bugs.webkit.org/show_bug.cgi?id=211092
        <rdar://problem/62469078>

        Reviewed by Chris Dumez.

        Test: http/tests/inspector/page/get-cookies.html

        After r259649, Web Inspector no longer incorrectly bails when attempting to get cookies if
        the last resource loaded by a given frame does not have cookie access. We also need to check
        whether the resource we're attempting to get cookies for is first-party or third-party so as
        to reflect the current cookie policy.

        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::shouldBlockCookies):

2020-04-27  Brent Fulgham  <bfulgham@apple.com>

        Follow-up change after r260798.

        Allow iOS to consume the 'com.apple.cfprefsd.agent' endpoint if issued by the UIProcess.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-04-27  Brent Fulgham  <bfulgham@apple.com>

        [MacCatalyst] Dynamic access to accessibility services is incomplete 
        https://bugs.webkit.org/show_bug.cgi?id=211100
        <rdar://problem/62133491>

        Reviewed by Darin Adler.

        Testing of MacCatalyst-based apps shows that using dynamic sandbox extensions to support accessibility
        features is incomplete. In addition to the 'com.apple.cfprefsd.daemon' process needed on macOS and iOS,
        we also need access to 'com.apple.cfprefsd.agent'.

        This can only be tested manually in a MacCatlyst build, though existing accessibility tests will
        confirm no regressions in iOS and macOS.

        The changes are as follows:
        1. Change WebProcessCreationParameters::preferencesExtensionHandle to a handle array.
        2. Register (and unregister) for the accessibility enabled notification in MacCatalyst.
        3. Open a connection 'com.apple.cfprefsd.agent' (in addition to the existing 'com.apple.cfprefsd.daemon')
           in MacCatalyst builds.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::unblockPreferenceServiceIfNeeded):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::unblockPreferenceService):
        * WebProcess/com.apple.WebProcess.sb.in:

2020-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Prevent WebPasteboardProxy IPC messages from unconditionally requesting pasteboard types
        https://bugs.webkit.org/show_bug.cgi?id=211061
        <rdar://problem/62088185>

        Reviewed by Tim Horton.

        Tighten IPC message handling in WebPasteboardProxy, such that a web content process is unable to arbitrarily
        request pasteboard types (and other metadata that depends on pasteboard types, such as the number of files
        on the pasteboard).

        This extends the mechanisms added in r259151 by distinguishing between allowing the web process to request
        type information from the pasteboard, and allowing the web process to request both types and data. In the
        case of drag and drop, the former is required by the web process from the moment the drag session enters
        the platform web view; however, the latter is required only after a drop is performed.

        We utilize this new check, `canAccessPasteboardTypes`, in seven existing IPC message handlers that either
        directly return the list of types, or return metadata from which pasteboard types may be deduced.

        See below for more details; covered by existing API and layout tests.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::grantAccessToCurrentTypes):
        (WebKit::WebPasteboardProxy::grantAccessToCurrentData):

        Split the pasteboard access check into two helpers: one to determine whether the web process is allowed to
        request pasteboard types, and another to determine whether the web process is allowed to request pasteboard
        data (in addition to types).

        (WebKit::WebPasteboardProxy::grantAccess):
        (WebKit::WebPasteboardProxy::revokeAccess):

        Refactor these to use `PasteboardAccessInformation`; see below for more details.

        (WebKit::WebPasteboardProxy::canAccessPasteboardTypes const):

        Return true as long as the accessType is nonnull; this is because either `Types` or `TypesAndData` is
        sufficient for access to pasteboard types.

        (WebKit::WebPasteboardProxy::canAccessPasteboardData const):
        (WebKit::WebPasteboardProxy::accessType const):

        Add a private helper method to return the access type (`nullopt` for no access, `PasteboardAccessType::Types`
        for access to types only, and `PasteboardAccessType::TypesAndData` for access to data in addition to types)
        for the given named pasteboard.

        (WebKit::WebPasteboardProxy::didModifyContentsOfPasteboard):

        Refactor this to use `PasteboardAccessInformation`.

        (WebKit::WebPasteboardProxy::getPasteboardTypes):
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):

        Adopt canAccessPasteboardTypes here, and update the FIXME to state that we should really be using
        canAccessPasteboardData instead. This is blocked on refactoring some more drag and drop code, such
        that accessing the list of file names on the pasteboard isn't necessary before the drop is handled.

        (WebKit::WebPasteboardProxy::containsURLStringSuitableForLoading):
        (WebKit::WebPasteboardProxy::getNumberOfFiles):
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        (WebKit::WebPasteboardProxy::containsStringSafeForDOMToReadForType):

        Adopt the canAccessPasteboardTypes check in various places.

        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::grantAccess):
        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::revokeAccess):
        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::accessType const):

        Introduce PasteboardAccessInformation, which replaces the current `std::pair<uint64_t, WeakHashSet<WebProcessProxy>>`
        that is used to represent which web processes are allowed to access certain changeCounts, for a given pasteboard name.
        Instead of maintaining a changeCount and set of processes, we now maintain a changeCount and list of (process, access
        type) pairs. Each item in this list tracks whether the process that has been granted access should be allowed to read
        only pasteboard types, or both types and data.

        (WebKit::WebPasteboardProxy::revokeAccessToAllData): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):

        When updating the drag session (i.e. as the user drags over the web view), ensure that the web content
        process is able to request pasteboard types.

        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::allPasteboardItemInfo):
        (WebKit::WebPasteboardProxy::informationForItemAtIndex):
        (WebKit::WebPasteboardProxy::getPasteboardItemsCount):
        (WebKit::WebPasteboardProxy::containsStringSafeForDOMToReadForType):
        (WebKit::WebPasteboardProxy::containsURLStringSuitableForLoading):

        Update these method signatures.

        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:

        Mark more IPC messages as `WantsConnection` so that we can use the `IPC::Connection` argument in the message handlers.

2020-04-27  Alex Christensen  <achristensen@webkit.org>

        Stop waiting for a BinarySemaphore on the main thread in the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=211080
        <rdar://problem/62377357>

        Reviewed by Darin Adler and Chris Dumez.

        There was an out-of-date comment suggesting we needed to use a semaphore, but we've since added these in the destructor:
        RELEASE_ASSERT(!m_statisticsStore);
        RELEASE_ASSERT(!m_persistentStorage);
        This indicates that flushAndDestroyPersistentStore is called before the destructor, at which time it is safe to add a reference to keep it alive.
        WebResourceLoadStatisticsStore is also marked as WTF::DestructionThread::Main so this should do everything we need.
        We also flush these databases to disk before closing like we did cookies.

        In order to keep tests working as they are, I needed to make recreateResourceLoadStatisticStore have a CompletionHandler and have all
        WebResourceLoadStatisticsStores share the same queue to serialize background tasks between WebResourceLoadStatisticsStores with and without database stores
        sequentially to avoid opening a SQLiteDatabase before the previous WebResourceLoadStatisticsStore had closed it.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::sharedStatisticsQueue):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::destroyResourceLoadStatistics):
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        * NetworkProcess/NetworkSession.h:

2020-04-27  Alex Christensen  <achristensen@webkit.org>

        Fix tests after r260764
        https://bugs.webkit.org/show_bug.cgi?id=211093

        Some tests were asserting in takeAsyncReplyHandler.
        Calling addAsyncReplyHandler before sending the message fixes it.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):

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

        [iOS][WK2] Drop "com.apple.WebKit.DatabaseActivity" UIKit background activity
        https://bugs.webkit.org/show_bug.cgi?id=211084

        Reviewed by Geoffrey Garen.

        Drop "com.apple.WebKit.DatabaseActivity" UIKit background activity in the UIProcess now that local storage
        has been moved to the network process.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setUpSQLiteDatabaseTrackerClient]): Deleted.

2020-04-27  Ryan Haddad  <ryanhaddad@apple.com>

        [Cocoa] stop using out arguments for document attributes when converting to attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=211048

        Unreviewed partial revert of r260739 to remove unexpected logging that broke Catalina-Release-WK2-Perf tests.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::updateTaskWithFirstPartyForSameSiteCookies):

2020-04-27  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r219050): Remove more code only needed for building with OS X Yosemite
        <https://webkit.org/b/211088>
        <rdar://problem/62452487>

        Reviewed by Chris Dumez.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/mac/MachUtilities.cpp:
        (setMachPortQueueLength):
        (machExceptionPort): Deleted.
        (setMachExceptionPort): Deleted.
        * Platform/mac/MachUtilities.h:
        - Delete unused code.

2020-04-27  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] After r258891, r255119 can be reverted
        https://bugs.webkit.org/show_bug.cgi?id=211083

        Unreviewed revert of r255119.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-04-27  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed MacCatalyst build fix after r260739.

        * UIProcess/Cocoa/TextCheckingController.mm:
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:

2020-04-27  Darin Adler  <darin@apple.com>

        Another try at fixing the ENABLE(PLATFORM_DRIVEN_TEXT_CHECKING) build

        * UIProcess/Cocoa/TextCheckingController.mm:
        (WebKit::TextCheckingController::replaceRelativeToSelection):
        Convert an NSAttributedString to a WebCore::AttributedString using
        argument list syntax.

2020-04-27  Alex Christensen  <achristensen@webkit.org>

        Fix assertion after r260709
        https://bugs.webkit.org/show_bug.cgi?id=211007
        <rdar://problem/62457303>

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        Not only did I spell javascript wrong, I should've used the special protocolIsJavaScript() method.

2020-04-27  Alex Christensen  <achristensen@webkit.org>

        Reduce use of WebPageProxy::VoidCallback
        https://bugs.webkit.org/show_bug.cgi?id=210944

        Reviewed by Darin Adler.

        Use sendWithAsyncReply and CompletionHandler<void()> instead.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _executeEditCommand:argument:completion:]):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::becomeFirstResponder):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::executeEditCommand):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::focusNextFocusedElement):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pasteWithCompletionHandler:]):
        (-[WKContentView moveByOffset:]):
        (-[WKContentView _selectPositionAtPoint:stayingWithinFocusedElement:completionHandler:]):
        (-[WKContentView selectPositionAtBoundary:inDirection:fromPoint:completionHandler:]):
        (-[WKContentView moveSelectionAtBoundary:inDirection:completionHandler:]):
        (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView executeEditCommandWithCallback:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::focusNextFocusedElement):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::executeEditCommandWithCallback):
        (WebKit::WebPage::setInitialFocus):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::moveSelectionByOffset):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::focusNextFocusedElement):

2020-04-27  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed sandbox compile fix.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-04-27  Philippe Normand  <pnormand@igalia.com>

        [GTK] ENABLE(OPENGL) remmants...
        https://bugs.webkit.org/show_bug.cgi?id=211077

        Reviewed by Adrian Perez de Castro.

        ENABLE(OPENGL) was renamed to ENABLE(GRAPHICS_CONTEXT_GL) in
        r254064 but not in all the code base...
        
        * UIProcess/gtk/HardwareAccelerationManager.cpp:
        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager):

2020-04-27  Daniel Bates  <dabates@apple.com>

        Caret may be placed in the wrong spot for text input context that is a form control
        https://bugs.webkit.org/show_bug.cgi?id=210939
        <rdar://problem/61943089>

        Reviewed by Darin Adler.

        Find the closest editable position in the element for the point using the
        newly introduced closestEditablePositionInElementForAbsolutePoint().

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::focusTextInputContextAndPlaceCaret):

2020-04-27  Darin Adler  <darin@apple.com>

        Fix ENABLE(PLATFORM_DRIVEN_TEXT_CHECKING) build

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h:
        Change "class AttributedString" to "struct AttributedString".

2020-04-27  Philippe Normand  <pnormand@igalia.com>

        [WPE] about:gpu page is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=211076

        Reviewed by Adrian Perez de Castro.

        ENABLE(OPENGL) was renamed to ENABLE(GRAPHICS_CONTEXT_GL) in
        r254064 but not in all the code base...

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU):

2020-04-26  Darin Adler  <darin@apple.com>

        Replace more uses of live ranges with SimpleRange
        https://bugs.webkit.org/show_bug.cgi?id=211058

        Reviewed by Antti Koivisto.

        * Shared/API/Cocoa/WKDataDetectorTypesInternal.h:
        (fromWKDataDetectorTypes): Updated since DataDetectorTypes
        is now an enum class. Also got rid of special "none" and "all" values.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
        (-[WKWebProcessPlugInRangeHandle detectDataWithTypes:context:]): Updated
        since DataDetection now takes a SimpleRange.

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):
        Use SimpleRange.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::detectDataInAllFrames): Ditto.

        * WebProcess/WebPage/WebPage.h: Removed unneeded include of DataDetection.h.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation): Use SimpleRange.

2020-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make it possible to build with GTK4 without errors
        https://bugs.webkit.org/show_bug.cgi?id=210967

        Reviewed by Adrian Perez de Castro.

        Add ifdefs when needed to make it possible to complete a build with GTK4. This way we can continue working on
        every feature individually and checking it actually works. Move public headers containing API specific to GTK3
        and GTK4 into their own gtk3 and gtk4 directory.

        * PlatformGTK.cmake:
        * Shared/API/glib/WebKitContextMenuItem.cpp:
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/NativeWebWheelEvent.h:
        * Shared/glib/WebContextMenuItemGlib.cpp:
        (WebKit::WebContextMenuItemGlib::WebContextMenuItemGlib):
        (WebKit::WebContextMenuItemGlib::buildActionName const):
        (WebKit::WebContextMenuItemGlib::createActionIfNeeded):
        * Shared/glib/WebContextMenuItemGlib.h:
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/gtk/WebEventFactory.h:
        * SourcesGTK.txt:
        * UIProcess/API/C/WKNativeEvent.h:
        * UIProcess/API/glib/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::filterKeyEvent):
        * UIProcess/API/glib/InputMethodFilter.h:
        * UIProcess/API/glib/WebKitInstallMissingMediaPluginsPermissionRequest.cpp:
        (createGstInstallPluginsContext):
        * UIProcess/API/glib/WebKitPrivate.cpp:
        * UIProcess/API/glib/WebKitUIClient.cpp:
        (UIClient::setWindowFrameTimerFired):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkit_web_context_class_init):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRunAsModal):
        (webkitWebViewPopulateContextMenu):
        * UIProcess/API/gtk/InputMethodFilterGtk.cpp:
        (WebKit::InputMethodFilter::platformEventKeyIsKeyPress const):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        (WebKit::PageClientImpl::startDrag):
        (WebKit::PageClientImpl::doneWithTouchEvent):
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        * UIProcess/API/gtk/WebKitEmojiChooser.h:
        * UIProcess/API/gtk/WebKitInputMethodContextGtk.cpp:
        (webkit_input_method_context_filter_key_event):
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:
        (webkitInputMethodContextImplGtkFilterKeyEvent):
        (webkitInputMethodContextImplGtkSetClientWindow):
        * UIProcess/API/gtk/WebKitPopupMenu.cpp:
        (WebKit::WebKitPopupMenu::WebKitPopupMenu):
        (WebKit::WebKitPopupMenu::showPopupMenu):
        (WebKit::WebKitPopupMenu::hidePopupMenu):
        (WebKit::WebKitPopupMenu::cancelTracking):
        * UIProcess/API/gtk/WebKitPopupMenu.h:
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
        (webkitScriptDialogAccept):
        (webkitScriptDialogDismiss):
        (webkitScriptDialogSetUserInput):
        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        * UIProcess/API/gtk/WebKitScriptDialogImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        (webkitWebViewBaseSetToplevelOnScreenWindow):
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseContainerForall):
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseConstructed):
        (webkitWebViewBaseSizeAllocate):
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        (webkitWebViewBaseSetEnableBackForwardNavigationGesture):
        (webkitWebViewBaseBeginBackSwipeForTesting):
        (webkitWebViewBaseCompleteBackSwipeForTesting):
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseWillSwapWebProcess):
        (webkitWebViewBaseDidExitWebProcess):
        (webkitWebViewBaseDidRelaunchWebProcess):
        (webkitWebViewBaseTakeViewSnapshot):
        (webkitWebViewBaseDidStartProvisionalLoadForMainFrame):
        (webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame):
        (webkitWebViewBaseDidFinishLoadForMainFrame):
        (webkitWebViewBaseDidFailLoadForMainFrame):
        (webkitWebViewBaseDidSameDocumentNavigationForMainFrame):
        (webkitWebViewBaseDidRestoreScrollPosition):
        (webkitWebViewBaseShowEmojiChooser):
        (webkitWebViewBaseRequestPointerLock):
        (webkitWebViewBaseDidLosePointerLock):
        (webkitWebViewBaseSynthesizeCompositionKeyPress):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewDialog.cpp:
        * UIProcess/API/gtk/WebKitWebViewDialog.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewAuthenticate):
        (webkitWebViewScriptDialog):
        (webkitWebViewRunFileChooser):
        (webkitWebViewMaximizeWindow):
        (webkitWebViewMinimizeWindow):
        (webkitWebViewRestoreWindow):
        * UIProcess/API/gtk3/WebKitContextMenuItem.h: Copied from Source/WebKit/UIProcess/API/gtk/WebKitContextMenuItem.h.
        * UIProcess/API/gtk3/WebKitInputMethodContext.h: Copied from Source/WebKit/UIProcess/API/gtk/WebKitInputMethodContext.h.
        * UIProcess/API/gtk4/WebKitContextMenuItem.h: Renamed from Source/WebKit/UIProcess/API/gtk/WebKitContextMenuItem.h.
        * UIProcess/API/gtk4/WebKitInputMethodContext.h: Renamed from Source/WebKit/UIProcess/API/gtk/WebKitInputMethodContext.h.
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        * UIProcess/Inspector/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformSave):
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        * UIProcess/Inspector/gtk/WebKitInspectorWindow.cpp:
        (webkit_inspector_window_init):
        (webkitInspectorWindowNew):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::tryEnsureGLContext):
        (WebKit::AcceleratedBackingStoreWayland::paint):
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::update):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        * UIProcess/gtk/DragAndDropHandler.h:
        * UIProcess/gtk/GestureController.cpp:
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::KeyBindingTranslator::KeyBindingTranslator):
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/KeyBindingTranslator.h:
        * UIProcess/gtk/PointerLockManager.cpp:
        (WebKit::PointerLockManager::lock):
        (WebKit::PointerLockManager::unlock):
        * UIProcess/gtk/PointerLockManager.h:
        * UIProcess/gtk/PointerLockManagerWayland.cpp:
        (WebKit::PointerLockManagerWayland::lock):
        * UIProcess/gtk/PointerLockManagerX11.cpp:
        (WebKit::PointerLockManagerX11::didReceiveMotionEvent):
        * UIProcess/gtk/WebColorPickerGtk.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::show):
        (WebKit::WebContextMenuProxyGtk::showContextMenuWithItems):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp:
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::AcceleratedSurfaceX11::AcceleratedSurfaceX11):
        (WebKit::AcceleratedSurfaceX11::createPixmap):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print):

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

        Make loadURLIntoChildFrame private and non-exported
        https://bugs.webkit.org/show_bug.cgi?id=211051

        Reviewed by Darin Adler.

        Adapt createFrame to strictly create a subframe and
        not load anything.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createFrame):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2020-04-27  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] CallData/ConstructData should include CallType/ConstructType
        https://bugs.webkit.org/show_bug.cgi?id=211059

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::construct):
        (WebKit::NPJSObject::invoke):

2020-04-27  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, reverting r260672.

        [GTK] WebInspector tests are timing out after r260672

        Reverted changeset:

        "[Win] Bundle Inspector Resources in Release builds"
        https://bugs.webkit.org/show_bug.cgi?id=210942
        https://trac.webkit.org/changeset/260672

2020-04-27  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, reverting r260696.

        Build fix after r260672, no needed since r260672 is also being reverted.

        Reverted changeset:

        "REGRESSION(210942): [GTK][WPE] Unreviewed, EWS build bots
        fail in compile-webkit step"
        https://bugs.webkit.org/show_bug.cgi?id=211014
        https://trac.webkit.org/changeset/260696

2020-04-26  Darin Adler  <darin@apple.com>

        [Cocoa] stop using out arguments for document attributes when converting to attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=211048

        Reviewed by Sam Weinig.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::updateTaskWithFirstPartyForSameSiteCookies): Use init instead of initWithString:@"".

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::AttributedString>::encode): Moved here from AttributedString.mm.
        (IPC::ArgumentCoder<WebCore::AttributedString>::decode): Ditto.

        * Shared/DocumentEditingContext.h: Updated to use WebCore::AttributeString.
        * Shared/DocumentEditingContext.mm:
        (IPC::ArgumentCoder<WebKit::DocumentEditingContext>::decode): Ditto.

        * Shared/WebCoreArgumentCoders.h: Added coder for WebCore::AttributedString.

        * Shared/mac/AttributedString.h: Removed.
        * Shared/mac/AttributedString.mm: Removed.

        * SourcesCocoa.txt: Removed AttributedString.mm.

        * UIProcess/API/Cocoa/WKWebView.mm: Updated to use WebCore::AttributedString.
        * UIProcess/Cocoa/TextCheckingController.mm: Ditto.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::attributedSubstringForProposedRange): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getContentsAsAttributedString): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync): Ditto.
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback): Ditto.

        * WebKit.xcodeproj/project.pbxproj: Removed AttributedString.h and AttributedString.mm.

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.h: Updated to use WebCore::AttributedString.
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.messages.in: Ditto.
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection): Ditto.
        (WebKit::TextCheckingControllerProxy::annotatedSubstringBetweenPositions): Ditto.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange): Updated since editingAttributedString
        returns a struct.
        (WebKit::WebPage::getContentsAsAttributedString): Updated to use SimpleRange and
        since attributedString returns a struct.

        * WebProcess/WebPage/WebPage.h: Updated to use WebCore::AttributedString.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDocumentEditingContext): Ditto.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync): Ditto.
        (WebKit::WebPage::handleSelectionServiceClick): Ditto.

2020-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rendering update steps should use Seconds for the timestamps
        https://bugs.webkit.org/show_bug.cgi?id=210990

        Reviewed by Daniel Bates.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::timestamp const):

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

        Remove unused class PlaybackSessionInterface
        https://bugs.webkit.org/show_bug.cgi?id=211031

        Reviewed by Daniel Bates.

        * WebProcess/cocoa/PlaybackSessionManager.h:

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

        Stop using live ranges in functions that return range of the selection
        https://bugs.webkit.org/show_bug.cgi?id=210396

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection): Remove use of live range.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange): Updated for changes
        to attributedString functions.
        (WebKit::WebPage::getContentsAsAttributedString): Ditto.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll): Use createLiveRange.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getSelectedRangeAsync): Ditto.
        (WebKit::WebPage::currentSelectionAsRange): Ditto.

        * WebProcess/WebPage/WebPage.h: Change m_rangeForDropSnapshot
        to use a SimpleRange instead of a live range.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::plainTextForContext): Overloaded for SimpleRange and
        Optional<SimpleRange> as needed by code below.
        (WebKit::plainTextForDisplay): Ditto.
        (WebKit::WebPage::getPlatformEditorState const): Use createLiveRange.
        (WebKit::WebPage::getSelectionContext): Remove use of live range.
        (WebKit::WebPage::didConcludeDrop): Ditto.
        (WebKit::WebPage::didConcludeEditDrag): Use createLiveRange.
        (WebKit::WebPage::computeAndSendEditDragSnapshot): Ditto.
        (WebKit::WebPage::startAutoscrollAtPosition): Remove use of
        live range.
        (WebKit::WebPage::requestEvasionRectsAboveSelection): Use
        createLiveRange.
        (WebKit::WebPage::requestDictationContext): Remove use of live range.
        (WebKit::WebPage::replaceSelectedText): Use createLiveRange.
        (WebKit::WebPage::applyAutocorrectionInternal): Ditto.
        (WebKit::WebPage::autocorrectionContext): Remove use of live range.
        (WebKit::WebPage::requestDocumentEditingContext): Use createLiveRange.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getPlatformEditorState const): Remove use of
        live range.
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):
        Updated for change to HTMLConverter functions.
        (WebKit::WebPage::handleSelectionServiceClick): Ditto.
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        Remove use of live range.

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix internal iOS build.
        https://bugs.webkit.org/show_bug.cgi?id=210521

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformBeginApplePaySetup):

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Move ApplePay code from WebKitAdditions to WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=210521

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Move ApplePay code from WebKitAdditions to WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=210521

        Reviewed by Andy Estes.

        * DerivedSources.make:
        * Scripts/webkit/messages.py:
        * Shared/ApplePay/ApplePayPaymentSetupFeatures.h: Added.
        (WebKit::PaymentSetupFeatures::platformFeatures const):
        * Shared/ApplePay/ApplePayPaymentSetupFeatures.mm: Added.
        (WebKit::PaymentSetupFeatures::PaymentSetupFeatures):
        (WebKit::PaymentSetupFeatures::encode const):
        (WebKit::PaymentSetupFeatures::decode):
        (WebKit::PaymentSetupFeatures::operator Vector<Ref<WebCore::ApplePaySetupFeature>> const):
        * Shared/ApplePay/PaymentSetupConfiguration.h: Added.
        (WebKit::PaymentSetupConfiguration::platformConfiguration const):
        * Shared/ApplePay/PaymentSetupConfiguration.mm: Added.
        (WebKit::toPlatformConfiguration):
        (WebKit::PaymentSetupConfiguration::PaymentSetupConfiguration):
        (WebKit::PaymentSetupConfiguration::encode const):
        (WebKit::PaymentSetupConfiguration::decode):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        (WebKit::WebPaymentCoordinatorProxy::finishConstruction): Deleted.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/ApplePay/cocoa/PaymentSetupConfiguration.mm: Added.
        (WebKitAdditions::toPlatformConfiguration):
        (WebKitAdditions::PaymentSetupConfiguration::PaymentSetupConfiguration):
        (WebKitAdditions::PaymentSetupConfiguration::encode const):
        (WebKitAdditions::PaymentSetupConfiguration::decode):
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::finishCreating):
        (WebKit::WebPaymentCoordinatorProxy::getSetupFeatures):
        (WebKit::WebPaymentCoordinatorProxy::beginApplePaySetup):
        (WebKit::WebPaymentCoordinatorProxy::endApplePaySetup):
        (WebKit::WebPaymentCoordinatorProxy::platformBeginApplePaySetup):
        (WebKit::WebPaymentCoordinatorProxy::platformEndApplePaySetup):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::finishDecoding):
        (IPC::finishEncoding):
        (IPC::ArgumentCoder<WebCore::PaymentInstallmentConfiguration>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentInstallmentConfiguration>::decode):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::getSetupFeatures):
        (WebKit::WebPaymentCoordinator::beginApplePaySetup):
        (WebKit::WebPaymentCoordinator::endApplePaySetup):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2020-04-25  Darin Adler  <darin@apple.com>

        [Cocoa] Deal with another round of Xcode upgrade checks
        https://bugs.webkit.org/show_bug.cgi?id=211027

        Reviewed by Alexey Proskuryakov.

        * WebKit.xcodeproj/project.pbxproj: Bump the upgrade check version.
        Add a base localization.

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Prepare to remove automatic URL->String conversion operators
        https://bugs.webkit.org/show_bug.cgi?id=211007

        Reviewed by Darin Adler.

        * Shared/API/APIError.h:
        (API::Error::failingURL const):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedURLAPI):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (setUpPagePolicyClient):
        * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm:
        (WebKit::reportAnErrorURL):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::requestUserMediaAuthorizationForFrame):
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::readURLFromPasteboard):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::cancel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::createNewPage):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame URL]):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didReceiveResponse):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):
        (WebKit::PDFPlugin::openWithNativeApplication):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performURLRequest):
        (WebKit::PluginView::performJavaScriptURLRequest):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::shouldForceUniversalAccessFromLocalURL):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::info const):
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::origin):

2020-04-25  Darin Adler  <darin@apple.com>

        Move URL to use StringView when returning substrings of the URL
        https://bugs.webkit.org/show_bug.cgi?id=210431

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRedirection): Use hasCredentials.
        (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const):
        Remove use of ASCIILiteral for setProtocol.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl): Updated for
        password name change.
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection): Ditto.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): Updated
        for password name change.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection): Ditto.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup): Updated for
        password name change.
        (WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest): Ditto.
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Ditto.
        (WebKit::NetworkDataTaskSoup::shouldAllowHSTSPolicySetting const):
        Use != to compare hosts, rather than hostsAreEqual.
        (WebKit::NetworkDataTaskSoup::shouldAllowHSTSProtocolUpgrade const):
        Refactored to use || to match the function above.

        * Shared/API/APIURL.h:
        (API::URL::host const): Removed validity check; WTF::URL::host
        returns null if the URL is invalid.
        (API::URL::protocol const): Ditto.
        (API::URL::path const): Ditto.
        (API::URL::lastPathComponent const): Ditto. Also added toString
        since WTF::URL::lastPathComponent now returns a StringView.

        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::didFinish): Use hasFragmentIdentifier.

        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk):
        Refactored a bit and use fileURLWithFileSystemPath and
        updated since lastPathComponent returns a StringView.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::pathExtension): Updated since lastPathComponent
        returns a StringView. Refactored a little.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        Use truncatedForUseAsBase.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Use != to compare hosts, rather than hostsAreEqual.
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction): Ditto.
        (WebKit::WebPageProxy::createNewPage): Ditto.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::assumeReadAccessToBaseURL):
        Use truncatedForUseAsBase.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::initializeAppBoundDomains):
        Don't use ASCIILiteral for argument to setProtocol.

        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        Use fileURLWithFileSystemPath, also refactored a bit.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::installPDFDocument): Updated since
        fragmentIdentifier returns a StringView.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle): Streamlined
        the implementation a bit.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        Updated since lastPathComponent returns a StringView.

2020-04-25  David Kilzer  <ddkilzer@apple.com>

        IPC::Decoder::isInvalid() should be renamed to isValid()
        <https://webkit.org/b/211000>

        Reviewed by Darin Adler.

        Negative logic is more difficult to reason about than positive
        logic.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::dispatchThreadMessageReceiverMessage):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::create):
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::isValid const): Rename from isInvalid()
        and invert logic.
        (IPC::Decoder::isInvalid const): Rename to isValid().
        * Platform/IPC/MessageSender.h:
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
        - Change Decoder::isInvalid() to Decoder::isValid() and reverse
          the Boolean logic.

2020-04-25  Diego Pino Garcia  <dpino@igalia.com>

        REGRESSION(210942): [GTK][WPE] EWS build bots fail in compile-webkit step
        https://bugs.webkit.org/show_bug.cgi?id=211014

        Make command that generates 'InspectorGResourceBundle.xml' depend on target 
        WebInspectorUI, instead of file 'inspector-resources.stamp'.

        * InspectorGResources.cmake:

2020-04-24  Diego Pino Garcia  <dpino@igalia.com>

        [WPE][Debug] Unreviewed, fix build after r260063
        https://bugs.webkit.org/show_bug.cgi?id=211009

        r260063 removed include of WebProcess.h in WebSocketProvider.cpp,
        which broke unified builds in WPE Debug.

        * WebProcess/Network/WebSocketProvider.cpp:

2020-04-24  David Kilzer  <ddkilzer@apple.com>

        WebPasteboardProxy::getPasteboardStringsForType() and WebPasteboardProxy::readURLFromPasteboard() should check return value of SharedMemory::createHandle()
        <https://webkit.org/b/211002>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        - Check result of SharedMemory::createHandle() and return early
          on failure.

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

        [iOS] Unable to sign up on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=211003
        <rdar://problem/58804852>

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKApplicationStateTrackingView.mm:
        (-[WKApplicationStateTrackingView _willBeginSnapshotSequence]):
        (-[WKApplicationStateTrackingView _didCompleteSnapshotSequence]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setShouldFireEvents):
        (WebKit::WebPage::setShouldFireResizeEvents): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-24  Christopher Reid  <chris.reid@sony.com>

        [Win] Bundle Inspector Resources in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=210942

        Reviewed by Fujii Hironori.

        Move CMake logic for the inspector resource copy script to
        Source/WebInspectorUI so it can be shared with Win and other platforms.

        * InspectorGResources.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:

2020-04-24  Kate Cheney  <katherine_cheney@apple.com>

        Removing website data for a domain should delete corresponding ITP entry
        https://bugs.webkit.org/show_bug.cgi?id=210864
        <rdar://problem/59473193>

        Reviewed by John Wilander.

        Tests: http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-link-decoration-database.html
               http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-link-decoration.html
               http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-mixed-statistics-entries-database.html
               http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-mixed-statistics-entries.html
               http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-third-party-script-loads-database.html
               http/tests/resourceLoadStatistics/remove-website-data-for-origin-deletes-third-party-script-loads.html

        In the database store: deletes domain from the ObservedDomains table
        when website data is deleted for that domain. This deletes every
        instance of the domainID in the database due to cascading deletions.

        In the memory store: deletes every instance of the domain in the
        statistics map, which will update the plist.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeDataForDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainIDExistsInDatabase):
        Needed a new function to check for the existence of domainID in any
        table. Existing queries rely on the ObservedDomains entry, which means
        testing using those could result in a false positive if the domainID
        was deleted from ObservedDomains but is floating around in another
        table.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::removeDataForDomain):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::domainIDExistsInDatabase):
        (WebKit::WebResourceLoadStatisticsStore::removeDataForDomain):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::domainIDExistsInDatabase):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        Pass RegistrableDomains vector to deleteWebsiteDataForOrigins,
        captured based on the WebsiteData display name.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveITPDataForDomain):
        (WKWebsiteDataStoreDoesStatisticsDomainIDExistInDatabase):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::domainIDExistsInDatabase):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::domainIDExistsInDatabase):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2020-04-24  David Kilzer  <ddkilzer@apple.com>

        Use CocoaImage platform abstraction for NSImage/UIImage
        <https://webkit.org/b/210974>

        Reviewed by Darin Adler.

        * Platform/cocoa/CocoaImage.h: Add.
        - Define CocoaImage here for cross-platform use.  Don't use
          OBJC_CLASS() here because this is an Objective-C header.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        - Combine separate platform-specific methods into one method.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        - Combine separate platform-specific instance variables into
          one instance variable.
        (-[_WKActivatedElementInfo image]):
        - Combine separate methods into one platform-specific method.
        * UIProcess/QuickLookThumbnailLoader.h:
        - Move cross-platform definition to CocoaImge.h.
        * UIProcess/QuickLookThumbnailLoader.mm:
        - Drive-by fix of soft-linking header include order.
        * WebKit.xcodeproj/project.pbxproj:
        - Add CocoaImage.h to the project.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle renderedImageWithOptions:]):
        (-[WKWebProcessPlugInNodeHandle renderedImageWithOptions:width:]):
        - Combine separate platform-specific methods into one method.

2020-04-24  David Kilzer  <ddkilzer@apple.com>

        IPC::Decoder should use create() pattern
        <https://webkit.org/b/210949>
        <rdar://problem/62144409>

        Reviewed by Geoffrey Garen.

        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::create): Add implementation. Returns nullptr if
        Decoder constructor returns an invalid object.
        (IPC::Decoder::Decoder): Mark invalid if m_buffer is not 64-bit
        aligned.
        (IPC::Decoder::unwrapForTesting): Switch to Decoder::create().
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::create): Add declaration.
        (IPC::Decoder::Decoder): Make explicit.  (Can't be made private
        since we use std::unique_ptr<Decoder>.)
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::createMessageDecoder): Switch to Decoder::create().

2020-04-24  Tim Horton  <timothy_horton@apple.com>

        iPad: "Pocket City" interaction does not work with trackpad
        https://bugs.webkit.org/show_bug.cgi?id=210985
        <rdar://problem/62273077>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldUseMouseGestureRecognizer]):
        Add another app to the list who fall back to touch event synthesis until rebuilt.

2020-04-24  Alex Christensen  <achristensen@webkit.org>

        SPI clients using fastServerTrustEvaluationEnabled need SPI to inform them of modern TLS negotiation
        https://bugs.webkit.org/show_bug.cgi?id=210533

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTaskClient::didNegotiateModernTLS):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didNegotiateModernTLS):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didNegotiateModernTLS):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didNegotiateModernTLS):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::didNegotiateModernTLS):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didNegotiateModernTLS):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2020-04-24  Brian Burg  <bburg@apple.com>

        Web Automation: timeout underneath Automation.evaluateJavaScriptFunction in Selenium test frame_switching_tests.py::testShouldNotBeAbleToDoAnythingTheFrameIsDeletedFromUnderUs[Safari]
        https://bugs.webkit.org/show_bug.cgi?id=210162
        <rdar://problem/60561009>

        Reviewed by Devin Rousso.

        When an iframe is detached from the DOM, it is no longer exposed as a browsing context
        and it's not possible to Evaluate JavaScript or perform other commands with it. This
        patch adds frame lifecycle monitoring so that pending script evaluations are cancelled
        with FrameNotFound as soon as the iframe is detached from the DOM. This change also avoids
        running more commands with the frame if it's detached from its DOMWindow and ready to be GC'd.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Automation/WebAutomationDOMWindowObserver.h: Added.
        * WebProcess/Automation/WebAutomationDOMWindowObserver.cpp: Added.
        (WebKit::WebAutomationDOMWindowObserver::WebAutomationDOMWindowObserver):
        (WebKit::WebAutomationDOMWindowObserver::~WebAutomationDOMWindowObserver):
        (WebKit::WebAutomationDOMWindowObserver::frame const):
        (WebKit::WebAutomationDOMWindowObserver::willDestroyGlobalObjectInCachedFrame):
        (WebKit::WebAutomationDOMWindowObserver::willDestroyGlobalObjectInFrame):
        (WebKit::WebAutomationDOMWindowObserver::willDetachGlobalObjectFromFrame):
        This class is a stripped-down copy of DOMWindowExtension, which is the only other
        client of DOMWindow::Observer interface. When a frame is detached, destroyed, or
        navigates (global object detached), then call the callback and unregister.

        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::~WebAutomationSessionProxy):
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        (WebKit::WebAutomationSessionProxy::willDestroyGlobalObjectForFrame):
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSessionProxy::ensureObserverForFrame): For non-main frames,
        ensure we add a frame observer if we are about to evaluate JavaScript upon the frame.
        This acts as a watchdog in case the frame becomes detached while waiting for pending
        JS evaluations. When a frame is detached, the JS evaluation may or may not complete.

        (WebKit::WebAutomationSessionProxy::selectOptionElement): Fix hilarious typo.

        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        * WebProcess/GPU/media/WebMediaStrategy.cpp:
        (WebKit::WebMediaStrategy::clearNowPlayingInfo):
        (WebKit::WebMediaStrategy::setNowPlayingInfo):
        Adding a new file seems to have exposed a few missing includes and namespace qualifiers.
        This is due to unified sources chunking.

2020-04-24  Alex Christensen  <achristensen@webkit.org>

        Use sendWithAsyncReply for ShareSheet related messages
        https://bugs.webkit.org/show_bug.cgi?id=210828
        <rdar://problem/61800730>

        Reviewed by Brent Fulgham.

        * Platform/IPC/MessageSender.cpp:
        We need to call addAsyncReplyHandler before sendMessage in case this is the first async message from this process.
        Otherwise the reply from the first message is dropped sometimes.
        * Shared/ShareSheetCallbackID.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showShareSheet):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::showShareSheet):
        (WebKit::nextShareSheetCallbackID): Deleted.
        (WebKit::WebPage::didCompleteShareSheet): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-24  Youenn Fablet  <youenn@apple.com> and Luming Yin <luming_yin@apple.com>

        Call STDynamicActivityAttributionPublisher in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=210772
        <rdar://problem/62075201>

        Reviewed by Geoffrey Garen.

        Call STDynamicActivityAttributionPublisher in WebProcess to make use of the newly added plist entry.
        Use of a sandbox extension to protect this call.

        * Configurations/WebKit.xcconfig:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Scripts/process-entitlements.sh:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-iOS.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/InfoPlist.strings: Added.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Move some post-renderingUpdate code into WebCore
        https://bugs.webkit.org/show_bug.cgi?id=210952

        Reviewed by Antti Koivisto.

        Factor some code called by the various DrawingArea subclasses into Page::finalizeRenderingUpdate(),
        with some flags to control behavior that differs between drawing areas.

        ScrollingCoordinator::commitTreeStateIfNeeded() is a no-op for RemoteScrollingCoordinator so
        it's fine to always call it.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateRendering):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::finalizeRenderingUpdate):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):

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

        [iOS] Stop using legacy BKSApplicationStateMonitor
        https://bugs.webkit.org/show_bug.cgi?id=210945

        Reviewed by Tim Horton.

        Stop using legacy BKSApplicationStateMonitor and use RunningBoard API instead.

        * Configurations/WebKit.xcconfig:
        Stop linking against ApplicationServices when using iOS 14 SDK now that we are
        fully transitioned to RunningBoard.

        * Platform/spi/ios/RunningBoardServicesSPI.h:
        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::isApplicationForeground):
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):
        (WebKit::isBackgroundState): Deleted.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isApplicationVisible):

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

        Bounce displayWasRefreshed() via EventDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=208778

        Reviewed by Antti Koivisto.

        Allow the WebContent process to be notified of display refresh off the main thread, so other
        threads like the scrolling thread can respond without being blocked. Achieve this
        by having EventDispatcher receive the IPC message, then bounce it to the main thread.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::displayLinkCallback):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::displayWasRefreshed):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::displayWasRefreshed):

2020-04-23  David Kilzer  <ddkilzer@apple.com>

        Clean up QuickLookThumbnailLoader
        <https://webkit.org/b/210814>

        Reviewed by Darin Adler.

        The following items are cleaned up:
        - Extract `using PlatformImage` into QuickLookThumbnailLoader.h,
          rename to `CocoaImage` and use to get rid of duplicate
          code.
        - Change `id` to `instancetype` for -init methods.
        - Add `atomic` keyword to @property definitions that were using
          it as the default.  (Use of atomic properties is rare in
          WebKit, so being explicit avoids a scenario where it looks
          like `nonatomic` was left off by accident.)
        - Change @property definitions to `readonly` that are never
          written to outside of QuickLookThumbnailLoader.mm.
        - Delete unused @property definitions.
        - Change method declarations into read-only @property
          definitions.
        - Re-declare atomic read-only @property definitions in
          QuickLookThumbnailLoader.h as read-write definitions in
          QuickLookThumbnailLoader.mm if they are written to.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::convertPlatformImageToBitmap):
        * UIProcess/QuickLookThumbnailLoader.h:
        - Rename qlThumbnailGenerationQueue @property to just `queue`.
        - Remove `contentType` @property.  It is not used anywhere.
          This also fixes a theoretical leak found by the clang static
          analyzer.
        - Remove `shouldWrite` @property.  It is only used within
          QuickLookThumbnailLoader.mm.
        - Change `identifier` and `thumbnail` to @property declarations.
        * UIProcess/QuickLookThumbnailLoader.mm:
        - Change WKQLThumbnailLoadOperation._identifier type from
          NSMutableString to NSString.  There was no reason for it to
          be mutable.
        (-[WKQLThumbnailQueueManager init]):
        (-[WKQLThumbnailQueueManager dealloc]):
        - Release `_queue` to fix theoretical leak found by the clang
          static analyzer.
        (-[WKQLThumbnailLoadOperation initWithAttachment:identifier:]):
        (-[WKQLThumbnailLoadOperation initWithURL:identifier:]):
        (-[WKQLThumbnailLoadOperation start]):
        - Rename `req` to `request`.
        - Change separate #if macros to #if/#else since only one version
          of this code can be used at a time.
        (-[WKQLThumbnailLoadOperation thumbnail]):
        - Use CocoaImage to use one copy of the method.

2020-04-23  Megan Gardner  <megan_gardner@apple.com>

        Long pressing attachments in Notes does not activate Context Menu.
        https://bugs.webkit.org/show_bug.cgi?id=210936
        <rdar://problem/61171576>

        Reviewed by Tim Horton.

        Not having the ID available for notes makes their code to create the context
        menu and its items fail. We should probably be passing this information on
        for any element if we have it.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionPositionInformation):

2020-04-23  Brent Fulgham  <bfulgham@apple.com>

        Allow "kern.osversion" sysctl read
        https://bugs.webkit.org/show_bug.cgi?id=210929
        <rdar://problem/62256013>

        Reviewed by Per Arne Vollan.

        Libdispatch checks "kern.osversion" as part of the code path we use for launching our XPC services.
        We already allow it for some services (Network Process), and should be doing so for our other
        helper processes.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Remove the WebKit.plist for Feature Flags
        https://bugs.webkit.org/show_bug.cgi?id=210534

        Reviewed by Simon Fraser.

        * FeatureFlags/WebKit.plist: Removed.
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Crash on RunningBoard process assertion invalidation
        https://bugs.webkit.org/show_bug.cgi?id=210873
        <rdar://problem/62194917>

        Unreviewed, nil out the observer only after we've removed it to fix crashes on the bots.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::~ProcessAssertion):

2020-04-23  Kate Cheney  <katherine_cheney@apple.com>

        All ITP database tables should reference the ObservedDomains table on DELETE CASCADE
        https://bugs.webkit.org/show_bug.cgi?id=210874
        <rdar://problem/62209438>

        Reviewed by Brady Eidson.

        This makes it easier to delete an ITP entry from the entire database.
        An entry shouldn't really exist outside of ObservedDomains anyways,
        because that table holds all data about the domain, so this is a good
        change to make regardless of the deletion use case.

        (WebKit::needsNewCreateTableSchema):
        Function to check for old CREATE TABLE queries.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::enableForeignKeys):
        Must enable foreign keys to use DELETE CASCADE.

        (WebKit::ResourceLoadStatisticsDatabaseStore::isMigrationNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        Since this is a schema change that is executed when a table is created, we
        need to check if the current schema is out of date. If so, we can
        create new tables using the proper reference and migrate the data.

        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndDropOldDatabaseIfNecessary):
        We only need to migrate the data if there were no issues with the
        schema (otherwise the entire database will already have been created
        with the correct CREATE TABLE queries).

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

2020-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] CMAKE_BINARY_DIR should always be a PRIVATE include directory
        https://bugs.webkit.org/show_bug.cgi?id=196717

        Reviewed by Michael Catanzaro.

        Include CMAKE_BINARY_DIR either directly or through WebKit_PRIVATE_INCLUDE_DIRECTORIES.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2020-04-23  Adrian Perez de Castro  <aperez@igalia.com>

        Regression after r260359 ([GTK][WPE] lowWatermarkPages() in MemoryPressureMonitor.cpp only searches the "low" value inside the first "Node" section)
        https://bugs.webkit.org/show_bug.cgi?id=210916

        Reviewed by Carlos Alberto Lopez Perez.

        Switch over to using a FileHandle type based on std::unique_ptr with a custom deleter and an
        utility function for opening files. This makes easier to follow the logic inside the polling
        loop for opening files and retrying when needed. This also fixes exiting the thread when the
        systemMemoryUsedAsPercentage() function would return -1, to loop restart instead to keep
        trying.

        Thanks to Pablo Saavedra for his help in making this patch.

        No new tests needed.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::FileHandleDeleter::operator()): Add deleter to use with std::unique_ptr<>.
        (WebKit::tryOpeningForUnbufferedReading): Add utility function to open a file handle if
        needed and configuring its buffering upon opening.
        (WebKit::MemoryPressureMonitor::start): Use FileHandle to ensure that handles are always
        closed properly, and fix logic retry opening files on failure.

2020-04-23  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Soft link QuickLookThumbnailing framework
        https://bugs.webkit.org/show_bug.cgi?id=210894

        Reviewed by Megan Gardner.

        Soft link QuickLookThumbnailing framework to solve build error.

        No new tests. Unnecessary.

        * Configurations/WebKit.xcconfig:
        * UIProcess/QuickLookThumbnailLoader.mm:
        (-[WKQLThumbnailLoadOperation initWithURL:identifier:]):
        (-[WKQLThumbnailLoadOperation start]):
        * UIProcess/QuickLookThumbnailingSPI.h: Added.
        * UIProcess/QuickLookThumbnailingSoftLink.h: Added.
        * UIProcess/QuickLookThumbnailingSoftLink.mm: Added.
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Port MediaPlayback process assertion to RunningBoard
        https://bugs.webkit.org/show_bug.cgi?id=210212
        <rdar://problem/61476951>

        Reviewed by Geoff Garen.

        Port MediaPlayback process assertion to RunningBoard instead of the legacy BKSProcessAssertion.
        We can now #ifdef out the legacy BKSProcessAssertion on recent iOS builds.

        * UIProcess/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):

2020-04-23  John Frankish  <john.frankish@outlook.com>

        [GTK] Crash in cairo_surface_mark_dirty_rectangle() in accelerated compositing mode under X11
        https://bugs.webkit.org/show_bug.cgi?id=210636

        Reviewed by Carlos Garcia Campos.

        When cairo is configured to use xcb instead of xlib, it might use an image surface attached to the xlib one as
        snapshot. In that case a flush is needed to detach that snapshot after we have drawn the surface in the
        context.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::paint): Call cairo_surface_flush() after drawing.

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

        Unreviewed, reverting r260133.

        We can use RunningBoard foreground assertion again now that
        <rdar://problem/61830390> has been fixed

        Reverted changeset:

        "REGRESSION (r259610): WebGL does not work at all on iOS (was:
        Google Maps tiles turn black after initial load)"
        https://trac.webkit.org/changeset/260133

2020-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260553.

        Broke iOS and Catalina builds.

        Reverted changeset:

        "Soft link QuickLookThumbnailing framework"
        https://bugs.webkit.org/show_bug.cgi?id=210894
        https://trac.webkit.org/changeset/260553

2020-04-22  Darin Adler  <darin@apple.com>

        [Cocoa] Build with UChar as char16_t even in builds that use Apple's internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=210845

        Reviewed by Anders Carlsson.

        * Configurations/BaseTarget.xcconfig: Move ICU-configuring macros to Platform.h.

        * Platform/unix/EnvironmentUtilities.h: Removed unneeded includes.
        This sidesteps a problem with Apple's internal InstallAPI tool that happens
        if StringView.h is included and Platform.h is not included first.

        * UIProcess/API/cpp/WKRetainPtr.h: Removed unneeded includes, and used
        #pragma once.

        * UIProcess/Cocoa/PreferenceObserver.h: Moved most things out of the header,
        since they don't need to be there.
        * UIProcess/Cocoa/PreferenceObserver.mm: Moved them here including using a
        class extension for the data member of WKPreferenceObserver.

        * UIProcess/ios/fullscreen/FullscreenTouchSecheuristicParameters.h:
        Removed unneeded WTF prefix.

2020-04-22  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Soft link QuickLookThumbnailing framework
        https://bugs.webkit.org/show_bug.cgi?id=210894

        Reviewed by Tim Horton.

        Soft link QuickLookThumbnailing framework to solve build error.

        No new tests. Unnecessary.

        * Configurations/WebKit.xcconfig:
        * UIProcess/QuickLookThumbnailLoader.mm:
        (-[WKQLThumbnailLoadOperation initWithURL:identifier:]):
        (-[WKQLThumbnailLoadOperation start]):
        * UIProcess/QuickLookThumbnailingSPI.h: Added.
        * UIProcess/QuickLookThumbnailingSoftLink.h: Added.
        * UIProcess/QuickLookThumbnailingSoftLink.mm: Added.
        * WebKit.xcodeproj/project.pbxproj:

2020-04-22  Daniel Bates  <dabates@apple.com>

        Support toggling debug overlay for touch action region and editable element region independent from non-fast scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=210774

        Reviewed by Dean Jackson.

        Expose two new enumerators to toggle touch action region and editable element region
        overlay painting.

        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

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

        [iOS] Expose -_webView:willGoToBackForwardListItem:inPageCache:
        https://bugs.webkit.org/show_bug.cgi?id=210878
        <rdar://problem/62202276>

        Reviewed by Alex Christensen.

        Expose -_webView:willGoToBackForwardListItem:inPageCache: on iOS.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::willGoToBackForwardListItem):

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

        [iOS] Crash on RunningBoard process assertion invalidation
        https://bugs.webkit.org/show_bug.cgi?id=210873
        <rdar://problem/62194917>

        Reviewed by Darin Adler.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKRBSAssertionDelegate assertion:didInvalidateWithError:]):
        Capture a weak pointer to self and make sure we only access the invalidation handler on
        the main thread if |self| is still alive.

        (WebKit::ProcessAssertion::~ProcessAssertion):
        Null out the WKRBSAssertionDelegate's observer in the ProcessAssertion destructor, to
        make sure processAssertionWasInvalidated() cannot get called after the ProcessAssertion
        has been destroyed.

2020-04-22  David Kilzer  <ddkilzer@apple.com>

        IPC::decodeSharedBuffer() should check the return value of SharedMemory::map()
        <https://webkit.org/b/210844>
        <rdar://problem/60773120>

        Reviewed by Geoffrey Garen.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::decodeSharedBuffer):
        - Add nullptr check and early return.

2020-04-22  Brent Fulgham  <bfulgham@apple.com>

        Switch from debug ASSERT to RELEASE_ASSERT in toNPJSObject
        https://bugs.webkit.org/show_bug.cgi?id=210823
        <rdar://problem/61774056>

        Reviewed by David Kilzer.

        * WebProcess/Plugins/Netscape/NPJSObject.h:
        (WebKit::NPJSObject::toNPJSObject):

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

        Simplify SWServerWorker::whenActivated logic
        https://bugs.webkit.org/show_bug.cgi?id=210795

        Reviewed by Alex Christensen.

        Improve logging and update code according whenActivated implementation.
        Add an early check for timeouts so that we return earlier in that case.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):
        (WebKit::WebSWServerConnection::startFetch):

2020-04-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260478.

        Caused TestWebKitAPI.WKAttachmentTests crashes on Catalina

        Reverted changeset:

        "Clean up QuickLookThumbnailLoader"
        https://bugs.webkit.org/show_bug.cgi?id=210814
        https://trac.webkit.org/changeset/260478

2020-04-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260410.

        Caused crashes in Safari

        Reverted changeset:

        "SPI clients using fastServerTrustEvaluationEnabled need SPI
        to inform them of modern TLS negotiation"
        https://bugs.webkit.org/show_bug.cgi?id=210533
        https://trac.webkit.org/changeset/260410

2020-04-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260475.

        New assert caused layout tests to exit early on iOS and macOS

        Reverted changeset:

        "REGRESSION(r260410) Frequent Network process crashes"
        https://bugs.webkit.org/show_bug.cgi?id=210825
        https://trac.webkit.org/changeset/260475

2020-04-21  David Kilzer  <ddkilzer@apple.com>

        IPC::Encoder::reserve() can be private
        <https://webkit.org/b/210833>
        <rdar://problem/62124193>

        Reviewed by Darin Adler.

        * Platform/IPC/Encoder.h:
        (IPC::Encoder::reserve):
        - Move from public to private.

2020-04-21  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Fix GPU Process build for VIDEO_PRESENTATION_MODE changes
        https://bugs.webkit.org/show_bug.cgi?id=210836

        Reviewed by Darin Adler.

        Build fix, no new tests.

        * GPUProcess/media/playstation/RemoteMediaPlayerProxyPlayStation.cpp:

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

        Fix MACCATALYST build failures
        https://bugs.webkit.org/show_bug.cgi?id=210815

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _isShowingVideoPictureInPicture]):
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidBecomeActive):

2020-04-19  Darin Adler  <darin@apple.com>

        [Cocoa] Use createNSArray in many more places that build NSArray objects from C++ collections
        https://bugs.webkit.org/show_bug.cgi?id=210702

        Reviewed by Alex Christensen.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::toNSErrors): Use createNSArray and return a RetainPtr to cut down
        on autorelease.
        (WebKit::toPKShippingMethods): Ditto.
        (WebKit::PaymentAuthorizationPresenter::completePaymentSession): Updated for RetainPtr.
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection): Ditto.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Use createNSArray.
        Also removed code to support platforms without -setThumbnailURLs: since we don't
        have those any more.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::updateChildren): Use createNSArray.
        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
        (coreCookiesToNSCookies); Ditto.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _allProcessPoolsForTesting]): Ditto.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]): Cut down on
        repeated code by adding a lambda to create a _WKTextManipulationItem and by using
        createNSArray.
        (wkTextManipulationErrors): Use createNSArray. Also tighten up the code that maps
        WebCore::TextManipulationController::ManipulationFailureType to the
        _WKTextManipulationItemError code.

        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _customHeaderFields]): Use createNSArray.
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (-[WKWebsiteDataRecord _originsStrings]): Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getResourceLoadStatisticsDataSummary:]): Ditto.
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload redirectChain]): Ditto.
        * UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
        (-[_WKFrameTreeNode childFrames]): Ditto.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration additionalReadAccessAllowedURLs]): Ditto.
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm:
        (-[_WKResourceLoadStatisticsThirdParty underFirstParties]): Ditto.
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]): Ditto.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didChangeBackForwardList): Ditto.
        * UIProcess/RemoteLayerTree/RemoteLayerTreeScrollingPerformanceData.mm:
        (WebKit::RemoteLayerTreeScrollingPerformanceData::data): Ditto.
        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::createTargetedDragPreview): Ditto.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateTapHighlight]): Removed uneeded RetainPtr local variable.
        Use createNSArray. Refactored to make the "all rectilinear" case more parallel
        to the general case.
        (-[WKContentView webSelectionRectsForSelectionRects:]): Use createNSArray.
        (wkTextSelectionRects): Ditto.
        (createTargetedPreview): Ditto.
        (-[WKContentView _presentationRectsForPreviewItemController:]): Ditto.

        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient didFindStringMatchesWithRects:didWrapAround:]): Use createNSArray.

        * UIProcess/mac/WKTextInputWindowController.mm:
        (-[WKTextInputView validAttributesForMarkedText]): Use +[NSArray arrayByAddingObject:].

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (collectIcons): Use createNSArray.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Marked class here
        as final. Cut down on local variables a bit. Use createNSArray.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::addAnimationToLayer): Removed unnecessary use of RetainPtr. Use createNSArray.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy): Addd a FIXME about
        a problem I noticed, unrelated to the rest of the changes.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): Use createNSArray.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::registerWithStateDumper): Ditto.
        (WebKit::activePagesOrigins): Ditto.

2020-04-21  David Kilzer  <ddkilzer@apple.com>

        Clean up QuickLookThumbnailLoader
        <https://webkit.org/b/210814>

        Reviewed by Darin Adler.

        The following items are cleaned up:
        - Extract `using PlatformImage` into QuickLookThumbnailLoader.h,
          rename to `CocoaImage` and use to get rid of duplicate
          code.
        - Change `id` to `instancetype` for -init methods.
        - Add `atomic` keyword to @property definitions that were using
          it as the default.  (Use of atomic properties is rare in
          WebKit, so being explicit avoids a scenario where it looks
          like `nonatomic` was left off by accident.)
        - Change @property definitions to `readonly` that are never
          written to outside of QuickLookThumbnailLoader.mm.
        - Delete unused @property definitions.
        - Change method declarations into read-only @property
          definitions.
        - Re-declare atomic read-only @property definitions in
          QuickLookThumbnailLoader.h as read-write definitions in
          QuickLookThumbnailLoader.mm if they are written to.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::convertPlatformImageToBitmap):
        * UIProcess/QuickLookThumbnailLoader.h:
        - Rename qlThumbnailGenerationQueue @property to just `queue`.
        - Remove `contentType` @property.  It is not used anywhere.
          This also fixes a theoretical leak found by the clang static
          analyzer.
        - Remove `shouldWrite` @property.  It is only used within
          QuickLookThumbnailLoader.mm.
        - Change `identifier` and `thumbnail` to @property declarations.
        * UIProcess/QuickLookThumbnailLoader.mm:
        - Change WKQLThumbnailLoadOperation._identifier type from
          NSMutableString to NSString.  There was no reason for it to
          be mutable.
        (-[WKQLThumbnailQueueManager init]):
        (-[WKQLThumbnailQueueManager dealloc]):
        - Release `_queue` to fix theoretical leak found by the clang
          static analyzer.
        (-[WKQLThumbnailLoadOperation initWithAttachment:identifier:]):
        (-[WKQLThumbnailLoadOperation initWithURL:identifier:]):
        (-[WKQLThumbnailLoadOperation start]):
        - Rename `req` to `request` and use RetainPtr<>.
        - Change separate #if macros to #if/#else since only one version
          of this code can be used at a time.
        (-[WKQLThumbnailLoadOperation thumbnail]):
        - Use CocoaImage to use one copy of the method.

2020-04-21  David Kilzer  <ddkilzer@apple.com>

        Fix extra/missing #undef statements
        <https://webkit.org/b/210818>
        <rdar://problem/61973329>

        Reviewed by Chris Dumez.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        - Remove #undef MESSAGE_CHECK_URL.  It is no longer used.
        * UIProcess/WebPageProxy.cpp:
        - Add missing #undef MESSAGE_CHECK_COMPLETION.
        - Sort #undef in reverse order of #define.
        * UIProcess/mac/WebPageProxyMac.mm:
        - Add missing #undef MESSAGE_CHECK_WITH_RETURN_VALUE.
        - Sort #undef in reverse order of #define.

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

        REGRESSION(r260410) Frequent Network process crashes
        https://bugs.webkit.org/show_bug.cgi?id=210825

        Reviewed by Alex Christensen.

        The webPageProxyID in the NetworkProcessProxy::DidNegotiateModernTLS() IPC was invalid because
        NetworkProcessProxy::preconnectTo() was failing to initialize NetworkLoadParameters::webPageProxyID.
        This patch addresses the issue.

        No new tests, added new assertion that would be tripped by existing tests.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preconnectTo):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::preconnectTo):

2020-04-21  Jer Noble  <jer.noble@apple.com>

        PiP buttons shows up in element fullscreen when PiP is disabled in WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=210813

        Reviewed by Eric Carlson.

        Not currently testable; entering fullscreen never completes in the iOS TestWebKitAPI app
        because that process is not a UI Application.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController videoControlsManagerDidChange]):

2020-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Don't bother compiling UpdateInfo since it's not used
        https://bugs.webkit.org/show_bug.cgi?id=210819
        <rdar://problem/61774766>

        Reviewed by Darin Adler.

        Since we don't use the UpdateInfo class in Cocoa builds, let's not
        bother building it.

        * Shared/UpdateInfo.cpp:
        * Shared/UpdateInfo.h:
        * UIProcess/DrawingAreaProxy.h:

2020-04-21  Timothy Horton  <timothy_horton@apple.com>

        One more build fix after r260407

        * Configurations/WebKit.xcconfig:

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

        [iOS] Provide better names for ProcessThrottler process assertions
        https://bugs.webkit.org/show_bug.cgi?id=210808

        Reviewed by Geoffrey Garen.

        Provide better names for ProcessThrottler process assertions, to facilitate debugging.

        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::assertionName const):
        (WebKit::ProcessThrottler::setAssertionType):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ProcessThrottlerClient.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):

2020-04-21  Daniel Bates  <dabates@apple.com>

        [iOS] -_didFinishTextInteractionInTextInputContext should only zoom to reveal focused element if it changed
        https://bugs.webkit.org/show_bug.cgi?id=210697
        <rdar://problem/60997530>

        Reviewed by Wenson Hsieh. 

        Add a new state variable to use to track whether -_focusTextInputContext invoked during a
        text interaction actually focused an element. Then in -_didFinishTextInteractionInTextInputContext
        condition marking the page to reveal the focused element on this state.

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _willBeginTextInteractionInTextInputContext:]): Turn around and call the same
        function on the content view.
        (-[WKWebView _didFinishTextInteractionInTextInputContext:]): Ditto.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]): Reset state.
        (-[WKContentView _didCommitLoadForMainFrame]): Ditto.
        (-[WKContentView _focusTextInputContext:placeCaretAt:completionHandler:]): Update state to
        indicate whether the focusd element did change or not. I use bitwise ORing instead of strict
        assignment to update it because this function can be called multiple times by an internal
        Apple client during a text interaction (e.g. <rdar://problem/59430806>). I thought about
        making this a FIXME, but this function is otherwise capable of handling multiple invocations
        so I didn't.
        (-[WKContentView _willBeginTextInteractionInTextInputContext:]): Reset added state.
        (-[WKContentView _didFinishTextInteractionInTextInputContext:]): Check if state was set to
        indicate that a focus change happened. If so, do what we do now + reset state. Otherwise,
        do everything we do now except for marking the page as needing to reveal the focused element
        on the next editor state update.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::focusTextInputContextAndPlaceCaret): Check that the target is focusable
        before calling FocusController::setFocusedElement() because it ultimately calls Document::setFocusedElement()
        that can return true for a non-focusable element. I added a comment in Document.h to explain
        this subtlety. I also decided not to check the return value of FocusController::setFocusedElement().
        Instead I am checking the more important condition that the focused element is the target
        element. Passing true to visiblePositionInFocusedNodeForPoint() will ultimately assert this
        to be true. Note that setFocusedElement() may not have done anything as m_focusedElement
        could have already been equal to the target element. This is OK and I still update the
        caret position.

2020-04-21  Timothy Hatcher  <timothy@apple.com>

        Reset m_userScriptsNotified when web process crashes.
        https://bugs.webkit.org/show_bug.cgi?id=210807

        Reviewed by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebPageProxy::resetStateAfterProcessExited): Set m_userScriptsNotified to false.

2020-04-21  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * Configurations/WebKit.xcconfig:

2020-04-21  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] ShareableResource::create() should validate its parameters
        <https://webkit.org/b/210779>
        <rdar://problem/60887693>

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didFinishLoadForQuickLookDocumentInMainFrame):
        - Handle nullptr returned from ShareableResource::create().

        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::create):
        - Change to return RefPtr<>.
        - Validate parameters before calling constructor.  Return
          nullptr on failure.
        (WebKit::ShareableResource::ShareableResource):
        - Remove assert and comment since checks are now done in
          ShareableResource::create().
        * Shared/ShareableResource.h:
        (WebKit::ShareableResource::create):
        - Change to return RefPtr<>.

2020-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Tighten up some more IPC message checks in WebPasteboardProxy
        https://bugs.webkit.org/show_bug.cgi?id=210780
        <rdar://problem/62088479>

        Reviewed by Alex Christensen.

        Adjust some existing IPC message checks in WebPasteboardProxy, and also introduces some new ones. See below for
        more details.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::didModifyContentsOfPasteboard):

        Move the `pasteboardName` check here out of `didModifyContentsOfPasteboard`, and into each call site, such that
        we bail and kill the web process before invoking `didModifyContentsOfPasteboard` in the case where the name is
        empty.

        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringsForType):
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::addPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardTypes):
        (WebKit::WebPasteboardProxy::setPasteboardURL):
        (WebKit::WebPasteboardProxy::setPasteboardColor):
        (WebKit::WebPasteboardProxy::setPasteboardStringForType):

        Add message checks for empty pasteboard types.

        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::writeCustomData):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        (WebKit::WebPasteboardProxy::writeURLToPasteboard):
        (WebKit::WebPasteboardProxy::writeWebContentToPasteboard):
        (WebKit::WebPasteboardProxy::writeImageToPasteboard):
        (WebKit::WebPasteboardProxy::writeStringToPasteboard):

        Add a message check for empty pasteboard types, but only when the string is also empty; this is because iOS
        clears pasteboard data by writing an empty pasteboard string and type.

2020-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][CMake] Make gtk-unix-print a component of FindGTK.cmake
        https://bugs.webkit.org/show_bug.cgi?id=210792

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * PlatformGTK.cmake: Use the GTK::UnixPrint imported target.

2020-04-21  Philippe Normand  <pnormand@igalia.com>

        [CMake] gst-build-backed build fails
        https://bugs.webkit.org/show_bug.cgi?id=210742

        Reviewed by Xabier Rodriguez-Calvar.

        * PlatformWPE.cmake:

2020-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes late February 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=210767

        Unreviewed build fix.

        * NetworkProcess/NetworkResourceLoadMap.h: Add missing wtf/Function.h header.

2020-04-20  Ross Kirsling  <ross.kirsling@sony.com>

        Classes marked final should not use protected access specifier
        https://bugs.webkit.org/show_bug.cgi?id=210775

        Reviewed by Daniel Bates.

        * Shared/API/APIDictionary.h:
        * WebProcess/GPU/media/TextTrackPrivateRemote.h:
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

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

        Fix build failures when video fullscreen and picture-in-picture is disabled
        https://bugs.webkit.org/show_bug.cgi?id=210777

        Reviewed by Eric Carlson.

        Wrap video fullscreen and picture-in-picture related code with "#if ENABLE(VIDEO_PRESENTATION_MODE)".

        * Configurations/FeatureDefines.xcconfig:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenGravity):
        (WebKit::RemoteMediaPlayerProxy::updateVideoFullscreenInlineImage):
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenMode):
        (WebKit::RemoteMediaPlayerProxy::videoFullscreenStandbyChanged):
        (WebKit::RemoteMediaPlayerProxy::setBufferingPolicy):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):

2020-04-20  Alex Christensen  <achristensen@webkit.org>

        SPI clients using fastServerTrustEvaluationEnabled need SPI to inform them of modern TLS negotiation
        https://bugs.webkit.org/show_bug.cgi?id=210533

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTaskClient::didNegotiateModernTLS):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didNegotiateModernTLS):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didNegotiateModernTLS):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didNegotiateModernTLS):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::didNegotiateModernTLS):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didNegotiateModernTLS):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2020-04-20  Kate Cheney  <katherine_cheney@apple.com>

        App-bound domain behavior should abide by the limitsNavigationsToAppBoundDomains argument in WKWebView configuration
        https://bugs.webkit.org/show_bug.cgi?id=210769
        <rdar://problem/62065241>

        Reviewed by Brent Fulgham.

        Changes app-bound domain behavior to be triggered by the value of
        limitsNavigationsToAppBoundDomains, a WebView configuration flag.
        If the WebView has this parameter set and is currently navigating to
        an app bound domain, then app-bound privileges will be granted.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted):
        Update this function to return a boolean to indicate whether the
        navigation should fail. A failure should occur if a WebView has set
        the limitsNavigationsToAppBoundDomains flag and attempts to navigate
        away from an app-bound domain.

        If the limitsNavigationsToAppBoundDomains value has not been set to
        true, maintain non-app bound behavior regardless of whether the domain
        is app-bound or not.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Check the result of setIsNavigatingToAppBoundDomainAndCheckIfPermitted and fail the
        navigation if needed, with both RELEASE logging and an appropriate
        error message.

        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomain): Deleted.
        * UIProcess/WebPageProxy.h:
        Renamed for clarity.

2020-04-20  Nikos Mouchtaris  <nmouchtaris@apple.com>

        WK2 Quicklook for attachments
        https://bugs.webkit.org/show_bug.cgi?id=208891

        Reviewed by Darin Adler.

        Allow attachment elements to render QuickLook thumbnail generated
        from contents of the file as its icon, rather than the default
        icons associated with each mime type.

        * Configurations/WebKit.xcconfig:
        Link QuickLook thumbnailing framework.
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        Create thumbnail request and add to queue.
        (WebKit::convertNSImageToBitmap):
        (WebKit::convertUIImageToBitmap):
        (WebKit::WebPageProxy::getQLThumbnailForGenerationRequestion):
        (WebKit::WebPageProxy::getQLThumbnailForFileWrapper):
        (WebKit::WebPageProxy::getQLThumbnailForAttachment):
        * UIProcess/QLThumbnailLoad.h: Added.
        * UIProcess/QLThumbnailLoad.mm: Added.
        Add code to request thumbnail for file data.
        (-[WKQLThumbnailQueueManager init]):
        (+[WKQLThumbnailQueueManager sharedInstance]):
        (-[WKQLThumbnailLoadOperation initWithAttachment:identifier:]):
        (-[WKQLThumbnailLoadOperation initWithURL:identifier:]):
        (-[WKQLThumbnailLoadOperation start]):
        (-[WKQLThumbnailLoadOperation isAsynchronous]):
        (-[WKQLThumbnailLoadOperation isExecuting]):
        (-[WKQLThumbnailLoadOperation setExecuting:]):
        (-[WKQLThumbnailLoadOperation isFinished]):
        (-[WKQLThumbnailLoadOperation setFinished:]):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateAttachmentIcon):
        Set thumbnail of attachment element
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Thumbnail request message.

2020-04-20  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed macCatalyst build fix.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess):
        (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):

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

        Scrolling with background-attachment: fixed needs to trigger repaints
        https://bugs.webkit.org/show_bug.cgi?id=193893
        <rdar://problem/47587017>

        Reviewed by Dean Jackson.

        When scrolling an overflow scroll which has "background-atttachment:fixed" in the content,
        the node will have non-empty synchronous scrolling reasons. In this case we need to
        send the scroll to the main thread, and trigger a repaint on scroll.

        If handling the wheel event on the scrolling thread determines that the scroll must be sent
        to the main thread, EventDispatcher::wheelEvent() does so in the callback function.

        To trigger the repaint, RenderLayer::scrollTo() asks the composited layers backing whether
        the node has synchronous scrolling reasons; this is implemented by asking the scrolling
        coordinator.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

2020-04-20  Megan Gardner  <megan_gardner@apple.com>

        Date and Time form controls not showing correct initial values on immediate second invocation.
        https://bugs.webkit.org/show_bug.cgi?id=210613

        Reviewed by Wenson Hsieh.

        Updating the webprocess with the newly picked time did not update the local store of that data in the
        UI process, so when the control was activated a second time, and we skipped the round trip to the
        webprocess to get the data we were certian we already had, we did not start the popover in the 
        correct state. We now update the webprocess and the local UI stored variable at the same time.

        Test: fast/forms/ios/time-picker-value-change.html

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView timePickerValueHour]):
        (-[WKWebView timePickerValueMinute]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView updateValueAsNumberForViewController:]):
        (-[WKContentView updateValueForViewController:]):
        (-[WKContentView setTimePickerValueToHour:minute:]):
        (-[WKContentView timePickerValueHour]):
        (-[WKContentView timePickerValueMinute]):
        * UIProcess/ios/forms/WKFormInputControl.h:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePicker hour]):
        (-[WKDateTimePicker minute]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker setHour:minute:]):
        (-[WKFormInputControl setTimePickerHour:minute:]):
        (-[WKFormInputControl timePickerValueHour]):
        (-[WKFormInputControl timePickerValueMinute]):
        (-[WKDateTimePopover setHour:minute:]):
        (-[WKDateTimePopover hour]):
        (-[WKDateTimePopover minute]):

2020-04-20  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the macCatalyst build after r260366

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h:

2020-04-20  Stephan Szabo  <stephan.szabo@sony.com>

        Fix build when !ENABLE(RESOURCE_LOAD_STATISTICS)
        https://bugs.webkit.org/show_bug.cgi?id=210757

        Reviewed by Ross Kirsling.

        Build fix, no new tests

        * NetworkProcess/NetworkDataTask.cpp:
        Add ENABLE(RESOURCE_LOAD_STATISTICS) around block
        using NetworkSession functions only declared when
        that is enabled.

2020-04-20  Alex Christensen  <achristensen@webkit.org>

        When SpeculativeLoadManager is destroyed, properly clean up its PendingFrameLoads
        https://bugs.webkit.org/show_bug.cgi?id=210759
        <rdar://problem/62056856>

        Reviewed by Darin Adler.

        Recent work on the resourceLoadStatistics layout tests increased the amount we swap out the WebsiteDataStore.
        When this happens, the NetworkSession is eventually destroyed in the NetworkProcess, sometimes when running the next test.
        An assertion was firing in the PendingFrameLoad destructor because it hadn't been marked as complete when it was destroyed.
        Rather than remove the assertion, when we destroy the SpeculativeLoadManager (which only happens when a WebsiteDataStore
        is destroyed) during a speculative pending frame load, just mark the pending frame load as complete because it is being cancelled.
        Marking the pending frame load as complete can tell the SpeculativeLoadManager to mutate m_pendingFrameLoads, which we don't want
        to do while iterating, so copy the RefPtrs into a Vector first then iterate that to get them all.

        This fixes an assertion that was sometimes hit in http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-redirects-database.html
        but only after running other tests that had initiated speculative pending frame loads.  This was ostensibly started by r260322 but is quite unrelated.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::~SpeculativeLoadManager):

2020-04-20  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Fix build after r260277
        https://bugs.webkit.org/show_bug.cgi?id=210756

        Reviewed by Don Olmstead.

        Build fix, no new tests.

        * PlatformPlayStation.cmake:

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

        Sending beacons when Fetch KeepAlive feature is disabled crashes the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=210753
        <rdar://problem/61896221>

        Reviewed by Geoffrey Garen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::startPingLoad):
        Make sure NetworkResourceLoadParameters's webPageProxyID / webPageID / webFrameID are properly
        initialized before sending the IPC or IPC decoding will fail.

2020-04-20  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Use ObjectIdentifier<> for geolocationID
        <https://webkit.org/b/210680>
        <rdar://problem/58892340>

        Reviewed by Chris Dumez.

        Replace uses of uint64_t with GeolocationIdentifier.

        * Scripts/webkit/messages.py:
        * UIProcess/GeolocationIdentifier.h: Add.
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::createRequest):
        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
        * UIProcess/GeolocationPermissionRequestManagerProxy.h:
        * UIProcess/GeolocationPermissionRequestProxy.cpp:
        (WebKit::GeolocationPermissionRequestProxy::GeolocationPermissionRequestProxy):
        * UIProcess/GeolocationPermissionRequestProxy.h:
        (WebKit::GeolocationPermissionRequestProxy::create):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        (WebKit::generateGeolocationID): Delete.
        - Replace with GeolocationIdentifier::generate().
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveGeolocationPermissionDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        [iOS] Refactor WebKit media playback process assertion logic to minimize chances of leaking them
        https://bugs.webkit.org/show_bug.cgi?id=210670

        Reviewed by Geoffrey Garen.

        Refactor WebKit media playback process assertion logic to minimize chances of leaking them. In particular,
        the following changes were made:
        1. Instead of the WebProcessPool having a HashMap of media playback process assertions for
           the WebProcess, we now store the assertion on the WebProcessProxy object itself. This is
           less likely to get out of sync and leak.
        2. Add a RefCounter to the WebProcessPool to count WebProcesses that have audible media.
           Whenever a WebProcess starts or stops playing audible media, it merely grabs a RefCounter
           token or releases it. The WebProcessPool relies on this counter to decide whether or not
           to take a media playback assertion on behalf of the UIProcess. Since this is token-based
           and the token is stored on the WebProcessProxy object, it makes it less likely to leak
           the assertion.
        3. The WebProcessProxy object now has a AudibleMediaActivity data structure wrapping both
           its media playback assertion and its WebProcessWithAudibleMediaToken that it got from
           the WebProcessPool. When the WebProcess shuts down (normally or due to crash/termination),
           we make sure to clear this data structure.
        4. Make sure that the WebProcessProxy updates its AudibleMediaActivity whenever a page is
           removed from the WebProcess.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_webProcessWithAudibleMediaCounter):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::webProcessWithAudibleMediaToken const):
        (WebKit::WebProcessPool::updateAudibleMediaAssertions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::updateAudibleMediaAssertions):
        * UIProcess/WebProcessProxy.h:

2020-04-20  Kate Cheney  <katherine_cheney@apple.com>

        <rdar://problem/62059046>

        Unreviewed macCatalyst build fix.

        * NetworkProcess/NetworkProcess.messages.in:

2020-04-20  Darin Adler  <darin@apple.com>

        Use #import instead of #include in Objective-C and don't use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=210724

        Reviewed by David Kilzer.

        * mac/MigrateHeadersFromWebKitLegacy.make: Delete stale MemoryMeasure.h
        forwarding header from incremental WebKit builds and ignore when generating
        new forwarding headers.

        * Platform/foundation/LoggingFoundation.mm:
        (WebKit::logLevelString): Use string directly instead of a named constant.

        * UIProcess/mac/WebColorPickerMac.h: Mark class final.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        * NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        * NetworkProcess/cocoa/NetworkActivityTrackerCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/webrtc/NetworkRTCProvider.mm:
        * Platform/spi/Cocoa/DeviceManagementSPI.h:
        * Platform/spi/Cocoa/LocalAuthenticationSPI.h:
        * Platform/spi/Cocoa/NearFieldSPI.h:
        * Platform/spi/Cocoa/SafeBrowsingSPI.h:
        * Platform/spi/mac/AppKitSPI.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        * Shared/API/Cocoa/WKMain.mm:
        * Shared/APIWebArchive.mm:
        * Shared/APIWebArchiveResource.mm:
        * Shared/Authentication/cocoa/AuthenticationChallengeDispositionCocoa.mm:
        * Shared/Cocoa/LoadParametersCocoa.mm:
        * Shared/Cocoa/SandboxInitialiationParametersCocoa.mm:
        * Shared/Cocoa/WKNSData.mm:
        * Shared/DocumentEditingContext.mm:
        * Shared/Plugins/mac/PluginSandboxProfile.mm:
        * Shared/RemoteLayerTree/WKAnimationDelegate.h:
        * Shared/UserInterfaceIdiom.mm:
        * Shared/ios/WebIconUtilities.mm:
        * Shared/mac/CodeSigning.mm:
        * Shared/mac/ColorSpaceData.mm:
        * Shared/mac/HangDetectionDisablerMac.mm:
        * Shared/mac/PDFKitImports.mm:
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm:
        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm:
        * UIProcess/API/Cocoa/WKContentRuleList.mm:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiers.mm:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKResourceLoadInfoInternal.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstPartyInternal.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdPartyInternal.h:
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.mm:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponseInternal.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreDelegate.h:
        * UIProcess/Authentication/mac/WebCredentialMac.mm:
        * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:
        * UIProcess/Cocoa/IconLoadingDelegate.mm:
        * UIProcess/Cocoa/MediaUtilities.mm:
        * UIProcess/Cocoa/PreferenceObserver.h:
        * UIProcess/Cocoa/PreferenceObserver.mm:
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationNSURLExtras.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        * UIProcess/Cocoa/SOAuthorization/WKSOAuthorizationDelegate.h:
        * UIProcess/Cocoa/WKEditCommand.h:
        * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * UIProcess/Gamepad/cocoa/UIGamepadProviderCocoa.mm:
        * UIProcess/Inspector/mac/WKInspectorViewController.h:
        * UIProcess/Inspector/mac/WKInspectorWKWebView.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm:
        * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        * UIProcess/WebAuthentication/Cocoa/WKNFReaderSessionDelegate.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        * UIProcess/ios/WKDeferringGestureRecognizer.h:
        * UIProcess/ios/WKHighlightLongPressGestureRecognizer.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        * UIProcess/ios/forms/WKDatePickerViewController.h:
        * UIProcess/ios/forms/WKDatePickerViewController.mm:
        * UIProcess/ios/forms/WKFocusedFormControlView.h:
        * UIProcess/ios/forms/WKFocusedFormControlView.mm:
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        * UIProcess/ios/forms/WKNumberPadViewController.h:
        * UIProcess/ios/forms/WKNumberPadViewController.mm:
        * UIProcess/ios/forms/WKQuickboardListViewController.h:
        * UIProcess/ios/forms/WKQuickboardListViewController.mm:
        * UIProcess/ios/forms/WKSelectMenuListViewController.h:
        * UIProcess/ios/forms/WKTimePickerViewController.h:
        * UIProcess/ios/forms/WKTimePickerViewController.mm:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.h:
        * UIProcess/ios/fullscreen/WKFullscreenStackView.mm:
        * UIProcess/mac/PageClientImplMac.mm:
        * UIProcess/mac/WKSharingServicePickerDelegate.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.h:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.h:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        More #import, less #pragma once.

2020-04-20  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] lowWatermarkPages() in MemoryPressureMonitor.cpp only searches the "low" value inside the first "Node" section
        https://bugs.webkit.org/show_bug.cgi?id=210345

        Reviewed by Adrian Perez de Castro.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::lowWatermarkPages):

2020-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=210184

        Reviewed by Žan Doberšek.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create): Pass page and frame identifiers to the constructor.
        (WebKit::NetworkDataTask::isThirdPartyRequest const): Moved from NetworkDataTaskCocoa.mm.
        (WebKit::NetworkDataTask::restrictRequestReferrerToOriginIfNeeded): Ditto.
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup): Initialize m_frameID and m_pageID.
        (WebKit::NetworkDataTaskSoup::createRequest): Add WasBlockingCookies parameter. Call
        restrictRequestReferrerToOriginIfNeeded() and disable cookies in the soup message if cookies should be blocked.
        (WebKit::NetworkDataTaskSoup::clearRequest): Reset m_isBlockingCookies.
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Pass WasBlockingCookies to createRequest().
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadedThirdPartyDomains): Added for tests.
        (WKPageClearLoadedThirdPartyDomains): Ditto.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/glib/WebsiteDataStoreGLib.cpp:
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Use lowercase for consistency with other
        default directories.

2020-04-20  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r259610): Leak of RBSAssertionInvalidationCallbackType due to missing -dealloc
        <https://webkit.org/b/210711>
        <rdar://problem/61993361>

        Reviewed by Geoffrey Garen.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKRBSAssertionDelegate dealloc]): Add.
        - Release _invalidationCallback to fix the leak.

2020-04-19  Brady Eidson  <beidson@apple.com>

        Add WKScriptMessageHandler API that asynchronously responds with a promise.
        rdar://problem/57243492 and https://bugs.webkit.org/show_bug.cgi?id=206398

        Reviewed by Andy Estes.
        
        Change webkit.messageHandlers.<name>.postMessage() to return a promise instead of undefined.
        
        Allow for that promise to be resolved by an asynchronous reply block up in the API client.
        This is like the spiritual opposite version of [WKWebView callAsyncFunction:...]
        
        And while we're adding a new script message handler variant, we're adding it sandboxed by WKContentWorld.

        * Shared/API/APISerializedScriptValue.h:
        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm:
        (API::validateObject):
        (API::coreValueFromNSObject):
        (API::SerializedScriptValue::createFromNSObject):
        (API::SerializedScriptValue::wireBytesFromNSObject): Deleted.

        * UIProcess/API/Cocoa/WKScriptMessage.h: Now that script message handlers can be per-world, messages
          declare which world they were posted from.
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        (-[WKScriptMessage _initWithBody:webView:frameInfo:name:world:]):
        (-[WKScriptMessage world]):
        (-[WKScriptMessage _initWithBody:webView:frameInfo:name:]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageInternal.h:

        * UIProcess/API/Cocoa/WKScriptMessageHandlerWithReply.h: Added.
          Declare the new protocol for a script message handler that can reply to messages asynchronously.

        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addScriptMessageHandler:]):
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController addScriptMessageHandler:contentWorld:name:]):
        (-[WKUserContentController addScriptMessageHandlerWithReply:contentWorld:name:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:contentWorld:]):
        (-[WKUserContentController removeAllScriptMessageHandlersFromContentWorld:]):
        (-[WKUserContentController removeAllScriptMessageHandlers]):
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
        Update for new shared API::SerializedScriptValue initialization.
        
        * UIProcess/API/glib/WebKitUserContentManager.cpp:
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        * UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.cpp:
        
        * UIProcess/UserContent/WebScriptMessageHandler.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in:
        
        * WebKit.xcodeproj/project.pbxproj:
        
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_webkit_message_handlers_post_message):
        
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeAllUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeAllUserScriptMessageHandlersForWorlds):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

2020-04-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r244091): Leak of TaskStateChangedCallbackType due to missing -dealloc
        <https://webkit.org/b/210710>
        <rdar://problem/61992856>

        Reviewed by Darin Adler.

        * Shared/Cocoa/ProcessTaskStateObserver.mm:
        (-[WKProcessTaskStateObserverDelegate dealloc]): Add.
        - Release _taskStateChangedCallback to fix the leak.

2020-04-19  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Use MESSAGE_CHECK in WebPageProxy::loadRecentSearches() and WebPageProxy::saveRecentSearches()
        <https://webkit.org/b/210683>
        <rdar://problem/59240446>

        Reviewed by Geoffrey Garen.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (MESSAGE_CHECK): Add.
        (MESSAGE_CHECK_COMPLETION): Add.
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        - Replace boolean check of const String& with MESSAGE_CHECK.

2020-04-18  Darin Adler  <darin@apple.com>

        Update header postprocessing version cutoff to keep Apple internal builds working
        https://bugs.webkit.org/show_bug.cgi?id=210708

        Reviewed by Brady Eidson.

        * Configurations/WebKit.xcconfig: Update versions to make building with older
        Apple internal SDKs continue to work.

        * Shared/API/Cocoa/WKFoundation.h:
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * UIProcess/API/Cocoa/WKContentWorld.h:
        * UIProcess/API/Cocoa/WKFindConfiguration.h:
        * UIProcess/API/Cocoa/WKFindResult.h:
        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPDFConfiguration.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKFrameTreeNode.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKResourceLoadDelegate.h:
        * UIProcess/API/Cocoa/_WKResourceLoadInfo.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.h:
        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.h:
        * UIProcess/API/Cocoa/_WKTextManipulationConfiguration.h:
        * UIProcess/API/Cocoa/_WKTextManipulationExclusionRule.h:
        * UIProcess/API/Cocoa/_WKTextManipulationItem.h:
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h:
        * UIProcess/API/Cocoa/_WKUserContentWorld.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        Because the way we do post-processing of headers in the legacy Xcode
        build system won't work once the files have been processed once, touch
        each file that has WK_MAC_TBA, WK_IOS_TBA, or
        WK_FRAMEWORK_HEADER_POSTPROCESSING_ENABLED in it. Found something to
        change in each file. This is likely unnecessary in the new Xcode build
        system, but I wasn't able to test that locally.

        * WebKit.xcodeproj/project.pbxproj:
        (postprocess-header-rule): Added dependencies so that post-processing will be
        redone if Configurations/WebKit.xcconfig is touched, since that is where
        WK_FRAMEWORK_HEADER_POSTPROCESSING_DISABLED is set, or if
        Scripts/postprocess-header-rule is touched, since that is where the
        post-processing code is. If either of those files changes it could affect the
        output of post-processing. This should make a change like this work in the
        new Xcode build system without touching files as is done above.

2020-04-18  Brady Eidson  <beidson@apple.com>

        Fix WebUserContentControllerProxy vs ContentWorld lifetime
        https://bugs.webkit.org/show_bug.cgi?id=210700

        Reviewed by Alex Christensen.

        Covered by API test.
        
        WebUserContentControllerProxy currently keeps all of its associated API::ContentWorlds alive via RefPtrs.
        
        This is despite the fact that all of the associated WebScriptMessageHandlers, UserScripts, and 
        UserStyleSheets already keep their associated API::ContentWorlds alive.

        It then decideds to tell WebProcesses to forget a content world after all of its clients are removed.
        
        Unfortunately, content worlds are used for more than just content controller stuff. They're used for direct
        JavaScript evaluation as well.
        
        So a client could:
          - Add a script message handler in a content world.
          - Evaluate JavaScript in that content world, setting up some persistent state.
          - Remove the script message handler.
          - Find that their persistent state from the JavaScript evaluation is gone from that world, even though they
            still retain a usable handle to that world.
        
        The only party who has any business managing the lifetime of an API::ContentWorld is the API::ContentWorld itself.
        
        Making this change is:
          1 - Nice cleanup
          2 - Fixes the above mentioned bug
        
        * UIProcess/API/APIContentWorld.cpp:
        (API::ContentWorld::worldForIdentifier):
        (API::ContentWorld::ContentWorld):
        (API::ContentWorld::sharedWorldWithName):
        (API::ContentWorld::~ContentWorld):
        (API::ContentWorld::addAssociatedUserContentControllerProxy):
        (API::ContentWorld::userContentControllerProxyDestroyed):
        * UIProcess/API/APIContentWorld.h:

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::parameters const):
        (WebKit::WebUserContentControllerProxy::addContentWorld):
        (WebKit::WebUserContentControllerProxy::contentWorldDestroyed):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
        (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        (WebKit::WebUserContentControllerProxy::addContentWorldUse): Deleted.
        (WebKit::WebUserContentControllerProxy::shouldSendRemoveContentWorldsMessage): Deleted.
        (WebKit::WebUserContentControllerProxy::removeContentWorldUses): Deleted.
        * UIProcess/UserContent/WebUserContentControllerProxy.h:

2020-04-18  David Kilzer  <ddkilzer@apple.com>

        Attempt #4 to fix tvOS build

        Unreviewed.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        - Add #if ENABLE(VIDEO_PRESENTATION_MODE)/#endif to protect
          function defined in WebCore/PictureInPictureSupport.h.
        - See previous build fixes in r260307, r260308 and r260313.

2020-04-18  Alex Christensen  <achristensen@webkit.org>

        Fix client certificate authentication when using non-default WKWebsiteDataStores
        https://bugs.webkit.org/show_bug.cgi?id=210681

        Reviewed by Brady Eidson.

        NetworkProcessProxy was trying to keep a map of WebsiteDataStores, but it wasn't as accurate as the one WebsiteDataStore was maintaining.
        Use the latter map instead and client certificate authentication works.  Otherwise, the credential isn't serialized correctly.
        I found this while working on <rdar://problem/60340449> but this was unrelated so I put it in a different change.
        This may fix <rdar://problem/60910392>.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):

2020-04-18  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] Replace evil strtok() calls with fscanf() in MemoryPressureMonitor.cpp
        https://bugs.webkit.org/show_bug.cgi?id=210346

        Reviewed by Adrian Perez de Castro.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::lowWatermarkPages):
        (WebKit::getCgroupControllerPath):
        (WebKit::systemMemoryUsedAsPercentage):
        (WebKit::CGroupMemoryController::getCgroupFileValue):

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

        Reduce parameter list of the FrameLoadRequest constructor
        https://bugs.webkit.org/show_bug.cgi?id=210668

        Reviewed by Darin Adler.

        Adapt to API change.

        * WebProcess/Inspector/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::loadURL):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLInFrame):
        (WebKit::WebPage::loadDataInFrame):
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):

2020-04-18  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Use MESSAGE_CHECK in WebPasteboardProxy
        <https://webkit.org/b/210684>
        <rdar://problem/59906721>

        Reviewed by Wenson Hsieh.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        - Add missing #undef of MESSAGE_CHECK_COMPLETION and
          MESSAGE_CHECK_WITH_RETURN_VALUE.
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringForType):
        (WebKit::WebPasteboardProxy::getPasteboardStringsForType):
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::setPasteboardStringForType):
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        (WebKit::WebPasteboardProxy::readStringFromPasteboard):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        - Replace existing code with MESSAGE_CHECK_COMPLETION macros.

        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::typesSafeForDOMToReadAndWrite):
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        - Add IPC::Connection to TypesSafeForDOMToReadAndWrite.

2020-04-17  Kate Cheney  <katherine_cheney@apple.com>

        Enable service workers for app-bound domains
        https://bugs.webkit.org/show_bug.cgi?id=210451
        <rdar://problem/61479474>

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::createFetchTask):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::swConnection):
        (WebKit::NetworkConnectionToWebProcess::isServiceWorkerAllowed const): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        Removed ASSERTS and service worker entitlement checks which are now done along with app-bound
        domain checks in SWServer.cpp.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        Remove the check for parentProcessHasServiceWorkerEntitlement() before
        adding a serviceWorkerSession. This doesn't do anything except add an
        entry to a map, and simplifies the case where we need a session for
        app-bound instances which should have service workers but have no entitlement.

        Pass the entitlement and a new callback to request app-bound domains
        from the UI Process to the SWServer. This will make sure the server
        checks for the entitlement or list of app-bound domains before completing a load.

        (WebKit::NetworkProcess::registerSWServerConnection):
        Remove unnecessary ASSERT for entitlement.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::parentProcessHasServiceWorkerEntitlement const):
        (WebKit::NetworkProcess::disableServiceWorkerEntitlement):
        (WebKit::NetworkProcess::clearServiceWorkerEntitlementOverride):
        In order to test this thoroughly, TestWebKitAPI needed a way to
        temporarily disable the service worker entitlement. This function
        overrides the check for the entitlement if the bool is set, disabling
        the entitlement.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        WebPage needs to know if it is app-bound when created so it can update
        the service worker preferences key accordingly.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _serviceWorkerEntitlementDisabledForTesting]):
        (-[WKPreferences _setServiceWorkerEntitlementDisabledForTesting:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        Disable entitlement for testing.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::limitsNavigationsToAppBoundDomains const):
        (API::PageConfiguration::setLimitsNavigationsToAppBoundDomains):
        (API::PageConfiguration::limitsNavigationToAppBoundDomains const): Deleted.
        (API::PageConfiguration::setLimitsNavigationToAppBoundDomains): Deleted.
        (-[WKWebViewConfiguration limitsNavigationsToAppBoundDomains]):
        (-[WKWebViewConfiguration setLimitsNavigationsToAppBoundDomains:]):
        (-[WKWebViewConfiguration limitsNavigationToAppBoundDomains]): Deleted.
        (-[WKWebViewConfiguration setLimitsNavigationToAppBoundDomains:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        Inconsistent naming (Navigation vs Navigations).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        Check for entitlement or app-bound webview.

        (-[WKWebView _serviceWorkersEnabled:]):
        (-[WKWebView _clearServiceWorkerEntitlementOverride:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Testing SPIs.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getAppBoundDomains):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        Sends the app-bound domains to the Network Process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::m_limitsNavigationToAppBoundDomains): Deleted.
        Naming inconsistency.

        (WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess):
        (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):
        * UIProcess/WebPageProxy.h:
        Disable entitlement for testing.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_isNavigatingToAppBoundDomain):
        Set this parameter in the constructor so it will be accurate when
        updating preferences.

        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::clearServiceWorkerEntitlementOverride):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement const):
        (WebKit::WebPage::disableServiceWorkerEntitlement):
        (WebKit::WebPage::clearServiceWorkerEntitlementOverride):
        Disable entitlement for testing.

2020-04-17  Alex Christensen  <achristensen@webkit.org>

        NetworkSessionCocoa should request client certificate only once per host/port
        https://bugs.webkit.org/show_bug.cgi?id=210626
        <rdar://problem/60340449>

        Reviewed by Geoffrey Garen.

        NSURLSession creates more than one TCP connection to a server when using HTTP 1.1.
        Each TCP connection with TLS generates a didReceiveChallenge to do the server trust evaluation of the certificate chain.
        If the server requests a client certificate in the TLS handshake, it also generates a didReceiveChallenge to request client
        certificates as well.  This is an implementation detail of our networking.  We should not actually ask the WKNavigationDelegate
        for client certificates more than once per host/port.  We should remember the credential and give it to NSURLSession immediately
        if we have used this credential in the past for a task that has received bytes (either a response or a redirect).  If the TLS
        handshake fails, we should not reuse that same certificate automatically.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (WebKit::NetworkSessionCocoa::clientCertificateSuggestedForHost):
        (WebKit::NetworkSessionCocoa::taskReceivedBytes):
        (WebKit::NetworkSessionCocoa::taskFailed):
        (WebKit::NetworkSessionCocoa::successfulClientCertificateForHost const):

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        Bug 210646: REGRESSION (r260112): createArchiveList() leaks malloc memory on early returns due to an error
        <https://webkit.org/b/210646>
        <rdar://problem/61928031>

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::createArchiveList):
        - Move early returns for protocolProperties, protocolProperties
          and mimeType above memory allocation to fix the memory leak.

2020-04-17  Brady Eidson  <beidson@apple.com>

        Pass sandbox extensions for back/forward list navigations after the policy is decided at process-swap time.
        <rdar://problem/59535167> and https://bugs.webkit.org/show_bug.cgi?id=210623

        Reviewed by Geoff Garen.

        Covered by almost all existing tests, and a new API test.

        Instead of granting a sandbox extension when updating the back/forward cursor for a pending 
        back/forward list traversal, do so after the client decides the policy.
        (Which is also along with a process swap in interesting cases)

        * Shared/PolicyDecision.h:
        (WebKit::PolicyDecision::encode const):
        (WebKit::PolicyDecision::decode):

        * Shared/WebPageCreationParameters.h:

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::create):
        (API::Navigation::reloadItem const):

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::backForwardGoToItem):
        * UIProcess/ProvisionalPageProxy.h:

        * UIProcess/WebNavigationState.cpp:
        (WebKit::WebNavigationState::createReloadNavigation):
        * UIProcess/WebNavigationState.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::goToItem):

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r234105): [iOS] WKColorButton leaks a UIColor
        <https://webkit.org/b/210658>
        <rdar://problem/61938137>

        Reviewed by Darin Adler.

        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorButton dealloc]): Add.
        - Release _color instance variable to fix leak.

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny iokit open access of unused class in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=210669

        Reviewed by Brent Fulgham.

        Telemetry shows that iokit open access of an iokit class can be removed from the WebContent sandbox.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        [iOS] Refactor WebKit uploads process assertion logic to minimize chances of leaking them
        https://bugs.webkit.org/show_bug.cgi?id=210664
        <rdar://problem/61751982>

        Reviewed by Geoff Garen.

        To minimize chances of leaking "WebKit uploads" process assertion, the following refactoring
        was done:
        1. WebKit upload assertions are now held by NetworkProcessProxy instead of the WebProcessPool.
           This makes more sense since uploads are tied to a particular network process. In base of
           a network process crash, we would not want those assertions to persist for example.
        2. Store all upload assertions (UIProcess + NetworkProcess + WebProcesses) into a single
           UploadActivity data structure that can easily be cleared. Make sure we clear it on network
           process crash.
        3. No longer on the WebProcess to send IPC whenever its has pending uploads or not. Instead,
           have the network process send such IPC. This makes more sense, especially now that all
           webkit upload process assertions are now stored on NetworkProcessProxy. It also makes it
           so that we deal properly with WebProcess crashes. In case of a WebProcess crash, its
           connection to the network process will get closed. NetworkConnectionToWebProcess::didClose()
           gets called and causes all NetworkResourceLoader objects for this connection to get
           destroyed. As a result, the network process will properly notify the UIProcess that this
           process no longer has any upload in progress.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::hasUploadStateChanged):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoadMap.cpp:
        (WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap):
        (WebKit::NetworkResourceLoadMap::~NetworkResourceLoadMap):
        (WebKit::NetworkResourceLoadMap::add):
        (WebKit::NetworkResourceLoadMap::clear):
        (WebKit::NetworkResourceLoadMap::take):
        (WebKit::NetworkResourceLoadMap::setHasUpload):
        * NetworkProcess/NetworkResourceLoadMap.h:
        (WebKit::NetworkResourceLoadMap::hasUpload const):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setWebProcessHasUploads):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::pid const):
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:

2020-04-17  Jer Noble  <jer.noble@apple.com>

        Bring Fullscreen API + alert() behavior from iOS to macOS
        https://bugs.webkit.org/show_bug.cgi?id=210662

        Reviewed by Eric Carlson.

        When a page is showing an alert(), all non-synchronous messages will be blocked until the sync XPC for alert()
        ends. And when exiting fullscreen, we block completing the fullscreen exit animation until a repaint XPC completes.
        So a page that is showing an alert() will never fully exit element fullscreen mode.

        On iOS, we fixed this behavior by exiting fullscreen mode whenever the page shows an alert() or prompt(). We should
        bring this behavior to macOS as well.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):

2020-04-17  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::WebCore target
        https://bugs.webkit.org/show_bug.cgi?id=210445

        Reviewed by Michael Catanzaro.

        Use the WebKit::WebCore target within the WebKit target.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:

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

        Turn async frame and overflow scrolling on by default on macOS
        https://bugs.webkit.org/show_bug.cgi?id=210661
        rdar://problem/60420037

        Reviewed by Tim Horton.

        Flip the plist value and the default value for macOS which is outside of the feature flag #ifdef.

        Testing keeps async overflow scrolling off by default, so this should not affect testing.

        This only impacts WebKit2.

        * FeatureFlags/WebKit.plist:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultAsyncFrameAndOverflowScrollingEnabled):

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add telemetry to some mach lookup sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=210657

        Reviewed by Darin Adler.

        Add telemetry in order to learn more about how some of the mach lookup extensions are being used in the WebContent process on iOS.

        No new tests, since this patch does not change any behavior.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        Validate socket in NetworkRTCProvider::wrapNewTCPConnection
        https://bugs.webkit.org/show_bug.cgi?id=210594

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        Add a null check in case the identifier does not relate to an existing pending socket.

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

        Cleanup the macros for video fullscreen and picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=210638

        Reviewed by Eric Carlson.

        Replace some "#if PLATFORM(IOS_FAMILY) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))"
        and all "#if (PLATFORM(IOS_FAMILY) && HAVE(AVKIT)) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))"
        with "#if ENABLE(VIDEO_PRESENTATION_MODE)".

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenGravity):
        (WebKit::RemoteMediaPlayerProxy::updateVideoFullscreenInlineImage):
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenMode):
        (WebKit::RemoteMediaPlayerProxy::videoFullscreenStandbyChanged):
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        (WebKit::WebPageProxy::exitFullscreenImmediately):
        * UIProcess/WebPageProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/VideoFullscreenManager.h:
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:

2020-04-17  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update for GdkKeymap API changes
        https://bugs.webkit.org/show_bug.cgi?id=210642

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        gdk_keymap_get_default() is deprecated in GTK+ 3.22, so use
        gdk_keymap_get_for_display() instead. Since in GTK4 this method is
        removed to gdk_display_get_keymap(), add a helper to
        GtkVersioning.h to avoid cluttering with ifdefs all over the
        place.

        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::doKeyStrokeEvent):

2020-04-17  Antoine Quint  <graouts@apple.com>

        Allow the UserStyleLevel to be set through _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=210653
        <rdar://problem/60506645>

        Reviewed by Tim Horton.

        Add a new _WKUserStyleLevel enum such that we may provide the specificity level of the backing UserStyleSheet, represented by the UserStyleLevel enum in WebCore.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:level:userContentWorld:]):
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:level:userContentWorld:]):
        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:userContentWorld:]): Deleted.
        * UIProcess/API/Cocoa/_WKUserStyleSheetInternal.h:
        (API::toWebCoreUserStyleLevel):

2020-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][X11] REGRESSION(r259944): Wrong position of select popup menu in X11
        https://bugs.webkit.org/show_bug.cgi?id=210603

        Reviewed by Michael Catanzaro.

        gdk_window_move_to_rect expects the given rectangle in coordinates relative to the top-left corner of the window
        that the popup window is transient for. We were using screen coordinates.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu): Translate widget coordinates to window coordinates before passing
        the rectangle to gdk_window_move_to_rect().

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r256756): -[WKUserDefaults initWithSuiteName:]: Instance variable used while 'self' is not set to the result of '[(super or self) init...]'
        <https://webkit.org/b/210647>
        <rdar://problem/61928289>

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKUserDefaults initWithSuiteName:]):
        - Call `[self initWithSuite:]` and set `self` to fix the clang
          static analyzer warning.
        - Fix camelCase of `suitename` parameter.

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny iokit open access to graphics related classes
        https://bugs.webkit.org/show_bug.cgi?id=210616

        Reviewed by Darin Adler.

        Deny iokit open access to graphics related classes in the WebContent process on iOS, but issue
        extensions for these for some devices which still need access to them.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::SandboxExtension::createHandleForIOKitClassExtension):
        * Shared/SandboxExtension.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _setDeviceHasAGXCompilerServiceForTesting]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::deviceHasAGXCompilerService): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setDeviceHasAGXCompilerServiceForTesting const):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crash when entering compositing mode when WPE_RENDERER is enabled
        https://bugs.webkit.org/show_bug.cgi?id=209118

        Reviewed by Michael Catanzaro.

        Check if EGL_WL_bind_wayland_display extension is available when using WPE_RENDERER, since we don't suport the
        SHM interface.

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::checkRequirements): Return false if EGL_WL_bind_wayland_display is not present.

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

        Move allowPlugins to FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=205876

        Reviewed by Darin Adler.

        Adapt to API change.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::pluginInfo):
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):
        (WebKit::WebPage::canShowMIMEType const):

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

        Cleanup the usage of ENABLE_FULLSCREEN_API
        https://bugs.webkit.org/show_bug.cgi?id=210630

        Reviewed by Daniel Bates.

        Replace "#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API" with
        "#if ENABLE(FULLSCREEN_API)".

        No new tests, no functional change

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFullScreenClient):
        (WKBundlePageWillEnterFullScreen):
        (WKBundlePageDidEnterFullScreen):
        (WKBundlePageWillExitFullScreen):
        (WKBundlePageDidExitFullScreen):

2020-04-16  Kate Cheney  <katherine_cheney@apple.com>

        Distinguish between an empty WKAppBoundDomains array and a missing entry
        https://bugs.webkit.org/show_bug.cgi?id=210628
        <rdar://problem/61909669>

        Reviewed by Brent Fulgham.

        Currently we treat a missing WKAppBoundDomains key the same as an empty
        key, which is incorrect. Having the key present, even with no entries,
        should opt an app into app-bound domain behavior.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::initializeAppBoundDomains):
        (WebKit::WebsiteDataStore::beginAppBoundDomainCheck):

2020-04-16  Brent Fulgham  <bfulgham@apple.com>

        Add a new 'limitNavigationsToAppBoundDomains' property to WKWebViewConfiguration 
        https://bugs.webkit.org/show_bug.cgi?id=210620
        <rdar://problem/61903225>

        Reviewed by Andy Estes.

        Follow-up fix. The property exposed by WKWebViewConfiguration should not
        use a local BOOL; it simply exposes the APIPageConfiguration value.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration limitsNavigationToAppBoundDomains]):
        (-[WKWebViewConfiguration setLimitsNavigationToAppBoundDomains:]):
        (-[WKWebViewConfiguration _setIgnoresAppBoundDomains:]):

2020-04-16  Brent Fulgham  <bfulgham@apple.com>

        Switch NetworkProcess and NetworkProcessProxy messages to use CallbackID class
        https://bugs.webkit.org/show_bug.cgi?id=210566
        <rdar://problem/61791784>

        Reviewed by David Kilzer.

        Instead of using the raw uint64_t type to represent callbacks, use the purpose
        built WebKit::CallbackID type.

        Tested by existing cases.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::didFetchWebsiteData):
        (WebKit::NetworkProcessProxy::didDeleteWebsiteData):
        (WebKit::NetworkProcessProxy::didDeleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2020-04-16  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the macCatalyst build

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (uiImageForImage):
        (createTargetedPreview):
        (createFallbackTargetedPreview):
        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]):

2020-04-16  David Kilzer  <ddkilzer@apple.com>

        Re-land: [IPC Hardening] MachMessage::create() should use checked arithmetic
        <https://webkit.org/b/210572>
        <rdar://problem/61729947>

        Reviewed by Chris Dumez.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::sendOutgoingMessage):
        - Add nullptr check since MachMessage::create() can return an
          empty std::unique_ptr<> now.
        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::create):
        - Use CheckedSize to compute the buffer size.

2020-04-16  Brent Fulgham  <bfulgham@apple.com>

        Add a new 'limitNavigationsToAppBoundDomains' property to WKWebViewConfiguration 
        https://bugs.webkit.org/show_bug.cgi?id=210620
        <rdar://problem/61903225>

        Reviewed by Andy Estes.

        Provide a way for Developers to opt-in to AppBound domains through a new WKWebViewConfiguration
        property.

        This patch only creates the property and exposes the flag to the APIPageConfiguration and
        WebPageProxy. A separate patch will take action based on its value.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::limitsNavigationToAppBoundDomains const):
        (API::PageConfiguration::setLimitsNavigationToAppBoundDomains):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration limitsNavigationToAppBoundDomains]):
        (-[WKWebViewConfiguration setLimitsNavigationToAppBoundDomains:]):
        (-[WKWebViewConfiguration _setIgnoresAppBoundDomains:]): Keep the new property in
        sync with this internal flag.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationToAppBoundDomains):
        * UIProcess/WebPageProxy.h:

2020-04-16  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix for non unified builds.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp: Added missing include.

2020-04-16  Daniel Bates  <dabates@apple.com>

        Remove unused -_focusTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=210619

        Reviewed by Darin Adler.

        While this function was in the "SPI" header, there is no software at Apple that was using
        this funciton and I will assume no non-Apple software was using it either.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _focusTextInputContext:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2020-04-16  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Switch unused IOKit classes from allow-with-report to deny-with-report
        https://bugs.webkit.org/show_bug.cgi?id=210136
        <rdar://problem/61403216>

        Reviewed by Per Arne Vollan.

        After tracking telemetry for several weeks, we can now safely switch the default state
        of a number of IOKit classes from 'allow with telemetry' to 'deny with telemetry'.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
 
2020-04-16  Daniel Bates  <dabates@apple.com>

        Fix the iOS build when building without EDITABLE_REGION after r260192
        (https://bugs.webkit.org/show_bug.cgi?id=210398)

        Have -_mayContainEditableElementsInRect compile-time conditionally call WebKit::mayContainEditableElementsInRect().
        If ENABLE(EDITABLE_REGION) is not enabled then return NO.

        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _mayContainEditableElementsInRect:]):

2020-04-16  David Kilzer  <ddkilzer@apple.com>

        Rollout: [IPC Hardening] MachMessage::create() should use checked arithmetic
        <https://webkit.org/b/210572>
        <rdar://problem/61729947>

        Unreviewed rollout of r260160.

        Appears to have caused 8 API test failures on iOS.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::sendOutgoingMessage):
        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::create):

2020-04-16  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r260081) Broke iOS PLT due to InjectedBundle initialization (edit)
        https://bugs.webkit.org/show_bug.cgi?id=210582
        <rdar://problem/61838584>

        Reviewed by Darin Adler.

        The changes in r260081 began enforcing NSSecureCoding best practices, triggering
        a bug in InjectedBundleMac.mm, which is used by iOS as well.

        This patch does the following:

        1. Delays parameter decoding until we use the appropriate InjectedBundle mechanism
           for expressing the valid classes to use in the Unarchiver.
        2. Removes a temporary workaround needed to get PLT running on iOS again.

        This patch also moves the check of the CFBundleGetFunctionPointerForName slightly earlier
        so we can use a single function pointer check, and only invoke the parameter decoding
        if we are using the C API.
        
        If not, we delay parameter decoding until we have constructed the WKWebProcessPlugIn
        object so we can consume it's 'additionalClassesForParameterCoder' before calling
        its initialization method.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::decodeBundleParameters): Remove temporary workaround
        needed to get PLT working again. Instead of using a debug assert, return as
        a decoding failure if the resulting object is not an NSDictionary.
        (WebKit::InjectedBundle::initialize): Delay decoding the bundle parameters on
        iOS until the Plugin's additionalClassesForParameterCoder method can be called.

2020-04-16  Daniel Bates  <dabates@apple.com>

        [iOS] Add a way to focus a text input and place a caret
        https://bugs.webkit.org/show_bug.cgi?id=210611
        <rdar://problem/61893062>

        Reviewed by Darin Adler.

        Add some IPI that will be used by code in WebKitAdditions to focus a text input context
        and place the caret in it. This will replace the existing -focusTextInput SPI, which I
        will remove in a subsequent commit.

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]): Fix up code style
        of signature while I am here.
        (-[WKWebView _focusTextInputContext:placeCaretAt:completionHandler:]): Added.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _isTextInputContextFocused:]): Added.
        (-[WKContentView _focusTextInputContext:placeCaretAt:completionHandler:]): Added.
        (-[WKContentView _requestTextInputContextsInRect:completionHandler:]): Fix up code style
        of signature while I am here.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusTextInputContextAndPlaceCaret):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusTextInputContext): Use auto now that elementForContext() returns a RefPtr.
        (WebKit::WebPage::elementForContext const): Have it return a RefPtr instead of a raw
        pointer so callers don't have to remember to take out a ref of otherwise be mindful
        of the element's lifetime.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::removeTextPlaceholder): Use auto now that elementForContext() returns a RefPtr.
        (WebKit::WebPage::requestDocumentEditingContext): Ditto.
        (WebKit::WebPage::focusTextInputContextAndPlaceCaret): Added.

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

        Use safeRoundPage() instead of round_page() in SharedMemory
        https://bugs.webkit.org/show_bug.cgi?id=210608
        <rdar://problem/60600443>

        Reviewed by Geoffrey Garen.

        Use new safeRoundPage() instead of round_page() in SharedMemory, to deal safely with overflows.

        * Platform/cocoa/SharedMemoryCocoa.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::makeMemoryEntry):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):

2020-04-16  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes mid April 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=210599

        Unreviewed build fix.

        * UIProcess/DeviceIdHashSaltStorage.cpp: Add missing Logging.h header.
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSetForcedAppearance): Add missing WebCore:: namespace
        prefix.
        * UIProcess/linux/MemoryPressureMonitor.h: Add missing wtf/text/CString.h header.

2020-04-16  Daniel Bates  <dabates@apple.com>

        REGRESSION (r259762): Should always hit test for editable elements if the WKWebView is fully editable
        https://bugs.webkit.org/show_bug.cgi?id=210558
        <rdar://problem/61798347>

        Reviewed by Wenson Hsieh.

        If the entire WKWebView is marked editable (via SPI -[WKWebView _setEditable]) then
        always ask the web process to hit test the page because every element is considered
        editable.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requestTextInputContextsInRect:completionHandler:]):

2020-04-16  Daniel Bates  <dabates@apple.com>

        Move -_requestTextInputContextsInRect to WKContentView to simplify implementation
        https://bugs.webkit.org/show_bug.cgi?id=210398
        <rdar://problem/61656931>

        Reviewed by Darin Adler.

        -_requestTextInputContextsInRect is not needed on Mac, but supporting it complicates
        its implementation: it has to deal with coordinate space differences due to differences
        in what is the root view on Mac and iOS + it has to know about iOS's custom content views.
        While this function was in the "SPI" header, there is no software at Apple that was using
        these outside of WebKit, and I will assume no non-Apple software was using them either.
        Moving this function to WKContentView lets me simplify the implementation.

        * Platform/spi/ios/UIKitSPI.h: Add more forward declarations.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _convertRectFromRootViewCoordinates:]): Deleted.
        (-[WKWebView _convertRectToRootViewCoordinates:]): Deleted.
        (-[WKWebView _mayContainEditableElementsInRect:]): Deleted; moved to WKWebViewTestingIOS.mm.
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]): Deleted; moved to WKContentViewInteraction.mm.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _requestTextInputContextsInRect:completionHandler:]): Added. Turns around and
        calls the function of the same name on the WKContentView. It takes care to convert the specified
        rect from WKWebView coordinates to WKContentView coordinates and fixes up the bounding rects
        for the returned contexts to be in WKWebView coordinates. This keeps existings tests passing
        as mekes using this function intuitive since callers specify and get rects in WKWebView coordinates.
        (-[WKWebView _requestDocumentContext:completionHandler:]): Added.
        (-[WKWebView _adjustSelectionWithDelta:completionHandler:]): Added.
        (-[WKWebView _mayContainEditableElementsInRect:]): Moved from WKWebView.mm.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requestTextInputContextsInRect:completionHandler:]): Moved from WKWebView.mm and simplified.

2020-04-16  David Kilzer  <ddkilzer@apple.com>

        [IPC Hardening] Use ObjectIdentifier<> for LegacyCustomProtocol
        <https://webkit.org/b/210580>
        <rdar://problem/61791686>

        Reviewed by Chris Dumez.

        Replace uses of uint64_t with LegacyCustomProtocolID.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        (WebKit::LegacyCustomProtocolManager::didFailWithError):
        (WebKit::LegacyCustomProtocolManager::didLoadData):
        (WebKit::LegacyCustomProtocolManager::didReceiveResponse):
        (WebKit::LegacyCustomProtocolManager::didFinishLoading):
        (WebKit::LegacyCustomProtocolManager::wasRedirectedToRequest):
        (WebKit::LegacyCustomProtocolManager::protocolForID):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolID.h: Add.
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp:
        (WebKit::LegacyCustomProtocolManager::addCustomProtocol):
        (WebKit::LegacyCustomProtocolManager::removeCustomProtocol):
        (WebKit::LegacyCustomProtocolManager::startLoading):
        (WebKit::LegacyCustomProtocolManager::stopLoading):
        (WebKit::generateCustomProtocolID): Delete.
        - Replace with LegacyCustomProtocolID::generate().
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.messages.in:
        * Scripts/webkit/messages.py:
        * UIProcess/API/APICustomProtocolManagerClient.h:
        (API::CustomProtocolManagerClient::startLoading):
        (API::CustomProtocolManagerClient::stopLoading):
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h:
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        (WebKit::LegacyCustomProtocolManagerClient::startLoading):
        (WebKit::LegacyCustomProtocolManagerClient::stopLoading):
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp:
        (WebKit::LegacyCustomProtocolManagerProxy::startLoading):
        (WebKit::LegacyCustomProtocolManagerProxy::stopLoading):
        (WebKit::LegacyCustomProtocolManagerProxy::wasRedirectedToRequest):
        (WebKit::LegacyCustomProtocolManagerProxy::didReceiveResponse):
        (WebKit::LegacyCustomProtocolManagerProxy::didLoadData):
        (WebKit::LegacyCustomProtocolManagerProxy::didFailWithError):
        (WebKit::LegacyCustomProtocolManagerProxy::didFinishLoading):
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.h:
        - Remove unused typedef and instance variable.
        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        - Add LegacyCustomProtocolID.h to project.

2020-04-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r259898): WebKit-based Books views are all blank
        https://bugs.webkit.org/show_bug.cgi?id=210590
        <rdar://problem/61791109>

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::enterAcceleratedCompositingWithRootLayer):
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayerAfterFlush): Deleted.
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::didFirstLayerFlush):
        The changes to setAcceleratedCompositingRootLayer in r259898 proved
        to be wrong in a second way (the first being fixed in r260104): when
        setAcceleratedCompositingRootLayer is called from updateAcceleratedCompositingMode,
        because the layer hosting mode changed (Books appears to use app-hosted layers),
        it incorrectly identified the root layer change as a process swap, resulting
        in the correct layer never being unhidden.

        This is enough mistakes that I'm going to try a different approach:
        put setAcceleratedCompositingRootLayer back to the way it was before, where
        it immediately updates the layer without any smarts, remove
        setAcceleratedCompositingRootLayerAfterFlush, because it's no longer necessary,
        and add enterAcceleratedCompositingWithRootLayer, which is specifically only
        called in the case where DrawingArea will for-sure send us a follow-up
        (didFirstLayerFlush) that will unhide the root layer.

2020-04-16  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Update ScreenTime as playback state changes
        https://bugs.webkit.org/show_bug.cgi?id=210518
        <rdar://problem/61181092>

        Reviewed by Jer Noble.

        Add a manager that gets media element state changes, and a Cocoa-specific
        implementation that passes that state to ScreenTime.

        * Scripts/webkit/messages.py:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::mediaUsageManager):
        (WebKit::WebPageProxy::addMediaUsageManagerSession):
        (WebKit::WebPageProxy::updateMediaUsageManagerSessionState):
        (WebKit::WebPageProxy::removeMediaUsageManagerSession):
        * UIProcess/Media/MediaUsageManager.cpp: Added.
        (WebKit::MediaUsageManager::create):
        (WebKit::reset):
        (WebKit::MediaUsageManager::addMediaSession):
        (WebKit::MediaUsageManager::removeMediaSession):
        (WebKit::MediaUsageManager::updateMediaUsage):
        * UIProcess/Media/MediaUsageManager.h: Added.
        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.h: Added.
        (WebKit::MediaUsageManagerCocoa::SessionMediaUsage::SessionMediaUsage):
        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm: Added.
        (WebKit::usageTrackingAvailable):
        (WebKit::MediaUsageManager::create):
        (WebKit::MediaUsageManagerCocoa::~MediaUsageManagerCocoa):
        (WebKit::MediaUsageManagerCocoa::reset):
        (WebKit::MediaUsageManagerCocoa::addMediaSession):
        (WebKit::MediaUsageManagerCocoa::removeMediaSession):
        (WebKit::MediaUsageManagerCocoa::updateMediaUsage):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMediaUsageManagerSession):
        (WebKit::WebChromeClient::updateMediaUsageManagerSessionState):
        (WebKit::WebChromeClient::removeMediaUsageManagerSession):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addMediaUsageManagerSession):
        (WebKit::WebPage::updateMediaUsageManagerSessionState):
        (WebKit::WebPage::removeMediaUsageManagerSession):
        * WebProcess/WebPage/WebPage.h:

2020-04-16  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] DrawingArea::updateBackingStoreState() is not used on Apple platforms
        <https://webkit.org/b/210585>
        <rdar://problem/61802011>

        Reviewed by Geoffrey Garen.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateBackingStoreState):
        * WebProcess/WebPage/DrawingArea.messages.in:
        - Use USE(COORDINATED_GRAPHICS) || USE(TEXTURE_MAPPER) to
          protect code not used on Apple platforms.

2020-04-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] MiniBrowser opens new windows too small causing failures on some WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=210206

        Reviewed by Carlos Garcia Campos.

        Provide the size of the default window (if is set) when windowRect is called
        before the window is shown.

        * UIProcess/API/glib/WebKitUIClient.cpp:

2020-04-16  Tomoki Imai  <Tomoki.Imai@sony.com>

        TextureMapper renders video element with "object-fit: cover" incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=210544

        Reviewed by Žan Doberšek.

        Propagate GraphicsLayer::contentsClippingRect information to TextureMapperLayer
        to properly clip the outside of DOM element when the element has "object-fit: cover".

        Unfortunately, the test is disabled on WebKitGTK due to bug 177536, bug 163528.
        Test: compositing/video/video-object-fit.html

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState):

2020-04-15  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r260102): ASSERTION FAILED: m_arbitrators.contains(proxy) in WebKit::SharedArbitrator::endRoutingArbitrationForArbitrator
        https://bugs.webkit.org/show_bug.cgi?id=210589
        <rdar://problem/61844208>

        Reviewed by Eric Carlson.

        Protect against an assertion in the SharedArbitrator in case where a WebProcess is terminated before it can call
        endRoutingArbitration().

        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.cpp:
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.h:
        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::SharedArbitrator::isInRoutingArbitrationForArbitrator):
        (WebKit::SharedArbitrator::beginRoutingArbitrationForArbitrator):
        (WebKit::SharedArbitrator::endRoutingArbitrationForArbitrator):
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

2020-04-15  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r258337): Crash when right clicking on link that uses the system UI font with optimizeLegibility on Mojave
        https://bugs.webkit.org/show_bug.cgi?id=210575
        <rdar://problem/61646717>

        Reviewed by Darin Adler.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (-[WKSecureCodingFontAttributeNormalizer archiver:willEncodeObject:]):
        (IPC::encodeSecureCodingInternal):
        The workaround introduced in r250640 and r251086 for archiving NSFonts
        with optical sizing attributes is still incomplete, which was recently
        revealed by making decoding failures more apparent (in r258337).

        Specifically, the workaround was not applied to fonts encoded inside
        NSAttributedStrings, which are encoded using a keyed archiver... only
        to fonts encoded directly with CoreIPC.

        Use a NSKeyedArchiver delegate to apply our fix-up to the optical sizing
        attribute when any NSFont is being encoded, and only on platforms
        that still exhibit the bug.

        * Shared/Cocoa/CoreTextHelpers.h:
        * Shared/Cocoa/CoreTextHelpers.mm:
        (WebKit::fontWithAttributes):
        (WebKit::fontDescriptorWithFontAttributes): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateFontManagerIfNeeded):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        Refactor fontDescriptorWithFontAttributes to just return a font since that's what all callers actually want.

2020-04-15  John Wilander  <wilander@apple.com>

        Add SPI to configure WebsiteDataStores with a URL for standalone web applications and use it to disable first-party website data removal in ITP
        https://bugs.webkit.org/show_bug.cgi?id=209634
        <rdar://problem/60943970>

        Reviewed by Alex Christensen.

        This change adds a new property to _WKWebsiteDataStoreConfiguration.h called
        standaloneApplicationURL with which the hosting application can inform the
        website data store that it's running as a standalone web application.

        This change also forwards an existing standaloneApplicationURL as a
        WebCore::RegistrableDomain into ITP so that explicit exemptions can be made
        to first parties of standalone web applications. The exemptions made here
        all for all of ITP's website data removal. This part of the change is
        covered by the new layout tests.

        Tests: http/tests/resourceLoadStatistics/standalone-web-application-exempt-from-website-data-deletion-database.html
               http/tests/resourceLoadStatistics/standalone-web-application-exempt-from-website-data-deletion.html

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::setStandaloneApplicationDomain):
        (WebKit::ResourceLoadStatisticsStore::standaloneApplicationDomain const):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::setStandaloneApplicationDomain):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::forwardResourceLoadStatisticsSettings):
        * NetworkProcess/NetworkSession.h:
        * Shared/ResourceLoadStatisticsParameters.h:
        (WebKit::ResourceLoadStatisticsParameters::encode const):
        (WebKit::ResourceLoadStatisticsParameters::decode):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration standaloneApplicationURL]):
        (-[_WKWebsiteDataStoreConfiguration setStandaloneApplication:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::standaloneApplicationURL const):
        (WebKit::WebsiteDataStoreConfiguration::setStandaloneApplicationURL):

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

        [IPC Hardening] MachMessage::messageSize() should use checked arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=210567
        <rdar://problem/61734355>

        Reviewed by Geoffrey Garen.

        Replace call to round_msg() call with a call to our new safeRoundMsg() which does
        the same alignment up but using checked arithmetic to protect against overflows.

        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::safeRoundMsg):
        (IPC::MachMessage::messageSize):

2020-04-15  David Kilzer  <ddkilzer@apple.com>

        [IPC Hardening] MachMessage::create() should use checked arithmetic
        <https://webkit.org/b/210572>
        <rdar://problem/61729947>

        Reviewed by Chris Dumez.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::sendOutgoingMessage):
        - Add nullptr check since MachMessage::create() can return an
          empty std::unique_ptr<> now.
        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::create):
        - Use CheckedSize to compute the buffer size.

2020-04-15  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed PLT fix after r260081.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::decodeBundleParameters):

2020-04-15  Ben Nham  <nham@apple.com>

        DidFirstLayerFlush IPC can be head-of-line-blocked and delay first paint by 200+ ms on process swap
        https://bugs.webkit.org/show_bug.cgi?id=210571

        Reviewed by Geoffrey Garen.

        When we process swap, the layer swap/unhiding for the new hosted layer is gated by the
        DidFirstLayerFlush IPC. But actually sending this IPC can be head-of-line blocked for an
        arbitrarily long time because we append it to the queue of messages for the main run loop to
        process. In some cases, e.g. for the NYT PLT content, this blocks first paint by 200 ms
        while the WebProcess main thread is busy doing other things (like executing deferred
        scripts).

        To fix this, use a CATransaction commit handler to send the IPC right after we commit.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::sendDidFirstLayerFlushIfNeeded):

2020-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the watchOS and tvOS builds after r260146

        Move some code for controlling the presentation of context menus on iOS behind USE(UICONTEXTMENU).

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

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

        Video elements don't return to the correct position when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=210529

        Reviewed by Jer Noble.

        Some web pages use the "resize" event handler to calculate the element size after
        they exit fullscreen, and the calculation is based on the container element size which
        might be affected by the fullscreen mode.

        We need to call WebPageProxy::setNeedsDOMWindowResizeEvent() to fire the "resize" event
        in the repaint callback after the exiting fullscreen process is completed and the
        possible layout change due to exiting fullscreen is done. Otherwise the size calculation
        might be wrong.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setNeedsDOMWindowResizeEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2020-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Some pages indefinitely zoom in and out due to idempotent text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=210551
        <rdar://problem/56820674>

        Reviewed by Tim Horton.

        On a non-responsive web page with one or lines of non-wrapping text of a specific length (just under 1920px),
        it's possible for the combination of idempotent text autosizing heuristics and viewport shrink-to-fit to cause
        the single line of text to grow and shrink in size indefinitely, and additionally cause the initial scale to
        thrash between multiple values indefinitely. This manifests in the entire page repeatedly zooming in and out
        immediately after page load.

        Consider the following scenario:

        (1) A viewport configuration change (e.g. due to parsing the viewport meta tag) schedules the timer to reset
            idempotent text autosizing. Let's suppose the page has a really long line of non-wrapping 12px text that is
            below 1920px wide.

        (2) The timer fires, invalidating styles and recomputing text autosizing given the current initial scale. The
            current initial scale is below 1, since ViewportConfiguration will attempt to shrink to fit the page to
            avoid horizontal scrolling. This causes text autosizing to boost the long line of text to a larger value
            (let's say 17px).

        (3) The next time we perform style recomputation and layout, we discover that the content width of the page is
            now larger than 1920px, which is the maximum width which we'll attempt to shrink to fit; when computing
            initial scale, we give up trying to shrink down to avoid making the inital scale too small, and instead just
            keep it at 1.

        (4) This change in viewport configuration then schedules another idempotent text autosizing reset. When this
            timer fires, it sees that the initial scale is now 1, which means that the text is no longer boosted, so we
            make the single line of text small again (12px).

        (5) After the next style recomputation and layout, this causes the content width of the page to dip below the
            1920px threshold, causing the initial scale to dip below 1 again. As detailed above, this schedules another
            idempotent text autosizing update, which now boosts font size once again, and the cycle continues.

        To fix this, instead of consulting the initial scale (`ViewportConfiguration::initialScale()`) when computing
        the boosted font size for idempotent text autosizing, we can instead ask for the initial scale ignoring content
        size (`ViewportConfiguration::initialScaleIgnoringContentSize()`). This prevents changes in content size due to
        idempotent autosizing from affecting the idempotent autosizing heuristic (through the different initial scale),
        and ensures that this method of text autosizing actually remains idempotent.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetIdempotentTextAutosizingIfNeeded):
        (WebKit::WebPage::viewportConfigurationChanged):

2020-04-14  Megan Gardner  <megan_gardner@apple.com>

        Data Detected Actions sheets are presented from odd locations.
        https://bugs.webkit.org/show_bug.cgi?id=210531
        <rdar://problem/60941346>

        Reviewed by Wenson Hsieh.

        Use the existing context menu targeted preview code to ensure that the
        data detected menus are presented in a good location.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):

2020-04-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Potential crash under WebProcess::platformInitializeWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=210547

        Reviewed by Brent Fulgham.

        If the UI process fails to issue an extension to the runningboard service, the WebContent process will crash
        while trying to consume this extension.

        No new tests, since the test runners are unsandboxed, so issuing the extension will always succeed.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Remove generic parameter serialization fallback
        https://bugs.webkit.org/show_bug.cgi?id=210509
        <rdar://problem/55522650>

        Reviewed by Geoffrey Garen.

        Tested by BundleFormDelegate parameter serialization tests...

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInputDelegate:]):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::elementDidFocus):

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

        REGRESSION (r259610): WebGL does not work at all on iOS (was: Google Maps tiles turn black after initial load)
        <rdar://problem/61794480>

        Unreviewed, partial revert of r259610 because it broke Google Maps.
        Stop using RunningBoard for the "Foreground" assertion because it fails to
        give the target GPU access.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):

2020-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Fix use of gtk init functions
        https://bugs.webkit.org/show_bug.cgi?id=210550

        Reviewed by Adrian Perez de Castro.

        Include GtkVersioning.h instead of gtk.h

        * WebProcess/gtk/WebProcessMainGtk.cpp:

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

        Adopt interface AVAudioRoutingArbiter for Mac
        https://bugs.webkit.org/show_bug.cgi?id=210167

        Reviewed by Jer Noble.

        A follow-up patch to fix a build error.

        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::SharedArbitrator::beginRoutingArbitrationForArbitrator):

2020-04-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Provide an alternative to gtk_widget_{get,is}_toplevel()
        https://bugs.webkit.org/show_bug.cgi?id=210463

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitUIClient.cpp: Adapt to take into account that GTK4 does not
        provide the GtkWidget.configure-event signal.

2020-04-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, reverting r259891.

        Causes significant iOS MotionMark regression

        Reverted changeset:

        "Switch unused IOKit classes from allow-with-report to deny-
        with-report"
        https://bugs.webkit.org/show_bug.cgi?id=210136
        https://trac.webkit.org/changeset/259891

2020-04-14  Megan Gardner  <megan_gardner@apple.com>

        File Upload Menus presented from odd locations.
        https://bugs.webkit.org/show_bug.cgi?id=210523
        <rdar://problem/60390846>

        Use the existing context menu targeted preview code to ensure that the
        file menus are presented in a good location.

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):

2020-04-14  David Kilzer  <ddkilzer@apple.com>

        dictionaryValueOfType() in WebCoreArgumentCodersMac.mm can be replaced with dynamic_cf_cast<>()
        <https://webkit.org/b/210456>

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::dictionaryValueOfType): Delete.
        (IPC::extractDictionaryValue): Add.
        - Use dynamic_cf_cast<>() in place of manually checking the
          CFTypeID of each object.
        (IPC::createArchiveList):
        - Call new extractDictionaryValue() template function to verify
          values are the correct types in the dictionary and to set the
          output variables.

2020-04-14  David Kilzer  <ddkilzer@apple.com>

        Use CFArrayGetValues() in createArchiveList() in WebCoreArgumentCodersMac.mm
        <https://webkit.org/b/210519>

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::createArchiveList):
        - Use CFArrayGetValues() to copy array more efficiently.

2020-04-14  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r259898): Tabs occasionally go blank and get stuck that way
        https://bugs.webkit.org/show_bug.cgi?id=210520
        <rdar://problem/61776830>

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
        setThumbnailView calls setAcceleratedCompositingRootLayer in order to reconnect the
        existing root layer. After r259898, this would cause us to go down the
        process-swap path, and hide the root layer, and nothing would ever
        come along and fix it.

        If setAcceleratedCompositingRootLayer is called with the existing root
        layer, that cannot be a process swap, so ignore it and proceed as before.

2020-04-14  Jer Noble  <jer.noble@apple.com>

        Adopt interface AVAudioRoutingArbiter for Mac
        https://bugs.webkit.org/show_bug.cgi?id=210167
        <rdar://problem/59113994>

        Reviewed by Eric Carlson.

        Add a new cross-process object pair, AudioSessionRouterAbitrator/Proxy which passes routing
        arbitration commands from WebContent -> UIProcess. Because the UIProcess can represent
        multiple WebContent processes, it must track all outstanding arbitration requests globally.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * Sources.txt:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::mediaRelatedMachServices):
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.cpp: Added.
        (WebKit::AudioSessionRoutingArbitratorProxy::AudioSessionRoutingArbitratorProxy):
        (WebKit::AudioSessionRoutingArbitratorProxy::~AudioSessionRoutingArbitratorProxy):
        (WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory):
        (WebKit::AudioSessionRoutingArbitratorProxy::leaveRoutingArbitration):
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.h: Added.
        (WebKit::AudioSessionRoutingArbitratorProxy::category const):
        (WebKit::AudioSessionRoutingArbitratorProxy::destinationId):
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.messages.in: Added.
        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm: Added.
        (WebKit::SharedArbitrator::sharedInstance):
        (WebKit::SharedArbitrator::beginRoutingArbitrationForArbitrator):
        (WebKit::SharedArbitrator::leaveRoutingArbitrationForArbitrator):
        (WebKit::AudioSessionRoutingArbitratorProxy::AudioSessionRoutingArbitratorProxy):
        (WebKit::AudioSessionRoutingArbitratorProxy::~AudioSessionRoutingArbitratorProxy):
        (WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory):
        (WebKit::AudioSessionRoutingArbitratorProxy::leaveRoutingArbitration):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_processDisplayName):
        * WebProcess/WebProcess.cpp:
        * WebProcess/cocoa/AudioSessionRoutingArbitrator.cpp: Added.
        (WebKit::AudioSessionRoutingArbitrator::AudioSessionRoutingArbitrator):
        (WebKit::AudioSessionRoutingArbitrator::supplementName):
        (WebKit::AudioSessionRoutingArbitrator::beginRoutingArbitrationWithCategory):
        (WebKit::AudioSessionRoutingArbitrator::leaveRoutingAbritration):
        * WebProcess/cocoa/AudioSessionRoutingArbitrator.h: Added.
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::AudioFactory::createAudioCaptureSource):
        * WebProcess/com.apple.WebProcess.sb.in:

2020-04-14  David Kilzer  <ddkilzer@apple.com>

        createArchiveList() in WebCoreArgumentCodersMac.mm should do more validity checks
        <https://webkit.org/b/210448>
        <rdar://problem/61677029>

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::createArchiveList): Add more validity checks.

2020-04-14  Brent Fulgham  <bfulgham@apple.com>

        Do more checking before reusing precompiled sandbox
        https://bugs.webkit.org/show_bug.cgi?id=210304
        <rdar://problem/61155623>

        Reviewed by Darin Adler.

        We recently discovered that the system sandbox framework version does not always change
        when breaking changes in the sandbox format are made. This can lead to the precompiled
        version of a sandbox not working properly when a sandbox version changes.

        To guard against this, make the following changes:

        1. Compare the SANDBOX_BUILD_ID in place when the sandbox was compiled to the value on
           the current system. SANDBOX_BUILD_ID, which is a GUID, is always regenerated when the
           sandbox framework is rebuilt.

        2. Compare the OS version in place when the sandbox was compiled to the value on the current
           system. This will trigger us recompiling sandboxes even when the sandbox framework did not
           change, but this is a small performance cost that would only happen after a software update.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::compileAndCacheSandboxProfile):
        (WebKit::tryApplyCachedSandbox):

2020-04-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Content filtering needs access to the frontboard service
        https://bugs.webkit.org/show_bug.cgi?id=210505

        Reviewed by Geoffrey Garen.

        Content filtering in the WebContent process needs access to the frontboard service on iOS. Issue an extension
        to this service when content filtering is enabled.

        API test: WebKit.WebFilterFeatureHasFrontboardServiceAccess

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Wikipedia articles lay out incorrectly in 1/3 multitasking window
        https://bugs.webkit.org/show_bug.cgi?id=210501
        <rdar://problem/54856323>

        Reviewed by Tim Horton.

        Apply the viewport quirk if needed; see WebCore/ChangeLog for more details.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2020-04-14  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        Handle the case where the InjectedBundle parameters do not successfully decode because they contain
        an unexpected class from the embedding program. If this happens, try decoding the bundle parameters
        after the bundle initialiation function runs, which gives the embedding program the opportunity to
        register additional classes that are safe for serialization.

        Extend WKWebProcessPlugIn with a method that returns the names of any custom classes that need
        to be serialized by the InjectedBundle.
        
        Create a new 'decodeBundleParameters' method that contains the logic that used to live in 'initialize'.
        Revise 'initialize' to call this new method.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Use the new method.
        (WebKit::InjectedBundle::decodeBundleParameters): Added.
        (WebKit::InjectedBundle::setBundleParameters): Use 'decodeObjectOfClasses' with the more complete
        'classesForCoder' method to unarchive the passed bundle parameters, rather than the
        NSDictionary-specific method, since InjectedBundles often encode other types of objects, and the
        NSDictionary object may itself hold other kinds of objects.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        (WebKit::WKWebProcessPlugIn::additionalClassesForParameterCoder): Added.

2020-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address review comments after r260035
        https://bugs.webkit.org/show_bug.cgi?id=210440

        Reviewed by David Kilzer.

        Omit unused argument names.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIgnoreViewportScalingConstraints):
        (WKPreferencesGetIgnoreViewportScalingConstraints):

2020-04-14  Megan Gardner  <megan_gardner@apple.com>

        YouTube sometimes navigates unexpectedly when invoking a context menu on a video link. 
        https://bugs.webkit.org/show_bug.cgi?id=210467
        <rdar://problem/58841584>

        Reviewed by Tim Horton.

        Cancel any outstanding touches tracked by WebTouchEventsGestureRecognizer, so that we dispatch
        `touchcancel` to the page instead of `touchend`, so that the page does not misinterpret
        context menu invocation as a tap.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):

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

        Do not process RTC Network messages coming from NetworkProcess if LibWebRTCNetwork is not active
        https://bugs.webkit.org/show_bug.cgi?id=207376
        <rdar://problem/59238611>

        Unreviewed.
        Post-commit review update, change variable name to network.
        No change of behavior.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bring back support for rendering scrollbars using the system appearance
        https://bugs.webkit.org/show_bug.cgi?id=209805

        Reviewed by Michael Catanzaro.

        Add WebKitWebContext:use-system-appearance-for-scrollbars property. It's enabled by default to keep backwards
        compatibility.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode useSystemAppearanceForScrollbars.
        (WebKit::WebProcessCreationParameters::decode): Decode useSystemAppearanceForScrollbars.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy): Copy m_useSystemAppearanceForScrollbars;
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):
        (webkit_web_context_set_use_system_appearance_for_scrollbars):
        (webkit_web_context_get_use_system_appearance_for_scrollbars):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Initialize useSystemAppearanceForScrollbars parameter.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Call setUseSystemAppearanceForScrollbars to set
        useSystemAppearanceForScrollbars parameter.
        (WebKit::WebProcess::setUseSystemAppearanceForScrollbars): Call ScrollbarThemeGtk::setUseSystemAppearance().

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

        WebSocketChannel should remove itself from its manager map
        https://bugs.webkit.org/show_bug.cgi?id=210424

        Reviewed by Alex Christensen.

        WebSocketChannelManager was never removing any entry from its map.
        To fix this, the manager is now keeping a WeakPtr to each channel.
        When the channel is destroyed, it will remove itself from its channel manager.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::WebSocketChannel):
        (WebKit::WebSocketChannel::~WebSocketChannel):
        * WebProcess/Network/WebSocketChannel.h:
        * WebProcess/Network/WebSocketChannelManager.cpp:
        (WebKit::WebSocketChannelManager::addChannel):
        (WebKit::WebSocketChannelManager::createWebSocketChannel): Deleted.
        * WebProcess/Network/WebSocketChannelManager.h:
        (WebKit::WebSocketChannelManager::removeChannel):
        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createWebSocketChannel):

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

        Add logging in case of WebRTC socket error
        https://bugs.webkit.org/show_bug.cgi?id=210428

        Reviewed by Eric Carlson.

        Add some release logging in case of error when sending, setting option or closing a socket.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::sendTo):
        (WebKit::LibWebRTCSocketClient::close):
        (WebKit::LibWebRTCSocketClient::setOption):

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Replace use of Checked<size_t, RecordOverflow> with CheckedSize
        <https://webkit.org/b/210461>

        Reviewed by Mark Lam.

        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::messageSize):
        * Platform/IPC/cocoa/MachMessage.h:
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::increaseBufferedAmount):

2020-04-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update message filters in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=210455

        Reviewed by Geoffrey Garen.

        Update message filters in the WebContent sandbox on iOS with required messages.

        No new tests, since this patch should not introduce a behavior change.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-04-13  Brent Fulgham  <bfulgham@apple.com>

        Add roblox.com to the desktop class quirks list
        https://bugs.webkit.org/show_bug.cgi?id=210452
        <rdar://problem/58859657>

        Reviewed by Zalan Bujtas.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommendedForRequest):

2020-04-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the "IgnoreViewportScalingConstraints" debug WebKit feature
        https://bugs.webkit.org/show_bug.cgi?id=210440

        Reviewed by Tim Horton.

        Remove the internal WebKit2 feature; this was introduced around iOS 9 to unconditionally force pages to shrink
        to fit if they specified a responsive viewport, to avoid horizontal scrolling.

        Nowadays, this behavior is instead controlled by the `-[WKWebView _allowsViewportShrinkToFit]` SPI, which
        ensures that this shrink-to-fit preference is updated in sync with the visible content rect update lifecycle; it
        is currently used by Safari to scale web pages down to fit in smaller multitasking viewports.

        In contrast, this preference has no internal clients. Instead of maintaining two different ways for clients to
        control shrink-to-fit behavior, remove support for the preference and make it a no-op.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIgnoreViewportScalingConstraints):
        (WKPreferencesGetIgnoreViewportScalingConstraints):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Remove this redundant mechanism for shrinking web pages down to fit.

        (WebKit::WebPage::updateVisibleContentRects):

2020-04-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove unused UTType swizzler code
        https://bugs.webkit.org/show_bug.cgi?id=210435

        Unreviewed rollout of r258120.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-04-13  Kate Cheney  <katherine_cheney@apple.com>

        Turn all instances of NavigatingToAppBoundDomain into Optionals
        https://bugs.webkit.org/show_bug.cgi?id=210363
        <rdar://problem/61612861>

        Reviewed by Brent Fulgham.

        NavigatingToAppBoundDomain should be an Optional when passed to the
        Network Process to distinguish the case of an empty app-bound domain
        list versus an actual app-bound domain navigation. An empty list and
        an app-bound navigation should have the same behavior in NetworkSessionCocoa,
        but we will need distinguished behavior in the future.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        (WebKit::NetworkProcess::downloadRequest):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/cache/AsyncRevalidation.cpp:
        (WebKit::NetworkCache::AsyncRevalidation::AsyncRevalidation):
        * NetworkProcess/cache/AsyncRevalidation.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::startAsyncRevalidationIfNeeded):
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::preconnectForSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        We should treat an empty WKAppBoundDomains list like an app-bound domain
        navigation in the network session, so this sets
        NavigatingToAppBoundDomain to Yes if the Optional is WTF::nullopt.

        (WebKit::NetworkSessionCocoa::appBoundSession): Deleted.
        (WebKit::NetworkSessionCocoa::isolatedSession): Deleted.
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const): Deleted.
        (WebKit::NetworkSessionCocoa::clearIsolatedSessions): Deleted.
        (WebKit::NetworkSessionCocoa::invalidateAndCancel): Deleted.
        (WebKit::NetworkSessionCocoa::clearCredentials): Deleted.
        (WebKit::certificatesMatch): Deleted.
        (WebKit::NetworkSessionCocoa::allowsSpecificHTTPSCertificateForHost): Deleted.
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge): Deleted.
        (WebKit::NetworkSessionCocoa::deviceManagementPolicyMonitor): Deleted.
        (WebKit::NetworkSessionCocoa::createWebSocketTask): Deleted.
        (WebKit::NetworkSessionCocoa::addWebSocketTask): Deleted.
        (WebKit::NetworkSessionCocoa::removeWebSocketTask): Deleted.
        (WebKit::NetworkSessionCocoa::hostNamesWithAlternativeServices const): Deleted.
        (WebKit::NetworkSessionCocoa::deleteAlternativeServicesForHostNames): Deleted.
        (WebKit::NetworkSessionCocoa::clearAlternativeServices): Deleted.
        * Shared/LoadParameters.h:
        * Shared/PolicyDecision.h:
        (WebKit::PolicyDecision::decode):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preconnectTo):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomain):
        Set this to WTF::nullopt instead of NavigatingToAppBoundDomain::Yes
        so the two cases are distinguished.

        (WebKit::WebPageProxy::isNavigatingToAppBoundDomainTesting):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isNavigatingToAppBoundDomain const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setIsNavigatingToAppBoundDomain):
        (WebKit::WebPage::isNavigatingToAppBoundDomain const):

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Fix clang static analyzer warnings about unused instance variables in WebIconDatabase, WKView
        <https://webkit.org/b/210427>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKView.h:
        (WKView._unused):
        - Use WK_UNUSED_INSTANCE_VARIABLE to ignore unused instance
          variable.

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Add WARN_UNUSED_RETURN to decode methods in Source/WebKit
        <https://webkit.org/b/210423>
        <rdar://problem/61715582>

        Reviewed by Alex Christensen.

        * GPUProcess/GPUProcessCreationParameters.h:
        * NetworkProcess/Downloads/DownloadID.h:
        (IPC::ArgumentCoder<WebKit::DownloadID>::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::DataKey::decode):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::decodeRecordHeader):
        * Platform/SharedMemory.h:
        * PluginProcess/PluginCreationParameters.h:
        * Shared/API/APIData.h:
        * Shared/API/APIError.h:
        * Shared/API/APIFrameHandle.h:
        * Shared/API/APIGeometry.h:
        * Shared/API/APINumber.h:
        (API::Number::decode):
        * Shared/API/APIPageGroupHandle.h:
        * Shared/API/APIPageHandle.h:
        * Shared/API/APIURL.h:
        (API::URL::decode):
        * Shared/API/APIURLRequest.h:
        * Shared/API/APIURLResponse.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        * Shared/Cocoa/ArgumentCodersCocoa.h:
        * Shared/ContextMenuContextData.h:
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        * Shared/EditorState.h:
        * Shared/FocusedElementInformation.h:
        * Shared/FontInfo.h:
        * Shared/LayerTreeContext.h:
        * Shared/LoadParameters.h:
        * Shared/OptionalCallbackID.h:
        (WebKit::OptionalCallbackID::decode):
        * Shared/PlatformPopupMenuData.h:
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/PrintInfo.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.h:
        * Shared/SessionState.h:
        * Shared/ShareableBitmap.h:
        * Shared/ShareableResource.h:
        * Shared/TouchBarMenuData.h:
        * Shared/UpdateInfo.h:
        * Shared/VisibleContentRectUpdateInfo.h:
        * Shared/WebEvent.h:
        * Shared/WebHitTestResultData.h:
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::decode):
        * Shared/WebPreferencesStore.h:
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::decodeImage):
        (IPC::decodeGKeyFile):
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/WebSelectionData.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationRequest.h:
        * Shared/mac/ColorSpaceData.h:
        * Shared/mac/ObjCObjectGraph.h:
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/WebGestureEvent.h:
        * UIProcess/Cocoa/SessionStateCoding.h:
        * UIProcess/LegacySessionStateCoding.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeSessionHistoryEntryData):
        (WebKit::decodeSessionHistoryEntry):
        (WebKit::decodeSessionHistoryEntries):
        (WebKit::decodeV0SessionHistory):
        (WebKit::decodeV1SessionHistory):
        (WebKit::decodeSessionHistory):
        * WebProcess/GPU/GPUProcessConnectionInfo.h:
        (WebKit::GPUProcessConnectionInfo::decode):
        * WebProcess/GPU/media/RemoteAudioBusData.h:
        (WebKit::RemoteAudioBusData::decode):
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h:
        * WebProcess/Network/NetworkProcessConnectionInfo.h:
        (WebKit::NetworkProcessConnectionInfo::decode):
        * WebProcess/Plugins/Plugin.h:
        - Add WARN_UNUSED_RETURN to all decode functions.

2020-04-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add message filtering to all iokit open rules
        https://bugs.webkit.org/show_bug.cgi?id=210352

        Reviewed by Sam Weinig.

        Apply message filtering with reports and telemetry to all iokit-open rules in the WebContent process' sandbox on iOS
        to gain a better understanding of which iokit-open rules we can investigate.

        No new tests, since adding telemetry will not introduce a change in behavior.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2020-04-13  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove redundant move in return statement.

        Return statement already returns rvalue,
        so we don't need move here.

        This patch removes the build warning below since r259922.
        warning: redundant move in return statement [-Wredundant-move]

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WTF::Persistence::Coder<WebCore::HTTPHeaderMap>::decode):

2020-04-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix various build warnings
        https://bugs.webkit.org/show_bug.cgi?id=210429

        Reviewed by Mark Lam.

        Use private-code instead of deprecated code command to build the Wayland protocol.

        * PlatformGTK.cmake:

2020-04-12  Darin Adler  <darin@apple.com>

        Fix some strange uses of start/endOfDocument
        https://bugs.webkit.org/show_bug.cgi?id=210408

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::replaceDictatedText): Pass the document to startOfDocument,
        rather than getting the documentelement, because the function works on any
        node, so there's no reason to write code to get a particular one.
        (WebKit::WebPage::applyAutocorrectionInternal): Ditto.

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

        [GTK] Use gdk_window_move_to_rect() to position popup menus
        https://bugs.webkit.org/show_bug.cgi?id=210069

        Reviewed by Michael Catanzaro.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

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

        [GTK] Page is not drawn with PSON, hardware acceleration and address typed in URL bar
        https://bugs.webkit.org/show_bug.cgi?id=208091

        Reviewed by Michael Catanzaro.

        This happens only when accelerated compositing mode policy is set to always. In this case, the
        bindSurfaceToWebPage wayland message is received before the WebPageProxy has updated the web page identifier. We
        should always check if there's a provisional page and get its web page identifier.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):

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

        [GTK][PSON] Crash in WaylandCompositor::Surface destructor with USE_WPE_RENDERER disabled
        https://bugs.webkit.org/show_bug.cgi?id=209345

        Reviewed by Michael Catanzaro.

        In case of PSON the web page identifier can change fo the same web page proxy. When swapping processes the new
        web page calls bindSurfaceToWebPage(), but we still have the web page proxy bound to the previous surface. We
        just need to unbind the current surface before binding the new one.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):

2020-04-11  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Add WARN_UNUSED_RETURN to decode methods in Source/WebKit/Platform/IPC
        <https://webkit.org/b/210316>
        <rdar://problem/61559305>

        Changes based on feedback from Alex Christensen and Darin Adler:
        - Remove WARN_UNUSED_RETURN from methods returning Optional<>.
        - Place WARN_UNUSED_RETURN consistently before the return type.

        * Platform/IPC/ArgumentCoder.h:
        * Platform/IPC/ArgumentCoders.cpp:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<OptionSet<T>>::decode):
        (IPC::ArgumentCoder<Optional<T>>::decode):
        (IPC::ArgumentCoder<Box<T>>::decode):
        (IPC::TupleDecoderImpl::decode):
        (IPC::TupleDecoderImpl<Type>::decode):
        (IPC::TupleDecoder::decode):
        (IPC::TupleDecoder<0>::decode):
        (IPC::VariantCoder::decode):
        * Platform/IPC/Attachment.h:
        * Platform/IPC/DataReference.h:
        * Platform/IPC/Decoder.h:
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::decode):
        * Platform/IPC/ImageDataReference.h:
        (IPC::ImageDataReference::decode):
        * Platform/IPC/SharedBufferDataReference.h:
        (IPC::SharedBufferDataReference::decode):
        * Platform/IPC/StringReference.h:

2020-04-11  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Add WARN_UNUSED_RETURN to decode methods in WebCoreArgumentCoders
        <https://webkit.org/b/210322>
        <rdar://problem/61565148>

        Changes based on feedback from Alex Christensen and Darin Adler:
        - Remove WARN_UNUSED_RETURN from methods returning Optional<>.
        - Place WARN_UNUSED_RETURN consistently before the return type.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:

2020-04-11  Daniel Bates  <dabates@apple.com>

        Add text interaction delegate functions
        https://bugs.webkit.org/show_bug.cgi?id=210395
        <rdar://problem/61650549>

        Reviewed by Wenson Hsieh.

        Implement some delegate callbacks that are used to toggle selection reveal,
        placeholder text, and selection assistance.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _willBeginTextInteractionInTextInputContext:]): Added.
        (-[WKContentView _didFinishTextInteractionInTextInputContext:]): Added.

2020-04-10  Darin Adler  <darin@apple.com>

        Move more from live range to SimpleRange: callers of absoluteTextRects
        https://bugs.webkit.org/show_bug.cgi?id=210369

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode textRects]): Moved implementation here. There's no reason for Node
        to have a textRects function, since it's a layout/rendering operation and a
        single node is also an unusual special case, but for now at least we will keep
        this legacy method.
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange textRects]): Changed to call RenderObject::absoluteTextRects
        instead of Range::absoluteTextRects.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll): Use
        RenderObject::absoluteTextRects instead of Range::absoluteRectRects.
        (WebKit::FindController::findStringMatches): Ditto.

2020-04-10  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] Replace fopen/fclose by fopen/fseek functions in MemoryPressureMonitor
        https://bugs.webkit.org/show_bug.cgi?id=209942

        Reviewed by Adrian Perez de Castro.

        Replacing the open()/close() logic to get the data from /proc/meminfo,
        /proc/self/cgroup, ... with a new logic where the files are just
        opened once and we just perform a seek to the initial position of
        of an unbuffered file.

        Also refactoring of some logic:

        - Added the CGroupMemoryController class what encapsulates the logic
          to calculate the the total memory and the memory usage with
          cgroups.
        - CGroupMemoryController encpasulates the FILE pointers to the
          relative files to cgroups.
        - The memInfoFile, zoneInfoFile and cgroupControllerFile are now
          opened once in the Thread::create() invoked by the
          MemoryPressureMonitor::start().

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::lowWatermarkPages):
        (WebKit::calculateMemoryAvailable):
        (WebKit::getCgroupFile):
        (WebKit::getCgroupControllerPath):
        (WebKit::systemMemoryUsedAsPercentage):
        (WebKit::MemoryPressureMonitor::start):
        (WebKit::CGroupMemoryController::setMemoryControllerPath):
        (WebKit::CGroupMemoryController::disposeMemoryController):
        (WebKit::CGroupMemoryController::getCgroupFileValue):
        (WebKit::CGroupMemoryController::getMemoryTotalWithCgroup):
        (WebKit::CGroupMemoryController::getMemoryUsageWithCgroup):
        (WebKit::getCgroupFileValue): Deleted.
        (WebKit::getMemoryTotalWithCgroup): Deleted.
        (WebKit::getMemoryUsageWithCgroup): Deleted.
        * UIProcess/linux/MemoryPressureMonitor.h:
        (WebKit::CGroupMemoryController::isActive):
        (WebKit::CGroupMemoryController::~CGroupMemoryController):

2020-04-10  Alex Christensen  <achristensen@webkit.org>

        PersistentCoders should use modern decoding syntax
        https://bugs.webkit.org/show_bug.cgi?id=207497

        Reviewed by Darin Adler.

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::decodeDOMCacheRecord):
        (WebKit::CacheStorage::Cache::decodeRecordHeader):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::readOrigin):
        (WebKit::CacheStorage::decodeCachesNames):
        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WTF::Persistence::Coder<WebCore::HTTPHeaderMap>::decode):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::decode):
        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode const):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        * Shared/UserData.cpp:
        (WebKit::UserData::decode):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::decodeContentRuleListMetaData):

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

        Web Inspector: add `broadcastConsoleMessage` calls for new ITPDebug logs after r259275
        https://bugs.webkit.org/show_bug.cgi?id=210362

        Reviewed by John Wilander.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):

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

        [IPC Hardening] WebHitTestResultData IPC decoder should validate imageSharedMemory / imageSize
        https://bugs.webkit.org/show_bug.cgi?id=210361
        <rdar://problem/60758280>

        Reviewed by Geoffrey Garen.

        WebHitTestResultData IPC decoder should validate imageSharedMemory / imageSize to make sure they are consistent.

        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::decode):

2020-04-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI to handle proxy authentication and require secure proxy connections
        https://bugs.webkit.org/show_bug.cgi?id=210343
        <rdar://problem/61546396> <rdar://problem/61546519> and <rdar://problem/61546658>

        Reviewed by Geoffrey Garen.

        I also use WKWebViewConfiguration.connectionProxyDictionary instead of CFURLRequestSetProxySettings
        to set proxy settings.  The equivalence of this behavior is covered by the API tests.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration preventsSystemHTTPProxyAuthentication]):
        (-[_WKWebsiteDataStoreConfiguration setPreventsSystemHTTPProxyAuthentication:]):
        (-[_WKWebsiteDataStoreConfiguration requiresSecureHTTPSProxyConnection]):
        (-[_WKWebsiteDataStoreConfiguration setRequiresSecureHTTPSProxyConnection:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::preventsSystemHTTPProxyAuthentication const):
        (WebKit::WebsiteDataStoreConfiguration::setPreventsSystemHTTPProxyAuthentication):
        (WebKit::WebsiteDataStoreConfiguration::requiresSecureHTTPSProxyConnection const):
        (WebKit::WebsiteDataStoreConfiguration::setRequiresSecureHTTPSProxyConnection):

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

        [IPC Hardening] WebDeviceOrientationAndMotionAccessController::shouldAllowAccess() should not crash on invalid input
        https://bugs.webkit.org/show_bug.cgi?id=210359
        <rdar://problem/60092453>

        Reviewed by Geoffrey Garen.

        Make sure the security origin is a valid HashMap key before trying to do a HashMap lookup.
        The security origin is coming from IPC and thus cannot be trusted.

        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.cpp:
        (WebKit::WebDeviceOrientationAndMotionAccessController::cachedDeviceOrientationPermission const):

2020-04-10  John Wilander  <wilander@apple.com>

        Add capability to opt in specific domains into SameSite=strict bounce tracking protection
        https://bugs.webkit.org/show_bug.cgi?id=210347
        <rdar://problem/61593323>

        Reviewed by Brent Fulgham.

        This change adds an additional opt-in condition to the shouldEnforceSameSiteStrictFor()
        functions in both ResourceLoadStatisticsMemoryStore and ResourceLoadStatisticsDatabaseStore.

        No new tests. This adds domain specific logic, quirk-style. The logFrameNavigation()
        changes are covered by existing tests.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
            Now only captures real redirects for the purposes of the SameSite=strict rule.
        (WebKit::ResourceLoadStatisticsDatabaseStore::shouldEnforceSameSiteStrictFor):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation):
            Now only captures real redirects for the purposes of the SameSite=strict rule.
        (WebKit::ResourceLoadStatisticsMemoryStore::shouldEnforceSameSiteStrictFor):
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
            Removed stray newline.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::shouldEnforceSameSiteStrictForSpecificDomain const):
           The new function with domains to subject to the new rule.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:

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

        First render after a process swap does not use accelerated rendering
        https://bugs.webkit.org/show_bug.cgi?id=210297
        <rdar://problem/61432515>

        Reviewed by Antti Koivisto.

        To prevent flashing on navigation when process-swapping, we were delaying the
        DrawingAreaProxy::EnterAcceleratedCompositingMode IPC message from the WebProcess
        to the UIProcess, until the new page is ready to display. The reason we did this
        is that the EnterAcceleratedCompositingMode IPC message ends up setting the root
        CALayer so the new content would become visible on screen. However, another side
        effect of this is that we would also delay the point until which we get
        accelerated rendering, which would negatively impact early page load performance.

        To address the issue, the following changes were made:
        1. We no longer delay the DrawingAreaProxy::EnterAcceleratedCompositingMode IPC.
           In non process-swap cases, we send it as soon as the DrawingArea is constructed.
           In process-swap cases, we send it as soon as we commit the load since this is
           when the provisional drawing area gets committed and happens before we have
           any content to paint.
        2. In the UIProcess, when we get the DrawingAreaProxy::EnterAcceleratedCompositingMode
           IPC and we already have a root layer, we add the new one behind the existing one
           instead of replacing the existing one. As a result, the new layer will get
           accelerated compositing but will not be visible on screen yet.
        3. Introduce a new DrawingAreaProxy::DidFirstLayerFlush IPC which gets send at the
           point where we used to send the EnterAcceleratedCompositingMode IPC, meaning where
           the new content is ready to display. When the UIProcess receives this IPC, it
           actually replaces the root layer with the new layer so that the new content visible.

        After this patch, our CALayers get accelerated compositing right away after a
        process-swap but we still do not see any blank-flashing on navigation.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayerAfterFlush):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didFirstLayerFlush):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didFirstLayerFlush):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        (WebKit::SuspendedPageProxy::pageDidFirstLayerFlush):
        (WebKit::SuspendedPageProxy::closeWithoutFlashing):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::commitProvisionalPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didFirstLayerFlush):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didFirstLayerFlush):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::sendDidFirstLayerFlushIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):

2020-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to select text by tap-hold or double tap-hold when allowsLinkPreview property is set to NO
        https://bugs.webkit.org/show_bug.cgi?id=210191
        <rdar://problem/60454016>

        Reviewed by Tim Horton.

        In iOS 13.4, UIWKTextInteractionAssistant no longer uses the (misleadingly-named) "force press" gesture to drive
        text selection when performing a long press. Instead, it now uses the UIVariableDelayLoupeGestureRecognizer,
        i.e. the text interaction assistant's loupe gesture recognizer.

        The highlight long press gesture, which is only enabled when `allowsLinkPreview` is set to `NO`, is currently
        allowed to recognize alongside the force press gesture but not the loupe gesture. This means that when link
        previews are disabled, we'll end up allowing the highlight long press gesture to prevent text selection. A
        similar issue already exists for the tap-and-half gesture as well.

        To fix this, we allow the highlight long press gesture to recognize alongside both gestures.

        Test: editing/selection/ios/select-text-with-link-preview-disabled.html

        * UIProcess/ios/WKContentViewInteraction.mm:
        (tapAndAHalfRecognizerClass):

        While UITapAndAHalfRecognizer is declared in a UIKit private header, it is (perhaps unintentionally) not
        exported, so attempting to call +[UITapAndAHalfRecognizer class] leads to a linker error. Work around this by
        dynamically grabbing the `Class` from the class name.

        The tap and half gesture recognizer is private in UIKit and only used for text interaction gestures, so we
        always want the highlight long press gesture to be able to recognize alongside it.

        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):

        Also clean up some existing code by replacing `.get().`s with Objective-C bracket operators.

2020-04-10  Brent Fulgham  <bfulgham@apple.com>

        Switch unused IOKit classes from allow-with-report to deny-with-report
        https://bugs.webkit.org/show_bug.cgi?id=210136
        <rdar://problem/61403216>

        Reviewed by Per Arne Vollan.

        After tracking telemetry for several weeks, we can now safely switch the default state
        of a number of IOKit classes from 'allow with telemetry' to 'deny with telemetry'.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2020-04-10  Daniel Bates  <dabates@apple.com>

        mayContainEditableElementsInRect() can terminate search once the search rect is wholly contained inside a layer
        https://bugs.webkit.org/show_bug.cgi?id=210340

        Reviewed by Simon Fraser.

        Reduce false positives. This makes mayContainEditableElementsInRect() return false when the
        search rect is wholly contained inside a higher paint order layer with no editable elements
        that overlaps a layer with editable elements.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::mayContainEditableElementsInRect):

2020-04-10  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add routines to message filter in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=210338

        Reviewed by Geoffrey Garen.

        Add required routines to the message filter in the WebContent sandbox on iOS. These have been observed
        being in use during local testing.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

        Reset view navigation gesture state between tests
        https://bugs.webkit.org/show_bug.cgi?id=210283

        Re-land r259818 with a null-check on m_webPageProxyForBackForwardListForCurrentSwipe.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _resetNavigationGestureStateForTesting]):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::willBeginGesture):
        (WebKit::ViewGestureController::didEndGesture):
        (WebKit::ViewGestureController::PendingSwipeTracker::handleEvent):
        (WebKit::ViewGestureController::PendingSwipeTracker::eventWasNotHandledByWebCore):
        * UIProcess/ViewGestureController.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (WebKit::ViewGestureController::resetState):
        (WebKit::ViewGestureController::reset):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (WebKit::ViewGestureController::resetState):
        (WebKit::ViewGestureController::reset):

2020-04-10  David Kilzer  <ddkilzer@apple.com>

        Add WARN_UNUSED_RETURN to decode methods in WebCoreArgumentCoders
        <https://webkit.org/b/210322>

        Reviewed by Darin Adler.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::decodeSharedBuffer):
        (IPC::decodeTypesAndData):
        (IPC::decodeImage):
        (IPC::decodeOptionalImage):
        (IPC::decodeNativeImage):
        (IPC::decodeOptionalNativeImage):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::decodeNSError):

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

        Add null pointer checkings in WebFullScreenManager
        https://bugs.webkit.org/show_bug.cgi?id=210291

        Reviewed by Daniel Bates.

        Add null pointer checkings for "element" and "m_element" in WebFullScreenManager.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::screenRectOfContents):
        (WebKit::WebFullScreenManager::enterFullScreenForElement):
        (WebKit::WebFullScreenManager::willEnterFullScreen):
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):
        (WebKit::WebFullScreenManager::didExitFullScreen):
        (WebKit::WebFullScreenManager::setAnimatingFullScreen):
        (WebKit::WebFullScreenManager::requestExitFullScreen):

== Rolled over to ChangeLog-2020-04-10 ==
