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

        Swipe snapshot is removed too early when swiping away from a page that is still loading
        https://bugs.webkit.org/show_bug.cgi?id=213763
        <rdar://problem/64576811>

        Reviewed by Darin Adler.

        Test: http/tests/swipe/swipe-back-with-outstanding-load-cancellation.html

        When swiping back from a page that is still loading, when the swipe commits,
        and we start navigating back to the previous page, the unfinished forward navigation
        is cancelled.

        This cancellation resulted in a "didFailLoadForMainFrame" making it to ViewGestureController,
        which took it as an indication that the navigation *it* was interested in (the back navigation)
        had failed, and immediately removed the snapshot.

        Instead of listening to any random navigation's load notifications, keep track of the navigation
        started by goToBackForwardItem, and only listen to notifications from it, ignoring the others.

        This requires a bunch of plumbing to get the navigation from WebPageProxy to ViewGestureController,
        but is otherwise fairly trivial.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFailNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        (WebKit::PageClientImpl::didFailLoadForMainFrame): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDidFinishLoadForMainFrame):
        (webkitWebViewBaseDidFailLoadForMainFrame):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _didFinishNavigation:]):
        (-[WKWebView _didFailNavigation:]):
        (-[WKWebView _didFinishLoadForMainFrame]): Deleted.
        (-[WKWebView _didFailLoadForMainFrame]): Deleted.
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFailNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        (WebKit::PageClientImpl::didFailLoadForMainFrame): Deleted.
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didReachNavigationTerminalState):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState): Deleted.
        * UIProcess/ViewGestureController.h:
        (WebKit::ViewGestureController::didFinishNavigation):
        (WebKit::ViewGestureController::didFailNavigation):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame): Deleted.
        (WebKit::ViewGestureController::didFailLoadForMainFrame): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFailNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        (WebKit::PageClientImpl::didFailLoadForMainFrame): Deleted.
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::willEndSwipeGesture):
        (WebKit::ViewGestureController::resetState):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFailNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        (WebKit::PageClientImpl::didFailLoadForMainFrame): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::resetState):
        * UIProcess/playstation/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFailNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        (WebKit::PageClientImpl::didFailLoadForMainFrame): Deleted.
        * UIProcess/playstation/PageClientImpl.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didFinishNavigation):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame): Deleted.
        * UIProcess/win/PageClientImpl.h:

2020-07-01  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Allow the WebContent sandbox to check the 'hw.product' sysctl
        https://bugs.webkit.org/show_bug.cgi?id=213861
        <rdar://problem/64988957>

        Reviewed by Per Arne Vollan.

        Telemetry shows that we need to read the 'hw.product' sysctl in the font subsystem,
        primarily to enable certain font features (for various products) in different locales.

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

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 ==
