2020-07-01  Tim Horton  <timothy_horton@apple.com>

        Upstream application accent color support
        https://bugs.webkit.org/show_bug.cgi?id=213859

        Reviewed by Wenson Hsieh.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::accentColor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setAccentColor):
        Plumb accent color to the Web Content process so that it is used when
        deciding the colors of selection and form controls.

2020-07-01  Keith Miller  <keith_miller@apple.com>

        Add WebXR to WebKit.plist preferences, off by default
        https://bugs.webkit.org/show_bug.cgi?id=213860
        <rdar://64411568>

        Reviewed by Tim Horton.

        Right now we look for "WebXR" in the plist, however, it's not in
        the file. It so happens that, *I think*, we fall back to false for
        missing keys. We should have an entry for readability and
        consistency, though.

        No tests needed because this shouldn't change behavior.

        * FeatureFlags/WebKit.plist:

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

        Regression(r259242) WebKit no longer does client navigations at foreground priority for extensions
        https://bugs.webkit.org/show_bug.cgi?id=213852
        <rdar://problem/63300428>

        Reviewed by Alex Christensen.

        r259242 tried to address a ASSERT(window) debug assertion hit in applicationType()
        by only calling applicationType() when the window is non-null and assuming the
        process is an application when the window is null. However, this is not correct
        for extensions. The first thing isApplicationVisible() does is call 
         _UIApplicationIsExtension() to determine if we are an extension. It does not need
        the window to make this determination. As a result, I have reverted r259242 and
        simply dropped the ASSERT(window) assertion in isApplicationVisible() instead.

        This fixes the regression tracked by <rdar://problem/63300428> by reverting the
        change that caused it (r259242) and drops the assertion that was hit before r259242.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::applicationType):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isApplicationVisible):

2020-07-01  Daniel Bates  <dabates@apple.com>

        [iOS] Implement support for UIWKDocumentRequestSpatialAndCurrentSelection
        https://bugs.webkit.org/show_bug.cgi?id=213704
        <rdar://problem/59738878>

        Reviewed by Wenson Hsieh.

        Implement support for the new request type UIWKDocumentRequestSpatialAndCurrentSelection.
        Requests of this type return the contents inside the range that covers both the specified
        rect and the current selection, if there is one.

        The flag UIWKDocumentRequestSpatialAndCurrentSelection was added in <rdar://problem/64867540>.

        * Platform/spi/ios/UIKitSPI.h: Same thing I did in TestWebKitAPI/ios/UIKitSPI.h. See Tools ChangeLog for why.
        * Shared/DocumentEditingContext.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toWebDocumentRequestOptions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDocumentEditingContext):

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

        Crash under IPC::isValidMessageName()
        https://bugs.webkit.org/show_bug.cgi?id=213751
        <rdar://problem/64773416>

        Reviewed by Geoffrey Garen.

        This is a speculative fix for the crashes tracked by <rdar://problem/64773416>.
        The suspicion is that the compiler optimizes the code for IPC::isValidMessageName()
        because its parameter is of type MessageName. It may therefore assume the parameter
        is a valid MessageName enum value, which is ironic because the purpose of this
        function is to check whether or not the enum value is valid.

        To address the issue, I got rid of the #ifdefs in MessageName enum so that the
        enum values have an underlying value in the range [0, MessageName::Last]. I then
        updated the isValidEnum template specialization to verify that the input integer
        is indeed in the range [0, MessageName::Last] before casting it to a MessageName
        and calling IPC::isValidMessageName().

        * Scripts/webkit/messages.py:

2020-07-01  Kate Cheney  <katherine_cheney@apple.com>

        WKUserScripts injecting into all frames seem to violate app-bound domains
        https://bugs.webkit.org/show_bug.cgi?id=213816
        <rdar://problem/64872296>

        Reviewed by Brady Eidson.

        Patch to make app-bound domain checks on a per-frame basis instead
        of per-page-based-on-main-frame. This will prevent WKUserScripts from
        being injected in subframes when the main frame is app-bound. Now, all
        ancestors of a frame must be app-bound in order for a frame to
        evaluate user script.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted):
        Move 'isMainFrame' check to be inside of the check for
        m_limitsNavigationsToAppBoundDomains. The navigation should fail if
        the main frame is not app-bound and the WKWebView is marked with the
        limitsNavigationToAppBoundDomains flag, but non-app-bound subframe
        loads are allowed to continue.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isTopFrameNavigatingToAppBoundDomain const):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):
        For reporting loads to the Network Process, we only care if the main
        frame is app bound, so we need to store that info in the WebPage and
        WebPageProxy.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldEnableInAppBrowserPrivacyProtections const):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        (WebKit::WebFrame::shouldEnableInAppBrowserPrivacyProtections):
        (WebKit::WebFrame::isTopFrameNavigatingToAppBoundDomain const):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::setIsNavigatingToAppBoundDomain):
        (WebKit::WebFrame::isNavigatingToAppBoundDomain const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::setIsNavigatingToAppBoundDomain):
        (WebKit::WebPage::shouldEnableInAppBrowserPrivacyProtections): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::needsInAppBrowserPrivacyQuirks):
        (WebKit::WebPage::isNavigatingToAppBoundDomain const): Deleted.
        Move all app-bound domain logic from the WebPage to the WebFrame now
        that checks are on a per-frame basis.

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

        Make NetworkSendQueue use CString instead of String for UTF-8 data
        https://bugs.webkit.org/show_bug.cgi?id=213714

        Reviewed by Darin Adler.

        Update code to use CString/DataReference to transmit WebSocket text messages.

        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::sendString):
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/NetworkSocketChannel.messages.in:
        * NetworkProcess/WebSocketTask.h:
        (WebKit::WebSocketTask::sendString):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::sendString):
        * NetworkProcess/soup/WebSocketTaskSoup.h:
        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
        (WebKit::WebSocketTask::sendString):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::createMessageQueue):
        (WebKit::WebSocketChannel::send):

2020-07-01  James Savage  <james.savage@apple.com>

        Fix Swift overlay build after r263727.
        https://bugs.webkit.org/show_bug.cgi?id=213823.

        Unreviewed, follow up build fix.

        * SwiftOverlay/Tests/WebKitTests.swift:
        (WebKitTests.testAPI): Fix tests to refer to new parameter name.
        * UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
        (callAsyncJavaScript(_:arguments:in:in:completionHandler:Error:)): Use
        the imported ObjC name that the compiler expects.
        (evaluateJavaScript(_:in:in:completionHandler:Error:)): Ditto.

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

        Make NetworkRTCProvider receive IPC messages from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=213557

        Reviewed by Geoffrey Garen.

        To ensure webrtc packets do not get blocked on the main thread,
        we process WebProcess IPC message directly in the socket thread.
        For new sockets, we still go through the main thread, to check suspension or proxy values.
        For sending packets/setting options/closing sockets, we stay in the background thread.

        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::sendTo):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::close):
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        (WebKit::NetworkRTCProvider::sendToSocket):
        (WebKit::NetworkRTCProvider::closeSocket):
        (WebKit::NetworkRTCProvider::setSocketOption):
        (WebKit::NetworkRTCProvider::addSocket):
        (WebKit::NetworkRTCProvider::takeSocket):
        (WebKit::NetworkRTCProvider::newConnection):
        (WebKit::NetworkRTCProvider::dispatchToThread):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::didReceiveNetworkRTCMonitorMessage):
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCSocket.cpp: Removed.
        * NetworkProcess/webrtc/NetworkRTCSocket.h: Removed.
        * NetworkProcess/webrtc/NetworkRTCSocket.messages.in: Removed.
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
        (WebKit::LibWebRTCSocket::SendTo):
        (WebKit::LibWebRTCSocket::Close):
        (WebKit::LibWebRTCSocket::SetOption):
        (WebKit::LibWebRTCSocket::suspend):

2020-06-30  Sam Weinig  <weinig@apple.com>

        Split Color serialization out of Color classes
        https://bugs.webkit.org/show_bug.cgi?id=213820

        Reviewed by Darin Adler.

        Adopt ColorSerialization.h serialization functions.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (dictionaryRepresentationForEditorState):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextTouchBarItemController _wkChangeColor:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _setTextColorForWebView:sender:]):
        * UIProcess/ios/forms/WKFormColorPicker.mm:
        (-[WKColorPicker setControlValueFromUIColor:]):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):

2020-06-30  Geoffrey Garen  <ggaren@apple.com>

        [Cocoa] [GTK] RunLoop::Timer::isActive() is incorrect for timers while they are firing
        https://bugs.webkit.org/show_bug.cgi?id=213771

        Unreviewed assertion fix.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::timeOutTimerFired): Removed this ASSERT.
        One-shot timers are not active while they are firing.

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

        Several key event tests in fast/events/ios are failing after <rdar://problem/62197116>
        https://bugs.webkit.org/show_bug.cgi?id=213821
        <rdar://problem/64821309>

        Reviewed by Megan Gardner.

        Add an SPI method declaration.

        * Platform/spi/ios/UIKitSPI.h:

2020-06-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Remove whitelistedRpId
        https://bugs.webkit.org/show_bug.cgi?id=213817
        <rdar://problem/60108131>

        Reviewed by Geoffrey Garen.

        Remove the whitelist such that we can test the attestation service in a wider range.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticatorInternal::whitelistedRpId): Deleted.

2020-06-30  Brady Eidson  <beidson@apple.com>

        Fix Swift overlay build after r263727.
        <rdar://problem/64962370> and https://bugs.webkit.org/show_bug.cgi?id=213823

        Reviewed by Darin Adler.

        No new tests (No behavior change).
        
        Adapt the Swift overlay refinemnt to handle the inFrame: argument for these methods.

        * UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
        (callAsyncJavaScript(_:arguments:in:in:completionHandler:Error:)):
        (evaluateJavaScript(_:in:in:completionHandler:Error:)):
        (callAsyncJavaScript(_:arguments:in:completionHandler:Error:)): Deleted.
        (evaluateJavaScript(_:in:completionHandler:Error:)): Deleted.

2020-06-30  Brady Eidson  <beidson@apple.com>

        App-bound JavaScript and Navigation failures should have specific error codes.
        <rdar://problem/64940268> and https://bugs.webkit.org/show_bug.cgi?id=213808

        Reviewed by Tim Hatcher.
        (Informally by Kate Cheney)

        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):

        * UIProcess/API/Cocoa/WKWebView.mm:
        (nsErrorFromExceptionDetails):

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::errorForUnpermittedAppBoundDomainNavigation):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:

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

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

        [macOS] Connections to the preference daemon are established before entering the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=213379

        Reviewed by Darin Adler.

        On macOS, connections to the preference daemon are established before entering the sandbox. These connections also persist
        after entering the sandbox and denying access to the preference daemon. There should not be attempts to connect to the
        preference daemon before entering the sandbox, since these attempts will not be stopped by the sandbox. This patch moves
        code that connects to the preference daemon to be executed after the sandbox has been entered. That includes code to
        prevent connections to the Dock and code to initialize WebKit logging. Also, instead of calling [NSBundle bundleForClass:],
        call [NSBundle bundleWithIdentifier:], since calling [NSBundle bundleForClass:] will connect to the preference daemon.
        Finally, allow the syscall SYS_gethostuuid, since that is needed by CoreFoundation when there is no access to the
        preference daemon.

        No new tests. This should be covered by existing tests. It would be nice to have a test to make sure that there are no
        connections to the preference daemon just before entering the sandbox, but I am not aware of how to implement this.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::webKit2Bundle):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Partially revert r257135 now that the underlying bug is resolved
        https://bugs.webkit.org/show_bug.cgi?id=213814
        <rdar://problem/59859573>

        Reviewed by Per Arne Vollan.

        This patch is a partial revert of the code change in Bug 208033, where a temporary
        workaround was added for a bug in an underlying framework. Now that the bug has been
        fixed, we can remove this workaround.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::gpuProcessSessionParameters):

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

        [macOS] Stop blocking two audio-related user client classes
        https://bugs.webkit.org/show_bug.cgi?id=213807
        <rdar://problem/64874902>

        Reviewed by Per Arne Vollan.

        Restore IOAudioControlUserClient and IOAudioEngineUserClient since we find them being
        actively used on macOS for some media playback purposes.

        * WebProcess/com.apple.WebProcess.sb.in:

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

        Enable the support of FULLSCREEN_API in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=213774

        Reviewed by Youenn Fablet.

        Replace the definition of ENABLE_FULLSCREEN_API in FeatureDefines.xcconfig with
        the one in PlatformEnableCocoa.h. We have to do that because WebKitTestRunner
        does not have a FeatureDefines.xcconfig but it uses "ENABLE(FULLSCREEN_API)"
        to conditionally compile code to test the element fullscreen API.
        WebKitTestRunner can use the macro defined in PlatformEnableCocoa.h.

        * Configurations/FeatureDefines.xcconfig:

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

        [iOS] Editable regions causes ~1% slowdown in PLT5
        https://bugs.webkit.org/show_bug.cgi?id=213659
        <rdar://problem/64361390>

        Reviewed by Simon Fraser.

        Fix up RemoteLayerTreeViews now that the editable region is an Optional<>. Have
        the UI process message the web process to enable editable region on the first
        invocation of _requestTextInputContextsInRect, which is good indicator that there
        would be benefit to computing it as a typical client that calls it will call it
        many times.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::mayContainEditableElementsInRect): Fix up the logic now that there may
        be not be an editable region sent over in the last event region update. If there
        isn't one then we don't know if there are editable elements in the rect of not.
        So, return true, which could turn out to be a false positive if there aren't any
        editable elements in the rect. The caller will have to message the web process
        to find out the real answer if they want it. Just to clarify, it's OK for this
        function to have false positives, but it must never have false negatives.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::textInputContextsInRect): Enable editable region. If it's already
        enabled then doing so again does nothing.

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

        Scrunching a video to PiP can result in broken animation and leave Safari in a bad state
        https://bugs.webkit.org/show_bug.cgi?id=213175

        Reviewed by Jer Noble.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _completedExitFullScreen]):
        Update _exitRequested after exiting fullscreen to make sure the following
        enter fullscreen request can be processed.
        (-[WKFullScreenWindowController _dismissFullscreenViewController]):
        Make sure _completedExitFullScreen function will always execute.
        (-[WKFullScreenWindowController _interactivePinchDismissChanged:]):
        Remove a function call which corrupts the state machine under stress test.

2020-06-30  Antoine Quint  <graouts@webkit.org>

        [iOS] Crash under WebKit::WebPage::getFocusedElementInformation()
        https://bugs.webkit.org/show_bug.cgi?id=213798
        <rdar://problem/62754594>

        Reviewed by Wenson Hsieh.

        Since LabelableElement::labels() returns a RefPtr<NodeList>, ensure we get a value before attempting to read data from it.

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

2020-06-30  Andy Estes  <aestes@apple.com>

        [Xcode] Enable the "My Mac (Mac Catalyst)" destination in WebKit Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=213740

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set SUPPORTS_MACCATALYST to YES to tell Xcode that this
        project supports building for Mac Catalyst.

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

        Unreviewed, reverting r263724.
        https://bugs.webkit.org/show_bug.cgi?id=213781


        Reverted changeset:

        "Make _WKWebsiteDataStoreConfiguration SPI for HSTS storage to
        replace _WKProcessPoolConfiguration.hstsStorageDirectory"
        https://bugs.webkit.org/show_bug.cgi?id=213048
        https://trac.webkit.org/changeset/263724

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

        Add VP9 WebRTC codec runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=213724

        Reviewed by Eric Carlson.

        * Shared/WebPreferences.yaml:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2020-06-29  Brady Eidson  <beidson@apple.com>

        JavaScript cannot be injected into iframes
        <rdar://problem/54168946> and https://bugs.webkit.org/show_bug.cgi?id=213556

        Reviewed by Geoff Garen.
        
        This adds a few mechanisms:
        - Allows for WKUserScripts to have a target content world
        - Allows "evaluateJavaScript" and "callAsyncJavaScript" to target a specific frame
        - Allows for the completion handlers of those methods to be able to distinguish 
          failure-due-to-missing-frame.

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

        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):

        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]):
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:inContentWorld:]):
        * UIProcess/API/Cocoa/WKWebView.h:

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
        (nsErrorFromExceptionDetails):
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withSourceURL:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
        (-[WKWebView callAsyncJavaScript:arguments:inContentWorld:completionHandler:]): Deleted.

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

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

        Make _WKWebsiteDataStoreConfiguration SPI for HSTS storage to replace _WKProcessPoolConfiguration.hstsStorageDirectory
        https://bugs.webkit.org/show_bug.cgi?id=213048

        Reviewed by Youenn Fablet.

        This uses CFNetwork SPI introduced in rdar://problem/50109631 to allow HSTS storage per NSURLSession.
        To be complete, I also deprecated our UI process HSTS state removal attempt SPIs, WKContextResetHSTSHosts and
        WKContextResetHSTSHostsAddedAfterDate, which had their last use removed in rdar://problem/64220838.

        I manually verified that this new SPI puts HSTS data in the specified location, and I also verified that HSTS
        state querying and removal works with the new CFNetwork SPI as it did with the old one.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::hostNamesWithHSTSCache const):
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames):
        (WebKit::NetworkProcess::clearHSTSCache):
        (WebKit::NetworkProcess::getHostNamesWithHSTSCache): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::hstsStorage const):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::hostNamesWithHSTSCache const):
        (WebKit::NetworkProcess::deleteHSTSCacheForHostNames):
        (WebKit::NetworkProcess::clearHSTSCache):
        (WebKit::NetworkProcess::getHostNamesWithHSTSCache): Deleted.
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextResetHSTSHosts):
        (WKContextResetHSTSHostsAddedAfterDate):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration hstsStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setHSTSStorageDirectory:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::privateBrowsingSession): Deleted.
        (WebKit::WebProcessPool::resetHSTSHosts): Deleted.
        (WebKit::WebProcessPool::resetHSTSHostsAddedAfterDate): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resolvedHSTSStorageDirectory const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

2020-06-29  Tim Horton  <timothy_horton@apple.com>

        Adopt adjusted symbol image names
        https://bugs.webkit.org/show_bug.cgi?id=213768
        <rdar://problem/64472257>

        Reviewed by Andy Estes.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction imageForElementActionType:]):

2020-06-29  Guowei Yang  <guowei_yang@apple.com>

        Adding Experimental Feature Flags for CoreImage backed SVG/CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=213578

        Reviewed by Darin Adler, Simon Fraser, Myles C. Maxfield.

        Preparing to implement CoreImage backed filter rendering
        Needs Compiler guards and experimental feature guard.

        * Shared/WebPreferences.yaml: added feature flag definition

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

        Video spills over PiP screen a little when using Picture in Picture
        https://bugs.webkit.org/show_bug.cgi?id=213658

        Reviewed by Eric Carlson.

        Add the video content dimensions to the IPC message VideoFullscreenManagerProxy::SetupFullscreenWithID.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::VideoFullscreenManagerProxy::setVideoDimensions):
        (WebKit::VideoFullscreenManagerProxy::enterFullscreen):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):

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

        Unreviewed, reverting r262004.
        <rdar://problem/64540215>

        Revert r262004 as it is not OK to have a data vault in
        TMPDIR.

        Reverted changeset:

        "[WK2] WebKit abandons compiled sandbox profiles"
        https://bugs.webkit.org/show_bug.cgi?id=212177
        https://trac.webkit.org/changeset/262004

2020-06-29  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove ENABLE_STREAMS_API compilation flag
        https://bugs.webkit.org/show_bug.cgi?id=213728

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferences.yaml:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

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

        [iOS] Temporarily open up sandbox for mapping of Launch Services database
        https://bugs.webkit.org/show_bug.cgi?id=213756
        <rdar://problem/64707000>

        Reviewed by Brent Fulgham.

        Address review comments.

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

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

        [iOS] Temporarily open up sandbox for mapping of Launch Services database
        https://bugs.webkit.org/show_bug.cgi?id=213756
        <rdar://problem/64707000>

        Reviewed by Brent Fulgham.

        Temporarily open up sandbox for mapping of Launch Services database in the WebContent process on iOS.
        This is just a short term fix, and access to the service will be closed again soon.

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

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

        Unreviewed, rebaseline messages.py tests.

        * Scripts/MessageNames.cpp:
        (IPC::description):
        (IPC::receiverName):
        (IPC::isValidMessageName):
        * Scripts/MessageNames.h:
        (WTF::isValidEnum):
        * Scripts/test-superclassMessagesReplies.h:

2020-06-29  David Kilzer  <ddkilzer@apple.com>

        Crash in NetworkProcessProxy::getNetworkProcessConnection() lambda due to missing Optional<> value check
        <https://webkit.org/b/213700>
        <rdar://problem/64852903>

        Reviewed by Darin Adler.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        - Rename `connectionIdentifier` to `identifier`.
        - Return early from the lamba if `identifier` does not contain a
          value.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        - Ditto.

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

        [iOS] editing/selection/ios/select-text-after-changing-focus.html sometimes fails
        https://bugs.webkit.org/show_bug.cgi?id=213745
        Work towards <rdar://problem/64808138>

        Reviewed by Tim Horton.

        This test first taps an input field to focus it, taps a button below the input field to focus the button and
        dismiss the keyboard, and finally long presses to select a word below the button. On recent iOS 14 builds, this
        test occasionally fails due to recent changes in UIKit that may cause the callout bar appearance callback to
        fire after focusing the input field. If this happens, we end up showing the callout bar with a single option to
        "Select All" (despite the field being empty), and the subsequent tap that's intended to hit the button instead
        hit-tests to this callout bar item. The tests subsequently times out waiting for the keyboard to dismiss, which
        never happens because the input field remains focused.

        Showing the "Select All" callout bar option in empty text fields is inconsistent with the rest of the platform
        (iOS), and appears to have been unintentionally introduced in iOS 12 by <https://trac.webkit.org/r231726>. While
        it's still unknown which exact system changes caused this test to begin timing out, we can at least fix it by
        addressing this existing regression in behavior.

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

        Check `-hasContent` here, instead of just checking if the selection is a caret. Note that we don't need to check
        whether the selection is none separately, since `-hasContent` will always return `NO` if there is no selection.

2020-06-29  Sam Weinig  <weinig@apple.com>

        Remove remaining makeSimpleColorFrom* variants
        https://bugs.webkit.org/show_bug.cgi?id=213706

        Reviewed by Darin Adler.

        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkitColorToWebCoreColor):
        Use makeSimpleColor(SRGBA { ... }) rather than makeSimpleColorFromFloats.

        * WebProcess/Inspector/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        Use makeSimpleColor rather than makeSimpleColorFromFloats, allowing for
        constant expression creation of SimpleColors.

2020-06-29  Youenn Fablet  <youenn@apple.com>

        Send WebRTC packets received from network process to web process from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=213548

        Reviewed by Eric Carlson.

        Make LibWebRTCSocketClient take a ref to an IPC connection at creation time.
        Use this connection from the RTC network thread to send received packets to improve performances.
        Covered by existing tests.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::LibWebRTCSocketClient):
        (WebKit::LibWebRTCSocketClient::signalReadPacket):
        (WebKit::LibWebRTCSocketClient::signalSentPacket):
        (WebKit::LibWebRTCSocketClient::signalAddressReady):
        (WebKit::LibWebRTCSocketClient::signalConnect):
        (WebKit::LibWebRTCSocketClient::signalClose):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createSocket):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::wrapNewTCPConnection):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:

2020-06-29  Elliot  <CheeseEBoi@mailo.com>

        [GTK] Dark mode for GTK themes that end with -Dark
        https://bugs.webkit.org/show_bug.cgi?id=213465

        Reviewed by Carlos Garcia Campos.

        WebKitGtk has support for automatic detection of dark mode when it comes to GTK themes with the "-dark" and
        ":dark" suffixes. However, when using GTK themes that end with "-Dark" or ":Dark", this is not the case. This
        affects many themes like "Arc" and "Flat-Remix".

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::effectiveAppearanceIsDark const):
        (WebKit::PageClientImpl::themeName const):

2020-06-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add webkit_authentication_request_get_security_origin
        https://bugs.webkit.org/show_bug.cgi?id=213596

        Reviewed by Michael Catanzaro.

        Returns the security origin for the authentication protection space.

        * UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_get_security_origin):
        * UIProcess/API/gtk/WebKitAuthenticationRequest.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitAuthenticationRequest.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2020-06-29  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Context menu is misaligned
        https://bugs.webkit.org/show_bug.cgi?id=213703

        Reviewed by Carlos Garcia Campos.

        Set halign on the context menu popover to the same value other context menus in GTK use,
        like in GtkEntry.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::createMenuWidget): Set halign for the context menu to 'start'.

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

        Fix thread-safety issue in webProcessPoolHighDynamicRangeDidChangeCallback()
        https://bugs.webkit.org/show_bug.cgi?id=213689
        <rdar://problem/64443996>

        Reviewed by Darin Adler.

        webProcessPoolHighDynamicRangeDidChangeCallback() gets called on a background thread so we
        need to make sure we dispatch to the main thread before we iterate over the process pools.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::webProcessPoolHighDynamicRangeDidChangeCallback):

2020-06-28  Geoffrey Garen  <ggaren@apple.com>

        Rename initializeThreading to initialize
        https://bugs.webkit.org/show_bug.cgi?id=213674

        Reviewed by Mark Lam.

        * Shared/API/c/WKString.cpp:
        (WKStringCopyJSString):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

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

        [iOS] Clean up visible position comparisons in WebPage::requestDocumentEditingContext()
        https://bugs.webkit.org/show_bug.cgi?id=213701

        Reviewed by Geoffrey Garen.

        Use std::min and std::max when the result needs to be copied instead of doing the comparison
        by hand to make the code a tiny bit more clear. Also, don't copy a VisiblePosition when doing
        the min/max in-place. Both of these things are unlikely to effect code generation. If they do,
        the latter makes things a tiny bit more efficient.

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

2020-06-28  Youenn Fablet  <youenn@apple.com>

        MediaRecorder stopRecorder() returns empty Blob after first use
        https://bugs.webkit.org/show_bug.cgi?id=212274
        <rdar://problem/63601298>

        Reviewed by Eric Carlson.

        Update implementation to do initialization as part of startRecording.

        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
        (WebKit::RemoteMediaRecorderManager::releaseRecorder):
        Remove ASSERT as recorder creation in WebProcess is always ok while creation in GPUProcess may fail and m_recorders may not be populated.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::startRecording):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:

2020-06-28  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK/WPE Debug build fix after r263589.

        * Platform/Logging.h: Define a log category for Memory Pressure.

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

        Revert r262654 because it caused <rdar://problem/64664156>.
        Moreover it is no longer necessary as the embedding client
        changes selection through a different SPI after focusing.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView _focusTextInputContext:placeCaretAt:completionHandler:]):

2020-06-26  David Kilzer  <ddkilzer@apple.com>

        Crash at WebKit: __62-[WKContentView(WKInteraction) resignFirstResponderForWebView]_block_invoke
        <https://webkit.org/b/213666>
        <rdar://problem/64238661>

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponderForWebView]):
        - Speculative fix to return early if there are no queued key
          events available by the time the block runs.

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

        [iOS] Layout tests sometimes assert under -[WKContentView hasContent]
        https://bugs.webkit.org/show_bug.cgi?id=213656
        <rdar://problem/64818648>

        Reviewed by Tim Horton.

        Make it safe to invoke `-[WKContentView hasContent]` when post-layout data is not present, and there is no
        ranged or caret selection. Some editing layout tests on iOS tend to hit the post-layout data assertion due to
        the callout bar presentation callback firing while we reset the test harness to a consistent state (and spin the
        runloop while doing so).

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

2020-06-26  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] Fix the matching of an empty value in getCgroupControllerPath() when only cgroupsV2 hierarchy is found
        https://bugs.webkit.org/show_bug.cgi?id=213646

        Reviewed by Adrian Perez de Castro.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::getCgroupFile):
        (WebKit::getCgroupControllerPath):
        (WebKit::systemMemoryUsedAsPercentage):

2020-06-26  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r263511, r263514, and r263565.

        r263511 caused MediaRecorder test crashes on internal testers.

        Reverted changesets:

        "MediaRecorder stopRecorder() returns empty Blob after first
        use"
        https://bugs.webkit.org/show_bug.cgi?id=212274
        https://trac.webkit.org/changeset/263511

        "Unreviewed iOS build fix after r263511."
        https://trac.webkit.org/changeset/263514

        "MediaRecorder.start() Method is Ignoring the "timeslice"
        Parameter"
        https://bugs.webkit.org/show_bug.cgi?id=202233
        https://trac.webkit.org/changeset/263565

2020-06-26  Geoffrey Garen  <ggaren@apple.com>

        Initializing the main thread should initialize the main run loop
        https://bugs.webkit.org/show_bug.cgi?id=213637

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        (WebKit::InitializeWebKit2):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

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

        [iOS] Network process is crashing when launching TJMaxx app due to invalid NetworkProcess::DestroySession IPC message
        https://bugs.webkit.org/show_bug.cgi?id=213625
        <rdar://problem/64737890>

        Reviewed by Alex Christensen.

        The app is calling [WKWebsiteDataStore init] despite the method being marked as unavailable in
        WKWebsiteDataStore.h. As a result, they end up with a WKWebsiteDataStore object whose internal
        _websiteDataStore is bad because its constructor was never called. When [WKWebsiteDataStore dealloc]
        gets called later own, it calls the ~WebsiteDataStore() destructor for _websiteDataStore but its
        m_sessionID is 0 because we never called the constructor. This causes us to send a
        NetworkProcess::DestroySession IPC with a sessionID that is 0, which is not valid so the
        NetworkProcess crashes.

        To address the issue, we now provide an implementation of [WKWebsiteDataStore init] which raises an
        exception, behind a linked-on-after check. To keep the app working, [WKWebsiteDataStore init] returns
        a new ephemeral data store until rebuilt with the new SDK.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        Mark "new" as unavailable, otherwise [WKWebsiteDataStore new] builds.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore init]):
        Raise an exception with latest SDK, a new ephemeral data store otherwise.

        * UIProcess/Cocoa/VersionChecks.h:
        Add linked-on-after check.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        Add a release assertion to make sure that m_sessionID is always valid when the destructor is called.

2020-06-26  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Cannot build without resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=213534

        Reviewed by Don Olmstead.

        Build fix for !ENABLE(RESOURCE_LOAD_STATISTICS)

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:

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

        WKHTTPCookieStore.setCookie should flush the cookies to disk before calling completion handler when we are using the UIProcess's default cookie storage
        https://bugs.webkit.org/show_bug.cgi?id=213636

        Reviewed by Brady Eidson.

        This fixes a race condition that many, many third party developers run into, causing them to not be logged in when they thought they did.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::saveCookies):
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::registerForNewProcessPoolNotifications):
        (API::HTTPCookieStore::flushDefaultUIProcessCookieStore):
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm:
        (API::HTTPCookieStore::flushDefaultUIProcessCookieStore):

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

        Upstream date/time picker style
        https://bugs.webkit.org/show_bug.cgi?id=213630

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker datePickerStyle]):

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

        Unreviewed, reverting r263545.

        Patch will need refining

        Reverted changeset:

        "[iOS] Network process is crashing when launching TJMaxx app
        due to invalid NetworkProcess::DestroySession IPC message"
        https://bugs.webkit.org/show_bug.cgi?id=213625
        https://trac.webkit.org/changeset/263545

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

        [iOS] Network process is crashing when launching TJMaxx app due to invalid NetworkProcess::DestroySession IPC message
        https://bugs.webkit.org/show_bug.cgi?id=213625
        <rdar://problem/64737890>

        Reviewed by Geoffrey Garen.

        The app is calling [WKWebsiteDataStore init] despite the method being marked as unavailable in
        WKWebsiteDataStore.h. As a result, they end up with a WKWebsiteDataStore object whose internal
        _websiteDataStore is bad because its constructor was never called. When [WKWebsiteDataStore dealloc]
        gets called later own, it calls the ~WebsiteDataStore() destructor for _websiteDataStore but its
        m_sessionID is 0 because we never called the constructor. This causes us to send a
        NetworkProcess::DestroySession IPC with a sessionID that is 0, which is not valid so the
        NetworkProcess crashes.

        To address the issue, we now provide an implementation of [WKWebsiteDataStore init] which returns nil
        behind a linked-on-after check (since this crashes the app). To keep the app working,
        [WKWebsiteDataStore init] returns the default data store until rebuilt with the new SDK. Note that
        I tried returning a new ephemeral data store instead but this was getting the app in a bad state.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        Mark "new" as unavailable, otherwise [WKWebsiteDataStore new] builds.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore init]):
        Return nil with latest SDK, the default data store otherwise.

        * UIProcess/Cocoa/VersionChecks.h:
        Add linked-on-after check.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        Add a release assertion to make sure that m_sessionID is always valid when the destructor is called.

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

        [iOS] -_requestTextInputContextsInRect cannot find empty Quip spreadsheet title
        https://bugs.webkit.org/show_bug.cgi?id=213564
        <rdar://problem/59355847>

        Reviewed by Simon Fraser.

        Check if the search rect intersects the interaction rect, even if it's empty, so long as
        there is an assisted element. If there isn't an assisted element just do what we do now.
        Otherwise, if the interaction rect is empty then this means the focused element is an
        empty inline and it's not tracked in the editable region (see WebCore ChangeLog entry for
        more details). In this case, just ask the web process directly to find the contexts.

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

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

        Allow service workers for web browsers
        https://bugs.webkit.org/show_bug.cgi?id=213573
        <rdar://problem/64712630>

        Reviewed by Brent Fulgham.

        Allows applications with the full web-browser entitlement to use
        service workers.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::parentProcessHasServiceWorkerEntitlement const):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::parentProcessHasServiceWorkerEntitlement const):

2020-06-25  Youenn Fablet  <youenn@apple.com>

        MediaRecorder stopRecorder() returns empty Blob after first use
        https://bugs.webkit.org/show_bug.cgi?id=212274
        <rdar://problem/63601298>

        Reviewed by Eric Carlson.

        Update implementation to do initialization as part of startRecording.

        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
        (WebKit::RemoteMediaRecorderManager::releaseRecorder):
        Remove ASSERT as recorder creation in WebProcess is always ok while creation in GPUProcess may fail and m_recorders may not be populated.
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        (WebKit::MediaRecorderPrivate::startRecording):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:

2020-06-24  James Savage  <james.savage@apple.com>

        Upstream iPadOS 13.0 multi-window support
        https://bugs.webkit.org/show_bug.cgi?id=213590

        Reviewed by Alexey Proskuryakov.

        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController enterFullScreen]): Always construct a
        UIWindow using the expected UIWindowScene.
        (makeWindowFromView): Deleted.

2020-06-24  David Kilzer  <ddkilzer@apple.com>

        Use ObjectIdentifier<>instead of WebCore::nextPlaybackTargetClientContextId() in Document.cpp
        <https://webkit.org/b/213546>
        <rdar://problem/61803576>

        Reviewed by Youenn Fablet.

        Switch from uint64_t to WebCore::PlaybackTargetClientContextIdentifier
        for contextId values.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        - Add WebCore::PlaybackTargetClientContextIdentifier to list.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::addPlaybackTargetPickerClient):
        (WebKit::WebPageProxy::removePlaybackTargetPickerClient):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange):
        (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget):
        (WebKit::WebPageProxy::playbackTargetPickerWasDismissed):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addPlaybackTargetPickerClient):
        (WebKit::WebChromeClient::removePlaybackTargetPickerClient):
        (WebKit::WebChromeClient::showPlaybackTargetPicker):
        (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected const):
        (WebKit::WebPage::playbackTargetAvailabilityDidChange):
        (WebKit::WebPage::setShouldPlayToPlaybackTarget):
        (WebKit::WebPage::playbackTargetPickerWasDismissed):

2020-06-24  David Kilzer  <ddkilzer@apple.com>

        [IPC] Use WebKit::LayerHostingContextID instead of uint32_t for videoLayerID
        <https://webkit.org/b/213576>
        <rdar://problem/61806253>

        Reviewed by Darin Adler.

        Use WebKit::LayerHostingContextID instead of uint32_t as type
        for videoLayerID since the value comes from
        LayerHostingContext::contextID() in
        VideoFullscreenManager::enterVideoFullscreenForVideoElement().

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):

2020-06-24  Tim Horton  <timothy_horton@apple.com>

        Cannot play back any video on Apple Silicon devices
        https://bugs.webkit.org/show_bug.cgi?id=213584
        <rdar://problem/64714596>

        Reviewed by Per Arne Vollan.

        * WebProcess/com.apple.WebProcess.sb.in:
        An unfortunate and incorrect refactoring caused some of the sandbox exceptions to get dropped on the floor.

2020-06-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r260276): Scrolling through shelves on music.apple.com is not smooth
        https://bugs.webkit.org/show_bug.cgi?id=213572
        <rdar://problem/64306590>

        Reviewed by Wenson Hsieh.

        The scroll position for an overflow:scroll element with scroll-snap could jump around
        during scrolling, if layout triggered a call to ScrollableArea::updateScrollSnapState().
        The crux of the issue is that isScrollSnapInProgress() returned false for overflow:scrollers
        which are scrolling asynchronously.

        Fix by extending the existing ScrollingTree::isScrollSnapInProgress() to track all scrolling
        nodes by storing a HashSet<ScrollingNodeID> rather than just a flag for the main frame.

        RenderLayer::isScrollSnapInProgress() then consults the ScrollingCoordinator, which consults
        the scrolling tree for this state.

        Add the ability to test via internals.isScrollSnapInProgress().

        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::isScrollSnapInProgress const):

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

        Unreviewed, reverting r263295.
        https://bugs.webkit.org/show_bug.cgi?id=213577

        Introduced logging regression

        Reverted changeset:

        "[macOS] Connections to the preference daemon are established
        before entering the sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=213379
        https://trac.webkit.org/changeset/263295

2020-06-24  David Kilzer  <ddkilzer@apple.com>

        Use ObjectIdentifier<> instead of uint64_t for context IDs in VideoFullscreenManagerProxy
        <https://webkit.org/b/212392>
        <rdar://problem/61799040>

        Reviewed by Youenn Fablet.

        Switch from uint64_t to WebKit::PlaybackSessionContextIdentifier
        for contextId values.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        - Add WebKit::PlaybackSessionContextIdentifier to list.
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        (WebKit::PlaybackSessionManagerProxy::controlsManagerContextId const):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::createModelAndInterface):
        (WebKit::PlaybackSessionManagerProxy::ensureModelAndInterface):
        (WebKit::PlaybackSessionManagerProxy::ensureModel):
        (WebKit::PlaybackSessionManagerProxy::ensureInterface):
        (WebKit::PlaybackSessionManagerProxy::addClientForContext):
        (WebKit::PlaybackSessionManagerProxy::removeClientForContext):
        (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID):
        (WebKit::PlaybackSessionManagerProxy::clearPlaybackControlsManager):
        (WebKit::PlaybackSessionManagerProxy::currentTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged):
        (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged):
        (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionManagerProxy::mutedChanged):
        (WebKit::PlaybackSessionManagerProxy::volumeChanged):
        (WebKit::PlaybackSessionManagerProxy::durationChanged):
        (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged):
        (WebKit::PlaybackSessionManagerProxy::rateChanged):
        (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const):
        (WebKit::PlaybackSessionManagerProxy::play):
        (WebKit::PlaybackSessionManagerProxy::pause):
        (WebKit::PlaybackSessionManagerProxy::togglePlayState):
        (WebKit::PlaybackSessionManagerProxy::beginScrubbing):
        (WebKit::PlaybackSessionManagerProxy::endScrubbing):
        (WebKit::PlaybackSessionManagerProxy::seekToTime):
        (WebKit::PlaybackSessionManagerProxy::fastSeek):
        (WebKit::PlaybackSessionManagerProxy::beginScanningForward):
        (WebKit::PlaybackSessionManagerProxy::beginScanningBackward):
        (WebKit::PlaybackSessionManagerProxy::endScanning):
        (WebKit::PlaybackSessionManagerProxy::selectAudioMediaOption):
        (WebKit::PlaybackSessionManagerProxy::selectLegibleMediaOption):
        (WebKit::PlaybackSessionManagerProxy::togglePictureInPicture):
        (WebKit::PlaybackSessionManagerProxy::toggleMuted):
        (WebKit::PlaybackSessionManagerProxy::setMuted):
        (WebKit::PlaybackSessionManagerProxy::setVolume):
        (WebKit::PlaybackSessionManagerProxy::setPlayingOnSecondScreen):
        - Remove MESSAGE_CHECK_CONTEXTID() since it is now redundant.
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::VideoFullscreenModelContext):
        (WebKit::VideoFullscreenManagerProxy::requestRouteSharingPolicyAndContextUID):
        (WebKit::VideoFullscreenManagerProxy::createModelAndInterface):
        (WebKit::VideoFullscreenManagerProxy::ensureModelAndInterface):
        (WebKit::VideoFullscreenManagerProxy::ensureModel):
        (WebKit::VideoFullscreenManagerProxy::ensureInterface):
        (WebKit::VideoFullscreenManagerProxy::findInterface):
        (WebKit::VideoFullscreenManagerProxy::addClientForContext):
        (WebKit::VideoFullscreenManagerProxy::removeClientForContext):
        (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):
        (WebKit::VideoFullscreenManagerProxy::requestFullscreenMode):
        (WebKit::VideoFullscreenManagerProxy::requestUpdateInlineRect):
        (WebKit::VideoFullscreenManagerProxy::requestVideoContentLayer):
        (WebKit::VideoFullscreenManagerProxy::returnVideoContentLayer):
        (WebKit::VideoFullscreenManagerProxy::didSetupFullscreen):
        (WebKit::VideoFullscreenManagerProxy::willExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::didExitFullscreen):
        (WebKit::VideoFullscreenManagerProxy::didEnterFullscreen):
        (WebKit::VideoFullscreenManagerProxy::didCleanupFullscreen):
        (WebKit::VideoFullscreenManagerProxy::setVideoLayerFrame):
        (WebKit::VideoFullscreenManagerProxy::setVideoLayerGravity):
        (WebKit::VideoFullscreenManagerProxy::fullscreenModeChanged):
        (WebKit::VideoFullscreenManagerProxy::fullscreenMayReturnToInline):
        - Remove MESSAGE_CHECK_CONTEXTID() since it is now redundant.
        * WebKit.xcodeproj/project.pbxproj:
        - Add PlaybackSessionContextIdentifier.h to the project.
        * WebProcess/cocoa/PlaybackSessionContextIdentifier.h: Add.
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.messages.in:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::PlaybackSessionInterfaceContext):
        (WebKit::PlaybackSessionManager::createModelAndInterface):
        (WebKit::PlaybackSessionManager::ensureModelAndInterface):
        (WebKit::PlaybackSessionManager::ensureModel):
        (WebKit::PlaybackSessionManager::ensureInterface):
        (WebKit::PlaybackSessionManager::removeContext):
        (WebKit::PlaybackSessionManager::addClientForContext):
        (WebKit::PlaybackSessionManager::removeClientForContext):
        (WebKit::PlaybackSessionManager::setUpPlaybackControlsManager):
        (WebKit::PlaybackSessionManager::clearPlaybackControlsManager):
        (WebKit::PlaybackSessionManager::contextIdForMediaElement):
        (WebKit::PlaybackSessionManager::durationChanged):
        (WebKit::PlaybackSessionManager::currentTimeChanged):
        (WebKit::PlaybackSessionManager::bufferedTimeChanged):
        (WebKit::PlaybackSessionManager::playbackStartedTimeChanged):
        (WebKit::PlaybackSessionManager::rateChanged):
        (WebKit::PlaybackSessionManager::seekableRangesChanged):
        (WebKit::PlaybackSessionManager::canPlayFastReverseChanged):
        (WebKit::PlaybackSessionManager::audioMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManager::legibleMediaSelectionOptionsChanged):
        (WebKit::PlaybackSessionManager::externalPlaybackChanged):
        (WebKit::PlaybackSessionManager::audioMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManager::legibleMediaSelectionIndexChanged):
        (WebKit::PlaybackSessionManager::wirelessVideoPlaybackDisabledChanged):
        (WebKit::PlaybackSessionManager::mutedChanged):
        (WebKit::PlaybackSessionManager::volumeChanged):
        (WebKit::PlaybackSessionManager::isPictureInPictureSupportedChanged):
        (WebKit::PlaybackSessionManager::play):
        (WebKit::PlaybackSessionManager::pause):
        (WebKit::PlaybackSessionManager::togglePlayState):
        (WebKit::PlaybackSessionManager::beginScrubbing):
        (WebKit::PlaybackSessionManager::endScrubbing):
        (WebKit::PlaybackSessionManager::seekToTime):
        (WebKit::PlaybackSessionManager::fastSeek):
        (WebKit::PlaybackSessionManager::beginScanningForward):
        (WebKit::PlaybackSessionManager::beginScanningBackward):
        (WebKit::PlaybackSessionManager::endScanning):
        (WebKit::PlaybackSessionManager::selectAudioMediaOption):
        (WebKit::PlaybackSessionManager::selectLegibleMediaOption):
        (WebKit::PlaybackSessionManager::handleControlledElementIDRequest):
        (WebKit::PlaybackSessionManager::togglePictureInPicture):
        (WebKit::PlaybackSessionManager::toggleMuted):
        (WebKit::PlaybackSessionManager::setMuted):
        (WebKit::PlaybackSessionManager::setVolume):
        (WebKit::PlaybackSessionManager::setPlayingOnSecondScreen):
        (WebKit::nextContextId): Delete.
        - Replace with PlaybackSessionContextIdentifier::generate().
        * WebProcess/cocoa/VideoFullscreenManager.h:
        (WebKit::VideoFullscreenInterfaceContext::create):
        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenInterfaceContext::VideoFullscreenInterfaceContext):
        (WebKit::VideoFullscreenManager::createModelAndInterface):
        (WebKit::VideoFullscreenManager::ensureModelAndInterface):
        (WebKit::VideoFullscreenManager::ensureModel):
        (WebKit::VideoFullscreenManager::ensureInterface):
        (WebKit::VideoFullscreenManager::removeContext):
        (WebKit::VideoFullscreenManager::addClientForContext):
        (WebKit::VideoFullscreenManager::removeClientForContext):
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation):
        (WebKit::VideoFullscreenManager::hasVideoChanged):
        (WebKit::VideoFullscreenManager::videoDimensionsChanged):
        (WebKit::VideoFullscreenManager::requestFullscreenMode):
        (WebKit::VideoFullscreenManager::fullscreenModeChanged):
        (WebKit::VideoFullscreenManager::requestUpdateInlineRect):
        (WebKit::VideoFullscreenManager::requestVideoContentLayer):
        (WebKit::VideoFullscreenManager::returnVideoContentLayer):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::willExitFullscreen):
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didExitFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):
        (WebKit::VideoFullscreenManager::setVideoLayerGravityEnum):
        (WebKit::VideoFullscreenManager::fullscreenMayReturnToInline):
        (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):
        (WebKit::VideoFullscreenManager::setVideoLayerFrameFenced):

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

        REGRESSION(r262341) Use UTF-8 to decode CFURLRefs from IPC
        https://bugs.webkit.org/show_bug.cgi?id=213565
        <rdar://problem/64408924>

        Reviewed by Darin Adler.

        My assumption that all valid CFURLRefs are ASCII was incorrect.
        Some of them are UTF-8 encoded non-ASCII.
        Using kCFStringEncodingUTF8 covers both.

        Test: fast/url/navigate-non-ascii.html

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::decode):

2020-06-24  Umar Iqbal  <uiqbal@apple.com>

        We should resurrect the older patch that collects some statistics of web API calls
        https://bugs.webkit.org/show_bug.cgi?id=213319

        Reviewed by Brent Fulgham.

        + Enabled ENABLE_WEB_API_STATISTICS flag
        + Removed .string() from mainFrameRegistrableDomain to append it to topFrameRegistrableDomainsWhichAccessedWebAPIs
         because topFrameRegistrableDomainsWhichAccessedWebAPIs is a HashSet of WebCore::RegistrableDomain

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::logFontLoad):
        (WebKit::WebResourceLoadObserver::logCanvasRead):
        (WebKit::WebResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebKit::WebResourceLoadObserver::logNavigatorAPIAccessed):
        (WebKit::WebResourceLoadObserver::logScreenAPIAccessed):

2020-06-24  Andy Estes  <aestes@apple.com>

        [iOS] Open element actions sometimes result in a hover instead of a click
        https://bugs.webkit.org/show_bug.cgi?id=213530
        <rdar://problem/64176707>

        Reviewed by Darin Adler.

        _WKElementAction implements a standard action handler for _WKElementActionTypeOpen that
        attempts a synthetic click at the interaction location, expecting this click to start a
        navigation to the interaction node's target URL. Synthetic clicks are subject to content
        change observing, however, and if ContentChangeObserver detects a meaningful visible change
        after dispatching a mousemove event at the interaction location then WebPage will refrain
        from dispatching the mousedown and mouseup events that would have started a navigation.

        While this behavior is necessary to support hover menus, it doesn't make sense when the user
        is interacting with a context menu. Since the system might display a preview of the target
        URL found at the interaction location, users expect the "Open" action to navigate to that
        same URL rather than merely display a hover menu.

        This change opts synthetic clicks from the open action out of content change observing by
        ensuring that an interaction is started when handling _WKElementActionTypeOpen (like we do
        for "Copy" and "Save Image"), then checking if WebPage::m_interactionNode matches the node
        found in WebPage::attemptSyntheticClick. If it does, WebPage now bypasses content change
        observing and completes a synthetic click.

        New API test: ElementActionTests.OpenLinkWithHoverMenu

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]): Changed to call
        -[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:] in the
        handlers for _WKElementActionTypeCopy, _WKElementActionTypeOpen,
        _WKElementActionTypeSaveImage, and _WKElementActionTypeShare.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]): Added to
        handle the subset of standard element actions that flow through
        WKActionSheetAssistantDelegate. Used a boolean parameter to decide whether the delegate
        should start and stop an interaction when handling the action.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView actionSheetAssistant:openElementAtLocation:]): Renamed
        -_attemptClickAtLocation:modifierFlags: to -_attemptSyntheticClickAtLocation:modifierFlags:.
        (-[WKContentView _attemptSyntheticClickAtLocation:modifierFlags:]): Changed to call
        WebPageProxy::attemptSyntheticClick instead of WebPageProxy::handleTap.
        (-[WKContentView _simulateElementAction:atLocation:]): Set
        _layerTreeTransactionIdAtLastInteractionStart to better simulate context menu interactions.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::attemptSyntheticClick):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::attemptSyntheticClick): Renamed handleTap to attemptSyntheticClick. If the
        node responding to clicks matches the node found on interaction start (m_interactionNode),
        call WebPage::completeSyntheticClick directly.

2020-06-24  Tim Horton  <timothy_horton@apple.com>

        Fix the build once RBSProcessLimitations.h is introduced
        https://bugs.webkit.org/show_bug.cgi?id=213562

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/RunningBoardServicesSPI.h:
        We can't forward-declare Objective-C SPI if it actually exists
        without inspiring duplicate definition errors.

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

        Remove now-invalid assertion after r263441
        https://bugs.webkit.org/show_bug.cgi?id=213527

        The alternative service storage directory is now null when HTTP/3 is disabled, not just in private browsing.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

2020-06-24  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r263328): Crash in bool WTF::WeakHashSet<WebKit::AudioSessionRoutingArbitratorProxy, WTF::EmptyCounter>::contains<WebKit::AudioSessionRoutingArbitratorProxy> const
        https://bugs.webkit.org/show_bug.cgi?id=213526
        <rdar://problem/64591777>

        Reviewed by Eric Carlson.

        Clear the m_routingArbitrator before WebProcessPool::disconnectProcess(), not after.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):

2020-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.29.2 release

        * gtk/NEWS: Add release notes for 2.29.2.

2020-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to allow applications to handle the HTTP authentication credential storage
        https://bugs.webkit.org/show_bug.cgi?id=213177

        Reviewed by Michael Catanzaro.

        Add API to disable the internal credential storage support when building with libsecret. And add new API to
        WebKitAuthenticationRequest to allow applications to use their own credentials storage:

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::persistentCredentialStorageEnabled const):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::setPersistentCredentialStorageEnabled):
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
        (webkitAuthenticationRequestDispose):
        (webkit_authentication_request_class_init):
        (webkitAuthenticationRequestCreate):
        (webkitAuthenticationRequestDidAuthenticate):
        (webkitAuthenticationRequestGetProposedCredential):
        (webkit_authentication_request_can_save_credentials):
        (webkit_authentication_request_set_can_save_credentials):
        (webkit_authentication_request_get_proposed_credential):
        (webkit_authentication_request_set_proposed_credential):
        (webkit_authentication_request_authenticate):
        (webkit_authentication_request_cancel):
        * UIProcess/API/glib/WebKitAuthenticationRequestPrivate.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewCompleteAuthenticationRequest):
        (webkitWebViewLoadChanged):
        (webkitWebViewLoadFailed):
        (webkitWebViewLoadFailedWithTLSErrors):
        (webkitWebViewHandleAuthenticationChallenge):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_set_persistent_credential_storage_enabled):
        (webkit_website_data_manager_get_persistent_credential_storage_enabled):
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogInitialize):
        * UIProcess/API/gtk/WebKitAuthenticationRequest.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitAuthenticationRequest.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::persistentCredentialStorageEnabled const):
        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        (WebKit::WebsiteDataStore::setPersistentCredentialStorageEnabled):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2020-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Do not set the default configuration again when creating the WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=213340

        Reviewed by Michael Catanzaro.

        WebsiteDataStoreConfiguration already initializes on construction with the default paths, so we only need to
        override the ones set by the user.

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetDataStore):

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

        Make HTTP/3 experimental feature work on iOS and only create storage directory if enabled
        https://bugs.webkit.org/show_bug.cgi?id=213527

        Reviewed by Geoffrey Garen.

        Reading the experimental feature wasn't working on iOS because the user defaults prefix is different.
        Also, only resolve and create the directory if it is enabled.  This should help with startup time, which
        has to wait for all directories to be resolved and created.  See rdar://problem/64263228 which this should help with.
        We also respect the system default unless explicitly turned on, which should make it easier for CFNetwork to change things.

        I added an API test that verifies that the default alt-svc storage directory is not created when we don't want it to be.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        (WebKit::WebsiteDataStore::http3Enabled):

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

        REGRESSION (r244633): Mail flashes when copying text in an email
        https://bugs.webkit.org/show_bug.cgi?id=213529
        <rdar://problem/55025522>

        Reviewed by Tim Horton.

        When copying a text selection in Mail conversation view, Mail uses injected bundle hooks to supply additional
        metadata before writing to the pasteboard. Grabbing this data involves temporarily expanding any collapsed
        blockquotes that appear in the mail message, before re-collapsing them after we finish gathering data to be
        written to the pasteboard.

        Prior to r244633, the size of the document while expanding collapsed content would not be propagated to the
        WKWebView, since intrinsic content size changes were batched and sent ahead of the next drawing area flush.
        After r244633, however, updates are now sent every time the layout size changes. This was done to ensure that
        the intrinsic content size was always up to date before sending the first layout milestone to the UI process.

        To preserve the intent of r244633 (with respect to the first layout milestone) as well as intrinsic content size
        behavior prior to r244633 after performing layout, we reintroduce the mechanism for batching intrinsic size
        updates until the next flush, but keep the out-of-band mechanism for immediately sending an up-to-date intrinsic
        size to the UI process before firing the first layout milestone.

        Test: WebKit.AutoLayoutBatchesUpdatesWhenInvalidatingIntrinsicContentSize

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::intrinsicContentsSizeChanged const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateIntrinsicContentSizeIfNeeded):

        If we have a pending intrinsic content size update, clear it out here so that an out-of-band call to
        updateIntrinsicContentSizeIfNeeded doesn't get overridden by an older intrinsic content size that was previously
        scheduled.

        (WebKit::WebPage::flushPendingIntrinsicContentSizeUpdate):

        Add a helper method to send any pending intrinsic content size update.

        (WebKit::WebPage::scheduleIntrinsicContentSizeUpdate):

        Add a helper method to schedule an intrinsic content size update for the next tiled drawing area flush.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):

2020-06-23  Andy Estes  <aestes@apple.com>

        [Apple Pay] WebPaymentCoordinatorProxy can be destroyed without dismissing its authorization presenter
        https://bugs.webkit.org/show_bug.cgi?id=213423
        <rdar://problem/60416221>

        Reviewed by Youenn Fablet.

        When a website completes a payment session, WebPaymentCoordinatorProxy would set its m_state
        to Idle by calling didReachFinalState, but would wait to call hidePaymentUI until the
        payment authorization presenter calls its presenterDidFinish callback. This allows the
        presenter to display a final message to the user before dismissing. As a catch-all,
        ~WebPaymentCoordinatorProxy would call hidePaymentUI, but only if m_state wasn't Idle. If a
        WebPaymentCoordinatorProxy was destroyed after a website completed a payment session but
        before the presenter called presenterDidFinish, hidePaymentUI would never be called.

        This patch addresses this by simplifying the logic for completing or canceling a payment
        session. It's based on the following observations:

        1. With the exception of the case described above, every caller of didReachFinalState would
           also call hidePaymentUI immediately beforehand. That means that we can move the calls to
           hidePaymentUI inside didReachFinalState. For the completePaymentSession case, rather than
           call didReachFinalState without dismissing the UI, we enter a new Completing state, then
           call didReachFinalState either in ~WebPaymentCoordinatorProxy or presenterDidFinish.

        2. didCancelPaymentSession is really a special case of didReachFinalState that also sends
           the DidCancelPaymentSession message to cancel active sessions in the web process. We can
           teach didReachFinalState to send this message when necessary and remove
           didCancelPaymentSession.

        3. PaymentAuthorizationPresenter stored a "did reach final state" boolean on payment
           completion and passed this value back to the client in the presenterDidFinish callback.
           WebPaymentCoordinatorProxy used this to determine whether to cancel an active session by
           calling didCancelPaymentSession or clean up a completed session by calling hidePaymentUI.
           With the addition of the Completing state and the merging of didCancelPaymentSession and
           hidePaymentUI into didReachFinalState, we can get rid of this final state tracking in
           PaymentAuthorizationPresenter and unconditionally call didReachFinalState in the
           presenterDidFinish callback.

        No new tests possible. A manual test case is described in <rdar://problem/60416221>.

        * Platform/cocoa/PaymentAuthorizationPresenter.h: Removed the didReachFinalState argument
        from Client::presenterDidFinish.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completePaymentSession): Changed to call
        -[WKPaymentAuthorizationDelegate completePaymentSession:errors:].

        * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm: Removed the _didReachFinalState ivar.
        (-[WKPaymentAuthorizationDelegate completePaymentSession:errors:]): Renamed from
        -completePaymentSession:errors:didReachFinalState:. Stopped setting _didReachFinalState.
        (-[WKPaymentAuthorizationDelegate invalidate]): Changed to call
        -completePaymentSession:errors:.
        (-[WKPaymentAuthorizationDelegate _didAuthorizePayment:completion:]): Ditto.
        (-[WKPaymentAuthorizationDelegate _didFinish]): Stopped passing the value of
        _didReachFinalState to PaymentAuthorizationPresenter::Client::presenterDidFinish.
        (-[WKPaymentAuthorizationDelegate completePaymentSession:errors:didReachFinalState:]):
        Renamed to -completePaymentSession:errors:.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI): Replaced calls to
        didCancelPaymentSession with didReachFinalState.
        (WebKit::WebPaymentCoordinatorProxy::completePaymentSession): Set m_state to Completing
        rather than call didReachFinalState.
        (WebKit::WebPaymentCoordinatorProxy::abortPaymentSession): Removed call to hidePaymentUI
        since didReachFinalState was already being called.
        (WebKit::WebPaymentCoordinatorProxy::cancelPaymentSession): Replaced call to
        didCancelPaymentSession with didReachFinalState.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidFinish): Called didReachFinalState
        unconditionally now that the didReachFinalState boolean has been removed.
        (WebKit::WebPaymentCoordinatorProxy::canBegin const): Returned false for State::Completing.
        (WebKit::WebPaymentCoordinatorProxy::canCancel const): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::canCompletePayment const): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::canAbort const): Ditto.
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState): Added an early return if m_state
        is already Idle. Sent the DidCancelPaymentSession message if canCancel is true. Called
        platformHidePaymentUI before clearing m_authorizationPresenter and setting m_state to Idle.
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession): Deleted.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState): Added a PaymentSessionError&& arg.
        (WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession): Deleted.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy): Replaced call to
        hidePaymentUI with didReachFinalState.

        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformHidePaymentUI): Renamed from hidePaymentUI.
        Stopped clearing m_authorizationPresenter since didReachFinalState now does that.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Renamed to platformHidePaymentUI.

        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Removed call to hidePaymentUI
        since didReachFinalState was already being called.
        (WebKit::WebPaymentCoordinatorProxy::platformHidePaymentUI): Renamed from hidePaymentUI.
        Stopped clearing m_authorizationPresenter since didReachFinalState now does that.
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Renamed to platformHidePaymentUI.

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

        Remove a lot of unnecessary calls to Ref::copyRef()
        https://bugs.webkit.org/show_bug.cgi?id=213533

        Reviewed by Darin Adler.

        Remove a lot of unnecessary calls to Ref::copyRef() now that Ref is copyable.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::requestResource):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::CompletionHandler<void):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsMemoryStore::clear):
        (WebKit::ResourceLoadStatisticsMemoryStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsStore::removeAllStorageAccess):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::renameOriginInWebsiteData):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::readCachesFromDisk):
        (WebKit::CacheStorage::Engine::fetchDirectoryEntries):
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearDiskCache):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _takeViewSnapshot]):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::selectOptionElement):
        (WebKit::WebAutomationSession::setFilesForInputFileUpload):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleSynchronousMessage):
        (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):
        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::WebProcessPool::seedResourceLoadStatisticsForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
        (WebKit::WebsiteDataStore::setGrandfatheringTime):
        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
        (WebKit::WebsiteDataStore::setPrevalentResource):
        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain):
        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
        (WebKit::WebsiteDataStore::clearPrevalentResource):
        (WebKit::WebsiteDataStore::resetParametersToDefaultValues):
        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
        (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
        (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
        (WebKit::WebsiteDataStore::setLastSeen):
        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
        (WebKit::WebsiteDataStore::insertExpiredStatisticForTesting):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
        (WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
        (WebKit::WebsiteDataStore::setNotifyPagesWhenTelemetryWasCaptured):
        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
        (WebKit::WebsiteDataStore::logUserInteraction):
        (WebKit::WebsiteDataStore::clearUserInteraction):
        (WebKit::WebsiteDataStore::setGrandfathered):
        (WebKit::WebsiteDataStore::setUseITPDatabase):
        (WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting):
        (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting):
        (WebKit::WebsiteDataStore::deleteCookiesForTesting):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting):
        (WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsToSameSiteStrictCookiesForTesting):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebsiteDataStore::resetQuota):
        (WebKit::WebsiteDataStore::clearAppBoundSession):
        (WebKit::WebsiteDataStore::renameOriginInWebsiteData):
        (WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized):
        (WebKit::WebsiteDataStore::setAppBoundDomainsForITP):
        (WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess):
        (WebKit::WebsiteDataStore::clearBundleIdentifierInNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::markAllLayersVolatile):

2020-06-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Unreviewed build fix for r263407
        https://bugs.webkit.org/show_bug.cgi?id=213409
        <rdar://problem/64654646>

        * NetworkProcess/curl/NetworkDataTaskCurl.h: Include <wtf/MonotonicTime.h>.

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

        Expose already-available WKNavigationAction.request.HTTPBody through the API
        https://bugs.webkit.org/show_bug.cgi?id=179077

        Reviewed by Brady Eidson.

        When this bug was written, we needed to serialize the HTTP body to the UI process to expose it through the API.
        The controversial part of this was done in r237639, so this just exposes the data that is already available.

        Verified by an API test.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction request]):

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

        Remove unnecessary Timer from NetworkDataTask
        https://bugs.webkit.org/show_bug.cgi?id=213409

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired): Deleted.
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::resume):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::resume):

2020-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to configure and handle DOM cache to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=213337

        Reviewed by Adrian Perez de Castro.

        The default path is always used even for apps setting a base data directory. We should handle
        WebsiteDataType::DOMCache to configure the directory and allow to fetch and clear it.

        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes):
        (toWebKitWebsiteDataTypes):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty):
        (webkitWebsiteDataManagerSetProperty):
        (webkitWebsiteDataManagerConstructed):
        (webkit_website_data_manager_class_init):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_get_dom_cache_directory):
        (toWebsiteDataTypes):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID): GTK and WPE ports don't use the default website
        data store, so only use it when it already exists. Use the process pool website data store instead.

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

        Storage Access API: Add the capability to call the Storage Access API as a quirk, on behalf of websites that should be doing it themselves
        https://bugs.webkit.org/show_bug.cgi?id=213418
        <rdar://problem/64549429>

        Reviewed by Alex Christensen.

        These changes are for forwarding ITP's knowledge of user interaction
        for specific quirks domains to the WebKit::WebProcessPool where it in
        turn can be distributed to all existing and new Web Content processes.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::needsUserInteractionQuirk const):
        (WebKit::WebResourceLoadStatisticsStore::callUpdatePrevalentDomainsToBlockCookiesForHandler):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setDomainsWithUserInteraction):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        (WebKit::WebProcessPool::setDomainsWithUserInteraction):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::hasHadUserInteraction const):
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        (WebKit::WebProcess::setDomainsWithUserInteraction):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        [macOS] WebPageProxy::setPromisedDataForImage should sanitize its filename
        https://bugs.webkit.org/show_bug.cgi?id=213486
        <rdar://problem/56522262>

        Reviewed by Megan Gardner.

        Ensure that the filename passed into WebPageProxy::setPromisedDataForImage is sanitized in the UI process prior
        to being used as a suggested filename when writing a dragged image to the pasteboard.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setPromisedDataForImage):

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

        WebEx can not share video from Safari on arm64
        https://bugs.webkit.org/show_bug.cgi?id=213481

        Reviewed by Dean Jackson.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::needsAppleCameraService):
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        (WebKit::UserMediaProcessManager::revokeSandboxExtensionsIfNeeded):
        Pass sandbox extension for "com.apple.applecamerad" to the Web Content
        process after the user allows camera access, when running on hardware which requires it.

        * WebProcess/com.apple.WebProcess.sb.in:
        Make it possible to dynamically extend the sandbox as above.

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

        Cannot play back encrypted media on arm64
        https://bugs.webkit.org/show_bug.cgi?id=213483

        Reviewed by Jer Noble and Per Arne Vollan.

        * WebProcess/com.apple.WebProcess.sb.in:
        Extend the sandbox as necessary for encrypted media support.

2020-06-22  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Public API should not allow trying to register a special URI scheme
        https://bugs.webkit.org/show_bug.cgi?id=209900
        <rdar://problem/61200217>

        Reviewed by Adrian Perez de Castro

        Epiphany prior to 3.36 registers a scheme handler for ftp. This introduced criticals. Let's
        use g_warning() instead, and avoid hardcoding the list of disallowed schemes.

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_register_uri_scheme):

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

        dlopen() always fails on arm64, cannot load soft-linked libraries
        https://bugs.webkit.org/show_bug.cgi?id=213480

        Reviewed by Alexey Proskuryakov and Per Arne Vollan.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::initializeSandboxParameters):
        Expose the auxiliary process' CPU family as a parameter to the sandbox profile,
        so that it can be used to predicate sandbox expressions.

        * WebProcess/com.apple.WebProcess.sb.in:
        Allow mremap_encrypted from the Web Content process, because the arm64 dlopen() needs it.

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

        Update macOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=213484

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

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

        sysctl() fails due to sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=213482

        Reviewed by Maciej Stachowiak.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:
        Extend the sandbox as necessary to make sysctl calls work.

2020-06-22  Antoine Quint  <graouts@webkit.org>

        WebKit fails to leave audio routing arbitration during navigation, closing.
        https://bugs.webkit.org/show_bug.cgi?id=213426
        <rdar://problem/64395051>

        Unreviewed build fix for an unannotated switch fall-through between switch labels.

        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _audioRoutingArbitrationStatus]):

2020-06-21  Jer Noble  <jer.noble@apple.com>

        WebKit fails to leave audio routing arbitration during navigation, closing.
        https://bugs.webkit.org/show_bug.cgi?id=213426
        <rdar://problem/64395051>

        Reviewed by Eric Carlson.

        Add testing SPIs to verify whether a WebPage successfully entered or left audio routing
        arbitration. Notify the Arbitration proxy when the page is shut down, which ensures arbitration
        will end if the client closes the WKWebView.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _audioRoutingArbitrationStatus]):
        * UIProcess/API/mac/WKWebViewTestingMac.mm:
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.h:
        (WebKit::AudioSessionRoutingArbitratorProxy::arbitrationStatus const):
        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        (WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory):
        (WebKit::AudioSessionRoutingArbitratorProxy::endRoutingArbitration):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::audioSessionRoutingArbitrator):

2020-06-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Specify underlying storage type for InputMethodState::Hint
        https://bugs.webkit.org/show_bug.cgi?id=213401

        Reviewed by Carlos Garcia Campos.

        Using unsigned types for flags enums seems nice to do.

        * Shared/glib/InputMethodState.h:

2020-06-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Add autocleanup for WebKitWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=213399

        Reviewed by Carlos Garcia Campos.

        Add missing autocleanups.

        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/wpe/WebKitAutocleanups.h:

2020-06-20  Jiewen Tan  <jiewen_tan@apple.com>

        [AppSSO] Should do null check on m_page in dismissViewController()
        https://bugs.webkit.org/show_bug.cgi?id=213415
        <rdar://problem/59672418>

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::dismissViewController):

2020-06-20  Jer Noble  <jer.noble@apple.com>

        RecoveryOS: PAL::getAVPlayerLayerClass() will crash when AVFoundation is missing
        https://bugs.webkit.org/show_bug.cgi?id=213437
        <rdar://problem/64563064>

        Reviewed by Eric Carlson.

        Check PAL::isAVFoundationAvailable() before calling PAL::getAVPlayerLayerClass();

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone const):

2020-06-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r259219): Sleep assertion remains active if WKWebView is closed or WebContent process crashes
        https://bugs.webkit.org/show_bug.cgi?id=213434
        <rdar://problem/57541662>

        Reviewed by Eric Carlson.

        Tests: TestWebKitAPI tests:
            SleepDisabler.Basic
            SleepDisabler.Pause
            SleepDisabler.Mute
            SleepDisabler.Unmute
            SleepDisabler.DisableAudioTrack
            SleepDisabler.Loop
            SleepDisabler.ChangeSrc
            SleepDisabler.Load
            SleepDisabler.Unload
            SleepDisabler.Navigate
            SleepDisabler.NavigateBack
            SleepDisabler.Reload
            SleepDisabler.Close
            SleepDisabler.Crash

        Ensure the SleepDisablers are cleared when the WebProcess closes or crashes.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

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

        [iOS, macOS] Allow access to the container manager to support Mail InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=213357
        <rdar://problem/63837247>

        Reviewed by Darin Adler.

        The Mail Injected Bundle requires access to the container manager to support certain OS operations. We do not need
        this access for web browsing, and should limit this access to this one case.

        This patch creates a dynamic mach extension to the container manager for this single use case. It also denies the
        non-extension access case with a backtrace so we can see if any other clients are hitting this.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * 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):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        [Cocoa] Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued
        https://bugs.webkit.org/show_bug.cgi?id=213414
        <rdar://problem/64548684>

        Reviewed by Per Arne Vollan.

        Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued.
        This is a Safari launch time optimization since the checks needed to decide whether or not to issue
        the extensions are expensive and there is no reason to issue them as soon as the process launches
        (especially in the case of a prewarmed process).

        * Shared/Cocoa/LoadParametersCocoa.mm:
        (WebKit::LoadParameters::platformEncode const):
        (WebKit::LoadParameters::platformDecode):
        * Shared/LoadParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::addPlatformLoadParameters):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::addPlatformLoadParameters):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::hasNetworkExtensionSandboxAccess const):
        (WebKit::WebProcessProxy::markHasNetworkExtensionSandboxAccess):
        (WebKit::WebProcessProxy::hasManagedSessionSandboxAccess const):
        (WebKit::WebProcessProxy::markHasManagedSessionSandboxAccess):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::platformDidReceiveLoadParameters):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-06-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r263287.

        Caused tests to exit early with crashes on Catalina.

        Reverted changeset:

        "[iOS, macOS] Allow access to the container manager to support Mail InjectedBundle"
        https://bugs.webkit.org/show_bug.cgi?id=213357
        https://trac.webkit.org/changeset/263287

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

        Crash under WebKit::ProcessAndUIAssertion::updateRunInBackgroundCount()
        https://bugs.webkit.org/show_bug.cgi?id=213417
        <rdar://problem/63477676>

        Reviewed by Darin Adler.

        Make sure |this| is still alive in ProcessAndUIAssertion::processAssertionWasInvalidated()
        after calling ProcessAssertion::processAssertionWasInvalidated() and before calling
        updateRunInBackgroundCount(). Calling ProcessAssertion::processAssertionWasInvalidated()
        notifies the client and the client may destroy the assertion as a result.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAndUIAssertion::processAssertionWasInvalidated):

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

        com.apple.WebKit.Networking crash: suspended with locked system files (observations.db)
        https://bugs.webkit.org/show_bug.cgi?id=213391
        <rdar://problem/64494167>

        Reviewed by Chris Dumez.

        ITP is the only database that attempts to close when
        NetworkProcess::didClose() is called. This causes the network process
        to sometimes crash if the database is still closing when checking for
        locked system files. Instead, we should only flush the
        memory store to disk when calling NetworkProcess::didClose (in the
        memory store case), and only close the database when the network session is destroyed. 

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        (WebKit::WebResourceLoadStatisticsStore::destroyResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        Split into two functions, one to flush and destroy the persistent
        store, and one to destroy the memory or database store.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        Only flush the persistent store here, as described above.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::flushAndDestroyPersistentStore):
        * NetworkProcess/NetworkSession.h:

2020-06-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Provide a _WKWebAuthenticationPanelUpdatePINInvalid update to UI clients if the returned PIN from the client is not valid
        https://bugs.webkit.org/show_bug.cgi?id=213404
        <rdar://problem/64543894>

        Reviewed by Brent Fulgham.

        Provide a _WKWebAuthenticationPanelUpdatePINInvalid update to UI clients if the returned PIN from the client is not valid such that clients can
        reuse the same logic to handle invalid pin from the authenticator. This change makes their life easier.

        Covered by API tests.

        * UIProcess/API/APIWebAuthenticationPanelClient.h:
        (API::WebAuthenticationPanelClient::requestPin const):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::WebAuthenticationPanelClient::requestPin const):
        Now, only null strings are intepreted as cancels.

        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetPinTokenAfterRequestPin):
        (WebKit::CtapAuthenticator::continueRequestAfterGetPinToken):
        This patch also removes potential null pointer dereferences.

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

        [macOS] Connections to the preference daemon are established before entering the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=213379

        Reviewed by Darin Adler.

        On macOS, connections to the preference daemon are established before entering the sandbox. These connections also persist
        after entering the sandbox and denying access to the preference daemon. There should not be attempts to connect to the
        preference daemon before entering the sandbox, since these attempts will not be stopped by the sandbox. This patch moves
        code that connects to the preference daemon to be executed after the sandbox has been entered. That includes code to
        prevent connections to the Dock and code to initialize WebKit logging. Also, instead of calling [NSBundle bundleForClass:],
        call [NSBundle bundleWithIdentifier:], since calling [NSBundle bundleForClass:] will connect to the preference daemon.
        Finally, allow the syscall SYS_gethostuuid, since that is needed by CoreFoundation when there is no access to the
        preference daemon.

        No new tests. This should be covered by existing tests. It would be nice to have a test to make sure that there are no
        connections to the preference daemon just before entering the sandbox, but I am not aware of how to implement this.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::webKit2Bundle):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Avoid initializing RenderTheme singleton unnecessarily in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=213406

        Reviewed by Per Arne Vollan.

        Avoid initializing RenderTheme singleton unnecessarily in the UIProcess. Instead, introduce
        a static function to get the focus ring color on iOS.

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

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

        Unreviewed build fix after r263288.

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

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

        Use ASCIILiteral more for SandboxExtension functions
        https://bugs.webkit.org/show_bug.cgi?id=213400

        Reviewed by Per Arne Vollan.

        Use ASCIILiteral more for SandboxExtension functions. Functions like createHandleForMachLookup() / createHandleForIOKitClassExtension()
        don't need to take in Strings, ASCIILiteral is enough.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::createHandlesForResources):
        (WebKit::SandboxExtension::createReadOnlyHandlesForFiles):
        (WebKit::SandboxExtension::createHandleForGenericExtension):
        (WebKit::SandboxExtension::createHandleForMachLookup):
        (WebKit::SandboxExtension::createHandlesForMachLookup):
        (WebKit::SandboxExtension::createHandleForIOKitClassExtension):
        (WebKit::SandboxExtension::createHandlesForIOKitClassExtensions):
        * Shared/SandboxExtension.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::mediaRelatedMachServices):
        (WebKit::nonBrowserServices):
        (WebKit::diagnosticServices):
        (WebKit::agxCompilerClasses):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::enableRemoteInspectorIfNeeded):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::singleton):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::grantAccessToAssetServices):

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

        [iOS, macOS] Allow access to the container manager to support Mail InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=213357
        <rdar://problem/63837247>

        Reviewed by Darin Adler.

        The Mail Injected Bundle requires access to the container manager to support certain OS operations. We do not need
        this access for web browsing, and should limit this access to this one case.

        This patch creates a dynamic mach extension to the container manager for this single use case. It also denies the
        non-extension access case with a backtrace so we can see if any other clients are hitting this.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * 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):
        * WebProcess/com.apple.WebProcess.sb.in:

2020-06-19  Andres Gonzalez  <andresg_22@apple.com>

        AX: web process crash in AXObjectCache::postNotification.
        https://bugs.webkit.org/show_bug.cgi?id=213398

        Reviewed by Chris Fleizach.

        AXObjectCache was being instantiated on the AX secondary thread.
        Therefore the timers for the different delayed notifications where
        initialized with the secondary thread. When postNotification was triggered
        on the main thread as it should, and the timer was accessed, the timer
        would assert/crash for being accessed in a thread different than where
        it was created. This change guaranties that AXObjectCache is always
        created on the main thread.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
        (-[WKAccessibilityWebPageObjectBase axObjectCache]):
        (-[WKAccessibilityWebPageObjectBase accessibilityPluginObject]):
        (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]):
        (-[WKAccessibilityWebPageObjectBase setWebPage:]):
        (-[WKAccessibilityWebPageObjectBase setHasMainFramePlugin:]):
        (-[WKAccessibilityWebPageObjectBase setRemoteParent:]):

2020-06-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Make isolated tree enablement status dependent on client preference
        https://bugs.webkit.org/show_bug.cgi?id=213355
        <rdar://problem/64506577>

        Reviewed by Zalan Bujtas.

        We don't want the isolated tree mode in all clients (like Mail or Dictionary).
        As a result, we can set this setting to off and allow safari and mini browser turn on more directly.

        * Shared/WebPreferences.yaml:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setAccessibilityIsolatedTreeEnabled:]):
        (-[WKPreferences _accessibilityIsolatedTreeEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        (WebKit::InjectedBundle::setAccessibilityIsolatedTreeEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2020-06-19  Rob Buis  <rbuis@igalia.com>

        Enable referrer policy attribute support by default
        https://bugs.webkit.org/show_bug.cgi?id=213285

        Reviewed by Youenn Fablet.

        Enable referrer policy attribute support by default by flipping the switch.

        * Shared/WebPreferences.yaml:

2020-06-19  Youenn Fablet  <youenn@apple.com>

        LibWebRTCSocketClient::sendTo is too verbose in case of error
        https://bugs.webkit.org/show_bug.cgi?id=213380

        Reviewed by Eric Carlson.

        Only log error message if the error code is different from the previous one.

        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
        (WebKit::LibWebRTCSocketClient::sendTo):
        * NetworkProcess/webrtc/LibWebRTCSocketClient.h:

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

        Web Inspector: RemoteInspector::singleton() slows down MobileSafari launch
        https://bugs.webkit.org/show_bug.cgi?id=213381
        <rdar://problem/64533003>

        Reviewed by Darin Adler.

        RemoteInspector::singleton() is expensive according to traces. It was called in WebProcessPool::initializeNewWebProcess()
        which happens on MobileSafari launch because we prewarm a WebProcess. However, there is no reason to initialize remote
        Web Inspector at this point. Per associated comment, Remote Web Inspector needs to be initialized once there is a
        sub process hosting one of our Web View. As a result, I moved the initialization call to WebPageProxy::initializeWebPage()
        which is when we actually send the IPC to the WebProcess to create the WebPage that is backing the UI-side WebView.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):

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

        Move Prefixed WebAudio interfaces behind their own feature flag
        https://bugs.webkit.org/show_bug.cgi?id=213356

        Reviewed by Darin Adler.

        * Shared/WebPreferences.yaml:

2020-06-19  Rob Buis  <rbuis@igalia.com>

        Enable stale-while-revalidate support by default
        https://bugs.webkit.org/show_bug.cgi?id=213286

        Reviewed by Youenn Fablet.

        Enable stale-while-revalidate support for Mac/GTK/WPE by changing the default
        to true. Note that platforms that do not support speculative loads, which s-w-r
        relies on, will not see any change in bahavior.

        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

2020-06-19  Alexander Mikhaylenko  <alexm@gnome.org>

        REGRESSION(r253360): [GTK] Page starts loading during animation in back/forward gesture
        https://bugs.webkit.org/show_bug.cgi?id=205650

        Reviewed by Carlos Garcia Campos.

        r253360 changed the swipe gesture to start loading the page during the gesture, relying on
        freezing the layer tree state to prevent unwanted redraws. However, it was implemented for
        AC mode, but didn't prevent redraws in non-accelerated mode. Add a simple check to skip
        redraws in this case.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::display): Skip drawing if layer tree state is frozen.

2020-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add support for fetching registrable domains with resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=213291

        Reviewed by Adrian Perez de Castro and Youenn Fablet.

        WebsiteDataStore::fetchData() doesn't return anything for resource load statistics because
        NetworkProcess::fetchWebsiteData() doesn't handle WebsiteDataType::ResourceLoadStatistics.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::allDomains const): Query all registrable domains from database.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::allDomains const): Return all registrable domains in memory map.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::registrableDomains): Get the list of registrable domains.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData): Handle WebsiteDataType::ResourceLoadStatistics.
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode const): Encode registrableDomainsWithResourceLoadStatistics.
        (WebKit::WebsiteData::decode): Decode registrableDomainsWithResourceLoadStatistics.
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveITPDataForDomain): Use WebsiteDataRecord::addResourceLoadStatisticsRegistrableDomain()
        instead of the display name.
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::addResourceLoadStatisticsRegistrableDomain): Add the given registrable domain to the list.
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply): Handle registrable domains with resource load statistics.
        (WebKit::WebsiteDataStore::removeData): Use resourceLoadStatisticsRegistrableDomains instead of the display name.

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

        Use fastMalloc/fastFree in WebCoreArgumentCodersMac.mm
        <https://webkit.org/b/213325>

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::createArchiveList):
        (IPC::createCFURLRequestFromSerializableRepresentation):

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

        Remove some vestiges of the 32-bit Plugin Process
        https://bugs.webkit.org/show_bug.cgi?id=213361

        Reviewed by Dan Bernstein.

        We haven't launched 32-bit plugins for a while, but there are some
        build system complications and random references in the code that we can get rid of.

        * WebKit.xcodeproj/project.pbxproj:
        * Configurations/PluginService.xcconfig: Renamed from Source/WebKit/Configurations/PluginService.64.xcconfig.
        No need for .64 in the name anymore, since it's the only one.
        We do have to leave the .64 in the product name because there are other things in the system that depend on this.

        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginService.Info.plist: Renamed from Source/WebKit/PluginProcess/EntryPoint/Cocoa/XPCService/PluginService.64.Info.plist.
        No need for .64 in the name anymore.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        There need only be one ProcessType for the plugin process now!

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        GTK WebKit appears to also only launch 64-bit plugin processes.

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

        Workaround for UIKit layout bug in time picker.
        https://bugs.webkit.org/show_bug.cgi?id=213346
        <rdar://problem/64042277>

        Reviewed by Tim Horton.

        There is a bug in the layout of UIKit that needs to be fixed.
        Until then, this workaround should give us a view that is viable.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponderForWebView]):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimeContextMenuViewController preferredContentSize]):

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

        [IPC hardening] OptionSet<> values should be validated
        <https://webkit.org/b/213199>
        <rdar://problem/64369963>

        Reviewed by Anders Carlsson.

        Summary:
        - Add WTF::EnumTraits<> for all OptionSet<> enums.
        - Specify unsigned backing types for enum classes.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSession.h:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<OptionSet<T>>::encode):
        (IPC::ArgumentCoder<OptionSet<T>>::decode):
        - Add WTF::isValidOptionSet() checks.
        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.h:
        - Replace <wtf/EnumTraits.h> with <wtf/OptionSet.h> since the
          latter now includes the former.
        * Platform/IPC/MessageFlags.h:
        * Shared/DocumentEditingContext.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/WebEvent.h:
        * Shared/WebsiteAutoplayQuirk.h:
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/WebsiteData/WebsiteDataFetchOption.h:
        * Shared/WebsiteData/WebsiteDataType.h:
        * Shared/ios/GestureTypes.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebProcess.h:

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

        [GTK][WPE] Add API to configure and handle service worker registrations to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=213290

        Reviewed by Michael Catanzaro.

        The default path is always used even for apps setting a base data directory. We should handle
        WebsiteDataType::ServiceWorkerRegistrations to configure the directory and allow to fetch and clear them.

        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes):
        (toWebKitWebsiteDataTypes):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty):
        (webkitWebsiteDataManagerSetProperty):
        (webkitWebsiteDataManagerConstructed):
        (webkit_website_data_manager_class_init):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_get_service_worker_registrations_directory):
        (toWebsiteDataTypes):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2020-06-18  Yuri Chornoivan  <yurchor@ukr.net>

        Unreviewed. Fix a typo introduced in r263085

        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_class_init):

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

        Add experimental feature flag for modern & unprefixed WebAudio API
        https://bugs.webkit.org/show_bug.cgi?id=213268

        Reviewed by Jer Noble.

        Add experimental feature flag for modern & unprefixed WebAudio API,
        off by default.

        * Shared/WebPreferences.yaml:

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

        [macOS] Shift-tab in a bullet list in Mail Compose jumps back to Subject field
        https://bugs.webkit.org/show_bug.cgi?id=213320
        <rdar://problem/63831962>

        Reviewed by Tim Horton.

        See WebCore/ChangeLog for more detail.

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

        Hoist logic for relinquishing focus as a result of shift+tab from EventHandler to WebPage, so that it is the
        default behavior when processing a "keypress" event that corresponds to shift+tab in an editable web view on
        Cocoa platforms. If we do end up relinquishing focus, then we consider the keypress event to be handled.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):

2020-06-17  Beth Dakin  <bdakin@apple.com>

        Remove references to blacklist/whitelist in the old C API
        https://bugs.webkit.org/show_bug.cgi?id=213322

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserStyleSheet):
        (WKPageGroupAddUserScript):
        * UIProcess/API/C/WKPageGroup.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

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

        Null check plugin.m_data before using it in PDFPlugin::ByteRangeRequest::completeUnconditionally
        https://bugs.webkit.org/show_bug.cgi?id=213305
        <rdar://problem/60349279>

        Reviewed by Brady Eidson.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::ByteRangeRequest::completeUnconditionally):

2020-06-17  Darryl Pogue  <darryl@dpogue.ca>

        IndexedDB: Support IDBFactory databases method
        https://bugs.webkit.org/show_bug.cgi?id=211043

        Reviewed by Youenn Fablet.

        Plumbing for returning a list of IDB databases and versions.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames): Deleted.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBServer::getAllDatabaseNames): Deleted.
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToServer::didGetAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames): Deleted.
        (WebKit::WebIDBConnectionToServer::didGetAllDatabaseNames): Deleted.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2020-06-16  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r255037): Broken position while comparing watch bands on www.apple.com/shop/studio/apple-watch
        https://bugs.webkit.org/show_bug.cgi?id=213282
        <rdar://problem/63862940>

        Reviewed by Antti Koivisto.

        If a scrolling tree commit has a requested scroll position update for a node, we need
        to call applyLayerPositons() to set the UIScrollView's contentOffset.

        Often the layer tree commit will contain a boundsOrigin change for the layer in question
        (which is equivalent to setting the UIScrollView's contentOffset), but some combinations of
        user and programmatic scrolling result in no boundsOrigin change, revealing the bug.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

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

        Check for inAppBrowserPrivacyEnabled flag in WebsiteDataStore::initializeAppBoundDomains is expensive and calls a non-static function WebsiteDataStore::parameters().
        https://bugs.webkit.org/show_bug.cgi?id=213261
        <rdar://problem/64317084>

        Reviewed by Brent Fulgham.

        There are two bugs here. First, WebsiteDataStore::parameters()
        does a lot of work aside from returning the parameters, making this an
        expensive call just to check the value of one flag. Second,
        appBoundDomains() is a static hashset, and initializing the hashset
        should not rely on non-static functions.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        Remove flag, it is no longer used here.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        Save the flag value in a member variable so we can use that later
        when checking app-bound domains. Rename to something more descriptive.

        (WebKit::WebsiteDataStore::initializeAppBoundDomains):
        Remove the check for the non-static runtime flag.

        (WebKit::WebsiteDataStore::ensureAppBoundDomains const):
        Enable test mode quirks. We must do it in two places in case the
        initialization hasn't happened by the time we call
        ensureAppBoundDomains.

        * UIProcess/WebsiteData/WebsiteDataStore.h:

2020-06-16  Mark Lam  <mark.lam@apple.com>

        Make Options::useJIT() be the canonical source of truth on whether we should use the JIT.
        https://bugs.webkit.org/show_bug.cgi?id=212556
        <rdar://problem/63780436>

        Reviewed by Saam Barati.

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

2020-06-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r262994): Web Inspector is killed when context-clicking anywhere
        <https://webkit.org/b/213224>
        <rdar://problem/64383320>

        Reviewed by Darin Adler.

        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.h:
        - Include <WebCore/ContextMenuItem.h> since the definition of
          the custom WTF::isValidEnum<WebCore::ContextMenuAction>
          function is needed.
        * Scripts/webkit/messages.py:
        (generate_message_names_header):
        - Change the third typename in the template for
          WTF::isValidEnum<IPC::MessageName>() to avoid partial template
          specialization errors from other implementations like
          WTF::isValidEnum<WebCore::ContextMenuAction>().
        - Also replace hard-coded "IPC::MessageName" names with template
          values.

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

        Stop calling userPreferredLanguages() in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=213214
        <rdar://problem/64317593>

        Reviewed by Darin Adler.

        Follow-up to r263094 to address post-landing feedback from Darin.
        Use makeVector() functionality in WTF to convert the NSArray into a Vector instead
        of doing it by hand. Also mark the NeverDestroyed variable as static const to
        avoid leaking.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformOverrideLanguages const):

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

        Provide alternatively-named WKBrowsingContextGroup SPI
        https://bugs.webkit.org/show_bug.cgi?id=213229

        Reviewed by Tim Horton.

        This is unfortunately still used. In order to try to convince the user to make the smallest change possible, make newly named SPI that behaves identically.
        Doubly-deprecate the old SPI and implement it in terms of the new during the transition period.

        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup addUserStyleSheet:baseURL:whitelistedURLPatterns:blacklistedURLPatterns:mainFrameOnly:]):
        (-[WKBrowsingContextGroup addUserStyleSheet:baseURL:includeMatchPatternStrings:excludeMatchPatternStrings:mainFrameOnly:]):
        (-[WKBrowsingContextGroup addUserScript:baseURL:whitelistedURLPatterns:blacklistedURLPatterns:injectionTime:mainFrameOnly:]):
        (-[WKBrowsingContextGroup addUserScript:baseURL:includeMatchPatternStrings:excludeMatchPatternStrings:injectionTime:mainFrameOnly:]):

2020-06-16  Youenn Fablet  <youenn@apple.com>

        Loads triggered by an opaque stylesheet should not be visible to service workers
        https://bugs.webkit.org/show_bug.cgi?id=213246

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        In case the load is triggered from an opaque response, set service worker mode to none.

2020-06-16  Charlie Turner  <cturner@igalia.com>

        [GTK] Disable video autoplay
        https://bugs.webkit.org/show_bug.cgi?id=184845

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Add new source files to the build.
        * PlatformWPE.cmake: Ditto.
        * SourcesGTK.txt: Ditto.
        * SourcesWPE.txt: Ditto.
        * UIProcess/API/glib/WebKitPolicyDecision.cpp:
        (webkit_policy_decision_use_with_policies): : Add an API to
        respond to navigation decisions with policies.
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextCreatePageForWebView): Plumb in the default
        website policies that are associated with the web view.
        * UIProcess/API/glib/WebKitWebContextPrivate.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkit_web_view_get_website_policies):
        * UIProcess/API/glib/WebKitWebsitePolicies.cpp: Added.
        (_WebKitWebsitePoliciesPrivate::_WebKitWebsitePoliciesPrivate):
        (webkitWebsitePoliciesGetWebsitePolicies):
        (webkitWebsitePoliciesGetPoliciesData):
        (webkitWebsitePoliciesGetProperty):
        (webkitWebsitePoliciesSetAutoplayPolicy):
        (webkitWebsitePoliciesSetProperty):
        (webkit_website_policies_class_init):
        (webkit_website_policies_new):
        (webkit_website_policies_new_with_policies):
        (webkit_website_policies_get_autoplay_policy):
        * UIProcess/API/glib/WebKitWebsitePoliciesPrivate.h: Added.
        * UIProcess/API/gtk/WebKitPolicyDecision.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkit_web_view_new_with_related_view):
        * UIProcess/API/gtk/WebKitWebsitePolicies.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitPolicyDecision.h:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/WebKitWebsitePolicies.h: Added.
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

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

        Stop calling userPreferredLanguages() in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=213214
        <rdar://problem/64317593>

        Reviewed by Per Arne Vollan.

        Stop calling userPreferredLanguages() in the UIProcess since this can be slow and may keep
        the main thread busy. Nowadays, the WebProcess is able to call it by itself anyway. The
        sandbox is allowing it.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::languageChanged):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::userPreferredLanguagesChanged const):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2020-06-16  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r263079.

        Broke Internal builds.

        Reverted changeset:

        "IndexedDB: Support IDBFactory databases method"
        https://bugs.webkit.org/show_bug.cgi?id=211043
        https://trac.webkit.org/changeset/263079

2020-06-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to configure and enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=177943

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitWebsiteData.cpp:
        (recordContainsSupportedDataTypes):
        (toWebKitWebsiteDataTypes):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerGetProperty):
        (webkitWebsiteDataManagerSetProperty):
        (webkitWebsiteDataManagerConstructed):
        (webkit_website_data_manager_class_init):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_get_itp_directory):
        (webkit_website_data_manager_set_itp_enabled):
        (webkit_website_data_manager_get_itp_enabled):
        (toWebsiteDataTypes):
        * UIProcess/API/gtk/WebKitWebsiteData.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebsiteData.h:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/glib/WebsiteDataStoreGLib.cpp:
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):

2020-06-16  Darryl Pogue  <darryl@dpogue.ca>

        IndexedDB: Support IDBFactory databases method
        https://bugs.webkit.org/show_bug.cgi?id=211043

        Reviewed by Youenn Fablet.

        Plumbing for returning a list of IDB databases and versions.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames): Deleted.
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBServer::getAllDatabaseNames): Deleted.
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToServer::didGetAllDatabaseNamesAndVersions):
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames): Deleted.
        (WebKit::WebIDBConnectionToServer::didGetAllDatabaseNames): Deleted.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2020-06-15  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: introduce request interception
        https://bugs.webkit.org/show_bug.cgi?id=207446

        Reviewed by Devin Rousso.

        This change introduces network request interception to the Network 
        protocol domain. It adds Network.interceptWithRequest notification that
        can be continued, modified or fulfilled. NetworkStage enum can now have
        'request' and 'response' values.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

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

        [macOS] Update sandboxes to reduce logging for media-related operations
        https://bugs.webkit.org/show_bug.cgi?id=213210
        <rdar://problem/64376237>

        Reviewed by Per Arne Vollan.

        Ongoing testing has uncovered a set of additional services and IOKit
        properties that we should allow without logging.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::mediaRelatedMachServices):
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Provide alternatively-named SPI for user style sheets and scripts
        https://bugs.webkit.org/show_bug.cgi?id=213206

        Reviewed by Brady Eidson.

        Test-only SPI was just renamed.
        SPI used by other projects was deprecated with a replacement so we can remove the old names soon.

        _WKUserContentWorld/WKContentWorld was tied up in this, and rather than provide replacement SPI with deprecated _WKUserContentWorld,
        this will move some SPI from _WKUserContentWorld to WKContentWorld too.  The most heavy user of _WKUserContentWorld is TestWebKitAPI and we'll remove it soon.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetFontAllowList):
        (WKContextSetFontWhitelist): Deleted.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _removeAllUserScriptsAssociatedWithContentWorld:]):
        (-[WKUserContentController _removeAllUserStyleSheetsAssociatedWithContentWorld:]):
        (-[WKUserContentController _addScriptMessageHandler:name:contentWorld:]):
        (-[WKUserContentController _removeAllUserScriptsAssociatedWithUserContentWorld:]): Deleted.
        (-[WKUserContentController _removeAllUserStyleSheetsAssociatedWithUserContentWorld:]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:includeMatchPatternStrings:excludeMatchPatternStrings:associatedURL:contentWorld:deferRunningUntilNotification:]):
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:includeMatchPatternStrings:excludeMatchPatternStrings:baseURL:level:contentWorld:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setFontAllowList):
        (WebKit::WebProcessPool::setFontWhitelist): Deleted.
        * UIProcess/WebProcessPool.h:

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

        Add SPI to preconnect to a server
        https://bugs.webkit.org/show_bug.cgi?id=213109
        <rdar://problem/64184412>

        Reviewed by Geoff Garen.

        Covered by API tests.

        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _preconnectToServer:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preconnectTo):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::preconnectTo):
        * UIProcess/WebPageProxy.h:

2020-06-15  Keith Miller  <keith_miller@apple.com>

        Signal handlers should have a two phase installation.
        https://bugs.webkit.org/show_bug.cgi?id=213160

        Reviewed by Mark Lam.

        Put back old WASM fast memory installation.

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

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

        Suppress compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=213034

        Reviewed by Darin Adler.

        Convert to std:size_t to compare equal data types.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::readOrMakeSalt):

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

        Revert r260856 as it seems to have regressed PLT on iOS
        https://bugs.webkit.org/show_bug.cgi?id=213194
        <rdar://problem/64331458>

        Unreviewed, revert r260856 due to regression.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebSQLiteDatabaseTracker.cpp: Added.
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::setIsSuspended):
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction):
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        (WebKit::WebSQLiteDatabaseTracker::setIsHoldingLockedFiles):
        * Shared/WebSQLiteDatabaseTracker.h: Added.
        * SourcesCocoa.txt:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:

2020-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to expose UIClient::requestStorageAccessConfirm
        https://bugs.webkit.org/show_bug.cgi?id=210422

        Reviewed by Michael Catanzaro.

        Add WebKitWebsiteDataAccessPermissionRequest to ask for permission to the user using the existing permission
        request API.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequest.cpp: Added.
        (webkitWebsiteDataAccessPermissionRequestAllow):
        (webkitWebsiteDataAccessPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkitWebsiteDataAccessPermissionRequestDispose):
        (webkit_website_data_access_permission_request_class_init):
        (webkitWebsiteDataAccessPermissionRequestCreate):
        (webkit_website_data_access_permission_request_get_requesting_domain):
        (webkit_website_data_access_permission_request_get_current_domain):
        * UIProcess/API/glib/WebKitWebsiteDataAccessPermissionRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebsiteDataAccessPermissionRequest.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/WebKitWebsiteDataAccessPermissionRequest.h: Added.
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/API/wpe/docs/wpe-docs.sgml:
        * UIProcess/API/wpe/webkit.h:

2020-06-14  Sam Weinig  <weinig@apple.com>

        [WPT] html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html fails due to lack of caching of Plugin objects
        https://bugs.webkit.org/show_bug.cgi?id=213185

        Reviewed by Darin Adler.

        * UIProcess/Plugins/PluginInfoStore.h:
        Add missing #include that is now needed due to pruning of unnecessary #includes
        in WebCore.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension):
        Update to use new webVisibleMimeTypes() rather than the clunky getWebVisibleMimesAndPluginIndices().

2020-06-14  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Return type of -[NSCoder validateClassSupportsSecureCoding:] is incorrect
        <https://webkit.org/b/213161>
        <rdar://problem/64050085>

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (validateClass):
        - Fix return type of
          -[NSCoder validateClassSupportsSecureCoding:].  Throw an
          NSException in case the method ever returns NO without
          throwing its own NSException.  (Currently this method does
          throw an NSException instead of returning NO.)

2020-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Disable HSTS for requests when cookies will be blocked by ITP
        https://bugs.webkit.org/show_bug.cgi?id=210739

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::shouldAllowHSTSProtocolUpgrade const):

2020-06-13  Richard Houle  <rhoule@apple.com>

        Fix Overrelease in makeFailureSetForAllTextManipulationItems
        https://bugs.webkit.org/show_bug.cgi?id=213165
        <rdar://problem/61389164>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (makeFailureSetForAllTextManipulationItems):

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

        [Mac Catalyst] Color inputs and selects fail to display popovers when clicked
        https://bugs.webkit.org/show_bug.cgi?id=213157
        <rdar://problem/64004135>

        Reviewed by Tim Horton.

        In Mac Catalyst, presenting popovers using `UIPopoverController` causes the first responder to change. This
        means that the WKContentView will resign first responder, which in turn causes the currently presented popover
        to be dismissed. This means that popovers for color inputs and select elements will be dismissed immediately
        after presentation.

        To mitigate this, adapt the approach taken in r259840 to `WKColorPopover` and `WKSelectPopover` by teaching the
        base class (`WKRotatingPopover`) to temporarily preserve the focused element in light of first responder changes
        while presenting a popover on Mac Catalyst.

        * UIProcess/ios/forms/WKFormPopover.mm:
        (-[WKRotatingPopover presentPopoverAnimated:]):
        (-[WKRotatingPopover dismissPopoverAnimated:]):

2020-06-13  Sam Weinig  <weinig@apple.com>

        Extended Color: Experiment with strongly typed ColorComponents
        https://bugs.webkit.org/show_bug.cgi?id=212396

        Reviewed by Darin Adler.

        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkitColorFillFromWebCoreColor):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::getDocumentBackgroundColor):
        Update to call toSRGBALossy() rather than toSRGBAComponentsLossy().

2020-06-13  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove FileError.h
        https://bugs.webkit.org/show_bug.cgi?id=213119

        Reviewed by Chris Dumez.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::createMessageQueue):

2020-06-12  Brian Burg  <bburg@apple.com>

        Automation.computeElementLayout should return iframe-relative element rects (when coordinate system is 'Page')
        https://bugs.webkit.org/show_bug.cgi?id=213139
        <rdar://problem/55042445>

        Reviewed by Devin Rousso.

        Automation.computeElementLayout has two coordinate systems it can use, LayoutViewport (used for hit testing)
        and Page (used for Get Element Rect). Since Get Element Rect expects coordinates relative to the current
        browsing context, make the mode simpler by reporting the bounds from Element::boundingClientRect() which
        are frame-relative.

        Covered by existing WPT suite. The semantics of this command are under review, as
        the remote end steps seem to describe a different result than what the non-normative text does.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):

2020-06-12  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Check enum values in IPC::Decoder::decodeEnum() an IPC::Encoder::encodeEnum()
        <https://webkit.org/b/211988>
        <rdar://problem/63137695>

        Reviewed by Darin Adler.

        Replace decodeEnum() with decode() and encodeEnum() with
        operator<<().

        * GPUProcess/media/TextTrackPrivateRemoteConfiguration.h:
        (WebKit::TextTrackPrivateRemoteConfiguration::encode const):
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::decode):
        (IPC::Decoder::operator>>):
        - Make use of std::underlying_type_t<>.
        (IPC::Decoder::decodeEnum): Delete.
        - Replace with calls to decode().
        * Platform/IPC/Encoder.h:
        (IPC::Encoder::operator<<):
        (IPC::Encoder::encode):
        - Make use of WTF::enumToUnderlyingType<>.
        (IPC::Encoder::encodeEnum): Delete.
        - Replace with calls to operator<<().
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::decodeObject):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::encode):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest>::decode):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest::LineItem>::encode):
        (IPC::ArgumentCoder<ApplePaySessionPaymentRequest::LineItem>::decode):
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::encode const):
        (WebKit::ContextMenuContextData::decode):
        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode const):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode const):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode const):
        (WebKit::PrintInfo::decode):
        * Shared/RTCPacketOptions.cpp:
        (WebKit::RTCPacketOptions::encode const):
        (WebKit::RTCPacketOptions::decode):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateNode>::encode):
        (ArgumentCoder<RequestedScrollData>::encode):
        (ArgumentCoder<RequestedScrollData>::decode):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        * Shared/SessionState.cpp:
        (WebKit::HTTPBody::Element::encode const):
        (WebKit::HTTPBody::Element::decode):
        (WebKit::PageState::encode const):
        (WebKit::PageState::decode):
        * Shared/TouchBarMenuItemData.cpp:
        (WebKit::TouchBarMenuItemData::encode const):
        (WebKit::TouchBarMenuItemData::decode):
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode const):
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LinearTimingFunction>::encode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::encode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::decode):
        (IPC::ArgumentCoder<StepsTimingFunction>::encode):
        (IPC::ArgumentCoder<SpringTimingFunction>::encode):
        (IPC::ArgumentCoder<PluginInfo>::encode):
        (IPC::ArgumentCoder<PluginInfo>::decode):
        (IPC::ArgumentCoder<ProtectionSpace>::encode):
        (IPC::ArgumentCoder<ProtectionSpace>::decode):
        (IPC::ArgumentCoder<Credential>::encode):
        (IPC::ArgumentCoder<Credential>::decode):
        (IPC::ArgumentCoder<Cursor>::encode):
        (IPC::ArgumentCoder<Cursor>::decode):
        (IPC::ArgumentCoder<ResourceError>::encode):
        (IPC::ArgumentCoder<ResourceError>::decode):
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        (IPC::ArgumentCoder<CompositionUnderline>::encode):
        (IPC::ArgumentCoder<CompositionUnderline>::decode):
        (IPC::ArgumentCoder<FileChooserSettings>::encode):
        (IPC::ArgumentCoder<FileChooserSettings>::decode):
        (IPC::ArgumentCoder<TextCheckingRequestData>::encode):
        (IPC::ArgumentCoder<TextCheckingRequestData>::decode):
        (IPC::ArgumentCoder<TextCheckingResult>::encode):
        (IPC::ArgumentCoder<TextCheckingResult>::decode):
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
        (IPC::ArgumentCoder<FilterOperation>::encode):
        (IPC::decodeFilterOperation):
        (IPC::ArgumentCoder<FontAttributes>::encode):
        (IPC::ArgumentCoder<FontAttributes>::decode):
        (IPC::ArgumentCoder<WebCore::SerializedPlatformDataCueValue>::encode):
        (IPC::ArgumentCoder<WebCore::SerializedPlatformDataCueValue>::decode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode const):
        (WebKit::WebPopupItem::decode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::Entry::encode const):
        (WebKit::WebsiteData::Entry::decode):
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData):
        * Shared/glib/InputMethodState.cpp:
        (WebKit::InputMethodState::encode const):
        (WebKit::InputMethodState::decode):
        * Shared/glib/UserMessage.cpp:
        (WebKit::UserMessage::encode const):
        (WebKit::UserMessage::decode):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode const):
        (WebKit::ColorSpaceData::decode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode const):
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::decodePlatformData):
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::encode):
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<SoupNetworkProxySettings>::encode):
        (IPC::ArgumentCoder<SoupNetworkProxySettings>::decode):
        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const):
        (WebKit::RemoteMediaPlayerState::decode):
        * WebProcess/Network/NetworkProcessConnectionInfo.h:
        (WebKit::NetworkProcessConnectionInfo::decode):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode const):
        (WebKit::Plugin::Parameters::decode):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::encode const):
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::decode):
        (WebKit::PlatformCAAnimationRemote::Properties::encode const):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):

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

        [iPadOS] Focusing selects and color inputs should not bring up the software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=213149
        <rdar://problem/64312450>

        Reviewed by Darin Adler.

        After <trac.webkit.org/r261658>, we now opt into bringing up the software keyboard when focusing color inputs
        and select elements. This is due to the changes in `-_shouldShowAutomaticKeyboardUIIgnoringInputMode`, which
        were intended to make us return `NO` for date and time inputs, but also unintentionally makes us return `YES`
        on iPadOS.

        This patch fixes the bug by returning `!WebKit::currentUserInterfaceIdiomIsPad()` instead, and additionally
        preserves the existing behavior of now showing a color picker for `<input type="color" readonly>` on iPhone.

        Test: fast/forms/ios/ipad/select-should-not-bring-up-software-keyboard.html

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView becomeFirstResponderForWebView]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]):
        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):

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

        Make API tests tolerant of our relatively new use of WebPageProxy::preconnectTo
        https://bugs.webkit.org/show_bug.cgi?id=213144

        Reviewed by Geofferey Garen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (WebKit::NetworkSessionCocoa::taskServerConnectionSucceeded):
        (WebKit::NetworkSessionCocoa::taskReceivedBytes): Deleted.
        Fix our logic that remembers successful client certificate connections.
        If a task completes with no error (like a preconnect task does), consider that a successful connection.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preconnectTo):
        Remove the check to not preconnect to loopback addresses.
        This was making our tests different than the real internet and prevented me from landing a perfectly good test
        in https://bugs.webkit.org/show_bug.cgi?id=213109

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

        [iOS] Preferences are not being observed if the process pool is being created after activation
        https://bugs.webkit.org/show_bug.cgi?id=213145

        Reviewed by Brent Fulgham.

        If the app is creating the Web process pool after being activated, preferences will not be observed until the app is being backgrounded
        and then foregrounded again, since the preference observer is initialized when handling the app activation notification.

        No new tests, since an API test would make sense in this case, but API tests aren't run on iOS.

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

2020-06-12  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Reviewed by Don Olmstead.

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        In NetworkDataTaskCurl.cpp we check if we should block cookies and block if needed.

        Tests: http/tests/resourceLoadStatistics/

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::createCurlRequest):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::blockCookies):
        (WebKit::NetworkDataTaskCurl::unblockCookies):
        (WebKit::NetworkDataTaskCurl::shouldBlockCookies):
        (WebKit::NetworkDataTaskCurl::isThirdPartyRequest):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetAllStorageAccessEntries):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):

2020-06-12  Antoine Quint  <graouts@webkit.org>

        Double tap to zoom out doesn't work after upgrading to iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=205158
        <rdar://problem/205158>

        Reviewed by Wenson Hsieh.

        Test: fast/events/ios/fast-click-double-tap-to-zoom-in-on-text-and-then-again-to-zoom-out.html

        In order to determine whether a significant zoom to happen, we should use the current page scale
        factor and not the initial page scale factor.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:nodeIsRootLevel:]):

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

        Add WKUserScript initializer SPI with alternative names
        https://bugs.webkit.org/show_bug.cgi?id=213096

        Reviewed by Youenn Fablet.

        And deprecate the existing ones so we can remove them soon.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:includeMatchPatternStrings:excludeMatchPatternStrings:associatedURL:contentWorld:deferRunningUntilNotification:]):
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:

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

        Unreviewed. Fix GTK4 build

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSynthesizeKeyEvent):

2020-06-11  Sam Weinig  <weinig@apple.com>

        Document.currentScript does not work for SVGScriptElements
        https://bugs.webkit.org/show_bug.cgi?id=213104

        Reviewed by Yusuke Suzuki.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentGtk.cpp:
        (webkit_dom_document_get_current_script):
        Update to account for change in Document::currentScript() now returning an
        Element* that can be either an HTMLScriptElement or an SVGScriptElement. To
        keep API compatibility, only return non-null for HTMLScriptElements.

2020-06-12  Charlie Turner  <cturner@igalia.com>

        [GTK] Add an internal API to run javascript without forced user gestures
        https://bugs.webkit.org/show_bug.cgi?id=212969

        Reviewed by Carlos Garcia Campos.

        To be used by tests in a follow-up commit.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptWithParams): Factor out the glue to run
        JavaScript in the page.
        (webkitWebViewRunJavascriptWithoutForcedUserGestures): Add a new
        internal API for use by tests.
        (webkit_web_view_run_javascript): Modified to use factored out
        glue.
        * UIProcess/API/glib/WebKitWebViewInternal.h: Added. Place to keep
        API test-specific internal APIs.

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

        [GTK4] Make WebDriver work
        https://bugs.webkit.org/show_bug.cgi?id=212316

        Reviewed by Adrian Perez de Castro.

        Fix UIClient::setWindowFrame to wait for surface size-changed signal after resizing the window and implement
        maximize, minimize and restore windows for GTK4.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (surfaceStateChangedCallback):
        (webkitWebViewMonitorWindowState):
        (webkitWebViewMaximizeWindow):
        (webkitWebViewMinimizeWindow):
        (webkitWebViewRestoreWindow):

2020-06-11  David Kilzer  <ddkilzer@apple.com>

        [IPC] Add WTF::EnumTraits<> for every enum type used in IPC
        <https://webkit.org/b/213093>

        Reviewed by Darin Adler.

        Summary:
        - Change underlying type of enum class to `bool` when there are
          only two values.  In some cases, reorder the two values so the
          mapping to 0 and 1 makes more sense.  Converting every enum to
          an enum class is not a goal of this patch, so some two-value
          enums stil have WTF::EnumTraits<> defined as noted below.
        - Add WTF::EnumTraits<> for the remaining enum types that are
          used by IPC::Encoder::encodeEnum() and
          IPC::Decoder::decodeEnum() so that WTF::isValidEnum<>() checks
          may be added next.
        - Add #include <WebCore/LibWebRTCEnumTraits.h> as needed.

        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUProcess.h:
        * NetworkProcess/NetworkLoadParameters.h:
        * Shared/API/APIObject.h:
        * Shared/ContextMenuContextData.h:
        * Shared/DrawingAreaInfo.h:
        * Shared/FocusedElementInformation.h:
        * Shared/PrintInfo.h:
        (WTF::EnumTraits<WebKit::PrintInfo::PrintMode>):
        - Define this since PrintMode is not an enum class.
        * Shared/RTCPacketOptions.cpp:
        * Shared/SessionState.h:
        * Shared/TouchBarMenuItemData.h:
        * Shared/WebEvent.h:
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem):
        - Fix reference to WebPopupItem::Type enum.
        * Shared/WebPopupItem.h:
        (WebKit::WebPopupItem::Type):
        - Convert from enum to enum class.
        * Shared/WebsiteData/WebsiteDataType.h:
        * Shared/glib/InputMethodState.h:
        * Shared/glib/UserMessage.h:
        * Shared/mac/ColorSpaceData.mm:
        * Shared/mac/SecItemRequestData.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        - Fix reference to WebPopupItem::Type enum.
        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::populateItems):
        - Fix reference to WebPopupItem::Type enum.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.h:

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

        Re-enable download resume tests
        https://bugs.webkit.org/show_bug.cgi?id=213098
        <rdar://problem/63512518>

        Reviewed by Geoffrey Garen.

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

2020-06-11  Beth Dakin  <bdakin@apple.com>

        Replace instances of whitelist in WebCore with allowlist
        https://bugs.webkit.org/show_bug.cgi?id=213068

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::addOriginAccessWhitelistEntry):
        (WebKit::NetworkConnectionToWebProcess::removeOriginAccessWhitelistEntry):
        (WebKit::NetworkConnectionToWebProcess::resetOriginAccessWhitelists):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::removeOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::resetOriginAccessWhitelists):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2020-06-11  Jonathan Bedard  <jbedard@apple.com>

        WebKit: Guard requestDocumentContext with HAVE(UI_WK_DOCUMENT_CONTEXT)
        https://bugs.webkit.org/show_bug.cgi?id=213076
        <rdar://problem/64254698>

        Reviewed by Tim Horton.

        No new tests, behavior unchanged.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _requestDocumentContext:completionHandler:]): Guard requestDocumentContext with HAVE(UI_WK_DOCUMENT_CONTEXT).
        (-[WKWebView _adjustSelectionWithDelta:completionHandler:]): Ditto.

2020-06-11  Jonathan Bedard  <jbedard@apple.com>

        WebKit: Add UIKit SPI for watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=213077
        <rdar://problem/64255131>

        Reviewed by Tim Horton.

        No new tests, behavior unchanged.

        * Platform/spi/ios/UIKitSPI.h:

2020-06-11  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for DragSourceAction
        <https://webkit.org/b/212885>
        <rdar://problem/64094134>

        Reviewed by Darin Adler.

        Summary:
        - Convert argument parameters from uint64_t to
          OptionSet<DragSourceAction>.
        - Convert DragSourceAction to OptionSet<DragSourceAction>.

        * Scripts/webkit/messages.py:
        - Map DragSourceAction enum to DragActions.h header.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/DragDropInteractionState.h:
        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::shouldUseDragImageToCreatePreviewForDragSource):
        (WebKit::shouldUseVisiblePathToCreatePreviewForDragSource):
        (WebKit::shouldUseTextIndicatorToCreatePreviewForDragSource):
        (WebKit::canUpdatePreviewForActiveDragSource):
        (WebKit::DragDropInteractionState::anyActiveDragSourceIs const):
        (WebKit::DragDropInteractionState::stageDragItem):
        (WebKit::DragDropInteractionState::hasStagedDragSource const):
        (WebKit::DragDropInteractionState::updatePreviewsForActiveDragSources):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startDrag:item:]):
        (-[WKContentView _allowedDragSourceActions]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestDragStart):
        (WebKit::WebPageProxy::requestAdditionalItemsForDragSession):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::dragSourceActionMaskForPoint):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::allowedDragSourceActions const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDragStart):
        (WebKit::WebPage::requestAdditionalItemsForDragSession):

2020-06-11  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] MediaUsageManagerCocoa should use a different USVideoUsage initializer
        https://bugs.webkit.org/show_bug.cgi?id=213058

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm:
        (WebKit::MediaUsageManagerCocoa::reset): Drive-by fix: don't call -stop unless the
        element was playing.
        (WebKit::MediaUsageManagerCocoa::updateMediaUsage): Use a different initializer so
        we can pass in the state.

2020-06-11  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement button-press-event, button-release-event, and absolute-axis-event of GAMEPAD API.
        https://bugs.webkit.org/show_bug.cgi?id=133850

        Reviewed by Carlos Garcia Campos.

        * UIProcess/Gamepad/UIGamepadProvider.cpp: Add the OS(LINUX) guard.
        * UIProcess/Gamepad/gtk/UIGamepadProviderGtk.cpp:
        (WebKit::getWebPageProxy): Build fix. WebKitWebViewBase is used, not WebKitWebViewPrivate.
        * UIProcess/Gamepad/manette/UIGamepadProviderManette.cpp: Add the OS(LINUX) guard.

2020-06-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS]: The File Picker of the <input> file element should show the selection filter
        https://bugs.webkit.org/show_bug.cgi?id=212485

        Reviewed by Darin Adler.

        Add two private helpers to WKOpenPanelParameters.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm:
        (-[WKOpenPanelParameters _allowedFileExtensions]):
        Returns an array of strings representing the allowed extensions.

        (-[WKOpenPanelParameters _allowedFileExtensionsDescription]):
        Returns a string representing a description for the allowed extensions.

        * UIProcess/API/Cocoa/WKOpenPanelParametersPrivate.h:

2020-06-10  Beth Dakin  <bdakin@apple.com>

        Replace instances of blacklist in WebCore with blocklist
        https://bugs.webkit.org/show_bug.cgi?id=213064

        Reviewed by Tim Horton.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::decode):

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

        [iOS] editing/pasteboard/dom-paste tests consistently time out
        https://bugs.webkit.org/show_bug.cgi?id=213061
        <rdar://problem/64211161>

        Reviewed by Darin Adler.

        On recent versions of iOS, system changes have moved the timing of the call to
        `-requestAutocorrectionContextWithCompletionHandler:` when focusing an editable element. This results in a
        consistently reproducible deadlock between the UI process and web process if a page tries to request
        programmatic clipboard access during the click event (importantly, in the same runloop as element focus).

        What ends up happening is that the autocorrection context is requested by the UI process shortly after the
        (unbounded) sync IPC message for the DOM paste arrives, so we end up waiting forever for the sync-IPC-blocked
        web process to respond. Normally this just results in a 1 second hang, and the DOM paste proceeds as normal.
        However these layout tests purposefully opt out of sync IPC timeouts (precisely so that we can catch bugs like
        this). See below for more details.

        * UIProcess/ios/WKContentViewInteraction.h:

        Keep track of the most recent autocorrection context that arrived in the UI process.

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

        Clear out the autocorrection context, in case the web process crashes.

        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

        If the autocorrection context is requested while handling a DOM paste, we know that the latest autocorrection
        context must be up to date, since the autocorrection context is computed and sent immediately before a DOM paste
        request. Use this to immediately invoke the completion handler, without any sync IPC back to the web process.

        (-[WKContentView _handleAutocorrectionContext:]):

2020-06-10  Hiro (mzp) Mizuno  <mzp@apple.com>

        [iOS] Option + Forward Delete should delete next word
        https://bugs.webkit.org/show_bug.cgi?id=213062
        rdar://64225458

        Reviewed by Daniel Bates.

        Implement support for pressing Option + Forward Delete to delete the next word. This makes text editing
        in WebKit more closely match the platform conventions.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]): Handle _deleteForwardByWord.
        (-[WKContentView _deleteForwardByWord]): Added.

2020-06-10  Geoffrey Garen  <ggaren@apple.com>

        Some style improvements to main thread code
        https://bugs.webkit.org/show_bug.cgi?id=213051

        Reviewed by Darin Adler.

        Updated for rename.

        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::runInitializationCode):
        (WebKit::InitializeWebKit2):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        WebKit:Add PepperUICoreSPI.h (Follow-up fix 2)
        https://bugs.webkit.org/show_bug.cgi?id=212996
        <rdar://problem/64182627>

        Unreviewed build fix.

        * UIProcess/ios/forms/WKNumberPadViewController.mm:
        (-[WKNumberPadViewController addContentViewAnimations:]): Correct APPLE_INTERNAL_SDK macro.
        * UIProcess/ios/forms/WKQuickboardListViewController.mm:
        (-[WKQuickboardListViewController initWithDelegate:]): Ditto.

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        WebKit:Add PepperUICoreSPI.h (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=212996
        <rdar://problem/64182627>

        Unreviewed build fix.

        * Platform/spi/watchos/PepperUICoreSPI.h: Add PUICPickerView headers.

2020-06-10  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r262858): Fix macOS build when building EndowmentStateTracker.mm

        * UIProcess/EndowmentStateTracker.mm:
        - Move #if PLATFORM(IOS_FAMILY) to fix macOS build.

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

        [Cocoa] Return early from preference change notification handler if there is no observer
        https://bugs.webkit.org/show_bug.cgi?id=213050

        Reviewed by Darin Adler.

        Currently, the observer member is checked inside the loop iterating over all the keys,
        but this check should be moved outside of the loop.

        No new tests, since this is not a change in behavior.

        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKUserDefaults _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:]):

2020-06-10  Brady Eidson  <beidson@apple.com>

        Crash growing a CFData with incremental PDF loading.
        <rdar://problem/63670403> and https://bugs.webkit.org/show_bug.cgi?id=213035

        Reviewed by Alex Christensen.

        No test - No reliable way to trigger.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::ensureDataBufferLength): When you call CFDataCreateMutable with a size other than 0,
          your data object can never grow beyond that size.
          And, in fact, CFData will crash on purpose when this is attempted.
          So always create our mutable CFDatas with size 0 even if we immediately plan to grow them.

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        WebKit: Add ClockKitSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=212994
        <rdar://problem/64181092>

        Reviewed by Wenson Hsieh.

        No new tests, behavior unchanged.

        * Platform/spi/watchos: Added.
        * Platform/spi/watchos/ClockKitSPI.h: Added.
        * UIProcess/ios/forms/WKTimePickerViewController.mm: Import ClockKitSPI.h and UIKitSPI.h.
        * WebKit.xcodeproj/project.pbxproj: Include ClockKitSPI.

2020-06-10  Brian Burg  <bburg@apple.com>

        WebDriver on non-iOS ports cannot perform ActionChain which has scrolling down to the element and click it
        https://bugs.webkit.org/show_bug.cgi?id=208232
        <rdar://problem/59859491>

        Reviewed by Devin Rousso.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        The provided coordinates are in LayoutViewport coordinate system, which does
        not take topContentInset into account. Add back in the topContentInset
        when translating to flipped window coordinates.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        The calculations of element bounds and IVCP have an incorrect handling of
        root coordinates as contents/absolute coordinates. Add the missing conversion.

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

        [iOS] Update sandbox rules for correct sanitizer paths in current OS releases
        https://bugs.webkit.org/show_bug.cgi?id=213040
        <rdar://problem/64187043>

        Reviewed by Per Arne Vollan.

        Update the sandbox rules on iOS platforms to allow access to the
        new system locations for Asan libraries.

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

2020-06-10  Jer Noble  <jer.noble@apple.com>

        Catalyst WebKit apps continue to play audio after quitting
        https://bugs.webkit.org/show_bug.cgi?id=212981
        <rdar://problem/57089471>

        Reviewed by Chris Dumez.

        RunningBoard will track whether a process (and it's associated child processes) are "user-visible" by
        granting those processes an "endowment", similar to the existing endowment for application visibility.
        Track changes to these endowments using a RBSProcessMonitor, and for Catalyst apps, react to losing the
        "user-visible" endowment by suspending all media playback.

        Move all the endowment-related code into a new class, EndowmentStateTracker, which is a singleton object
        that can have mulitple WebPageProxy clients. Update references to the previously global static
        isApplicationForeground() function to refer to EndowmentStateTracker instead.

        Drive-by fix: move some iOS-only functions in WebPageProxy.cpp into WebPageProxyIOS.mm.

        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::isApplicationForeground): Deleted.
        * UIProcess/EndowmentStateTracker.h: Added.
        (WebKit::EndowmentStateTracker::isVisible const):
        (WebKit::EndowmentStateTracker::isUserFacing const):
        * UIProcess/EndowmentStateTracker.mm: Added.
        (WebKit::handleForPID):
        (WebKit::EndowmentStateTracker::isApplicationForeground):
        (WebKit::EndowmentStateTracker::isApplicationUserFacing):
        (WebKit::EndowmentStateTracker::singleton):
        (WebKit::EndowmentStateTracker::EndowmentStateTracker):
        (WebKit::EndowmentStateTracker::addClient):
        (WebKit::EndowmentStateTracker::removeClient):
        (WebKit::EndowmentStateTracker::setIsUserFacing):
        (WebKit::EndowmentStateTracker::setIsVisible):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::processWillBecomeSuspended): Deleted.
        (WebKit::WebPageProxy::processWillBecomeForeground): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isApplicationVisible):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::processWillBecomeSuspended):
        (WebKit::WebPageProxy::processWillBecomeForeground):
        (WebKit::WebPageProxy::isUserFacingChanged):
        (WebKit::WebPageProxy::isVisibleChanged):
        * WebKit.xcodeproj/project.pbxproj:

2020-06-10  Antoine Quint  <graouts@webkit.org>

        Subframes should not autosize independently
        https://bugs.webkit.org/show_bug.cgi?id=212984
        <rdar://problem/64175493>

        Reviewed by Simon Fraser.

        Ensure we only call FrameView::enableSizeToContentAutoSizeMode() for the main frame.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2020-06-10  Jonathan Bedard  <jbedard@apple.com>

        WebKit:Add PepperUICoreSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=212996
        <rdar://problem/64182627>

        Reviewed by Tim Horton.

        No new tests, behavior unchanged.

        * Platform/spi/watchos: Added.
        * Platform/spi/watchos/PepperUICoreSPI.h: Added.
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: Include PepperUICoreSPI header.
        * UIProcess/ios/WKScrollView.mm: Ditto.
        * UIProcess/ios/forms/WKDatePickerViewController.mm: Remove headers duplicated in PepperUICoreSPI.h.
        * UIProcess/ios/forms/WKFocusedFormControlView.mm: Ditto.
        * UIProcess/ios/forms/WKNumberPadView.mm: Include PepperUICoreSPI header.
        * UIProcess/ios/forms/WKNumberPadViewController.h: Remove headers duplicated in PepperUICoreSPI.h.
        * UIProcess/ios/forms/WKNumberPadViewController.mm: Ditto.
        (-[WKNumberPadViewController addContentViewAnimations:]): Limit addAnimation to Internal builds.
        * UIProcess/ios/forms/WKQuickboardListViewController.h: Include PepperUICoreSPI header.
        * UIProcess/ios/forms/WKQuickboardListViewController.mm: Remove headers duplicated in PepperUICoreSPI.h.
        (-[WKQuickboardListViewController initWithDelegate:]):
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm: Remove headers duplicated in PepperUICoreSPI.h.
        * UIProcess/ios/forms/WKTextInputListViewController.mm: Ditto.
        * WebKit.xcodeproj/project.pbxproj: Add PepperUICoreSPI.h.

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

        [iOS] Add entitlement for PAC exceptions
        https://bugs.webkit.org/show_bug.cgi?id=213027
        <rdar://problem/63985737>

        Reviewed by Brent Fulgham.

        On iOS, add entitlement for PAC exceptions.

        * Scripts/process-entitlements.sh:

2020-06-10  James Savage  <james.savage@apple.com>

        Swift Overlay API refinements
        https://bugs.webkit.org/show_bug.cgi?id=212939
        <rdar://problem/64140013>

        Reviewed by Darin Adler.

        This patch cleans up some inconsistencies in the various Swift projections,
        and modifies JavaScript evaluation callbacks to be optional to account for
        scripts which may not evaluate to a useful result (such as ones that simply
        modify the DOM without reporting a status). It also standardizes on using
        completionHandler as an argument label to match the rest of WebKit API, and
        the majority of the Swift API refinements.
        
        It also fixes a module issue where the WebKit.h umbrella was missing an
        import of WKScriptReplyWithMessageHandler.h, making the type unusable from
        Swift source files/

        * Shared/API/Cocoa/WebKit.h: Add missing header.
        * UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
        (callAsyncJavaScript(_:arguments:in:completionHandler:)): Rename completion
            argument, and make optional. Note: Optional closures are implicitly
            @escaping, making the annotation redundant and incompatible, so it must
            be removed. In Swift, Optional.map()'s closure is invoked iff the Optional
            contains some value, and the result of that transform is returned, else
            nil is propagated. This allows us to apply the closure transform if the
            client value is non-nil, without using intermediary variables or if/let.
        (evaluateJavaScript(_:in:completionHandler:)): Ditto.
        * SwiftOverlay/Tests/WebKitTests.swift:
        (WebKitTests.testAPI): Update names to reflect changes.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/xcshareddata/xcschemes/Everything (Catalyst).xcscheme:
            Ensure that the unit test files get built as part of Build & Run, so that
            any changes to names get flagged without even running the tests.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/xcshareddata/xcschemes/Everything.xcscheme:
            Ditto.

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

        ASSERTION FAILED: suspendedState == State::Running in WebKit::WebResourceLoadStatisticsStore::suspend
        https://bugs.webkit.org/show_bug.cgi?id=213031
        <rdar://problem/64131092>

        Reviewed by Chris Dumez.

        There is a race condition if two calls are made to
        WebResourceLoadStatisticsStore::suspend() simultanously.
        WebResourceLoadStatisticsStore::resume() notifies the background
        thread to continue and releases a lock, then sometimes the second call
        to suspend obtains the lock and updates the suspendedState variable
        before the background thread resumes and checks the result. This patch allows the
        suspendedState to be either State::Running or State::WillSuspend to
        account for this.

        No new tests, this should fix http/wpt/service-workers/service-worker-spinning-fetch.https.html.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::suspend):

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

        Revert r259770
        https://bugs.webkit.org/show_bug.cgi?id=210097
        <rdar://problem/64175992>

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

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

        Add some null checks in PDFPlugin::updatePageAndDeviceScaleFactors
        https://bugs.webkit.org/show_bug.cgi?id=213009
        <rdar://problem/63756100>

        Reviewed by Chris Dumez.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors):

2020-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, reverting r262791.

        WinCairo WebKit1 is crashing.

        Reverted changeset:

        "[Curl] Implement functions to use ResourceLoadStatistics."
        https://bugs.webkit.org/show_bug.cgi?id=207692
        https://trac.webkit.org/changeset/262791

2020-06-09  Tim Horton  <timothy_horton@apple.com>

        Stop using the wrong LaunchServices SPI for getting an app's localized name
        https://bugs.webkit.org/show_bug.cgi?id=213003
        <rdar://problem/64169000>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _appendAppLinkOpenActionsForURL:actions:elementInfo:]):

2020-06-09  Mark Lam  <mark.lam@apple.com>

        Disambiguate the OverridesGetPropertyNames structure flag
        https://bugs.webkit.org/show_bug.cgi?id=212909
        <rdar://problem/63823557>

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2020-06-09  Dean Jackson  <dino@apple.com>

        Stop using discriminatory names for WebGL and Plugin blocking
        https://bugs.webkit.org/show_bug.cgi?id=213000

        Reviewed by Simon Fraser.

        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm:
        (WebKit::getPlatformPluginModuleInformation):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextIsPlugInUpdateAvailable):
        (WKContextShouldBlockWebGL):
        (WKContextShouldSuggestBlockWebGL):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):

2020-06-09  Brian Burg  <bburg@apple.com>

        [Cocoa] Element Send Keys can hang when an automation window becomes unfocused
        https://bugs.webkit.org/show_bug.cgi?id=212985
        <rdar://problem/56354471>

        Reviewed by Devin Rousso.

        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage):
        Make sure to focus the window and set first responder so sending keys doesn't hang.


2020-06-09  Jonathan Bedard  <jbedard@apple.com>

        WebKit: Import NSURLConnectionSPI.h instead of CFNSURLConnection.h
        https://bugs.webkit.org/show_bug.cgi?id=212980
        <rdar://problem/64172694>

        Unreviewed build fix.

        No new tests, behavior unchanged.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

2020-06-09  Dean Jackson  <dino@apple.com>

        REGRESSION: [Safari Mojave for High Sierra] Accessing some of the featured pages on apple.com causes the webpage to crash
        https://bugs.webkit.org/show_bug.cgi?id=212940

        Reviewed by Tim Horton.

        The code to use the singleton for a SwitchingGPUClient was assuming it
        has always been set, which was not the case when
        ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) was not true.

        * WebProcess/cocoa/WebProcessCocoa.mm: Set the singleton unconditionally.
        (WebKit::WebProcess::platformInitializeProcess):

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

        REGRESSION (r260820): [macCatalyst] Web process crashes when uploading a file
        https://bugs.webkit.org/show_bug.cgi?id=212976
        <rdar://problem/64033186>

        Reviewed by Tim Horton.

        On Mac Catalyst, we attempt to take a sandbox extension for `com.apple.frontboard.systemappservices` when
        uploading a file; this service does not exist in Catalyst, and we consequently encounter a release assertion
        under `WebPage::didChooseFilesForOpenPanelWithDisplayStringAndIcon`.

        Fix this by introducing `HAVE(FRONTBOARD_SYSTEM_APP_SERVICES)`, and using it to guard codepaths that attempt to
        grab a mach extension to this service. (As a followup, we should consider adopting this in other places that
        currently reference `com.apple.frontboard.systemappservices`).

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

2020-06-09  Jonathan Bedard  <jbedard@apple.com>

        WebKit: Support watchOS and tvOS in xcconfigs
        https://bugs.webkit.org/show_bug.cgi?id=212977
        <rdar://problem/64170532>

        Reviewed by Tim Horton.

        No new tests, behavior unchanged.

        * Configurations/Base.xcconfig: Add tvOS and watchOS major version macros.
        * Configurations/BaseTarget.xcconfig: Include tvOS and watchOS framework stubs.
        * Configurations/BaseXPCService.xcconfig: Generalize excluded files for all embedded platforms.
        * Configurations/GPUService.xcconfig: Generalize INFOPLIST for embedded platforms.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

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

        Expose PDF file URL in shouldAllowPDFToOpenFromFrame SPI
        https://bugs.webkit.org/show_bug.cgi?id=212974

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::confirmPDFOpening):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::confirmPDFOpening):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):

2020-06-09  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Reviewed by Don Olmstead.

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        In NetworkDataTaskCurl.cpp we check if we should block cookies and block if needed.

        Tests: http/tests/resourceLoadStatistics/

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::createCurlRequest):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::blockCookies):
        (WebKit::NetworkDataTaskCurl::unblockCookies):
        (WebKit::NetworkDataTaskCurl::shouldBlockCookies):
        (WebKit::NetworkDataTaskCurl::isThirdPartyRequest):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetAllStorageAccessEntries):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):

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

        [WebDriver][WPE] Follow up WPE fix after r262703
        https://bugs.webkit.org/show_bug.cgi?id=212948

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
        (WebKit::WebAutomationSession::platformWebModifiersFromRaw):

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

        [IPC] Adopt enum class for IPC::CFType
        <https://webkit.org/b/212921>
        <rdar://problem/64134506>

        Reviewed by Darin Adler.

        Summary:
        - Convert IPC::CFType to enum class.
        - Rule for new enum names is to remove "Ref" suffix from the
          actual type name.
        - Special enum CFType::Null renamed to CFType::Nullptr to
          differentiate from CFType::CFNull objects.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::tokenNullTypeRef): Delete.
        (IPC::tokenNullptrTypeRef): Add.
        - Rename tokenNullTypeRef() to tokenNullptrTypeRef().
        (IPC::CFType):
        - Convert to enum class.
        (IPC::typeFromCFTypeRef):
        (IPC::encode):
        - Switch from encodeEnum() to operator<<().
        (IPC::decode):
        - Switch from decodeEnum() to decode().
        (WTF::EnumTraits<IPC::CFType>): Add.
        * Shared/cf/ArgumentCodersCF.h:
        (IPC::tokenNullTypeRef): Delete.
        (IPC::tokenNullptrTypeRef): Add.
        - Rename tokenNullTypeRef() to tokenNullptrTypeRef().
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::decodePlatformData):
        - Switch to use tokenNullptrTypeRef().
        * mac/WebKit2.order:
        - Update symbol name after renaming tokenNullTypeRef().

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

        ResourceLoadStatisticsDatabaseStore::domainIDFromString failed, error message: bad parameter or other API misuse
        https://bugs.webkit.org/show_bug.cgi?id=212916
        <rdar://problem/64127238>

        Reviewed by Sihui Liu.

        Make sure m_domainIDFromStringStatement is accessed in a separate
        scope in ensureResourceStatisticsForRegistrableDomain() so it will be
        reset before being used again.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        Add debug assert to ensure that tests catch this case.

        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain const):

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

        Turn some WebPageProxy logging into error logging
        https://bugs.webkit.org/show_bug.cgi?id=212922
        <rdar://problem/63894722>

        Reviewed by Geoffrey Garen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::processDidTerminate):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::tryReloadAfterProcessTermination):
        (WebKit::WebPageProxy::didExceedInactiveMemoryLimitWhileActive):
        (WebKit::WebPageProxy::didExceedBackgroundCPULimitWhileInForeground):

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

        [IPC] Adopt enum class for DragOperation
        <https://webkit.org/b/212870>
        <rdar://problem/64069940>

        Reviewed by Darin Adler.

        * Scripts/webkit/messages.py:
        - Remove FIXME now that it's not needed.
        * Shared/API/Cocoa/_WKDragActionsInternal.h:
        (WebKit::coreDragOperationMask):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::kit):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (dropOperationForWebCoreDragOperation):
        (coreDragOperationForUIDropOperation):
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):

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

        Unreviewed, reverting r262685.
        https://bugs.webkit.org/show_bug.cgi?id=212914

        caused flakey crashes in an iOS test

        Reverted changeset:

        "Clear WebPageProxy event state between tests"
        https://bugs.webkit.org/show_bug.cgi?id=212864
        https://trac.webkit.org/changeset/262685

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Unify rounding / clamping conversions between 0-1 float components and 0-255 byte components
        https://bugs.webkit.org/show_bug.cgi?id=212871

        Reviewed by Simon Fraser.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (scrollViewBackgroundColor):
        Replaces uses of colorWithAlphaUsingAlternativeRounding() with colorWithAlpha().

2020-06-08  Richard Houle  <rhoule@apple.com>

        Links in NSAttributedString passed to -[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:] are ignored
        https://bugs.webkit.org/show_bug.cgi?id=212801
        <rdar://problem/63027631>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]): Call the new detailsWithLinks
        implementation, asserting if an URL is non nil.
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]): Ditto.
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:detailsWithLinks:completionHandler:]): Pass the URL to
        the completion handler when appropriate.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

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

        [Cocoa] Adopt read-only mode for preferences in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=212411

        Reviewed by Darin Adler.

        Change name of HAVE define to match SPI name.

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

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

        [Cocoa] CFPrefs synchronization does not always work for global preference changes
        https://bugs.webkit.org/show_bug.cgi?id=212783

        Reviewed by Tim Horton.

        In CFPrefs direct mode, synchronization of global preference changes from the UI process to the WebContent process does not always work.
        This is caused by the KVO notification being sent to all or some of the NSUserDefault objects, which leads us to believe a non-global
        preference was changed. Since a global preference change always leads to some NSUserDefaults object receiving the notification, we can
        work around this by checking if the preference being changed really belongs to the domain of the NSUserDefaults object, or if it is a
        global preference. Also, stop creating NSUserDefaults object for the global domain, since this is an error according to the docs.

        API test: WebKit.GlobalPreferenceChangesUsingDefaultsWrite

        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKUserDefaults _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:]):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::notifyPreferencesChanged):

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

        [iOS] Hit-testing on icloud.com is offset after closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=212890
        <rdar://problem/58775297>

        Reviewed by Simon Fraser.

        After tapping to create a new tab on the icloud.com settings page (with no other tabs open) and then closing the
        new tab, all hit-testing on the page is offset by -33px until the page is reloaded. This bug appears to be a
        corner case triggered by a combination of the following three changes:

        - <https://trac.webkit.org/r170463>
        - <https://trac.webkit.org/r245006>
        - <rdar://problem/53660458> (which is an iOS-specific Safari change)

        We start on icloud.com's settings page. When closing the newly created tab, Safari hides the tab bar, causing
        both the top content inset and top obscured inset to decrease by 33 points. When applying the top content inset
        change, Safari (after <rdar://problem/53660458>) temporarily sets `_automaticContentOffsetAdjustmentEnabled` on
        `WKScrollView` to `NO`, which means that the scroll view doesn't automatically adjust its content offset to -70;
        instead, it remains at -103 (the content offset when the tab bar is shown).

        Because of this, during the next remote layer tree commit where the content size changes,
        `-_setContentSizePreservingContentOffsetDuringRubberband:` will believe that we're currently rubber-banding by
        33px, and therefore try to adjust the content offset of the scroll view to be -103 instead of allowing it to be
        adjusted back to -70 (see r170463 and `-_restoreContentOffsetWithRubberbandAmount:`).

        This results in the scroll position on the page (`document.scrollingElement.scrollTop`) reporting -33, even
        though the top of the page is flush with the bottom of Safari's browser chrome. Finally, because `WKScrollView`
        is made unscrollable due to `overflow: hidden;` (r245006), we end up permanently stuck in this state until the
        next page load, rather than the next remote layer tree commit that causes any scrolling.

        To fix this, add an additional restriction on the rubberbanding offset restoration code in
        `-_setContentSizePreservingContentOffsetDuringRubberband:`, such that we only try to preserve the current
        rubberbanded offset if we're actually rubberbanding (that is, dragging or bouncing against the edge of the
        scroll view). Note that when rubberbanding against the top of the scroll view on iPad using a trackpad, the
        `-isDragging` property is also true, which matches behavior when panning via touch.

        Test: ScrollViewInsetTests.ChangeInsetWithoutAutomaticAdjustmentWhileWebProcessIsUnresponsive

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _setContentSizePreservingContentOffsetDuringRubberband:]):

        Also, split out the `CGSizeEqualToSize(currentContentSize, contentSize)` case into a separate early return that
        skips the call to `-setContentSize:` altogether.

2020-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove -respondsToSelector: check before calling -[PKPaymentRequest setBoundInterfaceIdentifier:]
        https://bugs.webkit.org/show_bug.cgi?id=212884
        <rdar://problem/64090963>

        Reviewed by Youenn Fablet.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Relied on the definition of
        HAVE_PASSKIT_BOUND_INTERFACE_IDENTIFIER to ensure that PKPaymentRequest will respond to
        -setBoundInterfaceIdentifier:.

2020-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove ENABLE_APPLE_PAY_SETUP, ENABLE_APPLE_PAY_SESSION_V7, and HAVE_PASSKIT_PAYMENT_SETUP
        https://bugs.webkit.org/show_bug.cgi?id=212883
        <rdar://problem/64090763>

        Reviewed by Youenn Fablet.

        These macros evaluate to true whenever ENABLE(APPLE_PAY) is true on platforms supported by
        trunk WebKit, so we can either remove them or replace them with ENABLE(APPLE_PAY).

        * Shared/ApplePay/ApplePayPaymentSetupFeatures.mm:
        * Shared/ApplePay/ApplePayPaymentSetupFeaturesWebKit.h:
        * Shared/ApplePay/PaymentSetupConfiguration.mm:
        * Shared/ApplePay/PaymentSetupConfigurationWebKit.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2020-06-08  youenn fablet  <youenn@apple.com>

        [Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=206582
        <rdar://problem/58985368>

        Reviewed by Eric Carlson.

        Enable RemoteMediaRecorder only for systems supporting AVAssetWriterDelegate.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        * GPUProcess/webrtc/RemoteMediaRecorder.h:
        * GPUProcess/webrtc/RemoteMediaRecorder.messages.in:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
        (WebKit::MediaRecorderProvider::createMediaRecorderPrivate):

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

        [WebDriver] Allow platform-dependent modifier keys conversion to WebEvent::Modifier
        https://bugs.webkit.org/show_bug.cgi?id=212848

        Reviewed by Brian Burg.

        WebEvent::Modifier flags does not map directly to the platform flags,
        so we can't directly convert the modifier flags to the OptionSet.

        Covered by existing WebDriver tests.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateMouseInteraction): Use
        platform-specific method to convert the modifiers.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp: Added
        conversion from GDK modifier mask to WebEvent::Modifier.
        (WebKit::WebAutomationSession::platformWebModifiersFromRaw):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm: Added
        conversion from NSModifierFlag to WebEvent::Modifier.
        (WebKit::WebAutomationSession::platformWebModifiersFromRaw):
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp: Added
        conversion from wpe_input_keyboard_modifier to WebEvent::Modifier.
        (WebKit::WebAutomationSession::platformWebModifiersFromRaw):

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

        [WPE] Behave like GDK_CURRENT_TIME when the timestamp is zero
        https://bugs.webkit.org/show_bug.cgi?id=212797

        WebDriver tests come with zero timestamp. So behave like
        GDK_CURRENT_TIME and assume zero timestamp == WallTime::now().

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        * Shared/libwpe/WebEventFactory.cpp:
        (WebKit::wallTimeForEventTime):

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

        Remove ENABLE_VIDEO_TRACK ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=212568

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::dispatchMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::textTrackSetMode):
        (WebKit::RemoteMediaPlayerProxy::notifyTrackModeChanged):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.messages.in:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.h:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.messages.in:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.messages.in:
        * Shared/WebPreferences.yaml:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::dispatchMessage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::tracksChanged):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::updatePreferences):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.messages.in:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):

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

        Clear WebPageProxy event state between tests
        https://bugs.webkit.org/show_bug.cgi?id=212864

        Reviewed by Anders Carlsson.

        Make sure that event state doesn't leak between tests via events queued in WebPageProxy.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageClearEventState):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::clearEventState):
        * UIProcess/WebPageProxy.h:

2020-06-06  Rob Buis  <rbuis@igalia.com>

        Move URL scheme check to NetworkLoadChecker
        https://bugs.webkit.org/show_bug.cgi?id=191924

        Reviewed by Joseph Pecoraro.

        Reduce includes for CustomHeaderFields, I guess these were needed
        at some point but not anymore.

        * Shared/WebsitePoliciesData.cpp:

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

        Use OptionSet<DragOperation> for mask values
        <https://webkit.org/b/212605>

        Reviewed by Darin Adler.

        In broad strokes:
        - Replace use of DragOperation with OptionSet<DragOperation> or
          Optional<DragOperation>.
        - Rename function parameters and local variables to denote use
          of mask values.
        - Remove DragOperationNone enum value.
        - Replace DragOperationEvery enum value with anyDragOperation().

        * Platform/spi/ios/UIKitSPI.h:
        (UIDragOperation):
        - Remove unused (and misnamed) UIDragOperation enum typedef.
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        - Add support for WebCore::DragOperation enum.
        * Shared/API/Cocoa/_WKDragActionsInternal.h:
        (WebKit::coreDragOperationMask): Add conversion function.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        - Update to encode/decode OptionSet<DragOperation>.

        * UIProcess/API/gtk/DragSource.h:
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DragSourceGtk3.cpp:
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DragSourceGtk4.cpp:
        (WebKit::DragSource::begin):
        * UIProcess/API/gtk/DropTarget.h:
        * UIProcess/API/gtk/DropTargetGtk3.cpp:
        (WebKit::DropTarget::didPerformAction):
        (WebKit::DropTarget::leaveTimerFired):
        * UIProcess/API/gtk/DropTargetGtk4.cpp:
        (WebKit::DropTarget::DropTarget):
        (WebKit::DropTarget::didPerformAction):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/PageClientImpl.h:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseStartDrag):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        (webkitWebViewBaseStartDrag):

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::sendDragEndToPage):
        (WebKit::WebViewImpl::draggingEntered):
        (WebKit::kit): Add conversion function.
        (WebKit::WebViewImpl::draggingUpdated):
        (WebKit::WebViewImpl::draggingExited):
        (WebKit::WebViewImpl::performDragOperation):
        - Make use of coreDragOperationMask() conversion function.
        * UIProcess/PageClient.h:
        (WebKit::WebViewImpl::startDrag):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        - Remove MESSAGE_CHECK now that we're using the actual type.
        (WebKit::WebPageProxy::startDrag):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::resetCurrentDragInformation):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::startDrag):
        (WebKit::WebPageProxy::currentDragOperation const):
        * UIProcess/WebPageProxy.messages.in:
        (WebPageProxy::DidPerformDragControllerAction):
        (WebPageProxy::StartDrag):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didHandleDragStartRequest:]):
        (dropOperationForWebCoreDragOperation):
        (coreDragOperationForUIDropOperation): Add conversion function.
        - Note that this was not being converted from UIDropOperation to
          WebCore::DragOperation previously, and UIDropOperationMove
          (0x3) was not being properly converted to DragOperationMove
          (0x16).
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        (-[WKContentView _didPerformDragOperation:]):
        (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]):
        (-[WKContentView dragInteraction:session:didEndWithOperation:]):
        (-[WKContentView dropInteraction:sessionDidEnd:]):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::dragEnded):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::dragEnded):
        * WebProcess/WebPage/WebPage.messages.in:
        (WebPage::PerformDragControllerAction):
        (WebPage::DragEnded):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestAdditionalItemsForDragSession):

2020-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: unify the naming scheme for agents used by instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=212859

        Reviewed by Timothy Hatcher.

        Inspector agents fall into one of three categories:
         - "persistent" when Web Inspector is connected
         - "enabled" when that agent is `enable`d, such as if the corresponding tab is visible
         - "tracking" when that agent is part of a timeline recording.

        The only exception to this is the Console agent, as that exists regardless of whether Web
        Inspector is connected as it needs to preserve messages logged before Web Inspector connects.

        Also remove the "Inspector" prefix from getter/setter methods as it adds confusion if that
        agent also has subclasses (e.g. `InspectorRuntimeAgent` and `PageRuntimeAgent`).

        * UIProcess/Inspector/Agents/InspectorBrowserAgent.cpp:
        * UIProcess/Inspector/WebInspectorProxy.cpp:
        * UIProcess/Inspector/WebPageInspectorController.h:
        Simple naming changes elided to avoid a long ChangeLog.

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

        [IPC] Adopt enum class for AutocapitalizeType
        <https://webkit.org/b/212846>
        <rdar://problem/64042825>

        Reviewed by Darin Adler.

        Summary:
        - Move AutocapitalizeType into WebCore namespace.
        - Convert AutocapitalizeType to an enum class.
        - Add WTF::EnumTraits<AutocapitalizeType> for IPC.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        - Stop using decodeEnum() and encodeEnum() now that
          WTF::EnumTraits<AutocapitalizeType> exists.
        * Shared/FocusedElementInformation.h:
        * Shared/glib/InputMethodState.cpp:
        (WebKit::InputMethodState::addHintsForAutocapitalizeType):
        * Shared/glib/InputMethodState.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toUITextAutocapitalize):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getFocusedElementInformation):

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

        [iOS] Silence telemetry generated during download operations
        https://bugs.webkit.org/show_bug.cgi?id=212854
        <rdar://problem/63909414>

        Reviewed by Per Arne Vollan.

        Remove reporting and telemetry for the 'com.apple.ProgressReporting' service
        from the Network Process sandbox, since this is a critical part of supplying
        download status to the WebKit UI.

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

2020-06-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r262619, r262625, and r262641.

        Caused mediarecorder layout test crashes.

        Reverted changesets:

        "[Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder"
        https://bugs.webkit.org/show_bug.cgi?id=206582
        https://trac.webkit.org/changeset/262619

        "[Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder"
        https://bugs.webkit.org/show_bug.cgi?id=206582
        https://trac.webkit.org/changeset/262625

        "Unreviewed, silence deprecation warning to fix build with
        latest SDK."
        https://trac.webkit.org/changeset/262641

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

        ITP SQLite Database should only vacuum once per day
        https://bugs.webkit.org/show_bug.cgi?id=212712
        <rdar://problem/63939711>

        Reviewed by Brent Fulgham.

        Followup to https://trac.webkit.org/changeset/262538/webkit. We should
        run incremental auto vacuum, not a full vacuum, once per-day, because
        it is less expensive.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::performDailyTasks):

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

        -_focusTextInputContext should reposition the caret if called for an already focused text input context
        https://bugs.webkit.org/show_bug.cgi?id=212830
        <rdar://problem/64032956>

        Reviewed by Wenson Hsieh.

        Update the code based on new feedback: the caret should now be re-positioned when -_focusTextInputContext
        is called on an already assisted text input context.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView _didCommitLoadForMainFrame]): Reset state. See below for why.

        (-[WKContentView _focusTextInputContext:placeCaretAt:completionHandler:]): I cannot simply remove the early
        return in -_focusTextInputContext that detects if the specified text input context is already focused because
        it could effect user-visible responsiveness due to an Apple internal client invoking this function more times
        than necessary with the same point during a text interaction. See <rdar://problem/59430806>. That radar
        represents a correctness issue. I didn't actually evaluate whether responsiveness is affected by this patch,
        but I would feel more confident that there would be 0 impact when removing the early branch after that radar
        is fixed without the need to even perform a responsiveness analysis. Note that there is already a comment about
        that radar at the top of this function.

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

        Fix PDF opening after r262592
        https://bugs.webkit.org/show_bug.cgi?id=212795

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):
        As Darin mentioned and I was about to discover, my last-minute switching things around got the boolean condition backwards.
        We want to do nothing if we're not allowed to open the PDF, and we want to open the PDF if we are allowed to.s

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

        [IPC] Adopt enum class for PluginLoadClientPolicy
        <https://webkit.org/b/212827>
        <rdar://problem/64030431>

        Reviewed by Alex Christensen.

        Summary:
        - Update for renamed PluginLoadClientPolicy enums.
        - Update to make PluginLoadClientPolicy type work with IPC.
        - Replace uint8_t with strongly-typed PluginLoadClientPolicy.

        * Scripts/webkit/messages.py:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadClientPolicy):
        (WebKit::toPluginLoadClientPolicy):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (toPluginLoadClientPoliciesHashMap):
        (policiesHashMapToDictionary):
        (isPluginLoadClientPolicyAcceptable): Delete.
        - Replace with
          WTF::isValidEnum<WebCore::PluginLoadClientPolicy>().
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setPluginLoadClientPolicy):
        (WebKit::WebProcessPool::resetPluginLoadClientPolicies):
        * UIProcess/WebProcessPool.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pluginInfo):
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::webVisiblePluginInfo):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setPluginLoadClientPolicy):
        (WebKit::WebProcess::resetPluginLoadClientPolicies):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        Update header documentation for WKPreferences.fraudulentWebsiteWarningEnabled
        https://bugs.webkit.org/show_bug.cgi?id=212843
        <rdar://problem/64010164>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKPreferences.h:

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

        [iOS] Remove message filtering telemetry for expected case
        https://bugs.webkit.org/show_bug.cgi?id=212841
        <rdar://problem/63893460>

        Reviewed by Per Arne Vollan.

        Remove unintentional telemetry being captured for expected behavior.

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

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

        [Cocoa] Adopt read-only mode for preferences in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=212411
        <rdar://problem/63640788>

        Reviewed by Darin Adler.

        The WebContent process should never write preferences. Adopt read-only mode for preferences.
        This will fix some sandbox violations when the UI process is notifying the WebContent process
        about preference changes. When notified, the WebContent process will use the preferences API
        to write those preferences in-process, but there should be no attempt at writing these new
        values to disk, which this patch will ensure.

        No new tests, since this is fixing a benign sandbox violation.

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

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

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

        Reviewed by Darin Adler.

        Add required message to message filter in the iOS WebContent sandbox.

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

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

        REGRESSION (r262456?): [macOS] media/picture-in-picture/picture-in-picture-api tests are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=212762

        Reviewed by Eric Carlson.

        The Picture-in-Picture implementation expects the two callbacks HTMLVideoElement::didBecomeFullscreenElement()
        and HTMLVideoElement::setVideoFullscreenFrame() to come in order. So we need to remove the dispatch_async()
        and call HTMLVideoElement::didBecomeFullscreenElement() directly.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didEnterFullscreen):

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

        Non-unified build fixes, early summer 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=212819

        Unreviewed build fix.

        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Add missing WebCore:: namespace to
        a couple of uses of WebCore::FloatSize.
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp: Add missing Logging.h header.

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

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541
        <rdar://problem/63781452>

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:

2020-06-05  youenn fablet  <youenn@apple.com>

        [Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=206582
        <rdar://problem/58985368>

        Reviewed by Eric Carlson.

        Enable RemoteMediaRecorder only for systems supporting AVAssetWriterDelegate.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didReceiveMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        * GPUProcess/webrtc/RemoteMediaRecorder.h:
        * GPUProcess/webrtc/RemoteMediaRecorder.messages.in:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
        (WebKit::MediaRecorderProvider::createMediaRecorderPrivate):

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

        REGRESSION(r262184): [GTK] Two fast/forms tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=212747

        Reviewed by Adrian Perez de Castro.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::handleKeyPress): Return early if the menu has already been closed.

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

        Generate code to set the runtime settings for a service worker process
        https://bugs.webkit.org/show_bug.cgi?id=212467

        Reviewed by Alex Christensen.

        Split the code generated to handle web preference changes to have one method for process wide flags and one for page settings.
        Make the process wide flag method static and reuse it in WebSWContextManagerConnection.
        Covered by existing tests.

        * Scripts/PreferencesTemplates/WebPageUpdatePreferences.cpp.erb:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:

2020-06-04  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for PluginProcessType and PluginProcessSandboxPolicy
        <https://webkit.org/b/212758>

        Reviewed by Darin Adler.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Scripts/webkit/messages.py:
        * Shared/Plugins/PluginProcessAttributes.h:
        (WebKit::PluginProcessType): Convert to enum class.
        (WebKit::PluginProcessSandboxPolicy): Ditto.
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::fetchWebsiteData):
        (WebKit::PluginProcessManager::deleteWebsiteData):
        (WebKit::PluginProcessManager::deleteWebsiteDataForHostNames):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptionsWithAttributes):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):

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

        Add WKUIDelegate SPI to confirm before opening a PDF
        https://bugs.webkit.org/show_bug.cgi?id=212795
        <rdar://problem/58715847>

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::confirmPDFOpening):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::confirmPDFOpening):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::openWithNativeApplication):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        * WebProcess/WebPage/WebPage.h:

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

        UIProcess may crash after its prewarmed WebProcess gets terminated
        https://bugs.webkit.org/show_bug.cgi?id=212790
        <rdar://problem/63696191>

        Reviewed by Geoffrey Garen.

        Query WebProcessProxy::isDummyProcessProxy() because trying to look up the process
        in m_dummyProcessProxies. The key for m_dummyProcessProxies is a sessionID but
        not all processes have a sessionID. In particular, prewarmed web processes have
        no associated WebsiteDataStore and thus not sessionID.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::disconnectProcess):

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

        Reduce telemetry and report generation for WebContent Process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=212779
        <rdar://problem/63769879>

        Reviewed by Per Arne Vollan.

        This patch cleans up a set of telemetry and reports generated during normal
        WebKit operation. Now that we understand the uses of these XPC services, we
        can reduce the logging traffic.

        This is important to do now, since generating the telemetry and reports has
        a non-zero power cost.

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

2020-06-04  Jiewen Tan  <jiewen_tan@apple.com>

        Disable CFNetwork AppSSO interception for Mac Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=212787
        <rdar://problem/63738783>

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

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

        Reduce telemetry and report generation for Network Process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=212778
        <rdar://problem/63891745>

        Reviewed by Per Arne Vollan.

        This patch cleans up a set of telemetry and reports generated during normal
        WebKit operation. Now that we understand the uses of these XPC services, we
        can reduce the logging traffic.

        This is important to do now, since telemetry and report generation has
        battery life and performance impact.

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

2020-06-04  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r262546.

        This commit caused internal build failures

        Reverted changeset:

        "[Cocoa] Adopt read-only mode for preferences in the
        WebContent process"
        https://bugs.webkit.org/show_bug.cgi?id=212411
        https://trac.webkit.org/changeset/262546

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

        [iOS] Drop DependentProcessLink ProcessAssertion as it creates power leaks
        https://bugs.webkit.org/show_bug.cgi?id=212768
        <rdar://problem/62408828>

        Reviewed by Alex Christensen.

        Drop DependentProcessLink ProcessAssertion since it creates a process assertion cycle between
        the UIProcess and the WebContent process and leads to power leaks.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::assertionName const):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionType):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):
        (WebKit::flagsForAssertionType):
        (WebKit::toBKSProcessAssertionReason):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Revise sandbox to support network stack telemetry without sandbox violation reports
        https://bugs.webkit.org/show_bug.cgi?id=212720
        <rdar://problem/63895783>

        Reviewed by Per Arne Vollan.

        Telemetry captured for various networking configurations has revealed a handful of mach service
        connections that should be allowed in the Network Process to support troubleshooting and field diagnostics.

        This patch revises the sandbox to avoid logging these accesses during normal operation.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: Do not generate traces for 'com.apple.diagnosticd'.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Ditto.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Allow 'com.apple.osanalytics.osanalyticshelper' to
          be used on internal development builds.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Update to handle both 'diagnosticd' and 'osanalyticshelper'
        as optional services for internal builds.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::diagnosticServices): Ditto.
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Ditto.

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

        [Cocoa] Adopt read-only mode for preferences in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=212411
        <rdar://problem/63640788>

        Reviewed by Darin Adler.

        The WebContent process should never write preferences. Adopt read-only mode for preferences.
        This will fix some sandbox violations when the UI process is notifying the WebContent process
        about preference changes. When notified, the WebContent process will use the preferences API
        to write those preferences in-process, but there should be no attempt at writing these new
        values to disk, which this patch will ensure.

        No new tests, since this is fixing a benign sandbox violation.

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

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

        [iOS] The WebContent process should be allowed to consume an extension to the runningboard service
        https://bugs.webkit.org/show_bug.cgi?id=212753
        <rdar://problem/63948859>

        Reviewed by Chris Dumez.

        The WebContent process on iOS is failing to consume an extension to the runningboard service, because it is not allowed to do so.

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

2020-06-04  Tim Horton  <timothy_horton@apple.com>

        Work around broken system version macro
        https://bugs.webkit.org/show_bug.cgi?id=212726

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2020-06-04  Andy Estes  <aestes@apple.com>

        [watchOS] Re-enable content filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=212711
        <rdar://problem/63938350>

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

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

        ITP SQLite Database should only vacuum once per day
        https://bugs.webkit.org/show_bug.cgi?id=212712
        <rdar://problem/63939711>

        Reviewed by Brent Fulgham.

        Currently the SQLite Database runs a vacuum command each time statistics
        are processed. This is probably too frequent, because the database
        rarely needs to delete large amounts of data. We can cut this down to once a day.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::performDailyTasks):

2020-06-04  Youenn Fablet  <youenn@apple.com>

        Minor optimisation to RemoteAudioBusData::decode
        https://bugs.webkit.org/show_bug.cgi?id=212692

        Reviewed by Eric Carlson.

        * WebProcess/GPU/media/RemoteAudioBusData.h:
        (WebKit::RemoteAudioBusData::decode):
        Use releaseNonNull to remove some count churn.

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

        [watchOS] fast/events/watchos/change-focus-during-change-event.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=212722
        <rdar://problem/60633339>

        Reviewed by Andy Estes.

        When HAVE(QUICKBOARD_COLLECTION_VIEWS) is enabled, the codepath that's used to simulate interacting with the
        select menu view controller on watchOS will crash, since it tries to pretend that the user has selected an item
        in a table view section (`PUICQuickboardListSectionTextOptions`) that only exists when Quickboard collection
        views are disabled. Fix the crash by adjusting the testing codepath to select the item in the first section when
        HAVE(QUICKBOARD_COLLECTION_VIEWS) is defined.

        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        (-[WKSelectMenuListViewController selectItemAtIndex:]):

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

        [iOS] Hide the PiP button in fullscreen mode if PiP is disabled in preferences
        https://bugs.webkit.org/show_bug.cgi?id=212699
        <rdar://problem/60391437>

        Reviewed by Eric Carlson.

        In r260474, we hid the PiP button in fullscreen when PiP was unsupported on the
        current device; we must also hide the PiP button when clients have disabled PiP
        via preferences.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController videoControlsManagerDidChange]):

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

        Any active sqlite transactions for the ITP database should be aborted when the network process suspends.
        https://bugs.webkit.org/show_bug.cgi?id=212608
        <rdar://problem/60540768>

        Reviewed by Chris Dumez.

        Calls to WebResourceLoadStatisticsStore::suspend() should abort any
        active SQLite transactions. Unfinished transactions will hold the lock
        of a database file and could cause the network process to crash when
        suspending.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::~ResourceLoadStatisticsDatabaseStore):
        Store all ResourceLoadStatisticsDatabaseStore instances in a static
        HashSet so existing transactions can be aborted when the process is
        preparing to suspend.

        (WebKit::ResourceLoadStatisticsDatabaseStore::interrupt):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::suspend):

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

        WebProcessPool::notifyPreferencesChanged() is unsafely called on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212697
        <rdar://problem/63876652>

        Reviewed by Per Arne Vollan.

        Make sure we dispatch to the main thread in [WKPreferenceObserver preferenceDidChange] before
        we iterate over the process pools and call WebProcessPool::notifyPreferencesChanged() on each
        one.

        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKPreferenceObserver preferenceDidChange:key:encodedValue:]):

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

        [iOS] Reduce sandbox logging by permitting necessary sysctl
        https://bugs.webkit.org/show_bug.cgi?id=212710
        <rdar://problem/63900239>

        Reviewed by Per Arne Vollan.

        Telemetry indicates that we need to access "sysctl.name2oid" in the
        Network process during error handling for HTTP connections. Allow this
        access and avoid generating unnecessary logging for this case.

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

2020-06-03  Youenn Fablet  <youenn@apple.com>

        Add more logging related to service worker fetch event handling
        https://bugs.webkit.org/show_bug.cgi?id=212632
        <rdar://problem/63913271>

        Unreviewed.
        Build fix.

        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):

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

        Pass WebPageProxyIdentifier to PreconnectTask
        https://bugs.webkit.org/show_bug.cgi?id=212648

        Reviewed by Chris Dumez.

        Otherwise, AuthenticationManager::didReceiveAuthenticationChallenge sometimes returned early because there was no pageID.
        Observed connecting to real websites from my home wifi.  Unable to test using local servers because connecting happens too fast.

        * 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-06-03  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Jonathan Bedard.

        Replace typedef usage by alias-declaration.

        * Scripts/test-legacyMessages.h:
        * Scripts/test-superclassMessages.h:
        * Scripts/testMessages.h:
        * Scripts/webkit/messages.py:

2020-06-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] WTR: Forward key events to the active popup menu
        https://bugs.webkit.org/show_bug.cgi?id=212690

        Reviewed by Adrian Perez de Castro.

        I forgot to remove the ifdefs when added support for popup menus in r262414.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSynthesizeKeyEvent):

2020-06-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Fix input methods
        https://bugs.webkit.org/show_bug.cgi?id=212317

        Reviewed by Adrian Perez de Castro.

        Stop using GdkEvent to synthesize compositing events, add a specific NativeWebKeyboardEvent constructor for them.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:
        (webkitInputMethodContextImplGtkSetClientWidget):
        (webkitInputMethodContextImplGtkSetClientWindow): Deleted.
        * UIProcess/API/gtk/WebKitInputMethodContextImplGtk.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseUnrealize):
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        (webkitWebViewBaseFocusEnter):
        (webkitWebViewBaseFocusLeave):
        (webkitWebViewBaseKeyPressed):
        (webkitWebViewBaseKeyReleased):
        (toplevelWindowIsActiveChanged):
        (webkitWebViewBaseSynthesizeCompositionKeyPress):

2020-06-03  Santosh Mahto  <santosh.mahto@collabora.com>

        [GTK4] Implement file chooser
        https://bugs.webkit.org/show_bug.cgi?id=212322

        Reviewed by Carlos Garcia Campos.

        Port FileChooser to gtk4, Now FileChooser uses undeprecated api's.
        Covered by existing tests.

        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (fileChooserDialogResponseCallback):
        (webkitWebViewRunFileChooser):

2020-06-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Implement emoji chooser
        https://bugs.webkit.org/show_bug.cgi?id=212330

        Reviewed by Adrian Perez de Castro.

        GtkEmojiChooser is public API in GTK4, so just use that instead of our own.

        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        (emojiActivated): Close the popover before emitting emoji-picked for consistency with GTK.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        (_WebKitWebViewBasePrivate::releaseEmojiChooserTimerFired):
        (webkitWebViewBaseDispose):
        (emojiChooserClosed):
        (webkitWebViewBaseShowEmojiChooser):

2020-06-03  Youenn Fablet  <youenn@apple.com>

        Add more logging related to service worker fetch event handling
        https://bugs.webkit.org/show_bug.cgi?id=212632

        Reviewed by Chris Dumez.

        Add logging to identify the page ID and frame ID used by a service worker.
        Add logging to identify what is happening in the case of a response being buffered for navigation purposes.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::ServiceWorkerFrameLoaderClient::ServiceWorkerFrameLoaderClient):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        (WebKit::WebSWContextManagerConnection::continueDidReceiveFetchResponse):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didFail):
        (WebKit::WebServiceWorkerFetchTaskClient::didFinish):
        (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):

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

        [iOS] WKProcessAssertionBackgroundTaskManager incorrectly ignores expiration notifications for daemons
        https://bugs.webkit.org/show_bug.cgi?id=212619

        Reviewed by Alex Christensen.

        WKProcessAssertionBackgroundTaskManager was incorrectly ignoring process assertion expiration notifications
        for daemons, because it was relying on visibility to make decisions. For daemons (or ViewServices), we would
        not get application visibility notifications and would therefore always assume the app is visible.
        As a result, _handleBackgroundTaskExpiration would think it received an outdated expiration notification for
        a visible app and would simply re-take the assertion right away.

        To address the issue, we now rely on a RunningBoard API that lets us know if the suspension timer has been
        started or not (and how much remains on the timer). If the suspension timer is not active when get receive
        the expiration notification, we know it is an outdated notification and we ignore it (release and re-take
        assertion right away). This can happen if we did not have time to process the expiration notification before
        suspended and thus only get it upon resuming. It can also happen if the user re-activates the app right after
        the expiration notice has been sent.

        * Platform/spi/ios/RunningBoardServicesSPI.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (processHasActiveRunTimeLimitation):
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpiration]):
        (-[WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpirationOnMainThread]):
        (-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):

2020-06-02  Christopher Reid  <chris.reid@sony.com>

        REGRESSION[r260844]: [GTK][WPE] Inspector GResource no longer updated after WebInspectorUI file updates
        https://bugs.webkit.org/show_bug.cgi?id=212583

        Reviewed by Adrian Perez de Castro.

        Add a cmake dependency on inspector resource stamp so the Glib
        Inspector resources rebuild when the stamp is updated.

        * InspectorGResources.cmake:

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

        Revert FEATURES_DEFINES related changes
        https://bugs.webkit.org/show_bug.cgi?id=212664
        <rdar://problem/63893033>

        Reviewed by Andy Estes.

        Bug 262310, Bug 262311, Bug 262318, and Bug 262331 involve changes to
        FEATURE_DEFINES and how the values there relate to those found in the
        Platform*.h files. Those changes break XCBuild (by removing the
        .xcfilelist related to UnifiedSources and the process for generating
        them), and so are being reverted.

        * Configurations/FeatureDefines.xcconfig:

2020-06-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r262424.

        Caused webkitpy test failure

        Reverted changeset:

        "Make generated C++ code use modern C++"
        https://bugs.webkit.org/show_bug.cgi?id=190714
        https://trac.webkit.org/changeset/262424

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

        Stressing webkitSetPresentationMode leads to wrong inline video dimensions
        https://bugs.webkit.org/show_bug.cgi?id=202425

        Reviewed by Eric Carlson.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):

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

        Assert network process is not suspended when trying to merge new ITP data
        https://bugs.webkit.org/show_bug.cgi?id=212663
        <rdar://problem/63892899>

        Reviewed by Chris Dumez.

        Add a debug assert to check if statistics are being merged into the
        ITP database after prepareToSuspend() has been called. If this assert
        is hit, it means the ITP database thread is not being stopped when
        the process is suspended.

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

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

        REGRESSION(r261387): Introduced sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=212634

        Reviewed by Darin Adler.

        The change set r261387 introduced some new mach lookup sandbox violations, when attempting to close Launch Services connections that were not open.
        Fix this by only attempting to close open connections, and do it while holding the extension to the database mapping service.

        No new tests, since this patch is fixing benign sandbox violations.

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

2020-06-02  Youenn Fablet  <youenn@apple.com>

        Allow using web processes for service workers even though they loaded about URLs
        https://bugs.webkit.org/show_bug.cgi?id=212464

        Reviewed by Chris Dumez.

        Before the patch, a web process that loads about:blank will not be able to run service workers.
        A web process that is running service workers and is loading an about:blank page will also kill its service workers.
        To prevent this, do not take into account about:blank URLs for the computation of the registrable domain of a process.

        Covered by API tests.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):

2020-06-02  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: WKWebView's tint color is not propagated to Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=212630

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

2020-06-02  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r258949): Dynamic user accent color changes are not respected by WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=212628
        <rdar://problem/63436275>

        Reviewed by Per Arne Vollan.

        Two issues with the "CFPrefs Direct Mode" mechanism caused dynamic changes to the
        user accent color preference to not be respected anymore:

        - the default change, when synchronized to the Web Content process, was
        written into the wrong domain, because of bug 212627.

        - AppKit caches the resolved accent color; the cache is invalidated when the
        a CoreUI notification is posted. Since we synchronize preferences ourselves,
        the ordering of the default change and notification are no longer guaranteed,
        so AppKit sometimes reads and re-caches the old accent color.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::userAccentColorPreferenceKey):
        (WebKit::shouldWriteToAppDomainForPreferenceKey):
        (WebKit::WebProcess::notifyPreferencesChanged):
        To fix the first problem, write the default into the standardUserDefaults.
        This is just a workaround, we need a more general solution to this problem
        for all global preferences. We know it's OK in this case, because AppKit
        happens to read from standardUserDefaults.

        (WebKit::dispatchSimulatedNotificationsForPreferenceChange):
        To fix the second problem, re-emit the notification once we have synchronized
        the preference to the Web Content process.

2020-06-02  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Sam Weinig.

        Replace typedef usage by alias-declaration.

        * Scripts/webkit/messages.py:

2020-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Implement data list drop down menu
        https://bugs.webkit.org/show_bug.cgi?id=212333

        Reviewed by Adrian Perez de Castro.

        Use a GtkPopover for GTK4 instead of a GtkMenu.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDataListSuggestionsDropdown):
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp:
        (WebKit::WebDataListSuggestionsDropdownGtk::WebDataListSuggestionsDropdownGtk):
        (WebKit::WebDataListSuggestionsDropdownGtk::~WebDataListSuggestionsDropdownGtk):
        (WebKit::WebDataListSuggestionsDropdownGtk::show):
        * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.h:

2020-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make popup menus work
        https://bugs.webkit.org/show_bug.cgi?id=211178

        Reviewed by Adrian Perez de Castro.

        Use a GtkPopover for GTK4 instead of a GtkMenu.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        * UIProcess/API/gtk/WebKitPopupMenu.cpp:
        (WebKit::WebKitPopupMenu::WebKitPopupMenu):
        (WebKit::menuCloseCallback):
        (WebKit::WebKitPopupMenu::showPopupMenu):
        (WebKit::WebKitPopupMenu::hidePopupMenu):
        (WebKit::WebKitPopupMenu::cancelTracking):
        (WebKit::WebKitPopupMenu::activateItem):
        * UIProcess/API/gtk/WebKitPopupMenu.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSizeAllocate): Iterate children and call check_resize on every native one.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback):
        (WebKit::WebPopupMenuProxyGtk::createPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::hidePopupMenu):
        (WebKit::WebPopupMenuProxyGtk::treeViewRowActivatedCallback): Deleted.
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:

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

        Fix thread-safety issue in [WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpiration]
        https://bugs.webkit.org/show_bug.cgi?id=212615
        <rdar://problem/63569049>

        Reviewed by Geoffrey Garen.

        [WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpiration] may get called on a background thread
        by RunningBoard. When this happened it would check the _applicationIsBackgrounded flag on a background thread,
        which was not safe, it would also call _releaseBackgroundTask on the background thread which definitely was not
        safe and could lead to crashes such as the one in the radar.

        To address the issue, we now call callOnMainRunLoopAndWait() as soon as _handleBackgroundTaskExpiration gets
        called and run the whole implementation on the main thread. Previously, we were already doing a dispatch_sync()
        to the main thread but only for part of the implementation.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpiration]):
        (-[WKProcessAssertionBackgroundTaskManager _handleBackgroundTaskExpirationOnMainThread]):

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

        Remove unused WebContent process sandbox syscall
        https://bugs.webkit.org/show_bug.cgi?id=212609
        <rdar://problem/63764590>

        Reviewed by Per Arne Vollan.

        After further testing we have determined that the syscall added in
        Bug 206260 is not always enabled. Check if the Sandbox recognizes
        the rule before using it.

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

2020-06-01  David Kilzer  <ddkilzer@apple.com>

        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
        <https://webkit.org/b/212507>

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/_WKDragActionsInternal.h: Add.
        (WebKit::coreDragDestinationActionMask):
        - Add conversion function to avoid casting.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::draggingEntered):
        (WebKit::WebViewImpl::draggingUpdated):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        - Make use of coreDragDestinationActionMask() conversion
          function.
        - Extract `dragOperationMask` varible for future updates.
        * WebKit.xcodeproj/project.pbxproj:
        - Add _WKDragActionsInternal.h to project.

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

        Fix Glib build after r262391
        https://bugs.webkit.org/show_bug.cgi?id=212604

        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextConstructed):

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

        Revert r250312
        https://bugs.webkit.org/show_bug.cgi?id=212604
        <rdar://problem/63779241>

        Reviewed by Tim Horton.

        r250312 was a step towards a network process singleton.
        We aren't there yet, so revert it until we are.  There was something trying to keep HSTS storages separate, so let them keep trying.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setHSTSStorageDirectory:]):
        (-[_WKProcessPoolConfiguration hstsStorageDirectory]):
        * UIProcess/LegacyGlobalSettings.h:
        (WebKit::LegacyGlobalSettings::setHSTSStorageDirectory): Deleted.
        (WebKit::LegacyGlobalSettings::hstsStorageDirectory const): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):

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

        ASSERTION FAILURE (r220931): !m_function in ~CompletionHandler() after switch tabs
        https://bugs.webkit.org/show_bug.cgi?id=212537
        <rdar://problem/63766838>

        Reviewed by Alex Christensen.

        When WebPage::markAllLayersVolatile(), it would destroy m_pageMarkingLayersAsVolatileCounter,
        which may not have called its completion handler yet. As a result, we would hit an assertion
        in the CompletionHandler destructor.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::callVolatilityCompletionHandlers):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::cancelMarkAllLayersVolatile):
        * WebProcess/WebProcess.h:

2020-06-01  Sam Weinig  <weinig@apple.com>

        Extended Color: Replace Color constructors taking numeric values with type specific factory functions
        https://bugs.webkit.org/show_bug.cgi?id=212576

        Reviewed by Tim Horton.

        Replaces all remaining implicit and explicit uses of the Color constructors taking numeric
        values with explicit calls to makeSimpleColor/makeSimpleColorFromFloats/makeExtendedColor,
        giving us a consistent way to create colors. Also addes use constexpr SimpleColors where possible.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkitColorToWebCoreColor):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _tapHighlightColorForFastClick:]):
        * WebProcess/Inspector/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::paintSnapshotAtSize):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        (WebKit::highlightColor): Deleted.

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add printing support
        https://bugs.webkit.org/show_bug.cgi?id=212320

        Reviewed by Adrian Perez de Castro.

        Printing API hasn't changed, the only problem was that we were using gtk_dialog_run() and gdk threads deprecated API.

        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkitPrintOperationRunDialog): Remove GTK4 ifdefs.
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print): Use g_idle_add_full() instead of gdk threads deprecated API.

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Wheel events are always handled by the main frame view
        https://bugs.webkit.org/show_bug.cgi?id=212593

        Reviewed by Adrian Perez de Castro.

        It's not possible scroll other scrollable areas with the mouse wheel. This is because we are using the given x,
        y delta in the scroll signal as the position. In GTK4 the scroll event doesn't include a position, so we have to
        use the last motion event.

        * Shared/NativeWebWheelEvent.h:
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent): Add wheelTicks parameter.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebWheelEvent): New create function that receives the wheelTicks.
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseScroll): Use the x, y parameters as the delta and take the position from the last motion event.

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Monitor root window to update activity state
        https://bugs.webkit.org/show_bug.cgi?id=212581

        Reviewed by Adrian Perez de Castro.

        To update ActivityState::IsInWindow and ActivityState::WindowIsActive.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (toplevelWindowStateEvent):
        (webkitWebViewBaseSetToplevelOnScreenWindow):
        (webkitWebViewBaseDispose):
        (toplevelWindowIsActiveChanged):
        (toplevelWindowStateChanged):
        (toplevelWindowRealized):
        (toplevelWindowUnrealized):
        (webkitWebViewBaseRoot):
        (webkitWebViewBaseUnroot):
        (webkit_web_view_base_class_init):

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Fix pointer lock in X11
        https://bugs.webkit.org/show_bug.cgi?id=212592

        Reviewed by Adrian Perez de Castro.

        I forgot to forward the motion events for X11 in GTK4.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (MotionEvent::MotionEvent): Add a constructor that receives the positions and state.
        (webkitWebViewBaseMotion): Notify the pointer lock manager about the event. Also save the last motion event and
        compute the movement delta.

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make inspector work
        https://bugs.webkit.org/show_bug.cgi?id=212321

        Reviewed by Adrian Perez de Castro.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRemoveDialog): Added instead of the generic webkitWebViewBaseRemoveChild that has been removed.
        (webkitWebViewBaseRemoveWebInspector): Just unparent the inspector view instead of caling webkitWebViewBaseRemoveChild.
        (webkitWebViewBaseDispose): Use specific functions to remove the children.
        (webkitWebViewBaseSnapshot): Call gtk_widget_snapshot_child() on inspector view if present.
        (webkitWebViewBaseRemoveChild): Deleted.
        * UIProcess/Inspector/gtk/RemoteWebInspectorProxyGtk.cpp:
        (WebKit::RemoteWebInspectorProxy::platformSave): Remove GTK4 ifdefs.
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave): Ditto.
        * UIProcess/Inspector/gtk/WebKitInspectorWindow.cpp:
        (webkit_inspector_window_init): Show title buttons in inspector window.
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::snapshot): Use the texture size instead of the view size, since it's
        different when the inspector is attached.

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r262184): fast/forms/implicit-submission.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=212520

        Reviewed by Adrian Perez de Castro.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::activateSelectedItem): Return early if the popup has already been closed.

2020-06-01  Rob Buis  <rbuis@igalia.com>

        Rename ResourceResponseBase::isHTTP to isInHTTPFamily
        https://bugs.webkit.org/show_bug.cgi?id=208782

        Reviewed by Sam Weinig.

        Adapt to API change.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):

2020-06-01  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] pthread_create() fails with EPERM in the second WebKitWebProcess with sandbox on
        https://bugs.webkit.org/show_bug.cgi?id=212380

        Reviewed by Adrian Perez de Castro.

        Dereference scmp_arg_cmp before use.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::setupSeccomp):

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

        Deprecate WKBundlePostSynchronousMessage
        https://bugs.webkit.org/show_bug.cgi?id=212536

        Reviewed by Anders Carlsson.

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

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

        [GTK] WebDriver: stop using GdkEvent API in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212465

        Reviewed by Adrian Perez de Castro.

        Use the new internal API to synthesize events.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSynthesizeKeyEvent): Add type parameter, since WebDriver can send press and release events
        separately. Also add a parameter to indicate that keyval should be translated according to current state that is
        required by WebDriver.
        * UIProcess/API/gtk/WebKitWebViewBaseInternal.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::documentLoadedForFrame): Call resetClickCount().
        (WebKit::WebAutomationSession::updateClickCount): Update the click count for the given button position and
        maximum time and distance.
        (WebKit::WebAutomationSession::resetClickCount): Reset the click count.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction): Use webkitWebViewBaseSynthesizeMouseEvent().
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction): Use webkitWebViewBaseSynthesizeKeyEvent().
        (WebKit::WebAutomationSession::platformSimulateKeySequence): Ditto.
        (WebKit::doMouseEvent): Deleted.
        (WebKit::doMotionEvent): Deleted.
        (WebKit::doKeyStrokeEvent): Deleted.
        * UIProcess/gtk/KeyBindingTranslator.cpp: Add missing key shortcuts to predefined list.

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

        Use correct encoding when converting a WTF::URL to CFURLRef
        https://bugs.webkit.org/show_bug.cgi?id=212486

        Reviewed by Darin Adler.

        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCopyCFURL):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::decode):

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

        Replace callOnMainThread() with callOnMainRunLoop() in AudioSessionRoutingArbitratorProxyCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=212553

        Reviewed by Chris Dumez.

        Use callOnMainRunLoop() instead of callOnMainThread() in the UIProcess. Also move
        m_setupArbitrationOngoing flag to the end of the completion handler.

        No new tests, no functional change.

        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::SharedArbitrator::beginRoutingArbitrationForArbitrator):

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

        [Cocoa] Improve logging quality for non-ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=212551
        <rdar://problem/62461099>

        Reviewed by David Kilzer.

        In Bug 209522 I switched normal mode logging to use the same privacy-protecting mode we use for ephemeral sessions.
        This had the unintended consequence of removing network load data used to investigate networking issues.

        This patch adopts the more fine-grained logging provided by the low-level 'nw_context_privacy_level' setting.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForSessionID): Adopt 'nw_context_privacy_level' setting.

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

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:

2020-05-29  Dean Jackson  <dino@apple.com>

        iOS build fix.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForSessionID):

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

        [Mac,WK2] Fullscreen animation missing a few frames at beginning
        https://bugs.webkit.org/show_bug.cgi?id=212156
        <rdar://problem/54799415>

        Reviewed by Eric Carlson.

        When starting the enter fullscreen animation, ensure that the fullscreen window is ordered front, and on top
        of the content, as well as having all the animations configured so that their starting state is in place before
        calling -[NSWindow enterFullscreenMode:]. Move all the window creation code into
        -beganEnterFullScreenWithInitialFrame:finalFrame: from _startEnterFullScreenAnimationWithDuration:. Re-use the
        existing zoomAnimation() and maskAnimation() utility methods, but give the animations a very long duration
        (since there is no explicit way to start and stop a CAAnimation). This initial animation will be replaced with
        the final one inside -_startEnterFullScreenAnimationWithDuration:. Separately, explictly disable implicit
        animations of the fullscreen window during -orderIn: and -orderOut:.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:impl:]):
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):

2020-05-29  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK][WPE] API for WebView audio mute support
        https://bugs.webkit.org/show_bug.cgi?id=176119

        Reviewed by Michael Catanzaro.

        Test implemented in TestWebKitWebView.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkit_web_view_set_is_muted):
        (webkit_web_view_is_muted):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isAudioMuted const):

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

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Rubber-stamped by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add back ENABLE_CSS_CONIC_GRADIENTS, removed
        by accident.

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

        ASSERT NOT REACHED in IPC::takeAsyncReplyHandler under WebKit::AudioSessionRoutingArbitrator::beginRoutingArbitrationWithCategory
        https://bugs.webkit.org/show_bug.cgi?id=212533

        Reviewed by Chris Dumez.

        When the m_inDispatchMessageMarkedToUseFullySynchronousModeForTesting flag is set,
        sendWithAsyncReply() may actually send the message synchronously. Therefore, we have
        to set the async reply handler before actually sending the message.

        No new tests, fixing test crashes due to assertion failures.

        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):

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

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Andy Estes.

        * Configurations/FeatureDefines.xcconfig: Removed 83 of the 119 things defined in
        this file. There are 36 more that are slightly more complex that we can remove
        carefully later.

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

        [Cocoa] Pass all defines from Platform.h to various scripts, not just the ones from .xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=212451

        Reviewed by Sam Weinig.

        * DerivedSources.make: Use ":=" when calling $(shell) to make sure the same shell
        command is not invoked over and over again.

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

        Revert switch to XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=212530
        <rdar://problem/63764632>

        Unreviewed build fix.

        Bug 209890 enabled the use of XCBuild by default. Since then, some
        build issues have shown up. While addressing them, temporarily turn
        off the use of XCBuild by default.

        * Configurations/WebKit.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

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

        Web Inspector: add ITML debuggable/target type
        https://bugs.webkit.org/show_bug.cgi?id=203300
        <rdar://problem/56545896>

        Reviewed by Joseph Pecoraro and Brian Burg.

        * UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.h:
        * UIProcess/API/Cocoa/_WKInspectorDebuggableInfoInternal.h:
        (fromWKInspectorDebuggableType):
        (toWKInspectorDebuggableType):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (legacyDebuggableTypeToModernDebuggableType):

        * UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
        (WebKit::parseDebuggableTypeFromString):

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

        Prepare for async scrolling in passive wheel event handler regions
        https://bugs.webkit.org/show_bug.cgi?id=212455

        Reviewed by Tim Horton.

        Clarify the processing for wheel events by adding OptionSet<WheelEventProcessingSteps>,
        which will, in future, allow us to describe the processing for an event in the passive
        event handler region which does scrolling on the scrolling thread, and is then sent
        to the main thread for DOM event dispatch.
        
        Removed ScrollingEventResult, which conflated "handled" with "send to another thread".
        The thread sending behavior is now encoded in the WheelEventProcessingSteps, and we can just
        use a bool for handled.
        
        Scrolling tree and node handleWheelEvent() functions return a WheelEventHandlingResult, which
        is a tuple of OptionSet<WheelEventProcessingSteps> and 'handled', allowing for a node with
        background-attachment:fixed to add the "send to main thread" processing step.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::handleWheelEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleWheelEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h:
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp:
        (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::handleWheelEvent):
        * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

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

        [GTK4] Implement HTTP auth dialog
        https://bugs.webkit.org/show_bug.cgi?id=212319

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogDestroy):
        (okButtonClicked):
        (cancelButtonClicked):
        (authenticationCancelled):
        (webkitAuthenticationDialogInitialize):
        (webkitAuthenticationDialogMap):
        (webkitAuthenticationDialogDispose):
        (webkitAuthenticationDialogNew):
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewAuthenticate):

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

        [GTK4] Implement script dialogs
        https://bugs.webkit.org/show_bug.cgi?id=212318

        Reviewed by Adrian Perez de Castro.

        Adapt to the GTK4 API and theme changes.

        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        (webkitScriptDialogImplClose):
        (webkitScriptDialogImplKeyPressed):
        (webkitScriptDialogImplMap):
        (webkitScriptDialogImplConstructed):
        (webkitScriptDialogImplDispose):
        (webkit_script_dialog_impl_class_init):
        (webkitScriptDialogImplAddButton):
        (webkitScriptDialogImplNew):
        (webkitScriptDialogImplSetEntryText):
        * UIProcess/API/gtk/WebKitScriptDialogImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseAddDialog):
        (webkitWebViewBaseRemoveChild):
        (webkitWebViewBaseSnapshot):
        * UIProcess/API/gtk/WebKitWebViewDialog.cpp:
        (webkitWebViewDialogSnapshot):
        (webkitWebViewDialogSizeAllocate):
        (webkitWebViewDialogConstructed):
        (webkit_web_view_dialog_class_init):
        (webkitWebViewDialogSetChild):
        (webkitWebViewDialogGetChild):
        * UIProcess/API/gtk/WebKitWebViewDialog.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewScriptDialog):

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

        REGRESSION (r261812): editing/async-clipboard/clipboard-item-get-type-basic.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=212281
        <rdar://problem/63554912>

        Reviewed by Tim Horton.

        Declare `-delegateSupportsImagePaste` on UIKeyboardImpl.

        * Platform/spi/ios/UIKitSPI.h:

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

        Clean up WebKit.xcodeproj/project.pbxproj
        https://bugs.webkit.org/show_bug.cgi?id=212491

        Reviewed by Tim Horton.

        A follow-up patch to add AudioSessionRoutingArbitratorProxyCocoa.mm to the unified build.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        Add AudioSessionRoutingArbitratorProxyCocoa.mm to the unified build.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.h:
        Fix a unified build failure.

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

        Avoid unnecessary sync IPC messages when togging the callout bar for selections.
        https://bugs.webkit.org/show_bug.cgi?id=212508

        The loupe gesture only needs to be activated and evaluated if the tap is inside
        an existing selectionView. We can do that test in the UIProcess without resorting to a sync IPC message.
        Doing that evaluation locally will eliminate unnecessary hangs in the UIProcess.

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _pointIsInsideSelectionRect:outBoundingRect:]):
        (-[WKContentView _shouldToggleSelectionCommandsAfterTapAt:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

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

        Fix the macOS build

        * WebKit.xcodeproj/project.pbxproj:
        Can't have this file in both the Xcode target and SourcesCocoa.txt...

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

        [GTK][WPE] Buildfix after r262242

        Unreviewed build fix.

        * Shared/glib/ArgumentCodersGLib.cpp:
        (IPC::decode):

2020-05-28  Jonathan Bedard  <jbedard@apple.com>

        watchOS: Upstream WKNumberPadView
        https://bugs.webkit.org/show_bug.cgi?id=212499
        <rdar://problem/63736073>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKNumberPadView.h: Moved from WebKitAdditions.
        * UIProcess/ios/forms/WKNumberPadView.mm: Ditto.

2020-05-28  Jonathan Bedard  <jbedard@apple.com>

        watchOS: Upstream WKTextInputListViewController
        https://bugs.webkit.org/show_bug.cgi?id=212495
        <rdar://problem/63733949>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKTextInputListViewController.h: Moved from WebKitAdditions.
        * UIProcess/ios/forms/WKTextInputListViewController.mm: Ditto.

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

        Simplify EventDispatcher wheel event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=212490

        Reviewed by Tim Horton.

        The various cross-thread bounces and completion lambdas in EventDispatcher::wheelEvent()
        and ScrollingTree code made the logic very hard to follow.

        Moving the ScrollingThread::dispatch() into EventHandler code simplifies things a little,
        and allows for removal of the hokey "try to handle" ScrollingTree function, as well
        as the clunky completion function.

        Now, EventHandler call shouldHandleWheelEventSynchronously(), then does the
        ScrollingThread::dispatch() which allows the lambda to easily call back into
        EventHandler for the main thread dispatch.

        RemoteScrollingCoordinatorProxy/RemoteLayerTree code is unused at present, and
        will need work.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::handleWheelEvent):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::tryToHandleWheelEvent): Deleted.
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::dispatchWheelEventViaMainThread):
        * WebProcess/WebPage/EventDispatcher.h:

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

        Clean up WebKit.xcodeproj/project.pbxproj
        https://bugs.webkit.org/show_bug.cgi?id=212491

        Reviewed by Simon Fraser.

        Remove the references to deleted files and merge duplicated folders.

        * WebKit.xcodeproj/project.pbxproj:

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

        Minimum user interaction time in ResourceLoadStatistics should handle the case of -1
        https://bugs.webkit.org/show_bug.cgi?id=212445
        <rdar://problem/63696470>

        Reviewed by John Wilander.

        Tests: http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed-statistics-with-no-user-interaction-database.html
               http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed-statistics-with-no-user-interaction.html

        Adds a getter for mostRecentUserInteractionTime which returns WTF::nullopt if the 
        timestamp is -1. Then does not consider this case in calculating the
        minimum timestamp.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::getMostRecentUserInteractionTime):
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        Flip sign to be less than, so we hold off on deleting data if the
        oldest interaction was less than the minimum time between removal. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::getMostRecentUserInteractionTime):
        (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        Flip sign to be less than, so we hold off on deleting data if the
        oldest interaction was less than the minimum time between removal. 

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:

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

        Do not send a second sync request for positition information to the web process if we have not recieved information since the previous sync request.
        https://bugs.webkit.org/show_bug.cgi?id=212289
        <rdar://problem/58494578>

        Reviewed by Tim Horton.

        If we have sent a sync requests to the web process for position information, and timed out, and have not
        received a message with position information in the interim, do not send another sync request. The web
        process is likely still hung, and there is no reason to hang the UIProcess again if we suspect that it
        is unlikely that we will receive a reply.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView _positionInformationDidChange:]):

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

        ReadableByteStream should be enabled/disabled in service workers as done in pages
        https://bugs.webkit.org/show_bug.cgi?id=212466

        Reviewed by Alex Christensen.

        Introduce a WebPreference for readable byte stream.
        Use it for enabling it in web processes running service workers as per the given store.

        * Shared/WebPreferences.yaml:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):

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

        [WPE][GTK] GVariant decoding must copy the serialized data
        https://bugs.webkit.org/show_bug.cgi?id=212441

        Reviewed by Carlos Garcia Campos.

        I tracked this down to ArgumentCodersGLib.cpp. The problem is that we construct a GVariant
        using g_variant_new_from_data(), which does not copy or take ownership of the data, so here
        we accidentally create the GVariant using data we don't own. (Here, the data is owned by the
        Decoder itself in its internal m_buffer.) Anyway, this is fixable by manually copying and
        freeing it with the GDestroyNotify parameter, but it's easier to switch to
        g_variant_new_from_bytes() because GBytes takes ownership when constructed.

        * Shared/glib/ArgumentCodersGLib.cpp:
        (IPC::decode):

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

        RemoteAudio::audioSamplesAvailable should check for m_buffer to be null
        https://bugs.webkit.org/show_bug.cgi?id=212462
        <rdar://problem/63627642>

        Reviewed by Eric Carlson.

        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::audioSamplesAvailable):
        m_buffer is initialized by a StorageChanged IPC message which might not always be successful, for instance if the shared memory mapping fails.
        Return early if m_buffer is not yet initialized properly.

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

        RealtimeIncomingVideoSourceCocoa::OnFrame should use video frame timestamp
        https://bugs.webkit.org/show_bug.cgi?id=212402

        Reviewed by Eric Carlson.

        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
        (WebKit::RemoteSampleBufferDisplayLayer::enqueueSample):
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.h:

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

        Add output file specifications to "Copy Custom WebContent Resources to Framework Private Headers" build phase in WebKit/WebContent
        https://bugs.webkit.org/show_bug.cgi?id=212452
        <rdar://problem/63700546>

        Reviewed by Timothy Hatcher.

        The "Copy Custom WebContent Resources to Framework Private Headers"
        build phase in the WebContent target of the WebKit project doesn't
        advertise the files that it produces. This has consequences on later
        build phases that consume those files. In particular, XCBuild is left
        not knowing where those files are coming from, and it fails saying
        that those files don't exist. Fix this by adding the output files to
        the "output files" section of the custom build phase.

        No new tests -- this is just a build fix.

        * WebKit.xcodeproj/project.pbxproj:

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

        REGRESSION (PSON): Resizing WKWebView during cross-site navigation results in the page laying out at the wrong size
        https://bugs.webkit.org/show_bug.cgi?id=212434
        <rdar://problem/51621621>

        Reviewed by Chris Dumez.

        New API test: ProcessSwap.ResizeWebViewDuringCrossSiteProvisionalNavigation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage):
        Set m_hasRunningProcess before calling setDrawingArea, instead of immediately after,
        so that setDrawingArea can call methods that check m_hasRunningProcess.

        (WebKit::WebPageProxy::setDrawingArea):
        When swapping DrawingAreas, push the current view size down. DrawingArea
        is initially created with a size, but the size can change while the DrawingArea
        is still provisional.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::viewSize):
        Simplify this implementation now that we don't ever need to support WKContentView
        outside of WKWebView (since 2014 or so).

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

        REGRESSION(r260318): [WPE][GTK] Uninitialized memory read in MemoryPressureMonitor
        https://bugs.webkit.org/show_bug.cgi?id=212412

        Reviewed by Adrian Perez de Castro.

        I think this is a false-positive, but let's suppress the warning by zero-initializing this
        buffer.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::systemMemoryUsedAsPercentage):

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

        App-bound sessions should be for iOS only
        https://bugs.webkit.org/show_bug.cgi?id=212426
        <rdar://problem/63678147>

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::SessionWrapper::initialize):
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):

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

        [WPE] Avoid possible WTR event timing going back in time and fix conversion from s to ms
        https://bugs.webkit.org/show_bug.cgi?id=212338

        Reviewed by Michael Catanzaro.

        When converting the input timestamps to WallTime, we must somehow
        adjust them to give meaningful timestamps (due to Dom::Event
        conversion from timestamp wall time to the time origin from document
        loading).

        As WPE timestamps are just intended to be compared among themselves,
        we use the first processed event as the origin, comparing the
        following events to it to get an actual time.

        Test: fast/events/monotonic-event-time.html

        * Shared/libwpe/WebEventFactory.cpp:
        (WebKit::wallTimeForEventTime):

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

        Make sure bundle identifier testing override is set in the network process
        https://bugs.webkit.org/show_bug.cgi?id=212288
        <rdar://problem/63539061>

        Reviewed by Chris Dumez.

        Set the bundle identifier in the network process if a layout test
        updates it. This value usually only gets updated when a new network
        process is initialized, which does not happen for every test. So it
        should be set/cleared as needed.

        No new tests, will fix http/tests/in-app-browser-privacy/ tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updateBundleIdentifierInNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreUpdateBundleIdentifierInNetworkProcess):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updateBundleIdentifierInNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

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

        Unreviewed, reverting r260840.

        This patch is no longer needed after preferences root cause
        has been fixed.

        Reverted changeset:

        "[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
        https://trac.webkit.org/changeset/260840

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

        Unreviewed, fix -Wcomment build warning after r261986
        https://bugs.webkit.org/show_bug.cgi?id=211950
        <rdar://problem/63482718>

        If we replace the /* with /&ast; then GCC won't complain that it looks like a comment.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):

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

        Adjust HTTP3 label to the more correct HTTP/3
        https://bugs.webkit.org/show_bug.cgi?id=212416
        <rdar://problem/63514072>

        Reviewed by Darin Adler.

        No new tests. No change in behavior.

        * Shared/WebPreferences.yaml: Correct label.

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

        Web Inspector: replace `featureGuard` and `availability` with a combined `condition` that accepts any macro
        https://bugs.webkit.org/show_bug.cgi?id=210014

        Reviewed by Brian Burg.

        Previously, the generated InspectorBackendCommands.js would include code for things that the
        backend doesn't actually support. By using actual macros and preprocessing that file, we can
        ensure that the frontend doesn't incorrectly think that something is supported by the page
        being inspected:
         - the `Canvas` commands and events related to shader programs/pipelines should only exist
           when the corresponding context type exists, namely `ENABLE(WEBGL)` and `ENABLE(WEBGPU)`.
         - iOS doesn't support showing rulers, so create a variant of `DOM.setInspectModeEnabled`
           that only exists for `PLATFORM(IOS_FAMILY)` that doesn't have the `showRulers` optional
           parameter, as well as removing `Page.setShowRulers` entirely.
         - setting the forced appearance should only be possible if dark mode is supported.
         - web archives only exist if CF is used.

        * Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_WEB_ARCHIVE` since it's always enabled in wtf/PlatformEnableCocoa.h.

        * DerivedSources.make:
        * PlatformMac.cmake:
        Remove `platform` as it is handled by `condition`.

        * UIProcess/Automation/Automation.json:

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

        [Quirk] Remove stackoverflow.com desktop content quirk.
        https://bugs.webkit.org/show_bug.cgi?id=212414

        Reviewed by Antti Koivisto.

        Mobile content is fixed now.

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

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

        Crash under WebNotificationManager::removeNotificationFromContextMap()
        https://bugs.webkit.org/show_bug.cgi?id=212410
        <rdar://63496726>

        Reviewed by Alex Christensen.

        Protect the notification object in WebNotificationManager::didDestroyNotification() since
        removing it from m_notificationIDMap will deref it and may end up destroying the notification
        object otherwise.

        Test: http/tests/notifications/crash-on-navigation.html

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didDestroyNotification):

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

        Unreviewed. [GTK] Make webkitWebViewBaseSnapshot static

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSnapshot):

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

        Use OptionSet<DragDestinationAction> for mask values
        <https://webkit.org/b/212115>
        <rdar://problem/63423380>

        Reviewed by Alex Christensen.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        - Switch from decodeEnum() and encodeEnum() to modern
          equivalents that check for valid enum values.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::draggingEntered):
        (WebKit::WebViewImpl::draggingUpdated):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):

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

        [GTK4] Make PointerLock work
        https://bugs.webkit.org/show_bug.cgi?id=212314

        Reviewed by Adrian Perez de Castro.

        Use XLib API for warp and grab, since they are no longer available in GTK4. The grab was not actuially needed
        under Wayland. Also stop using GdkEvent to keep track of motion events and create the PointerLockManager to be
        able to test pointer lock and movement delta.

        * Shared/NativeWebMouseEvent.h:
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Use FloatSize instead of FloatPoint for movement delta.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent): Ditto.
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (MotionEvent::MotionEvent): Helper struct to keep track of motion events without using GdkEvent.
        (MotionEvent::delta): Return the movement delta for the given current event.
        (webkitWebViewBaseHandleMouseEvent): Use MotionEvent instead of GdkEvent.
        (webkitWebViewBaseMotionNotifyEvent): Pass the event coordinates to the pointer lock manager since that's the
        only thing needed.
        (webkitWebViewBaseRequestPointerLock): Use MotionEvent instead of GdkEvent.
        (webkitWebViewBaseDidLosePointerLock): Remove GTK4 ifdefs.
        (webkitWebViewBaseSynthesizeMouseEvent): Forward the event to the pointer lock manager if present. Also keep
        track of the motion event and set the movement delta.
        * UIProcess/gtk/PointerLockManager.cpp:
        (WebKit::PointerLockManager::create): Receive event information as parameters instead of using GdkEvent.
        (WebKit::PointerLockManager::PointerLockManager): Ditto.
        (WebKit::PointerLockManager::~PointerLockManager):
        (WebKit::PointerLockManager::lock): Remove the grab.
        (WebKit::PointerLockManager::unlock): Remove the ungrab.
        (WebKit::PointerLockManager::handleMotion): Use NativeWebMouseEvent constructor taking all information as parameters.
        * UIProcess/gtk/PointerLockManager.h:
        * UIProcess/gtk/PointerLockManagerWayland.cpp:
        (WebKit::PointerLockManagerWayland::PointerLockManagerWayland): Receive event information as parameters instead of using GdkEvent.
        (WebKit::PointerLockManagerWayland::lock): Hide the cursor.
        (WebKit::PointerLockManagerWayland::unlock): Unhide the cursor.
        * UIProcess/gtk/PointerLockManagerWayland.h:
        * UIProcess/gtk/PointerLockManagerX11.cpp:
        (WebKit::PointerLockManagerX11::PointerLockManagerX11): Receive event information as parameters instead of using GdkEvent.
        (WebKit::PointerLockManagerX11::lock): Use XGrabPointer.
        (WebKit::PointerLockManagerX11::unlock): Use XUngrabPointer.
        (WebKit::PointerLockManagerX11::didReceiveMotionEvent): Use XWarpPointer.
        * UIProcess/gtk/PointerLockManagerX11.h:

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

        Unreviewed, build warning fix after r261986

        * UIProcess/API/glib/WebKitSettings.cpp: A colon is needed after the transfer annotation.

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

        VideoFullscreenInterfaceAVKit is leaking when a video element enters and exits fullscreen/picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=212293

        VideoFullscreenManagerProxy::ensureInterface() makes sure a fullscreen interface object exists (an object
        will be created if it does not exit). That means an extra object will be created by an IPC message from
        the Web process after the original video fullscreen interface object has been destroyed (thats happens
        when a video element is returning to inline from fullscreen or picture-in-picture).

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::setHasVideo):
        Don't call VideoFullscreenInterface[AVKit|Mac]::hasVideoChanged() before the instance of
        VideoFullscreenInterface[AVKit|Mac] is ready.
        (WebKit::VideoFullscreenManagerProxy::setVideoDimensions):
        Don't call VideoFullscreenInterface[AVKit|Mac]::videoDimensionsChanged() after the instance of
        VideoFullscreenInterface[AVKit|Mac] is destroyed.

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

        [GTK][WTR] EventSender: stop using GdkEvent API in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212298

        Reviewed by Adrian Perez de Castro.

        Add internal API to WebKitWebViewBase to synthesize events, because with GTK4 it's not possible to
        create events. In the case of layout tests, the web view is always the target of the events, so we don't really
        need to send the events to GTK to process them.

        * Shared/NativeWebKeyboardEvent.h: Add new constructor that doesn't receive a GdkEvent.
        * Shared/NativeWebMouseEvent.h: Ditto.
        * Shared/NativeWebWheelEvent.h: Ditto.
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Create without a GdkEvent.
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Ditto.
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent): Ditto.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent): Return early if event doesn't have a GdkEvent.
        (WebKit::PageClientImpl::doneWithTouchEvent): Ditto.
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (toWebKitModifiers):
        (webkitWebViewBaseSynthesizeMouseEvent):
        (webkitWebViewBaseSynthesizeKeyEvent):
        (toWebKitWheelEventPhase):
        (webkitWebViewBaseSynthesizeWheelEvent):
        * UIProcess/API/gtk/WebKitWebViewBaseInternal.h: Added.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::activePopupMenu const): Return the active popup menu proxy.
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::handleKeyBindingsForMap): Make it generic by receiving the map as parameter.
        (WebKit::handleCustomKeyBindings): Call handleKeyBindingsForMap() passing the custom key bindings map.
        (WebKit::KeyBindingTranslator::commandsForKeyval): Get commands for the predefined key bindings. This is used
        only when synthesizing key events since we don't have a GdkEVent to forward to the GtkTextView.
        * UIProcess/gtk/KeyBindingTranslator.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::popupMenuWidget): Take a ref of the GdkWindow when creating the GdkEvent, since the event will unref it
        on destroy.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::handleKeyPress): Handle a key press event from its keyval and timestamp.
        (WebKit::WebPopupMenuProxyGtk::activateSelectedItem): Activate the currently selected item.
        (WebKit::WebPopupMenuProxyGtk::keyPressEventCallback): Call handleKeyPress().
        (WebKit::WebPopupMenuProxyGtk::typeAheadFindIndex): Receive a keyval and timestamp instead of a GdkEvent.
        (WebKit::WebPopupMenuProxyGtk::typeAheadFind): Ditto.
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:

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

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Unreviewed build fix. Check the value of XCODE_VERSION_ACTUAL rather
        than XCODE_VERSION_MAJOR when determining whether to use the XCBuild
        or non-XCBuild method of running header post-processing scripts.

        No new tests -- this is a build fix.

        * WebKit.xcodeproj/project.pbxproj:

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

        Unreviewed WPE build fix after r262155.

        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkit_color_parse): Use CSSParser::parseColor() to do the color parsing.

2020-05-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Unreviewed clang-cl build fix after r262158
        https://bugs.webkit.org/show_bug.cgi?id=211883

        std::unique_ptr<WebCore::TextureMapper> can't delete an incomplete type TextureMapper.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.h:

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

        Fix the engineering build on internal SDKs

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Silenced a deprecation warning.

2020-05-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][WK2] Use GraphicsLayerTextureMapper for Accelerated Compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=211883

        Reviewed by Don Olmstead.

        GraphicsLayerTextureMapper is a simple GraphicsLayer
        implementation using TextureMapper which is used for WinCairo WebKit1.

        Add a new LayerTreeHost implementation for
        GraphicsLayerTextureMapper by copying WinCairo WebKit1's
        AcceleratedCompositingContext.

        Windows WebKitTestRunner can't capture the window content for
        pixel dump tests yet.

        * PlatformWin.cmake:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::setNeedsDisplayInRect):
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: Added.
        (WebKit::LayerTreeHost::prepareForRendering):
        (WebKit::LayerTreeHost::compositeLayersToContext):
        (WebKit::LayerTreeHost::flushPendingLayerChanges):
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        (WebKit::LayerTreeHost::LayerTreeHost):
        (WebKit::LayerTreeHost::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHost::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHost::scheduleLayerFlush):
        (WebKit::LayerTreeHost::cancelPendingLayerFlush):
        (WebKit::LayerTreeHost::setRootCompositingLayer):
        (WebKit::LayerTreeHost::setViewOverlayRootLayer):
        (WebKit::LayerTreeHost::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHost::scrollNonCompositedContents):
        (WebKit::LayerTreeHost::flushAndRenderLayers):
        (WebKit::LayerTreeHost::forceRepaint):
        (WebKit::LayerTreeHost::forceRepaintAsync):
        (WebKit::LayerTreeHost::sizeDidChange):
        (WebKit::LayerTreeHost::pauseRendering):
        (WebKit::LayerTreeHost::resumeRendering):
        (WebKit::LayerTreeHost::graphicsLayerFactory):
        (WebKit::LayerTreeHost::contentsSizeChanged):
        (WebKit::LayerTreeHost::didChangeViewportAttributes):
        (WebKit::LayerTreeHost::setIsDiscardable):
        (WebKit::LayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::LayerTreeHost::createDisplayRefreshMonitor):
        (WebKit::LayerTreeHost::window):
        (WebKit::LayerTreeHost::enabled):
        (WebKit::LayerTreeHost::paintContents):
        (WebKit::LayerTreeHost::deviceScaleFactor const):
        (WebKit::LayerTreeHost::applyDeviceScaleFactor):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.h: Added.
        (WebKit::LayerTreeHost::layerTreeContext const):
        (WebKit::LayerTreeHost::displayID const):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::nativeWindowHandle):
        * WebProcess/win/WebProcessMainWin.cpp:

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

        Eliminate Color constructors that take strings, moving color parsing entirely into the CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=212296

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetComposition): Use WebCore::CSSParser::parseColor.

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

        ASSERTION FAILED: m_clientCounts.contains(contextId) - WebKit::VideoFullscreenManagerProxy::removeClientForContext()
        https://bugs.webkit.org/show_bug.cgi?id=212308

        Refactor the implementation of the callback hasVideoInPictureInPictureDidChange().

        Reviewed by Jer Noble.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenModelContext::didEnterPictureInPicture):
        (WebKit::VideoFullscreenModelContext::didExitPictureInPicture):

        (WebKit::VideoFullscreenManagerProxy::hasVideoInPictureInPictureDidChange):
        Add this function to wrap m_page->uiClient().hasVideoInPictureInPictureDidChange().

        (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
        Remove the call to hasVideoInPictureInPictureDidChange() because it is too early to do so.

        (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        Add a call to hasVideoInPictureInPictureDidChange() on Mac as well. This fixes the timeout of
        TestWebKitAPI.PictureInPicture.ExitPiPOnSuspendVideoElement on Mac.

        (WebKit::VideoFullscreenManagerProxy::fullscreenModeChanged):
        Remove the call to hasVideoInPictureInPictureDidChange() because it is not necessary.

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

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        * Configurations/WebKit.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

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

        [GTK4] Fix context menu
        https://bugs.webkit.org/show_bug.cgi?id=212344

        Reviewed by Adrian Perez de Castro.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSizeAllocate): Call gtk_native_check_resize() on the popover to make it appear.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::destroyMenuWidget): There's no gtk_widget_destroy() in GTK4 so we can just unparent it.
        (WebKit::bindModelToMenuWidget): Do not set the action namespace because that's not possible in GTK4.
        (WebKit::WebContextMenuProxyGtk::append): Use group.name again for the action name passed to
        g_menu_item_set_action_and_target_value().
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Use destroyMenuWidget().

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

        Expose more network metrics to WebCoreNSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=212359
        <rdar://problem/62909440>

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

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

        Extended Color Cleanup: Use the name SimpleColor consistently
        https://bugs.webkit.org/show_bug.cgi?id=212337

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (compositionHighlights):
        Update for new name of CompositionHighlight::defaultCompositionFillColor.

2020-05-24  Rob Buis  <rbuis@igalia.com>

        Remove NetworkProcess/FileAPI
        https://bugs.webkit.org/show_bug.cgi?id=212335

        Reviewed by Sam Weinig.

        Remove NetworkProcess/FileAPI, the only file it contains is unused.
        It seems this could have been removed in r248593.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp: Removed.

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

        Extended Color Cleanup: Stop allowing direct access to the underlying SimpleColor (it is almost always incorrect with respect to extended colors)
        https://bugs.webkit.org/show_bug.cgi?id=212184

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::animationValueFromKeyframeValue):
        Use toSRGBASimpleColorLossy() to get access to color components.

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

        Unreviewed. Remove unused file since r261570

        I forgot to remove DragAndDropHandler.h.

        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/DragAndDropHandler.h: Removed.

2020-05-23  Charlie Turner  <cturner@igalia.com>

        Error sending IPC message: Broken pipe
        https://bugs.webkit.org/show_bug.cgi?id=206052

        Reviewed by Adrian Perez de Castro.

        The Connection implementation on *nix was not handling socket
        shutdowns gracefully, this was leading to many IPC error messages
        being printed. It looks like the "errors" were actually
        application issues, trying to send messages during socket shutdown
        sequences, rather than more serious message drop problems.

        Unclear how to autotest this, but manual testing opening lots of tabs
        definitely hits these codepaths.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler): Handle ECONNRESET by cleanly
        closing the connection.
        (IPC::Connection::sendOutputMessage): Ditto, also handle the
        wrinkle that for "reasons", Linux can return EPIPE when it means
        ECONNRESET.

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 ==
