2022-01-25  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029
        rdar://problem/86347726

        Reviewed by Jer Noble and Youenn Fablet.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultScreenCaptureKitEnabled):
        * Shared/WebPreferencesDefaultValues.h:

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKPreferences.mm: Add _useScreenCaptureKit private preference.
        (-[WKPreferences _useScreenCaptureKit]):
        (-[WKPreferences _setUseScreenCaptureKit:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add private delegate for a 
        getDisplayMedia-specific prompt.
        
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _setIndexOfGetDisplayMediaDeviceSelectedForTesting:]): Set the index
        of the screen or window device to return for getDisplayMedia without prompting.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::promptForDisplayCapturePermission): Call new 
        screen/window capture delegate.
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::promptForGetDisplayMedia): Add parameter
        specifying a window or screen capture prompt.
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::manager const):

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

        * UIProcess/mac/DisplayCaptureSessionManager.h: Added.
        (WebKit::DisplayCaptureSessionManager::setIndexOfDeviceSelectedForTesting):
        * UIProcess/mac/DisplayCaptureSessionManager.mm: Added.
        (WebKit::getMockWindowList):
        (WebKit::getCGWindowList):
        (WebKit::getWindowList):
        (WebKit::alertForWindowSelection):
        (WebKit::DisplayCaptureSessionManager::alertForGetDisplayMedia):
        (WebKit::DisplayCaptureSessionManager::isAvailable):
        (WebKit::DisplayCaptureSessionManager::singleton):
        (WebKit::DisplayCaptureSessionManager::DisplayCaptureSessionManager):
        (WebKit::DisplayCaptureSessionManager::~DisplayCaptureSessionManager):
        (WebKit::DisplayCaptureSessionManager::promptForGetDisplayMedia):
        (WebKit::DisplayCaptureSessionManager::deviceSelectedForTesting):
        (WebKit::DisplayCaptureSessionManager::showWindowPicker):
        (WebKit::DisplayCaptureSessionManager::showScreenPicker):

        * UIProcess/mac/UserMediaPermissionRequestProxyMac.h: Added.
        * UIProcess/mac/UserMediaPermissionRequestProxyMac.mm: Added.
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxyMac::UserMediaPermissionRequestProxyMac):
        (WebKit::UserMediaPermissionRequestProxyMac::~UserMediaPermissionRequestProxyMac):
        (WebKit::UserMediaPermissionRequestProxyMac::promptForGetDisplayMedia):
        (WebKit::UserMediaPermissionRequestProxyMac::canPromptForGetDisplayMedia):
        * WebKit.xcodeproj/project.pbxproj:

2022-01-25  Tim Horton  <timothy_horton@apple.com>

        Shadows are flattened to bitmaps in CGDisplayListImageBufferBackend
        https://bugs.webkit.org/show_bug.cgi?id=235617

        Reviewed by Wenson Hsieh.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        Disable ShadowBlur for CGDisplayListImageBufferBackend, allowing it to
        be recorded as a "shadow" display list item instead of a series of bitmaps.

2022-01-25  Michael Saboff  <msaboff@apple.com>

        Install build failure when using SYSTEM_CONTENT_PATH
        https://bugs.webkit.org/show_bug.cgi?id=235609

        Reviewed by Filip Pizlo.

        Eliminated the Output Files of the Create Symlink to Alt Root Path script for the targets
        adattributiond, GPU, Networking, WebAuthn, webpushd, and the various WebContent targets,
        since the symlink to WebKit.framework will be created by the "WebKit" target.
        Also fixed the INSTALL_PATH for adattributiond and webpushd to follow the difference between
        macOS and iOS.

        * Configurations/adattributiond.xcconfig:
        * Configurations/webpushd.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2022-01-25  Per Arne Vollan  <pvollan@apple.com>
 
         [macOS][WP] Allow mach extension to service
         https://bugs.webkit.org/show_bug.cgi?id=235599
         <rdar://87850345>
 
         Reviewed by Darin Adler.
 
         Allow mach extension to a service in the WebContent process on macOS.
 
         * WebProcess/com.apple.WebProcess.sb.in:

2022-01-25  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Observe CFNetwork preference domain
        https://bugs.webkit.org/show_bug.cgi?id=235603
        <rdar://87994712>

        Reviewed by Darin Adler.

        Since the Networking process is now using CF prefs direct mode, the CFNetwork preference domain should be observed for changes.

        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKPreferenceObserver init]):

2022-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        UIWKDocumentRequestSpatialAndCurrentSelection should limit context to the editable root of the current selection
        https://bugs.webkit.org/show_bug.cgi?id=235595
        rdar://87835602

        Reviewed by Aditya Keerthi.

        Adjust the behavior of document editing context requests in the case where the `SpatialAndCurrentSelection` flag
        is specified, but no explicit `textInputContext` has been given. Instead of using the hit-tested corners of the
        spatial request as-is, clamp to the visible start and end positions of the current editable root (only if it
        exists).

        This adjustment makes this particular request configuration useful for text input clients that just want to
        request text input context information for the current editable element in a given rect, but don't already have
        a text input element identifier.

        Test: DocumentEditingContext.SpatialAndCurrentSelectionRequest_LimitContextToEditableRoot

        * Platform/spi/ios/UIKitSPI.h:

        Drive-by fix: also clean up a couple of old staging declarations.

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

2022-01-25  Sihui Liu  <sihui_liu@apple.com>

        Regression (r235236): NetworkStorageManager sends messages to wrong StorageAreaMap
        https://bugs.webkit.org/show_bug.cgi?id=235553

        Reviewed by Darin Adler.

        Started from r235236, NetworkStorageManager uses StorageAreaMapIdentifier instead of StorageAreaIdentifier as
        the message destination (as web process stores StorageAreaMap by StorageAreaMapIdentifier). However, the
        destination is not changed accordingly when sending didSetItem, didRemoveItem and didClear messages, so the
        messages are dispatched to wrong StorageAreaMaps.

        Since these messages are reply for some message sent from StorageAreaMap to NetworkStorageManager (e.g. 
        didSetItem is reply of setItem), we may just use sendMessageWithAsyncReply when sending original message, and
        we don't need to worry about the destination.

        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::setItem):
        (WebKit::StorageManagerSet::removeItem):
        (WebKit::StorageManagerSet::clear):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * NetworkProcess/WebStorage/StorageManagerSet.messages.in:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::setItem):
        (WebKit::NetworkStorageManager::removeItem):
        (WebKit::NetworkStorageManager::clear):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        * WebProcess/WebStorage/StorageAreaMap.h:
        * WebProcess/WebStorage/StorageAreaMap.messages.in:

2022-01-24  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r282320): [Cocoa] User-installed fonts don't work in the GPU Process (in WKWebView)
        https://bugs.webkit.org/show_bug.cgi?id=235449
        <rdar://problem/84958961>

        Reviewed by Darin Adler.

        The reason for this bug was I was misusing kCTFontOptionsSystemUIFont. I thought this flag just
        meant "allow the creation of system fonts" but it turns out it means something more subtle than
        that. Instead of unconditionally specifying this flag, we should just pull out the options field
        from the source font (which will include that flag if the font was a system font) and use that
        instead.

        Test: fast/text/user-installed-canvas.html

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::encodePlatformData):
        (IPC::createCTFont):
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::decodePlatformData):

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Rename Vector and FixedVector::findMatching to findIf to match stl naming.
        https://bugs.webkit.org/show_bug.cgi?id=234864
        rdar://87424746

        Reviewed by Yusuke Suzuki.

        * GPUProcess/media/RemoteCDMFactoryProxy.cpp:
        (WebKit::factoryForKeySystem):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::findRootNetworkActivity):
        (WebKit::NetworkConnectionToWebProcess::findNetworkActivityTracker):
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::storeRecords):
        (WebKit::CacheStorage::Cache::put):
        (WebKit::CacheStorage::Cache::remove):
        (WebKit::CacheStorage::Cache::removeFromRecordList):
        (WebKit::CacheStorage::Cache::updateRecordToDisk):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::find):
        (WebKit::CacheStorage::Caches::remove):
        (WebKit::CacheStorage::Caches::hasActiveCache const):
        (WebKit::CacheStorage::Caches::dispose):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::didProvideMediaData):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_remove_frame_displayed_callback):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::grantAccess):
        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::accessType const):
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::setDeviceAsFirst):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::deleteDuplicateCredential const):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueGetNextAssertionAfterResponseReceived):
        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::DragDropInteractionState::defaultDropPreview const):
        (WebKit::BlockPtr<void):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::setPreferredFramesPerSecond):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (shouldShowDividersBetweenCells):
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserScriptMessageHandlerInternal):
        (WebKit::WebUserContentController::addUserScriptInternal):
        (WebKit::WebUserContentController::addUserStyleSheetInternal):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestTextRecognition):
        * WebProcess/WebProcess.cpp:
        (WebKit::checkDocumentsCaptureStateConsistency):

2022-01-24  Alex Christensen  <achristensen@webkit.org>

        Re-enable CustomDisplayName and DefaultDisplayName API tests on Monterey
        https://bugs.webkit.org/show_bug.cgi?id=234613

        Reviewed by Brady Eidson.

        When we introduced setting the display name from the network process,
        we didn't update the tests to get the information from the process that can access it.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/mac/NetworkConnectionToWebProcessMac.mm:
        (WebKit::NetworkConnectionToWebProcess::updateActivePages):
        (WebKit::NetworkConnectionToWebProcess::getProcessDisplayName):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::getProcessDisplayName):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::auditTokenForSelf):
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::getProcessDisplayName):
        (WebKit::WebProcess::updateActivePages):

2022-01-24  Sihui Liu  <sihui_liu@apple.com>

        Regression (r286936): SessionStorage data is not cleared when deleting website data by modification time
        https://bugs.webkit.org/show_bug.cgi?id=235542

        Reviewed by Chris Dumez.

        The old behavior before r286936 is to delete SessionStorage data regardless of the modifiedSince parameter.
        r286936 made it check modifiedSince and perform deleteion when modifiedSince time is -Walltime::infinity. This 
        patch corrects it by deleting SessionStorage data when modifiedSince time is in the past.

        API test: SessionStorage.ClearByModificationTime

        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::deleteData):

2022-01-24  Ada Chan  <adachan@apple.com>

        Soft link ARKit in a separate ARKitSoftLink file
        https://bugs.webkit.org/show_bug.cgi?id=235532

        Reviewed by Tim Horton.

        * Shared/Cocoa/ARKitSoftLink.h: Added.
        * Shared/Cocoa/ARKitSoftLink.mm: Added.
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * WebKit.xcodeproj/project.pbxproj:

2022-01-24  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (iOS 15): HTMLAudioElement fails to load new audio when device is locked or safari is in background
        https://bugs.webkit.org/show_bug.cgi?id=229688
        <rdar://problem/82554226>

        Reviewed by Jer Noble.

        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::category const): Return the most recently set category
        on all platforms so it is possible to test.

2022-01-24  David Quesada  <david_quesada@apple.com>

        Simplify accesses to SystemVersion.plist
        https://bugs.webkit.org/show_bug.cgi?id=234306

        Reviewed by Alexey Proskuryakov.

        No new tests since no behavior change is expected.

        * UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:
        (WebKit::WebInspectorUIProxy::infoForLocalDebuggable):
            Use _CFCopySystemVersionDictionary() to locate and load the
            SystemVersion.plist file rather than doing that all manually.
        (WebKit::systemVersionPlist): Deleted.

2022-01-24  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Move FEImage to the 'platform' directory
        https://bugs.webkit.org/show_bug.cgi?id=234109
        rdar://86608573

        Reviewed by Darin Adler.

        * Platform/IPC/FilterReference.h:

2022-01-22  Ben Nham  <nham@apple.com>

        Add PushSubscriptionIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=234797

        Reviewed by Darin Adler.

        Pass the subscription identifier in the PushSubscription.unsubscribe call to guarantee that
        we only unsubscribe from the given subscription.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::unsubscribeFromPushService):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::unsubscribeFromPushService):
        * WebProcess/Storage/WebSWClientConnection.h:

2022-01-22  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Add the class 'SourceImage' to represent variants of image
        https://bugs.webkit.org/show_bug.cgi?id=235467

        Reviewed by Cameron McCormack.

        Provide a new recordResourceUse() for the SourceImage.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
        (WebKit::RemoteDisplayListRecorderProxy::recordResourceUse):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:

2022-01-22  Elliott Williams  <emw@apple.com>

        Skip installing webpushd in STP and downlevel builds
        https://bugs.webkit.org/show_bug.cgi?id=235464
        <rdar://87425138>

        Reviewed by Brady Eidson.

        We can't ship webpushd as part of STP or builds made for previous versions of macOS. This
        change adjusts build settings to skip installing webpushd and its launchd plist outside of a
        non-relocatable production build environment.

        As a consequence, webpushd will not _install_ in development builds (where all build
        products are relocatable). It will continue to build and be runnable from the build
        products directory.

        * Configurations/BaseTarget.xcconfig: Add WK_SKIP_INSTALL_WEBPUSHD to determine whether to
        skip installation.
        * Configurations/webpushd.xcconfig: Set SKIP_INSTALL based on WK_SKIP_INSTALL_WEBPUSHD.
        * WebKit.xcodeproj/project.pbxproj: Skip installing launchd plists when
        WK_SKIP_INSTALL_WEBPUSHD=YES.

2022-01-21  Sihui Liu  <sihui_liu@apple.com>

        Disable CFURLCache in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=234988
        <rdar://problem/87619196>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::newTestingSession):
        (WebKit::NetworkProcess::ensureSession):

2022-01-21  Per Arne Vollan  <pvollan@apple.com>

        Inject Launch Services database before NSApplication is initialized
        https://bugs.webkit.org/show_bug.cgi?id=235186
        <rdar://87468788>

        Reviewed by Chris Dumez.

        To avoid the main thread getting stuck, the Launch Services database should be injected before NSApplication
        is initialized, since the initialization now depends on the database. To make sure also prewarmed WebContent
        processes are receiving the Launch Services database, the WebsiteDataStore method
        sendNetworkProcessXPCEndpointToProcess is moved to the class NetworkProcessProxy, since prewarmed processes
        will not have a data store initially. This allows us to simplify the code, since we are no longer depending
        on having a Website data store before sending the XPC endpoint.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToProcess):
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToProcess const): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::platformDidReceiveLoadParameters):
        * WebProcess/cocoa/LaunchServicesDatabaseManager.h:
        * WebProcess/cocoa/LaunchServicesDatabaseManager.mm:
        (WebKit::LaunchServicesDatabaseManager::waitForDatabaseUpdate):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2022-01-21  Per Arne Vollan  <pvollan@apple.com>

        [iOS][WP] Allow access to CFNetwork prefs
        https://bugs.webkit.org/show_bug.cgi?id=235457
        <rdar://87822314>

        Reviewed by Brent Fulgham.

        Allow access to CFNetwork prefs on internal builds.

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

2022-01-21  Per Arne Vollan  <pvollan@apple.com>

        [macOS][GPUP] Add access to IOKit property
        https://bugs.webkit.org/show_bug.cgi?id=235450
        <rdar://76403140>

        Reviewed by Brent Fulgham.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2022-01-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        Support in-process testing of IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=231674
        <rdar://84189314>

        Reviewed by Brent Fulgham.

        Add IPCTester service to UI, GPU, Network, Authn process.
        The service can be used to send random messages to the processes.

        Test: ipc/start-message-testing.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::dispatchMessage):
        (WebKit::GPUConnectionToWebProcess::dispatchSyncMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchIncomingMessageForTesting):
        (IPC::Connection::dispatchMessage):
        (IPC::CompletionHandler<void):
        Remove asserts from takeAsyncReplyHandler, they're already present
        in the caller. The caller can filter them based on the testing flag,
        allowing testing without asserts.
        * Platform/IPC/Connection.h:
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::create):
        (IPC::Decoder::Decoder):
        (IPC::Decoder::~Decoder):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::createMessageDecoder):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::readEventHandler):
        * Shared/IPCTester.cpp: Added.
        (WebKit::messageTestDriver):
        (WebKit::runMessageTesting):
        (WebKit::IPCTester::~IPCTester):
        (WebKit::IPCTester::startMessageTesting):
        (WebKit::IPCTester::stopMessageTesting):
        (WebKit::IPCTester::stopIfNeeded):
        * Shared/IPCTester.h: Added.
        * Shared/IPCTester.messages.in: Copied from Source/WebKit/WebAuthnProcess/WebAuthnConnectionToWebProcess.messages.in.
        * Sources.txt:
        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::decodeLegacySessionState):
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shouldSendPendingMessage):
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.cpp:
        (WebKit::WebAuthnConnectionToWebProcess::dispatchMessage):
        (WebKit::WebAuthnConnectionToWebProcess::dispatchSyncMessage):
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.h:
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSMessageListener::didReceiveMessage):
        (WebKit::IPCTestingAPI::JSMessageListener::willSendMessage):

2022-01-20  Devin Rousso  <drousso@apple.com>

        Add SPI for passing around and getting details about `WebCore::CSSStyleDeclaration` in injected bundle code
        https://bugs.webkit.org/show_bug.cgi?id=235386
        <rdar://problem/87566737>

        Reviewed by Tim Horton.

        Test: WebKit.WKWebProcessPlugInCSSStyleDeclarationHandle

        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp:
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::getOrCreate):
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::coreCSSStyleDeclaration): Added.
        Expose a way to get the related `WebCore::CSSStyleDeclaration` (for `toJS`).
        Add a method that returns the string value for a given property name.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInCSSStyleDeclarationHandle.h: Added.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInCSSStyleDeclarationHandleInternal.h: Added.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInCSSStyleDeclarationHandle.mm: Added.
        (-[WKWebProcessPlugInCSSStyleDeclarationHandle dealloc]):
        (+[WKWebProcessPlugInCSSStyleDeclarationHandle cssStyleDeclarationHandleWithJSValue:inContext:]):
        (-[WKWebProcessPlugInCSSStyleDeclarationHandle _cssStyleDeclarationHandle]):
        (-[WKWebProcessPlugInCSSStyleDeclarationHandle _apiObject]):
        Add ObjC SPI for manipulating `WebCore::CSSStyleDeclaration` (in the injected bundle).

        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame jsCSSStyleDeclarationForCSSStyleDeclarationHandle:inWorld:]): Added.
        Add methods for converting from ObjC SPI wrappers of `WebCore::CSSStyleDeclaration` to JS.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Add support for automatic conversion of `WKBundleCSSStyleDeclarationRef` to ObjC (above).

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/cocoa/WebProcessCocoa.mm:
        Drive-by: Unified sources fixes.

2022-01-20  Tim Horton  <timothy_horton@apple.com>

        ReplayCGDisplayListsIntoBackingStore often results in compositing layers with black backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=235424

        Reviewed by Simon Fraser.

        No new tests, covered by many existing tests when run in this mode.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        Since we use CA-driven painting when ReplayCGDisplayListsIntoBackingStore
        is enabled, we need to tell CA whether or not our backing store needs
        an alpha channel before invalidating and painting into the layer. 

2022-01-20  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Support all valid FIDO NFC tag types
        https://bugs.webkit.org/show_bug.cgi?id=234616
        rdar://85871173

        Reviewed by Darin Adler.

        This patch modifies a check when looking for FIDO nfc tags
        to support all valid FIDO tag types.

        Tested using physical NFC tags provided for this bug.

        * Platform/spi/Cocoa/NearFieldSPI.h:
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::didDetectTags):

2022-01-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        Implement WebGL GPU buffer texture upload path for Cocoa getUserMedia camera streams
        https://bugs.webkit.org/show_bug.cgi?id=235233
        <rdar://problem/87601762>

        Reviewed by Youenn Fablet.

        Rename functions from pixelBuffer... to videoFrame.
        Send new type MediaPlayerVideoFrame instead of CVPixelBuffer.
        MediaPlayerVideoFrame contains also the frame orientation.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::copyTextureFromMedia):
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::invalidate):
        (WebKit::RemoteMediaPlayerProxy::videoFrameForCurrentTimeIfChanged):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTimeIfChanged): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::videoFrameForCurrentTime):
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime): Deleted.

2022-01-20  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed PlayStation / clang-cl build fix following r288298.

        clang for Windows (< v10.0.0) cannot destructure a const class.
        See also r261572, r254471, r249524, etc.

        * NetworkProcess/storage/StorageAreaBase.cpp:
        (WebKit::StorageAreaBase::notifyListenersAboutClear):
        (WebKit::StorageAreaBase::dispatchEvents const):

2022-01-20  Sihui Liu  <sihui_liu@apple.com>

        Make LocalStorage prewarming async
        https://bugs.webkit.org/show_bug.cgi?id=235236

        Reviewed by Chris Dumez.

        StorageAreaMap in web process needs to sync with a remote StorageArea in network process before it performs any
        Web Storage operation. To connect to remote StorageArea, StorageAreaMap currently sends out two sync messages:
        1. ConnectTo*StorageArea: for getting the remote StorageAreaIdentifier
        2. getValues: for getting the content of StorageArea
        We can merge these two messages into one message: ConnectToStorageAreaSync, and return both remote 
        StorageAreaIdentifier and content in its reply. This way, web process will not be blocked twice.

        To reduce the wait time for connecting to a local StorageArea, we would prewarm LocalStorage by creating its 
        StorageAreaMap ahead and making it connected (r247555), but we don't actually need StorageAreaMap to be ready 
        for operation at this time. Therefore, a new async message ConnectToStorageArea is added to be used for 
        prewarming.

        If LocalStorage is used immediately after prewarming, a StorageAreaMap may send ConnectToStorageAreaSync before 
        receiving the reply of ConnectToStorageArea. In this case, StorageAreaMap would handle ConnectToStorageAreaSync 
        reply before ConnectToStorageArea reply (due to the priority of sync message), and also before other async 
        messages (DispatchStorageEvent / ClearCache) that are sent from network process earlier before the sync reply.
        To solve this, we use a message identifier to indicate the order of messages sent from network process, so
        StorageAreaMap can ignore previous messages when it is already synced with a more recent version of StorageArea.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::dispatchEvents const):
        * NetworkProcess/storage/LocalStorageManager.cpp:
        (WebKit::LocalStorageManager::connectToLocalStorageArea):
        (WebKit::LocalStorageManager::connectToTransientLocalStorageArea):
        * NetworkProcess/storage/LocalStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::connectToStorageArea):
        (WebKit::NetworkStorageManager::connectToStorageAreaSync):
        (WebKit::NetworkStorageManager::connectToLocalStorageArea): Deleted.
        (WebKit::NetworkStorageManager::connectToTransientLocalStorageArea): Deleted.
        (WebKit::NetworkStorageManager::connectToSessionStorageArea): Deleted.
        (WebKit::NetworkStorageManager::getValues): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * NetworkProcess/storage/SessionStorageManager.cpp:
        (WebKit::SessionStorageManager::connectToSessionStorageArea):
        * NetworkProcess/storage/SessionStorageManager.h:
        * NetworkProcess/storage/StorageAreaBase.cpp:
        (WebKit::StorageAreaBase::nextMessageIdentifier):
        (WebKit::StorageAreaBase::StorageAreaBase):
        (WebKit::StorageAreaBase::addListener):
        (WebKit::StorageAreaBase::notifyListenersAboutClear):
        (WebKit::StorageAreaBase::dispatchEvents const):
        * NetworkProcess/storage/StorageAreaBase.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::registerStorageAreaMap):
        (WebKit::WebProcess::unregisterStorageAreaMap):
        (WebKit::WebProcess::storageAreaMap const):
        * WebProcess/WebProcess.h:
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::prewarm):
        (WebKit::StorageAreaImpl::incrementAccessCount): Deleted.
        (WebKit::StorageAreaImpl::decrementAccessCount): Deleted.
        (WebKit::StorageAreaImpl::closeDatabaseIfIdle): Deleted.
        * WebProcess/WebStorage/StorageAreaImpl.h:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::~StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::ensureMap):
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        (WebKit::StorageAreaMap::clearCache):
        (WebKit::StorageAreaMap::sendConnectMessage):
        (WebKit::StorageAreaMap::connectSync):
        (WebKit::StorageAreaMap::connect):
        (WebKit::StorageAreaMap::didConnect):
        (WebKit::StorageAreaMap::disconnect):
        * WebProcess/WebStorage/StorageAreaMap.h:
        * WebProcess/WebStorage/StorageAreaMap.messages.in:
        * WebProcess/WebStorage/StorageAreaMapIdentifier.h: Added.

2022-01-20  Youenn Fablet  <youenn@apple.com>

        Disable fallback path to WebRTC platform sockets
        https://bugs.webkit.org/show_bug.cgi?id=235402

        Reviewed by Eric Carlson.

        We should not fallback to the legacy WebRTC socket code path in Cocoa ports.
        Instead, if we cannot create the corresponding sockets (in case of ssltcp candidates for instance),
        we mark the socket as closed.
        Minor refactoring to show that NetworkRTCUDPSocketCocoa code path should always be successful.

        Manually tested on meet.google.com which can make use of ssltcp candidates.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:

2022-01-20  Elliott Williams  <emw@apple.com>

        Prevent empty folders being created during install builds
        rdar://87777915

        Reviewed by Brady Eidson.

        The "Copy Daemon Plists" script phase has output files which aren't always written to. Since
        Xcode mkdir-p's these output directories, it ends up creating an empty directory under some
        circumstances. Fix by removing these declared outputs: since this script is install-only
        and executes quickly, it's not really a problem to have it run redundantly.

        Once we use XCBuild everywhere, it can be rewritten as a Copy Files phase.

        * WebKit.xcodeproj/project.pbxproj:

2022-01-19  Brent Fulgham  <bfulgham@apple.com>

        Grant access to GlobalPreferences and GlobalPreferences_m uniformly
        https://bugs.webkit.org/show_bug.cgi?id=235387
        <rdar://problem/86943871>

        Reviewed by Per Arne Vollan.

        We should allow access to GlobalPreferences_m.plist in the places where we currently
        allow GlobalPreferences.plist. We are inconsistent about this in our sandboxes, and
        telemetry shows that we need to provide access.

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

2022-01-19  Chris Dumez  <cdumez@apple.com>

        WebKit::nsTextAlignmentFromTextAlignment() falls through ASSERT_NOT_REACHED()
        https://bugs.webkit.org/show_bug.cgi?id=234989
        <rdar://problem/87273264>

        Reviewed by Darin Adler.

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

2022-01-19  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] ImageBuffer::convertToLuminanceMask() and transformToColorSpace() should not access the backend in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=235305
        rdar://83437815

        Reviewed by Sam Weinig.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::convertToLuminanceMask):
        (WebKit::RemoteDisplayListRecorder::transformToColorSpace):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        * GPUProcess/graphics/RemoteDisplayListRecorder.messages.in:
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
        (WebKit::RemoteDisplayListRecorderProxy::convertToLuminanceMask):
        (WebKit::RemoteDisplayListRecorderProxy::transformToColorSpace):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2022-01-19  Chris Dumez  <cdumez@apple.com>

        WebsiteDataStore.cpp uses switch statements for WebKit::ProcessAccessType enum that fall through ASSERT_NOT_REACHED()
        https://bugs.webkit.org/show_bug.cgi?id=234986
        <rdar://problem/87272534>

        Reviewed by Darin Adler.

        Clean up / clarify processAccessType logic in WebsiteDataStore.cpp.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        (WebKit::computeWebProcessAccessTypeForDataFetch):
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):

2022-01-19  Chris Dumez  <cdumez@apple.com>

        WebKit::AuthenticatorPresenterCoordinator() constructor falls through ASSERT_NOT_REACHED()
        https://bugs.webkit.org/show_bug.cgi?id=234991
        <rdar://problem/87275093>

        Reviewed by Darin Adler.

        Drop unnecessary default: case in the switch statement since it handles all enum values already.

        * UIProcess/WebAuthentication/Cocoa/AuthenticatorPresenterCoordinator.mm:
        (WebKit::AuthenticatorPresenterCoordinator::AuthenticatorPresenterCoordinator):

2022-01-19  Chris Dumez  <cdumez@apple.com>

        WebKit::DownloadProxy::publishProgress() falls through ASSERT_NOT_REACHED()
        https://bugs.webkit.org/show_bug.cgi?id=234975
        <rdar://problem/87265153>

        Reviewed by Darin Adler.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::publishProgress):
        Let's not send the IPC if we failed to create the handle since the recipient code early returns when the handle is
        invalid.

2022-01-19  Alex Christensen  <achristensen@webkit.org>

        Allow experimental feature names to be hidden in WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=235163

        Reviewed by Chris Dumez.

        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb:

2022-01-19  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r288147.
        <rdar://87776311>

        broke clean command line builds

        Reverted changeset:

        "Build WebKitSwift when building with make or build-webkit"
        https://bugs.webkit.org/show_bug.cgi?id=235093
        https://commits.webkit.org/r288147

2022-01-19  Youenn Fablet  <youenn@apple.com>

        Improve computation of service worker FetchEvent.resultingClientId
        https://bugs.webkit.org/show_bug.cgi?id=235107

        Reviewed by Darin Adler.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        * WebProcess/Storage/WebSWClientConnection.cpp:

2022-01-19  Youenn Fablet  <youenn@apple.com>

        [Cocoa] Do not change preferred AudioSession buffer size when VPIO is running
        https://bugs.webkit.org/show_bug.cgi?id=235317
        <rdar://87709485>

        Reviewed by Eric Carlson.

        When we stop capturing, we might still use the VPIO unit to render audio.
        In that case, it might be problematic to increase the preferred buffer size as:
        - Audio unit might stop running, hence stopping audio rendering
        - Increasing the preferred buffer size might increase latency which is not a good thing in VPIO usecases.

        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        * GPUProcess/media/RemoteAudioSessionProxyManager.h:

2022-01-18  Megan Gardner  <megan_gardner@apple.com>

        Loupe sometimes flips to the bottom of the page when dragging the end of a selection to the top of a page with selection flipping.
        https://bugs.webkit.org/show_bug.cgi?id=235220

        Reviewed by Tim Horton.

        When selecting on an EPUB in books, if you had a selection near the top of the page,
        and you dragged the end of the selection past the start and into the upper margin, sometimes
        this would result in the selection ending up on the previous page of content, which would result
        in the loupe being pushed to the bottom of the page (because the selection was on the previous page
        at the bottom), which is incorrect. The most solid way to keep this from happening is to clamp the selection
        to the unobscured content rect, which will keep selection from reaching back to the previous page.

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

2022-01-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264352): Mail compose body field does not avoid the keyboard when scrolling after focus
        https://bugs.webkit.org/show_bug.cgi?id=235331
        rdar://79296770

        Reviewed by Tim Horton.

        After r264352 added the call to `_page->scheduleFullEditorStateUpdate();` during element focus, scrolling to
        reveal the selection in the focused body field in Mail stopped working. This is because Mail:

        1.  Sets `firstResponderKeyboardAvoidanceEnabled` to NO on the WKScrollView, which prevents automatic inset
            adjustment logic in UIKit from taking effect and adding the keyboard height to the bottom system content
            inset.

        2.  Manually sets `-contentScrollInset` on the WKScrollView during a UIKeyboardDidShowNotification, which occurs
            after we've already attempted to zoom to the selection.

        ...combined with the fact that without the call to `scheduleFullEditorStateUpdate()`, the next EditorState
        would've arrived only after the keyboard animation finished.

        The end result is that we don't end up avoiding the keyboard at all when focusing the body field in Mail
        compose. While rdar://87733414 tracks refactoring logic in WebKit2 Mail compose to ensure that the content
        scroll insets on WKScrollView are applied during UIKeyboardWillShowNotification instead of after the keyboard
        has finished animating in, this patch provides a short-term workaround by restoring pre-r264352 behavior, with
        respect to when the element is scrolled into view.

        Test: editing/selection/ios/scroll-to-reveal-selection-with-keyboard-avoidance-disabled.html

        * Platform/spi/ios/UIKitSPI.h:

        Add a declaration for the `-firstResponderKeyboardAvoidanceEnabled` SPI property on non-internal iOS SDKs.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _keyboardDidShow:]):

        Plumb this through to the WKContentView, so we can zoom/scroll to the focused element if needed.

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

        If we previously deferred the call to `-_zoomToRevealFocusedElement` due to the keyboard still animating in,
        schedule a call to it now on a 0-delay timer; this delay is necessary to ensure that this zoom occurs *after*
        Mail has already set the content inset, which also happens underneath a "KeyboardDidShow" notification.

        (-[WKContentView _zoomToRevealFocusedElement]):

        In the case where the (presumably internal) client has set `firstResponderKeyboardAvoidanceEnabled` to NO and
        the keyboard is animating in, defer the actual call into the web view to `-_zoomToRevealFocusedElement` until
        after the keyboard animation is finished. This ensures compatibility with existant logic in Mail for manually
        setting the content scroll inset on the WKScrollView after the keyboard animation is complete.

        (-[WKContentView resetShouldZoomToFocusRectAfterShowingKeyboard]):
        (-[WKContentView _elementDidBlur]):

2022-01-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r288019.
        https://bugs.webkit.org/show_bug.cgi?id=235341

        Introduced debug assert

        Reverted changeset:

        "Inject Launch Services database before NSApplication is
        initialized"
        https://bugs.webkit.org/show_bug.cgi?id=235186
        https://commits.webkit.org/r288019

2022-01-18  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement native form validation bubbles for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=235303

        Reviewed by Carlos Garcia Campos.

        The gtk port using gtk3 supports a native validation bubble for the form validation
        since r288104. This change brings the same support for gtk4.

        * WebProcess/WebPage/WebPage.cpp: Enable pageConfiguration.validationMessageClient
          for all gtk backends
        (WebKit::m_appHighlightsVisible):

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Build WebKitSwift when building with make or build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=235093

        Reviewed by Alexey Proskuryakov.

        For various internal reasons, we have to have no depency between the two,
        but we command line builders want to build and test it just like everyone else.

        * Makefile:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Use c++2a instead of gnu++2a for Cocoa builds
        https://bugs.webkit.org/show_bug.cgi?id=234936

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:
        * Configurations/BaseTarget.xcconfig:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Don't build WKGroupSession.swift when using Monterey public SDK
        https://bugs.webkit.org/show_bug.cgi?id=235324

        Reviewed by Jer Noble.

        * Configurations/WebKit.xcconfig:
        Remove unused exclusion of WKGroupSession.swift which is only built in WebKitSwift.
        * Configurations/WebKitSwift.xcconfig:
        Remove unused reference to WKCoordinator.mm and WKCoordinator.h which don't exist any more.
        Don't build WKGroupSession.swift with the public SDK since it uses "@_spi(Safari)"

2022-01-18  Sam Weinig  <weinig@apple.com>

        Canvas functions that take colors as strings don't support all the syntax that CSS supports
        https://bugs.webkit.org/show_bug.cgi?id=235269

        Reviewed by Darin Adler.

        Update for rename of CSSParser::parseColor() to CSSParser::parseColorWithoutContext().

        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkit_color_parse):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetComposition):

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Copy com.apple.WebKit.adattributiond.sb into place with other iOS sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=235320
        <rdar://87711220>

        Reviewed by Per Arne Vollan.

        Ever since r287100 we are using the sandbox profile, but it doesn't exist so we just crash.

        * WebKit.xcodeproj/project.pbxproj:

2022-01-17  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement form validation with gtk3 widgets in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=234629

        Reviewed by Carlos Garcia Campos.

        This change re-implements form validation with gtk3 widgets in the UI process.
        The current form validation is implemented by using shadow DOM in the web process.
        The overall design is similar to that of mac port but the gtk port adds
        a callback of webkitWebViewBaseSetShouldNotifyFocusEvents to WebCore::ValidationBubble
        to suppress a focus event triggered by the popover widget. Otherwise, the native
        bubble does not display properly.
        This change does not support gtk4 yet. A follow-up patch will add the gtk4 support.
        To avoid complaints from the gtk4 EWS, we guard implementation of ValidationBubbleGtk
        temporarily and install pageConfiguration.validationMessageClient for gtk3 only.
        The gtk4 keeps using the shadow DOM bubble until having native bubble support.

        * SourcesGTK.txt:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createValidationBubble):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::hideValidationMessage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::showValidationMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070

        Reviewed by Chris Dumez.

        Change findByClientIdentifier into findByVisibleClientIdentifieran and make it asn async reply.
        Update fetch event code path to send the visible IDs of the FetchEvent from network process to worker context process.
        We store these IDs in NetworkResourceLoader so that we can change them in case of redirection for navigations. 

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2022-01-17  Kimmo Kinnunen  <kkinnunen@apple.com>

        Frequent GPU process jetsams due to RemoteRenderingBackendProxy not claiming ownership of SharedMemory buffers
        https://bugs.webkit.org/show_bug.cgi?id=235226

        Reviewed by Simon Fraser.

        Claim memory from SharedBitmaps and SharedMemory that RemoteRenderingBackendProxy
        asks and receives from RemoteRenderingBackend. This is not very good,
        as GPUP allocates most of the memory and thus might jetsam
        before WP claims them. However, that is a bigger change to be done
        after this one.

        No new tests, hard to test currently.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::takeOwnershipOfMemory const):
        * Shared/ShareableBitmap.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::getShareableBitmap):
        (WebKit::RemoteRenderingBackendProxy::getFilteredImage):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::recordNativeImageUse):

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Transmit network load metrics when service worker is using one of its network load to respond to FetchEvents
        https://bugs.webkit.org/show_bug.cgi?id=235179

        Reviewed by Darin Adler.

        Pipe network metrics down to WebProcess.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

2022-01-16  Youenn Fablet  <youenn@apple.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        Enforce focus check for getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=235026

        Reviewed by Eric Carlson.

        Add setters/getters for the getUserMedia focus settings.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetGetUserMediaRequiresFocus):
        (WKPreferencesGetGetUserMediaRequiresFocus):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _getUserMediaRequiresFocus]):
        (-[WKPreferences _setGetUserMediaRequiresFocus:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkitSettingsSetGetUserMediaRequiresFocus):
        * UIProcess/API/glib/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseMap): Always add the WindowIsActive flag under xvfb.
        (webkitWebViewBaseIsFocused): Always consider the view focused when WindowIsActive flag is present under xvfb.

2022-01-16  Lauro Moura  <lmoura@igalia.com>

        Fix C++20 build warnings with GCC
        https://bugs.webkit.org/show_bug.cgi?id=235023

        Reviewed by Alex Christensen.

        Mostly related to deprecating operations between enums of different
        types and not capturing this by default in lambdas.

        * WebProcess/Inspector/WebInspector.cpp: Capture this in lambdas.
        (WebKit::WebInspector::showConsole):
        (WebKit::WebInspector::showResources):
        (WebKit::WebInspector::showMainResourceForFrame):
        (WebKit::WebInspector::startPageProfiling):
        (WebKit::WebInspector::stopPageProfiling):
        (WebKit::WebInspector::startElementSelection):
        (WebKit::WebInspector::stopElementSelection):

2022-01-16  Cameron McCormack  <heycam@apple.com>

        Ensure in flight layer transactions don't accumulate further canvas drawing
        https://bugs.webkit.org/show_bug.cgi?id=231163
        <rdar://problem/83863292>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        (WebKit::WebPage::didFlushLayerTreeAtTime):
        Inform the WebCore::Page about the state of the layer tree transaction
        building.
        * WebProcess/WebPage/WebPage.h:

2022-01-15  Chris Dumez  <cdumez@apple.com>

        Introduce dynamicDowncast<>() for convenience
        https://bugs.webkit.org/show_bug.cgi?id=235259

        Reviewed by Darin Adler.

        Start adopting dynamicDowncast<>().

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didEnterFullScreen):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::paymentCoordinator):

2022-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Occasional crash under -[UITargetedPreview initWithView:parameters:target:] when focusing form controls
        https://bugs.webkit.org/show_bug.cgi?id=235248
        rdar://79220540

        Reviewed by Tim Horton and Aditya Keerthi.

        It's possible for `-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:` to return a `nil` snapshot
        view in the case where a screen update has not been performed yet (among other scenarios). In the case where
        UIKit returns `nil` when we're creating the targeted preview for the context menu when focusing a select element
        or file input, we'll crash due to an Objective-C exception in the initializer of UITargetedPreview. Mitigate
        this by falling back to an empty UIView after requesting the snapshot view to make our code robust against this
        scenario.

        Test: KeyboardInputTests.DoNotCrashWhenFocusingSelectWithoutViewSnapshot

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createFallbackTargetedPreview):

2022-01-14  Dean Jackson  <dino@apple.com>

        REGRESSION:  ARKit example loads a page full of random symbols instead of a 3D model
        https://bugs.webkit.org/show_bug.cgi?id=235254

        Reviewed by Tim Horton.

        When we enabled the ModelDocument support, we disabled the ContentProvider path.
        This was a mistake - it has to be a runtime check.

        * UIProcess/API/Cocoa/WKPreferences.mm: Expose the ModelDocumentEnabled WebPreference so that
        it can be read from a WKWebViewConfiguration.
        (-[WKPreferences _setModelDocumentEnabled:]):
        (-[WKPreferences _modelDocumentEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Rather than the compile-time test, check the
        WebPreferences to see if ModelDocument is disabled.
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):

2022-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Avoid redundant text analysis requests when long pressing inside an image that contains Live Text
        https://bugs.webkit.org/show_bug.cgi?id=235129
        rdar://87366539

        Reviewed by Tim Horton.

        When long pressing over a non-Live-Text part of an image that otherwise contains Live Text, we currently trigger
        Live Text analysis on the image a second time and re-inject the same text recognition results into the image
        element. In addition to being unnecessary, this extra text analysis operation causes regular Live Text results
        to be injected into images that already contain "block"-style recognized text results, replacing the blocks in
        the process.

        Address this by adding an optimization to avoid this unnecessary Live Text analysis and injection. See below for
        more details.

        Test: ImageAnalysisTests.AvoidRedundantTextRecognitionRequests

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add a new `elementContainsImageOverlay` bit to position information.

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

        In the case where the image already contains an overlay, short-circuit logic to perform text analysis and inject
        the results into the image, and instead directly call into the new helper method below to compute visual look up
        results and invoke pending context menu completion handler blocks. We pass `YES` for `hasTextResults` here
        because we know that the image already contains recognized text, due to the `elementContainsImageOverlay` being
        set.

        (-[WKContentView _completeImageAnalysisRequestForContextMenu:requestIdentifier:hasTextResults:]):

        Factor out logic for requesting visual look up results on the image into a separate helper method.

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

        Set the `elementContainsImageOverlay` bit (see above).

2022-01-14  Per Arne Vollan  <pvollan@apple.com>

        Inject Launch Services database before NSApplication is initialized
        https://bugs.webkit.org/show_bug.cgi?id=235186
        <rdar://87468788>

        Reviewed by Chris Dumez and Simon Fraser.

        To avoid the main thread getting stuck, the Launch Services database should be injected before NSApplication
        is initialized, since the initialization now depends on the database.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::platformDidReceiveLoadParameters):
        * WebProcess/cocoa/LaunchServicesDatabaseManager.h:
        * WebProcess/cocoa/LaunchServicesDatabaseManager.mm:
        (WebKit::LaunchServicesDatabaseManager::waitForDatabaseUpdate):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2022-01-14  J Pascoe  <j_pascoe@apple.com>

        Expose way to encode CTAP commands with only the hash of ClientDataJSON
        https://bugs.webkit.org/show_bug.cgi?id=235191
        <rdar://problem/87557846>

        Reviewed by Brent Fulgham.

        CTAP command encoding covered by existing tests (see CtapRequestTest) and the SPI
        in new API tests. 

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel encodeMakeCredentialCommandWithClientDataHash:options:userVerificationAvailability:]):
        (+[_WKWebAuthenticationPanel encodeGetAssertionCommandWithClientDataHash:options:userVerificationAvailability:]):

2022-01-13  Elliott Williams  <emw@apple.com>

        [XCBuild] Add "product dependencies" which influence workspace build order
        https://bugs.webkit.org/show_bug.cgi?id=235094

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebKit.xcconfig: Add EXCLUDED_SOURCE_FILE_NAMES
        * WebKit.xcodeproj/project.pbxproj: Add Product Dependencies

2022-01-13  Tim Horton  <timothy_horton@apple.com>

        Sometimes cannot scroll after using internal trackpad
        https://bugs.webkit.org/show_bug.cgi?id=235206
        <rdar://problem/87274541>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        (WebKit::MomentumEventDispatcher::setScrollingAccelerationCurve):
        * WebProcess/WebPage/MomentumEventDispatcher.h:
        We store std::optional<ScrollingAccelerationCurve> in a map, but then
        when looking at whether we have a curve (to decide whether or not to even
        use MomentumEventDispatcher), we check if the map has *any* value for the
        given page... even an unengaged optional. To fix, check if the optional is engaged.

2022-01-13  Per Arne Vollan  <pvollan@apple.com>

        Avoid unnecessary call to windowScreenDidChange
        https://bugs.webkit.org/show_bug.cgi?id=235198
        <rdar://87458502>

        Reviewed by Geoffrey Garen.

        It is a page load performance progression to avoid this call in initWithDrawingAreaProxy.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler initWithDrawingAreaProxy:]):

2022-01-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS][Networking] Add access to required network service
        https://bugs.webkit.org/show_bug.cgi?id=235188
        <rdar://86781432>

        Reviewed by Brent Fulgham.

        Add access to required network service in the Networking process on iOS.

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

2022-01-13  Tim Horton  <timothy_horton@apple.com>

        Fix a few Objective-C object leaks due to early returns in `init`
        https://bugs.webkit.org/show_bug.cgi?id=235162
        <rdar://problem/87489048>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKHoverPlatter.mm:
        (-[WKHoverPlatter initWithView:delegate:]):

2022-01-13  Patrick Angle  <pangle@apple.com>

        Web Inspector: Implement `frameURL` option for `devtools.inspectedWindow.eval` command
        https://bugs.webkit.org/show_bug.cgi?id=222568

        Reviewed by Devin Rousso.

        New test: Tools/TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm

        Correct the API to indicate that `frameURL` and `contextSecurityOrigin` are nullable parameters.

        * UIProcess/API/Cocoa/_WKInspectorExtension.h:

2022-01-12  John Wilander  <wilander@apple.com>

        PCM: Same-site triggering events should support ephemeral measurement
        https://bugs.webkit.org/show_bug.cgi?id=235160
        <rdar://87423294>

        Reviewed by Alex Christensen.

        We added ephemeral measurement for direct response advertising in https://bugs.webkit.org/show_bug.cgi?id=228984.
        We added support for same-site triggering events in https://bugs.webkit.org/show_bug.cgi?id=233173.
        These two features should work together.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
            This function previously only checked for cross-site triggering events when
            handling ephemeral measurements. Now it also checks for same-site triggering
            events.

2022-01-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Tiling scroll support
        https://bugs.webkit.org/show_bug.cgi?id=233676

        Reviewed by Don Olmstead.

        Added a new class WCTiledBacking that implements TiledBacking.

        Copied computeVisibleAndCoverageRect,
        transformByApplyingAnchorPoint and layerTransform from
        GraphicsLayerAC.

        * GPUProcess/graphics/wc/WCScene.cpp:
        (WebKit::WCScene::update):
        * WebProcess/WebPage/wc/DrawingAreaWC.cpp:
        (WebKit::DrawingAreaWC::DrawingAreaWC):
        (WebKit::DrawingAreaWC::updatePreferences):
        (WebKit::DrawingAreaWC::shouldUseTiledBackingForFrameView const):
        (WebKit::DrawingAreaWC::setNeedsDisplayInRect):
        (WebKit::DrawingAreaWC::scroll):
        (WebKit::flushLayerImageBuffers):
        (WebKit::DrawingAreaWC::sendUpdateAC):
        (WebKit::DrawingAreaWC::RootLayerClient::RootLayerClient): Deleted.
        (WebKit::DrawingAreaWC::RootLayerClient::paintContents): Deleted.
        (WebKit::DrawingAreaWC::RootLayerClient::deviceScaleFactor const): Deleted.
        * WebProcess/WebPage/wc/DrawingAreaWC.h:
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::GraphicsLayerWC):
        (WebKit::GraphicsLayerWC::setNeedsDisplay):
        (WebKit::GraphicsLayerWC::setNeedsDisplayInRect):
        (WebKit::GraphicsLayerWC::setBackgroundColor):
        (WebKit::GraphicsLayerWC::setDrawsContent):
        (WebKit::GraphicsLayerWC::noteLayerPropertyChanged):
        (WebKit::GraphicsLayerWC::flushCompositingState):
        (WebKit::GraphicsLayerWC::flushCompositingStateForThisLayerOnly):
        (WebKit::GraphicsLayerWC::tiledBacking const):
        (WebKit::GraphicsLayerWC::createImageBuffer):
        (WebKit::accumulatesTransform):
        (WebKit::GraphicsLayerWC::transformByApplyingAnchorPoint const):
        (WebKit::GraphicsLayerWC::layerTransform const):
        (WebKit::GraphicsLayerWC::computeVisibleAndCoverageRect const):
        (WebKit::GraphicsLayerWC::recursiveCommitChanges):
        * WebProcess/WebPage/wc/GraphicsLayerWC.h:
        * WebProcess/WebPage/wc/WCUpateInfo.h:
        (WebKit::WCLayerUpateInfo::encode const):
        (WebKit::WCLayerUpateInfo::decode):

2022-01-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r287944.

        Breaks Monterey build.

        Reverted changeset:

        "Build WebKitSwift when building with make or build-webkit"
        https://bugs.webkit.org/show_bug.cgi?id=235093
        https://commits.webkit.org/r287944

2022-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287955.
        https://bugs.webkit.org/show_bug.cgi?id=235166

        Reverting, since this can be fixed without a sandbox change.

        Reverted changeset:

        "[macOS] Add required system call"
        https://bugs.webkit.org/show_bug.cgi?id=235155
        https://commits.webkit.org/r287955

2022-01-12  Megan Gardner  <megan_gardner@apple.com>

        Add to Contact menu item does nothing on mac.
        https://bugs.webkit.org/show_bug.cgi?id=235154
        rdar://80213097

        Reviewed by Tim Horton.

        Add to Context menu item for telephone numbers did not actually show the contact card.
        This was because the delgate did not tell the menu where to display the card from, so it just failed.
        Plumbing that information through fixes the issue.

        * Platform/mac/MenuUtilities.h:
        * Platform/mac/MenuUtilities.mm:
        (-[WKEmptyPresenterHighlightDelegate initWithRect:]):
        (-[WKEmptyPresenterHighlightDelegate revealContext:rectsForItem:]):
        (-[WKEmptyPresenterHighlightDelegate revealContext:shouldUseDefaultHighlightForItem:]):
        (WebKit::menuForTelephoneNumber):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleTelephoneNumberClick):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleTelephoneNumberClick):

2022-01-12  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Fix freebie call without user gesture not being given
        https://bugs.webkit.org/show_bug.cgi?id=235078
        rdar://87327557

        Reviewed by Brent Fulgham.

        This logic was previously always requiring a user gesture. The desired
        behavior of giving pages a single "freebie" webauthn call without gesture
        was lost in a refactor.

        Tested manually on iOS device with webauthn.me.

        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::processingUserGesture):

2022-01-12  Brandon Stewart  <brandonstewart@apple.com>

        [macOS] Add required system call
        https://bugs.webkit.org/show_bug.cgi?id=235155

        Reviewed by Per Arne Vollan.

        Add missing system call that is required by Core Graphics.

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

2022-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] NSFontPanel UI (font color, text decorations, font shadow) doesn't update on selection change
        https://bugs.webkit.org/show_bug.cgi?id=190120
        rdar://44897405

        Reviewed by Darin Adler.

        Currently, in WebKit2, there is no mechanism for updating the NSFontManager with new font attributes when the
        selection changes. While we do update the selected NSFont, we do so by requesting font family and font size via
        an IPC request, `FontAtSelection`, but this does not include attributes like underline, strike-through, color,
        and text shadows.

        Instead, we can remove this `FontAtSelection` IPC request mechanism entirely, and request `FontAttributes`. This
        allows us to set the currently selected NSFont on the NSFontManager, and also update the font manager with the
        full dictionary of font attributes.

        Test: FontAttributes.FontAttributesAfterChangingSelection

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

        Encode and decode the new `hasMultipleFonts` flag in FontAttributes. Additionally, take this opportunity to
        modernize some of the decoding-side logic by decoding each member into a `std::optional` and creating the final
        deserialized FontAttributes at the end.

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

        Rather than grabbing just the font family and font size using `fontAtSelection`, request FontAttributes instead
        and convert it to a NSDictionary to call `-[NSFontManager setSelectedAttributes:isMultiple:]`.

        (WebKit::WebViewImpl::typingAttributesWithCompletionHandler):
        (WebKit::WebViewImpl::changeFontAttributesFromSender):
        (WebKit::WebViewImpl::changeFontFromFontManager):

        Remove code to update the font manager after changing font attributes. This is unnecessary because the process
        of executing an edit command in order to change typing style will trigger an editor state update anyways, which
        then causes us to request new font attributes.

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

        Move the check for cached fontattributes to WebPageProxy, from WebViewImpl. This allows us to get rid of a
        helper function on WebPageProxy to grab the current cached font attributes.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didUpdateEditorState):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didUpdateEditorState):

        Set cached FontAttributes (if present) *prior* to dispatching a selection change. This allows any subsequent
        request for font attributes at the selection to return immediately with the result.

        (WebKit::WebPageProxy::fontAtSelection): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Remove the `FontAtSelectionCallback` IPC message (and all associated code). This codepath was previously only
        exercised when updating the font panel on macOS, and is no longer necessary because we just use
        `requestFontAttributesAtSelectionStart` instead, which allows us to grab not only the NSFont, but also all
        platform typing attributes at the selection.

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

2022-01-12  Alex Christensen  <achristensen@webkit.org>

        Build WebKitSwift when building with make or build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=235093

        Reviewed by Alexey Proskuryakov.

        For various internal reasons, we have to have no depency between the two,
        but we command line builders want to build and test it just like everyone else.

        * Makefile:

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

        [iOS] Page loading hangs for ~10s on WebProcess launch
        https://bugs.webkit.org/show_bug.cgi?id=235089

        Reviewed by Eric Carlson.

        WebPage::setMuted() will result in calling into the current audioCaptureFactory,
        which will be by default CoreAudioAudioCaptureFactory unless replaced. 
        CoreAudioAudioCaptureFactory will in turn call into AVAudioSession, which will block
        for multiple seconds due to the WebContent process sandbox.

        Change the order in which these calls occur by configuring the audioCaptureFactory
        in platformInitialize(), which occurs near the top of the constructor. This requires
        access to the WebPageCreationParameters passed into the constructor, modify that method
        to take a WebPageCreationParameters, and modify all the platform-specific definitions of
        that method.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitialize): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitializeAccessibility):
        (WebKit::WebPage::platformInitialize): Deleted.
        * WebProcess/WebPage/playstation/WebPagePlayStation.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformInitialize):

2022-01-12  Frédéric Wang  <fwang@igalia.com>

        Protect DocumentLoader when a reference to its members is used.
        https://bugs.webkit.org/show_bug.cgi?id=233464

        Reviewed by Brady Eidson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadForFrame): If the navigationID is obsolete, skip update
        of the page load state to avoid failure of debug ASSERT.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad): Ensure that DocumentLoader loader
        remains alive while DocumentLoader::m_request is used.

2022-01-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove Direct2D code (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=235097

        Reviewed by Yusuke Suzuki.

        * UIProcess/BackingStore.h:
        (): Deleted.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::sizeDidChange):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::deviceScaleFactorDidChange):
        * UIProcess/win/PageClientImpl.cpp:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):

2022-01-11  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make SVG resources create remote ImageBuffers for their drawing
        https://bugs.webkit.org/show_bug.cgi?id=235073
        rdar://87402419

        Reviewed by Darin Adler.

        * GPUProcess/graphics/QualifiedResourceHeap.h:
        (WebKit::QualifiedResourceHeap::get const):
        Do not assert here if the entry of the HashMap does not hold a variant
        of the required type. We already return nullptr without assertion if there
        is no entry for the required renderingResourceIdentifier. We should let
        the caller decides what to do in the case of error.

2022-01-11  Geoffrey Garen  <ggaren@apple.com>

        WebPageProxy destruction should not launch a network process
        https://bugs.webkit.org/show_bug.cgi?id=235086

        Reviewed by Alex Christensen.

        Inspired by a backtrace in rdar://86706412.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::~WebPageProxy): No need to message the network
        process requesting our removal if it doesn't exist.

2022-01-11  Alex Christensen  <achristensen@webkit.org>

        Remove references to moved/deleted files in WebKit.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=235090

        Reviewed by Yusuke Suzuki.

        * WebKit.xcodeproj/project.pbxproj:

2022-01-11  BJ Burg  <bburg@apple.com>

        [Cocoa] Inspector Extensions: tabIconURLs with custom scheme URLs are incorrectly loaded
        https://bugs.webkit.org/show_bug.cgi?id=235045
        <rdar://problem/87357027>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
        (-[_WKInspectorExtension createTabWithName:tabIconURL:sourceURL:completionHandler:]):
        Construct a WTF::URL from the .baseURL and the .relativePath of the NSURL.

2022-01-11  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early January 2022 edition
        https://bugs.webkit.org/show_bug.cgi?id=235013

        Unreviewed non-unified build fixes.

        * Platform/IPC/SharedBufferCopy.cpp: Add missing WebCoreArgumentCoders.h header, remove now
        unneeded ArgumentCoders.h header.

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Web process crashes in some sites having SVG images
        https://bugs.webkit.org/show_bug.cgi?id=234737

        Reviewed by Adrian Perez de Castro.

        Use AccessibilityAtspi::singleton().

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::accessibilityAtspi const): Deleted.
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r287863 - adjust line wrapping behavior in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=235035
        rdar://85139146

        Reviewed by Tim Horton.

        Use the `-shouldWrap` property to compute `hasTrailingNewline`. See WebCore/ChangeLog for more details.

        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::makeTextRecognitionResult):

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for a -shouldWrap property when injecting Live Text
        https://bugs.webkit.org/show_bug.cgi?id=235035
        rdar://85139146

        Reviewed by Tim Horton.

        Consult the new SPI property (behind a runtime selector check), and pass the boolean flag through the
        TextRecognitionResult.

        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::makeTextRecognitionResult):

2022-01-10  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * PlatformMac.cmake:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setInlineMediaPlaybackRequiresPlaysInlineAttribute:]):

2022-01-10  Per Arne Vollan  <pvollan@apple.com>

        [MacCatalyst] Add syscalls from iOS sandbox
        https://bugs.webkit.org/show_bug.cgi?id=234970
        <rdar://problem/87262730>

        Reviewed by Darin Adler.

        Add syscalls from iOS sandbox that are not in the MacCatalyst sandbox, since these are potentially
        still needed on MacCatalyst.

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

2022-01-09  Sam Weinig  <weinig@apple.com>

        Remove support for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=234999

        Reviewed by Darin Adler.

        Direct2D and FTW have not been building for over a year. It is
        time to remove them.

        * PlatformFTW.cmake: Removed.
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Configuration::encode const):
        (WebKit::ShareableBitmap::Configuration::decode):
        (WebKit::ShareableBitmap::ShareableBitmap):
        (WebKit::ShareableBitmap::~ShareableBitmap):
        (WebKit::ShareableBitmap::numBytesForSize):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::createPlatformImage):
        (WebKit::ShareableBitmap::dxSurface): Deleted.
        * Shared/win/ShareableBitmapDirect2D.cpp: Removed.
        * UIProcess/BackingStore.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/BackingStoreDirect2D.cpp: Removed.
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::device const): Deleted.
        (WebKit::WebPageProxy::setDevice): Deleted.
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        (WebKit::WebPopupMenuProxyWin::paint):
        (WebKit::WebPopupMenuProxyWin::setupSwapChain): Deleted.
        (WebKit::WebPopupMenuProxyWin::configureBackingStore): Deleted.
        * UIProcess/win/WebPopupMenuProxyWin.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::onSizeEvent):
        (WebKit::WebView::setupSwapChain): Deleted.
        (WebKit::WebView::configureBackingStore): Deleted.
        * UIProcess/win/WebView.h:
        (WebKit::WebView::d3dDevice const): Deleted.
        (WebKit::WebView::d3dImmediateContext const): Deleted.
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch):

2022-01-08  Tyler Wilcock  <tyler_w@apple.com>

        AX: AccessibilityObject::setFocused(true) should make the webpage focused, and make web content the first responder
        https://bugs.webkit.org/show_bug.cgi?id=234885

        Reviewed by Darin Adler.

        With this patch, focusing an element via an AX client on iOS makes web content
        the first responder. This allows a focus ring to be drawn and for web content
        to perform other important actions upon taking first respondership
        (see `[WKContentViewInteraction becomeFirstResponderForWebView]`), even when apps
        that embed WKWebViews don't make web content the first responder themselves.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::assistiveTechnologyMakeFirstResponder):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::assistiveTechnologyMakeFirstResponder):

2022-01-07  Jean-Yves Avenard  <jya@apple.com>

        Remove IPC::SharedBufferDataReference and use IPC::SharedBufferCopy instead
        https://bugs.webkit.org/show_bug.cgi?id=234921
        rdar://problem/87196287

        Reviewed by Youenn Fablet.

        SharedBufferCopy didn't have to create a new SharedBuffer
        and copy its content; its IPC decoder can instead wrap the underlying
        SharedMemory into a SharedBuffer.
        Having removed those copies and extra allocations there's no longer a
        technical need to have both SharedBufferDataReference and SharedBufferCopy.

        The biggest winners of this change are the images transferred over IPC.
        We remove two memory allocation/copy the was occurring at both IPC
        boundaries.

        We also remove the need for SharedBufferCopy to use a contiguous
        SharedBuffer. This makes the IPC encoding much more efficient.
        Once transferred over IPC, with the current encoding implementation,
        the SharedBufferCopy automatically becomes a contiguous SharedBuffer,
        so calling makeContiguous() on the SharedBufferCopy is a no-op;
        this allows for zero regression speed-wise from this change.

        Fly-by changes: the PDF code uses IPC::DataReference object; the data
        was copied into a CFData or a SharedBuffer. By using IPC::SharedBufferCopy
        was can remove those copies as a SharedBuffer can be wrapped in a CFData.
        In the future, it's likely where such code pattern was used; more
        IPC::DataReference can be replaced broadly with IPC::SharedBufferCopy.

        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::createDecoder):
        (WebKit::RemoteImageDecoderAVFProxy::setData):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.messages.in:
        * GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp:
        (WebKit::convertToUint8Array):
        (WebKit::convertToOptionalSharedBuffer):
        (WebKit::RemoteLegacyCDMSessionProxy::generateKeyRequest):
        (WebKit::RemoteLegacyCDMSessionProxy::update):
        (WebKit::RemoteLegacyCDMSessionProxy::cachedKeyForKeyID):
        (WebKit::RemoteLegacyCDMSessionProxy::sendMessage):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp:
        (WebKit::ServiceWorkerDownloadTask::didReceiveData):
        * Platform/IPC/HandleMessage.h:
        * Platform/IPC/SharedBufferCopy.cpp:
        (IPC::SharedBufferCopy::encode const):
        (IPC::SharedBufferCopy::decode):
        (IPC::SharedBufferCopy::safeBuffer const):
        * Platform/IPC/SharedBufferCopy.h:
        (IPC::SharedBufferCopy::SharedBufferCopy):
        (IPC::SharedBufferCopy::buffer):
        (IPC::SharedBufferCopy::buffer const):
        (IPC::SharedBufferCopy::contiguousBuffer const):
        * Platform/IPC/SharedBufferDataReference.cpp: Removed.
        * Platform/IPC/SharedBufferDataReference.h: Removed.
        * Scripts/webkit/messages.py:
        (function_parameter_type):
        (reply_arguments_type):
        (message_to_struct_declaration):
        (generate_message_handler):
        * Shared/WebCompiledContentRuleListData.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<SerializedAttachmentData>::encode):
        (IPC::ArgumentCoder<WebCore::SerializedAttachmentData>::decode):
        * Sources.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::platformRegisterAttachment):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::CompletionHandler<void):
        (WebKit::WebPageProxy::drawToPDF):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::updateAttachmentAttributes):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebURLSchemeTask.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::setData):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.h:
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.cpp:
        (WebKit::RemoteImageDecoderAVFManager::createImageDecoder):
        * WebProcess/GPU/media/RemoteLegacyCDMSession.cpp:
        (WebKit::convertToArrayBuffer):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getContentsAsMHTMLData):
        (WebKit::WebPage::getSelectionAsWebArchiveData):
        (WebKit::WebPage::getMainResourceDataOfFrame):
        (WebKit::WebPage::getResourceDataFromFrame):
        (WebKit::WebPage::getWebArchiveOfFrame):
        (WebKit::WebPage::drawToPDF):
        (WebKit::WebPage::drawPagesToPDF):
        (WebKit::WebPage::didGetLoadDecisionForIcon):
        (WebKit::WebPage::urlSchemeTaskDidReceiveData):
        (WebKit::WebPage::updateAttachmentAttributes):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::drawToPDFiOS):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Can't getImageData on canvas larger than 4096x4096
        https://bugs.webkit.org/show_bug.cgi?id=234321
        <rdar://problem/83575501>

        Reviewed by Tim Horton.

        Consult the policy for how big a canvas can be, rather than hardcoding a number.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetPixelBufferHelper):

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Make FullscreenManager::requestFullscreenForElement more robust
        https://bugs.webkit.org/show_bug.cgi?id=234995

        Reviewed by Darin Adler.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::requestEnterFullScreen):

2022-01-07  Chris Lord  <clord@igalia.com>

        [GTK] REGRESSION: Kinetic scrolling via touch-screen behaves oddly
        https://bugs.webkit.org/show_bug.cgi?id=234958

        Reviewed by Michael Catanzaro.

        The swipe signal handler didn't take into account
        Scrollbar::pixelsPerLineStep() and also incorrectly negated the
        vertical velocity. Ideally, touch scrolling would use precise wheel
        events, but as the rest of the code works correctly and scales by this
        amount, make the one-line change that conforms with the previous code.

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

2022-01-07  Patrick Angle  <pangle@apple.com>

        REGRESSION(r286498): Web Inspector: Inspector^2 fails to load in release builds and crashes with an assertion in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=234968

        Reviewed by Devin Rousso.

        Inspector^2 would fail to open a local inspector frontend because m_inspectedPageIdentifier was not set before
        it was used in `WebInspectorUIProxy::createFrontendPage`. To correct this, we now cache the inspected page
        identifier immediately upon creating the WebInspectorUIProxy, instead of only in
        `WebInspectorUIProxy::updateForNewPageProcess`. This also allows us to use the cached identifier in
        `WebInspectorUIProxy::openLocalInspectorFrontend` as discussed in <http://webkit.org/b/233293#c5>.

        * UIProcess/Inspector/WebInspectorUIProxy.cpp:
        (WebKit::WebInspectorUIProxy::WebInspectorUIProxy):
        (WebKit::WebInspectorUIProxy::openLocalInspectorFrontend):

2022-01-07  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Remove the result FilterImage from FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232840
        rdar://85425842

        Reviewed by Darin Adler.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):

2022-01-07  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Driver: WebSocket over TLS failing over WebDriver with acceptInsecureCerts on Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=234403

        Reviewed by BJ Burg.
        
        macOS Big Sur and earlier do not use NSURLSession-based WebSockets, so we need a way to allow insecure
        certificates under automation that does not rely on the `WKNavigationDelegate` to determine if an
        authentication challenge should be accepted. In order to accomplish this we now plumb through an
        `_shouldAcceptInsecureCertificatesForWebSockets` value from `_WKAutomationSessionConfiguration` to
        `SocketStreamHandleImplCFNet` on platforms that do not `HAVE(NSURLSESSION_WEBSOCKET)`, which allows automation
        clients to enable this behavior when the `acceptInsecureCerts` capability is set on a session.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::createSocketStream):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::shouldAcceptInsecureCertificatesForWebSockets const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::create):
        (WebKit::NetworkSocketStream::NetworkSocketStream):
        * NetworkProcess/NetworkSocketStream.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration _shouldAcceptInsecureCertificatesForWebSockets]):
        (-[_WKWebsiteDataStoreConfiguration _setShouldAcceptInsecureCertificatesForWebSockets:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::shouldAcceptInsecureCertificatesForWebSockets const):
        (WebKit::WebsiteDataStoreConfiguration::setShouldAcceptInsecureCertificatesForWebSockets):

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails
        https://bugs.webkit.org/show_bug.cgi?id=232520
        <rdar://problem/84829717>

        Reviewed by Simon Fraser.

        Guard against the possibility of it returning null.

        No new tests because there shouldn't be any behavior change after https://bugs.webkit.org/show_bug.cgi?id=232470.
        It's still good to do this, though, to be defensive.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode const):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::createImageBufferBackendHandle):

2022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        ImageBuffer with floating point logicalSize() paints into a slightly truncated destination rect
        https://bugs.webkit.org/show_bug.cgi?id=225377

        Reviewed by Tim Horton.

        This is the rest of https://bugs.webkit.org/show_bug.cgi?id=232470.

        This is also a follow-up of https://bugs.webkit.org/show_bug.cgi?id=232515.

        No new tests; the behavior change is covered by
        fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
        since Tim Horton reverted the workaround for this bug that he landed in r276945.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287698.

        Broke an internal build

        Reverted changeset:

        "Start using C++20"
        https://bugs.webkit.org/show_bug.cgi?id=233963
        https://commits.webkit.org/r287698

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

        Use completion handlers for takeAllMessagesForPort methods
        https://bugs.webkit.org/show_bug.cgi?id=234947

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:

2022-01-07  Peng Liu  <peng.liu6@apple.com>

        Clean up FullscreenClient
        https://bugs.webkit.org/show_bug.cgi?id=233076

        Reviewed by Jer Noble.

        This patch is a follow-up to r285741.
        - Get rid of `WKFullscreenClientView` and use `WKWebView` instead.

        * UIProcess/Cocoa/FullscreenClient.h:
        * UIProcess/Cocoa/FullscreenClient.mm:
        (WebKit::FullscreenClient::FullscreenClient):
        (WebKit::FullscreenClient::willEnterFullscreen):
        (WebKit::FullscreenClient::didEnterFullscreen):
        (WebKit::FullscreenClient::willExitFullscreen):
        (WebKit::FullscreenClient::didExitFullscreen):

2022-01-07  Per Arne Vollan  <pvollan@apple.com>

        [MacCatalyst] Add required syscall
        https://bugs.webkit.org/show_bug.cgi?id=234962
        <rdar://87228791>

        Reviewed by Brent Fulgham.

        Add required syscall in MacCatalyst sandbox.

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

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Move linkedOnOrAfter() to WTF
        https://bugs.webkit.org/show_bug.cgi?id=234942

        Reviewed by Darin Adler.

        * NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForSessionID):
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::platformInitialize):
        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::shouldThrowExceptionForDuplicateCompletionHandlerCall):
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::determineITPState):
        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::InitializeWebKit2):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultPassiveTouchListenersAsDefaultOnDocument):
        (WebKit::defaultCSSOMViewScrollingAPIEnabled):
        (WebKit::defaultPassiveWheelListenersAsDefaultOnDocument):
        (WebKit::defaultWheelEventGesturesBecomeNonBlocking):
        (WebKit::defaultOfflineWebApplicationCacheEnabled):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageReload):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback):
        (shouldAllowSettingAnyXHRHeaderFromFileURLs):
        (shouldRequireUserGestureToLoadVideo):
        (shouldRestrictBaseURLSchemes):
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setupPageConfiguration:]):
        (-[WKWebView reload]):
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (defaultShouldDecidePolicyBeforeLoadingQuickLookPreview):
        (-[WKWebViewConfiguration init]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore init]):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _computedObscuredInset]):
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView _web_dragDestinationActionForDraggingInfo:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController inspectorWKWebViewReload:]):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::hasScrollableOrZoomedMainFrame const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::isMainThreadOrCheckDisabled):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _shouldUseContextMenus]):
        (applicationIsKnownToIgnoreMouseEvents):
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _systemContentInset]):
        * UIProcess/ios/WKStylusDeviceObserver.mm:
        (-[WKStylusDeviceObserver start]):
        (-[WKStylusDeviceObserver stop]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingRecommended):
        * WebProcess/cocoa/WebProcessCocoa.mm:

2022-01-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper function that returns the value of a std::optional<T> or constructs T if needed
        https://bugs.webkit.org/show_bug.cgi?id=234865

        Reviewed by Darin Adler.

        Use `valueOrDefault` where appropriate. See WTF/ChangeLog for more details.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::ensureSWServer):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::fileTimes):
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::NetworkStorageManager):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadRequest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::registrableDomain const):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromPDFViewToRootView const):
        (WebKit::PDFPlugin::boundsOnScreen const):
        (WebKit::PDFPlugin::geometryDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didEnterFullscreen):

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Separate "linked-on-or-{before, after}-everything" override from the SDK version
        https://bugs.webkit.org/show_bug.cgi?id=234930

        Reviewed by Wenson Hsieh.

        * Shared/AuxiliaryProcess.h:
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::platformInitialize):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getLinkedOnOrAfterOverride):
        Plumb the LOA override optional through process initialization (just like
        we do for SDK version, because linkedOnOrAfter() is used VERY early in
        JavaScriptCore initialization).

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _setLinkedOnOrBeforeEverythingForTesting]):
        (+[WKProcessPool _setLinkedOnOrAfterEverythingForTesting]):
        (+[WKProcessPool _setLinkedOnOrAfterEverything]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        Expose non-testing SPI for Safari to opt in to "linked-on-or-after-everything"
        so that we can (eventually) stop using a bundle identifier check.

        * UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm:
        (WebKit::ProcessLauncher::launchProcess):

        * UIProcess/WebProcessPool.cpp:
        Initialize the LOA override using the same logic we previously used in linkedOnOrAfter().

2022-01-06  Youenn Fablet  <youenn@apple.com>

        Microphone device filtering heuristic is too harsh
        https://bugs.webkit.org/show_bug.cgi?id=234596
        <rdar://problem/86803287>

        Reviewed by Eric Carlson.

        * UIProcess/WebPageProxy.cpp:
        Disable filtering if audio capture happens in GPUProcess.

2022-01-06  Tim Horton  <timothy_horton@apple.com>

        Always assume Safari is "linked-on-or-after" any SDK version
        https://bugs.webkit.org/show_bug.cgi?id=234914

        Reviewed by Aditya Keerthi.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        Get rid of this special-case AssumeSafariIsAlwaysLinkedOnAfter::No,
        from r244203, because we no longer target versions of macOS that
        ship with versions of Safari that require this special case.

2022-01-06  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:
        * PlatformMac.cmake:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setInlineMediaPlaybackRequiresPlaysInlineAttribute:]):

2022-01-06  Chris Dumez  <cdumez@apple.com>

        Drop implementation for COOP / COEP violation reporting
        https://bugs.webkit.org/show_bug.cgi?id=234899

        Reviewed by Geoffrey Garen.

        Drop implementation for COOP / COEP violation reporting. The implementation was based on an outdated version of the specification
        and has never shipped. Many COOP/COEP reporting tests are also flaky.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::performCORPCheck):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptNavigationForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::shouldInterruptWorkerLoadForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::doCrossOriginOpenerHandlingOfResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        (WebKit::WebPage::sendCOEPPolicyInheritenceViolation): Deleted.
        (WebKit::WebPage::sendCOEPCORPViolation): Deleted.
        (WebKit::WebPage::sendViolationReportWhenNavigatingToCOOPResponse): Deleted.
        (WebKit::WebPage::sendViolationReportWhenNavigatingAwayFromCOOPResponse): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::webSocketChannelManager):
        (WebKit::WebProcess::reportingEndpointsCache): Deleted.

2022-01-06  Jean-Yves Avenard  <jya@apple.com>

        Have CachedRawResourceClient and related networking actors use SharedBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=232424
        rdar://84744687

        Reviewed by Youenn Fablet.

        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::dataReceived):
        * GPUProcess/media/RemoteMediaResource.h:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveData):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveData):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::sendBuffer):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveData):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::didReceiveBuffer):
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp:
        (WebKit::ServiceWorkerDownloadTask::didReceiveData):
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::didReceiveData):
        (WebKit::ServiceWorkerFetchTask::loadBodyFromPreloader):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
        (WebKit::ServiceWorkerNavigationPreloader::didReceiveBuffer):
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveBuffer):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::didReceiveData):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidReceiveData):
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * Platform/IPC/SharedBufferCopy.h:
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::didParseTracks):
        * Shared/mac/MediaFormatReader/MediaFormatReader.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveData):
        * UIProcess/WebURLSchemeTask.h:
        * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:
        (WebKit::RemoteMediaResourceProxy::dataReceived):
        * WebProcess/GPU/media/RemoteMediaResourceProxy.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData):
        (WebKit::PDFPlugin::streamDidReceiveData):
        (WebKit::PDFPlugin::manualStreamDidReceiveData):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didReceiveData):
        (WebKit::PluginView::manualLoadDidReceiveData):
        (WebKit::PluginView::redeliverManualStream):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
        (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::committedLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        (WebKit::WebPreviewLoaderClient::didReceiveData):
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::urlSchemeTaskDidReceiveData):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveData):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.h:

2022-01-06  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerNavigationPreloader::didComplete should make sure to call its bodyCallback
        https://bugs.webkit.org/show_bug.cgi?id=234884

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
        Call to responseCallback may destroy the ServiceWorkerNavigationPreloader.
        To make sure to call its bodyCallback, we move it in the stack before calling responseCallback.

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Small ImageBuffers cause the web process to crash
        https://bugs.webkit.org/show_bug.cgi?id=232470
        <rdar://problem/84626560>

        Reviewed by Tim Horton.

        The problem is when the (floating point) size < 1x1, but the size*resolution is >= 1x1.
        In this situation, calculateSafeBackendSize() is correctly determining that this
        isn't a zero-sized ImageBuffer, but when we go to actually pass the size to the GPU
        process, we call this:

        IntSize logicalSize() const override { return IntSize(m_parameters.logicalSize); }

        So, the logical size gets truncated down to 0, and then the GPU process fails to allocate
        the ImageBuffer, and then the web process blocks on the GPU process indefinitely, and then
        eventually times out and then crashes. I'm going to deal with that last step (the crash
        itself) in a secondary patch - if the web process doesn't hear from the GPU process, it
        shouldn't crash.

        This patch simply exposes a floatLogicalSize() function on ImageBuffer, so we can get
        the full-fidelity logical size to pass that to the GPU process.

        This patch is just enough to stop WebKit from crashing. I'm going to continue looking into this bug in
        https://bugs.webkit.org/show_bug.cgi?id=225377.

        Test: compositing/device-pixel-image-buffer-hidpi.html

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

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

        REGRESSION(287556): Domain name not shown in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=234903

        Reviewed by Brent Fulgham.

        After r287556, domain names are no longer shown in Activity Monitor. The Networking process is responsible for setting
        process information on behalf of the WebContent process. Before r287556, this worked because a connection to the associated
        mach service was established before entering the sandbox. After r287556 we explicitly need to allow access to the service,
        since the sandbox has been applied when process information is set. In practice, access to the service was already allowed
        before, since an open connection to the service was established before entering the sandbox.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

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

        [iOS][WP] Allow syscall used on process launch
        https://bugs.webkit.org/show_bug.cgi?id=234898
        <rdar://86914492>

        Reviewed by Brent Fulgham.

        Allow syscall used on WebContent process launch on iOS.

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

2022-01-05  Devin Rousso  <drousso@apple.com>

        REGRESSION(r285521): `errors` provided to `ApplePaySession.prototype.completeCouponCodeChange` are ignored
        https://bugs.webkit.org/show_bug.cgi?id=234893
        <rdar://problem/86780827>

        Reviewed by Tim Horton.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completeCouponCodeChange):
        Make sure to actually set the `errors` of the `PKPaymentRequestCouponCodeUpdate` using the
        `errors` inside `ApplePayShippingMethodUpdate`. This was accidentally removed in r285521.

2022-01-05  Tim Horton  <timothy_horton@apple.com>

        Move more SDK checks to linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=234875

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCSSOMViewScrollingAPIEnabled):

2022-01-05  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebWheelEvent):

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

        [iOS][WP] Unable to consume mach extension
        https://bugs.webkit.org/show_bug.cgi?id=234889
        <rdar://86870109>

        Reviewed by Brent Fulgham.

        The WebContent process on iOS is unable to consume mach extensions to the frontboard service.

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

2022-01-05  Youenn Fablet  <youenn@apple.com>

        NetworkRTCProvider::attributedBundleIdentifierFromPageIdentifier should check for m_connection
        https://bugs.webkit.org/show_bug.cgi?id=234845
        <rdar://82120356>

        Reviewed by Eric Carlson.

        NetworkRTCProvider may call attributedBundleIdentifierFromPageIdentifier in a background thread,
        which will then hop to main thread to get its session.
        NetworkRTCProvider might have been closed when getting to main thread so we need to check m_connection. 

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::attributedBundleIdentifierFromPageIdentifier):

2022-01-05  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Momentum tails may get truncated if the duration runs longer than the system's
        https://bugs.webkit.org/show_bug.cgi?id=234535
        <rdar://problem/86338105>

        Reviewed by Simon Fraser.

        Currently, synthetic momentum dispatch is strictly tied to the duration
        of the real platform momentum phase, which has two unfortunate implications:

        - if our phase runs shorter than the platform phase, we'll keep dispatching
          zero-delta events until the platform momentum ends

        - more importantly, if our phase runs longer, it will be abruptly terminated
          when the platform momentum ends

        In practice, our synthetic phase is very close in duration to the system one,
        so the impact is minimal. But, to be safe, disentagle the two durations,
        using a new bit from the platform to determine if the system momentum phase
        was interrupted by the user (e.g. by tapping the trackpad) or naturally,
        and ignoring the ended event in the natural case, allowing synthetic
        events to continue being dispatched.

        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode const):
        (WebKit::WebWheelEvent::decode):
        * Shared/WebWheelEvent.h:
        (WebKit::WebWheelEvent::momentumEndType const):
        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::coalesce):
        Plumb momentumEndType along on WebWheelEvent. Platforms that don't
        provide information about the interruption reason will always say Unknown.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):
        Only bother looking up the CGEvent/IOHIDEvent once, and extract all
        relevant details in one go.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        Don't interrupt the synthetic momentum phase if the momentum-ended event
        comes from the natural end of the deceleration instead of an interruption
        (or an unknown reason).

        Keep track of whether we're in the middle of a platform momentum phase
        that we chose (at momentum-begin time) to override. When deciding
        whether to eat an incoming event, take *both* this new bit and whether
        we are currently in the middle of a synthetic phase into account. It
        is important to continue eating incoming events in the case where 
        the synthetic phase ended early (so `active` became false) but the
        platform phase continues.

        (WebKit::MomentumEventDispatcher::dispatchSyntheticMomentumEvent):
        (WebKit::MomentumEventDispatcher::didEndMomentumPhase):
        Adjust some logging wording to be more precise.

        (WebKit::MomentumEventDispatcher::setScrollingAccelerationCurve):
        Make this log public so that the curve value is visible in logs.

        (WebKit::MomentumEventDispatcher::consumeDeltaForCurrentTime):
        Make consumeDeltaForCurrentTime inform the client via an optional when
        we are at the end of the delta table.

        (WebKit::MomentumEventDispatcher::displayWasRefreshed):
        Stop the synthetic momentum phase as soon as we run out of deltas.

        (WebKit::MomentumEventDispatcher::computeNextDelta):
        * WebProcess/WebPage/MomentumEventDispatcher.h:

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

        [macCatalyst][GPUP][NetworkProcess] Block WindowServer connections
        https://bugs.webkit.org/show_bug.cgi?id=234432
        <rdar://problem/85990387>

        Reviewed by Brent Fulgham.

        Block WindowServer connections on macCatalyst.

        * GPUProcess/mac/GPUProcessMac.mm:
        (WebKit::GPUProcess::initializeProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcess):
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::setApplicationIsDaemon):
        * WebAuthnProcess/mac/WebAuthnProcessMac.mm:
        (WebKit::WebAuthnProcess::initializeProcess):

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

        [macOS][WP] Block sandbox access to syscall
        https://bugs.webkit.org/show_bug.cgi?id=234846
        <rdar://problem/87093120>

        Reviewed by Brent Fulgham.

        Block sandbox access to syscall which only is needed on MacCatalyst.

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

2022-01-05  Youenn Fablet  <youenn@apple.com>

        Make sure secure websocket connections in service workers can trigger authentication challenge callbacks
        https://bugs.webkit.org/show_bug.cgi?id=234809
        <rdar://85888177>

        Reviewed by Chris Dumez.

        In case we are not using fast server trust evaluation, we are going to the UIProcess to check certificates.
        This is an issue for web socket loads triggered for service workers that have an invalid certificate.
        Before the patch, the challenge was not provided a top origin, so the default action would be triggered by UIProcess.
        To make sure this is working as expected, we now always pass the origin if it is the same as the top origin for web socket challenges.
        This makes sure we get a page with the same top origin and the challenge callback is called on the page.

        Covered by updated tests.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/NetworkSocketChannel.cpp:
        * NetworkProcess/NetworkSocketChannel.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        * NetworkProcess/soup/NetworkSessionSoup.h:
        * WebProcess/Network/WebSocketChannel.cpp:

2022-01-05  Youenn Fablet  <youenn@apple.com>

        WebPageProxy::requestUserMediaPermissionForSpeechRecognition should return early in case of no capture devices
        https://bugs.webkit.org/show_bug.cgi?id=234837
        <rdar://87055505>

        Reviewed by Chris Dumez.

        Test: fast/speechrecognition/start-recognition-without-devices.html

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

2022-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        ASSERTION FAILED: pathnames.size() == sandboxExtensionsHandleArray.size() in WebKit::WebPlatformStrategies::getPathnamesForType()
        https://bugs.webkit.org/show_bug.cgi?id=234851
        rdar://87100377

        Reviewed by Darin Adler.

        The new API test added r287547 (WKAttachmentTestsMac.InsertNonExistentImageFileAsAttachment) exercises inserting
        a nonexistent file as a "progress" attachment element when the WebKit attachment API is enabled. This test is
        the first on macOS that attempts to paste file paths pointing to nonexistent files on disk, and so it hits an
        existing assertion due to the number of sandbox extensions opened underneath `getPasteboardPathnamesForType()`
        not matching the number of file paths found on the pasteboard.

        This assertion is benign, since we do not expect to be able to read from the missing file path in the web
        process, so it's expected that we don't have a corresponding sandbox extension for missing files. To address
        this, we adjust `WebPasteboardProxy::getPasteboardPathnamesForType()` such that it always returns an equal
        number of path names and pathnames. Each missing path name simply corresponds to a `SandboxExtension::Handle`
        with a null `m_sandboxExtension`, which is skipped in the web process upon consumption.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):

2022-01-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r287374.

        Caused assertion failures on Monterey

        Reverted changeset:

        "Re-enable CustomDisplayName and DefaultDisplayName API tests
        on Monterey"
        https://bugs.webkit.org/show_bug.cgi?id=234613
        https://commits.webkit.org/r287374

2022-01-04  Simon Fraser  <simon.fraser@apple.com>

        "canceled" wheel events to non-zero deltas cause scrolling jumps in PDFs and CodeMirror
        https://bugs.webkit.org/show_bug.cgi?id=234825

        Reviewed by Tim Horton.

        On some macOS versions, interrupting a momentum scroll via a two-finger tap on the trackpad can
        result in the following sequence of wheel events: momentumPhase:end -> phase:mayBegin -> phase:cancelled,
        and that last canceled event can have non-zero deltas (rdar://86653042).

        Protect against this by zeroing out the deltas for cancelled wheel events when constructing WebEvents
        from NSEvents. Code in Element::dispatchWheelEvent() ensures that we don't dispatch wheel events with
        zero deltas to script, fixing CodeMirror.

        Jumps only affected PDFs (and scrollable selects) because those are the code paths that don't go via
        ScrollingEffectsController, which already ignores Cancelled events.

        Test: fast/scrolling/mac/canceled-event-with-non-zero-deltas.html

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):

2022-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use ICU instead of relying on hard-coded string equality checks in ModalContainerControlClassifier
        https://bugs.webkit.org/show_bug.cgi?id=234677

        Reviewed by Tim Horton.

        Followup to r287420 - use ICU to check for more strings that resemble either the lowercase or uppercase letter
        "x", rather than relying on a hard-coded set of symbols. Note that ICU's "confusables" list currently does not
        consider both ✖ and ✕ to be lookalikes to the letter "x"; since these symbols are actually known to appear in
        modal containers on several websites, we'll still need to check for these two symbols separately.

        Test: ModalContainerObservation.ClassifyMultiplySymbol

        * UIProcess/Cocoa/ModalContainerControlClassifier.mm:
        (WebKit::SpoofChecker::~SpoofChecker):

        Add a helper class that wraps calls to `uspoof_areConfusableUTF8`, and also ensures balanced calls to
        `uspoof_open` and `uspoof_close` when creating a new ICU spoof checker. Use this in the
        WKModalContainerClassifierInput class below to check for more types of strings that look like the letter "x".

        (WebKit::SpoofChecker::areConfusable):
        (WebKit::SpoofChecker::checker):
        (-[WKModalContainerClassifierInput initWithTokenizer:rawInput:]):

2022-01-04  Per Arne Vollan  <pvollan@apple.com>

        [iOS][WP] Add telemetry for syscall violations
        https://bugs.webkit.org/show_bug.cgi?id=234859

        Reviewed by Brent Fulgham.

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

2022-01-04  Kate Cheney  <katherine_cheney@apple.com>

        CrashTracer: com.apple.WebKit.Networking at com.apple.WebKit: WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess
        https://bugs.webkit.org/show_bug.cgi?id=234852
        <rdar://problem/87068976>

        Reviewed by Brent Fulgham.

        Return early if a sqlite statement is null or fails to bind because this
        will cause a crash when trying to step. Even in cases where it won't
        crash, we should not continue in the function because this may have
        undefined behavior.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getThirdPartyDataForSpecificFirstPartyDomains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::earliestTimesToSend):

2022-01-04  Kate Cheney  <katherine_cheney@apple.com>

        Partial revert of https://trac.webkit.org/changeset/287371/webkit

        RS by John Wilander.

        Keep logging in for test debugging purposes.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting):

2022-01-04  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Disable noisy logging
        https://bugs.webkit.org/show_bug.cgi?id=234178
        <rdar://problem/86228553>

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/MomentumEventDispatcher.h:

2022-01-04  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
        https://bugs.webkit.org/show_bug.cgi?id=234753

        Reviewed by Eric Carlson.

        Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.

        * GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h:
        (WebKit::AudioTrackPrivateRemoteConfiguration::encode const):
        (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::configuration):
        (WebKit::RemoteAudioTrackProxy::configurationChanged):
        * GPUProcess/media/RemoteAudioTrackProxy.h:
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::configuration):
        * GPUProcess/media/RemoteVideoTrackProxy.h:
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        (WebKit::TrackPrivateRemoteConfiguration::decode):
        * GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h:
        (WebKit::VideoTrackPrivateRemoteConfiguration::encode const):
        (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
        (WebKit::VideoTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.h:
        (WebKit::VideoTrackPrivateRemote::create):

2022-01-03  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Initialize sandbox before initializing WebKit process
        https://bugs.webkit.org/show_bug.cgi?id=234827

        Reviewed by Brent Fulgham.

        The sandbox should be initialized as early as possible in WebKit processes.

        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):

2022-01-03  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Build fix after r287552
        https://bugs.webkit.org/show_bug.cgi?id=234828

        Unreviewed build fix.

        Needed WebCore prefixing on SRGBA.

        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:

2022-01-03  Sam Weinig  <weinig@apple.com>

        Add resolved/unresolved color type accessors to require users to be explicit about whether they will handle missing/none color components
        https://bugs.webkit.org/show_bug.cgi?id=234798

        Reviewed by Antti Koivisto.

        Replace uses of Color::toSRGBALossy<>() with Color::toColorTypeLossy<SRGBA<>>() and add
        calls to resolved() to access color components.

        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:
        (drawPageBackground):
        * UIProcess/API/wpe/WebKitColor.cpp:
        (webkitColorFillFromWebCoreColor):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::animationValueFromKeyframeValue):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::getDocumentBackgroundColor):

2022-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Camera continuity is disabled in richly editable content
        https://bugs.webkit.org/show_bug.cgi?id=234773
        rdar://46323417

        Reviewed by Darin Adler.

        `-[WKWebView validRequestorForSendType:returnType:]` currently never returns a nonnull result when the given
        send type is nil, because `WebViewImpl::validRequestorForSendAndReturnTypes` only sets `isValidSendType` to
        anything other than false if `sendType` is nonnull. Instead of doing this, we should match legacy WebKit
        behavior by treating the send type as "valid" if it's nil.

        Test: NSResponderTests.ValidRequestorForReturnTypes

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

2022-01-01  Jeff Miller  <jeffm@apple.com>

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

        Reviewed by Anders Carlsson.

        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-OSX.plist:
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-iOS.plist:
        * Info.plist:
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkService/Info-iOS.plist:
        * WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-OSX.plist:
        * WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-iOS.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-iOS.plist:

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some Cocoa-specific code in WebCore::FontAttributes to be platform-agnostic
        https://bugs.webkit.org/show_bug.cgi?id=234757

        See comments below (as well as WebCore/ChangeLog) for more details.

        Reviewed by Darin Adler.

        * Platform/cocoa/CocoaFont.h: Removed.

        Move this file into WebCore, as `FontCocoa.h`.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        * Shared/Cocoa/CoreTextHelpers.h:
        * Shared/Cocoa/CoreTextHelpers.mm:

        Adjust a few places that currently import CocoaFont.h to import WebCore/FontCocoa.h instead. Additonally, change
        CocoaFont to WebCore::CocoaFont where necessary.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::FontAttributes>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<WebCore::FontAttributes>::decodePlatformData): Deleted.

        Remove platform-specific FontAttributes encoding/decoding logic. This is no longer needed, since we just
        propagate a Font instead of an NSFont or UIFont.

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

        Add argument coders for `RefPtr<Font>` that encode the font only if it's non-null.

        (IPC::ArgumentCoder<FontAttributes>::encode):
        (IPC::ArgumentCoder<FontAttributes>::decode):

        Remove the calls to `encodePlatformData/decodePlatformData`, and instead encode the `RefPtr<WebCore::Font>`.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/playstation/WebCoreArgumentCodersPlayStation.cpp:
        (IPC::ArgumentCoder<FontAttributes>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<FontAttributes>::decodePlatformData): Deleted.
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<FontAttributes>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<FontAttributes>::decodePlatformData): Deleted.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (IPC::ArgumentCoder<FontAttributes>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<FontAttributes>::decodePlatformData): Deleted.

        Remove some method stubs that are now unnecessary.

        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (fontOfSize):
        * WebKit.xcodeproj/project.pbxproj:

2021-12-26  Sam Weinig  <weinig@apple.com>

        Replace WebKit/CocoaColor.h with WebCore/ColorCocoa.h, not confusing at all
        https://bugs.webkit.org/show_bug.cgi?id=234693

        Reviewed by Simon Fraser.

        We don't need both. The WebCore one can work for both.

        * Platform/cocoa/CocoaColor.h: Removed.
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::typeFromObject):
        (IPC::encodeColorInternal):
        (IPC::encodeObject):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView themeColor]):
        (-[WKWebView underPageBackgroundColor]):
        (-[WKWebView setUnderPageBackgroundColor:]):
        (-[WKWebView _themeColor]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _sampledPageTopColor]):
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest initWithCoder:]):
        (-[_WKApplicationManifest themeColor]):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (colorForItem):
        (-[WKSafeBrowsingBox setSafeBrowsingBackgroundColor:]):
        (-[WKSafeBrowsingWarning showDetailsClicked]):
        (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):

2021-12-26  Yousuke Kimoto  <Yousuke.Kimoto@sony.com>

        RemoteInspectorProtocolHandler::inspect() expects ConnectionID as uint32_t
        https://bugs.webkit.org/show_bug.cgi?id=234657

        Reviewed by Don Olmstead.

        connectionID a parameter of ScriptMessageClient::didPostMessage() is casteed as <int>.
        Since ConnectionID is define as uint32_t, it should be casted as <uint32_t>.

        * UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.cpp: Fixed cast for connectionID.

2021-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285088.
        https://bugs.webkit.org/show_bug.cgi?id=234680

        From A/B test, we probably need to revert both, 285087 and
        285088

        Reverted changeset:

        "Web process shouldn't crash if
        ImageBuffer::ensureBackendCreated() fails"
        https://bugs.webkit.org/show_bug.cgi?id=232520
        https://commits.webkit.org/r285088

2021-12-24  Simon Fraser  <simon.fraser@apple.com>

        Apply the scroll delta in the "began" wheel event
        https://bugs.webkit.org/show_bug.cgi?id=234645

        Reviewed by Wenson Hsieh.

        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::nextEventToDispatch): Fix logging typo.

2021-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container control classifier fails on some neutral controls that contain multiplication symbols
        https://bugs.webkit.org/show_bug.cgi?id=234651

        Reviewed by Tim Horton.

        Treat several ASCII symbols that resemble the letter "x" (i.e. several types of multiplication signs) as the
        letter "x" when massaging the raw text content of controls in modal containers into canonical form for the text
        classifier. This allows such controls to be (correctly) tagged as "neutral" controls, for the purposes of
        delegating modal container policy decisions to the WebKit client.

        Test: ModalContainerObservation.ClassifyMultiplySymbol

        * UIProcess/Cocoa/ModalContainerControlClassifier.mm:
        (-[WKModalContainerClassifierInput initWithTokenizer:rawInput:]):
        (WebKit::computePredictions):

2021-12-23  Sihui Liu  <sihui_liu@apple.com>

        Don't create LocalStorage database for read if it does not exist
        https://bugs.webkit.org/show_bug.cgi?id=234569

        Reviewed by Alex Christensen.

        If database does not exists when read, we can return empty or null, instead of creating an empty database.

        New API test: WKWebView.LocalStorageNoRecordAfterGetItem

        * NetworkProcess/storage/SQLiteStorageArea.cpp:
        (WebKit::SQLiteStorageArea::isEmpty):
        (WebKit::SQLiteStorageArea::prepareDatabase):
        (WebKit::SQLiteStorageArea::getItemFromDatabase):
        (WebKit::SQLiteStorageArea::allItems):
        (WebKit::SQLiteStorageArea::setItem):
        (WebKit::SQLiteStorageArea::removeItem):
        (WebKit::SQLiteStorageArea::clear):
        * NetworkProcess/storage/SQLiteStorageArea.h:

2021-12-23  Matt Woodrow  <mattwoodrow@apple.com>

        Check allowed network hosts list when we schedule the load in the network process
        https://bugs.webkit.org/show_bug.cgi?id=234543
        <rdar://83501315>

        Reviewed by Alex Christensen.

        The check for WKWebViewConfiguration._allowedNetworkHost previously happened before the check to see if
        the given ResourceRequest would directly from an archive.
        This moves to the allowed network host list check to happen when we schedule the network request, and thus
        allows subresources cached within an archive to load, even if their original URL would be blocked.
        We also need to check when redirecting to prevent an allowed domain from redirecting to a forbidden domain.
        This also makes it so that WKWebViewConfiguration._loadsSubresources only prevents
        subresource loads that would touch the network, so we can't use WKURLSchemeHandler to test it any more.
        That's fine, since the two users of the SPI only load URLs from the network.

        New test LoadWebArchive.DisallowedNetworkHosts added.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):

2021-12-23  Brent Fulgham  <bfulgham@apple.com>

        Allow a necessary syscall in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=234641
        <rdar://problem/86808395>

        Reviewed by Alan Bujtas.

        Telemetry and testing logs indicate that we need to allow
        'SYS_memorystatus_control' in our WebContent sandbox.

        We allow this in all other sandboxes, so this was likely an oversight.

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

2021-12-23  Brady Eidson  <beidson@apple.com>

        Add WTF::UUID class which is natively a 128-bit integer
        https://bugs.webkit.org/show_bug.cgi?id=234571

        Reviewed by Alex Christensen.

        Notifications - which are UUID identified - are now addressed by a UUID object instead of a v4 UUID string.
        
        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::cancelNotification):
        (WebKit::NetworkNotificationManager::clearNotifications):
        (WebKit::NetworkNotificationManager::didDestroyNotification):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

        * Scripts/webkit/messages.py:
        (forward_declarations_and_headers_for_replies):
        (headers_for_type):

        * Shared/Notifications/NotificationManagerMessageHandler.h:
        * Shared/Notifications/NotificationManagerMessageHandler.messages.in:

        * UIProcess/API/C/WKNotification.cpp:
        (WKNotificationCopyCoreIDForTesting):
        * UIProcess/API/C/WKNotification.h:

        * UIProcess/API/C/WKNotificationManager.cpp:
        (WKNotificationManagerProviderDidClickNotification_b):
        * UIProcess/API/C/WKNotificationManager.h:

        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::coreNotificationID const):

        * UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp:
        (WebKit::WebNotificationManagerMessageHandler::cancelNotification):
        (WebKit::WebNotificationManagerMessageHandler::clearNotifications):
        (WebKit::WebNotificationManagerMessageHandler::didDestroyNotification):
        * UIProcess/Notifications/WebNotificationManagerMessageHandler.h:

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::cancel):
        (WebKit::WebNotificationManagerProxy::didDestroyNotification):
        (WebKit::pageIDsMatch):
        (WebKit::pageAndNotificationIDsMatch):
        (WebKit::WebNotificationManagerProxy::clearNotifications):
        (WebKit::WebNotificationManagerProxy::providerDidClickNotification):
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::cancelNotification):
        (WebKit::WebPageProxy::clearNotifications):
        (WebKit::WebPageProxy::didDestroyNotification):
        * UIProcess/WebPageProxy.h:

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleCopyWebNotificationID):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::webNotificationID):
        * WebProcess/InjectedBundle/InjectedBundle.h:

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didShowNotification):
        (WebKit::WebNotificationManager::didClickNotification):
        (WebKit::WebNotificationManager::didCloseNotifications):
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/Notifications/WebNotificationManager.messages.in:

2021-12-23  Sihui Liu  <sihui_liu@apple.com>

        Ensure file handles used in FileSystemAccess API are closed
        https://bugs.webkit.org/show_bug.cgi?id=234520

        Reviewed by Darin Adler.

        Replace FileSystem::PlatformFileHandle with WebCore::FileHandle in SharedFileHandle to ensure file handle get 
        closed, if it's not released for use.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::createSyncAccessHandle):
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::createSyncAccessHandle):
        * Platform/IPC/SharedFileHandle.cpp:
        (IPC::SharedFileHandle::create):
        (IPC::SharedFileHandle::close): Deleted.
        * Platform/IPC/SharedFileHandle.h:
        (IPC::SharedFileHandle::release):
        (IPC::SharedFileHandle::SharedFileHandle):
        (IPC::SharedFileHandle::handle): Deleted.
        (): Deleted.
        * Platform/IPC/cocoa/SharedFileHandleCocoa.cpp:
        (IPC::SharedFileHandle::create):
        (IPC::SharedFileHandle::encode const):
        (IPC::SharedFileHandle::decode):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::createSyncAccessHandle):

2021-12-22  Alex Christensen  <achristensen@webkit.org>

        Re-enable WebPushD.HandleInjectedPush API test
        https://bugs.webkit.org/show_bug.cgi?id=234627

        Reviewed by Brady Eidson.

        I needed to make an entitlement check return true when using the non-internal SDK,
        which can't sign private entitlements into a binary.  I also needed to make the fake
        TestWebKitAPI code signing identifier match the identifier that arm64 Macs actually get,
        or else m_testingPushMessages would not contain the right key in Daemon::getPendingPushMessages
        on arm64 Macs.

        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::hostAppCodeSigningIdentifier):
        (WebPushD::ClientConnection::hostHasEntitlement):

2021-12-22  Michael Saboff  <msaboff@apple.com>

        Fix WebKit Build issues when using system content path
        https://bugs.webkit.org/show_bug.cgi?id=234624

        Reviewed by Filip Pizlo.

        Added SYSTEM_CONTENT_PATH processing to the nested frameworks path (UMBRELLA_FRAMEWORKS_DIR).

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:

2021-12-22  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] metromile.com <select> dropdowns open twice
        https://bugs.webkit.org/show_bug.cgi?id=234573
        rdar://84011144

        Reviewed by Wenson Hsieh.

        metromile.com calls focus() twice on the same <select> element, when one
        is tapped. Note that calling focus() on an already focused element still
        sends the ElementDidFocus message to the UIProcess, to support scenarios
        where the initial call to focus did not bring up an input peripheral.
        One example of such a scenario is when the initial call is not a result
        of user interaction, however, there are additional scenarios that are
        dependent on UIProcess state. This makes it difficult to ensure that
        ElementDidFocus is only called when it is time to show an input peripheral.

        `-[WKContentView _elementDidFocus:...]` already contains some logic to
        prevent showing another input peripheral for the same element. This
        logic was added in r168744, checking for the same element by comparing
        input types and bounding rects.

        However, in between the first and second call to focus(), the page
        applies additional padding to the element, changing its bounding rect.
        This results in `_elementDidFocus:` going past the same element check
        and presenting another dropdown.

        In the time since r168744 was written, a more robust mechanism to check
        for the same element was added – ElementContext.

        To fix, update the same element check to use ElementContext, ensuring an
        attempt to present a new peripheral for the same element is not made.

        Test: fast/forms/ios/refocus-select-after-size-change.html

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

2021-12-22  Sihui Liu  <sihui_liu@apple.com>

        WebsiteDataStore::excludeDirectoryFromBackup should set attribute for existing directories
        https://bugs.webkit.org/show_bug.cgi?id=234404

        Reviewed by Youenn Fablet.

        createDirectoryAtURL returning false means directory cannot be created, but the cause can be that directory 
        already exists; so we should set exclude attribute on the directory no matter createDirectoryAtURL returns true
        or false. Also, we can use existing FileSystem functions. 

        API test: WKWebView.LocalStorageDirectoryExcludedFromBackup

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::excludeDirectoryFromBackup): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-12-22  Alex Christensen  <achristensen@webkit.org>

        Re-enable CustomDisplayName and DefaultDisplayName API tests on Monterey
        https://bugs.webkit.org/show_bug.cgi?id=234613

        Reviewed by Brady Eidson.

        When we introduced setting the display name from the network process,
        we didn't update the tests to get the information from the process that can access it.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/mac/NetworkConnectionToWebProcessMac.mm:
        (WebKit::NetworkConnectionToWebProcess::updateActivePages):
        (WebKit::NetworkConnectionToWebProcess::getProcessDisplayName):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::getProcessDisplayName):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::auditTokenForSelf):
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::getProcessDisplayName):
        (WebKit::WebProcess::updateActivePages):

2021-12-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r287364.
        https://bugs.webkit.org/show_bug.cgi?id=234620

        broke 3 API tests

        Reverted changeset:

        "Preferences that read from NSUserDefaults need to be
        initialied from platformInitializeStore()"
        https://bugs.webkit.org/show_bug.cgi?id=234488
        https://commits.webkit.org/r287364

2021-12-22  Kate Cheney  <katherine_cheney@apple.com>

        PCM tests crashing with 'unlink' errors
        https://bugs.webkit.org/show_bug.cgi?id=234565
        <rdar://problem/86771766>

        Reviewed by Alex Christensen.

        Close PCM and ITP databases before deleting their database files in
        API testing. This adds 2 new SPIs on WKWebsiteDataStore to close the
        respective databases. It also addresses the renaming FIXME for
        NetworkProcess::simulatePrivateClickMeasurementSessionRestart.

        No new tests. This will fix existing crashing PCM API tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::closeITPDatabase):
        (WebKit::NetworkProcess::closePCMDatabase):
        (WebKit::NetworkProcess::simulatePrivateClickMeasurementSessionRestart):
        (WebKit::NetworkProcess::simulateResourceLoadStatisticsSessionRestart): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::destroyPrivateClickMeasurementStore):
        (WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting):
        (WebKit::NetworkSession::recreatePrivateClickMeasurementStore): Renamed.
        Renamed to be more accurate. This function only deletes the database,
        then the call in the completion handler recreates it. This also makes
        it more clear when we reuse it to close the database.

        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSimulatePrivateClickMeasurementSessionRestart):
        (WKPageSimulateResourceLoadStatisticsSessionRestart): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _closeDatabases:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::simulatePrivateClickMeasurementSessionRestart):
        (WebKit::WebPageProxy::simulateResourceLoadStatisticsSessionRestart): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::closeDatabases):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-12-22  Alex Christensen  <achristensen@webkit.org>

        Fix compiling with pickier compiler
        https://bugs.webkit.org/show_bug.cgi?id=234593

        Reviewed by Brady Eidson.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize):

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

        [iOS] Scroll view pinch zoom gesture sometimes fails to recognize in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=234584
        rdar://84379650

        Reviewed by Simon Fraser.

        WKWebView may get into a state where the pinch zoom gesture recognizer on its scroll view sometimes fails to
        transition to Changed state (and invoke its action, which sets the zoomScale of the scroll view); this happens
        because the scroll view pinch gesture requires the touch start deferring gesture recognizer (TSDG) to fail, but
        it's possible for TSDG to remain stuck in Possible state over the duration of a gesture after beginning a touch
        over content with either passive touch event listeners, or no touch event listeners.

        In the case where the TSDG is stuck in Possible state, we observe the following sequence of events (let's
        suppose the user is starting a touch over a passive touch event listener on a web page):

        1.      The UITouch is delivered to the web touch event gesture recognizer, which fires the action
                (`-_webTouchEventsRecognized:`). We observe that we're over an async touch event handling region (i.e.
                passive or no touch event listeners), so we immediately "lift the gesture gate" by transitioning all
                deferring gesture recognizers to Failed state, (with the intent that they won't prevent native gestures
                from recognizing).

        2.      A UITouch is then delivered to the TSDG in the same runloop as UIKit continues to deliver the touch
                event to all gestures in the `NSSet` of gesture recognizers on the window. Receiving the UITouch causes
                TSDG (which we already set to Failed state in step (1)) to internally reset and transition back to
                Possible state, underneath WebKit.

        3.      TSDG is now in possible state after the gesture has begun, but we've already tried to unblock native
                gestures. When performing the second touch of the pinch zoom gesture, the pinch zoom gesture fails to
                commence because it's stuck waiting for TSDG to fail.

        In the normal (working) scenario, step (2) happens before step (1); this ensures that TSDG is set to Failed
        state and remains in Failed state over the course of the gesture, thereby preventing the bug from happening. The
        order in which (1) and (2) happen is dependent on the order in which the web touch event gesture and TSDG are
        iterated in UIKit's `NSSet` of gestures, which explains why this bug only reproduces some of the time.

        This patch mitigates this by adding a mechanism to keep track of touch start deferrers that we've already
        transitioned to Failed state during the course of a gesture, and uses this information to avoid adding failure
        requirements to these deferring gestures that have already been "ungated". This ensures that even if the
        deferring gesture resets to Possible state from underneath WebKit, we still avoid pushing out native gesture
        recognition due to these deferring gestures.

        As an aside, I initially attempted to avoid having TSDG transition back to Possible state altogether in this
        scenario, but this doesn't seem to be avoidable (short of overriding the SPI method `-_resetGestureRecognizer`
        and not calling the superclass, which does not seem to be supported behavior).

        Test: fast/events/touch/ios/pinch-zoom-with-passive-touch-event-listeners.html

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _doneDeferringTouchStart:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

2021-12-22  Simon Fraser  <simon.fraser@apple.com>

        Preferences that read from NSUserDefaults need to be initialied from platformInitializeStore()
        https://bugs.webkit.org/show_bug.cgi?id=234488

        Reviewed by Sam Weinig.

        Having the default value for a preference read from NSUserDefaults can cause issues
        if the UIProcess and WebProcess values don't match. Instead, have platformInitializeStore()
        explicitly add values for these keys; this is done for scrollAnimatorEnabledKey.

        * UIProcess/Cocoa/WebPreferencesCocoa.mm:
        (WebKit::WebPreferences::initializePlatformDependentPreferences):
        (WebKit::WebPreferences::platformInitializeStore):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::initializePlatformDependentPreferences):
        * UIProcess/WebPreferences.h:

2021-12-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285087.
        https://bugs.webkit.org/show_bug.cgi?id=234605

        iPad PLUM3 GPUP 10% regression

        Reverted changeset:

        "[GPU Process] Small ImageBuffers cause the web process to
        crash"
        https://bugs.webkit.org/show_bug.cgi?id=232470
        https://commits.webkit.org/r285087

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

        Propagate app-initiated state to new ResourceRequests
        https://bugs.webkit.org/show_bug.cgi?id=234015
        <rdar://problem/86128638>

        Reviewed by Kate Cheney.

        While reviewing logging we have found that some ResourceRequest objects
        are missing the correct state for app-initiated loads. Typically, these
        are cases where a new ResourceRequest is created from a URL string, losing
        the context that came with the original load (or the context of the page
        triggering the load).

        This patch corrects a number of such cases.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage): Propagate app-initiated state to newly created page.
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode const): Correct missing serialization for
        app-initiated state.
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Fix some API tests after r287341
        https://bugs.webkit.org/show_bug.cgi?id=232857

        I found the cause of the strange failures and verified my "fix" on an Intel Mac and an Apple Silicon Mac.

        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::hostAppCodeSigningIdentifier):

2021-12-21  Sihui Liu  <sihui_liu@apple.com>

        Use fileURLWithPath instead of URLWithString in WebsiteDataStore::excludeDirectoryFromBackup
        https://bugs.webkit.org/show_bug.cgi?id=234582
        rdar://86787798

        Reviewed by Simon Fraser.

        URLWithString may return nil while fileURLWithPath does not; and fileURLWithPath adds file:// to path correctly.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::excludeDirectoryFromBackup):

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Re-enable ContextMenu API tests
        https://bugs.webkit.org/show_bug.cgi?id=234585
        <rdar://59610140>

        Reviewed by Tim Horton.

        UIKit changed the internal driver interface to simulate events to show context menus for our tests.
        This follows the change and makes our tests work again.

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

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

        Make Notification identifiers be a UUID string instead of a uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=234534

        Reviewed by Alex Christensen.
        
        This is mostly changing a whole bunch of uint64_ts to Strings, but also gets rid of lots of weird
        and fragile maps.

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::cancelNotification):
        (WebKit::NetworkNotificationManager::clearNotifications):
        (WebKit::NetworkNotificationManager::didDestroyNotification):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:
        * Shared/Notifications/NotificationManagerMessageHandler.h:
        * Shared/Notifications/NotificationManagerMessageHandler.messages.in:

        * UIProcess/API/C/WKNotification.cpp:
        (WKNotificationCopyCoreIDForTesting):
        * UIProcess/API/C/WKNotification.h:

        * UIProcess/API/C/WKNotificationManager.cpp:
        (WKNotificationManagerProviderDidClickNotification_b):
        (WKNotificationManagerProviderDidRemoveNotificationPolicies):
        (WKNotificationManagerGetLocalIDForTesting): Deleted.
        * UIProcess/API/C/WKNotificationManager.h:

        * UIProcess/Notifications/WebNotification.cpp:
        (WebKit::WebNotification::WebNotification):
        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::create):
        (WebKit::WebNotification::notificationID const):
        (WebKit::WebNotification::coreNotificationID const):
        (WebKit::WebNotification::pageIdentifier const):

        * UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp:
        (WebKit::WebNotificationManagerMessageHandler::cancelNotification):
        (WebKit::WebNotificationManagerMessageHandler::clearNotifications):
        (WebKit::WebNotificationManagerMessageHandler::didDestroyNotification):
        * UIProcess/Notifications/WebNotificationManagerMessageHandler.h:

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::show):
        (WebKit::WebNotificationManagerProxy::cancel):
        (WebKit::WebNotificationManagerProxy::didDestroyNotification):
        (WebKit::pageIDsMatch):
        (WebKit::pageAndNotificationIDsMatch):
        (WebKit::WebNotificationManagerProxy::clearNotifications):
        (WebKit::WebNotificationManagerProxy::providerDidShowNotification):
        (WebKit::WebNotificationManagerProxy::providerDidClickNotification):
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications):
        (WebKit::generateGlobalNotificationID): Deleted.
        (WebKit::WebNotificationManagerProxy::notificationLocalIDForTesting): Deleted.
        * UIProcess/Notifications/WebNotificationManagerProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::cancelNotification):
        (WebKit::WebPageProxy::clearNotifications):
        (WebKit::WebPageProxy::didDestroyNotification):
        * UIProcess/WebPageProxy.h:

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleCopyWebNotificationID):
        (WKBundleGetWebNotificationID): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::webNotificationID):
        * WebProcess/InjectedBundle/InjectedBundle.h:

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::didDestroyNotification):
        (WebKit::WebNotificationManager::didShowNotification):
        (WebKit::WebNotificationManager::didClickNotification):
        (WebKit::WebNotificationManager::didCloseNotifications):
        (WebKit::generateNotificationID): Deleted.
        (WebKit::WebNotificationManager::notificationIDForTesting): Deleted.
        (WebKit::WebNotificationManager::clearNotifications): Deleted.
        (WebKit::WebNotificationManager::removeNotificationFromContextMap): Deleted.
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/Notifications/WebNotificationManager.messages.in:

        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::show):
        (WebKit::WebNotificationClient::cancel):
        (WebKit::WebNotificationClient::notificationObjectDestroyed):
        (WebKit::WebNotificationClient::clearNotifications): Deleted.
        * WebProcess/WebCoreSupport/WebNotificationClient.h:

2021-12-21  Eliot Hsu  <eliot_hsu@apple.com>

        Fix Safari-side SafeBrowsing telemetry
        https://bugs.webkit.org/show_bug.cgi?id=234439

        Reviewed by Alex Christensen.

        Fix old (and privacy-preserving) telemetry for Safe Browsing,
        which were previously reported from the Safari side.

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

2021-12-21  Kate Cheney  <katherine_cheney@apple.com>

        Harden PCM and ITP databases against crashes
        https://bugs.webkit.org/show_bug.cgi?id=234528
        <rdar://problem/86741319>

        Reviewed by Brent Fulgham.

        This patch does two things. First, it specifies a column type for the
        new destination token, keyID and signature columns. This was causing
        the crashes in rdar://86347439 by comparing the defined CREATE TABLE query
        with types to the existing query with no types. Second, it adds
        hardening to the migration code to abort migration if one of the steps
        fails. This will help prevent future crashes like rdar://86347439
        by aborting a migration early if a failure occurs and not leaving the
        db in a messy state.

        No new tests. No behavior change, this will harden against flaky issues
        that may cause a migration to fail part way through, like I/O errors.

        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::migrateDataToNewTablesIfNecessary):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::addDestinationTokenColumnsIfNecessary):

2021-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for a UI delegate method to decide how to handle detected modal containers
        https://bugs.webkit.org/show_bug.cgi?id=234440
        rdar://77073735

        Reviewed by Darin Adler.

        Add support for a new UI delegate method, `-_webView:decidePolicyForModalContainer:decisionHandler:`, that is
        invoked when a modal container has been detected and suppressed due to a WebKit client specifying the
        `_WKWebsiteModalContainerObservationPolicyPrompt` option in webpage preferences. This new delegate method is
        invoked with a new `_WKModalContainerInfo` object, which (for now) just encapsulates an option set of
        ModalContainerControlTypes that indicates which types of modal containers are available.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * SourcesCocoa.txt:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::decidePolicyForModalContainer):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (WebKit::modalContainerObservationPolicy):
        (WebKit::coreModalContainerObservationPolicy):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

        Remove support for two unused policy flags, `_WKWebsiteModalContainerObservationPolicyAllow` and
        `_WKWebsiteModalContainerObservationPolicyDisallow`. These are now obviated by the new decision handler return
        values `_WKModalContainerDecisionHideAndAllow` and `_WKModalContainerDecisionHideAndDisallow`, respectively.
        While this leaves us with only two policy modes (such that the policy can now be turned into a single BOOL
        switch), I'm keeping the named enum flags for now, since:

        1. The existing names do a better job of describing their respective behaviors than a single BOOL flag like
        `modalContainerObserverShouldPrompt`, or `modalContainerObserverEnabled`, and...

        2. We'll probably need to extend this policy set to add a new value in the near future, anyways.

        * UIProcess/API/Cocoa/_WKModalContainerInfo.h:
        * UIProcess/API/Cocoa/_WKModalContainerInfo.mm:
        (-[_WKModalContainerInfo initWithTypes:]):
        * UIProcess/API/Cocoa/_WKModalContainerInfoInternal.h:
        * UIProcess/Cocoa/ModalContainerControlClassifier.mm:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::coreModalContainerDecision):
        (WebKit::UIDelegate::UIClient::decidePolicyForModalContainer):

        Add plumbing for the new chrome client hook through WebChromeClient, WebPage, WebPageProxy, and finally the UI
        client.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForModalContainer):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::decidePolicyForModalContainer):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        ASSERT NOT REACHED under WebKit::Daemon::ConnectionToMachService seen with TestWebKitAPI.WebPushD.BasicCommunication and PermissionManagement
        https://bugs.webkit.org/show_bug.cgi?id=232857

        Reviewed by Darin Adler.

        When using the public SDK, don't code sign with an entitlements file that contains restricted entitlements,
        otherwise webpushd won't launch.  Also, don't compile files we aren't going to use.

        * Configurations/webpushd.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2021-12-21  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Authenticator is not falling back to clientPIN after internal verification fails and is blocked.
        https://bugs.webkit.org/show_bug.cgi?id=232501
        <rdar://problem/84913636>

        Reviewed by Darin Adler.

        Whenever internal uv gets blocked, the user agent should fall back to using a pin for user verification. This
        patch starts doing that by going into the pin flow whenever the authenticator returns the pin required error
        code.

        Added API test for fallback.

        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::tryRestartPin):

2021-12-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        IPC streams should not accept 0-length stream buffers
        https://bugs.webkit.org/show_bug.cgi?id=234552
        <rdar://79725420>

        Reviewed by Antti Koivisto.

        Make decoding 0-length stream buffers fail. These buffers are not useful.

        No new tests, tests need additional implementation, will be added
        in subsequent commits.

        * Platform/IPC/StreamConnectionBuffer.cpp:
        (IPC::StreamConnectionBuffer::StreamConnectionBuffer):
        (IPC::StreamConnectionBuffer::decode):

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

        Add ModalContainerControlClassifier and use it to implement classifyModalContainerControls()
        https://bugs.webkit.org/show_bug.cgi?id=234322

        Reviewed by Devin Rousso.

        Introduce and implement ModalContainerControlClassifier. This singleton uses the NaturalLanguage and CoreML
        frameworks on Cocoa to classify strings as one of four modal container control types. See below for more
        details.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/ModalContainerControlClassifier.h: Added.
        * UIProcess/Cocoa/ModalContainerControlClassifier.mm: Added.
        (-[WKModalContainerClassifierBatch initWithRawInputs:]):
        (-[WKModalContainerClassifierBatch count]):
        (-[WKModalContainerClassifierBatch featuresAtIndex:]):
        (-[WKModalContainerClassifierInput initWithTokenizer:rawInput:]):
        (-[WKModalContainerClassifierInput featureNames]):
        (-[WKModalContainerClassifierInput featureValueForName:]):

        Add Objective-C objects that implement the MLBatchProvider and MLFeatureProvider protocols, respectively.
        WKModalContainerClassifierBatch is essentially a wrapper around a list of WKModalContainerClassifierInput; each
        WKModalContainerClassifierInput is initialized with a raw string, and uses NLTokenizer to filter out non-word
        characters and tokenize the raw input into a single space-separated, lower case string (referred to as the
        "canonical" input format).

        (WebKit::ModalContainerControlClassifier::ModalContainerControlClassifier):
        (WebKit::ModalContainerControlClassifier::sharedClassifier):

        Return the singleton instance (this must be accessed on the main thread).

        (WebKit::computePredictions):

        Static helper method that takes a list of strings and an MLModel, and classifies each string using the model,
        and the Objective-C helper classes above.

        (WebKit::ModalContainerControlClassifier::classify):

        This method exposes the primary functionality of the classifier, which is to take a list of raw strings
        representing text in clickable controls, and asynchronously return a list of class labels representing the
        predicted control type for each of the strings. Note that this method needs to be invoked on the main thread
        (and will also invoke the completion handler on the main thread), but the process of loading the MLModel and
        using it to predict input strings is done in a work queue ("com.apple.WebKit.ModalContainerControlClassifier").

        (WebKit::ModalContainerControlClassifier::loadModelIfNeeded):

        Load the MLModel from a predetermined bundle resource name; returns immediately if the model has
        already been created. While this happens synchronously, this is always invoked on a background queue and never
        blocks the main thread.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::classifyModalContainerControls):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::classifyModalContainerControls):
        * WebKit.xcodeproj/project.pbxproj:

2021-12-20  Alexey Shvayka  <ashvayka@apple.com>

        [WebIDL] convertVariadicArguments() should return a FixedVector
        https://bugs.webkit.org/show_bug.cgi?id=232639

        Reviewed by Yusuke Suzuki.

        Add / remove tokens one by one because there is no way to retrieve
        the size of va_list in advance so we could construct a FixedVector.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.cpp:
        (webkit_dom_dom_token_list_add):
        (webkit_dom_dom_token_list_remove):

2021-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        WC variant RemoteGraphicsContextGL::platformLayer() should be removed
        https://bugs.webkit.org/show_bug.cgi?id=233756
        <rdar://problem/86261919>

        Reviewed by Kimmo Kinnunen.

        WinCairo is using TextureMapperGCGLPlatformLayer as the WebGL
        PlatformLayer at the moment, that is using only a single output
        buffer. And, WinCairo doesn't transfer the WebGL output buffer
        cross-process boundary even in GPU process mode. Based on these
        assumptions, r285099 added platformLayer() method to
        RemoteGraphicsContextGL to get a PlatformLayer and pass it to the
        compositor in GPU process.

        However, this is not appropriate. The output buffer identifier
        should be transferred to web process by using the completion
        handler of RemoteGraphicsContextGL::PrepareForDisplay message.
        Then, the identifier will be passed back to GPU process.

        Added WCContentBufferManager to manage the WebGL output buffer
        identifiers. However, because TextureMapperGCGLPlatformLayer has
        only a single output buffer, the maximum number of identifiers is
        one for each PlatformLayer now.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didClose):
        (WebKit::GPUConnectionToWebProcess::releaseWCLayerTreeHost):
        (WebKit::GPUConnectionToWebProcess::findRemoteGraphicsContextGL): Deleted.
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGL.messages.in:
        * GPUProcess/graphics/RemoteGraphicsContextGLWin.cpp:
        (WebKit::RemoteGraphicsContextGLWin::prepareForDisplay):
        (WebKit::RemoteGraphicsContextGL::prepareForDisplay): Deleted.
        (WebKit::RemoteGraphicsContextGL::platformLayer const): Deleted.
        * GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp:
        (WebKit::RemoteWCLayerTreeHost::RemoteWCLayerTreeHost):
        (WebKit::RemoteWCLayerTreeHost::update):
        * GPUProcess/graphics/wc/RemoteWCLayerTreeHost.h:
        * GPUProcess/graphics/wc/WCContentBuffer.h: Added.
        * GPUProcess/graphics/wc/WCContentBufferManager.cpp: Added.
        (WebKit::WCContentBufferManager::ProcessInfo::ProcessInfo):
        (WebKit::WCContentBufferManager::ProcessInfo::acquireContentBufferIdentifier):
        (WebKit::WCContentBufferManager::ProcessInfo::releaseContentBufferIdentifier):
        (WebKit::WCContentBufferManager::ProcessInfo::removeContentBuffer):
        (WebKit::WCContentBufferManager::singleton):
        (WebKit::WCContentBufferManager::acquireContentBufferIdentifier):
        (WebKit::WCContentBufferManager::releaseContentBufferIdentifier):
        (WebKit::WCContentBufferManager::removeContentBuffer):
        (WebKit::WCContentBufferManager::removeAllContentBuffersForProcess):
        * GPUProcess/graphics/wc/WCContentBufferManager.h: Added.
        * GPUProcess/graphics/wc/WCScene.cpp:
        (WebKit::WCScene::WCScene):
        (WebKit::WCScene::update):
        * GPUProcess/graphics/wc/WCScene.h:
        * PlatformWin.cmake:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (conditions_for_header):
        * Shared/wc/WCContentBufferIdentifier.h: Added.
        * WebProcess/GPU/graphics/wc/RemoteGraphicsContextGLProxyWC.cpp:
        * WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h:
        (WebKit::WCPlatformLayerGCGL::takeContentBufferIdentifiers):
        (WebKit::WCPlatformLayerGCGL::addContentBufferIdentifier):
        (WebKit::WCPlatformLayerGCGL::WCPlatformLayerGCGL): Deleted.
        (WebKit::WCPlatformLayerGCGL::graphicsContextGLIdentifier): Deleted.
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::setContentsNeedsDisplay):
        (WebKit::GraphicsLayerWC::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/wc/WCUpateInfo.h:
        (WebKit::WCLayerUpateInfo::encode const):
        (WebKit::WCLayerUpateInfo::decode):

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

        Add some missing API availability macros around some WebXR SPI
        https://bugs.webkit.org/show_bug.cgi?id=234521

        Reviewed by Tim Horton.

        Add some missing API availability macros around some WebXR-related SPI that was introduced in r286318.
        Also remove a few unnecessary `PLATFORM(COCOA)` compile-time guards, and add a missing `#import` to fix the
        non-unified build.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/PlatformXRCoordinator.mm:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):

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

        Prevent test functionality in AdAttributionDaemon when not running tests
        https://bugs.webkit.org/show_bug.cgi?id=231258
        <rdar://84168088>

        Reviewed by Brady Eidson.

        adattributiond already has a private entitlement check to make sure that only the network process has permission to connect to it.
        This makes it so that the network process can't manipulate state only intended to be manipulated for tests when told to do so by
        an application misusing SPI.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::allowsPrivateClickMeasurementTestFunctionality const):
        (WebKit::NetworkProcess::setPrivateClickMeasurementOverrideTimerForTesting):
        (WebKit::NetworkProcess::simulateResourceLoadStatisticsSessionRestart):
        (WebKit::NetworkProcess::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::NetworkProcess::setPrivateClickMeasurementEphemeralMeasurementForTesting):
        (WebKit::NetworkProcess::setPrivateClickMeasurementTokenPublicKeyURLForTesting):
        (WebKit::NetworkProcess::setPrivateClickMeasurementTokenSignatureURLForTesting):
        (WebKit::NetworkProcess::setPrivateClickMeasurementAttributionReportURLsForTesting):
        (WebKit::NetworkProcess::markPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::NetworkProcess::setPCMFraudPreventionValuesForTesting):
        (WebKit::NetworkProcess::setPrivateClickMeasurementAppBundleIDForTesting):
        * NetworkProcess/NetworkProcess.h:

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

        [ Monterey ] TestWebKitAPI.WebSocket.PageWithAttributedBundleIdentifierDestroyed (API-test) is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=233224

        Reviewed by Darin Adler.

        Using NSURLSession._attributedBundleIdentifier requires the com.apple.private.network.socket-delegate entitlement,
        which can't be signed into the network process with the public SDK.

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

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

        Minor cleanup in AuthenticationServicesCoreSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=234514

        Reviewed by Devin Rousso.

        When using the Apple internal SDK, directly import <AuthenticationServicesCore/ASCWebKitSPISupport.h> instead of
        relying on forward declarations (or, in this case, relying on a previous unified source to import the header
        through WebKitAdditions).

        Additionally leave a FIXME to clean up the rest of this file by importing the private headers directly when
        building with the internal SDK (and falling back to forward declarations in non-internal builds).

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:

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

        Improve UserMediaPermissionRequestManagerProxy logging
        https://bugs.webkit.org/show_bug.cgi?id=234508

        Reviewed by Eric Carlson.

        Make sure the log identifier is correct and log whether there are cameras and/or microphones exposed.
        No observable change of behavior.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):

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

        Add client layer plumbing for classifying modal container controls
        https://bugs.webkit.org/show_bug.cgi?id=234320

        Reviewed by Dean Jackson.

        See WebCore/ChangeLog for more details.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::classifyModalContainerControls):

        Add a method stub with a comment for now. The next patch in the sequence will implement this method hook on
        Cocoa platforms.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestCookieConsent):

        Drive-by fix: remove an unnecessary WebCore:: prefix.

        (WebKit::WebChromeClient::classifyModalContainerControls):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-12-18  Darin Adler  <darin@apple.com>

        Hash tables, read/write, and heap memory are used unnecessarily, which may hurt performance
        https://bugs.webkit.org/show_bug.cgi?id=234438

        Reviewed by Anders Carlsson.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::sortedTables): Simplify unnecessarily complicated
        expression to initialize the Span.

        * Shared/Cocoa/DefaultWebBrowserChecks.h: Return a Span instead of an optional Vector.
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::appBoundDomainsForTesting): Renamed from getAppBoundDomainsTesting to fit WebKit
        coding style a bit better, and be a little more grammatical. Removed an un-needed HashMap
        that had only a single entry, used a NeverDestroyed std::array rather than a Vector so we
        don't use any heap or read/write memory.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::addTestDomains const): Rewrite to use the function above.
        Fewer special cases needed since we are just using an empty Span, which efficiently
        does nothing, so no need to have a distinct null value.

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

        Move CacheStorage engines from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=234448

        Reviewed by Alex Christensen.

        Move CacheStorage engines from NetworkProcess to NetworkSession, as they are per-session.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::~NetworkProcess): Deleted.
        (WebKit::NetworkProcess::findCacheEngine): Deleted.
        (WebKit::NetworkProcess::ensureCacheEngine): Deleted.
        (WebKit::NetworkProcess::removeCacheEngine): Deleted.
        (WebKit::NetworkProcess::cacheStorageRootPath): Deleted.
        (WebKit::NetworkProcess::setCacheStorageParameters): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel):
        (WebKit::NetworkSession::ensureCacheEngine):
        (WebKit::NetworkSession::clearCacheEngine):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::cacheEngine):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::create):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::open):
        (WebKit::CacheStorage::Engine::remove):
        (WebKit::CacheStorage::Engine::retrieveCaches):
        (WebKit::CacheStorage::Engine::retrieveRecords):
        (WebKit::CacheStorage::Engine::putRecords):
        (WebKit::CacheStorage::Engine::deleteMatchingRecords):
        (WebKit::CacheStorage::Engine::lock):
        (WebKit::CacheStorage::Engine::unlock):
        (WebKit::CacheStorage::Engine::clearMemoryRepresentation):
        (WebKit::CacheStorage::Engine::representation):
        (WebKit::CacheStorage::Engine::clearAllCaches):
        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
        (WebKit::CacheStorage::Engine::Engine):
        (WebKit::CacheStorage::Engine::from): Deleted.
        (WebKit::CacheStorage::Engine::destroyEngine): Deleted.
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::~CacheStorageEngineConnection):
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):
        (WebKit::CacheStorageEngineConnection::clearMemoryRepresentation):
        (WebKit::CacheStorageEngineConnection::engineRepresentation):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Read the default value of the ScrollAnimatorEnabled setting from NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=234456

        Reviewed by Tim Horton.

        It's impossible for a test to run with an animated keyboard scroll because platformAllowsScrollAnimation(),
        which reads from NSUserDefaults, always trumps the Setting.

        Fix by initializing the setting from NSUserDefaults and removing the platformAllowsScrollAnimation()
        check. This allows for a WebKitTestRunner test override the setting. Remove the WTR code 
        that sets @"NSScrollAnimationEnabled" to @NO.

        Unfortunately in WebKitLegacy AppKit code consults the @"NSScrollAnimationEnabled" key, so
        DumpRenderTree has to continue to initialize this NSUserDefault to @NO and tests that
        try to change the Setting will fail.

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
        (WebKit::defaultScrollAnimatorEnabled):
        * Shared/WebPreferencesDefaultValues.h:

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

        Convert ProtectionSpace enums into enum classes
        https://bugs.webkit.org/show_bug.cgi?id=234455

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::didReceiveChallenge):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::allowsSpecificHTTPSCertificateForHost):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::restartWithCredential):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::completeAuthentication):
        (WebKit::NetworkDataTaskSoup::cancelAuthentication):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::canCoalesceChallenge):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ProtectionSpace>::decode):
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        * UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_get_security_origin):
        * UIProcess/Authentication/WebProtectionSpace.cpp:
        (WebKit::WebProtectionSpace::serverType const):
        (WebKit::WebProtectionSpace::authenticationScheme const):
        * UIProcess/Authentication/WebProtectionSpace.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::processAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):

2021-12-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for detecting modal containers that contain a given search term
        https://bugs.webkit.org/show_bug.cgi?id=234214

        Reviewed by Tim Horton and Devin Rousso.

        Add a WebKitAdditions hook that implements a new chrome client method. See WebCore/ChangeLog for more details.

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

2021-12-17  Alex Christensen  <achristensen@webkit.org>

        Remove API::Object::Type::BundlePageGroup
        https://bugs.webkit.org/show_bug.cgi?id=225611

        Reviewed by Brady Eidson.

        Its last use was removed in rdar://77775952 and rdar://78783988

        * Shared/API/APIObject.h:
        * Shared/API/APIPageGroupHandle.cpp: Removed.
        * Shared/API/APIPageGroupHandle.h: Removed.
        * Shared/API/c/cg/WKImageCG.cpp:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/mac/MediaFormatReader/CoreMediaWrapped.cpp:
        * Sources.txt:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
        (-[WKWebProcessPlugInPageGroup identifier]): Deleted.
        (-[WKWebProcessPlugInPageGroup dealloc]): Deleted.
        (-[WKWebProcessPlugInPageGroup _apiObject]): Deleted.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroupInternal.h: Removed.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController pageGroup]): Deleted.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

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

        Move storage managers from the NetworkProcess to the NetworkSession class
        https://bugs.webkit.org/show_bug.cgi?id=234409

        Reviewed by Alex Christensen.

        Move storage managers from the NetworkProcess to the NetworkSession class since they are
        per session.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::hasLocalStorage):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::syncLocalStorage):
        (WebKit::NetworkProcess::clearStorage):
        (WebKit::NetworkProcess::renameOriginInWebsiteData):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        (WebKit::NetworkProcess::addStorageManagerForSession): Deleted.
        (WebKit::NetworkProcess::removeStorageManagerForSession): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel):
        (WebKit::NetworkSession::lowMemoryHandler):
        (WebKit::NetworkSession::addStorageManagerSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::storageManager):

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

        Unreviewed, reverting r286850.

        Put r282794 back in. It turns out it was an overall
        progression after all

        Reverted changeset:

        "Unreviewed, reverting r282794."
        https://bugs.webkit.org/show_bug.cgi?id=230517
        https://commits.webkit.org/r286850

2021-12-16  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Adjust syscall filter
        https://bugs.webkit.org/show_bug.cgi?id=234401

        Reviewed by Tim Horton.

        Adjust syscall filter in the WebContent process' sandbox on macOS. A syscall that was previously
        believed to only be used on Intel, is being used on all architectures.

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

2021-12-16  Alex Christensen  <achristensen@webkit.org>

        Remove more NPAPI plugin code
        https://bugs.webkit.org/show_bug.cgi?id=234379

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::pluginComplexTextInputIdentifier const): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::doneWithKeyEvent):
        (WebKit::WebViewImpl::interpretKeyEvent):
        (WebKit::WebViewImpl::inputContext):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyDown):
        (WebKit::WebViewImpl::disableComplexTextInputIfNecessary): Deleted.
        (WebKit::WebViewImpl::handlePluginComplexTextInputKeyDown): Deleted.
        (WebKit::WebViewImpl::tryHandlePluginComplexTextInputKeyDown): Deleted.
        (WebKit::WebViewImpl::pluginFocusOrWindowFocusChanged): Deleted.
        (WebKit::WebViewImpl::tryPostProcessPluginComplexTextInputKeyDown): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::pluginFocusOrWindowFocusChanged): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin): Deleted.
        (WebKit::WebPageProxy::pluginFocusOrWindowFocusChanged): Deleted.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::canCreateTransientPaintingSnapshot const): Deleted.
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::destroyPluginAndReset):
        (WebKit::PluginView::shouldCreateTransientPaintingSnapshot const):
        (WebKit::PluginView::sendComplexTextInput): Deleted.
        (WebKit::PluginView::privateBrowsingStateChanged): Deleted.
        (WebKit::PluginView::getFormValue): Deleted.
        (WebKit::PluginView::shouldNotAddLayer const): Deleted.
        (WebKit::PluginView::pluginFocusOrWindowFocusChanged): Deleted.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::accessibilityPosition const):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::sendComplexTextInputToPlugin): Deleted.

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

        Move WebIDBServers from NetworkProcess to NetworkSession class
        https://bugs.webkit.org/show_bug.cgi?id=234366

        Reviewed by Darin Adler.

        Move WebIDBServers from NetworkProcess to NetworkSession class, since they are per session.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFilesForIndexedDB):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::suspendIDBServers):
        (WebKit::NetworkProcess::resume):
        (WebKit::CompletionHandler<void):
        (WebKit::NetworkProcess::prefetchDNS): Deleted.
        (WebKit::NetworkProcess::cacheStorageRootPath): Deleted.
        (WebKit::NetworkProcess::setCacheStorageParameters): Deleted.
        (WebKit::NetworkProcess::registerURLSchemeAsSecure const): Deleted.
        (WebKit::NetworkProcess::registerURLSchemeAsBypassingContentSecurityPolicy const): Deleted.
        (WebKit::NetworkProcess::registerURLSchemeAsLocal const): Deleted.
        (WebKit::NetworkProcess::registerURLSchemeAsNoAccess const): Deleted.
        (WebKit::NetworkProcess::createWebIDBServer): Deleted.
        (WebKit::NetworkProcess::webIDBServer): Deleted.
        (WebKit::NetworkProcess::addIndexedDatabaseSession): Deleted.
        (WebKit::NetworkProcess::setSessionStorageQuotaManagerIDBRootPath): Deleted.
        (WebKit::NetworkProcess::syncLocalStorage): Deleted.
        (WebKit::NetworkProcess::resetQuota): Deleted.
        (WebKit::NetworkProcess::clearStorage): Deleted.
        (WebKit::NetworkProcess::renameOriginInWebsiteData): Deleted.
        (WebKit::NetworkProcess::getPendingPushMessages): Deleted.
        (WebKit::NetworkProcess::processPushMessage): Deleted.
        (WebKit::NetworkProcess::deletePushAndNotificationRegistration): Deleted.
        (WebKit::NetworkProcess::getOriginsWithPushAndNotificationPermissions): Deleted.
        (WebKit::NetworkProcess::requestStorageSpace): Deleted.
        (WebKit::NetworkProcess::storageQuotaManager): Deleted.
        (WebKit::NetworkProcess::initializeProcess): Deleted.
        (WebKit::NetworkProcess::initializeProcessName): Deleted.
        (WebKit::NetworkProcess::initializeSandbox): Deleted.
        (WebKit::NetworkProcess::flushCookies): Deleted.
        (WebKit::NetworkProcess::platformFlushCookies): Deleted.
        (WebKit::NetworkProcess::storePrivateClickMeasurement): Deleted.
        (WebKit::NetworkProcess::dumpPrivateClickMeasurement): Deleted.
        (WebKit::NetworkProcess::clearPrivateClickMeasurement): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementOverrideTimerForTesting): Deleted.
        (WebKit::NetworkProcess::simulateResourceLoadStatisticsSessionRestart): Deleted.
        (WebKit::NetworkProcess::markAttributedPrivateClickMeasurementsAsExpiredForTesting): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementEphemeralMeasurementForTesting): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementTokenPublicKeyURLForTesting): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementTokenSignatureURLForTesting): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementAttributionReportURLsForTesting): Deleted.
        (WebKit::NetworkProcess::markPrivateClickMeasurementsAsExpiredForTesting): Deleted.
        (WebKit::NetworkProcess::setPCMFraudPreventionValuesForTesting): Deleted.
        (WebKit::NetworkProcess::setPrivateClickMeasurementAppBundleIDForTesting): Deleted.
        (WebKit::NetworkProcess::addKeptAliveLoad): Deleted.
        (WebKit::NetworkProcess::removeKeptAliveLoad): Deleted.
        (WebKit::NetworkProcess::connectionToWebProcessClosed): Deleted.
        (WebKit::NetworkProcess::webProcessConnection const): Deleted.
        (WebKit::NetworkProcess::setServiceWorkerFetchTimeoutForTesting): Deleted.
        (WebKit::NetworkProcess::resetServiceWorkerFetchTimeoutForTesting): Deleted.
        (WebKit::NetworkProcess::randomClosedPortDelay): Deleted.
        (WebKit::NetworkProcess::hasAppBoundSession const): Deleted.
        (WebKit::NetworkProcess::clearAppBoundSession): Deleted.
        (WebKit::NetworkProcess::broadcastConsoleMessage): Deleted.
        (WebKit::NetworkProcess::updateBundleIdentifier): Deleted.
        (WebKit::NetworkProcess::clearBundleIdentifier): Deleted.
        (WebKit::NetworkProcess::shouldDisableCORSForRequestTo const): Deleted.
        (WebKit::NetworkProcess::setCORSDisablingPatterns): Deleted.
        (WebKit::NetworkProcess::appPrivacyReportTestingData): Deleted.
        (WebKit::NetworkProcess::clearAppPrivacyReportTestingData): Deleted.
        (WebKit::NetworkProcess::rtcDataChannelProxy): Deleted.
        (WebKit::NetworkProcess::addWebPageNetworkParameters): Deleted.
        (WebKit::NetworkProcess::removeWebPageNetworkParameters): Deleted.
        (WebKit::NetworkProcess::countNonDefaultSessionSets): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::shouldSuspendIDBServers const):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::invalidateAndCancel):
        (WebKit::NetworkSession::ensureWebIDBServer):
        (WebKit::NetworkSession::closeIDBServer):
        (WebKit::NetworkSession::addIndexedDatabaseSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::webIDBServer):
        (WebKit::NetworkSession::hasIDBDatabasePath const):

2021-12-16  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r286601): storage/filesystemaccess/sync-access-handle-read-write-worker.html and file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker.html are consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=234271
        <rdar://problem/86434111>

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::close):
        (WebKit::FileSystemStorageHandle::closeSyncAccessHandle):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::closeHandle):
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::closeSyncAccessHandle):
        (WebKit::NetworkStorageManager::closeAccessHandle): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::getFileHandle):
        (WebKit::WebFileSystemStorageConnection::getDirectoryHandle):
        (WebKit::WebFileSystemStorageConnection::closeSyncAccessHandle):
        (WebKit::WebFileSystemStorageConnection::getHandle):
        (WebKit::WebFileSystemStorageConnection::close): Deleted.
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234392

        Unreviewed non-unified build fixes.

        * NetworkProcess/NetworkDataTask.cpp: Add missing NetworkProcess.h header inclusion.
        * NetworkProcess/NetworkSession.cpp: Add missing WebCore/SWServer.h heeader inclusion.
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp: Add missing
        WebCore/NotificationData.h header inclusion.

2021-12-16  Per Arne Vollan  <pvollan@apple.com>

        [watchOS] Adjust sandbox message filter
        https://bugs.webkit.org/show_bug.cgi?id=234385
        <rdar://86550488>

        Reviewed by Brent Fulgham.

        Add required items to sandbox message filter in the WebContent process on watchOS.

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

2021-12-16  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287056.
        <rdar://86519800>

        Caused performance regression...again

        Reverted changeset:

        "Remove properties set by NSURLProtocol on NSURLRequest before
        serializing"
        https://bugs.webkit.org/show_bug.cgi?id=232332
        https://commits.webkit.org/r287056

2021-12-15  Darin Adler  <darin@apple.com>

        Many call sites use makeNeverDestroyed, but could instead take advantage of the NeverDestroyed deduction guide
        https://bugs.webkit.org/show_bug.cgi?id=234350

        Reviewed by Sam Weinig.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::expectedTableAndIndexQueries):
        Use deduction.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::expectedTableAndIndexQueries): Ditto.
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::getAppBoundDomainsTesting): Ditto.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::createHandlesForResources): Make this more generic so it works with
        other kinds of collections, not just Vector. Also right-size the Vector this
        returns rather than letting it grow organically.
        (WebKit::SandboxExtension::createReadOnlyHandlesForFiles): Ditto.
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory): Ditto.
        (WebKit::SandboxExtension::createHandlesForMachLookup): Ditto. Also update this
        function to take a Span or an initializer_list instead of a Vector.
        (WebKit::SandboxExtension::createHandlesForIOKitClassExtensions): Ditto.
        (WebKit::SandboxExtension::consumePermanently): Ditto.
        * Shared/SandboxExtension.h: Updated for the above. Also corrected some unusual
        use of #if to share a single declaration of some functions for both enabled
        and disabled SANDBOX_EXTENSIONS.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::nonBrowserServices): Use deduction.

        * UIProcess/WebPageProxy.cpp: Remove unused MERGE_WHEEL_EVENTS.
        (WebKit::attachmentElementServices): Return a Span, allowing us to use a
        constexpr obviating the need for memory allocation or read/write memory,
        (WebKit::gpuIOKitClasses): Ditto.
        (WebKit::gpuMachServices): Ditto.
        (WebKit::mediaRelatedMachServices): Ditto.
        (WebKit::mediaRelatedIOKitClasses): Ditto.

        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::mutableState): Use deduction.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]): Ditto.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::mutableState): Ditto.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::temporaryPDFDirectoryPath): Ditto.

2021-12-16  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Filip Pizlo.

        Added build variables and build step to create symlinks pointing to the alternate
        build locations from the current framework install location.

        * Configurations/BaseXPCService.xcconfig:
        * Configurations/adattributiond.xcconfig:
        * Configurations/webpushd.xcconfig:
        * Scripts/create-symlink-to-altroot.sh: Added.
        * WebKit.xcodeproj/project.pbxproj:

2021-12-15  Brady Eidson  <beidson@apple.com>

        Some webpushtool improvements.
        https://bugs.webkit.org/show_bug.cgi?id=234372

        Reviewed by Alex Christensen.

        - Make the list of current connections be reliably ordered
        - If the invocation is solely about injecting a push message, exit afterwards
        - Some other tiny niceties

        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::broadcastAllConnectionIdentities):
        (WebPushD::Daemon::injectPushMessageForTesting):

        * webpushd/webpushtool/WebPushToolConnection.h:
        * webpushd/webpushtool/WebPushToolConnection.mm:
        (WebPushTool::Connection::create):
        (WebPushTool::Connection::Connection):
        (WebPushTool::Connection::connectToService):
        (WebPushTool::Connection::startAction):
        (WebPushTool::Connection::sendPushMessage):

        * webpushd/webpushtool/WebPushToolMain.mm:
        (main):

2021-12-15  Brady Eidson  <beidson@apple.com>

        Add a "NotificationData" object to encompass local Notification-related parameters, instead of passing tons of them around everywhere.
        https://bugs.webkit.org/show_bug.cgi?id=234370

        Reviewed by Tim Horton.

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::showNotification):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

        * Shared/Notifications/NotificationManagerMessageHandler.h:
        * Shared/Notifications/NotificationManagerMessageHandler.messages.in:

        * UIProcess/Notifications/WebNotification.cpp:
        (WebKit::WebNotification::WebNotification):
        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::create):

        * UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp:
        (WebKit::WebNotificationManagerMessageHandler::showNotification):
        * UIProcess/Notifications/WebNotificationManagerMessageHandler.h:

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::show):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:

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

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove unreachable code in Plugin and PluginController
        https://bugs.webkit.org/show_bug.cgi?id=234365

        Reviewed by Geoff Garen and Anders Carlsson.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPageCacheSupportsPlugins):
        (WKPreferencesGetPageCacheSupportsPlugins):
        (WKPreferencesSetAsynchronousPluginInitializationEnabled):
        (WKPreferencesGetAsynchronousPluginInitializationEnabled):
        (WKPreferencesSetAsynchronousPluginInitializationEnabledForAllPlugins):
        (WKPreferencesGetAsynchronousPluginInitializationEnabledForAllPlugins):
        (WKPreferencesSetArtificialPluginInitializationDelayEnabled):
        (WKPreferencesGetArtificialPluginInitializationDelayEnabled):
        (WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins):
        (WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setPageCacheSupportsPlugins:]):
        (-[WKPreferences _pageCacheSupportsPlugins]):
        (-[WKPreferences _setAsynchronousPluginInitializationEnabled:]):
        (-[WKPreferences _asynchronousPluginInitializationEnabled]):
        (-[WKPreferences _setArtificialPluginInitializationDelayEnabled:]):
        (-[WKPreferences _artificialPluginInitializationDelayEnabled]):
        (-[WKPreferences _setExperimentalPlugInSandboxProfilesEnabled:]):
        (-[WKPreferences _experimentalPlugInSandboxProfilesEnabled]):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (isType):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        (WebKit::PDFPlugin::getSelectionForWordAtPoint const): Deleted.
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Plugin): Deleted.
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::type const): Deleted.
        (WebKit::Plugin::isPluginProxy const): Deleted.
        (WebKit::Plugin::isNetscapePlugin const): Deleted.
        (WebKit::Plugin::isPDFPlugin const): Deleted.
        * WebProcess/Plugins/PluginController.h:
        (WebKit::PluginController::asynchronousPluginInitializationEnabled const): Deleted.
        (WebKit::PluginController::asynchronousPluginInitializationEnabledForAllPlugins const): Deleted.
        (WebKit::PluginController::artificialPluginInitializationDelayEnabled const): Deleted.
        (WebKit::PluginController::PluginDestructionProtector::PluginDestructionProtector): Deleted.
        (WebKit::PluginController::PluginDestructionProtector::~PluginDestructionProtector): Deleted.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):
        (WebKit::PluginView::pluginFocusOrWindowFocusChanged):
        (WebKit::PluginView::didFailToInitializePlugin): Deleted.
        (WebKit::PluginView::getSelectionForWordAtPoint const): Deleted.
        (WebKit::PluginView::invalidate): Deleted.
        (WebKit::PluginView::userAgent): Deleted.
        (WebKit::PluginView::cancelStreamLoad): Deleted.
        (WebKit::PluginView::continueStreamLoad): Deleted.
        (WebKit::PluginView::cancelManualStreamLoad): Deleted.
        (WebKit::PluginView::setStatusbarText): Deleted.
        (WebKit::PluginView::isAcceleratedCompositingEnabled): Deleted.
        (WebKit::PluginView::compositingRenderServerPort): Deleted.
        (WebKit::PluginView::getAuthenticationInfo): Deleted.
        (WebKit::PluginView::isPrivateBrowsingEnabled): Deleted.
        (WebKit::PluginView::asynchronousPluginInitializationEnabled const): Deleted.
        (WebKit::PluginView::asynchronousPluginInitializationEnabledForAllPlugins const): Deleted.
        (WebKit::PluginView::artificialPluginInitializationDelayEnabled const): Deleted.
        (WebKit::PluginView::protectPluginFromDestruction): Deleted.
        (WebKit::PluginView::unprotectPluginFromDestruction): Deleted.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::asynchronousPluginInitializationEnabled const): Deleted.
        (WebKit::WebPage::setAsynchronousPluginInitializationEnabled): Deleted.
        (WebKit::WebPage::asynchronousPluginInitializationEnabledForAllPlugins const): Deleted.
        (WebKit::WebPage::setAsynchronousPluginInitializationEnabledForAllPlugins): Deleted.
        (WebKit::WebPage::artificialPluginInitializationDelayEnabled const): Deleted.
        (WebKit::WebPage::setArtificialPluginInitializationDelayEnabled): Deleted.

2021-12-15  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Allow same-site, cross-origin iframe get()
        https://bugs.webkit.org/show_bug.cgi?id=234309
        rdar://problem/86486313

        Reviewed by Brent Fulgham.

        The Web Authentication level 2 specifies a feature policy to allow get calls in
        cross-origin i-frames. This patch implements this feature policy partially. Only
        same-site, cross-origin i-frames are supported instead. This is for tracking prevention
        purposes. https://w3c.github.io/webauthn/#sctn-iframe-guidance

        This patch also starts passing ClientDataJSON hashes to ASC to avoid the situation
        where WebKit includes crossOrigin or other fields in ClientDataJSON that ASC is
        unaware of when generating ClientDataJSON.

        Added layout test cases for same-site, cross-origin get calls.

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (produceClientDataJson):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        (WebKit::WebAuthenticatorCoordinatorProxy::contextForRequest):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Remove ProxyServer
        https://bugs.webkit.org/show_bug.cgi?id=234362

        Reviewed by Geoffrey Garen.

        * WebProcess/Plugins/PluginView.cpp:

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

        RELEASE_ASSERT in WTF::Deque<WebKit::NativeWebKeyboardEvent, 0ul>::first()
        https://bugs.webkit.org/show_bug.cgi?id=234301

        Reviewed by Geoffrey Garen.

        WebPageProxy::interpretKeyEvent() gets called as the result of IPC from the WebProcess
        and assumes that WebPageProxy::m_keyEventQueue is non-empty. We have evidence based on
        the Chrome crash report that this assertion doesn't always hold. Also, the WebProcess
        is not a trusted process so we shouldn't be making such assumptions in the first place.

        Add a check in WebPageProxy::interpretKeyEvent() to properly deal with an empty queue.

        No new tests, unknown how to reproduce.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::interpretKeyEvent):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        Actually use adattributiond.entitlements when code signing adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=234329
        <rdar://86425785>

        Reviewed by Tim Horton.

        r283897 got me so close.  I generate the entitlements and the sandbox profile.  Now I need to actually sign with the entitlements.
        I verified by building two roots that before this change, the codesign invocation looked like this:
        /usr/bin/codesign --force --sign - --generate-entitlement-der .../Root/System/Library/Frameworks/WebKit.framework/Daemons/adattributiond
        and after this change it looks like this:
        /usr/bin/codesign --force --sign - --entitlements .../TempContent/Objects/WebKit.build/adattributiond.build/adattributiond.entitlements
            --generate-entitlement-der .../Root/System/Library/Frameworks/WebKit.framework/Daemons/adattributiond

        * Configurations/adattributiond.xcconfig:

2021-12-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS][WP] Add access to required syscall
        https://bugs.webkit.org/show_bug.cgi?id=234336
        <rdar://86343811>

        Reviewed by Brent Fulgham.

        Add access to required system call in the WebProcess sandbox on iOS.

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

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

        [Mac] Adopt -[NSScreen safeAreaInsets]
        https://bugs.webkit.org/show_bug.cgi?id=234291
        <rdar://85805895>

        Reviewed by Eric Carlson.

        Drive-by fix: use the safeAreaFrame() when determining where to place the exit
        fullscreen placeholder image.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimationAndExitImmediately:]):

2021-12-15  Alex Christensen  <achristensen@webkit.org>

        More cleanup after PluginProcess removal
        https://bugs.webkit.org/show_bug.cgi?id=234354

        Reviewed by Tim Horton.

        Remove some unused code, unify some sources.

        * Configurations/PluginProcessShim.xcconfig: Removed.
        * Configurations/PluginService.xcconfig: Removed.
        * DerivedSources.make:
        * Shared/Cocoa/SharedRingBufferStorage.cpp:
        (WebKit::ReadOnlySharedRingBufferStorage::allocate):
        (WebKit::SharedRingBufferStorage::setStorage):
        (WebKit::SharedRingBufferStorage::allocate):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultMediaSessionCoordinatorEnabled):
        * Sources.txt:
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::platformLayer const):
        (WebKit::PluginView::contentsScaleFactor):
        (WebKit::PluginView::pluginProcessCrashed): Deleted.
        (WebKit::PluginView::proxiesForURL): Deleted.
        (WebKit::PluginView::cookiesForURL): Deleted.
        (WebKit::PluginView::setCookiesForURL): Deleted.
        * WebProcess/Plugins/PluginView.h:

2021-12-15  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r286936): Many webstorage layout tests have become flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=234274
        <rdar://problem/86434478>

        Reviewed by Chris Dumez.

        Connection (listener) is not added properly to existing MemoryStorageAreas, so events are not dispatched.
        Also according to the old behavior, we don't add connection (listener) to StorageArea when creating it, but when
        there is a connection message.

        * NetworkProcess/storage/SessionStorageManager.cpp:
        (WebKit::SessionStorageManager::addStorageArea):
        (WebKit::SessionStorageManager::connectToSessionStorageArea):
        (WebKit::SessionStorageManager::cloneStorageArea):
        * NetworkProcess/storage/SessionStorageManager.h:

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

        Move SWServers from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=234179

        Reviewed by Darin Adler.

        Move SWServers from NetworkProcess to NetworkSession since they are per session.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::processPushMessage):
        (WebKit::NetworkProcess::forEachSWServer): Deleted.
        (WebKit::NetworkProcess::swServerForSession): Deleted.
        (WebKit::NetworkProcess::existingSWOriginStoreForSession const): Deleted.
        (WebKit::NetworkProcess::registerSWServerConnection): Deleted.
        (WebKit::NetworkProcess::unregisterSWServerConnection): Deleted.
        (WebKit::NetworkProcess::addServiceWorkerSession): Deleted.
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::swServerForSessionIfExists): Deleted.
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::lowMemoryHandler):
        (WebKit::NetworkSession::swOriginStore const):
        (WebKit::NetworkSession::registerSWServerConnection):
        (WebKit::NetworkSession::unregisterSWServerConnection):
        (WebKit::NetworkSession::ensureSWServer):
        (WebKit::NetworkSession::addServiceWorkerSession):
        (WebKit::NetworkSession::hasServiceWorkerDatabasePath const):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::swServer):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::WebSWServerConnection):
        (WebKit::WebSWServerConnection::~WebSWServerConnection):
        * WebProcess/WebPage/WebPage.h:

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

        RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit should only reset once
        https://bugs.webkit.org/show_bug.cgi?id=234340

        Reviewed by Eric Carlson.

        As seen in logs, there are cases where the unit is notified reset several times before it gets stopped and restarted.
        This triggers resetting on WebProcess side several times which is unneeded.
        Instead, we now only call reset once in a start/stop cycle of the audio unit.
        Manually tested.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::notifyReset):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::start):

2021-12-15  Per Arne Vollan  <pvollan@apple.com>

        [iOS][WP] Add access to required syscall
        https://bugs.webkit.org/show_bug.cgi?id=234336
        <rdar://86502081>

        Reviewed by Tim Horton.

        Add required syscall to the WebContent process' sandbox on iOS. This syscall was blocked in
        https://trac.webkit.org/changeset/286673/webkit.

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

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        SourceBufferParser should be using contiguous shared buffer
        https://bugs.webkit.org/show_bug.cgi?id=233865
        rdar://problem/86085253

        Reviewed by Eric Carlson.

        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::append):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:

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

        Remove properties set by NSURLProtocol on NSURLRequest before serializing
        https://bugs.webkit.org/show_bug.cgi?id=232332
        <rdar://79227845>

        Reviewed by Geoff Garen.

        NSURLRequest encodeWithCoder: encodes the protocol properties, which are not used by WebKit.
        They exist to be used by NSURLProtocol.  Serializing them can serialize a large amount of data,
        so to be more efficient and hopefully run out of memory less, remove the properties before serializing.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):

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

        Safari intermittently stopping playing Spotify Web Player (currentTime goes backwards)
        https://bugs.webkit.org/show_bug.cgi?id=233257
        <rdar://problem/85504967>

        Reviewed by Eric Carlson.

        Test: media/video-currentTime-duration.html

        Clamp currentMediaTime() to [0, durationMediaTime()].

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const):

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

        Revert r284816
        https://bugs.webkit.org/show_bug.cgi?id=234308

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged):

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

        Add _WKContentRuleListAction.redirected and .modifiedHeaders
        https://bugs.webkit.org/show_bug.cgi?id=234289

        Reviewed by Tim Hatcher.

        * UIProcess/API/APIContentRuleListAction.cpp:
        (API::ContentRuleListAction::redirected const):
        (API::ContentRuleListAction::modifiedHeaders const):
        * UIProcess/API/APIContentRuleListAction.h:
        * UIProcess/API/Cocoa/_WKContentRuleListAction.h:
        * UIProcess/API/Cocoa/_WKContentRuleListAction.mm:
        (-[_WKContentRuleListAction redirected]):
        (-[_WKContentRuleListAction modifiedHeaders]):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentRuleListNotification):

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

        Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
        https://bugs.webkit.org/show_bug.cgi?id=234280
        <rdar://85015428>

        Reviewed by Brady Eidson.

        A NetworkLoad synchronously failing has caused several issues.
        This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet,
        and we haven't assigned it an identifier in the network process yet either, so we dereference null and send
        unreceived messages in many places.  To fix this issue, I move the FTP check to the NetworkDataTask constructor
        like we do with blocked port checks and invalid URL checks.  I also found that there is a race condition with
        CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load
        for which we have scheduled a failure.

        Covered by an API test which used to hit all the horrible failures and now passes reliably.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP):
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::scheduleFailure):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::start):
        (WebKit::NetworkLoad::wasBlockedByDisabledFTP):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::wasBlockedByDisabledFTP):
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::resume):
        * Shared/WebErrors.cpp:
        (WebKit::ftpDisabledError):
        * Shared/WebErrors.h:

2021-12-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * Configurations/webpushtool.xcconfig:

2021-12-14  Megan Gardner  <megan_gardner@apple.com>

        Attachment does not update after markup.
        https://bugs.webkit.org/show_bug.cgi?id=234266

        Reviewed by Wenson Hsieh.

        If we don't call the deligate to inform Mail about the new attachment data,
        it will not update and the original image will be sent.

        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):

2021-12-11  Dean Jackson  <dino@apple.com>

        Allow override of system's preferred color scheme
        https://bugs.webkit.org/show_bug.cgi?id=234199
        <rdar://problem/86366044>

        Reviewed by Tim Horton.

        Expose new Private API that allows the user to give an explicit per-page preference
        for light or dark color schemes rather than reading the system value.

        * Scripts/webkit/messages.py:
        (headers_for_type): Add header for DocumentLoader.

        * Shared/WebsitePoliciesData.cpp: Encode the new value in the policies sent
        to the Web Process.
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:

        * UIProcess/API/APIWebsitePolicies.cpp: Expose a new policy "colorSchemePreference".
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        * UIProcess/API/APIWebsitePolicies.h:

        * UIProcess/API/Cocoa/WKWebpagePreferences.mm: Expose a new private API "_colorSchemePreference".
        (-[WKWebpagePreferences _colorSchemePreference]):
        (-[WKWebpagePreferences _setColorSchemePreference:]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        Rename SharedBuffer classes.
        https://bugs.webkit.org/show_bug.cgi?id=233677
        rdar://problem/85963900

        Reviewed by Youenn Fablet.

        SharedBuffer are renamed FragmentedSharedBuffer and
        ContiguousSharedBuffer to SharedBuffer to better reflect their actual
        types.

        * GPUProcess/media/RemoteCDMInstanceProxy.cpp:
        * GPUProcess/media/RemoteCDMInstanceProxy.h:
        * GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp:
        * GPUProcess/media/RemoteCDMInstanceSessionProxy.h:
        * GPUProcess/media/RemoteCDMProxy.cpp:
        * GPUProcess/media/RemoteCDMProxy.h:
        * GPUProcess/media/RemoteLegacyCDMProxy.h:
        * GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp:
        * GPUProcess/media/RemoteLegacyCDMSessionProxy.h:
        * GPUProcess/media/RemoteMediaResource.cpp:
        * GPUProcess/media/RemoteMediaResource.h:
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        * NetworkProcess/NetworkCORSPreflightChecker.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/PreconnectTask.cpp:
        * NetworkProcess/PreconnectTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        * NetworkProcess/cache/NetworkCache.cpp:
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        * NetworkProcess/cache/NetworkCacheEntry.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/PrefetchCache.cpp:
        * NetworkProcess/cache/PrefetchCache.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        * NetworkProcess/curl/NetworkDataTaskCurl.h:
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * Platform/IPC/SharedBufferCopy.cpp:
        * Platform/IPC/SharedBufferCopy.h:
        * Platform/IPC/SharedBufferDataReference.h:
        * Platform/SharedMemory.cpp:
        * Platform/SharedMemory.h:
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        * Shared/ShareableResource.cpp:
        * Shared/ShareableResource.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebHitTestResultData.cpp:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        * UIProcess/API/APIAttachment.cpp:
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/APINavigationClient.h:
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        * UIProcess/API/gtk/DropTargetGtk3.cpp:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebURLSchemeTask.cpp:
        * UIProcess/WebURLSchemeTask.h:
        * UIProcess/gtk/Clipboard.h:
        * UIProcess/gtk/ClipboardGtk3.cpp:
        * UIProcess/gtk/ClipboardGtk4.cpp:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebProcess/GPU/media/RemoteCDM.cpp:
        * WebProcess/GPU/media/RemoteCDM.h:
        * WebProcess/GPU/media/RemoteCDMInstance.cpp:
        * WebProcess/GPU/media/RemoteCDMInstance.h:
        * WebProcess/GPU/media/RemoteCDMInstanceSession.cpp:
        * WebProcess/GPU/media/RemoteCDMInstanceSession.h:
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        * WebProcess/GPU/media/RemoteImageDecoderAVF.h:
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.cpp:
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.h:
        * WebProcess/GPU/media/RemoteLegacyCDMSession.cpp:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/win/WebProcessWin.cpp:

2021-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Handle the Embedded method sent by AtkSocket from AccessibilityRootAtspi
        https://bugs.webkit.org/show_bug.cgi?id=234233

        Reviewed by Adrian Perez de Castro.

        I added some hacks to send the socket path to the web process using WebKit IPC because Embedded message is not
        in the DBus interface. We can simply add the message to the interface definition and handle it instead to
        simplify everything.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::bindAccessibilityTree):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::accessibilityPlugID):
        (WebKit::ProvisionalPageProxy::CompletionHandler<void): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):

2021-12-13  John Wilander  <wilander@apple.com>

        PCM: Remove old DB update and migration code, and add a unit test for destination token DB columns
        https://bugs.webkit.org/show_bug.cgi?id=234281
        <rdar://86347439>

        Reviewed by Alex Christensen and Kate Cheney.

        WebKit::Database::needsUpdatedSchema() in PrivateClickMeasurement.cpp has a comment saying it
        should be removed late 2021. WebKit::DatabaseUtilities::migrateDataToNewTablesIfNecessary()
        returns directly if WebKit::Database::needsUpdatedSchema() returns false so always returning
        false for WebKit::Database::needsUpdatedSchema() in PrivateClickMeasurement.cpp effectively
        disables WebKit::DatabaseUtilities::migrateDataToNewTablesIfNecessary() for PCM.

        New unit/API test PrivateClickMeasurement.MigrateWithDestinationToken added.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::Database):
            No longer calls the deleted DatabaseUtilities::migrateDataToNewTablesIfNecessary().
        (WebKit::PCM::Database::attributionToStringForTesting const):
            Now outputs destination token info.
        (WebKit::PCM::Database::needsUpdatedSchema): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
            needsUpdatedSchema() now always returns false.

2021-12-13  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to run regexes on current frame's URL, not just top frame's URL
        https://bugs.webkit.org/show_bug.cgi?id=233889

        Reviewed by Timothy Hatcher.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::processContentRuleListsForLoad):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::setContentExtensionController):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::initialize):
        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::urlFiltersBytecode const):
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const): Deleted.
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const): Deleted.
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListMetaData::fileSize const):
        (API::encodeContentRuleListMetaData):
        (API::decodeContentRuleListMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::getContentRuleListSourceFromMappedFile):
        * UIProcess/API/APIContentRuleListStore.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::startPingLoad):

2021-12-13  Brady Eidson  <beidson@apple.com>

        Teach webpushtool to register and "host" the daemon.
        https://bugs.webkit.org/show_bug.cgi?id=234265

        Reviewed by Tim Horton.

        Covered by API tests verifying hosting mode operation.

        As various engineers work on various parts of the project, it's become apparent that it's super useful
        to have a tool handle the "setting up" of the daemon itself, to avoid launchctl, etc.
        
        Implement that, as well as a few other niceties found while testing.
        
        * Configurations/webpushtool.xcconfig:
        * Resources/webpushtool.entitlements:
        
        * Shared/Daemon/DaemonUtilities.mm:
        (WebKit::startListeningForMachServiceConnections):
        
        * webpushd/AppBundleRequest.mm:
        (WebPushD::AppBundleRequest::start):
        
        * webpushd/PushClientConnection.h:
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::setHostAppAuditTokenData):
        (WebPushD::ClientConnection::broadcastDebugMessage):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::broadcastAllConnectionIdentities):

        * webpushd/webpushtool/WebPushToolConnection.h:
        * webpushd/webpushtool/WebPushToolConnection.mm:
        (WebPushTool::Connection::connectToService):
        (WebPushTool::Connection::connectionDropped):

        * webpushd/webpushtool/WebPushToolMain.mm:
        (printUsageAndTerminate):
        (registerDaemonWithLaunchD):
        (main):

2021-12-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286993.
        https://bugs.webkit.org/show_bug.cgi?id=234283


        Reverted changeset:

        "[WebAuthn] Allow same-site, cross-origin iframe get()"
        https://bugs.webkit.org/show_bug.cgi?id=234180
        https://commits.webkit.org/r286993

2021-12-13  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Excessive "kick" at the beginning of scrolling (especially on 60fps displays)
        https://bugs.webkit.org/show_bug.cgi?id=234279
        <rdar://problem/86425321>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        Instead of back-dating the animation to try to acquire a momentum-start
        delta, pass the one we got from the event through, and start the animation
        curve at momentum-start time. Also, critically, inset ourselves along
        the curve by the amount of that initial delta (since the time starts now).

        Tested at both 60fps and 120fps, this significantly smooths out the
        transition from fingers-down phase to the generated momentum phase,
        avoiding the overly large initial delta.

        * WebProcess/WebPage/MomentumEventDispatcher.h:

2021-12-13  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Allow same-site, cross-origin iframe get()
        https://bugs.webkit.org/show_bug.cgi?id=234180
        rdar://85161142

        Reviewed by Brent Fulgham.

        The Web Authentication level 2 specifies a feature policy to allow get calls in
        cross-origin i-frames. This patch implements this feature policy partially. Only
        same-site, cross-origin i-frames are supported instead. This is for tracking prevention
        purposes. https://w3c.github.io/webauthn/#sctn-iframe-guidance

        This patch also starts passing ClientDataJSON hashes to ASC to avoid the situation
        where WebKit includes crossOrigin or other fields in ClientDataJSON that ASC is
        unaware of when generating ClientDataJSON.

        Added layout test cases for same-site, cross-origin get calls.

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (produceClientDataJson):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        (WebKit::WebAuthenticatorCoordinatorProxy::contextForRequest):

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Add SharedBufferBuilder class
        https://bugs.webkit.org/show_bug.cgi?id=233442
        rdar://85693939

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::manualLoadDidReceiveData):
        (WebKit::PluginView::manualLoadDidFail):
        (WebKit::PluginView::liveResourceData const):
        (WebKit::PluginView::redeliverManualStream):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
        (WebKit::WebPreviewLoaderClient::didFinishLoading):
        (WebKit::WebPreviewLoaderClient::didFail):
        * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:

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

        [WP][iOS] Add access to required system call
        https://bugs.webkit.org/show_bug.cgi?id=234232
        <rdar://86343811>

        Reviewed by Brent Fulgham.

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

2021-12-13  Chris Dumez  <cdumez@apple.com>

        Regression(r283565) Unable to report private messages as Spam in Twitter app
        https://bugs.webkit.org/show_bug.cgi?id=234253
        <rdar://86043227>

        Reviewed by Alex Christensen.

        In r283565, we aligned WebKit's behavior with the Fetch specification and with
        Gecko / Blink by keeping the Authorization header on same origin redirects.

        However, when reporting a private message in the twitter app, it does a
        same-origin redirect from `https://twitter.com/account/authenticate_web_view?...`
        to `https://twitter.com/account/authenticate_web_view?...` and the HTTP server
        reponds with a 401/Unauthorized when we send the Authorization on the post-redirect
        request. As far as I can tell, our behavior is correct here and I suspect this is an
        issue with the twitter server. As a result, I am simply gating the new behavior
        behind a linked-on-or-after check to give twitter a chance to address the issue on
        their end.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

2021-12-13  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r286841): [ iOS ] Many webrtc tests flaky failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=234181
        <rdar://problem/86343642>

        Reviewed by Eric Carlson.

        Use network connection state change callback to know when connection fails or is cancelled.
        Introduce ConnectionStateTracker to know when to stop reading new UDP packets.
        ConnectionStateTracker will be stopped when state is changed to failed or cancelled as well as when the whole connection is closed.
        Renaming m_nwConnections to m_connections as m_nwConnections name was already used.
        Reduce error logging to only new error codes or when connectino enters unrecoverable failure (hence changing to failed state).

        Covered by existing tests.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:

2021-12-13  Elliott Williams  <emw@apple.com>

        Deployment target for macOS 11+ does not follow minor version bumps
        https://bugs.webkit.org/show_bug.cgi?id=233906

        Reviewed by Alexey Proskuryakov.

        * Configurations/DebugRelease.xcconfig:

2021-12-13  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Fix build error since r286946.

        ClientOrigin should be forward declared as struct, not class.

        * NetworkProcess/storage/SessionStorageManager.h:

2021-12-13  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix after r286936

        No new tests needed.

        * NetworkProcess/storage/OriginStorageManager.cpp: Add missing inclusion of
        MemoryStorageArea.h, which broke non-unified builds.
        * NetworkProcess/storage/SQLiteStorageArea.cpp: Add missing inclusion of Logging.h, broke
        the build in some configurations.
        * NetworkProcess/storage/SessionStorageManager.h: Add missing inclusion of Connection.h, and
        add missing forward declaration for WebCore::ClientOrigin, which broke the build for
        non-Apple ports.

2021-12-13  Youenn Fablet  <youenn@apple.com>

        Fix ServiceWorker downloads
        https://bugs.webkit.org/show_bug.cgi?id=202142
        <rdar://problem/55721934>

        Reviewed by Alex Christensen.

        Add ServiceWorkerDownloadTask class as a NetworkDataTask whose purpose is to download the content of a response given from service worker.
        Add a way to convert ServiceWorkerFetchTask into downloads:
        - If a preload is ongoing and can be used for navigation, use this preload as the download NetworkLoad.
        - If a preload does not exist, create a ServiceWorkerDownloadTask and a corresponding NetworkLoad to start downloading the service worker response data.
        When creating a ServiceWorkerDownloadTask, the WebServiceWorkerFetchTaskClient will be notified to start sending response data using ServiceWorkerDownloadTask
        instead of ServiceWorkerFetchTask messages. This allows cancelling the ServiceWorkerFetchTask without any issue.

        Note that the service worker lifetime is not augmented: if the service worker exits due to all its clients being closed, the download will fail.

        Increase unified build files to 112.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp: Added.
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h: Added.
        * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in: Added.
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        * Scripts/generate-unified-sources.sh:
        * Scripts/webkit/messages.py:
        * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp:
        (WebKit::TestWithCVPixelBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp:
        (WebKit::TestWithStream::didReceiveStreamMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::createDownloadProxy):
        * Sources.txt:
        * UnifiedSources-output.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

2021-12-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        Implement the capability to assign IOSurfaces
        to PlatformCALayerRemote contents.

        Make RemoteGraphicsContextGLProxyCocoa use the added
        GraphicsLayerContentsDisplayDelegate.

        Second try, previous was reverted due to a test failure.
        The test failure happened due to RemoteLayerBackingStore
        sending the same drawn backing store with different
        properties but same image. The original patch tried
        to use RemoteLayerBackingStore::m_bufferHandle also
        on the send side to store the handle. This handle
        was encoded multiple times. The underlying
        ShareableBitmap::Handle IPC encoding destroys the
        underlying mach send right even though the encoding
        API signature would signify that the Handle stays
        intact. ShareableBitmap, SharedMemory will be fixed in
        future commits.

        * GPUProcess/graphics/GPUProcessGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::hasFrontBuffer const):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::clearBackingStore):
        (WebKit::RemoteLayerBackingStore::encode const):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::setContents):
        (WebKit::RemoteLayerBackingStore::display):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm:
        (WebKit::RemoteGraphicsContextGLProxy::create):
        * WebProcess/GPU/graphics/wc/RemoteGraphicsContextGLProxyWC.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::create): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::setContents):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (WebKit::PlatformCALayerRemoteCustom::clone const):
        (WebKit::PlatformCALayerRemoteCustom::setNeedsDisplayInRect):
        (WebKit::PlatformCALayerRemoteCustom::setNeedsDisplay):
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::setContentsDisplayDelegate):

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Distinguish contiguous SharedBuffer from non-contiguous one and guarantee immutability
        https://bugs.webkit.org/show_bug.cgi?id=233030
        rdar://85333814

        Reviewed by Darin Adler.

        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        (WebKit::RemoteMediaRecorder::fetchData):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::sendReplyToSynchronousRequest):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveBuffer):
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::encode):
        (WebKit::CacheStorage::Cache::decode):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::encodeAsStorageRecord const):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didReadDataURL):
        * Platform/IPC/SharedBufferCopy.cpp:
        (IPC::SharedBufferCopy::decode):
        * Platform/IPC/SharedBufferCopy.h:
        (IPC::SharedBufferCopy::SharedBufferCopy):
        (IPC::SharedBufferCopy::buffer):
        (IPC::SharedBufferCopy::buffer const):
        * Platform/SharedMemory.cpp:
        (WebKit::SharedMemory::createSharedBuffer const):
        * Platform/SharedMemory.h:
        * Shared/APIWebArchiveResource.mm:
        (API::WebArchiveResource::data):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::decodePlatformData):
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::createImageBufferBackendHandle const):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::wrapInSharedBuffer):
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer const):
        * Shared/ShareableResource.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::decodeSharedBuffer):
        (IPC::encodeTypesAndData):
        (IPC::decodeTypesAndData):
        (IPC::ArgumentCoder<DOMCacheEngine::Record>::encode):
        (IPC::ArgumentCoder<DOMCacheEngine::Record>::decode):
        (IPC::ArgumentCoder<PasteboardCustomData::Entry>::decode):
        (IPC::ArgumentCoder<WebCore::SerializedAttachmentData>::decode):
        (IPC::ArgumentCoder<RefPtr<WebCore::SharedBuffer>>::decode):
        (IPC::ArgumentCoder<Ref<WebCore::SharedBuffer>>::decode):
        (IPC::ArgumentCoder<RefPtr<WebCore::ContiguousSharedBuffer>>::encode):
        (IPC::ArgumentCoder<RefPtr<WebCore::ContiguousSharedBuffer>>::decode):
        (IPC::ArgumentCoder<Ref<WebCore::ContiguousSharedBuffer>>::encode):
        (IPC::ArgumentCoder<Ref<WebCore::ContiguousSharedBuffer>>::decode):
        (IPC::ArgumentCoder<WebCore::ScriptBuffer>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::ArgumentCoder<SelectionData>::decode):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (IPC::ArgumentCoder<Ref<Font>>::decodePlatformData):
        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::createSerializedRepresentation const):
        (API::Attachment::updateFromSerializedRepresentation):
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::getData):
        * UIProcess/API/Cocoa/APIAttachmentCocoa.mm:
        (API::Attachment::createSerializedRepresentation const):
        (API::Attachment::updateFromSerializedRepresentation):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _storeAppHighlight:]):
        * UIProcess/API/gtk/DropTargetGtk3.cpp:
        (WebKit::DropTarget::dataReceived):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didFinishLoadForQuickLookDocumentInMainFrame):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::writeSelectionToPasteboard):
        (WebKit::WebViewImpl::setPromisedDataForImage):
        (WebKit::WebViewImpl::provideDataForPasteboard):
        (WebKit::WebViewImpl::namesOfPromisedFilesDroppedAtDestination):
        (WebKit::WebViewImpl::requestDOMPasteAccess):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::saveImageToLibrary):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (allPasteboardItemOriginsMatchOrigin):
        (-[WKContentView actionSheetAssistant:shareElementWithImage:rect:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        * WebProcess/InjectedBundle/API/APIInjectedBundleEditorClient.h:
        (API::InjectedBundle::EditorClient::getPasteboardDataForRange):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setEditingDelegate:]):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::releaseSharedBuffer):
        (WebKit::InjectedBundlePageLoaderClient::willLoadDataRequest):
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
        (WebKit::ARKitInlinePreviewModelPlayerMac::createFile):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::getClientPasteboardData):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):
        (WebKit::WebPlatformStrategies::readBufferFromClipboard):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source const):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getDataSelectionForPasteboard):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreen const):
        (WebKit::VideoFullscreenManager::supportsVideoFullscreenStandby const):

2021-12-12  Sihui Liu  <sihui_liu@apple.com>

        Merge StorageManager with NetworkStorageManager to manage WebStorage by origin
        https://bugs.webkit.org/show_bug.cgi?id=234087

        Reviewed by Chris Dumez.

        In network process, WebStorage data is managed by WebKit::StorageManager class. Each StorageManager owns one or
        many StorageNameSpaces, and each StorageNamespace owns one or more StorageAreas. Each StorageArea correponds
        to one storage map (one localStorage or sessionStorage object), using either a SQLite database or a in-memory
        map as backend. Now that we have NetworkStorageManager, which manages storage by origin. We can merge
        StorageManager with NetworkStorageManager, since localStorage and sessionStorage are not shared between 
        different origins.

        The new structure is:
        NetworkStorageManager (manage storage for a session, owns one or more OriginStorageManagers)
        OriginStorageManager (manage storage for an origin, owns one LocalStorageManager and one SessionStorageManager)
        LocalStorageManager / SessionStorageManager (manage LocalStorage and SessionStorage, owns one or more 
        StorageAreaBases)
        MemoryStorageArea / SQLiteStorageArea (inherits StorageAreaBases; manage one local or session storage, like 
        Webkit::StorageArea)

        StorageNamespace layer is removed. For SessionStorage, different StorageNamespaces means different web pages, 
        and same origin can have different sessionStorages on different pages, so we keep a StorageNamespace <=>
        StorageArea map in SessionStorageManager. For LocalStorage, differnt StorageNamespaces means different page 
        groups. Our original plan was the same origin can have different localStorages in different page groups, but our
        old implementation actually made all page groups point to the same database file. To keep existing behavior 
        that all page groups with same origin share the storage, we now keep one local StorageArea and one transient
        StorageArea per LocalStorageManager.

        Mostly refactoring and covered by existing tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::addStorageManagerForSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::hasLocalStorage):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::syncLocalStorage):
        (WebKit::NetworkProcess::renameOriginInWebsiteData):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        (WebKit::NetworkProcess::getLocalStorageOriginDetails): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/storage/LocalStorageManager.cpp: Added.
        (WebKit::fileNameToOrigin):
        (WebKit::originToFileName):
        (WebKit::LocalStorageManager::originsOfLocalStorageData):
        (WebKit::LocalStorageManager::localStorageFilePath):
        (WebKit::LocalStorageManager::LocalStorageManager):
        (WebKit::LocalStorageManager::isActive const):
        (WebKit::LocalStorageManager::hasDataInMemory const):
        (WebKit::LocalStorageManager::clearDataInMemory):
        (WebKit::LocalStorageManager::clearDataOnDisk):
        (WebKit::LocalStorageManager::close):
        (WebKit::LocalStorageManager::handleLowMemoryWarning):
        (WebKit::LocalStorageManager::syncLocalStorage):
        (WebKit::LocalStorageManager::connectionClosed):
        (WebKit::LocalStorageManager::connectionClosedForLocalStorageArea):
        (WebKit::LocalStorageManager::connectionClosedForTransientStorageArea):
        (WebKit::LocalStorageManager::connectToLocalStorageArea):
        (WebKit::LocalStorageManager::connectToTransientLocalStorageArea):
        (WebKit::LocalStorageManager::disconnectFromStorageArea):
        * NetworkProcess/storage/LocalStorageManager.h: Added.
        * NetworkProcess/storage/MemoryStorageArea.cpp: Added.
        (WebKit::MemoryStorageArea::MemoryStorageArea):
        (WebKit::MemoryStorageArea::isEmpty):
        (WebKit::MemoryStorageArea::clear):
        (WebKit::MemoryStorageArea::allItems):
        (WebKit::MemoryStorageArea::setItem):
        (WebKit::MemoryStorageArea::removeItem):
        (WebKit::MemoryStorageArea::clone const):
        * NetworkProcess/storage/MemoryStorageArea.h: Added.
        (isType):
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::readOriginFromFile):
        (WebKit::writeOriginToFileIfNecessary):
        (WebKit::NetworkStorageManager::create):
        (WebKit::NetworkStorageManager::NetworkStorageManager):
        (WebKit::NetworkStorageManager::canHandleTypes):
        (WebKit::NetworkStorageManager::close):
        (WebKit::originDirectoryPath):
        (WebKit::originFilePath):
        (WebKit::NetworkStorageManager::localOriginStorageManager):
        (WebKit::NetworkStorageManager::removeOriginStorageManagerIfPossible):
        (WebKit::NetworkStorageManager::deleteOriginDirectoryIfPossible):
        (WebKit::NetworkStorageManager::clearStorageForTesting):
        (WebKit::NetworkStorageManager::forEachOriginDirectory):
        (WebKit::NetworkStorageManager::getAllOrigins):
        (WebKit::NetworkStorageManager::fetchDataFromDisk):
        (WebKit::NetworkStorageManager::deleteDataOnDisk):
        (WebKit::NetworkStorageManager::moveData):
        (WebKit::NetworkStorageManager::suspend):
        (WebKit::NetworkStorageManager::resume):
        (WebKit::NetworkStorageManager::handleLowMemoryWarning):
        (WebKit::NetworkStorageManager::syncLocalStorage):
        (WebKit::NetworkStorageManager::connectToLocalStorageArea):
        (WebKit::NetworkStorageManager::connectToTransientLocalStorageArea):
        (WebKit::NetworkStorageManager::connectToSessionStorageArea):
        (WebKit::NetworkStorageManager::disconnectFromStorageArea):
        (WebKit::NetworkStorageManager::cloneSessionStorageNamespace):
        (WebKit::NetworkStorageManager::getValues):
        (WebKit::NetworkStorageManager::setItem):
        (WebKit::NetworkStorageManager::removeItem):
        (WebKit::NetworkStorageManager::clear):
        (WebKit::toWebsiteDataType): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::StorageBucket):
        (WebKit::OriginStorageManager::StorageBucket::toWebsiteDataType):
        (WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier):
        (WebKit::OriginStorageManager::StorageBucket::localStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::existingLocalStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::sessionStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::existingSessionStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::isActive const):
        (WebKit::OriginStorageManager::StorageBucket::isEmpty const):
        (WebKit::OriginStorageManager::StorageBucket::fetchDataTypesInList):
        (WebKit::OriginStorageManager::StorageBucket::deleteData):
        (WebKit::OriginStorageManager::StorageBucket::moveData):
        (WebKit::OriginStorageManager::StorageBucket::fetchDataTypesInListFromMemory):
        (WebKit::OriginStorageManager::StorageBucket::fetchDataTypesInListFromDisk):
        (WebKit::OriginStorageManager::StorageBucket::deleteLocalStorageData):
        (WebKit::OriginStorageManager::StorageBucket::deleteSessionStorageData):
        (WebKit::OriginStorageManager::OriginStorageManager):
        (WebKit::OriginStorageManager::defaultBucket):
        (WebKit::OriginStorageManager::localStorageManager):
        (WebKit::OriginStorageManager::existingLocalStorageManager):
        (WebKit::OriginStorageManager::sessionStorageManager):
        (WebKit::OriginStorageManager::existingSessionStorageManager):
        (WebKit::OriginStorageManager::isEmpty):
        (WebKit::OriginStorageManager::fetchDataTypesInList):
        (WebKit::OriginStorageManager::deleteData):
        (WebKit::OriginStorageManager::moveData):
        (WebKit::OriginStorageManager::StorageBucket::isActive): Deleted.
        * NetworkProcess/storage/OriginStorageManager.h:
        * NetworkProcess/storage/SQLiteStorageArea.cpp: Added.
        (WebKit::SQLiteStorageArea::statementString const):
        (WebKit::SQLiteStorageArea::SQLiteStorageArea):
        (WebKit::SQLiteStorageArea::close):
        (WebKit::SQLiteStorageArea::~SQLiteStorageArea):
        (WebKit::SQLiteStorageArea::isEmpty):
        (WebKit::SQLiteStorageArea::clear):
        (WebKit::SQLiteStorageArea::createTableIfNecessary):
        (WebKit::SQLiteStorageArea::prepareDatabase):
        (WebKit::SQLiteStorageArea::startTransactionIfNecessary):
        (WebKit::SQLiteStorageArea::cachedStatement):
        (WebKit::SQLiteStorageArea::getItem):
        (WebKit::SQLiteStorageArea::getItemFromDatabase):
        (WebKit::SQLiteStorageArea::allItems):
        (WebKit::SQLiteStorageArea::setItem):
        (WebKit::SQLiteStorageArea::removeItem):
        (WebKit::SQLiteStorageArea::commitTransactionIfNecessary):
        (WebKit::SQLiteStorageArea::handleLowMemoryWarning):
        * NetworkProcess/storage/SQLiteStorageArea.h: Added.
        (isType):
        * NetworkProcess/storage/SessionStorageManager.cpp: Added.
        (WebKit::SessionStorageManager::SessionStorageManager):
        (WebKit::SessionStorageManager::isActive const):
        (WebKit::SessionStorageManager::hasDataInMemory const):
        (WebKit::SessionStorageManager::clearData):
        (WebKit::SessionStorageManager::connectionClosed):
        (WebKit::SessionStorageManager::addStorageArea):
        (WebKit::SessionStorageManager::connectToSessionStorageArea):
        (WebKit::SessionStorageManager::disconnectFromStorageArea):
        (WebKit::SessionStorageManager::cloneStorageArea):
        * NetworkProcess/storage/SessionStorageManager.h: Added.
        * NetworkProcess/storage/StorageAreaBase.cpp: Added. Some code is moved from NetworkProcess/WebStoreage/StorageArea.cpp.
        (WebKit::StorageAreaBase::StorageAreaBase):
        (WebKit::StorageAreaBase::addListener):
        (WebKit::StorageAreaBase::removeListener):
        (WebKit::StorageAreaBase::hasListeners const):
        (WebKit::StorageAreaBase::notifyListenersAboutClear):
        (WebKit::StorageAreaBase::dispatchEvents const):
        * NetworkProcess/storage/StorageAreaBase.h: Added. Some code is moved from NetworkProcess/WebStoreage/StorageArea.h.
        (WebKit::StorageAreaBase::identifier const):
        (WebKit::StorageAreaBase::origin const):
        (WebKit::StorageAreaBase::quota const):
        * NetworkProcess/storage/StorageAreaRegistry.cpp: Added.
        (WebKit::StorageAreaRegistry::registerStorageArea):
        (WebKit::StorageAreaRegistry::unregisterStorageArea):
        (WebKit::StorageAreaRegistry::getStorageArea):
        * NetworkProcess/storage/StorageAreaRegistry.h: Added.
        * Scripts/generate-unified-sources.sh:
        * Sources.txt:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLocalStorageDetails): Deleted.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::excludeDirectoryFromBackup):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        (WebKit::WebsiteDataStore::getLocalStorageDetails): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UnifiedSources-output.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebStorage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::ensureMap):
        (WebKit::StorageAreaMap::connect):
        (WebKit::StorageAreaMap::disconnect):
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::copy):

2021-12-11  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Tail frames are the wrong velocity if momentum event dispatch rate doesn't match screen refresh rate
        https://bugs.webkit.org/show_bug.cgi?id=234168
        <rdar://problem/86247557>

        Reviewed by Simon Fraser.

        In r286671, I scaled the tail frames into the momentum event disaptch
        rate, but they are actually always dispatched at display refresh
        frequency. In many cases these things are the same, but in some
        cases can differ (most commonly a 120Hz display with 60Hz event dispatch),
        so to always have the tail move at the right rate, scale into the display
        refresh rate instead).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowScreenDidChange):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::pageScreenDidChange):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        (WebKit::MomentumEventDispatcher::displayProperties const):
        (WebKit::MomentumEventDispatcher::startDisplayLink):
        (WebKit::MomentumEventDispatcher::stopDisplayLink):
        (WebKit::MomentumEventDispatcher::pageScreenDidChange):
        (WebKit::MomentumEventDispatcher::displayWasRefreshed):
        (WebKit::MomentumEventDispatcher::displayID const): Deleted.
        * WebProcess/WebPage/MomentumEventDispatcher.h:
        Plumb and store the nominal display refresh rate.

        (WebKit::MomentumEventDispatcher::buildOffsetTableWithInitialDelta):
        Scale the tail frames from the 60Hz ideal rate into the display refresh
        rate, instead of the event dispatch rate.

        Incoming events still scale *in* from the event dispatch rate, since
        that's... the rate they come at.

2021-12-11  Don Olmstead  <don.olmstead@sony.com>

        Add a std::nullptr_t constructor for RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=234192

        Reviewed by Yusuke Suzuki.

        Remove uses of `0` when creating an empty RefPtr.

        * WebProcess/win/WebProcessWin.cpp:
        (loadResourceIntoBuffer):

2021-12-11  Lauro Moura  <lmoura@igalia.com>

        Non-unified build fixes, mid mid December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234191

        Unreviewed build fix.

        A few more fixes already a couple of days after the last fix.

        Full build still failing due to the issue discussed on bug226088.

        All changes are inclusion of missing headers.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDirectoryElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMenuElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPreElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:

2021-12-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286893.
        https://bugs.webkit.org/show_bug.cgi?id=234197

        Breaks the build

        Reverted changeset:

        "[macOS] Add new screen and window capture backend"
        https://bugs.webkit.org/show_bug.cgi?id=234029
        https://commits.webkit.org/r286893

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

        Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack.
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::configuration):
        * GPUProcess/media/RemoteAudioTrackProxy.h:
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::configuration):
        (WebKit::RemoteVideoTrackProxy::updateConfiguration):
        (WebKit::RemoteVideoTrackProxy::selectedChanged):
        (WebKit::RemoteVideoTrackProxy::idChanged):
        (WebKit::RemoteVideoTrackProxy::labelChanged):
        (WebKit::RemoteVideoTrackProxy::languageChanged):
        (WebKit::RemoteVideoTrackProxy::configurationChanged): Deleted.
        * GPUProcess/media/RemoteVideoTrackProxy.h:
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        (WebKit::TrackPrivateRemoteConfiguration::decode):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.h:

2021-12-10  Simon Fraser  <simon.fraser@apple.com>

        Scrolling can drop frames when CoreAnimation commits take a long time
        https://bugs.webkit.org/show_bug.cgi?id=234160
        <rdar://86235740>

        Reviewed by Tim Horton.

        In r261985 I added a mechanism that has the scrolling thread wait for the main thread to
        finish a rendering update, and, if the main thread fails to complete in time, then the
        scrolling thread commits. This allows for scrolling synchronization when the main thread is
        responsive, but smooth scrolling when the main thread is busy.

        However, r261985 only waits for WebKit work to finish; what we really care about is whether
        the main thread completes its CA commit in time (because that determines whether the scroll
        shows on the screen).

        So plumb through pre-/post-commit hooks from TiledCoreAnimationDrawingArea, which already
        had them for inspector instrumentation. Then have ThreadedScrollingTree notify
        m_stateCondition in didCompletePlatformRenderingUpdate(), instead of
        didCompleteRenderingUpdate().

        Also, now we can call the inspector hooks from Page, rather than out in TiledCoreAnimationDrawingArea.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willStartPlatformRenderingUpdate):
        (WebKit::WebPage::didCompletePlatformRenderingUpdate):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::addCommitHandlers):

2021-12-10  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Magic Mouse doesn't use momentum event dispatcher
        https://bugs.webkit.org/show_bug.cgi?id=234189
        <rdar://problem/86344954>

        Reviewed by Simon Fraser.

        * Shared/mac/ScrollingAccelerationCurveMac.mm:
        (WebKit::fromIOHIDDevice):
        Fix the FIXME here about the additional fallback values; it turns out
        Magic Mouse is one device that does not have a value for
        kIOHIDScrollAccelerationTypeKey, so we need the full fallback chain to support it.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent):
        Un-wrapping this optional results in losing the engaged state, and sending
        a garbage ScrollingAccelerationCurve across the wire.
        The message argument is also an optional, so just pass it along.

        The result of this bug was that if you had ever used a device with a curve
        for a given page, and then used a device with no curve, MomentumEventDispatcher
        would have a garbage curve (from this message trying to "unset" the optional),
        and a garbage curve results in chaotic scrolling.

2021-12-10  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Yusuke Suzuki.

        Updated install paths for changes in the build system that use a system path prefix.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:

2021-12-10  Devin Rousso  <drousso@apple.com>

        WKWebView doesn’t respond to -copyFont: and -pasteFont:
        https://bugs.webkit.org/show_bug.cgi?id=191379
        <rdar://problem/45878659>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKWebViewMac.mm:
        Add `-copyFont:` and `-pasteFont:` methods via `WEBCORE_COMMAND`.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::pasteAccessCategoryForCommand):
        The `PasteFont` command should be categorized as `DOMPasteAccessCategory::Fonts`.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::pasteboardNameForAccessCategory):
        (WebKit::pasteboardForAccessCategory):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand):
        Correlate `DOMPasteAccessCategory::Fonts` with `NSPasteboardNameFont`.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (pasteboardNameForAccessCategory):
        (pasteboardForAccessCategory):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand):
        Correlate `DOMPasteAccessCategory::Fonts` with `UIPasteboardNameGeneral`.

2021-12-10  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029

        Reviewed by Jer Noble and Youenn Fablet.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKPreferences.mm: Add _useScreenCaptureKit private preference.
        (-[WKPreferences _useScreenCaptureKit]):
        (-[WKPreferences _setUseScreenCaptureKit:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add private delegate for a 
        getDisplayMedia-specific prompt.
        
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _setIndexOfGetDisplayMediaDeviceSelectedForTesting:]): Set the index
        of the screen or window device to return for getDisplayMedia without prompting.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::promptForDisplayCapturePermission): Call new 
        screen/window capture delegate.
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::promptForGetDisplayMedia): Add parameter
        specifying a window or screen capture prompt.
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::manager const):

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

        * UIProcess/mac/DisplayCaptureSessionManager.h: Added.
        (WebKit::DisplayCaptureSessionManager::setIndexOfDeviceSelectedForTesting):
        * UIProcess/mac/DisplayCaptureSessionManager.mm: Added.
        (WebKit::getMockWindowList):
        (WebKit::getCGWindowList):
        (WebKit::getWindowList):
        (WebKit::alertForWindowSelection):
        (WebKit::DisplayCaptureSessionManager::alertForGetDisplayMedia):
        (WebKit::DisplayCaptureSessionManager::isAvailable):
        (WebKit::DisplayCaptureSessionManager::singleton):
        (WebKit::DisplayCaptureSessionManager::DisplayCaptureSessionManager):
        (WebKit::DisplayCaptureSessionManager::~DisplayCaptureSessionManager):
        (WebKit::DisplayCaptureSessionManager::promptForGetDisplayMedia):
        (WebKit::DisplayCaptureSessionManager::deviceSelectedForTesting):
        (WebKit::DisplayCaptureSessionManager::showWindowPicker):
        (WebKit::DisplayCaptureSessionManager::showScreenPicker):

        * UIProcess/mac/UserMediaPermissionRequestProxyMac.h: Added.
        * UIProcess/mac/UserMediaPermissionRequestProxyMac.mm: Added.
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxyMac::UserMediaPermissionRequestProxyMac):
        (WebKit::UserMediaPermissionRequestProxyMac::~UserMediaPermissionRequestProxyMac):
        (WebKit::UserMediaPermissionRequestProxyMac::promptForGetDisplayMedia):
        (WebKit::UserMediaPermissionRequestProxyMac::canPromptForGetDisplayMedia):
        * WebKit.xcodeproj/project.pbxproj:

2021-12-10  Megan Gardner  <megan_gardner@apple.com>

        Image does not update after Markup Pane is dismissed.
        https://bugs.webkit.org/show_bug.cgi?id=234162

        Reviewed by Devin Rousso.

        Once the item is retured from the Sharing Service, we need to pipe the information
        back to the attachement element so that it can be properly updated.
        This includes holding onto the attachment ID of the controlled image so that it 
        can later be found and updated.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode const):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::controlledImageAttachmentID const):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        * UIProcess/API/Cocoa/_WKAttachment.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        (-[_WKAttachment setData:newContentType:]):
        * UIProcess/API/Cocoa/_WKAttachmentInternal.h:
        * UIProcess/mac/WKSharingServicePickerDelegate.h:
        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
        (-[WKSharingServicePickerDelegate setAttachmentID:]):
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleImageServiceClick):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleImageServiceClick):

2021-12-10  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support find-in-page keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=234163
        rdar://86333128

        Reviewed by Devin Rousso.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView findForWebView:]):
        (-[WKContentView findNextForWebView:]):
        (-[WKContentView findPreviousForWebView:]):

2021-12-10  Brady Eidson  <beidson@apple.com>

        Teach webpushd to launch an app in response to an injected message.
        https://bugs.webkit.org/show_bug.cgi?id=234122

        Reviewed by Alex Christensen.

        To by covered by future API test.

        When a message comes in, webpushd knows which code signing identifier it was targetted for.
        It launches that app in a special mode so the app can then "take it from there"
        
        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::injectPushMessageForTesting):
        (WebPushD::Daemon::notifyClientPushMessageIsAvailable):
        
2021-12-10  Antoine Quint  <graouts@webkit.org>

        Expose the maximum device frame rate to the Web Animations model
        https://bugs.webkit.org/show_bug.cgi?id=234161
        rdar://85983792

        Reviewed by Simon Fraser.

        The display's nominal frame rate was only provided to the Page on macOS. We also
        expose it on iOS such that the new DocumentTimeline property also works on iOS.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler initWithDrawingAreaProxy:]):
        * UIProcess/WebPageProxy.h:

2021-12-10  Devin Rousso  <drousso@apple.com>

        Allow `Pasteboard::readBuffer` to read from the pasteboard as a whole instead of a specific item
        https://bugs.webkit.org/show_bug.cgi?id=233940

        Reviewed by Wenson Hsieh.

        In order to match the WK1 implementation of `-pasteFont:` <https://webkit.org/b/191379>, we
        need to read from the font pasteboard as a whole, not a specific item. Make the `index` into
        an `std::optional` so that we can have this behavior without needing to have a new method.

        No change in behavior.

        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.cpp:
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):

2021-12-10  Alex Christensen  <achristensen@webkit.org>

        Move if-domain and unless-domain conversion to WKContentRuleList parsing
        https://bugs.webkit.org/show_bug.cgi?id=234126

        Reviewed by Tim Hatcher.

        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const): Deleted.
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::encodeContentRuleListMetaData):
        (API::decodeContentRuleListMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::getContentRuleListSourceFromMappedFile):
        * UIProcess/API/APIContentRuleListStore.h:

2021-12-10  Per Arne Vollan  <pvollan@apple.com>

        [WP] Block access to container manager service for Mail
        https://bugs.webkit.org/show_bug.cgi?id=234080
        <rdar://problem/86269784>

        Reviewed by Brent Fulgham.

        Local testing is not showing access to this daemon when running Mail.

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

2021-12-10  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect>
        https://bugs.webkit.org/show_bug.cgi?id=234108

        Reviewed by Cameron McCormack.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):

2021-12-10  Per Arne Vollan  <pvollan@apple.com>

        [WP][macOS] Add required system call
        https://bugs.webkit.org/show_bug.cgi?id=234129

        Reviewed by Brent Fulgham.

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

2021-12-09  Darin Adler  <darin@apple.com>

        Use simpler idioms for std::less and std::greater possible in modern C++
        https://bugs.webkit.org/show_bug.cgi?id=234117

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::equalizeTailGaps): Removed unneeded
        template arguments for std::greater, and removed explicit use of std::less,
        since that's what std::sort does by default.

2021-12-10  Per Arne Vollan  <pvollan@apple.com>

        Fix sandbox build error
        https://bugs.webkit.org/show_bug.cgi?id=234146

        Unreviewed fix sandbox build error after r286460.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-12-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r282794.
        <rdar://problem/86271222>

        Regressed PLT5

        Reverted changeset:

        "Avoid doing a second server pre-connect after a process-swap"
        https://bugs.webkit.org/show_bug.cgi?id=230517
        https://commits.webkit.org/r282794

2021-12-10  Youenn Fablet  <youenn@apple.com>

        REGRESSION (iOS 15): Safari loses Network access when establishing WebRTC session
        https://bugs.webkit.org/show_bug.cgi?id=233752
        <rdar://problem/86196093>

        Reviewed by Geoffrey Garen.

        When we get an error from a UDP nw socket, we do not need to stop reading and close it.
        We can just log the error and continue reading as the error might get fixed later on.

        Not easily testable.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:

2021-12-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        IOSurface memory attribution is hard to use in constructors
        https://bugs.webkit.org/show_bug.cgi?id=232988
        <rdar://problem/85541918>

        Reviewed by Chris Dumez.

        Remove ifdefs and direct use of task_id_token_t.
        Instead, use WebCore::ProcessIdentifier. This way the
        cross-platform code is easier to author.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::webProcessIdentity const):
        (WebKit::GPUConnectionToWebProcess::webProcessIdentityToken const): Deleted.
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::RemoteGraphicsContextGLCocoa):
        (WebKit::RemoteGraphicsContextGLCocoa::platformWorkQueueInitialize):
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):
        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::setOwnershipIdentity):
        (WebKit::RemoteImageBuffer::setProcessOwnership): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::Function<void):
        * Shared/GPUProcessConnectionParameters.h:
        (WebKit::GPUProcessConnectionParameters::encode const):
        (WebKit::GPUProcessConnectionParameters::decode):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::setShouldApplyRotation):
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        (WebKit::UserMediaCaptureManagerProxy::clone):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::setWebProcessIdentityToken): Deleted.
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        (WebKit::UserMediaCaptureManagerProxy::ConnectionProxy::webProcessIdentityToken const): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
        (WebKit::ImageBufferShareableBitmapBackend::setOwnershipIdentity):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::setOwnershipIdentity):
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::setProcessOwnership): Deleted.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):

2021-12-10  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid December 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=234106

        Unreviewed non-unified build fixes.

        * NetworkProcess/storage/OriginStorageManager.cpp: Add missing WebsiteDataType.h and
        wtf/FileSystem.h headers.

2021-12-09  Simon Fraser  <simon.fraser@apple.com>

        Inspector "composite" events are all very short
        https://bugs.webkit.org/show_bug.cgi?id=234114
        <rdar://86299391>

        Reviewed by Tim Horton.

        The kCATransactionPhasePreCommit callbacks fire after painting, but we want the composite
        time to include painting so use kCATransactionPhasePreLayout.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::addCommitHandlers):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::addCommitHandlers):

2021-12-09  Aditya Keerthi  <akeerthi@apple.com>

        Fix the tvOS and watchOS builds after r286641
        https://bugs.webkit.org/show_bug.cgi?id=234124

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        WKWebView does not conform to the protocol on watchOS/tvOS.

2021-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Add ability to inject messages into webpushd
        https://bugs.webkit.org/show_bug.cgi?id=233988

        Unreviewed attempt to fix some builds.

        * Configurations/webpushtool.xcconfig:

2021-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new WKWebpagePreferences SPI for modal container observation policies
        https://bugs.webkit.org/show_bug.cgi?id=234013
        rdar://86219613

        Reviewed by Brent Fulgham.

        Add a new website policy flag `ModalContainerObservationPolicy`, and expose it as SPI on WKWebpagePreferences.
        Refer to rdar://86219613 for additional details.

        * 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::modalContainerObservationPolicy):
        (WebKit::coreModalContainerObservationPolicy):
        (-[WKWebpagePreferences _setModalContainerObservationPolicy:]):
        (-[WKWebpagePreferences _modalContainerObservationPolicy]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2021-12-09  Jigen Zhou  <jigen.zhou@sony.com>

        [Playstation] Fix build break after r286751 with INTELLIGENT_TRACKING_PREVENTION enabled
        https://bugs.webkit.org/show_bug.cgi?id=234095

        Reviewed by Darin Adler.

        Added a forward declaration of class ResourceError to NetworkSession.h to resolve
        a compiling error. No new test is need since no behavior change is expected.

        * NetworkProcess/NetworkSession.h:

2021-12-09  Devin Rousso  <drousso@apple.com>

        Add a `DOMPasteAccessCategory` to control which pasteboard the WebProcess is granted access to when pasting
        https://bugs.webkit.org/show_bug.cgi?id=233939

        Reviewed by Wenson Hsieh.

        Implementing `-pasteFont:` <https://webkit.org/b/191379> requires that we read from the font
        pasteboard instead of the general pasteboard. In order to allow web content to trigger this
        (e.g. `document.execCommand("PasteFont"))`) we must have a way for the WebProcess to signal
        that it wishes to read from the font pasteboard instead of the general pasteboard. As such,
        create and pass along a `DOMPasteAccessCategory` to `requestDOMPasteAccess`.

        No change in behavior.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        Indicate which header is associated with `DOMPasteAccessCategory`.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:pasteAccessCategory:]): Added.
        (-[WKDOMPasteMenuDelegate menuDidClose:]):
        (-[WKDOMPasteMenuDelegate _web_grantDOMPasteAccess]): Added.
        (WebKit::WebViewImpl::handleProcessSwapOrExit):
        (WebKit::pasteboardNameForAccessCategory): Added.
        (WebKit::pasteboardForAccessCategory): Added.
        (WebKit::WebViewImpl::requestDOMPasteAccess):
        (WebKit::WebViewImpl::handleDOMPasteRequestForCategoryWithResult):
        (WebKit::WebViewImpl::hideDOMPasteMenuWithResult): Added.
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:]): Deleted.
        (WebKit::WebViewImpl::handleDOMPasteRequestWithResult): Deleted.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_grantDOMPasteAccess]): Deleted.
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView _web_grantDOMPasteAccess]): Deleted.
        Pass the `DOMPasteAccessCategory` to the `WKDOMPasteMenuDelegate` and use it as the `target`
        of the `NSMenuItem` so that we can pass along the `DOMPasteAccessCategory` in the `action`.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (pasteboardNameForAccessCategory): Added.
        (pasteboardForAccessCategory): Added.
        (-[WKContentView _handleDOMPasteRequestWithResult:]):
        (-[WKContentView _requestDOMPasteAccessForCategory:elementRect:originIdentifier:completionHandler:]): Added.
        (-[WKContentView _requestDOMPasteAccessWithElementRect:originIdentifier:completionHandler:]): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/playstation/PageClientImpl.h:
        * UIProcess/playstation/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/win/PageClientImpl.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestDOMPasteAccess):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestDOMPasteAccess):
        Pass along the `DOMPasteAccessCategory`.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::pasteAccessCategoryForCommand): Added.
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestDOMPasteAccess):
        (WebKit::WebPageProxy::willPerformPasteCommand):
        (WebKit::isPasteCommandName): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand)
        Create a mapping between paste command name and `DOMPasteAccessCategory`.

2021-12-09  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Add the encoding and decoding for FEImage
        https://bugs.webkit.org/show_bug.cgi?id=234099

        Reviewed by Wenson Hsieh.

        Add the support to encode and decode the FEImage through FilterReference.
        The RenderingResourceIdentifier of the Image or the ImageBuffer will be
        used while encoding and decoding the FEImage. Resolving the decoded
        RenderingResourceIdentifier back to an Image or ImageBuffer will happen
        in RemoteDisplayListRecorder::drawFilteredImageBuffer).

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):
        * Platform/IPC/FilterReference.h:
        (IPC::FilterReference::encodeFilterEffect):
        (IPC::FilterReference::decodeFilterEffect):

2021-12-09  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add SPI to enable find interactions on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=234017
        rdar://86140542

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _findInteractionEnabled]):
        (-[WKWebView _setFindInteractionEnabled:]):

        Make the contentView the searchableObject, rather than self (the WKWebView)
        to avoid a retain cycle.

        (-[WKWebView _findInteraction]):
        (-[WKWebView offsetFromPosition:toPosition:inDocument:]):
        (-[WKWebView decorateFoundTextRange:inDocument:usingStyle:]):
        * UIProcess/ios/WKContentViewInteraction.h:

        Make WKContentView conform to _UITextSearching so that it can be set as
        the interaction's searchableObject.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView decorateFoundTextRange:inDocument:usingStyle:]):
        (-[WKContentView offsetFromPosition:toPosition:inDocument:]):
        (-[WKContentView decorateFoundTextRange:usingStyle:]): Deleted.

2021-12-09  Alex Christensen  <achristensen@webkit.org>

        Prepare for transition to C++20
        https://bugs.webkit.org/show_bug.cgi?id=234022

        Reviewed by Yusuke Suzuki.

        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::didParseTracks):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::getSampleMap const):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setRequiresPageVisibilityToPlayAudio:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration setRequiresSecureHTTPSProxyConnection:]):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::setRequiresSecureHTTPSProxyConnection):

2021-12-09  Alex Christensen  <achristensen@webkit.org>

        Use Span for IPC::ArrayReference and DataReference
        https://bugs.webkit.org/show_bug.cgi?id=233931

        Reviewed by Wenson Hsieh.

        No change in behavior, just simplifying some code.

        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/ArrayReference.h:
        (): Deleted.
        (IPC::ArrayReference::ArrayReference): Deleted.
        (IPC::ArrayReference::isEmpty const): Deleted.
        (IPC::ArrayReference::size const): Deleted.
        (IPC::ArrayReference::data const): Deleted.
        (IPC::ArrayReference::vector const): Deleted.
        * Platform/IPC/DataReference.h:
        * Platform/IPC/SharedBufferDataReference.cpp:
        (IPC::SharedBufferDataReference::encode const):
        * Shared/API/APIData.cpp:
        (API::Data::create):
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtension::Handle::decode):
        * Shared/UserData.cpp:
        (WebKit::UserData::decode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::ArgumentCoder<RetainPtr<CFURLRef>>::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::createData):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):
        (WebKit::WebPageProxy::wrapCryptoKey):
        (WebKit::WebPageProxy::unwrapCryptoKey):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _wk_pageCountForPrintFormatter:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::getShaderPrecisionFormat):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::didReceiveBinaryData):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::receiveData):
        * WebProcess/UserContent/WebUserContentController.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::replaceSelectionWithPasteboardData):

2021-12-09  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r286754.

        Broke 2 tests on all mac an iOS

        Reverted changeset:

        "Add an experimental trackConfiguration accessor on AudioTrack
        & VideoTrack."
        https://bugs.webkit.org/show_bug.cgi?id=230841
        https://commits.webkit.org/r286754

2021-12-09  Megan Gardner  <megan_gardner@apple.com>

        Markup Pane not displaying.
        https://bugs.webkit.org/show_bug.cgi?id=234089

        Reviewed by Tim Horton.

        An optional method on NSSharingServiceDelegate was not implemented, meaning
        that the markup pane did not know where to present, and would assert and fail to
        show up. Make sure this is implemented for the image controls menu and also 
        give it the correct location to present form.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode const):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::controlledImageFrame const):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        * UIProcess/mac/WKSharingServicePickerDelegate.h:
        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
        (-[WKSharingServicePickerDelegate setSourceFrame:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceFrameOnScreenForShareItem:]):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleImageServiceClick):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleImageServiceClick):

2021-12-09  Tim Horton  <timothy_horton@apple.com>

        Momentum Generator: Scroll tail hiccup only when scrolling up on 60Hz displays
        https://bugs.webkit.org/show_bug.cgi?id=234104
        <rdar://problem/86291413>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::equalizeTailGaps):
        Sort in the correct direction based on the sign of the first delta...

2021-12-09  Chris Dumez  <cdumez@apple.com>

        [WPE] Crash under WebProcessProxy::setIsInProcessCache when closing web view in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=233933

        Reviewed by Geoffrey Garen.

        The crash would occur because the WebProcessPool destructor would call WebProcessCache::clear()
        which would destroy WebProcessCache::CachedProcess objects, causing
        WebProcessProxy::setIsInProcessCache(false) to get called. Previously, this call to
        setIsInProcessCache() would convert the WeakPtr the WebProcessProxy held to its process pool
        into a RefPtr, thus causing the WebProcessPool to get ref'd while in the middle of destruction.

        To address the issue, the setIsInProcessCache() setter now takes a WillShutDown flag that gets
        set in the CachedProcess destructor and which causes setIsInProcessCache() to return early
        right after setting the m_isInProcessCache flag, without trying to send IPC to the WebProcess
        or trying to ref the WebProcessPool.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::CachedProcess::~CachedProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsInProcessCache):
        * UIProcess/WebProcessProxy.h:

2021-12-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be to notified when an extension tab navigates
        https://bugs.webkit.org/show_bug.cgi?id=233935
        <rdar://86123899>

        Reviewed by Patrick Angle.

        Add plumbing to notify clients when an extension tab loads. This is implemented similarly to
        -inspectorExtension:didShowExtensionTab: and -inspectorExtension:didHideExtensionTab:.

        * UIProcess/API/APIInspectorExtensionClient.h:
        (API::InspectorExtensionClient::didNavigateExtensionTab):

        * UIProcess/API/Cocoa/_WKInspectorExtensionDelegate.h:

        * UIProcess/Inspector/Cocoa/InspectorExtensionDelegate.h:
        * UIProcess/Inspector/Cocoa/InspectorExtensionDelegate.mm:
        (WebKit::InspectorExtensionDelegate::InspectorExtensionDelegate):
        (WebKit::InspectorExtensionDelegate::InspectorExtensionClient::didNavigateExtensionTab):

        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.messages.in:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::didNavigateExtensionTab):

        * WebProcess/Inspector/RemoteWebInspectorUI.h:
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::didNavigateExtensionTab):

        * WebProcess/Inspector/WebInspectorUI.h:
        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::didHideExtensionTab):
        (WebKit::WebInspectorUI::didNavigateExtensionTab):

        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::createTabForExtension):
        Standardize on returning {result: value} for showExtensionTab.

        (WebKit::WebInspectorUIExtensionController::showExtensionTab):
        Standardize on returning {result: value} for showExtensionTab.
        Also, there's no need to inspect the result value if it's not an error.

        (WebKit::WebInspectorUIExtensionController::didNavigateExtensionTab):
        Add plumbing.

2021-12-09  Brady Eidson  <beidson@apple.com>

        Add ability to inject messages into webpushd
        https://bugs.webkit.org/show_bug.cgi?id=233988

        Reviewed by Alex Christensen.

        Covered by API tests.

        This patch:
         - Adds WKWebsiteDataStore SPI to fetch pending push messages for the embedding application
         - Gives webpushd code to inject a push message for a given bundle identifier
         - Gives webpushtool the ability to send one of these fake messages
         - Gives webpushtool the ability to reconnect to the next daemon instance after the current connection is dropped
         - Tests the injection and fetching of push messages via TestWebKitAPI

        * Configurations/webpushtool.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:
        * Resources/webpushtool.entitlements:

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getPendingPushMessages):
        (WebKit::NetworkProcess::processPushMessage):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::getPendingPushMessages):
        (WebKit::ReplyCaller<Vector<WebPushMessage>::callReply):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

        * Shared/Cocoa/WebPushMessageCocoa.mm: Copied from Source/WebKit/webpushd/webpushtool/WebPushToolConnection.h.
        (WebKit::WebPushMessage::fromDictionary):
        (WebKit::WebPushMessage::toDictionary const):

        * Shared/PushMessageForTesting.h: Copied from Source/WebKit/Shared/WebPushDaemonConstants.h.
        (WebKit::WebPushD::PushMessageForTesting::encode const):
        (WebKit::WebPushD::PushMessageForTesting::decode):

        * Shared/WebPushDaemonConstants.h:
        (WebKit::WebPushD::messageTypeSendsReply):

        * Shared/WebPushMessage.h: Copied from Source/WebKit/webpushd/webpushtool/WebPushToolConnection.h.
        (WebKit::WebPushMessage::encode const):
        (WebKit::WebPushMessage::decode):

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getPendingPushMessages:]):
        (-[WKWebsiteDataStore _processPushMessage:completionHandler:]):
        (-[WKWebsiteDataStore _processPushMessage:registration:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getPendingPushMessages):
        (WebKit::NetworkProcessProxy::processPushMessage):
        * UIProcess/Network/NetworkProcessProxy.h:

        * webpushd/PushClientConnection.h:
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::hostAppHasPushEntitlement):
        (WebPushD::ClientConnection::hostAppHasPushInjectEntitlement):
        (WebPushD::ClientConnection::hostHasEntitlement):
        (WebPushD::ClientConnection::broadcastDebugMessage):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::MessageInfo::injectPushMessageForTesting::encodeReply):
        (WebPushD::MessageInfo::getPendingPushMessages::encodeReply):
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::injectPushMessageForTesting):
        (WebPushD::Daemon::getPendingPushMessages):

        * webpushd/webpushtool/WebPushToolConnection.h:
        (WebPushTool::Connection::setPushMessage):

        * webpushd/webpushtool/WebPushToolConnection.mm:
        (WebPushTool::Connection::startAction):
        (WebPushTool::Connection::sendPushMessage):

        * webpushd/webpushtool/WebPushToolMain.mm:
        (printUsageAndTerminate):
        (pushMessageFromArguments):
        (main):

2021-12-09  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Remove user gesture requirement for using platform authenticator on the web
        https://bugs.webkit.org/show_bug.cgi?id=230893
        <rdar://problem/79781342>

        Reviewed by Brent Fulgham.

        This patch loosens the user gesture requirement around using WebAuthn with respect to user gestures by
        removing the Quirks.h allowlist of sites that get a freebie. Instead the new behavior is
        all sites get one freebie, then on subsequent attempts they show a non-modal consent dialog.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestWebAuthenticationNoGesture):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::requestWebAuthenticationNoGesture):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebAuthenticatorCoordinator::processingUserGesture):

2021-12-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed fix after r286778 to address WebContent crashes on launch

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

2021-12-09  Per Arne Vollan  <pvollan@apple.com>

        [macOS][WP] Block access to unused system calls
        https://bugs.webkit.org/show_bug.cgi?id=234003

        Reviewed by Brent Fulgham.

        Based on telemetry, block access to unused system calls in the WebContent process on macOS.

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

2021-12-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286764.
        https://bugs.webkit.org/show_bug.cgi?id=234081

        broke the build

        Reverted changeset:

        "Add ability to inject messages into webpushd"
        https://bugs.webkit.org/show_bug.cgi?id=233988
        https://commits.webkit.org/r286764

2021-12-09  Youenn Fablet  <youenn@apple.com>

        Copy ServiceWorkerNavigationPreloader error when failing its ServiceWorkerFetchTask
        https://bugs.webkit.org/show_bug.cgi?id=234002

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        When failing a ServiceWorkerNavigationPreloader, we might delete it, so it is not safe to manage a reference to its error.
        Instead copy the error.

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com> and Don Olmstead  <don.olmstead@sony.com>

        Move TextCodec files from WebCore/platform/text to WebCore/PAL/text
        https://bugs.webkit.org/show_bug.cgi?id=233683

        Reviewed by Yusuke Suzuki.

        Update to use the new PAL files.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::StorageManagerSet):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::suggestedFilename const):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::suggestedFilename const):
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * UIProcess/API/glib/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_select_files):
        * UIProcess/API/glib/WebKitSettings.cpp:
        * UIProcess/Inspector/WebInspectorUIProxy.cpp:
        (WebKit::WebInspectorUIProxy::isMainOrTestInspectorPage):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):

2021-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build.

        WebKitBuild/Release/WTF/Headers/wtf/persistence/PersistentCoder.h:40:11: error: ‘const class WTF::String’ has no member named ‘encode’
   40 |         t.encode(encoder);
      |         ~~^~~~~~


        * NetworkProcess/storage/NetworkStorageManager.cpp: Include wtf/persistence/PersistentCoders.h

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] [MacCatalyst] Fix WebGPU Mac Catalyst build in Apple's internal build system
        https://bugs.webkit.org/show_bug.cgi?id=234072

        Unreviewed.

        No new tests because there is no behavior change.

        * Configurations/BaseTarget.xcconfig:

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Fix WebGPU build in Apple's internal build system
        https://bugs.webkit.org/show_bug.cgi?id=234070

        Unreviewed.

        The PAL headers get put in a different place.

        No new tests because there is no behavior change.

        * Configurations/BaseTarget.xcconfig:

2021-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Ensure atspi wrappers have root set at construction time
        https://bugs.webkit.org/show_bug.cgi?id=233804

        Reviewed by Joanmarie Diggs.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject): Remove ATSPI specific code.
        (WKAccessibilityFocusedObject): Ditto.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::accessibilityRootObject const): Deleted.

2021-12-08  Brady Eidson  <beidson@apple.com>

        Add ability to inject messages into webpushd
        https://bugs.webkit.org/show_bug.cgi?id=233988

        Reviewed by Alex Christensen.

        Covered by API tests.

        This patch:
         - Adds WKWebsiteDataStore SPI to fetch pending push messages for the embedding application
         - Gives webpushd code to inject a push message for a given bundle identifier
         - Gives webpushtool the ability to send one of these fake messages
         - Gives webpushtool the ability to reconnect to the next daemon instance after the current connection is dropped
         - Tests the injection and fetching of push messages via TestWebKitAPI

        * Configurations/webpushtool.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:
        * Resources/webpushtool.entitlements:

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getPendingPushMessages):
        (WebKit::NetworkProcess::processPushMessage):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::getPendingPushMessages):
        (WebKit::ReplyCaller<Vector<WebPushMessage>::callReply):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

        * Shared/Cocoa/WebPushMessageCocoa.mm: Copied from Source/WebKit/webpushd/webpushtool/WebPushToolConnection.h.
        (WebKit::WebPushMessage::fromDictionary):
        (WebKit::WebPushMessage::toDictionary const):

        * Shared/PushMessageForTesting.h: Copied from Source/WebKit/Shared/WebPushDaemonConstants.h.
        (WebKit::WebPushD::PushMessageForTesting::encode const):
        (WebKit::WebPushD::PushMessageForTesting::decode):

        * Shared/WebPushDaemonConstants.h:
        (WebKit::WebPushD::messageTypeSendsReply):

        * Shared/WebPushMessage.h: Copied from Source/WebKit/webpushd/webpushtool/WebPushToolConnection.h.
        (WebKit::WebPushMessage::encode const):
        (WebKit::WebPushMessage::decode):

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _getPendingPushMessages:]):
        (-[WKWebsiteDataStore _processPushMessage:completionHandler:]):
        (-[WKWebsiteDataStore _processPushMessage:registration:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getPendingPushMessages):
        (WebKit::NetworkProcessProxy::processPushMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
\
        * webpushd/PushClientConnection.h:
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::hostAppHasPushEntitlement):
        (WebPushD::ClientConnection::hostAppHasPushInjectEntitlement):
        (WebPushD::ClientConnection::hostHasEntitlement):
        (WebPushD::ClientConnection::broadcastDebugMessage):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::MessageInfo::injectPushMessageForTesting::encodeReply):
        (WebPushD::MessageInfo::getPendingPushMessages::encodeReply):
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::injectPushMessageForTesting):
        (WebPushD::Daemon::getPendingPushMessages):

        * webpushd/webpushtool/WebPushToolConnection.h:
        (WebPushTool::Connection::setPushMessage):

        * webpushd/webpushtool/WebPushToolConnection.mm:
        (WebPushTool::Connection::startAction):
        (WebPushTool::Connection::sendPushMessage):

        * webpushd/webpushtool/WebPushToolMain.mm:
        (printUsageAndTerminate):
        (pushMessageFromArguments):
        (main):

2021-12-08  Megan Gardner  <megan_gardner@apple.com>

        Show correct content menu for images services chevron.
        https://bugs.webkit.org/show_bug.cgi?id=233970

        Reviewed by Tim Horton.

        Add support for showing the correct context menu for image services.
        Since this is internal only and can never be affected by web content, we bypass
        the web content round trip and directly message the UIProcess about showing 
        a context menu for images. And because it would be bizarre if the web content 
        could prevent a menu from popping up on a button they have no control over.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::m_selectionIsEditable):
        (WebKit::ContextMenuContextData::setImage):
        (WebKit::ContextMenuContextData::controlledDataIsEditable const):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::webHitTestResultData):
        (WebKit::ContextMenuContextData::webHitTestResultData const):
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::show):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::getShareMenuItem):
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::useContextMenuItems):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::handleContextMenuQuickLookImage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleImageServiceClick):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleImageServiceClick):

2021-12-08  Kyle Piddington  <kpiddington@apple.com>

        [MacCatalyst] Update header search paths for ANGLE Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=233996

        For iOSMac builds, search for ANGLE public headers inside System/iOSSupport

        Reviewed by Dean Jackson.

        * Configurations/BaseTarget.xcconfig:

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

        Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack.
        https://bugs.webkit.org/show_bug.cgi?id=230841

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::configuration):
        * GPUProcess/media/RemoteAudioTrackProxy.h:
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::configuration):
        (WebKit::RemoteVideoTrackProxy::updateConfiguration):
        (WebKit::RemoteVideoTrackProxy::selectedChanged):
        (WebKit::RemoteVideoTrackProxy::idChanged):
        (WebKit::RemoteVideoTrackProxy::labelChanged):
        (WebKit::RemoteVideoTrackProxy::languageChanged):
        (WebKit::RemoteVideoTrackProxy::configurationChanged): Deleted.
        * GPUProcess/media/RemoteVideoTrackProxy.h:
        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
        (WebKit::TrackPrivateRemoteConfiguration::encode const):
        (WebKit::TrackPrivateRemoteConfiguration::decode):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.h:

2021-12-08  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] [Filters] Add the encoding and decoding for SVGFilter
        https://bugs.webkit.org/show_bug.cgi?id=234024

        Reviewed by Wenson Hsieh.

        When encoding the SVGFilter we need to encode the individual FilterEffects
        in filter.expression(). And for every SVGFilterExpressionTerm we need to
        encode the index of its Ref<FilterEffect> in the individual FilterEffects.

        When decoding the SVGFilter we do the opposite. We get the Ref<FilterEffect>
        which corresponds to index of ExpressionReferenceTerm. We send the decoded
        expression to the constructor of SVGFilter.

        * Platform/IPC/FilterReference.h:
        (IPC::FilterReference::decodeFilterEffect):
        (IPC::FilterReference::ExpressionReferenceTerm::encode const):
        (IPC::FilterReference::ExpressionReferenceTerm::decode):
        (IPC::FilterReference::encodeSVGFilter):
        (IPC::FilterReference::decodeSVGFilter):

2021-12-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to load a resource in the context of a page
        https://bugs.webkit.org/show_bug.cgi?id=233908

        Reviewed by Tim Horton.

        This is similar to startDownloadUsingRequest but you don't have to get the data from the disk.
        This is similar to NSURLSession's dataTaskWithRequest:completionHandler: but using the same session as the page.
        This is needed because LinkPresentation is currently using _getMainResourceDataWithCompletionHandler after loading
        in a WKWebView made with _relatedWebView to get the content of a resource, and that's awful and limited to certain mime types.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::requestResource):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::requestResource):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::requestResource):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestResource:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestResource):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestResource):
        * UIProcess/WebPageProxy.h:

2021-12-08  BJ Burg  <bburg@apple.com>

        Web Inspector: evaluateScriptForExtension() incorrectly unwraps internal errors, causing an ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=233961
        <rdar://86123763>

        Reviewed by Patrick Angle.

        Standardize the unwrapping code based on the evaluateScriptInExtensionTab version, which
        correctly handles the case where an internal error is returned by the evaluation.
        This happens, for example, when NotImplemented is returned for unsupported evaluation
        options.

        This particular issue was caused by a lack of support for the 'frameURL' option.
        The fix for that is tracked by https://webkit.org/b/222568/.

        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::evaluateScriptForExtension):

2021-12-08  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Consider support for the displayName for FIDO authenticator
        https://bugs.webkit.org/show_bug.cgi?id=233389
        rdar://84938707

        Reviewed by Brent Fulgham.

        Start storing the displayName field with the platform authenticator
        and add them to the getAllLocalAuthenticatorCredentials SPI.

        The displayName is part of the WebAuthn level 2 spec:
        https://www.w3.org/TR/webauthn-2/#dom-publickeycredentialuserentity-displayname

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (getAllLocalAuthenticatorCredentialsImpl):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):

2021-12-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r286596.

        broke 2 tests on iOS

        Reverted changeset:

        "Cocoa WebGL should support UI side compositing"
        https://bugs.webkit.org/show_bug.cgi?id=231009
        https://commits.webkit.org/r286596

2021-12-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r286632.

        Broke 3 tests on iOS

        Reverted changeset:

        "Add a `DOMPasteAccessCategory` to control which pasteboard
        the WebProcess is granted access to when pasting"
        https://bugs.webkit.org/show_bug.cgi?id=233939
        https://commits.webkit.org/r286632

2021-12-08  Per Arne Vollan  <pvollan@apple.com>

        [iOS][WP] Block unused sys calls
        https://bugs.webkit.org/show_bug.cgi?id=233999

        Reviewed by Brent Fulgham.

        Block sys calls in the WebContent process on iOS that are unused according to telemetry.

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

2021-12-08  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Momentum tail should have montonically decreasing deltas and tail gaps
        https://bugs.webkit.org/show_bug.cgi?id=233993
        <rdar://problem/86118367>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::consumeDeltaForCurrentTime):
        (WebKit::MomentumEventDispatcher::buildOffsetTableWithInitialDelta):
        (WebKit::MomentumEventDispatcher::computeNextDelta):
        In order to avoid visual stutter due to integral rounding of the
        deltas we dispatch in the momentum phase, switch to a table of
        deltas instead of interpolating along the offset curve during the
        tail end of the animation (when the rounding makes up a large
        proportion of each delta).

        (WebKit::MomentumEventDispatcher::equalizeTailGaps):
        Sort the deltas up until the first zero to ensure a lack of unexpected
        perceptual acceleration, and then inject skipped frames in order to
        ensure that frames that have effective scroll movement (non-zero deltas)
        are always spaced equally-or-further apart than earlier ones, but
        never closer together (which, again, would be percieved as acceleration).

        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        (WebKit::MomentumEventDispatcher::pushLogEntry):
        (WebKit::MomentumEventDispatcher::flushLog):
        Lastly, adjust some logging to make it easier to tell which row in
        the output corresponds to an event delta or generated delta, so it's
        easier to find skipped frames.
        * WebProcess/WebPage/MomentumEventDispatcher.h:

2021-12-08  Chris Dumez  <cdumez@apple.com>

        Make KVO work for WKWebpagePreferences._captivePortalModeEnabled
        https://bugs.webkit.org/show_bug.cgi?id=233954

        Reviewed by Alex Christensen.

        Make KVO work for WKWebpagePreferences._captivePortalModeEnabled so that the client can observe
        when the system setting changes. Also add SPI to simulate a change of the system setting so that
        I can write API tests.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _setCaptivePortalModeEnabledGloballyForTesting:]):
        (+[WKProcessPool _clearCaptivePortalModeEnabledGloballyForTesting]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences init]):
        (-[WKWebpagePreferences _setCaptivePortalModeEnabled:]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
        * UIProcess/CaptivePortalModeObserver.h: Copied from Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h.
        (WebKit::CaptivePortalModeObserver::~CaptivePortalModeObserver):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::captivePortalModeObservers):
        (WebKit::isCaptivePortalModeEnabledGloballyForTesting):
        (WebKit::isCaptivePortalModeEnabledBySystemIgnoringCaching):
        (WebKit::WebProcessPool::captivePortalModeStateChanged):
        (WebKit::addCaptivePortalModeObserver):
        (WebKit::removeCaptivePortalModeObserver):
        (WebKit::captivePortalModeEnabledBySystem):
        (WebKit::setCaptivePortalModeEnabledGloballyForTesting):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::addCaptivePortalModeObserver):
        (WebKit::removeCaptivePortalModeObserver):
        (WebKit::setCaptivePortalModeEnabledGloballyForTesting):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-12-08  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for _UITextSearchOptions when finding a string
        https://bugs.webkit.org/show_bug.cgi?id=233957
        rdar://86140673

        Reviewed by Wenson Hsieh.

        Add support for case-insensitive, full-word, and prefix matching.

        * Shared/WebFindOptions.h:

        Introduce AtWordEnds at the WebKit layer to support full-word matching
        when used with AtWordStarts.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView performTextSearchWithQueryString:usingOptions:resultAggregator:]):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::core):

2021-12-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a missing CompletionHandlerCallChecker around a UI delegate method call after r286640
        https://bugs.webkit.org/show_bug.cgi?id=233890
        rdar://86117718

        Reviewed by Dan Bernstein.

        Create and pass a `CompletionHandlerCallChecker` through the new delegate call to
        `-_webView:requestCookieConsentWithMoreInfoHandler:decisionHandler:` added in r286640.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::requestCookieConsent):

2021-12-08  Youenn Fablet  <youenn@apple.com>

        Same-site lax cookies not sent by fetch event handler after page reload
        https://bugs.webkit.org/show_bug.cgi?id=226386
        <rdar://problem/78878853>

        Reviewed by Chris Dumez.

        StorageBlockingPolicy handling is not covered by generated code so explicit update StorageBlockingPolicy setting from preference store.
        This impacts the computation of cookie/cache partitioning.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:

2021-12-08  Youenn Fablet  <youenn@apple.com>

        Let RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit switch to VPIO unit if VPIO is running
        https://bugs.webkit.org/show_bug.cgi?id=233316

        Reviewed by Eric Carlson.

        We track which process is the last to start audio capture.
        In that case, we register its RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit to the capture unit.
        This allows RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit to switch between RemoteIO if capture unit does not run
        or the capture unit if running.
        This allows to remove the x5 gain workaround.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUProcess.cpp:
        * GPUProcess/GPUProcess.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:

2021-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [MacCatalyst] Various build fixes
        https://bugs.webkit.org/show_bug.cgi?id=233995

        Unreviewed.

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

2021-12-07  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add initial support for find-in-page SPI
        https://bugs.webkit.org/show_bug.cgi?id=233915
        rdar://86140501

        Reviewed by Wenson Hsieh.

        Expose new find-in-page SPI for use by clients.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView selectedTextRange]):
        (-[WKWebView offsetFromPosition:toPosition:inDocument:]):
        (-[WKWebView performTextSearchWithQueryString:usingOptions:resultAggregator:]):
        (-[WKWebView decorateFoundTextRange:inDocument:usingStyle:]):
        (-[WKWebView clearAllDecoratedFoundText]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findRectsForStringMatches):
        (WebKit::WebPageProxy::hideFindIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView offsetFromPosition:toPosition:]):

        The implementation here is needed to determine the relative ordering of
        two search results.

        (-[WKContentView performTextSearchWithQueryString:usingOptions:resultAggregator:]):

        Call into the WebProcess to perform the search, and asynchronously
        mark the search as complete.

        A search result is represented as a WKFoundTextRange, and contains
        two pieces of information.

        1. A rect – so that clients can determine whether or not the result
           is visible.

        2. An index – to allow for highlighting of a result and to enable
           determining relative ordering between two results.

        (-[WKContentView decorateFoundTextRange:usingStyle:]):
        (-[WKContentView clearAllDecoratedFoundText]):
        (+[WKFoundTextRange foundTextRangeWithRect:index:]):
        (-[WKFoundTextRange start]):
        (-[WKFoundTextRange end]):
        (-[WKFoundTextRange isEmpty]):
        (+[WKFoundTextPosition textPositionWithIndex:]):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):

        Prevent Editor from revealing the selection on all platforms, as the
        existing call to didFindString is now responsible for revealing
        selection on all platforms.

        (WebKit::FindController::findRectsForStringMatches):

        Gather rects for all search results and return them to the UIProcess.

        (WebKit::FindController::indicateFindMatch):

        This method was previously unused on iOS, and required some changes
        to work correctly.

        Wrap the call to select the current match with calls to
        {will|did}FindString to account for iOS specific selection behavior.
        See the existing comment in didFindString for more details.

        No behavior change on other platforms, since willFindString is empty,
        and didFindString now reveals the selection.

        (WebKit::FindController::didFindString):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findRectsForStringMatches):
        (WebKit::WebPage::hideFindIndicator):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Added two new WebPage messages.

        1. findRectsForStringMatches returns an vector of string match rects
           for use in the UIProcess.

        2. Expose hideFindIndicator via IPC so that the UIProcess can hide
           the indicator without dismissing the overlay entirely.

2021-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for `navigator.requestCookieConsent()` behind a disabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=233890
        rdar://86117718

        Reviewed by Darin Adler.

        Add plumbing for an async `requestCookieConsent()` method on ChromeClient that plumbs through the WebKit2 client
        layer, into a new private (for the time being) UI delegate method. If the new delegate method is not implemented
        (or there is no UI delegate at all), we immediately invoke the decision handler with a result of `NotSupported`,
        allowing us to reject the promise with a `NotSupportedError`.

        See WebCore ChangeLog for more details.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestCookieConsent):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::requestCookieConsent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestCookieConsent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestCookieConsent):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-12-07  Devin Rousso  <drousso@apple.com>

        Add a `DOMPasteAccessCategory` to control which pasteboard the WebProcess is granted access to when pasting
        https://bugs.webkit.org/show_bug.cgi?id=233939

        Reviewed by Wenson Hsieh.

        Implementing `-pasteFont:` <https://webkit.org/b/191379> requires that we read from the font
        pasteboard instead of the general pasteboard. In order to allow web content to trigger this
        (e.g. `document.execCommand("PasteFont"))`) we must have a way for the WebProcess to signal
        that it wishes to read from the font pasteboard instead of the general pasteboard. As such,
        create and pass along a `DOMPasteAccessCategory` to `requestDOMPasteAccess`.

        No change in behavior.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        Indicate which header is associated with `DOMPasteAccessCategory`.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:pasteAccessCategory:]): Added.
        (-[WKDOMPasteMenuDelegate menuDidClose:]):
        (-[WKDOMPasteMenuDelegate _web_grantDOMPasteAccess]): Added.
        (WebKit::WebViewImpl::handleProcessSwapOrExit):
        (WebKit::pasteboardNameForAccessCategory): Added.
        (WebKit::pasteboardForAccessCategory): Added.
        (WebKit::WebViewImpl::requestDOMPasteAccess):
        (WebKit::WebViewImpl::handleDOMPasteRequestForCategoryWithResult):
        (WebKit::WebViewImpl::hideDOMPasteMenuWithResult): Added.
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:]): Deleted.
        (WebKit::WebViewImpl::handleDOMPasteRequestWithResult): Deleted.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_grantDOMPasteAccess]): Deleted.
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView _web_grantDOMPasteAccess]): Deleted.
        Pass the `DOMPasteAccessCategory` to the `WKDOMPasteMenuDelegate` and use it as the `target`
        of the `NSMenuItem` so that we can pass along the `DOMPasteAccessCategory` in the `action`.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView resignFirstResponderForWebView]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _willHideMenu:]):
        (-[WKContentView pasteForWebView:]):
        (pasteboardNameForAccessCategory): Added.
        (pasteboardForAccessCategory): Added.
        (-[WKContentView _hidePasteMenuWithResult:]): Added.
        (-[WKContentView _handleDOMPasteRequestForCategory:result:]): Added.
        (-[WKContentView _willPerformAction:sender:]):
        (-[WKContentView _didPerformAction:sender:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView _requestDOMPasteAccessForCategory:elementRect:originIdentifier:completionHandler:]): Added.
        (-[WKContentView _handleDOMPasteRequestWithResult:]): Deleted.
        (-[WKContentView _requestDOMPasteAccessWithElementRect:originIdentifier:completionHandler:]): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/playstation/PageClientImpl.h:
        * UIProcess/playstation/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * UIProcess/win/PageClientImpl.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestDOMPasteAccess):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestDOMPasteAccess):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestDOMPasteAccess):
        Pass along the `DOMPasteAccessCategory`.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::pasteAccessCategoryForCommand): Added.
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::requestDOMPasteAccess):
        (WebKit::WebPageProxy::willPerformPasteCommand):
        (WebKit::isPasteCommandName): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::willPerformPasteCommand)
        Create a mapping between paste command name and `DOMPasteAccessCategory`.

2021-12-07  Simon Fraser  <simon.fraser@apple.com>

        [Scroll Momentum Generator] Pages lose ability to momentum scroll after dragging between displays
        https://bugs.webkit.org/show_bug.cgi?id=233948
        rdar://86110813

        Reviewed by Tim Horton.

        This is a conservative fix for the bug. When a view moves to a new screen, WebPageProxy
        needs to unregister for full speed updates using the old displayID, and register 
        using the new one.

        Longer term, it would be better if "full speed updates" was a per-observer concept,
        but that would mean registering an observer while wheel events are being received,
        which needs a bit more thought.

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

2021-12-07  Cameron McCormack  <heycam@apple.com>

        Move FontCache singleton and instance on WorkerGlobalScope to ThreadGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=233747

        Reviewed by Darin Adler.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminate):
        Update existing main threa callers of FontCache::singleton() to use
        FontCache::forCurrentThread().

2021-12-07  Ben Nham  <nham@apple.com>

        webpushd should run with regular user permissions
        https://bugs.webkit.org/show_bug.cgi?id=233844

        Reviewed by Brady Eidson.

        Currently webpushd runs as root, which is unneessary. This patch makes it so that we run
        with regular user permissions. This is done by specifying a UserName in the launchd plist on
        iOS and by installing the plist to /System/Library/LaunchAgents on Mac. Since the plists now
        differ based on platform, I changed the "Copy Daemon Plists" build phase in the WebKit
        target to copy the appropriate plist to either /S/L/LaunchDaemons or /S/L/LaunchAgents.

        Additionally, webpushd needs the `aps-connection-initiate` or
        `com.apple.private.aps-connection-initiate` to receive pushes from apsd on iOS and Mac
        respectively, so I gave the daemon those entitlements.

        Finally, webpushd now registers for the `com.apple.aps.webkit.webpushd.incoming-push` Mach
        service so that it can be launched on demand in response to a push. Right now we just
        `bootstrap_check_in` to the service at launch time, but eventually we'll remove that and
        use APSConnection to check in to the service instead. Since the `bootstrap_check_in`
        call is temporary, I chose not to make a header file in wtf/spi and declared the prototype
        in the implementation file instead.

        * Configurations/webpushd.xcconfig:
        * Scripts/process-entitlements.sh:
        * WebKit.xcodeproj/project.pbxproj:
        * webpushd/WebPushDaemonMain.mm:
        (WebKit::WebPushDaemonMain):
        * webpushd/com.apple.webkit.webpushd.ios.plist: Added.
        * webpushd/com.apple.webkit.webpushd.mac.plist: Added.
        * webpushd/com.apple.webkit.webpushd.plist: Removed.

2021-12-07  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_messagesBeingDispatched.isEmpty() on http/tests/resourceLoadStatistics/website-data-removal-for-site-with-user-interaction.html
        https://bugs.webkit.org/show_bug.cgi?id=228164
        <rdar://problem/80914914>

        Reviewed by Darin Adler.

        dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection() has an assertion to make sure that m_messagesBeingDispatched
        was empty when getting called. However, in the case where there is a nested run loop, the call to
        `m_messagesBeingDispatched.takeFirst().dispatch()` at the end of the function may cause the function to re-enter. When entering,
        m_messagesBeingDispatched may not be empty so the assertion is wrong. Looking at the code, I think dropping the assertion is the
        right thing to do as the implementation seems to be doing something sane upon re-entering. It will just append new messages to
        m_messagesBeingDispatched and then try and dispatch them. Based on how it is implemented, message ordering would be preserved.

        No new tests, unskipped existing test.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection):

2021-12-07  Chris Dumez  <cdumez@apple.com>

        Make WebLockRegistryProxy::processDidExit() return early if process never registered any locks
        https://bugs.webkit.org/show_bug.cgi?id=233832

        Reviewed by Darin Adler.

        Make WebLockRegistryProxy::processDidExit() return early if process never registered any locks.
        This avoids calling LocalWebLockRegistry::clientsAreGoingAway() (which can be expensive) in the
        case we know for sure no locks were registered by this process.

        * UIProcess/WebLockRegistryProxy.cpp:
        (WebKit::WebLockRegistryProxy::requestLock):
        (WebKit::WebLockRegistryProxy::processDidExit):
        * UIProcess/WebLockRegistryProxy.h:

2021-12-07  Chris Dumez  <cdumez@apple.com>

        Reload web views when toggling the captive portal mode at system level
        https://bugs.webkit.org/show_bug.cgi?id=233900

        Reviewed by Brent Fulgham.

        Reload web views when toggling the captive portal mode at system level, so that the views end up
        being backed by WebProcesses with the proper captive portal mode.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::cachedCaptivePortalModeEnabledGlobally):
        (WebKit::WebProcessPool::captivePortalModeStateChanged):
        (WebKit::captivePortalModeEnabledBySystem):
        (WebKit::WebProcessPool::notifyPreferencesChanged):
        * UIProcess/WebProcessPool.h:

2021-12-07  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567
        <rdar://problem/86029185>

        Reviewed by Youenn Fablet.

        Introduce a new WebsiteDataType value FileSystem for FileSystemAccess data. Network process now can fetch and 
        delete this type of data when fetching and deleteing website data (if FileSystem type is included in target
        types).

        To track origins that have FileSystem data, this patch introduces a new file named origin in the origin's 
        directory. This file will be created when OriginStorageManager is created.

        To delete existing FileSystem data, network process finds origins that are requested to be deleted and have data 
        on disk, closes active access handles, and deletes the files. The origin file mentioned above will be deleted if 
        there is no other file left in the same directory, and empty directories will be deleted.

        New API tests: FileSystemAccess.FetchAndRemoveData
                       FileSystemAccess.RemoveDataByModificationTime
                       FileSystemAccess.FetchDataForThirdParty

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (WebKit::FileSystemStorageHandle::activeSyncAccessHandle const):
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::~FileSystemStorageManager):
        (WebKit::FileSystemStorageManager::close):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::readOriginFromFile):
        (WebKit::writeOriginToFileIfNecessary):
        (WebKit::deleteOriginFileIfNecessary):
        (WebKit::originDirectoryPath):
        (WebKit::originFilePath):
        (WebKit::NetworkStorageManager::localOriginStorageManager):
        (WebKit::NetworkStorageManager::removeOriginStorageManagerIfPossible):
        (WebKit::NetworkStorageManager::persist):
        (WebKit::NetworkStorageManager::clearStorageForTesting): Only reset persisted state here as our test bot can run 
        tests in parallel. If one worker finishes a test and asks to clear storage, while another worker is running a 
        filesystem test; the test may fail as data is gone. (The workers are using the same network process.)
        (WebKit::toWebsiteDataType):
        (WebKit::NetworkStorageManager::forEachOriginDirectory):
        (WebKit::NetworkStorageManager::fetchDataFromDisk):
        (WebKit::NetworkStorageManager::fetchData):
        (WebKit::NetworkStorageManager::deleteDataOnDisk):
        (WebKit::NetworkStorageManager::deleteData):
        (WebKit::NetworkStorageManager::deleteDataModifiedSince):
        (WebKit::NetworkStorageManager::deleteDataForRegistrableDomains):
        (WebKit::originPath): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier):
        (WebKit::OriginStorageManager::StorageBucket::typeStoragePath const):
        (WebKit::OriginStorageManager::StorageBucket::fileSystemStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::isActive):
        (WebKit::OriginStorageManager::StorageBucket::deleteData):
        (WebKit::OriginStorageManager::StorageBucket::deleteFileSystemStorageData):
        (WebKit::OriginStorageManager::OriginStorageManager):
        (WebKit::OriginStorageManager::fileSystemStorageManager):
        (WebKit::OriginStorageManager::isActive):
        (WebKit::OriginStorageManager::deleteData):
        (WebKit::OriginStorageManager::setPersisted):
        (WebKit::OriginStorageManager::persist): Deleted.
        * NetworkProcess/storage/OriginStorageManager.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):
        * Shared/WebsiteData/WebsiteDataType.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.messages.in: Added.

2021-12-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        Implement the capability to assign IOSurfaces
        to PlatformCALayerRemote contents.

        Make RemoteGraphicsContextGLProxyCocoa use the added
        GraphicsLayerContentsDisplayDelegate.

        * GPUProcess/graphics/GPUProcessGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::hasFrontBuffer const):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::clearBackingStore):
        (WebKit::RemoteLayerBackingStore::encode const):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::setContents):
        (WebKit::RemoteLayerBackingStore::display):
        Change the contract of what RemoteLayerBackingStore serializes to
        the transaction. Before, it serialized the front buffer.
        After, it serializes the m_bufferHandle.
        The buffer handle is produced by display() phase either by
        delegated display setting the contents or drawing to
        front buffer and then assigning the front buffer handle.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description const):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm:
        (WebKit::RemoteGraphicsContextGLProxy::create):
        * WebProcess/GPU/graphics/wc/RemoteGraphicsContextGLProxyWC.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::create): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::setContents):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (WebKit::PlatformCALayerRemoteCustom::clone const):
        (WebKit::PlatformCALayerRemoteCustom::setNeedsDisplayInRect):
        (WebKit::PlatformCALayerRemoteCustom::setNeedsDisplay):
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::setContentsDisplayDelegate):

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

        [iOS] Remove mach service extensions for the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=232952
        <rdar://problem/85259753>

        Reviewed by Brent Fulgham.

        Remove mach service extensions for the WebContent process, which we think are no longer needed, based on local testing.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::nonBrowserServices): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::attachmentElementServices):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-12-06  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Inspector: Unify Grid overlay drawing code
        https://bugs.webkit.org/show_bug.cgi?id=233773

        Reviewed by Devin Rousso.

        Remove the (almost) 1-to-1 duplicated logic currently being used to turn Grid Overlays into a layer hierarchy
        and instead use a graphics context to draw the overlays straight into the view to take advantage of the existing
        drawing code we use for macOS in WebCore::InspectorOverlay. To accommodate this, we now correctly set the
        content scale factor of the view itself (so that our drawing does not appear blurry) and set the frame of the
        view equal to the current visible portion of the parent scroll view, which helps us to avoid having an
        incredibly large graphics context to draw into (which we would if the view's frame was just set to match the
        frame of the webpage's view). This frame will not always be the same size, such as when zooming in where less of
        the frame is visible. Combined with the current content scale, this actually means that on zoom the effective
        number of pixels that need to be drawn is consistent.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.h:
        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView initWithFrame:]):
        - Explicitly set this view to be non-opaque so that page content can be seen below this view. This wasn't
        previously necessary because the bounds of this view were a zero-rect, which meant the background was never
        painted.

        (-[WKInspectorHighlightView _removeAllLayers]):
        (-[WKInspectorHighlightView _createLayers:]):
        - Because the view's frame origin is now offset, we need to create the node highlight layers offset by the
        negation of the frame's origin so that they still line up correctly with page content.

        (-[WKInspectorHighlightView drawRect:]):
        (-[WKInspectorHighlightView update:scale:frame:]):
        (-[WKInspectorHighlightView _createGridOverlayLayers:scale:]): Deleted.
        (createLayoutHatchingLayer): Deleted.
        (createLayoutLabelLayer): Deleted.
        (-[WKInspectorHighlightView _createGridOverlayLayer:scale:]): Deleted.
        (-[WKInspectorHighlightView update:scale:]): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _showInspectorHighlight:]):


2021-12-06  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r286535) [GTK] Fix clean builds after DerivedSources/WebKit2 move
        https://bugs.webkit.org/show_bug.cgi?id=233881

        Reviewed by Don Olmstead.

        Build fix. Covered by existing tests

        The previous approach of this patch created the links to the header
        derived sources into the target webkit2/ folder, which in turn was a
        link to <repo>/Source/WebKit/UIProcess/API/gtk. So it ended up
        actually creating the links inside the Source directory.

        This commit instead links a different webkit2/ folder from the
        generated webkit folder for the WebKitGTK/WPE derived sources headers.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2021-12-06  Brady Eidson  <beidson@apple.com>

        webpushd/webpushtool debugging additions
        https://bugs.webkit.org/show_bug.cgi?id=233864

        Reviewed by Alex Christensen.

        Covered by API tests.
        
        This patch:
        - Teaches webpushtool the ability to wait for a reconnect after losing its connection
        - Starts actually broadcasting meaningful debug messages from webpushd

        * webpushd/AppBundleRequest.mm:
        (WebPushD::AppBundleRequest::start):
        (WebPushD::AppBundlePermissionsRequest::didCheckForExistingBundle):
        (WebPushD::AppBundlePermissionsRequest::didCreateAppBundle):
        (WebPushD::AppBundleDeletionRequest::didDeleteExistingBundleWithError):

        * webpushd/PushClientConnection.h:
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::setDebugModeIsEnabled):
        (WebPushD::ClientConnection::broadcastDebugMessage):
        (WebPushD::ClientConnection::connectionClosed):

        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::connectionAdded):

        * webpushd/webpushtool/WebPushToolConnection.h:
        * webpushd/webpushtool/WebPushToolConnection.mm:
        (WebPushTool::Connection::create):
        (WebPushTool::Connection::Connection):
        (WebPushTool::Connection::connectToService):
        (WebPushTool::Connection::connectionDropped):

        * webpushd/webpushtool/WebPushToolMain.mm:
        (printUsageAndTerminate):
        (main):

2021-12-06  Chris Dumez  <cdumez@apple.com>

        Regression(r286505) imported/w3c/web-platform-tests/html/cross-origin-opener-policy/javascript-url.https.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=233874

        Reviewed by Darin Adler.

        r286505 fixed ProvisionalPageProxy so that ProvisionalPageProxy::m_provisionalLoadURL gets properly initialized when the
        ProvisionalPageProxy gets constructed *after* the provisional load has already started (COOP proces-swap case). One side
        effect of this though is that ProvisionalPageProxy::cancel() no longer returns early and will try to notify the client
        that the provisional load failed, dereferencing m_mainFrame in doing so. In the event where the main frame has not yet
        been created in the new provisional process, this would do a null-dereference of m_mainFrame.

        To address the issue, we now early return in ProvisionalPageProxy::cancel() if m_isProcessSwappingOnNavigationResponse
        is true (i.e. The ProvisionalPageProxy was created after the provisional load had started). In such situations, we
        don't want to ProvisionalPageProxy to be the one notifying the client of the provisional load failure anyway. The reason
        is that there is still a provisional load going on in the committed process/page.
        
        No new tests, covered by existing test that is flakily crashing.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::cancel):

2021-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r286507): [macOS] Many file system access layout tests became flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=233892

        Unreviewed, revert r286507.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (WebKit::FileSystemStorageHandle::activeSyncAccessHandle const): Deleted.
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::~FileSystemStorageManager):
        (WebKit::FileSystemStorageManager::close): Deleted.
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::originPath):
        (WebKit::NetworkStorageManager::localOriginStorageManager):
        (WebKit::readOriginFromFile): Deleted.
        (WebKit::writeOriginToFileIfNecessary): Deleted.
        (WebKit::deleteOriginFileIfNecessary): Deleted.
        (WebKit::originDirectoryPath): Deleted.
        (WebKit::originFilePath): Deleted.
        (WebKit::NetworkStorageManager::removeOriginStorageManagerIfPossible): Deleted.
        (WebKit::toWebsiteDataType): Deleted.
        (WebKit::NetworkStorageManager::forEachOriginDirectory): Deleted.
        (WebKit::NetworkStorageManager::fetchDataFromDisk): Deleted.
        (WebKit::NetworkStorageManager::fetchData): Deleted.
        (WebKit::NetworkStorageManager::deleteDataOnDisk): Deleted.
        (WebKit::NetworkStorageManager::deleteData): Deleted.
        (WebKit::NetworkStorageManager::deleteDataModifiedSince): Deleted.
        (WebKit::NetworkStorageManager::deleteDataForRegistrableDomains): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::typeStoragePath const):
        (WebKit::OriginStorageManager::StorageBucket::fileSystemStorageManager):
        (WebKit::OriginStorageManager::OriginStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier): Deleted.
        (WebKit::OriginStorageManager::StorageBucket::isActive): Deleted.
        (WebKit::OriginStorageManager::StorageBucket::deleteData): Deleted.
        (WebKit::OriginStorageManager::StorageBucket::deleteFileSystemStorageData): Deleted.
        (WebKit::OriginStorageManager::isActive): Deleted.
        (WebKit::OriginStorageManager::deleteData): Deleted.
        * NetworkProcess/storage/OriginStorageManager.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):
        * Shared/WebsiteData/WebsiteDataType.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.messages.in: Removed.

2021-12-06  Mark Lam  <mark.lam@apple.com>

        Reverting local test code that should not have been landed.

        Not reviewed.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:

2021-12-06  Tim Horton  <timothy_horton@apple.com>

        Momentum Event Dispatcher: Momentum phase runs backwards with natural scrolling disabled
        https://bugs.webkit.org/show_bug.cgi?id=233894
        <rdar://problem/86111948>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::consumeDeltaForCurrentTime):
        Only flip the deltas if the trackpad is configured to use "natural"
        scrolling (in which "directionInvertedFromDevice" is true).

        (WebKit::MomentumEventDispatcher::computeNextDelta):
        Fix initial queue state logging to log both axes before setting the "did log" bit.

2021-12-06  Brady Eidson  <beidson@apple.com>

        Put webpushd code in WebKit.framework.
        https://bugs.webkit.org/show_bug.cgi?id=233886

        Reviewed by Alex Christensen.

        This fixes some build/mastering/linking issues.

        * Configurations/webpushd.xcconfig:
        * Shared/API/Cocoa/WKMain.h:
        * Shared/API/Cocoa/WKMain.mm:
        (WKWebPushDaemonMain):
        * WebKit.xcodeproj/project.pbxproj:
        * webpushd/WebPushDaemonMain.h: Copied from Source/WebKit/Shared/API/Cocoa/WKMain.mm.
        * webpushd/WebPushDaemonMain.mm:
        (WebKit::WebPushDaemonMain):
        (main): Deleted.
        * webpushd/webpushd.cpp: Copied from Source/WebKit/Shared/API/Cocoa/WKMain.mm.
        (main):

2021-12-06  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r286527): Three API tests crashing under WebKit::ProcessLauncher::launchProcess()
        https://bugs.webkit.org/show_bug.cgi?id=233882
        <rdar://problem/86111726>

        Reviewed by Brent Fulgham.

        Correct the eventHandler to capture the process name, rather than using a raw pointer to the character string.

        * UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm:
        (WebKit::ProcessLauncher::launchProcess):

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

        [iOS][WP] Block access to unused IOKit class
        https://bugs.webkit.org/show_bug.cgi?id=233866
        <rdar://problem/86086475>

        Reviewed by Brent Fulgham.

        Block access to IOKit class IOMobileFramebufferUserClient in the WebContent process' sandbox on iOS,
        which is unused according to telemetry.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::gpuIOKitClasses):

2021-12-06  Matt Gilligan  <matthew_gilligan@apple.com>

        [iOS] Allow WKWebView clients to override undoManager
        https://bugs.webkit.org/show_bug.cgi?id=233297
        <rdar://problem/85526549>

        Reviewed by Wenson Hsieh.

        Move WKContentView's undoManager up the responder chain to WKWebView so web view
        subclasses can customize the undo manager used when WKContentView is first responder.

        Test: KeyboardInputTests.OverrideUndoManager

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView undoManager]):
        Return the undo manager provided by _contentView when it is current.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView undoManagerForWebView]):
        Provide the view's undo manager via this property so that -undoManager will look up the
        responder chain to WKWebView.

        (-[WKContentView undoManager]): Deleted.

2021-12-06  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r286535) [GTK] Fix clean builds after DerivedSources/WebKit2 move
        https://bugs.webkit.org/show_bug.cgi?id=233881

        Reviewed by Žan Doberšek.

        Build fix. Covered by exiting tests.

        * PlatformGTK.cmake: Add symbolic links for the public generated like
        we do for the regular headers. It happened to work before because they
        were created already in a webkit2 folder.

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

        WKWebpagePreferences._activeContentRuleListActionPatterns should be an NSDictionary of identifier to allowed patterns
        https://bugs.webkit.org/show_bug.cgi?id=233842

        Reviewed by Timothy Hatcher.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::decode):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _setActiveContentRuleListActionPatterns:]):
        (-[WKWebpagePreferences _activeContentRuleListActionPatterns]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2021-12-05  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Add the encoding/decoding for Filter and FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232844

        Reviewed by Wenson Hsieh.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        * GPUProcess/graphics/RemoteDisplayListRecorder.messages.in:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::getFilteredImageForImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
        * Platform/IPC/FilterReference.h: Added.
        (IPC::FilterReference::FilterReference):
        (IPC::FilterReference::takeFilter):
        (IPC::FilterReference::encodeFilterEffect):
        (IPC::FilterReference::decodeFilterEffect):
        (IPC::FilterReference::encodeSVGFilter):
        (IPC::FilterReference::decodeSVGFilter):
        (IPC::FilterReference::encodeCSSFilter):
        (IPC::FilterReference::decodeCSSFilter):
        (IPC::FilterReference::encodeFilter):
        (IPC::FilterReference::decodeFilter):
        (IPC::FilterReference::encode const):
        (IPC::FilterReference::decode):
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawFilteredImageBuffer):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::getFilteredImage):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

2021-12-05  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for generated momentum events
        https://bugs.webkit.org/show_bug.cgi?id=233857

        Reviewed by Tim Horton.

        Add start/end points for synthetic momentum, and a trace point for each generated event.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::dispatchSyntheticMomentumEvent):
        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        (WebKit::MomentumEventDispatcher::didEndMomentumPhase):

2021-12-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename DerivedSources/WebKit2 to DerivedSources/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=233803

        Reviewed by Tim Horton.

        Mechanical rename.

        No new tests because there is no behavior change.

        * Configurations/BaseTarget.xcconfig:
        * DerivedSources-output.xcfilelist:
        * PlatformGTK.cmake:
        * Scripts/generate-derived-sources.sh:
        * Scripts/generate-unified-sources.sh:
        * UnifiedSources-output.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2021-12-04  Brady Eidson  <beidson@apple.com>

        Add command line `webpushtool` for daemon development and debugging.
        https://bugs.webkit.org/show_bug.cgi?id=233845

        Reviewed by Tim Horton.

        No behavior change.

        This utility will eventually be quite fleshed out.
        
        For now, it can act as a terminal that prints debug messages from webpushd.
        
        * Configurations/webpushtool.xcconfig: Added.
        * Resources/webpushtool.entitlements: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebKit.xcodeproj/xcshareddata/xcschemes/webpushtool.xcscheme: Added.

        * webpushd/webpushtool/WebPushToolConnection.h: Added.
        * webpushd/webpushtool/WebPushToolConnection.mm: Added.
        (WebPushTool::Connection::create):
        (WebPushTool::maybeConnectToService):
        (WebPushTool::Connection::Connection):
        (WebPushTool::Connection::connectToService):
        (WebPushTool::Connection::startAction):
        (WebPushTool::Connection::startDebugStreamAction):
        (WebPushTool::Connection::sendAuditToken):
        (WebPushTool::Connection::connectionDropped):
        (WebPushTool::Connection::messageReceived):
        * webpushd/webpushtool/WebPushToolMain.mm: Added.
        (printUsageAndTerminate):
        (main):

2021-12-04  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Launch Captive Portal WebContent process when requested
        https://bugs.webkit.org/show_bug.cgi?id=233824
        <rdar://problem/86023898>

        Reviewed by Darin Adler.

        When the WebKit client requests a Captive Portal process, launch the dedicated XPC service
        with Captive Portal entitlements.

         * UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm:
        (WebKit::webContentServiceName): New helper function.
        (WebKit::serviceName): Update to use new helper.
        (WebKit::ProcessLauncher::launchProcess): Log errors when launching.
        * WebKit.xcodeproj/project.pbxproj: Include the CaptivePortal xpc service when creating
        development symlinks.

2021-12-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web content process sometimes crashes under WebPage::positionInformation()
        https://bugs.webkit.org/show_bug.cgi?id=233841
        rdar://85917212

        Reviewed by Geoffrey Garen.

        Add a missing null check in the case where the hit-tested node is null in `WebPage::positionInformation`. This
        can happen in a number of ways (one of which is exercised by the new API test).

        Test: ImageAnalysisTests.DoNotCrashWhenHitTestingOutsideOfWebView

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

2021-12-03  John Wilander  <wilander@apple.com>

        PCM: Unlinkable tokens for triggering event to prevent fraud
        https://bugs.webkit.org/show_bug.cgi?id=233673
        <rdar://79426347>

        Reviewed by Alex Christensen.

        This patch allows triggering events to have an optional query parameter like this:
        https://destination.example/.well-known/private-click-measurement/trigger-attribution/11?attributionDestinationNonce=ABCDEFabcdef0123456789

        The presence of an attributionDestinationNonce triggers PrivateClickMeasurementManager to
        ask the server to sign an unlinkable token for the triggering event and then stores the
        corresponding secret token plus the signature for later inclusion in the attribution report.

        New API/unit test PrivateClickMeasurement.DestinationClickFraudPrevention.

        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase const):
            Now handles destination tokens.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
            Now sets destinationSite in WebCore::PrivateClickMeasurement::AttributionTriggerData.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::Database):
            Now calls addDestinationTokenColumnsIfNecessary().
        (WebKit::PCM::Database::insertPrivateClickMeasurement):
            Now does insertion of optional destination tokens.
        (WebKit::PCM::Database::addDestinationTokenColumnsIfNecessary):
            Database migration.
        (WebKit::PCM::Database::addBundleIDColumnIfNecessary): Deleted.
            Temporary migration function for non-customer builds. No longer needed.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
            Just name changes.
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
            Not changed afaik. Seems like the diff is confused.
        (WebKit::PrivateClickMeasurementManager::configureForTokenSigning):
            New function to extract shared code.
        (WebKit::PrivateClickMeasurementManager::getSignatureBase64URLFromTokenSignatureResponse):
            New function to extract shared code.
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableTokenForSource):
            Renamed to add "ForSource" and all shared code extracted.
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableTokenForDestination):
            Different than for the source in that it results in an attribution call.
        (PrivateClickMeasurementManager::handleAttribution):
            Now does signing of destination token if the optional nonce is in the triggering event.
        (PrivateClickMeasurementManager::fireConversionRequest):
        (WebKit::PrivateClickMeasurementManager::setPCMFraudPreventionValuesForTesting):
            Added empty initializer strings for the destination test token values not in use yet.
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken): Deleted.
            Renamed PrivateClickMeasurementManager::getSignedUnlinkableTokenForSource().
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:

2021-12-03  ujwal koneru  <ujwal.koneru@sony.com>

        Fix playstation build after r286484
        https://bugs.webkit.org/show_bug.cgi?id=233823

        unreviewed build fix.

        * UIProcess/playstation/WebProcessPoolPlayStation.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/playstation/WebProcessPlayStation.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-12-03  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * NetworkProcess/storage/NetworkStorageManager.cpp:

2021-12-03  Tim Horton  <timothy_horton@apple.com>

        Add more logging for MomentumEventDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=233811

        Reviewed by Simon Fraser.

        Add a temporary event log to MomentumEventDispatcher, to debug delta/offset/curve issues.

        * WebProcess/WebPage/EventDispatcher.h:
        (WebKit::EventDispatcher::queue):
        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        Accumulate event deltas. Also accumulate event deltas for the
        fingers-down phase in the "generated" offset. Store the phase and 
        momentum phase smooshed into a single field.

        (WebKit::MomentumEventDispatcher::dispatchSyntheticMomentumEvent):
        Accumulate generated deltas.

        (WebKit::MomentumEventDispatcher::didEndMomentumPhase):
        Attempt to dump the log 1 second after each momentum phase. We'll skip
        it if another scroll has started since.

        (WebKit::MomentumEventDispatcher::setScrollingAccelerationCurve):
        (WebKit::MomentumEventDispatcher::startDisplayLink):
        (WebKit::MomentumEventDispatcher::stopDisplayLink):
        (WebKit::MomentumEventDispatcher::consumeDeltaForCurrentTime):
        (WebKit::MomentumEventDispatcher::buildOffsetTableWithInitialDelta):
        (WebKit::MomentumEventDispatcher::computeNextDelta):
        Adopt more MOMENTUM_EVENT_DISPATCHER_TEMPORARY_LOGGING. Error logging
        we leave outside of this, because that we'll keep around.

        (WebKit::MomentumEventDispatcher::pushLogEntry):
        (WebKit::MomentumEventDispatcher::flushLog):
        Dump the event log in an easy-to-copy-into-a-CSV format.

        * WebProcess/WebPage/MomentumEventDispatcher.h:

2021-12-03  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r286487.

        Broke multiple builds.

        Reverted changeset:

        "Rename DerivedSources/WebKit2 to DerivedSources/WebKit"
        https://bugs.webkit.org/show_bug.cgi?id=233803
        https://commits.webkit.org/r286487

2021-12-03  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567

        Reviewed by Youenn Fablet.

        Introduce a new WebsiteDataType value FileSystem for FileSystemAccess data. Network process now can fetch and 
        delete this type of data when fetching and deleteing website data (if FileSystem type is included in target
        types).

        To track origins that have FileSystem data, this patch introduces a new file named origin in the origin's 
        directory. This file will be created when OriginStorageManager is created.

        To delete existing FileSystem data, network process finds origins that are requested to be deleted and have data 
        on disk, closes active access handles, and deletes the files. The origin file mentioned above will be deleted if 
        there is no other file left in the same directory, and empty directories will be deleted.

        New API tests: FileSystemAccess.FetchAndRemoveData
                       FileSystemAccess.RemoveDataByModificationTime
                       FileSystemAccess.FetchDataForThirdParty

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (WebKit::FileSystemStorageHandle::activeSyncAccessHandle const):
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::~FileSystemStorageManager):
        (WebKit::FileSystemStorageManager::close):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::readOriginFromFile):
        (WebKit::writeOriginToFileIfNecessary):
        (WebKit::deleteOriginFileIfNecessary):
        (WebKit::originDirectoryPath):
        (WebKit::originFilePath):
        (WebKit::NetworkStorageManager::localOriginStorageManager):
        (WebKit::NetworkStorageManager::removeOriginStorageManagerIfPossible):
        (WebKit::toWebsiteDataType):
        (WebKit::NetworkStorageManager::forEachOriginDirectory):
        (WebKit::NetworkStorageManager::fetchDataFromDisk):
        (WebKit::NetworkStorageManager::fetchData):
        (WebKit::NetworkStorageManager::deleteDataOnDisk):
        (WebKit::NetworkStorageManager::deleteData):
        (WebKit::NetworkStorageManager::deleteDataModifiedSince):
        (WebKit::NetworkStorageManager::deleteDataForRegistrableDomains):
        (WebKit::originPath): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier):
        (WebKit::OriginStorageManager::StorageBucket::typeStoragePath const):
        (WebKit::OriginStorageManager::StorageBucket::fileSystemStorageManager):
        (WebKit::OriginStorageManager::StorageBucket::isActive):
        (WebKit::OriginStorageManager::StorageBucket::deleteData):
        (WebKit::OriginStorageManager::StorageBucket::deleteFileSystemStorageData):
        (WebKit::OriginStorageManager::OriginStorageManager):
        (WebKit::OriginStorageManager::isActive):
        (WebKit::OriginStorageManager::deleteData):
        * NetworkProcess/storage/OriginStorageManager.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::ownerProcess):
        * Shared/WebsiteData/WebsiteDataType.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.messages.in: Added.

2021-12-03  Chris Dumez  <cdumez@apple.com>

        Follow-up to r286479 to add API test and address issues found by the test
        https://bugs.webkit.org/show_bug.cgi?id=233798

        Reviewed by Darin Adler.

        Add functionality needed for API testing and fix issues found by the API test.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _isLayerTreeFrozenForTesting:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::destroyProvisionalPage):
        (WebKit::WebPageProxy::isLayerTreeFrozen):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isLayerTreeFrozen):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add new SPI to check if the layer tree is frozen in the WebProcess so that I could
        write an API test for this.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        Make sure m_provisionalLoadURL gets initialized when the ProvisionalPageProxy gets
        constructed *after* the provisional load has already started (which is the case
        when the process swap is triggered by COOP).

        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        If the provisional load load fails in the provisional process, and the ProvisionalPageProxy
        was constructed on resource response (COOP case), then no longer forward the
        didFailProvisionalLoadForFrame() to the WebPageProxy. Instead, we destroy the
        ProvisionalPageProxy. This is to avoid duplicate calls to didFailProvisionalLoadForFrame().
        In this case, there is still a provisional load ongoing in the committed process and the
        ProvisionalPageProxy destructor will take care of stopping that provisional load (due to
        r286479), which will cause the committed process to send its own
        didFailProvisionalLoadForFrame IPC.

2021-12-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [ Monterey wk2 ] http/tests/media/video-webm-stall.html (layout-test) is a constant text failure
        https://bugs.webkit.org/show_bug.cgi?id=233717
        rdar://85933254

        Reviewed by Peng Liu.

        After r274117, we call `PlatformMediaSessionManager::setWebMFormatReaderEnabled` in GPUProcess with
        `m_webMParserEnabled` instead of the value of `m_webMFormatReaderEnabled`. Since we (arbitrarily) update WebM
        parser enablement before WebM format reader enablement, this means that the first call to update preferences
        leaves the WebM format reader disabled on PlatformMediaSessionManager even though it should be enabled. Prior to
        the more recent change in r285477, this would be corrected on subsequent calls into
        `GPUProcessProxy::updatePreferences()`, which previously sent `GPUProcess::SetWebMFormatReaderEnabled()`
        messages even if the value of the preference hadn't changed.

        r285477 removed those redundant IPC messages when the enablement value hasn't changed, so we can no longer
        rely on PlatformMediaSessionManager being eventually updated to `true` due to `m_webMParserEnabled` being set to
        true. Simply fix this by using `m_webMFormatReaderEnabled` instead of `m_webMParserEnabled`.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::setWebMFormatReaderEnabled):

2021-12-03  BJ Burg  <bburg@apple.com>

        Web Inspector: Web Inspector^2 crashes after closing if Web Inspector^1 closed first
        https://bugs.webkit.org/show_bug.cgi?id=233293
        <rdar://problem/85526508>

        Reviewed by Devin Rousso.

        Cache the inspected page's identifier. During frontend teardown, use the cached indentifier
        to remove the message receiver that was added to receive messages from the inspected page.

        Other operations using m_inspectedPage should be guarded in case that the inspected
        page already been closed and destroyed.

        * UIProcess/Inspector/WebInspectorUIProxy.cpp:
        (WebKit::WebInspectorUIProxy::createFrontendPage):
        (WebKit::WebInspectorUIProxy::closeFrontendPageAndWindow):
        * UIProcess/Inspector/WebInspectorUIProxy.h:


2021-12-03  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: fix completion handler type signature for _WKInspectorExtension methods
        https://bugs.webkit.org/show_bug.cgi?id=233792
        <rdar://problem/85995314>

        Reviewed by Devin Rousso.

        * UIProcess/API/Cocoa/_WKInspectorExtension.h:
        * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
        (-[_WKInspectorExtension evaluateScript:frameURL:contextSecurityOrigin:useContentScriptContext:completionHandler:]):
        (-[_WKInspectorExtension evaluateScript:inTabWithIdentifier:completionHandler:]):
        Replace the completionHandler's NSDictionary argument type with `id`.

        A dictionary is not necessarily returned here because the implementation deserializes a SerializedScriptValue.
        This could be a string, number, array, dictionary, or other serializable values.

        While the frontend does return a dictionary payload, this is unpacked on the WebProcess-side
        before being sent back out via the _WKInspectorExtension APi.

2021-12-03  Alex Christensen  <achristensen@webkit.org>

        Add room for more bytecode in WKContentRuleList file format
        https://bugs.webkit.org/show_bug.cgi?id=233780

        Reviewed by Tim Hatcher.

        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::frameURLFiltersBytecode const):
        * Shared/WebCompiledContentRuleList.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListMetaData::fileSize const):
        (API::encodeContentRuleListMetaData):
        (API::decodeContentRuleListMetaData):
        (API::compiledToFile):
        (API::createExtension):
        (API::getContentRuleListSourceFromMappedFile):
        * UIProcess/API/APIContentRuleListStore.h:

2021-12-03  Eric Carlson  <eric.carlson@apple.com>

        DisplayCaptureSource doesn't initialize base class correctly
        https://bugs.webkit.org/show_bug.cgi?id=233722

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
        Pass the hash salt to the factory.

        * WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp:
        (WebKit::RemoteRealtimeDisplaySource::create): Remove 'name' parameter because 
        CaptureDevice already has the name.
        (WebKit::RemoteRealtimeDisplaySource::RemoteRealtimeDisplaySource): Pass name to
        base class from device.label().
        (WebKit::RemoteRealtimeDisplaySource::createRemoteMediaSource): Don't call setName
        with settings, it was already set in the constructor.
        * WebProcess/cocoa/RemoteRealtimeDisplaySource.h:

        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::DisplayFactory::createDisplayCaptureSource): Pass
        hash salt to RemoteRealtimeDisplaySource::create.
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2021-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename DerivedSources/WebKit2 to DerivedSources/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=233803

        Reviewed by Tim Horton.

        Mechanical rename.

        No new tests because there is no behavior change.

        * Configurations/BaseTarget.xcconfig:
        * Scripts/generate-derived-sources.sh:
        * Scripts/generate-unified-sources.sh:
        * UnifiedSources-output.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2021-12-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        Network process does not seem to initialize logging
        https://bugs.webkit.org/show_bug.cgi?id=233360
        <rdar://problem/85765854>

        Reviewed by Fujii Hironori.

        Move GPUProcess and WebProcess process creation arguments
        related to logging strings to new AuxiliaryProcessCreationParameters.
        Use this in all auxiliary processes GPUProcess, WebProcess,
        AuthnProcess and NetworkProcess.

        Use the canonical WTF::logLevelString(), WebCore::logLevelString(),
        WebKit::logLevelString() to initialize Cocoa WebKit2 logging settings
        for process creation arguments.

        Fixes bugs where
         Tools/Scripts/run-minibrowser --debug -WebKit2Logging IPCMessages
        would not print IPCMessages logging for NetworkProcess.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::applyProcessCreationParameters):
        * Shared/AuxiliaryProcess.h:
        * Shared/AuxiliaryProcessCreationParameters.cpp: Copied from Source/WebKit/WebAuthnProcess/WebAuthnProcessCreationParameters.cpp.
        (WebKit::AuxiliaryProcessCreationParameters::encode const):
        (WebKit::AuxiliaryProcessCreationParameters::decode):
        * Shared/AuxiliaryProcessCreationParameters.h: Copied from Source/WebKit/WebAuthnProcess/WebAuthnProcessCreationParameters.h.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Sources.txt:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::auxiliaryProcessParameters):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::singleton):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebAuthnProcess/WebAuthnProcess.cpp:
        (WebKit::WebAuthnProcess::initializeWebAuthnProcess):
        * WebAuthnProcess/WebAuthnProcessCreationParameters.cpp:
        (WebKit::WebAuthnProcessCreationParameters::encode const):
        (WebKit::WebAuthnProcessCreationParameters::decode):
        * WebAuthnProcess/WebAuthnProcessCreationParameters.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/playstation/WebProcessPlayStation.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-12-02  Tim Horton  <timothy_horton@apple.com>

        MomentumEventDispatcher curve sometimes doesn't match the system curve
        https://bugs.webkit.org/show_bug.cgi?id=233801
        <rdar://problem/85870287>

        Reviewed by Simon Fraser.

        Three small changes to get us closer to the system curve:

        1) Fetch the momentum event dispatch interval from the system, and use
        it to scale the momentum start event's delta (which we use as our
        initial velocity) into the "ideal" curve's frame rate (which is always
        60fps regardless).

        2) Back-date the animation start time to the fingers-down phase end event,
        so that the momentum start phase has a delta. This seems to match what
        the system does.

        3) Switch to MonotonicTime for the animation time, since it doesn't need
        to be in the same timebase as events (which are oddly in WallTime), and
        certainly should be monotonic.

        * Shared/ScrollingAccelerationCurve.cpp:
        (WebKit::ScrollingAccelerationCurve::ScrollingAccelerationCurve):
        (WebKit::ScrollingAccelerationCurve::interpolate):
        (WebKit::ScrollingAccelerationCurve::encode const):
        (WebKit::ScrollingAccelerationCurve::decode):
        (WebKit::operator<<):
        * Shared/ScrollingAccelerationCurve.h:
        (WebKit::ScrollingAccelerationCurve::frameRate):
        (WebKit::ScrollingAccelerationCurve::operator== const):
        * Shared/mac/ScrollingAccelerationCurveMac.mm:
        (WebKit::fromIOHIDCurve):
        (WebKit::fromIOHIDCurveArrayWithAcceleration):
        (WebKit::fromIOHIDDevice):
        Fetch and propagate the dispatch frame rate. This isn't *really* a
        ScrollingAccelerationCurve property, but neither is `resolution`;
        this is just currently the only place we look up HID properties
        and push them to the Web Content process; some re-architecture is
        warranted here in the future.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        Keep track of the last fingers-down phase ended event timestamp.

        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        Backdate the start time so that the first event has the appropriate delta.
        Divide out the dispatch frame rate so that the initial velocity is
        as if the curve were running at 60fps (since we *will* run it at 60fps and interpolate).

        (WebKit::MomentumEventDispatcher::didEndMomentumPhase):
        (WebKit::MomentumEventDispatcher::consumeDeltaForTime):
        (WebKit::MomentumEventDispatcher::displayWasRefreshed):
        Factor the consume-a-delta-from-the-ideal-curve code out from displayWasRefreshed
        so we can use it in the start phase too.

        (WebKit::MomentumEventDispatcher::offsetAtTime):
        (WebKit::MomentumEventDispatcher::computeNextDelta):
        Rename idealCurveFrameRate->idealCurveFrameInterval for accuracy.

        * WebProcess/WebPage/MomentumEventDispatcher.h:

2021-12-02  Simon Fraser  <simon.fraser@apple.com>

        A Safari tab can rarely get stuck in a state where rendering updates stop happening
        https://bugs.webkit.org/show_bug.cgi?id=233784
        rdar://85445072

        Reviewed by Chris Dumez.

        Sometimes a Safari tab can get into a state where rendering updates cease to happen,
        which manifests as partially broken scrolling, blank tiles revealed when scrolling,
        and somewhat broken page updates. I was able to sometimes reproduce this by clicking
        on links in eBay emails from Mail on a system with two displays.

        From the one time I reproduce with logging, the output indicated that DisplayRefreshMonitor::displayLinkFired()
        would early return because isPreviousFrameDone() was false. The only way for that to occur,
        barring memory corruption, is if DisplayRefreshMonitorMac::dispatchDisplayDidRefresh() returned early,
        which it does if the callback comes twice in a single event loop; this may explain the rarity.

        So fix DisplayRefreshMonitorMac::dispatchDisplayDidRefresh() call setIsPreviousFrameDone(true)
        so the next callback can make progress

        Also add some locking annotations and fix one missing lock, and some release logging.

        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::dispatchDisplayDidRefresh):

2021-12-02  Chris Dumez  <cdumez@apple.com>

        Regression(r283179) Google Drive freezes after downloading a folder
        https://bugs.webkit.org/show_bug.cgi?id=233783
        <rdar://85918531>

        Reviewed by Darin Adler.

        When process-swapping on a navigation response due to COOP, we create a new ProvisionalPageProxy
        to trigger a provisional load in a new WebProcess. In the common case, the ProvisionalPageProxy
        gets committed, we process-swap and everything works fine. However, if the client decides to
        convert the navigation into a download (like in the Google Drive case), then the
        ProvisionalPageProxy gets destroyed without being committed. The issue is that the committed
        process still thinks at this point that it is in the middle of a navigation and its layer
        tree is thus frozen with reason=PageTransition. This is what makes Google Drive look frozen
        after the download. This is not an issue with PSON because the process-swap happens in
        decidePolicyForNavigationAction() and we tell the previous process to ignore the navigation
        when we process-swap.

        To address the issue, we now tell the committed process to cancel its navigation if the
        ProvisionalPageProxy ends up getting destroyed without being committed. This lets the
        committed process know there is no point in waiting for this navigation to happen and allows
        it to unfreeze its layer tree.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::isProcessSwappingOnNavigationResponse const):
        (WebKit::ProvisionalPageProxy::shouldClosePreviousPageAfterCommit const): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):

2021-12-02  Rachel Ginsberg  <rginsberg@apple.com>

        Make enum values consisten in ApplicationManifest::Icon::Purpose
        and _WKApplicationManifestIconPurpose
        https://bugs.webkit.org/show_bug.cgi?id=233764
        rdar://85976270

        Reviewed by Brent Fulgham.

        The ApplicationManifest tests already check for 1, 2, and 4 respectively.

        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        Set the _WKApplicationManifestIconPurpose enum values to 
        1, 2, 4 to match the enum values set in ApplicationManifest::Icon::Purpose.
        Those values are used in ApplicationManifest because an
        OptionSet is used.


2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [WP][iOS] Add telemetry to determine which system calls are only used on process launch
        https://bugs.webkit.org/show_bug.cgi?id=233649
        <rdar://problem/85875930>

        Reviewed by Brent Fulgham.

        Add telemetry to determine which system calls are only used on WebContent process launch on iOS.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [WP] Strengthen sandbox when AppCache is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233746
        <rdar://problem/85953893>

        Reviewed by Brent Fulgham.

        When AppCache is disabled, we can remove access to some resources in the WebContent process' sandbox.
        This is implemented using a new sandbox state variable representing the AppCache state.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-12-02  Megan Gardner  <megan_gardner@apple.com>

        Re-add support of image control menus.
        https://bugs.webkit.org/show_bug.cgi?id=233305

        Reviewed by Tim Horton.

        Image control menus are needed for mail transition to modern WebKit, so re-add them
        after the removal in https://trac.webkit.org/changeset/272117/webkit

        * Platform/spi/mac/AppKitSPI.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetImageControlsEnabled):
        (WKPreferencesGetImageControlsEnabled):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _imageControlsEnabled]):
        (-[WKWebViewConfiguration _setImageControlsEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add required system call to WebKit sandboxes
        https://bugs.webkit.org/show_bug.cgi?id=233730
        <rdar://85266065>

        Reviewed by Brent Fulgham.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-12-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Hook up navigator.gpu.requestAdapter()
        https://bugs.webkit.org/show_bug.cgi?id=233619

        Reviewed by Dean Jackson.

        This hooks up a new message, GPUConnectionToWebProcess::createRemoteGPU(), which starts
        the whole WebGPU GPU process infrastructure.

        * Configurations/BaseTarget.xcconfig: We have to be able to #include files from WebGPU.
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRemoteGPU): GPUConnectionToWebProcess owns
        the RemoteGPUs.
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * Sources.txt:
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp:
        (WebKit::RemoteGPUProxy::RemoteGPUProxy): Creating a RemoteGPUProxy needs to send a
        message to the GPU process to start the GPU process infrastructure. We block while we're
        waiting for the reply from the GPU process. This was copied from RemoteGraphicsContextGL.
        (WebKit::RemoteGPUProxy::gpuProcessConnectionDidClose):
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Hook up RemoteGPUProxy to WebCore.
        (WebKit::WebChromeClient::createGPUForWebGPU const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-12-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Make Web Lock API work across multiple WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=233719

        Reviewed by Alex Christensen.

        See WebCore changelog.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * UIProcess/WebLockRegistryProxy.cpp: Added.
        (WebKit::WebLockRegistryProxy::WebLockRegistryProxy):
        (WebKit::WebLockRegistryProxy::~WebLockRegistryProxy):
        (WebKit::WebLockRegistryProxy::requestLock):
        (WebKit::WebLockRegistryProxy::releaseLock):
        (WebKit::WebLockRegistryProxy::abortLockRequest):
        (WebKit::WebLockRegistryProxy::snapshot):
        (WebKit::WebLockRegistryProxy::clientIsGoingAway):
        (WebKit::WebLockRegistryProxy::processDidExit):
        * UIProcess/WebLockRegistryProxy.h: Added.
        * UIProcess/WebLockRegistryProxy.messages.in: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::m_webLockRegistry):
        (WebKit::WebProcessProxy::shutDown):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::webLockRegistry):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebCoreSupport/RemoteWebLockRegistry.cpp: Added.
        (WebKit::RemoteWebLockRegistry::LocksSnapshot::isEmpty const):
        (WebKit::RemoteWebLockRegistry::RemoteWebLockRegistry):
        (WebKit::RemoteWebLockRegistry::~RemoteWebLockRegistry):
        (WebKit::RemoteWebLockRegistry::requestLock):
        (WebKit::RemoteWebLockRegistry::releaseLock):
        (WebKit::RemoteWebLockRegistry::abortLockRequest):
        (WebKit::RemoteWebLockRegistry::snapshot):
        (WebKit::RemoteWebLockRegistry::clientIsGoingAway):
        (WebKit::RemoteWebLockRegistry::didCompleteLockRequest):
        (WebKit::RemoteWebLockRegistry::didStealLock):
        * WebProcess/WebCoreSupport/RemoteWebLockRegistry.h: Added.
        * WebProcess/WebCoreSupport/RemoteWebLockRegistry.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::webLockRegistry):

2021-12-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286437.
        https://bugs.webkit.org/show_bug.cgi?id=233776

        Introduced test failure

        Reverted changeset:

        "[WP] Strengthen sandbox when AppCache is disabled"
        https://bugs.webkit.org/show_bug.cgi?id=233746
        https://commits.webkit.org/r286437

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        [WP] Strengthen sandbox when AppCache is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233746
        <rdar://problem/85953893>

        Reviewed by Brent Fulgham.

        When AppCache is disabled, we can remove access to some resources in the WebContent process' sandbox.
        This is implemented using a new sandbox state variable representing the AppCache state.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-12-02  Youenn Fablet  <youenn@apple.com>

        Add some logging to NetworkRTCProvider
        https://bugs.webkit.org/show_bug.cgi?id=233759

        Reviewed by Eric Carlson.

        No change of behavior.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::addSocket):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):

2021-12-02  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(r285722): Introduced performance regression
        https://bugs.webkit.org/show_bug.cgi?id=233718

        Unreviewed partial revert of r285722.

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

2021-12-02  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGLANGLE should not have Cocoa Mac specific display reconfiguration code
        https://bugs.webkit.org/show_bug.cgi?id=233695

        Reviewed by Antti Koivisto.

        Previous GraphicsContextGLANGLE::displayWasReconfigured()
        was renamed to updateContextOnDisplayReconfiguration().
        The displayWasReconfigured() was taken into use in the notification interface
        DisplayConfigurationMonitor::Client::displayWasReconfigured().

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::displayWasReconfigured):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::displayConfigurationChanged):

2021-12-02  Youenn Fablet  <youenn@apple.com>

        Add support for NavigationPreloadManager
        https://bugs.webkit.org/show_bug.cgi?id=233523

        Reviewed by Chris Dumez.

        Make use of ServiceWorkerNavigationPreloader when preload flag is true.
        We only start as soon as created the preload in case of main frame navigation when preload flag is true.
        Update ServiceWorkerNavigationPreloader to differentiate explicit preloads (enabled by NavigationPreloadManager) from implict preloads.
        Implict preloads can be used when fetch event is not handled, which is not guaranteed for explicit preloads, given the Service-Worker-Navigation-Preload header.
        Add IPC to read and set preload state (enabled and header value).

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2021-12-01  Sihui Liu  <sihui_liu@apple.com>

        FileSystemSyncAccessHandle should be invalidated when network process crashes
        https://bugs.webkit.org/show_bug.cgi?id=232605
        <rdar://problem/85187706>

        Reviewed by Youenn Fablet.

        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::connectionClosed):
        (WebKit::WebFileSystemStorageConnection::registerSyncAccessHandle):
        (WebKit::WebFileSystemStorageConnection::unregisterSyncAccessHandle):
        (WebKit::WebFileSystemStorageConnection::invalidateAccessHandle):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-12-01  Jean-Yves Avenard  <jya@apple.com>

        Avoid allocating and copy memory from a SharedMemory into a SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=233401
        rdar://85637721

        Reviewed by Eric Carlson.

        We can directly wrap a SharedMemory into a SharedBuffer using
        SharedMemory::createSharedBuffer instead.
        No change in observable behaviour other than total memory size reduction.

        Fly-by fix: check for null when mapping a SharedMemory to an IPC handle
        in a couple of spots.

        * Shared/ShareableResource.h: Make ShareableResource use thread-safe refcount.
        A ShareableResource once created is immutable and the SharedMemory object
        itself has thread-safe refounting. Deleting the object outside the main thread
        is safe.
        Make members const.
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::wrapInSharedBuffer): Refactor method, using DataSegment::Provider
        instead of platfom specific code.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::decodeSharedBuffer):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::saveImageToLibrary):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::setPromisedDataForImage):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):
        Hardening code, checking for nullability.
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        Hardening code, checking for nullability.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreAppHighlightsAndScrollToIndex):

2021-12-01  Chris Fleizach  <cfleizach@apple.com>

        AX: Support accessibility attributes for <model>
        https://bugs.webkit.org/show_bug.cgi?id=233620
        <rdar://problem/85852073>

        Reviewed by Dean Jackson, Andres Gonzalez.

        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::accessibilityChildren):

2021-12-01  Alex Christensen  <achristensen@webkit.org>

        Use Span instead of pointer/length in CompiledContentExtension
        https://bugs.webkit.org/show_bug.cgi?id=233727

        Reviewed by Tim Hatcher.

        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
        (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
        (WebKit::WebCompiledContentRuleList::serializedActions const):
        (WebKit::WebCompiledContentRuleList::spanWithOffsetAndLength const):
        (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecodeLength const): Deleted.
        (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecodeLength const): Deleted.
        (WebKit::WebCompiledContentRuleList::topURLFiltersBytecodeLength const): Deleted.
        (WebKit::WebCompiledContentRuleList::actions const): Deleted.
        (WebKit::WebCompiledContentRuleList::actionsLength const): Deleted.
        * Shared/WebCompiledContentRuleList.h:

2021-12-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286037.
        https://bugs.webkit.org/show_bug.cgi?id=233724

        Introduced WebRTC crash

        Reverted changeset:

        "[macOS][GPUP] Remove access in sandbox to
        com.apple.audio.AudioComponentRegistrar"
        https://bugs.webkit.org/show_bug.cgi?id=231694
        https://commits.webkit.org/r286037

2021-12-01  Per Arne Vollan  <pvollan@apple.com>

        [WP] Sandbox telemetry is missing for some system calls
        https://bugs.webkit.org/show_bug.cgi?id=233594
        <rdar://problem/85832755>

        Reviewed by Brent Fulgham.

        Sandbox telemetry is missing for some system calls, since telemetry rules are automatically overridden in some cases.
        This patch is addressing this by disabling system call inference.

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

2021-12-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fixes after r286346.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp:
        (WebKit::MomentumEventDispatcher::startDisplayLink):
        (WebKit::MomentumEventDispatcher::displayWasRefreshed):
        (WebKit::MomentumEventDispatcher::didReceiveScrollEventWithInterval):
        (WebKit::MomentumEventDispatcher::buildOffsetTableWithInitialDelta):
        (WebKit::MomentumEventDispatcher::offsetAtTime):
        (WebKit::momentumDecayRate):
        (WebKit::MomentumEventDispatcher::computeNextDelta):
        * WebProcess/WebPage/MomentumEventDispatcher.h:

2021-12-01  Youenn Fablet  <youenn@apple.com>

        Reuse navigation preload if service worker is fetching the corresponding navigation request
        https://bugs.webkit.org/show_bug.cgi?id=233490

        Reviewed by Chris Dumez.

        Store navigation preloader in NetworkSession, keyed by the corresponding fetch identifier.
        When a navigation request is coming from fetch with the corresponding navigation preload identifier
        we look at ongoing preloads and use it if available to answer the fetch.
        To do so, we create a new ServiceWorkerFetchTask that will take the preloader of the initial ServiceWorkerFetchTask.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * WebProcess/Network/WebLoaderStrategy.cpp:

2021-12-01  Youenn Fablet  <youenn@apple.com>

        WebSWServerConnection::createFetchTask does not need to query twice for a registration
        https://bugs.webkit.org/show_bug.cgi?id=233467

        Reviewed by Chris Dumez.

        Instead of searching for a worker and then searching for a registration,
        we now search for a registration and, if not null, directly get its active worker.
        This makes it clear the registration is not null in follow-up code and removes a redundant query.

        No change of behavior, this is a refactoring.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):

2021-12-01  Brady Eidson  <beidson@apple.com>

        Add WKWebsiteDataStore configuration option to enable Mock app bundle testing.
        https://bugs.webkit.org/show_bug.cgi?id=233679

        Reviewed by Tim Horton.

        Covered by API tests.
        
        We're about to land actual implementations of app permissions bundles.
        But the mock bundles still have a place for testing.
        We need a way to switch between Mock and Native.
        
        This patch takes the opportunity to plumb out a WebPushDaemonConnectionConfiguration object
        that can easily be augmented in future patches to add new options without messing with messaging directly.

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::webpushdUsesMockBundlesForTesting const):

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::maybeSendConnectionConfiguration const):
        (WebKit::NetworkNotificationManager::sendMessage const):
        (WebKit::NetworkNotificationManager::sendMessageWithReply const):
        (WebKit::NetworkNotificationManager::maybeSendHostAppAuditToken const): Deleted.
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

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

        * Shared/WebPushDaemonConnectionConfiguration.h: Copied from Source/WebKit/Shared/WebPushDaemonConstants.h.
        (WebKit::WebPushD::WebPushDaemonConnectionConfiguration::encode const):
        (WebKit::WebPushD::WebPushDaemonConnectionConfiguration::decode):

        * Shared/WebPushDaemonConstants.h:
        (WebKit::WebPushD::messageTypeSendsReply):

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration webpushdUsesMockBundlesForTesting]):
        (-[_WKWebsiteDataStoreConfiguration setWebpushdUsesMockBundlesForTesting:]):

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

        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        (WebKit::WebsiteDataStoreConfiguration::webPushDaemonConnectionConfiguration const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::webpushdUsesMockBundlesForTesting const):
        (WebKit::WebsiteDataStoreConfiguration::setWebpushdUsesMockBundlesForTesting):

        * WebKit.xcodeproj/project.pbxproj:

        * webpushd/AppBundleRequest.mm:
        (WebPushD::AppBundleRequest::AppBundleRequest):
        (WebPushD::AppBundleRequest::start):

        * webpushd/PushClientConnection.h:
        (WebPushD::ClientConnection::hasHostAppAuditToken const):
        (WebPushD::ClientConnection::useMockBundlesForTesting const):
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::updateConnectionConfiguration):
        (WebPushD::ClientConnection::setHostAppAuditTokenData):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::getOriginsWithPushAndNotificationPermissions):
        (WebPushD::Daemon::setDebugModeIsEnabled):
        (WebPushD::Daemon::updateConnectionConfiguration):
        (WebPushD::Daemon::setHostAppAuditToken): Deleted.

2021-12-01  Lauro Moura  <lmoura@igalia.com>

        [GTK][GTK4][WebDriver] Flaky crashes exiting many prompty-related webdriver tests
        https://bugs.webkit.org/show_bug.cgi?id=233505

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        When building for GTK4, upon dialog closure the dialog widgets might
        be removed with `webkitWebViewDialogSetChild(dialog, NULL)` while
        the button is still registered as the default widget of the toplevel.

        This commit makes sure we don't have a default widget while the
        dialog is unmapped, to mirror the map() behavior.

        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
        (webkitScriptDialogImplUnmap): Added to unset the default widget.
        (webkit_script_dialog_impl_class_init): Register unmap callback.

2021-11-30  Antoine Quint  <graouts@apple.com>

        replace-webkit-additions-includes should assume unknown or empty deployment targets are supported
        https://bugs.webkit.org/show_bug.cgi?id=233650

        Reviewed by Tim Horton.

        * mac/replace-webkit-additions-includes.py:
        (is_supported_os):

2021-11-30  Simon Fraser  <simon.fraser@apple.com>

        Pass the timestamp for scrolling thread animations through all the serviceScrollAnimation() calls
        https://bugs.webkit.org/show_bug.cgi?id=233678

        Reviewed by Tim Horton.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:

2021-11-30  Simon Fraser  <simon.fraser@apple.com>

        Remove the scrolling tree plumbing of the momentumScrollingAnimatorEnabled() setting, which is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=233680

        Reviewed by Tim Horton.

        We no longer consult the momentumScrollingAnimatorEnabled setting in the scrolling tree, so remove
        the plumbing.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):

2021-11-30  Tim Horton  <timothy_horton@apple.com>

        Add a momentum event synthesizer
        https://bugs.webkit.org/show_bug.cgi?id=233653
        <rdar://problem/85571258>

        Reviewed by Simon Fraser.

        * Platform/Logging.h:
        Add ScrollAnimations log channel to WebKit (it already exists in WebCore).

        * Shared/ScrollingAccelerationCurve.cpp: Added.
        (WebKit::ScrollingAccelerationCurve::ScrollingAccelerationCurve):
        (WebKit::ScrollingAccelerationCurve::interpolate):
        (WebKit::ScrollingAccelerationCurve::computeIntermediateValuesIfNeeded):
        (WebKit::ScrollingAccelerationCurve::evaluateQuartic):
        (WebKit::ScrollingAccelerationCurve::accelerationFactor):
        (WebKit::ScrollingAccelerationCurve::encode const):
        (WebKit::ScrollingAccelerationCurve::decode):
        (WebKit::operator<<):
        (WebKit::ScrollingAccelerationCurve::fromNativeWheelEvent):
        * Shared/ScrollingAccelerationCurve.h: Added.
        (WebKit::ScrollingAccelerationCurve::operator== const):
        (WebKit::ScrollingAccelerationCurve::operator!= const):
        Add a class that represents a quartic scrolling acceleration curve with
        a trailing linear tangent region, and allows interpolation between curves
        and evaluation of the curve at a point.

        * Shared/mac/ScrollingAccelerationCurveMac.mm: Added.
        (WebKit::fromFixedPoint):
        (WebKit::readFixedPointParameter):
        (WebKit::fromIOHIDCurve):
        (WebKit::fromIOHIDCurveArrayWithAcceleration):
        (WebKit::ScrollingAccelerationCurve::fromNativeWheelEvent):
        Given a NativeWebWheelEvent, extract its underlying platform event
        and fetch the ScrollingAccelerationCurve for the originating device.

        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleWheelEvent):
        Fetch the current ScrollingAccelerationCurve on each momentum begin event,
        if the feature is enabled.

        (WebKit::WebPageProxy::sendWheelEvent):
        Send the ScrollingAccelerationCurve to EventDispatcher just before
        we send the momentum begin event along, if it has changed.

        (WebKit::WebPageProxy::windowScreenDidChange):
        Keep EventDispatcher apprised of changes to the current screen of the page.

        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        (WebKit::EventDispatcher::internalWheelEvent):
        Factor most of wheelEvent out into internalWheelEvent, so that
        MomentumEventDispatcher can call internalWheelEvent(), skipping the code
        in wheelEvent() that forwards the event... to MomentumEventDispatcher.

        Also, keep track of where the event came from (UI process or MomentumEventDispatcher)
        and avoid sending didReceiveEvent replies to the UI process for synthetic
        events that it doesn't know about.

        (WebKit::EventDispatcher::wheelEvent):
        Forward wheel events to MomentumEventDispatcher.

        (WebKit::EventDispatcher::setScrollingAccelerationCurve):
        Forward scrolling curve changes to MomentumEventDispatcher.

        (WebKit::EventDispatcher::displayWasRefreshed):
        Forward display refresh callbacks to MomentumEventDispatcher.

        (WebKit::EventDispatcher::windowScreenDidChange):
        Forward page screen changes to MomentumEventDispatcher.

        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::dispatchWheelEventWithoutScrolling):
        * WebProcess/WebPage/WebPage.h:
        Don't send didReceiveEvent for synthetic events from the main thread either.

        * WebProcess/WebPage/MomentumEventDispatcher.cpp: Added.
        (WebKit::MomentumEventDispatcher::MomentumEventDispatcher):
        (WebKit::MomentumEventDispatcher::~MomentumEventDispatcher):
        (WebKit::MomentumEventDispatcher::eventShouldStartSyntheticMomentumPhase const):
        If we have everything we need (a scrolling curve - which also implies
        that the setting is enabled - and raw platform deltas), and the event
        is a momentum begin event, we can use it to start a synthetic momentum phase. 

        (WebKit::MomentumEventDispatcher::handleWheelEvent):
        Start or stop the momentum phase as appropriate.
        Record any incoming fingers-down phase events in a rolling event history structure.
        Block platform-event-driven events from being further handled by WebKit
        if we are inside a synthetic momentum phase, since we'll be replacing them.

        (WebKit::appKitScrollMultiplierForEvent):
        Determine the AppKit scroll muliplier ("accelerated" vs "unaccelerated"
        deltas in NSEvent parlance) from the event via division.

        (WebKit::MomentumEventDispatcher::dispatchSyntheticMomentumEvent):
        Dispatch a synthetic event with the given momentum phase and delta.
        We borrow some properties from the event that initiated the momentum
        phase (e.g. the position), and some from whatever event we've most
        recently seen (even if we told the rest of WebKit to ignore it), so
        that we get the most up-to-date state for e.g. the keyboard modifiers.

        (WebKit::MomentumEventDispatcher::didStartMomentumPhase):
        Record relevant information about the start event, generate the
        momentum curve, and start a full-rate display link. Also, send a momentum
        begin event, since we blocked the real one.

        (WebKit::MomentumEventDispatcher::didEndMomentumPhase):
        Send a momentum ended event, shut down the display link, and reset all
        per-gesture state.

        (WebKit::MomentumEventDispatcher::setScrollingAccelerationCurve):
        Store ScrollingAccelerationCurves on a per-page basis.

        (WebKit::MomentumEventDispatcher::displayID const):
        Look up the displayID for the current gesture's page.

        (WebKit::MomentumEventDispatcher::startDisplayLink):
        (WebKit::MomentumEventDispatcher::stopDisplayLink):
        Start and stop a display link, which will - in a roundabout manner -
        eventually call back into displayWasRefreshed.

        (WebKit::MomentumEventDispatcher::windowScreenDidChange):
        Store DisplayIDs on a per-page basis.

        (WebKit::MomentumEventDispatcher::displayWasRefreshed):
        When the display link calls us back, emit a single momentum changed
        event of sufficient delta to move us to the desired offset along the curve.

        (WebKit::MomentumEventDispatcher::didScrollWithInterval):
        (WebKit::MomentumEventDispatcher::didScroll):
        Record incoming scrolling events into a rolling history deque.

        (WebKit::MomentumEventDispatcher::buildOffsetTableWithInitialDelta):
        Compute the offsets for the entire "ideal curve" table (at 60Hz) by
        running the animation and accumulating the deltas.

        (WebKit::interpolate):
        (WebKit::MomentumEventDispatcher::offsetAtTime):
        Interpolate along the "ideal curve" to determine the intended offset
        at a given time.

        (WebKit::momentumDecayRate):
        (WebKit::MomentumEventDispatcher::computeNextDelta):
        Compute the next delta given a delta (and the event history) by applying
        a bit of exponential decay and then passing it through the
        ScrollingAccelerationCurve. We return both the unaccelerated
        and accelerated deltas, because the input to the next iteration of
        computeNextDelta is the unaccelerated delta, but the delta applied
        to the actual scroll position is the accelerated delta.

        * WebProcess/WebPage/MomentumEventDispatcher.h: Added.

2021-11-30  BJ Burg  <bburg@apple.com>

        Web Inspector: add ExtensionTabActivation diagnostic event
        https://bugs.webkit.org/show_bug.cgi?id=233101
        <rdar://85264921>

        Reviewed by Devin Rousso.

        Add plumbing for new argument 'extensionBundleIdentifier' that's
        passed to WebInspectorUI when registering an extension.

        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector registerExtensionWithID:extensionBundleIdentifier:displayName:completionHandler:]):
        (-[_WKInspector registerExtensionWithID:displayName:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/_WKInspectorExtensionHost.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController registerExtensionWithID:extensionBundleIdentifier:displayName:completionHandler:]):
        (-[_WKRemoteWebInspectorViewController registerExtensionWithID:displayName:completionHandler:]): Deleted.
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::registerExtension):
        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:

2021-11-30  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Hook up StreamServerConnection to Remote*** classes
        https://bugs.webkit.org/show_bug.cgi?id=233600

        Reviewed by Kimmo Kinnunen.

        In order for all the various Remote*** classes in the GPU process to be able to receive messages,
        they have to be able to call streamConnection->startReceivingMessages(*this), and when they're done
        receiving messages, they need to call streamConnection->stopReceivingMessages(). This means that
        all the Remote*** objects have to have a Ref to the StreamServerConnection so they can call into it
        when they're done receiving messages.

        The object model for this matches the object model for RemoteRenderingBackend:
        - RemoteGPU is the WebGPU analogue of RemoteRenderingBackend.
        - WebGPU::ObjectHeap is the WebGPU analogue of RemoteResourceCache.
        - The WebGPU::Remote*** objects are the WebGPU analogues of the ImageBuffers, NativeImages, and
              Fonts retained by the RemoteResourceCache.

        So, here's an ASCII-art diagram of the object model:

                                    +-----------+
                                    | RemoteGPU |
                                    +-----------+
                                   /     |
                  ----------------       |
                /                        | 
               /              +--------------------+
              /               | WebGPU::ObjectHeap |
             /                +--------------------+
            /                  /        |        \ 
           /                  /         |         \ 
          |                  /          |          \ 
          |  +---------------+  +--------------+  +-------------+
          |  | RemoteTexture |  | RemoteDevice |  | RemoteQueue | ... etc.
          |  +---------------+  +--------------+  +-------------+
           \                 \          |          /
            \                 \         |         /
              --------------   \        |        /
                             \  \       |       /
                           +------------------------+
                           | StreamServerConnection |
                           +------------------------+

        Now that the StreamServerConnection is being hooked up, this patch mirrors the design of
        RemoteGraphicsContextGL. In this design, the web process sends a create() message with the
        StreamConnectionBuffer to the gpu process, which creates a RemoteGraphicsContextGL. The
        RemoteGraphicsContextGL owns a StreamConnectionWorkQueue, and upon being created, it starts up the
        work queue and enqueues an initialization task to the work queue, which then sends a reply to the web
        process including the wakeUpSemaphore from the work queue. While the GPU process is busy doing this,
        the web process is blocked, because it can't send any messages through the stream until it has
        received the semaphore. Once it has received the semaphore, the connection has been established,
        and messages can start flowing. This patch follows this model, except instead of
        RemoteGraphicsContextGLProxy communicating with RemoteGraphicsContextGL, RemoteGPUProxy is
        communicating with RemoteGPU.

        There is one more patch to wire up all the pieces together before we can actually call our first
        WebGPU command in Javascript.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/graphics/WebGPU/RemoteAdapter.cpp:
        (WebKit::RemoteAdapter::RemoteAdapter):
        (WebKit::RemoteAdapter::stopListeningForIPC):
        (WebKit::RemoteAdapter::requestDevice):
        * GPUProcess/graphics/WebGPU/RemoteAdapter.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.cpp:
        (WebKit::RemoteBindGroup::RemoteBindGroup):
        (WebKit::RemoteBindGroup::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.cpp:
        (WebKit::RemoteBindGroupLayout::RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteBuffer.cpp:
        (WebKit::RemoteBuffer::RemoteBuffer):
        (WebKit::RemoteBuffer::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.cpp:
        (WebKit::RemoteCommandBuffer::RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.cpp:
        (WebKit::RemoteCommandEncoder::RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::stopListeningForIPC):
        (WebKit::RemoteCommandEncoder::beginRenderPass):
        (WebKit::RemoteCommandEncoder::beginComputePass):
        (WebKit::RemoteCommandEncoder::finish):
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp:
        (WebKit::RemoteComputePassEncoder::RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.cpp:
        (WebKit::RemoteComputePipeline::RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::stopListeningForIPC):
        (WebKit::RemoteComputePipeline::getBindGroupLayout):
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
        (WebKit::RemoteDevice::RemoteDevice):
        (WebKit::RemoteDevice::stopListeningForIPC):
        (WebKit::RemoteDevice::createBuffer):
        (WebKit::RemoteDevice::createTexture):
        (WebKit::RemoteDevice::createSampler):
        (WebKit::RemoteDevice::importExternalTexture):
        (WebKit::RemoteDevice::createBindGroupLayout):
        (WebKit::RemoteDevice::createPipelineLayout):
        (WebKit::RemoteDevice::createBindGroup):
        (WebKit::RemoteDevice::createShaderModule):
        (WebKit::RemoteDevice::createComputePipeline):
        (WebKit::RemoteDevice::createRenderPipeline):
        (WebKit::RemoteDevice::createComputePipelineAsync):
        (WebKit::RemoteDevice::createRenderPipelineAsync):
        (WebKit::RemoteDevice::createCommandEncoder):
        (WebKit::RemoteDevice::createRenderBundleEncoder):
        (WebKit::RemoteDevice::createQuerySet):
        * GPUProcess/graphics/WebGPU/RemoteDevice.h:
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.cpp:
        (WebKit::RemoteExternalTexture::RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
        (WebKit::RemoteGPU::RemoteGPU):
        (WebKit::RemoteGPU::initialize):
        (WebKit::RemoteGPU::stopListeningForIPC):
        (WebKit::RemoteGPU::workQueueInitialize):
        (WebKit::RemoteGPU::workQueueUninitialize):
        (WebKit::RemoteGPU::requestAdapter):
        * GPUProcess/graphics/WebGPU/RemoteGPU.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.messages.in:
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.cpp:
        (WebKit::RemotePipelineLayout::RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.cpp:
        (WebKit::RemoteQuerySet::RemoteQuerySet):
        (WebKit::RemoteQuerySet::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.h:
        * GPUProcess/graphics/WebGPU/RemoteQueue.cpp:
        (WebKit::RemoteQueue::RemoteQueue):
        (WebKit::RemoteQueue::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteQueue.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.cpp:
        (WebKit::RemoteRenderBundle::RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp:
        (WebKit::RemoteRenderBundleEncoder::RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::stopListeningForIPC):
        (WebKit::RemoteRenderBundleEncoder::finish):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp:
        (WebKit::RemoteRenderPassEncoder::RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.cpp:
        (WebKit::RemoteRenderPipeline::RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::stopListeningForIPC):
        (WebKit::RemoteRenderPipeline::getBindGroupLayout):
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteSampler.cpp:
        (WebKit::RemoteSampler::RemoteSampler):
        (WebKit::RemoteSampler::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteSampler.h:
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.cpp:
        (WebKit::RemoteShaderModule::RemoteShaderModule):
        (WebKit::RemoteShaderModule::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.h:
        * GPUProcess/graphics/WebGPU/RemoteTexture.cpp:
        (WebKit::RemoteTexture::RemoteTexture):
        (WebKit::RemoteTexture::stopListeningForIPC):
        (WebKit::RemoteTexture::createView):
        * GPUProcess/graphics/WebGPU/RemoteTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteTextureView.cpp:
        (WebKit::RemoteTextureView::RemoteTextureView):
        (WebKit::RemoteTextureView::stopListeningForIPC):
        * GPUProcess/graphics/WebGPU/RemoteTextureView.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
        (WebKit::WebGPU::ObjectHeap::addObject):
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertExternalTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking):
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp:
        (WebKit::RemoteGPUProxy::RemoteGPUProxy):
        (WebKit::RemoteGPUProxy::abandonGPUProcess):
        (WebKit::RemoteGPUProxy::wasCreated):
        (WebKit::RemoteGPUProxy::waitUntilInitialized):
        (WebKit::RemoteGPUProxy::requestAdapter):
        (WebKit::RemoteGPUProxy::~RemoteGPUProxy): Deleted.
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.messages.in: Added.

2021-11-30  Ada Chan  <adachan@apple.com>

        [WebXR] Implement ChromeClient API to allow getting explicit consent from user on session features
        https://bugs.webkit.org/show_bug.cgi?id=233617

        Reviewed by Dean Jackson.

        Set up WKUIDelegate method for asking user for permission on XR session features.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::requestPermissionOnXRSessionFeatures):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        Declare a WK enum that represents XR session mode and a WK flag
        that represents XR session features for use in the new WKUIDelegate method.
        Declare a new WKUIDelegate method for requesting user permission for
        XR session features that takes in the security origin, the session mode,
        the list of device supported features, the list of features that require consent,
        and the list of features that optionally require consent.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::toWKXRSessionMode):
        (WebKit::toWKXRSessionFeatureFlags):
        (WebKit::toPlatformXRFeatures):
        (WebKit::UIDelegate::UIClient::requestPermissionOnXRSessionFeatures):
        If the WKUIDelegate method for requesting permission is implemented, call it to 
        get the list of user permitted features. Otherwise, preserve the current behavior
        by returning the initially granted features based on device support.
        * UIProcess/XR/PlatformXRCoordinator.h:
        (WebKit::PlatformXRCoordinator::requestPermissionOnSessionFeatures):
        Default implementation returns the initially granted features based on device support.
        * UIProcess/XR/PlatformXRSystem.cpp:
        (WebKit::PlatformXRSystem::requestPermissionOnSessionFeatures):
        * UIProcess/XR/PlatformXRSystem.h:
        * UIProcess/XR/PlatformXRSystem.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestPermissionOnXRSessionFeatures):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/XR/PlatformXRSystemProxy.cpp:
        (WebKit::PlatformXRSystemProxy::requestPermissionOnSessionFeatures):
        Send a message to the UI process to request user consent on session features.
        * WebProcess/XR/PlatformXRSystemProxy.h:

2021-11-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r286227.
        https://bugs.webkit.org/show_bug.cgi?id=233652

        Broke some Apple-internal builds

        Reverted changeset:

        "[Model] clean up compile-time flags and condition IDL methods
        behind them"
        https://bugs.webkit.org/show_bug.cgi?id=233407
        https://commits.webkit.org/r286227

2021-11-30  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: fix bundle identifier lookup for enabling remote inspection
        https://bugs.webkit.org/show_bug.cgi?id=233015
        <rdar://85277115>

        Reviewed by Darin Adler.

        * UIProcess/Inspector/WebInspectorUtilities.h:
        * UIProcess/Inspector/WebInspectorUtilities.cpp:
        (WebKit::bundleIdentifierForSandboxBroker):
        To avoid repeating the logic, extract this code to a helper.

        * UIProcess/Cocoa/WebInspectorPreferenceObserver.mm:
        (-[WKWebInspectorPreferenceObserver init]):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::shouldEnableRemoteInspector):
        Use the helper method.

2021-11-30  Brent Fulgham  <bfulgham@apple.com>

        Correct serialization error in _WKApplicationManifestIcon
        https://bugs.webkit.org/show_bug.cgi?id=233602
        <rdar://problem/85838843>

        Reviewed by Devin Rousso.

        The 'initWithCoder' method had two mistakes: (1) It attempted to decode the 'purposes'
        member as an NSArray of NSString, rather than NSNumber, and (2) it attempted to decode
        the 'src' member as an NSString, when it is in fact an NSURL.

        These errors caused serialization to fail (since NSSecureCoding correctly rejected the
        serialization).

        This patch corrects both errors and adds a new test to exercise this code path.

        Tested by a new TestWebKitAPI Test: ApplicationManifest.IconCoding

        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifestIcon initWithCoder:]): Correct decoding logic.

2021-11-30  BJ Burg  <bburg@apple.com>

        Web Inspector: fix IPC race between unregistering an extension and Web Inspector closing
        https://bugs.webkit.org/show_bug.cgi?id=233264

        Reviewed by Devin Rousso.

        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::inspectorFrontendWillClose):
        Remaining registrations will not be removed via unregisterExtension() if
        the frontend is already in the midst of closing. Clear out the registry.

        (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
        Bail out if the inspector has closed between the IPC message being sent
        and receiving the async response.

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Migrate some WebSWClientConnection messages to async replies
        https://bugs.webkit.org/show_bug.cgi?id=233627

        Reviewed by Chris Dumez.

        Migrate didMatchRegistration, didGetRegistrations and registrationReady to async replies.
        This is easier to understand and is more robust to connection closure.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::matchRegistration):
        (WebKit::WebSWServerConnection::getRegistrations):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::matchRegistration):
        (WebKit::WebSWClientConnection::whenRegistrationReady):
        (WebKit::WebSWClientConnection::getRegistrations):
        (WebKit::WebSWClientConnection::clear):
        (WebKit::WebSWClientConnection::didMatchRegistration): Deleted.
        (WebKit::WebSWClientConnection::didGetRegistrations): Deleted.
        (WebKit::WebSWClientConnection::registrationReady): Deleted.
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:

2021-11-30  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerContainer does not respond well to network process crash
        https://bugs.webkit.org/show_bug.cgi?id=233626

        Reviewed by Chris Dumez.

        Set SW client connection as closed when IPC connection gets closed.

        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::connectionToServerLost):

2021-11-30  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGL should have ANGLE-specific subclass
        https://bugs.webkit.org/show_bug.cgi?id=233522

        Reviewed by Antti Koivisto.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        Function paintToCanvas was moved to GraphicsContextGL.

        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.cpp:
        (WebKit::ScopedWebGLRenderingResourcesRequest::freeWebGLRenderingResources):
        Use static functions from GraphicsContextGLANGLE.

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Preload navigation request if the service worker is not immediately ready to handle the navigation request fetch event
        https://bugs.webkit.org/show_bug.cgi?id=233471

        Reviewed by Chris Dumez.

        Launching a service worker might take time due to parsing and running the service worker script.
        This might delay navigation loads, especially if the service worker is pass through on these loads.
        To optimize this code path, we preload the navigation request in case service worker is not running or not yet activated.
        We then wait for the service worker to handle the fetch event, which will tell us to either go to the network, in which
        case we use the preload, or will provide its own response in which case we use it and cancel the preload.

        Test: http/wpt/service-workers/service-worker-preload-when-not-activated.https.html

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp: Added.
        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h: Added.
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/webrtc/NetworkMDNSRegister.h:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-11-30  Youenn Fablet  <youenn@apple.com>

        Remove unnecessary service worker page settings handling
        https://bugs.webkit.org/show_bug.cgi?id=233468

        Reviewed by Chris Dumez.

        Use ServiceWorkerThreadProxy::setupPageForServiceWorker and remove WebPreferences specific handling.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updatePreferencesStore):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:

2021-11-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebWheelEvent):

2021-11-29  Brady Eidson  <beidson@apple.com>

        Make webpushd "fake registration for testing" much more complicated by adding a "mock app bundle" install
        https://bugs.webkit.org/show_bug.cgi?id=233454

        Reviewed by Alex Christensen.

        Covered by API tests.
        
        Before this patch, webpushd remembered "registrations" using a simple in-memory HashMap.
        
        In the near future, registrations will actually be represented with a placeholder app bundle on disk.
        
        The process of installing placeholders (and checking for existing ones) is complicated and asynchronous.
        
        This patch shifts the in-memory testing implementation from a simple HashMap to a "complicated and asynchronous"
        registration mechanism that simulates how app-bundle installs will work.
        
        Once the "real" mechanisms are in place there will be much more in-depth testing that we can do.
        For now, this is a "no behavior change" patch.

        * NetworkProcess/Notifications/Cocoa/WebPushDaemonConnectionCocoa.mm:
        (WebKit::WebPushD::Connection::connectionReceivedEvent const):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        * WebKit.xcodeproj/project.pbxproj:

        "PushAppBundle" is an abstract base class for representing a placeholder application bundle for a registration.
        Eventually there will be a native one for each platform that actually does system operations.
        For now, the concrete implementation is the in-memory "Mock" app bundle.

        * webpushd/PushAppBundle.h: Copied from Source/WebKit/webpushd/PushClientConnection.h.
        * webpushd/PushAppBundle.mm: Copied from Source/WebKit/webpushd/PushClientConnection.h.
        (WebPushD::PushAppBundleClient::~PushAppBundleClient):
        (WebPushD::PushAppBundle::PushAppBundle):
        (WebPushD::PushAppBundle::~PushAppBundle):
        (WebPushD::PushAppBundle::detachFromClient):
        
        An "AppBundleRequest" is a queable operation meant to do something with an "App bundle".
        For now the operations are "create" and "delete"
        
        * webpushd/AppBundleRequest.h: Added.
        (WebPushD::AppBundleRequestImpl::AppBundleRequestImpl):
        (WebPushD::AppBundleRequestImpl::~AppBundleRequestImpl):
        (WebPushD::AppBundleRequestImpl::callCompletionHandlerAndCleanup):
        (WebPushD::AppBundlePermissionsRequest::AppBundlePermissionsRequest):
        (WebPushD::AppBundleDeletionRequest::AppBundleDeletionRequest):
        * webpushd/AppBundleRequest.mm: Added.
        (WebPushD::AppBundleRequest::AppBundleRequest):
        (WebPushD::AppBundleRequest::~AppBundleRequest):
        (WebPushD::AppBundleRequest::start):
        (WebPushD::AppBundleRequest::cancel):
        (WebPushD::AppBundleRequest::cleanupAfterCompletionHandler):
        (WebPushD::AppBundlePermissionsRequest::startInternal):
        (WebPushD::AppBundlePermissionsRequest::didCheckForExistingBundle):
        (WebPushD::AppBundlePermissionsRequest::didCreateAppBundle):
        (WebPushD::AppBundleDeletionRequest::startInternal):
        (WebPushD::AppBundleDeletionRequest::didDeleteExistingBundleWithError):

        * webpushd/MockAppBundleForTesting.h: Copied from Source/WebKit/webpushd/PushClientConnection.h.
        (WebPushD::MockAppBundleForTesting::create):
        * webpushd/MockAppBundleForTesting.mm: Added.
        (WebPushD::MockAppBundleForTesting::MockAppBundleForTesting):
        (WebPushD::MockAppBundleForTesting::~MockAppBundleForTesting):
        (WebPushD::MockAppBundleForTesting::checkForExistingBundle):
        (WebPushD::MockAppBundleForTesting::deleteExistingBundle):
        (WebPushD::MockAppBundleForTesting::createBundle):
        (WebPushD::MockAppBundleForTesting::stop):

        * webpushd/MockAppBundleRegistry.h: Copied from Source/WebKit/webpushd/PushClientConnection.h.
        * webpushd/MockAppBundleRegistry.mm: Added.
        (WebPushD::MockAppBundleRegistry::singleton):
        (WebPushD::MockAppBundleRegistry::getOriginsWithRegistrations):
        (WebPushD::MockAppBundleRegistry::doesBundleExist):
        (WebPushD::MockAppBundleRegistry::createBundle):
        (WebPushD::MockAppBundleRegistry::deleteBundle):

        * webpushd/PushClientConnection.h:
        * webpushd/PushClientConnection.mm:
        (WebPushD::ClientConnection::create):
        (WebPushD::ClientConnection::enqueueAppBundleRequest):
        (WebPushD::ClientConnection::maybeStartNextAppBundleRequest):
        (WebPushD::ClientConnection::didCompleteAppBundleRequest):
        (WebPushD::ClientConnection::connectionClosed):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::Daemon::connectionAdded):
        (WebPushD::Daemon::connectionRemoved):
        (WebPushD::Daemon::requestSystemNotificationPermission):
        (WebPushD::Daemon::getOriginsWithPushAndNotificationPermissions):
        (WebPushD::Daemon::deletePushAndNotificationRegistration):

2021-11-29  David Kilzer  <ddkilzer@apple.com>

        Disable experimental web features on platforms without UI to enable them
        <https://webkit.org/b/233152>
        <rdar://problem/85430643>

        Reviewed by Brent Fulgham.

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.mm:
        - Fix build when ENABLE(MODEL_ELEMENT) is false.

2021-11-29  Tim Horton  <timothy_horton@apple.com>

        Plumb raw platform scrolling deltas along in wheel events
        https://bugs.webkit.org/show_bug.cgi?id=233583

        Reviewed by Simon Fraser.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode const):
        (WebKit::WebWheelEvent::decode):
        * Shared/WebWheelEvent.h:
        (WebKit::WebWheelEvent::rawPlatformDelta const):
        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::coalesce):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):
        Extract and plumb raw unaccelerated (in the HID sense) deltas in scroll
        events for use in a future patch.

2021-11-29  Chris Dumez  <cdumez@apple.com>

        Add WebKitAdditions bits for captive portal mode
        https://bugs.webkit.org/show_bug.cgi?id=233569
        <rdar://85819906>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:

2021-11-29  Per Arne Vollan  <pvollan@apple.com>

        [WP] Sandbox telemetry is missing for some system calls
        https://bugs.webkit.org/show_bug.cgi?id=233594
        <rdar://problem/85832755>

        Reviewed by Brent Fulgham.

        Sandbox telemetry is missing for some system calls, since telemetry rules are automatically overridden in some cases.
        This patch is addressing this by disabling system call inference.

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

2021-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should allow -captureTextFromCamera: with a caret selection unless the sender is the callout bar
        https://bugs.webkit.org/show_bug.cgi?id=233378
        rdar://85478344

        Reviewed by Tim Horton.

        Allow clients to query whether or not the "capture text from camera" action should be enabled on WKWebView in
        contexts outside of the callout bar. Currently, WKContentView returns NO for this action when there is a non-
        collapsed selection range, but this behavior is only intended for the callout bar; in the case where the action
        is (for instance) triggered by a button in the web view chrome, it doesn't make sense to only enable it when the
        selection is a caret.

        Additionally, adjust the check to use focused element information instead of editor state, such that WebKit
        clients can easily query this API (`-canPerformAction:withSender:`) inside of input delegate callbacks when
        beginning an input session to know whether or not "capture text from camera" should be allowed.

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

2021-11-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Unify speech synthesizer platform usage for Mac/iOS
        https://bugs.webkit.org/show_bug.cgi?id=231895
        <rdar://problem/84372479>

        Reviewed by Andres Gonzalez.

        Create a new message for resetting speech synthesis state when the DOMWindow changes
        but the Page (and its referenced speech synthesis) stays the same.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::speechSynthesisResetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp:
        (WebKit::WebSpeechSynthesisClient::resetState):
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.h:

2021-11-29  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(286219): Build fix.
        https://bugs.webkit.org/show_bug.cgi?id=233388
        <rdar://problem/84481565>

        Unreviewed build fix after r286219.

        * WebKit.xcodeproj/project.pbxproj: Don't make duplicate copies of WebContent resources when building
          the CaptivePortal version of the WCP.

2021-11-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Delete ObjectRegistry in favor of ObjectHeap
        https://bugs.webkit.org/show_bug.cgi?id=233549

        Reviewed by Dean Jackson.

        Originally, I made these two classes distinct because I thought there were two separate use cases:
        1. ObjectHeap is the object that owns all WebGPU objects in the GPU process
        2. ObjectRegistry is the object that can map between WebGPUIdentifiers and their full objects. This
               is needed when we receive a message that contains a WebGPUIdentifier, and we need to look up
               its represented object.

        The original idea was for ObjectHeap to own the objects, and each object would hold a reference to the
        shared ObjectRegistry. However, this turns out not to be necessary, because new objects are created
        via creation routines on _other objects_. This means that every object is going to have to know about
        its owning ObjectHeap anyway (to be able to add newly created objects to it), so there aren't any
        separation-of-concerns benefits to be had. If the ObjectHeap owned all the objects by just storing
        them in a HashMap<WebGPUIdentifier, Ref<Object>> map, that would allow it to do double duty - it could
        own all the objects _and_ be able to look up which WebGPUIdentifier is associated with which object.
        So there's no point in having two distinct objects, when just one is sufficient.

        So, accepting that, this patch is fairly straightforward, despite being large:
        - Before, we were doing m_objectRegistry.addObject(m_identifier, m_backing) and
              m_objectHeap.addObject(remoteRenderPassEncoder). Now, we just do
              m_objectHeap.addObject(identifier, remoteRenderPassEncoder) instead.
        - convertFromBacking() calls go from m_objectRegistry.convertFromBacking() to
              m_objectHeap.convertFromBacking().
        - objectRegistry.removeObject() calls can be entirely deleted, because the ObjectHeap already knows
              when objects are deleted, because it owns them in the first place.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/WebGPU/RemoteAdapter.cpp:
        (WebKit::RemoteAdapter::RemoteAdapter):
        (WebKit::RemoteAdapter::requestDevice):
        (WebKit::RemoteAdapter::~RemoteAdapter): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteAdapter.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.cpp:
        (WebKit::RemoteBindGroup::RemoteBindGroup):
        (WebKit::RemoteBindGroup::~RemoteBindGroup): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.cpp:
        (WebKit::RemoteBindGroupLayout::RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::~RemoteBindGroupLayout): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteBuffer.cpp:
        (WebKit::RemoteBuffer::RemoteBuffer):
        (WebKit::RemoteBuffer::~RemoteBuffer): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.cpp:
        (WebKit::RemoteCommandBuffer::RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::~RemoteCommandBuffer): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.cpp:
        (WebKit::RemoteCommandEncoder::RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::beginRenderPass):
        (WebKit::RemoteCommandEncoder::beginComputePass):
        (WebKit::RemoteCommandEncoder::copyBufferToBuffer):
        (WebKit::RemoteCommandEncoder::copyBufferToTexture):
        (WebKit::RemoteCommandEncoder::copyTextureToBuffer):
        (WebKit::RemoteCommandEncoder::copyTextureToTexture):
        (WebKit::RemoteCommandEncoder::fillBuffer):
        (WebKit::RemoteCommandEncoder::writeTimestamp):
        (WebKit::RemoteCommandEncoder::resolveQuerySet):
        (WebKit::RemoteCommandEncoder::finish):
        (WebKit::RemoteCommandEncoder::~RemoteCommandEncoder): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp:
        (WebKit::RemoteComputePassEncoder::RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::setPipeline):
        (WebKit::RemoteComputePassEncoder::dispatchIndirect):
        (WebKit::RemoteComputePassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteComputePassEncoder::setBindGroup):
        (WebKit::RemoteComputePassEncoder::~RemoteComputePassEncoder): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.cpp:
        (WebKit::RemoteComputePipeline::RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::getBindGroupLayout):
        (WebKit::RemoteComputePipeline::~RemoteComputePipeline): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
        (WebKit::RemoteDevice::RemoteDevice):
        (WebKit::RemoteDevice::createBuffer):
        (WebKit::RemoteDevice::createTexture):
        (WebKit::RemoteDevice::createSampler):
        (WebKit::RemoteDevice::importExternalTexture):
        (WebKit::RemoteDevice::createBindGroupLayout):
        (WebKit::RemoteDevice::createPipelineLayout):
        (WebKit::RemoteDevice::createBindGroup):
        (WebKit::RemoteDevice::createShaderModule):
        (WebKit::RemoteDevice::createComputePipeline):
        (WebKit::RemoteDevice::createRenderPipeline):
        (WebKit::RemoteDevice::createComputePipelineAsync):
        (WebKit::RemoteDevice::createRenderPipelineAsync):
        (WebKit::RemoteDevice::createCommandEncoder):
        (WebKit::RemoteDevice::createRenderBundleEncoder):
        (WebKit::RemoteDevice::createQuerySet):
        (WebKit::RemoteDevice::~RemoteDevice): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteDevice.h:
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.cpp:
        (WebKit::RemoteExternalTexture::RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::~RemoteExternalTexture): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
        (WebKit::RemoteGPU::RemoteGPU):
        (WebKit::RemoteGPU::requestAdapter):
        (WebKit::RemoteGPU::~RemoteGPU): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteGPU.h:
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.cpp:
        (WebKit::RemotePipelineLayout::RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::~RemotePipelineLayout): Deleted.
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.cpp:
        (WebKit::RemoteQuerySet::RemoteQuerySet):
        (WebKit::RemoteQuerySet::~RemoteQuerySet): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.h:
        * GPUProcess/graphics/WebGPU/RemoteQueue.cpp:
        (WebKit::RemoteQueue::RemoteQueue):
        (WebKit::RemoteQueue::submit):
        (WebKit::RemoteQueue::writeBuffer):
        (WebKit::RemoteQueue::writeTexture):
        (WebKit::RemoteQueue::copyExternalImageToTexture):
        (WebKit::RemoteQueue::~RemoteQueue): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteQueue.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.cpp:
        (WebKit::RemoteRenderBundle::RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::~RemoteRenderBundle): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp:
        (WebKit::RemoteRenderBundleEncoder::RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::setPipeline):
        (WebKit::RemoteRenderBundleEncoder::setIndexBuffer):
        (WebKit::RemoteRenderBundleEncoder::setVertexBuffer):
        (WebKit::RemoteRenderBundleEncoder::drawIndirect):
        (WebKit::RemoteRenderBundleEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderBundleEncoder::setBindGroup):
        (WebKit::RemoteRenderBundleEncoder::finish):
        (WebKit::RemoteRenderBundleEncoder::~RemoteRenderBundleEncoder): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp:
        (WebKit::RemoteRenderPassEncoder::RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::setPipeline):
        (WebKit::RemoteRenderPassEncoder::setIndexBuffer):
        (WebKit::RemoteRenderPassEncoder::setVertexBuffer):
        (WebKit::RemoteRenderPassEncoder::drawIndirect):
        (WebKit::RemoteRenderPassEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderPassEncoder::setBindGroup):
        (WebKit::RemoteRenderPassEncoder::setBlendConstant):
        (WebKit::RemoteRenderPassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteRenderPassEncoder::executeBundles):
        (WebKit::RemoteRenderPassEncoder::~RemoteRenderPassEncoder): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.cpp:
        (WebKit::RemoteRenderPipeline::RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::getBindGroupLayout):
        (WebKit::RemoteRenderPipeline::~RemoteRenderPipeline): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteSampler.cpp:
        (WebKit::RemoteSampler::RemoteSampler):
        (WebKit::RemoteSampler::~RemoteSampler): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteSampler.h:
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.cpp:
        (WebKit::RemoteShaderModule::RemoteShaderModule):
        (WebKit::RemoteShaderModule::~RemoteShaderModule): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.h:
        * GPUProcess/graphics/WebGPU/RemoteTexture.cpp:
        (WebKit::RemoteTexture::RemoteTexture):
        (WebKit::RemoteTexture::createView):
        (WebKit::RemoteTexture::~RemoteTexture): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteTextureView.cpp:
        (WebKit::RemoteTextureView::RemoteTextureView):
        (WebKit::RemoteTextureView::~RemoteTextureView): Deleted.
        * GPUProcess/graphics/WebGPU/RemoteTextureView.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
        (WebKit::WebGPU::ObjectHeap::addObject):
        (WebKit::WebGPU::ObjectHeap::removeObject):
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertExternalTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking):
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectRegistry.cpp: Removed.
        * GPUProcess/graphics/WebGPU/WebGPUObjectRegistry.h: Removed.
        * GPUProcess/media/RemoteAudioSourceProviderProxy.cpp:
        (WebKit::RemoteAudioSourceProviderProxy::create):
        (WebKit::RemoteAudioSourceProviderProxy::createRingBuffer):
        (WebKit::RemoteAudioSourceProviderProxy::storageChanged):
        * Platform/IPC/ScopedActiveMessageReceiveQueue.h:
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-11-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Provide default values for descriptor struct members
        https://bugs.webkit.org/show_bug.cgi?id=233431

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        * Shared/WebGPU/WebGPUBindGroupEntry.h:
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.h:
        * Shared/WebGPU/WebGPUBlendComponent.h:
        * Shared/WebGPU/WebGPUBufferBinding.h:
        * Shared/WebGPU/WebGPUBufferBindingLayout.h:
        * Shared/WebGPU/WebGPUBufferDescriptor.h:
        * Shared/WebGPU/WebGPUCanvasConfiguration.h:
        * Shared/WebGPU/WebGPUColor.h:
        * Shared/WebGPU/WebGPUColorTargetState.h:
        * Shared/WebGPU/WebGPUCompilationMessage.h:
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.h:
        * Shared/WebGPU/WebGPUDepthStencilState.h:
        * Shared/WebGPU/WebGPUExtent3D.h:
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.h:
        * Shared/WebGPU/WebGPUImageCopyTexture.h:
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.h:
        * Shared/WebGPU/WebGPUImageDataLayout.h:
        * Shared/WebGPU/WebGPUMultisampleState.h:
        * Shared/WebGPU/WebGPUOrigin2D.h:
        * Shared/WebGPU/WebGPUOrigin3D.h:
        * Shared/WebGPU/WebGPUPrimitiveState.h:
        * Shared/WebGPU/WebGPUQuerySetDescriptor.h:
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.h:
        * Shared/WebGPU/WebGPURenderPassColorAttachment.h:
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.h:
        * Shared/WebGPU/WebGPURenderPassLayout.h:
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.h:
        * Shared/WebGPU/WebGPURequestAdapterOptions.h:
        * Shared/WebGPU/WebGPUSamplerBindingLayout.h:
        * Shared/WebGPU/WebGPUSamplerDescriptor.h:
        * Shared/WebGPU/WebGPUStencilFaceState.h:
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUTextureDescriptor.h:
        * Shared/WebGPU/WebGPUTextureViewDescriptor.h:
        * Shared/WebGPU/WebGPUVertexAttribute.h:
        * Shared/WebGPU/WebGPUVertexBufferLayout.h:

2021-11-29  Chris Dumez  <cdumez@apple.com>

        Make support for WebKitAdditions in Framework headers conditional based on deployment target
        https://bugs.webkit.org/show_bug.cgi?id=233566

        Reviewed by Wenson Hsieh.

        Only support using WebKitAdditions in framework headers on macOS 12+, iOS 16+, tvOS 16+ and
        watchOS 9+.

        * mac/replace-webkit-additions-includes.py:
        (is_supported_os):
        (main):

2021-11-24  Antoine Quint  <graouts@webkit.org>

        [Model] clean up compile-time flags and condition IDL methods behind them
        https://bugs.webkit.org/show_bug.cgi?id=233407

        Reviewed by Tim Horton.

        On top of adopting the changes made to flags in wtf/PlatformEnableCocoa.h and wtf/PlatformHave.h,
        we condition the definition of code related to IDL methods recently added to HTMLModelElement by
        the new set of ENABLE_MODEL_ELEMENT_XXX_CONTROL flags, uncluding WebPageProxy messages allowing
        for this feature to work.

        * Shared/ModelIdentifier.h:
        (WebKit::ModelIdentifier::encode const):
        (WebKit::ModelIdentifier::decode):
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::previewHasCameraSupport):
        (WebKit::ModelElementController::getCameraForModelElement):
        (WebKit::ModelElementController::setCameraForModelElement):
        (WebKit::previewHasAnimationSupport):
        (WebKit::ModelElementController::isPlayingAnimationForModelElement):
        (WebKit::ModelElementController::setAnimationIsPlayingForModelElement):
        (WebKit::ModelElementController::isLoopingAnimationForModelElement):
        (WebKit::ModelElementController::setIsLoopingAnimationForModelElement):
        (WebKit::ModelElementController::animationDurationForModelElement):
        (WebKit::ModelElementController::animationCurrentTimeForModelElement):
        (WebKit::ModelElementController::setAnimationCurrentTimeForModelElement):
        (WebKit::previewHasAudioSupport):
        (WebKit::ModelElementController::hasAudioForModelElement):
        (WebKit::ModelElementController::isMutedForModelElement):
        (WebKit::ModelElementController::setIsMutedForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKModelInteractionGestureRecognizer.h:
        * UIProcess/ios/WKModelInteractionGestureRecognizer.mm:
        * UIProcess/ios/WKModelView.h:
        * UIProcess/ios/WKModelView.mm:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        * WebProcess/Model/WebModelPlayerProvider.cpp:
        (WebKit::WebModelPlayerProvider::createModelPlayer):
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
        (WebKit::ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):

2021-11-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] IPC class refactorings
        https://bugs.webkit.org/show_bug.cgi?id=233546

        Reviewed by Dean Jackson.

        Make classes fast allocated. Also, make the root() function recursive, instead of hardcoding
        each class's distance from the root.

        RemoteGPUProxy has to be in the WebKit namespace, rather than the WebKit::WebGPU namespace,
        because it will be a message receiver, and our code generator doesn't know anything about the
        nested namespace.

        Also make sure that async functions call their callbacks in every codepath.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/WebGPU/RemoteAdapter.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteDevice.h:
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.h:
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.h:
        * GPUProcess/graphics/WebGPU/RemoteQueue.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteSampler.h:
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.h:
        * GPUProcess/graphics/WebGPU/RemoteTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteTextureView.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectRegistry.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBufferProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandBufferProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteExternalTextureProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp:
        (WebKit::RemoteGPUProxy::requestAdapter):
        (WebKit::WebGPU::RemoteGPUProxy::RemoteGPUProxy): Deleted.
        (WebKit::WebGPU::RemoteGPUProxy::~RemoteGPUProxy): Deleted.
        (WebKit::WebGPU::RemoteGPUProxy::requestAdapter): Deleted.
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemotePipelineLayoutProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteQuerySetProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteQueueProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteSamplerProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteShaderModuleProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureViewProxy.h:
        * WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.h:

2021-11-29  Brent Fulgham  <bfulgham@apple.com>

        Create a new XPC service with specific entitlements to support Captive Portal use cases
        https://bugs.webkit.org/show_bug.cgi?id=233388
        <rdar://problem/84481565>

        Reviewed by Per Arne Vollan.

        This initial patch builds a new XPC service with entitlements tailored to our Captive Portal
        use case.

        * Configurations/WebContentService.CaptivePortal.xcconfig: Added.
        * Configurations/WebContentService.xcconfig:
        * Scripts/process-entitlements.sh: Add new sections for captive portal mode
        * WebKit.xcodeproj/project.pbxproj: Add new configuration file.

2021-11-29  Youenn Fablet  <youenn@apple.com>

        Apply WebPreferences on ServiceWorker settings
        https://bugs.webkit.org/show_bug.cgi?id=233466

        Reviewed by Chris Dumez.

        Make WebPage::updateSettingsGenerated as static to reuse it in service worker code path
        just after creation of the dummy Page attached to each service worker.
        This allows correct initialization of the settings that are then used by the service worker.

        * Scripts/PreferencesTemplates/WebPageUpdatePreferences.cpp.erb:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

2021-11-29  Chris Dumez  <cdumez@apple.com>

        Make WebKitCaptivePortalModeEnabled user default work on macOS
        https://bugs.webkit.org/show_bug.cgi?id=233560

        Reviewed by Anders Carlsson.

        Make WebKitCaptivePortalModeEnabled user default work on macOS, not just iOS. This helps with testing.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/WebProcessPool.cpp:

2021-11-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        GPUP GraphicsContextGL creation failure cannot be detected
        https://bugs.webkit.org/show_bug.cgi?id=233517

        Reviewed by Antti Koivisto.

        If GPUP `GraphicsContextGL` creation fails, return nullptr instead of
        trying to create a in-process context.

        Enable `WebChromeClient::createGraphicsContextGL()` call for non-GPU process
        compilation, as the function is now always called. Returning nullptr signifies failure
        to create the context, not a signal to retry some other type.

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

2021-11-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add WebKit DerivedSources to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=233544

        Reviewed by Simon Fraser.

        This allows for things like searching from the UI to work.

        No new tests because there is no behavior change.

        * WebKit.xcodeproj/project.pbxproj:

2021-11-26  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.35.1 release

        * wpe/NEWS: Add release notes for 2.35.1.

2021-11-26  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=233493

        Unreviewed non-unified build fixes.

        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.h: Add missing
        WebCore/ProcessQualified.h header.

2021-11-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGL implementations should have separate class definitions
        https://bugs.webkit.org/show_bug.cgi?id=233491

        Reviewed by Antti Koivisto.

        Use the new concrete classes GraphicsContextGLCocoa and
        GraphicsContextGLTextureMapper in GPUP WebGL implemetation.

        Remove GPUProcessGraphicsContextGL as the added functionality is
        now in the GraphicsContextGLCocoa.

        * GPUProcess/graphics/GPUProcessGraphicsContextGL.h: Removed.
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::platformWorkQueueInitialize):
        * GPUProcess/graphics/RemoteGraphicsContextGLWin.cpp:
        (WebKit::RemoteGraphicsContextGLWin::platformWorkQueueInitialize):
        * WebKit.xcodeproj/project.pbxproj:

2021-11-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.35.1 release

        * gtk/NEWS: Add release notes for 2.35.1.

2021-11-23  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=233450

        Unreviewed non-unified build fixes.

        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.cpp:

2021-11-23  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Effective appearance doesn't update on the old process after PSON
        https://bugs.webkit.org/show_bug.cgi?id=233451

        Reviewed by Michael Catanzaro.

        When reinitializing a WebPage, we get effective appearance from the page creation
        parameters. Actually apply them.

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

2021-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Many network process crashes when running WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=232629

        Reviewed by Martin Robinson.

        For some reason there's a runtime critical warning coming from GLib under flatpak when trying to inherit the
        current thread scheduler settings in newly created ones. As a workaround we don't use QOS::Background for
        network cache background IO queue when running under flatpak.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::qosForBackgroundIOQueue):
        (WebKit::NetworkCache::Storage::Storage):

2021-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Change hardware-acceleration-policy setting default value to always
        https://bugs.webkit.org/show_bug.cgi?id=233418

        Reviewed by Michael Catanzaro.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):

2021-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove old concurrent display list logic that's no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=233433

        Reviewed by Sam Weinig.

        See WebCore ChangeLog for more details.

        * GPUProcess/graphics/DisplayListReaderHandle.cpp: Removed.
        * GPUProcess/graphics/DisplayListReaderHandle.h: Removed.
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackendState.h: Removed.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp:

        Add missing include to fix the build with unified sources.

        * Shared/GPUProcessWakeupMessageArguments.h: Removed.
        * Shared/SharedDisplayListHandle.h: Removed.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/DisplayListWriterHandle.cpp: Removed.
        * WebProcess/GPU/graphics/DisplayListWriterHandle.h: Removed.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.h:

        Add another missing include to fix the build with unified sources.

2021-11-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] IPC\DaemonConnection.h(80): warning C4661: 'void WebKit::Daemon::ConnectionToMachService<WebKit::PCM::ConnectionTraits>::initializeConnectionIfNeeded(void) const': no suitable definition provided for explicit template instantiation request
        https://bugs.webkit.org/show_bug.cgi?id=233413

        Reviewed by Ross Kirsling.

        WinCairo build reports the following warnings.

        > Source\WebKit\Platform\IPC\DaemonConnection.h(80): warning C4661: 'void WebKit::Daemon::ConnectionToMachService<WebKit::PCM::ConnectionTraits>::initializeConnectionIfNeeded(void) const': no suitable definition provided for explicit template instantiation request
        > Source\WebKit\Platform\IPC\DaemonConnection.h(77): note: see declaration of 'WebKit::Daemon::ConnectionToMachService<WebKit::PCM::ConnectionTraits>::initializeConnectionIfNeeded'
        > Source\WebKit\Platform/IPC/DaemonConnection.cpp(40): warning C4661: 'void WebKit::Daemon::ConnectionToMachService<WebKit::PCM::ConnectionTraits>::initializeConnectionIfNeeded(void) const': no suitable definition provided for explicit template instantiation request
        > Source\WebKit\Platform\IPC\DaemonConnection.h(77): note: see declaration of 'WebKit::Daemon::ConnectionToMachService<WebKit::PCM::ConnectionTraits>::initializeConnectionIfNeeded'

        * Platform/IPC/DaemonConnection.cpp:
        (WebKit::Daemon::ConnectionToMachService<Traits>::initializeConnectionIfNeeded const):
        Added.

2021-11-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Send WebGPU messages in the web process
        https://bugs.webkit.org/show_bug.cgi?id=233396

        Reviewed by Dean Jackson.

        This hooks up our Remote***Proxy() WebGPU implementation to the serializable structs.
        There are 2 pieces: adding converter functions from PAL::WebGPU::X to WebKit::WebGPU::X
        structs (which are serializable) and actually calling the send() function itself.
        Because streaming IPC doesn't support async replies yet, all the async calls are currently
        sync in this patch. I'll be adding support for async streaming messages in a subsequent
        patch, which will migrate callers to use sendAsync() instead of sendSync().

        No new tests because there is no behavior change yet. This is the last untested foundational
        patch in the series. All subsequent WebGPU patches should have tests.

        * GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
        (WebKit::RemoteGPU::requestAdapter):
        * GPUProcess/graphics/WebGPU/RemoteGPU.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.messages.in:
        * Shared/WebGPU/WebGPUBindGroupDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBindGroupEntry.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBlendComponent.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBlendState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBufferBinding.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBufferBindingLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUBufferDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUCanvasConfiguration.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUColor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUColorTargetState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUCompilationMessage.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUComputePassDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUConvertToBackingContext.h:
        * Shared/WebGPU/WebGPUDepthStencilState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUDeviceDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUError.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUExtent3D.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUFragmentState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUImageCopyBuffer.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyExternalImage.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUImageCopyTexture.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUImageDataLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUMultisampleState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUObjectDescriptorBase.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUOrigin2D.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUOrigin3D.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUOutOfMemoryError.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUPrimitiveState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUProgrammableStage.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUQuerySetDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderBundleDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderPassColorAttachment.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderPassLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPURequestAdapterOptions.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUSamplerBindingLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUSamplerDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUStencilFaceState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUSupportedFeatures.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUSupportedLimits.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureBindingLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUTextureDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUTextureViewDescriptor.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUValidationError.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUVertexAttribute.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUVertexBufferLayout.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * Shared/WebGPU/WebGPUVertexState.cpp:
        (WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
        * WebKit.xcodeproj/xcshareddata/xcschemes/WebKit.xcscheme:
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.cpp:
        (WebKit::WebGPU::RemoteAdapterProxy::RemoteAdapterProxy):
        (WebKit::WebGPU::RemoteAdapterProxy::requestDevice):
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.cpp:
        (WebKit::WebGPU::RemoteBindGroupLayoutProxy::RemoteBindGroupLayoutProxy):
        (WebKit::WebGPU::RemoteBindGroupLayoutProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupProxy.cpp:
        (WebKit::WebGPU::RemoteBindGroupProxy::RemoteBindGroupProxy):
        (WebKit::WebGPU::RemoteBindGroupProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteBufferProxy.cpp:
        (WebKit::WebGPU::RemoteBufferProxy::RemoteBufferProxy):
        (WebKit::WebGPU::RemoteBufferProxy::mapAsync):
        (WebKit::WebGPU::RemoteBufferProxy::getMappedRange):
        (WebKit::WebGPU::RemoteBufferProxy::unmap):
        (WebKit::WebGPU::RemoteBufferProxy::destroy):
        (WebKit::WebGPU::RemoteBufferProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBufferProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandBufferProxy.cpp:
        (WebKit::WebGPU::RemoteCommandBufferProxy::RemoteCommandBufferProxy):
        (WebKit::WebGPU::RemoteCommandBufferProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandBufferProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandEncoderProxy.cpp:
        (WebKit::WebGPU::RemoteCommandEncoderProxy::RemoteCommandEncoderProxy):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::beginRenderPass):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::beginComputePass):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyBufferToBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyBufferToTexture):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyTextureToBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyTextureToTexture):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::fillBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::writeTimestamp):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::resolveQuerySet):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::finish):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.cpp:
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::RemoteComputePassEncoderProxy):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::dispatch):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::dispatchIndirect):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::beginPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::endPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::endPass):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.cpp:
        (WebKit::WebGPU::RemoteComputePipelineProxy::RemoteComputePipelineProxy):
        (WebKit::WebGPU::RemoteComputePipelineProxy::getBindGroupLayout):
        (WebKit::WebGPU::RemoteComputePipelineProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp:
        (WebKit::WebGPU::RemoteDeviceProxy::RemoteDeviceProxy):
        (WebKit::WebGPU::RemoteDeviceProxy::createBuffer):
        (WebKit::WebGPU::RemoteDeviceProxy::createTexture):
        (WebKit::WebGPU::RemoteDeviceProxy::createSampler):
        (WebKit::WebGPU::RemoteDeviceProxy::importExternalTexture):
        (WebKit::WebGPU::RemoteDeviceProxy::createBindGroupLayout):
        (WebKit::WebGPU::RemoteDeviceProxy::createPipelineLayout):
        (WebKit::WebGPU::RemoteDeviceProxy::createBindGroup):
        (WebKit::WebGPU::RemoteDeviceProxy::createShaderModule):
        (WebKit::WebGPU::RemoteDeviceProxy::createComputePipeline):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderPipeline):
        (WebKit::WebGPU::RemoteDeviceProxy::createComputePipelineAsync):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderPipelineAsync):
        (WebKit::WebGPU::RemoteDeviceProxy::createCommandEncoder):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderBundleEncoder):
        (WebKit::WebGPU::RemoteDeviceProxy::createQuerySet):
        (WebKit::WebGPU::RemoteDeviceProxy::pushErrorScope):
        (WebKit::WebGPU::RemoteDeviceProxy::popErrorScope):
        (WebKit::WebGPU::RemoteDeviceProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteExternalTextureProxy.cpp:
        (WebKit::WebGPU::RemoteExternalTextureProxy::RemoteExternalTextureProxy):
        (WebKit::WebGPU::RemoteExternalTextureProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteExternalTextureProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp:
        (WebKit::WebGPU::RemoteGPUProxy::RemoteGPUProxy):
        (WebKit::WebGPU::RemoteGPUProxy::requestAdapter):
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemotePipelineLayoutProxy.cpp:
        (WebKit::WebGPU::RemotePipelineLayoutProxy::RemotePipelineLayoutProxy):
        (WebKit::WebGPU::RemotePipelineLayoutProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemotePipelineLayoutProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteQuerySetProxy.cpp:
        (WebKit::WebGPU::RemoteQuerySetProxy::RemoteQuerySetProxy):
        (WebKit::WebGPU::RemoteQuerySetProxy::destroy):
        (WebKit::WebGPU::RemoteQuerySetProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteQuerySetProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteQueueProxy.cpp:
        (WebKit::WebGPU::RemoteQueueProxy::RemoteQueueProxy):
        (WebKit::WebGPU::RemoteQueueProxy::submit):
        (WebKit::WebGPU::RemoteQueueProxy::onSubmittedWorkDone):
        (WebKit::WebGPU::RemoteQueueProxy::writeBuffer):
        (WebKit::WebGPU::RemoteQueueProxy::writeTexture):
        (WebKit::WebGPU::RemoteQueueProxy::copyExternalImageToTexture):
        (WebKit::WebGPU::RemoteQueueProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteQueueProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.cpp:
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::RemoteRenderBundleEncoderProxy):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setIndexBuffer):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setVertexBuffer):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::draw):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndexed):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndirect):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndexedIndirect):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::finish):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleProxy.cpp:
        (WebKit::WebGPU::RemoteRenderBundleProxy::RemoteRenderBundleProxy):
        (WebKit::WebGPU::RemoteRenderBundleProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.cpp:
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::RemoteRenderPassEncoderProxy):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setIndexBuffer):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setVertexBuffer):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::draw):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndexed):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndirect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndexedIndirect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setViewport):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setScissorRect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setBlendConstant):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setStencilReference):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::beginOcclusionQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endOcclusionQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::beginPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::executeBundles):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endPass):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.cpp:
        (WebKit::WebGPU::RemoteRenderPipelineProxy::RemoteRenderPipelineProxy):
        (WebKit::WebGPU::RemoteRenderPipelineProxy::getBindGroupLayout):
        (WebKit::WebGPU::RemoteRenderPipelineProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteSamplerProxy.cpp:
        (WebKit::WebGPU::RemoteSamplerProxy::RemoteSamplerProxy):
        (WebKit::WebGPU::RemoteSamplerProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteSamplerProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteShaderModuleProxy.cpp:
        (WebKit::WebGPU::RemoteShaderModuleProxy::RemoteShaderModuleProxy):
        (WebKit::WebGPU::RemoteShaderModuleProxy::compilationInfo):
        (WebKit::WebGPU::RemoteShaderModuleProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteShaderModuleProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp:
        (WebKit::WebGPU::RemoteTextureProxy::RemoteTextureProxy):
        (WebKit::WebGPU::RemoteTextureProxy::createView):
        (WebKit::WebGPU::RemoteTextureProxy::destroy):
        (WebKit::WebGPU::RemoteTextureProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureViewProxy.cpp:
        (WebKit::WebGPU::RemoteTextureViewProxy::RemoteTextureViewProxy):
        (WebKit::WebGPU::RemoteTextureViewProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureViewProxy.h:
        * WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.cpp:
        (WebKit::WebGPU::DowncastConvertToBackingContext::convertToBacking):
        * WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.h:

2021-11-20  Jean-Yves Avenard  <jya@apple.com>

        Remove unnecessary flattening of SharedBuffer when sending them over IPC
        https://bugs.webkit.org/show_bug.cgi?id=233363
        rdar://85600684

        Reviewed by Sam Weinig.

        In several places, a SharedMemory was allocated followed by a copy. To perform
        this copy, the SharedBuffer was flattened which could involve a memory allocation
        followed by a copy of all segments into the final vector.
        We instead make use of SharedBuffer::copyBuffer convenience method which will simply
        copy the individual segment into the newly allocated SharedMemory.

        No change in user observable behaviour.

        Fly-by fix: SharedMemory::allocate is fallible; few instances didn't check the
        returned value. So test that it succeeded and prevent a crash (null deref)

        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setBufferForType):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performActionOnElement):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getDataSelectionForPasteboard):

2021-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Report the initiating url instead of the redirected one
        https://bugs.webkit.org/show_bug.cgi?id=233037

        Reviewed by Brent Fulgham.

        Pass pre-redirect URL to allowChildContextFromSource() and allowScriptFromSource().

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy):

2021-11-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Implement GPU process's message receivers
        https://bugs.webkit.org/show_bug.cgi?id=233358

        Reviewed by Dean Jackson.

        The message receivers have two helper objects:
        1. ObjectHeap, which owns all the message receivers. There is intended to be only one of them per document.
        2. ObjectRegistry, which doesn't own anything, but maintains a mapping from WebGPUIdentifiers to objects. This
               registry is necessary because when an object needs to be destroyed, we have to look up which object it
               is by ID.

        Beyond that, this patch just hooks up those two message receivers, and then forwards all received messages to
        the virtual interface that implements WebGPU.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/WebGPU/RemoteAdapter.cpp:
        (WebKit::RemoteAdapter::RemoteAdapter):
        (WebKit::RemoteAdapter::~RemoteAdapter):
        (WebKit::RemoteAdapter::requestDevice):
        * GPUProcess/graphics/WebGPU/RemoteAdapter.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.cpp:
        (WebKit::RemoteBindGroup::RemoteBindGroup):
        (WebKit::RemoteBindGroup::~RemoteBindGroup):
        (WebKit::RemoteBindGroup::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.h:
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.cpp:
        (WebKit::RemoteBindGroupLayout::RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::~RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteBuffer.cpp:
        (WebKit::RemoteBuffer::RemoteBuffer):
        (WebKit::RemoteBuffer::~RemoteBuffer):
        (WebKit::RemoteBuffer::mapAsync):
        (WebKit::RemoteBuffer::unmap):
        (WebKit::RemoteBuffer::destroy):
        (WebKit::RemoteBuffer::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.cpp:
        (WebKit::RemoteCommandBuffer::RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::~RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.h:
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.cpp:
        (WebKit::RemoteCommandEncoder::RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::~RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::beginRenderPass):
        (WebKit::RemoteCommandEncoder::beginComputePass):
        (WebKit::RemoteCommandEncoder::copyBufferToBuffer):
        (WebKit::RemoteCommandEncoder::copyBufferToTexture):
        (WebKit::RemoteCommandEncoder::copyTextureToBuffer):
        (WebKit::RemoteCommandEncoder::copyTextureToTexture):
        (WebKit::RemoteCommandEncoder::fillBuffer):
        (WebKit::RemoteCommandEncoder::pushDebugGroup):
        (WebKit::RemoteCommandEncoder::popDebugGroup):
        (WebKit::RemoteCommandEncoder::insertDebugMarker):
        (WebKit::RemoteCommandEncoder::writeTimestamp):
        (WebKit::RemoteCommandEncoder::resolveQuerySet):
        (WebKit::RemoteCommandEncoder::finish):
        (WebKit::RemoteCommandEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp:
        (WebKit::RemoteComputePassEncoder::RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::~RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::setPipeline):
        (WebKit::RemoteComputePassEncoder::dispatch):
        (WebKit::RemoteComputePassEncoder::dispatchIndirect):
        (WebKit::RemoteComputePassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteComputePassEncoder::endPipelineStatisticsQuery):
        (WebKit::RemoteComputePassEncoder::endPass):
        (WebKit::RemoteComputePassEncoder::setBindGroup):
        (WebKit::RemoteComputePassEncoder::pushDebugGroup):
        (WebKit::RemoteComputePassEncoder::popDebugGroup):
        (WebKit::RemoteComputePassEncoder::insertDebugMarker):
        (WebKit::RemoteComputePassEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.cpp:
        (WebKit::RemoteComputePipeline::RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::~RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::getBindGroupLayout):
        (WebKit::RemoteComputePipeline::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
        (WebKit::RemoteDevice::RemoteDevice):
        (WebKit::RemoteDevice::~RemoteDevice):
        (WebKit::RemoteDevice::destroy):
        (WebKit::RemoteDevice::createBuffer):
        (WebKit::RemoteDevice::createTexture):
        (WebKit::RemoteDevice::createSampler):
        (WebKit::RemoteDevice::importExternalTexture):
        (WebKit::RemoteDevice::createBindGroupLayout):
        (WebKit::RemoteDevice::createPipelineLayout):
        (WebKit::RemoteDevice::createBindGroup):
        (WebKit::RemoteDevice::createShaderModule):
        (WebKit::RemoteDevice::createComputePipeline):
        (WebKit::RemoteDevice::createRenderPipeline):
        (WebKit::RemoteDevice::createComputePipelineAsync):
        (WebKit::RemoteDevice::createRenderPipelineAsync):
        (WebKit::RemoteDevice::createCommandEncoder):
        (WebKit::RemoteDevice::createRenderBundleEncoder):
        (WebKit::RemoteDevice::createQuerySet):
        (WebKit::RemoteDevice::pushErrorScope):
        (WebKit::RemoteDevice::popErrorScope):
        (WebKit::RemoteDevice::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteDevice.h:
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.cpp:
        (WebKit::RemoteExternalTexture::RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::~RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
        (WebKit::RemoteGPU::RemoteGPU):
        (WebKit::RemoteGPU::~RemoteGPU):
        (WebKit::RemoteGPU::requestAdapter):
        * GPUProcess/graphics/WebGPU/RemoteGPU.h:
        * GPUProcess/graphics/WebGPU/RemoteGPU.messages.in:
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.cpp:
        (WebKit::RemotePipelineLayout::RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::~RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::setLabel):
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.h:
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.cpp:
        (WebKit::RemoteQuerySet::RemoteQuerySet):
        (WebKit::RemoteQuerySet::~RemoteQuerySet):
        (WebKit::RemoteQuerySet::destroy):
        (WebKit::RemoteQuerySet::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.h:
        * GPUProcess/graphics/WebGPU/RemoteQueue.cpp:
        (WebKit::RemoteQueue::RemoteQueue):
        (WebKit::RemoteQueue::~RemoteQueue):
        (WebKit::RemoteQueue::submit):
        (WebKit::RemoteQueue::onSubmittedWorkDone):
        (WebKit::RemoteQueue::writeBuffer):
        (WebKit::RemoteQueue::writeTexture):
        (WebKit::RemoteQueue::copyExternalImageToTexture):
        (WebKit::RemoteQueue::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteQueue.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.cpp:
        (WebKit::RemoteRenderBundle::RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::~RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp:
        (WebKit::RemoteRenderBundleEncoder::RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::~RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::setPipeline):
        (WebKit::RemoteRenderBundleEncoder::setIndexBuffer):
        (WebKit::RemoteRenderBundleEncoder::setVertexBuffer):
        (WebKit::RemoteRenderBundleEncoder::draw):
        (WebKit::RemoteRenderBundleEncoder::drawIndexed):
        (WebKit::RemoteRenderBundleEncoder::drawIndirect):
        (WebKit::RemoteRenderBundleEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderBundleEncoder::setBindGroup):
        (WebKit::RemoteRenderBundleEncoder::pushDebugGroup):
        (WebKit::RemoteRenderBundleEncoder::popDebugGroup):
        (WebKit::RemoteRenderBundleEncoder::insertDebugMarker):
        (WebKit::RemoteRenderBundleEncoder::finish):
        (WebKit::RemoteRenderBundleEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp:
        (WebKit::RemoteRenderPassEncoder::RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::~RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::setPipeline):
        (WebKit::RemoteRenderPassEncoder::setIndexBuffer):
        (WebKit::RemoteRenderPassEncoder::setVertexBuffer):
        (WebKit::RemoteRenderPassEncoder::draw):
        (WebKit::RemoteRenderPassEncoder::drawIndexed):
        (WebKit::RemoteRenderPassEncoder::drawIndirect):
        (WebKit::RemoteRenderPassEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderPassEncoder::setBindGroup):
        (WebKit::RemoteRenderPassEncoder::pushDebugGroup):
        (WebKit::RemoteRenderPassEncoder::popDebugGroup):
        (WebKit::RemoteRenderPassEncoder::insertDebugMarker):
        (WebKit::RemoteRenderPassEncoder::setViewport):
        (WebKit::RemoteRenderPassEncoder::setScissorRect):
        (WebKit::RemoteRenderPassEncoder::setBlendConstant):
        (WebKit::RemoteRenderPassEncoder::setStencilReference):
        (WebKit::RemoteRenderPassEncoder::beginOcclusionQuery):
        (WebKit::RemoteRenderPassEncoder::endOcclusionQuery):
        (WebKit::RemoteRenderPassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteRenderPassEncoder::endPipelineStatisticsQuery):
        (WebKit::RemoteRenderPassEncoder::executeBundles):
        (WebKit::RemoteRenderPassEncoder::endPass):
        (WebKit::RemoteRenderPassEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h:
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.cpp:
        (WebKit::RemoteRenderPipeline::RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::~RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::getBindGroupLayout):
        (WebKit::RemoteRenderPipeline::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.h:
        * GPUProcess/graphics/WebGPU/RemoteSampler.cpp:
        (WebKit::RemoteSampler::RemoteSampler):
        (WebKit::RemoteSampler::~RemoteSampler):
        (WebKit::RemoteSampler::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteSampler.h:
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.cpp:
        (WebKit::RemoteShaderModule::RemoteShaderModule):
        (WebKit::RemoteShaderModule::~RemoteShaderModule):
        (WebKit::RemoteShaderModule::compilationInfo):
        (WebKit::RemoteShaderModule::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.h:
        * GPUProcess/graphics/WebGPU/RemoteTexture.cpp:
        (WebKit::RemoteTexture::RemoteTexture):
        (WebKit::RemoteTexture::~RemoteTexture):
        (WebKit::RemoteTexture::createView):
        (WebKit::RemoteTexture::destroy):
        (WebKit::RemoteTexture::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteTexture.h:
        * GPUProcess/graphics/WebGPU/RemoteTextureView.cpp:
        (WebKit::RemoteTextureView::RemoteTextureView):
        (WebKit::RemoteTextureView::~RemoteTextureView):
        (WebKit::RemoteTextureView::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteTextureView.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
        (WebKit::WebGPU::ObjectHeap::addObject):
        (WebKit::WebGPU::ObjectHeap::removeObject):
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertExternalTextureFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertGPUFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking): Deleted.
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking): Deleted.
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
        * GPUProcess/graphics/WebGPU/WebGPUObjectRegistry.cpp: Added.
        (WebKit::WebGPU::ObjectRegistry::ObjectRegistry):
        (WebKit::WebGPU::ObjectRegistry::~ObjectRegistry):
        (WebKit::WebGPU::ObjectRegistry::addObject):
        (WebKit::WebGPU::ObjectRegistry::removeObject):
        (WebKit::WebGPU::ObjectRegistry::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertExternalTextureFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertGPUFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectRegistry::convertTextureViewFromBacking):
        * GPUProcess/graphics/WebGPU/WebGPUObjectRegistry.h: Copied from Source/WebKit/GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h.
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebKit.xcodeproj/xcshareddata/xcschemes/WebKit.xcscheme:

2021-11-19  Alex Christensen  <achristensen@webkit.org>

        Implement extension-path variant of redirect action in WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=233351

        Reviewed by Tim Hatcher.

        * NetworkProcess/NetworkContentRuleListManager.cpp:
        (WebKit::NetworkContentRuleListManager::addContentRuleLists):
        * NetworkProcess/NetworkContentRuleListManager.h:
        * NetworkProcess/NetworkContentRuleListManager.messages.in:
        * Shared/ServiceWorkerInitializationData.cpp:
        (WebKit::ServiceWorkerInitializationData::decode):
        * Shared/ServiceWorkerInitializationData.h:
        * Shared/UserContentControllerParameters.cpp:
        (WebKit::UserContentControllerParameters::decode):
        * Shared/UserContentControllerParameters.h:
        * Shared/WebCompiledContentRuleListData.cpp:
        (WebKit::WebCompiledContentRuleListData::encode const):
        (WebKit::WebCompiledContentRuleListData::decode):
        * Shared/WebCompiledContentRuleListData.h:
        (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
        * UIProcess/API/APIContentRuleList.cpp:
        (API::ContentRuleList::ContentRuleList):
        (API::ContentRuleList::name const):
        * UIProcess/API/APIContentRuleList.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::createExtension):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addContentRuleList:extensionBaseURL:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::contentExtensionRules):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::contentRuleListData const):
        (WebKit::WebUserContentControllerProxy::addContentRuleList):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::addContentRuleList):
        (WebKit::WebUserContentControllerProxy::contentExtensionRules):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::contentRuleListsFromIdentifier):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addContentRuleLists):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] Use RefPtr across ARKitInlinePreviewModelPlayer when creating strong pointers
        https://bugs.webkit.org/show_bug.cgi?id=233375

        Reviewed by Wenson Hsieh.

        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::getCamera):
        (WebKit::ARKitInlinePreviewModelPlayer::setCamera):
        (WebKit::ARKitInlinePreviewModelPlayer::isPlayingAnimation):
        (WebKit::ARKitInlinePreviewModelPlayer::setAnimationIsPlaying):
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
        (WebKit::ARKitInlinePreviewModelPlayerIOS::enterFullscreen):
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
        (WebKit::ARKitInlinePreviewModelPlayerMac::load):

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] Reduce use of callOnMainRunLoop in ModelElementControllerCocoa
        https://bugs.webkit.org/show_bug.cgi?id=233376

        Reviewed by Wenson Hsieh.

        We only need to use callOnMainRunLoop inside of blocks.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::getCameraForModelElement):
        (WebKit::ModelElementController::setCameraForModelElement):
        (WebKit::ModelElementController::isPlayingAnimationForModelElement):
        (WebKit::ModelElementController::setAnimationIsPlayingForModelElement):

2021-11-19  Chris Dumez  <cdumez@apple.com>

        Revert r282446 to bring back support for WebKitAdditions in Framework headers
        https://bugs.webkit.org/show_bug.cgi?id=233374

        Reviewed by Wenson Hsieh.

        * WebKit.xcodeproj/project.pbxproj:
        * mac/replace-webkit-additions-includes.py: Added.
        (read_content_from_webkit_additions):
        (main):

2021-11-19  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add headers for [_WKWebAuthenticationPanel makeCredentialWithClientDataHash] and [_WKWebAuthenticationPanel getAssertionWithClientDataHash]
        https://bugs.webkit.org/show_bug.cgi?id=233371
        <rdar://problem/85607248>

        Reviewed by Brent Fulgham.

        These SPIs were added in https://bugs.webkit.org/show_bug.cgi?id=233216, but were not added to the header
        file _WKWebAuthenticationPanel.h, this change adds them.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:

2021-11-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add converters from serializable descriptors to interface descriptors
        https://bugs.webkit.org/show_bug.cgi?id=233310

        Reviewed by Dean Jackson.

        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertExternalTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertGPUFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking):
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
        * Scripts/generate-unified-sources.sh:
        * Shared/WebGPU/WebGPUBindGroupDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUFragmentState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupDescriptor.h:
        * Shared/WebGPU/WebGPUBindGroupEntry.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBindGroupDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupEntry.h:
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUBindGroupLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h:
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.h:
        * Shared/WebGPU/WebGPUBlendComponent.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBlendComponent.h:
        * Shared/WebGPU/WebGPUBlendState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBlendState.h:
        * Shared/WebGPU/WebGPUBufferBinding.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferBinding.h:
        * Shared/WebGPU/WebGPUBufferBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferBindingLayout.h:
        * Shared/WebGPU/WebGPUBufferDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferDescriptor.h:
        * Shared/WebGPU/WebGPUCanvasConfiguration.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUFragmentState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCanvasConfiguration.h:
        * Shared/WebGPU/WebGPUColor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUColor.h:
        * Shared/WebGPU/WebGPUColorTargetState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUColorTargetState.h:
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.h:
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.h:
        * Shared/WebGPU/WebGPUCompilationMessage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCompilationMessage.h:
        * Shared/WebGPU/WebGPUComputePassDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePassDescriptor.h:
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePassDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.h:
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.h:
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h:
        * Shared/WebGPU/WebGPUDepthStencilState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUDepthStencilState.h:
        * Shared/WebGPU/WebGPUDeviceDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUDeviceDescriptor.h:
        * Shared/WebGPU/WebGPUError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUOrigin2D.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUError.h:
        * Shared/WebGPU/WebGPUExtent3D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExtent3D.h:
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.h:
        * Shared/WebGPU/WebGPUFragmentState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUPipelineDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUFragmentState.h:
        * Shared/WebGPU/WebGPUImageCopyBuffer.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyBuffer.h:
        * Shared/WebGPU/WebGPUImageCopyExternalImage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyExternalImage.h:
        * Shared/WebGPU/WebGPUImageCopyTexture.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyTexture.h:
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.h:
        * Shared/WebGPU/WebGPUImageDataLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageDataLayout.h:
        * Shared/WebGPU/WebGPUMultisampleState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUMultisampleState.h:
        * Shared/WebGPU/WebGPUObjectDescriptorBase.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUObjectDescriptorBase.h:
        * Shared/WebGPU/WebGPUOrigin2D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOrigin2D.h:
        * Shared/WebGPU/WebGPUOrigin3D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOrigin3D.h:
        * Shared/WebGPU/WebGPUOutOfMemoryError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOutOfMemoryError.h:
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.h:
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.cpp: Copied from Source/WebCore/Modules/WebGPU/GPUPipelineLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h:
        * Shared/WebGPU/WebGPUPrimitiveState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPrimitiveState.h:
        * Shared/WebGPU/WebGPUProgrammableStage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUProgrammableStage.h:
        * Shared/WebGPU/WebGPUQuerySetDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUQuerySetDescriptor.h:
        * Shared/WebGPU/WebGPURenderBundleDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderBundleDescriptor.h:
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.h:
        * Shared/WebGPU/WebGPURenderPassColorAttachment.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassColorAttachment.h:
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyBuffer.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.h:
        * Shared/WebGPU/WebGPURenderPassDescriptor.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDescriptor.h:
        * Shared/WebGPU/WebGPURenderPassLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassLayout.h:
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.cpp: Copied from Source/WebCore/Modules/WebGPU/GPURenderPassTimestampWrite.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.h:
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.h:
        * Shared/WebGPU/WebGPURequestAdapterOptions.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURequestAdapterOptions.h:
        * Shared/WebGPU/WebGPUSamplerBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSamplerBindingLayout.h:
        * Shared/WebGPU/WebGPUSamplerDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSamplerDescriptor.h:
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.h:
        * Shared/WebGPU/WebGPUStencilFaceState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUStencilFaceState.h:
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSupportedFeatures.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUSupportedFeatures.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSupportedFeatures.h:
        * Shared/WebGPU/WebGPUSupportedLimits.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSupportedLimits.h:
        * Shared/WebGPU/WebGPUTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUValidationError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUTextureDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureDescriptor.h:
        * Shared/WebGPU/WebGPUTextureViewDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureViewDescriptor.h:
        * Shared/WebGPU/WebGPUValidationError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUValidationError.h:
        * Shared/WebGPU/WebGPUVertexAttribute.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexAttribute.h:
        * Shared/WebGPU/WebGPUVertexBufferLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyBuffer.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexBufferLayout.h:
        * Shared/WebGPU/WebGPUVertexState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexState.h:
        * Sources.txt:
        * UnifiedSources-output.xcfilelist:
        * WebKit.xcodeproj/project.pbxproj:

2021-11-19  Brady Eidson  <beidson@apple.com>

        More webpushd architecture work
        https://bugs.webkit.org/show_bug.cgi?id=233295

        Reviewed by Alex Christensen.

        Covered by API tests.
        
        This patch:
        - Adds entitlement checks for connections to webpushd
        - Adds a "ClientConnection" object to the daemon to manage per-connection state
        - Adds a debug enabled setting
        - Adds the ability for the connecting app (com.apple.WebKit.Networking) to pass the host app's audit_token
        - Tests some of the above
        - Adds the beginnings of other future infrastructure

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::NetworkNotificationManager):

        * Resources/ios/XPCService-embedded-simulator.entitlements:
        * Scripts/process-entitlements.sh:

        * Shared/Cocoa/CodeSigning.h:
        * Shared/Cocoa/CodeSigning.mm:
        (WebKit::codeSigningIdentifierAndPlatformBinaryStatus):
        (WebKit::codeSigningIdentifier):

        * Shared/WebPushDaemonConstants.h:
        (WebKit::WebPushD::messageTypeSendsReply):

        * WebKit.xcodeproj/project.pbxproj:

        * webpushd/PushClientConnection.h: Copied from Source/WebKit/Shared/Cocoa/CodeSigning.h.
        (WebPushD::ClientConnection::hasAuditToken const):
        (WebPushD::ClientConnection::debugModeIsEnabled const):
        * webpushd/PushClientConnection.mm: Added.
        (WebPushD::ClientConnection::ClientConnection):
        (WebPushD::ClientConnection::setAuditTokenData):
        (WebPushD::ClientConnection::hostCodeSigningIdentifier):
        (WebPushD::ClientConnection::hostHasPushEntitlement):
        (WebPushD::ClientConnection::setDebugModeIsEnabled):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::handleWebPushDMessageWithReply):
        (WebPushD::handleWebPushDMessage):
        (WebPushD::Daemon::broadcastDebugMessage):
        (WebPushD::Daemon::connectionEventHandler):
        (WebPushD::Daemon::connectionAdded):
        (WebPushD::Daemon::connectionRemoved):
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::echoTwice):
        (WebPushD::Daemon::canRegisterForNotifications):
        (WebPushD::Daemon::requestSystemNotificationPermission):
        (WebPushD::Daemon::getOriginsWithPushAndNotificationPermissions):
        (WebPushD::Daemon::deletePushAndNotificationRegistration):
        (WebPushD::Daemon::setHostAppAuditToken):
        (WebPushD::Daemon::setDebugModeIsEnabled):
        (WebPushD::Daemon::toClientConnection):
        * webpushd/WebPushDaemonMain.mm:
        (main):

2021-11-19  Brent Fulgham  <bfulgham@apple.com>

        Add support for web app manifest icons in WebKit/UI Process layer
        https://bugs.webkit.org/show_bug.cgi?id=233350
        <rdar://problem/84311569>

        Reviewed by Chris Dumez.

        This patch builds on the work in Bug 231339 and threads the new icons
        feature through the WebKit layer.

        Note: This change also moves the implementation of _WKApplicationManifestIcon
        earlier in the file since the implementation is needed for proper serialization
        of the _WKApplicationManifest.

        Tested by TestWebKitAPI (ApplicationManifest.Icons) test.

        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (fromPurposes): New helper function.
        (makeVectorElement): Ditto.
        (-[_WKApplicationManifestIcon initWithCoder:]): Updated to call proper
        serialization methods.
        (-[_WKApplicationManifestIcon initWithCoreIcon:]): Added.
        (-[_WKApplicationManifest initWithCoder:]): Updated to properly handle
        serializing the object.
        (-[_WKApplicationManifest icons]): Added.

2021-11-19  Per Arne  <pvollan@apple.com>

        [macOS] Enable message filtering for all WebKit processes
        https://bugs.webkit.org/show_bug.cgi?id=233334
        <rdar://problem/85568306>

        Reviewed by Brent Fulgham.

        The sandbox parameter enabling message filtering should be set in all WebKit processes.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::AuxiliaryProcess::initializeSandbox):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add support for seeking animations
        https://bugs.webkit.org/show_bug.cgi?id=233362
        <rdar://problem/85428812>

        Reviewed by Wenson Hsieh.

        Expose new WebPageProxy messages to let the WebProcess message the UIProcess
        to call into ASVInlinePreview methods to get and set the animation's current
        time as well as getting its duration.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::animationDurationForModelElement):
        (WebKit::ModelElementController::animationCurrentTimeForModelElement):
        (WebKit::ModelElementController::setAnimationCurrentTimeForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementAnimationDuration):
        (WebKit::WebPageProxy::modelElementAnimationCurrentTime):
        (WebKit::WebPageProxy::modelElementSetAnimationCurrentTime):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::animationDuration):
        (WebKit::ARKitInlinePreviewModelPlayer::animationCurrentTime):
        (WebKit::ARKitInlinePreviewModelPlayer::setAnimationCurrentTime):

2021-11-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r286047.

        Breaks internal builds

        Reverted changeset:

        "[WebGPU] Add converters from serializable descriptors to
        interface descriptors"
        https://bugs.webkit.org/show_bug.cgi?id=233310
        https://commits.webkit.org/r286047

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add support for controlling looping animations
        https://bugs.webkit.org/show_bug.cgi?id=233356
        <rdar://problem/85428884>

        Reviewed by Wenson Hsieh.

        Expose new WebPageProxy messages to let the WebProcess message the UIProcess
        to call into ASVInlinePreview methods to get and set the animation's looping
        state.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::isLoopingAnimationForModelElement):
        (WebKit::ModelElementController::setIsLoopingAnimationForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementIsLoopingAnimation):
        (WebKit::WebPageProxy::modelElementSetIsLoopingAnimation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::isLoopingAnimation):
        (WebKit::ARKitInlinePreviewModelPlayer::setIsLoopingAnimation):

2021-11-19  Antoine Quint  <graouts@webkit.org>

        [Model] add audio support
        https://bugs.webkit.org/show_bug.cgi?id=233365
        <rdar://problem/85428982>

        Reviewed by Wenson Hsieh.

        Expose new WebPageProxy messages to let the WebProcess message the UIProcess
        to call into ASVInlinePreview methods to get and set the muted state and get
        whehter the model contains audio.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::previewHasAudioSupport):
        (WebKit::ModelElementController::hasAudioForModelElement):
        (WebKit::ModelElementController::isMutedForModelElement):
        (WebKit::ModelElementController::setIsMutedForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementHasAudio):
        (WebKit::WebPageProxy::modelElementIsMuted):
        (WebKit::WebPageProxy::modelElementSetIsMuted):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::hasAudio):
        (WebKit::ARKitInlinePreviewModelPlayer::isMuted):
        (WebKit::ARKitInlinePreviewModelPlayer::setIsMuted):

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for pausing and resuming animations
        https://bugs.webkit.org/show_bug.cgi?id=233319
        <rdar://problem/85428464>

        Reviewed by Wenson Hsieh.

        Expose new WebPageProxy messages to let the WebProcess message the UIProcess
        to call into ASVInlinePreview methods to get and set the animation's playback
        state.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::previewHasAnimationSupport):
        (WebKit::ModelElementController::isPlayingAnimationForModelElement):
        (WebKit::ModelElementController::setAnimationIsPlayingForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementIsPlayingAnimation):
        (WebKit::WebPageProxy::modelElementSetAnimationIsPlaying):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::isPlayingAnimation):
        (WebKit::ARKitInlinePreviewModelPlayer::setAnimationIsPlaying):

2021-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add converters from serializable descriptors to interface descriptors
        https://bugs.webkit.org/show_bug.cgi?id=233310

        Reviewed by Dean Jackson.

        The WebGPU abstract interface (in PAL/graphics/WebGPU) has a set of structs for descriptors. These descriptors hold references to
        objects, so these interfaces can't be serialized directly. Instead, we have a parallel set of structs (in WebKit/Shared/WebGPU)
        which replace the object references with WebGPUIdentifiers. The web process side will convert the abstract interface structs
        to the serializable ones, and the GPU process side will convert back. This patch implements the converters back, from the serializable
        structs to the abstract interface structs.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertExternalTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertGPUFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking):
        * Shared/WebGPU/WebGPUBindGroupDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUFragmentState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupDescriptor.h:
        * Shared/WebGPU/WebGPUBindGroupEntry.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBindGroupDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupEntry.h:
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h:
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.h:
        * Shared/WebGPU/WebGPUBlendComponent.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUOutOfMemoryError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBlendComponent.h:
        * Shared/WebGPU/WebGPUBlendState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBlendState.h:
        * Shared/WebGPU/WebGPUBufferBinding.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferBinding.h:
        * Shared/WebGPU/WebGPUBufferBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferBindingLayout.h:
        * Shared/WebGPU/WebGPUBufferDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUBufferDescriptor.h:
        * Shared/WebGPU/WebGPUCanvasConfiguration.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyBuffer.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCanvasConfiguration.h:
        * Shared/WebGPU/WebGPUColor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUColor.h:
        * Shared/WebGPU/WebGPUColorTargetState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUColorTargetState.h:
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.h:
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.h:
        * Shared/WebGPU/WebGPUCompilationMessage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUCompilationMessage.h:
        * Shared/WebGPU/WebGPUComputePassDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePassDescriptor.h:
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePassDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.h:
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.h:
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h:
        * Shared/WebGPU/WebGPUDepthStencilState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePassDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUDepthStencilState.h:
        * Shared/WebGPU/WebGPUDeviceDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUDeviceDescriptor.h:
        * Shared/WebGPU/WebGPUError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUCommandBufferDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUError.h:
        * Shared/WebGPU/WebGPUExtent3D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePassDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExtent3D.h:
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.h:
        * Shared/WebGPU/WebGPUFragmentState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUPipelineDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUFragmentState.h:
        * Shared/WebGPU/WebGPUImageCopyBuffer.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyBuffer.h:
        * Shared/WebGPU/WebGPUImageCopyExternalImage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyExternalImage.h:
        * Shared/WebGPU/WebGPUImageCopyTexture.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyTexture.h:
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.h:
        * Shared/WebGPU/WebGPUImageDataLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUImageDataLayout.h:
        * Shared/WebGPU/WebGPUMultisampleState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUMultisampleState.h:
        * Shared/WebGPU/WebGPUObjectDescriptorBase.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUOutOfMemoryError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUObjectDescriptorBase.h:
        * Shared/WebGPU/WebGPUOrigin2D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOrigin2D.h:
        * Shared/WebGPU/WebGPUOrigin3D.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePipelineDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOrigin3D.h:
        * Shared/WebGPU/WebGPUOutOfMemoryError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUOutOfMemoryError.h:
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.h:
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBufferBinding.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h:
        * Shared/WebGPU/WebGPUPrimitiveState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUPrimitiveState.h:
        * Shared/WebGPU/WebGPUProgrammableStage.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUProgrammableStage.h:
        * Shared/WebGPU/WebGPUQuerySetDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUQuerySetDescriptor.h:
        * Shared/WebGPU/WebGPURenderBundleDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderBundleDescriptor.h:
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.h:
        * Shared/WebGPU/WebGPURenderPassColorAttachment.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassColorAttachment.h:
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyBuffer.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.h:
        * Shared/WebGPU/WebGPURenderPassDescriptor.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassDescriptor.h:
        * Shared/WebGPU/WebGPURenderPassLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUSamplerBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassLayout.h:
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUProgrammableStage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.h:
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.h:
        * Shared/WebGPU/WebGPURequestAdapterOptions.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPURequestAdapterOptions.h:
        * Shared/WebGPU/WebGPUSamplerBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSamplerBindingLayout.h:
        * Shared/WebGPU/WebGPUSamplerDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSamplerDescriptor.h:
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.h:
        * Shared/WebGPU/WebGPUStencilFaceState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUStencilFaceState.h:
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUSupportedFeatures.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSupportedFeatures.h:
        * Shared/WebGPU/WebGPUSupportedLimits.cpp: Added.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUSupportedLimits.h:
        * Shared/WebGPU/WebGPUTextureBindingLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureBindingLayout.h:
        * Shared/WebGPU/WebGPUTextureDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUBlendState.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureDescriptor.h:
        * Shared/WebGPU/WebGPUTextureViewDescriptor.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUObjectDescriptorBase.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUTextureViewDescriptor.h:
        * Shared/WebGPU/WebGPUValidationError.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUError.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUValidationError.h:
        * Shared/WebGPU/WebGPUVertexAttribute.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUExternalTextureBindingLayout.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexAttribute.h:
        * Shared/WebGPU/WebGPUVertexBufferLayout.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUImageCopyExternalImage.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexBufferLayout.h:
        * Shared/WebGPU/WebGPUVertexState.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPUComputePipelineDescriptor.h.
        (WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
        * Shared/WebGPU/WebGPUVertexState.h:

2021-11-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [TextureMapper][GraphicsLayerTextureMapper][GraphicsLayerWC] setBackgroundColor support
        https://bugs.webkit.org/show_bug.cgi?id=233244

        Reviewed by Don Olmstead.

        * GPUProcess/graphics/wc/WCScene.cpp:
        (WebKit::WCScene::update):
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::setBackgroundColor):
        (WebKit::GraphicsLayerWC::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/wc/GraphicsLayerWC.h:
        * WebProcess/WebPage/wc/WCUpateInfo.h:
        (WebKit::WCLayerUpateInfo::encode const):
        (WebKit::WCLayerUpateInfo::decode):

2021-11-18  Alex Christensen  <achristensen@webkit.org>

        Allow all redirect schemes when compiling a content rule list
        https://bugs.webkit.org/show_bug.cgi?id=233338

        Reviewed by Tim Hatcher.

        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::compileContentRuleList):
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreCompile):
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (-[WKContentRuleListStore compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]):
        (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:allowedRedirectSchemes:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
        * UIProcess/API/glib/WebKitUserContentFilterStore.cpp:
        (webkitUserContentFilterStoreSaveBytes):

2021-11-18  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove access in sandbox to com.apple.audio.AudioComponentRegistrar
        https://bugs.webkit.org/show_bug.cgi?id=231694
        <rdar://75225923>

        Reviewed by Brent Fulgham.

        After https://trac.webkit.org/changeset/274435/webkit, there is no need to allow access to this service. This patch also implements sending
        the Audio component registrations to the GPU process, which is a requirement before blocking the service in the GPU process.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/cocoa/GPUProcessCocoa.mm:
        (WebKit::GPUProcess::consumeAudioComponentRegistrations):
        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Shared/Cocoa/AudioComponentRegistration.cpp: Added.
        (WebKit::consumeAudioComponentRegistrations):
        * Shared/Cocoa/AudioComponentRegistration.h: Added.
        (WebKit::sendAudioComponentRegistrations):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::revokeAudioCaptureExtension):
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2021-11-18  Per Arne Vollan  <pvollan@apple.com>

        Add syscall telemetry in the Networking process
        https://bugs.webkit.org/show_bug.cgi?id=233203
        <rdar://problem/85504351>

        Reviewed by Brent Fulgham.

        Add syscall telemetry in the Networking process on macOS and iOS.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Scripts/process-entitlements.sh:

2021-11-18  Per Arne  <pvollan@apple.com>

        [macOS][GPUP] Remove access to mach services in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=232208
        <rdar://problem/84584565>

        Unreviewed, revert minor part of initial patch.

        Add back Mach service which is potentially still needed, although telemetry shows no usage.
        We will reevaluate the need for this service when more telemetry is available.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for getting and setting the camera
        https://bugs.webkit.org/show_bug.cgi?id=233265
        <rdar://problem/85426290>

        Unreviewed build fix.

        Fix the Montery build, making sure we guard calls to the new ARQL SPIs.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::getCameraForModelElement):
        (WebKit::ModelElementController::setCameraForModelElement):

2021-11-18  Per Arne  <pvollan@apple.com>

        [iOS] Block access to unused resources in the Networking process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=233129
        <rdar://problem/85411927>

        Unreviewed, fix sandbox syntax errors.
        
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] add support for getting and setting the camera
        https://bugs.webkit.org/show_bug.cgi?id=233265
        <rdar://problem/85426290>

        Reviewed by Darin Adler.

        The ARQL APIs we'd adopted so far were specific to either macOS or iOS. The new camera
        methods are different since they exist on both platforms.

        In order to expose a single message for both platforms, we introduce a new ModelIdentifier
        struct which wraps the UUID string for macOS and the layer identifier for iOS. Then on
        ModelElementController, we have the previewForModelIdentifier() method to get the matching
        ASVInlinePreview for the provided ModelIdentifier.

        This allows getCameraForModelElement() and setCameraForModelElement to be specified for both
        iOS and macOS with a single implementation.

        We also modify takeModelElementFullscreen() to take advantage of ModelIdentifier which showed
        that we had some lingering code in ChromeClient related to this method that was no longer
        necessary following r285922.

        * Shared/ModelIdentifier.h: Copied from Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h.
        (WebKit::ModelIdentifier::encode const):
        (WebKit::ModelIdentifier::decode):
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelViewForModelIdentifier):
        (WebKit::ModelElementController::previewForModelIdentifier):
        (WebKit::ModelElementController::takeModelElementFullscreen):
        (WebKit::previewHasCameraSupport):
        (WebKit::ModelElementController::getCameraForModelElement):
        (WebKit::ModelElementController::setCameraForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementGetCamera):
        (WebKit::WebPageProxy::modelElementSetCamera):
        (WebKit::WebPageProxy::takeModelElementFullscreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
        (WebKit::ARKitInlinePreviewModelPlayer::getCamera):
        (WebKit::ARKitInlinePreviewModelPlayer::setCamera):
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
        (WebKit::ARKitInlinePreviewModelPlayerIOS::modelIdentifier):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::enterFullscreen):
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
        (WebKit::ARKitInlinePreviewModelPlayerMac::modelIdentifier):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::takeModelElementFullscreen const): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeModelElementFullscreen): Deleted.
        * WebProcess/WebPage/WebPage.h:

2021-11-18  Chris Dumez  <cdumez@apple.com>

        Drop ServiceWorkerClientIdentifier / DocumentIdentifier and use ScriptExecutionContextIdentifier instead
        https://bugs.webkit.org/show_bug.cgi?id=233288

        Reviewed by Darin Adler.

        Drop ServiceWorkerClientIdentifier / DocumentIdentifier and use ScriptExecutionContextIdentifier instead.

        We need to generic identifier type to identify script execution contexts globally. This patch augments
        ScriptExecutionContextIdentifier with a process identifier to make it app-global, and then gets rid of
        ServiceWorkerClientIdentifier & DocumentIdentifier (which become obsolete).

        This is useful for Web Lock API support as we need a clientId that is consistent between the Web Lock
        API and the service worker API (tested by imported/w3c/web-platform-tests/web-locks//clientids.tentative.https.html).
        The clientId in service workers was using the ServiceWorkerClientIdentifier type, which made little
        sense to use for the Web Lock API given its name.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::notifyClientsOfControllerChange):
        (WebKit::WebSWServerConnection::controlClient):
        (WebKit::WebSWServerConnection::createFetchTask):
        (WebKit::WebSWServerConnection::postMessageToServiceWorker):
        (WebKit::WebSWServerConnection::clientURLFromIdentifier):
        (WebKit::WebSWServerConnection::scheduleUnregisterJobInServer):
        (WebKit::WebSWServerConnection::postMessageToServiceWorkerClient):
        (WebKit::WebSWServerConnection::unregisterServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::postMessageToServiceWorkerClient):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::unregisterMDNSNames):
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkMDNSRegister.h:
        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ServiceWorkerOrClientIdentifier>::encode):
        (IPC::ArgumentCoder<ServiceWorkerOrClientIdentifier>::decode):
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::liveDocumentURLs):
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.cpp:
        (WebKit::LibWebRTCNetworkManager::getOrCreate):
        (WebKit::LibWebRTCNetworkManager::LibWebRTCNetworkManager):
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.h:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        (WebKit::WebMDNSRegister::unregisterMDNSNames):
        (WebKit::WebMDNSRegister::registerMDNSName):
        * WebProcess/Network/webrtc/WebMDNSRegister.h:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::scheduleUnregisterJobInServer):
        (WebKit::WebSWClientConnection::unregisterServiceWorkerClient):
        (WebKit::WebSWClientConnection::setDocumentIsControlled):
        * WebProcess/Storage/WebSWClientConnection.h:
        * WebProcess/Storage/WebSWClientConnection.messages.in:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::startFetch):
        (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
        (WebKit::WebSWContextManagerConnection::findClientByIdentifier):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-11-18  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Block access to unused resources in the Networking process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=233086
        <rdar://problem/85376544>

        Reviewed by Brent Fulgham.

        Follow-up patch, allow access to logging service for root.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-11-18  Youenn Fablet  <youenn@apple.com>

        MediaPlayerAVFoundation should support rvfc
        https://bugs.webkit.org/show_bug.cgi?id=231945
        <rdar://problem/84657372>

        Reviewed by Chris Dumez.

        Unreviewed, rebasing generator tests.

        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
        * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp:
        * Scripts/webkit/tests/TestWithCVPixelBufferMessages.h:

2021-11-18  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Block access to unused resources in the Networking process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=233129
        <rdar://problem/85411927>

        Reviewed by Brent Fulgham.

        Based on telemetry, block access to unused resources in the Networking process' sandbox on iOS.

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

2021-11-18  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Block access to unused resources in the Networking process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=233086
        <rdar://problem/85376544>

        Reviewed by Brent Fulgham.

        Based on telemetry, block access to unused resources in the Networking process' sandbox on macOS.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial WTR accessibility support when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230259

        Reviewed by Adrian Perez de Castro.

        In case of ATSPI we need the web page accessibility object to get the root and focused object wrappers.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject):
        (WKAccessibilityFocusedObject):

2021-11-18  Youenn Fablet  <youenn@apple.com>

        MediaPlayerAVFoundation should support rvfc
        https://bugs.webkit.org/show_bug.cgi?id=231945
        <rdar://problem/84657372>

        Reviewed by Eric Carlson.

        Add IPC messaging to start/stop metadata gathering from WebProcess to GPUProcess.
        Add IPC messaging to push metadata to WebProcess, including sending the corresponding CVPixelBuffer for the current metadata.
        MediaPlayerPrivateRemote will then serve that buffer when being requested the current image.
        This ensures that painting on a canvas does not mark the current buffer as acquired, which would then skip the video frame metadata gathering.
        This also ensures the same buffer is used if a video element is painted several times during the same rvfc callback.
        This has the side benefit of removing the synchronous IPC to paint the video element in a canvas.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        * Scripts/webkit/messages.py:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:

2021-11-18  Chris Lord  <clord@igalia.com>

        [GLIB] twitch.tv forces synchronous scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232376
        <rdar://problem/85247010>

        Reviewed by Simon Fraser.

        Don't force synchronous wheel event delivery for scroll events when
        a user scroll is in progress.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

2021-11-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteGraphicsContextGLProxyBase should not have platform-specific implementations
        https://bugs.webkit.org/show_bug.cgi?id=233175

        Reviewed by Antti Koivisto.

        Move platform-specific code from RemoteGraphicsContextGLProxyBase to
        WebKit::RemoteGraphicsContextGLProxyCocoa and WebKit::RemoteGraphicsContextGLProxyWC.
        The platform-specific code is trivial and anyway used by the WebKit side concrete classes.

        * PlatformWin.cmake:
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::RemoteGraphicsContextGLProxy):
        (WebKit::RemoteGraphicsContextGLProxy::create): Deleted.
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay): Deleted.
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:
        * WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm:
        (WebKit::RemoteGraphicsContextGLProxy::create):
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay): Deleted.
        * WebProcess/GPU/graphics/wc/RemoteGraphicsContextGLProxyWC.cpp: Added.
        (WebKit::RemoteGraphicsContextGLProxy::create):

2021-11-18  Antoine Quint  <graouts@webkit.org>

        [Model] [macOS] Add support for interaction on macOS
        https://bugs.webkit.org/show_bug.cgi?id=233105
        <rdar://problem/80079386>

        Reviewed by Wenson Hsieh.

        Forward mouse events captured in the Web process to the matching ASVInlinePreview.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::previewForUUID):
        (WebKit::ModelElementController::handleMouseDownForModelElement):
        (WebKit::ModelElementController::handleMouseMoveForModelElement):
        (WebKit::ModelElementController::handleMouseUpForModelElement):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseDownForModelElement):
        (WebKit::WebPageProxy::handleMouseMoveForModelElement):
        (WebKit::WebPageProxy::handleMouseUpForModelElement):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseDown):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseMove):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseUp):
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
        (WebKit::ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction):
        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseDown):
        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseMove):
        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseUp):

2021-11-17  Youenn Fablet  <youenn@apple.com>

        Add support for more rvfc metadata
        https://bugs.webkit.org/show_bug.cgi?id=233185

        Reviewed by Eric Carlson.

        Make sure to receive frame metadats, send it through IPC to WebProcess and pipe it to media source observers.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        * WebProcess/cocoa/RemoteCaptureSampleManager.h:
        * WebProcess/cocoa/RemoteCaptureSampleManager.messages.in:
        * WebProcess/cocoa/RemoteRealtimeDisplaySource.h:
        * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
        * WebProcess/cocoa/RemoteRealtimeVideoSource.h:

2021-11-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Add IPC message handlers for WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=233247

        Reviewed by Dean Jackson.

        Add classes in GPUProcess/graphics/WebGPU to receive WebGPU's IPC messages.
        Each one of these classes has an associated messages.in file. Each of these objects
        holds a backing PAL::WebGPU object which is the actual implementation. The methods
        that receive the IPC messages are currently unimplemented, but in a subsequent patch
        they'll just forward on the calls to their backing PAL::WebGPU object.

        This also adds serialization routines for all the structs in Shared/WebGPU.

        No new tests because there is no behavior change (yet). We're very close, though!!!!

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/graphics/WebGPU/RemoteAdapter.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.cpp.
        (WebKit::RemoteAdapter::RemoteAdapter):
        (WebKit::RemoteAdapter::~RemoteAdapter):
        (WebKit::RemoteAdapter::requestDevice):
        * GPUProcess/graphics/WebGPU/RemoteAdapter.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteAdapter.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteBindGroup::RemoteBindGroup):
        (WebKit::RemoteBindGroup::~RemoteBindGroup):
        (WebKit::RemoteBindGroup::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteBindGroup.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteBindGroupLayout::RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::~RemoteBindGroupLayout):
        (WebKit::RemoteBindGroupLayout::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteBindGroupLayout.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteBuffer.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteBuffer::RemoteBuffer):
        (WebKit::RemoteBuffer::~RemoteBuffer):
        (WebKit::RemoteBuffer::mapAsync):
        (WebKit::RemoteBuffer::unmap):
        (WebKit::RemoteBuffer::destroy):
        (WebKit::RemoteBuffer::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteBuffer.h: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h.
        * GPUProcess/graphics/WebGPU/RemoteBuffer.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteCommandBuffer::RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::~RemoteCommandBuffer):
        (WebKit::RemoteCommandBuffer::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteCommandBuffer.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.cpp: Added.
        (WebKit::RemoteCommandEncoder::RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::~RemoteCommandEncoder):
        (WebKit::RemoteCommandEncoder::beginRenderPass):
        (WebKit::RemoteCommandEncoder::beginComputePass):
        (WebKit::RemoteCommandEncoder::copyBufferToBuffer):
        (WebKit::RemoteCommandEncoder::copyBufferToTexture):
        (WebKit::RemoteCommandEncoder::copyTextureToBuffer):
        (WebKit::RemoteCommandEncoder::copyTextureToTexture):
        (WebKit::RemoteCommandEncoder::fillBuffer):
        (WebKit::RemoteCommandEncoder::pushDebugGroup):
        (WebKit::RemoteCommandEncoder::popDebugGroup):
        (WebKit::RemoteCommandEncoder::insertDebugMarker):
        (WebKit::RemoteCommandEncoder::writeTimestamp):
        (WebKit::RemoteCommandEncoder::resolveQuerySet):
        (WebKit::RemoteCommandEncoder::finish):
        (WebKit::RemoteCommandEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteCommandEncoder.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp: Added.
        (WebKit::RemoteComputePassEncoder::RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::~RemoteComputePassEncoder):
        (WebKit::RemoteComputePassEncoder::setPipeline):
        (WebKit::RemoteComputePassEncoder::dispatch):
        (WebKit::RemoteComputePassEncoder::dispatchIndirect):
        (WebKit::RemoteComputePassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteComputePassEncoder::endPipelineStatisticsQuery):
        (WebKit::RemoteComputePassEncoder::endPass):
        (WebKit::RemoteComputePassEncoder::setBindGroup):
        (WebKit::RemoteComputePassEncoder::pushDebugGroup):
        (WebKit::RemoteComputePassEncoder::popDebugGroup):
        (WebKit::RemoteComputePassEncoder::insertDebugMarker):
        (WebKit::RemoteComputePassEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteComputePipeline::RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::~RemoteComputePipeline):
        (WebKit::RemoteComputePipeline::getBindGroupLayout):
        (WebKit::RemoteComputePipeline::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteComputePipeline.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteDevice.cpp: Added.
        (WebKit::RemoteDevice::RemoteDevice):
        (WebKit::RemoteDevice::~RemoteDevice):
        (WebKit::RemoteDevice::destroy):
        (WebKit::RemoteDevice::createBuffer):
        (WebKit::RemoteDevice::createTexture):
        (WebKit::RemoteDevice::createSampler):
        (WebKit::RemoteDevice::importExternalTexture):
        (WebKit::RemoteDevice::createBindGroupLayout):
        (WebKit::RemoteDevice::createPipelineLayout):
        (WebKit::RemoteDevice::createBindGroup):
        (WebKit::RemoteDevice::createShaderModule):
        (WebKit::RemoteDevice::createComputePipeline):
        (WebKit::RemoteDevice::createRenderPipeline):
        (WebKit::RemoteDevice::createComputePipelineAsync):
        (WebKit::RemoteDevice::createRenderPipelineAsync):
        (WebKit::RemoteDevice::createCommandEncoder):
        (WebKit::RemoteDevice::createRenderBundleEncoder):
        (WebKit::RemoteDevice::createQuerySet):
        (WebKit::RemoteDevice::pushErrorScope):
        (WebKit::RemoteDevice::popErrorScope):
        (WebKit::RemoteDevice::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteDevice.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteDevice.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteExternalTexture::RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::~RemoteExternalTexture):
        (WebKit::RemoteExternalTexture::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteExternalTexture.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteGPU.cpp: Copied from Source/WebKit/Shared/WebGPU/WebGPURenderPipelineDescriptor.h.
        (WebKit::RemoteGPU::RemoteGPU):
        (WebKit::RemoteGPU::~RemoteGPU):
        (WebKit::RemoteGPU::requestAdapter):
        * GPUProcess/graphics/WebGPU/RemoteGPU.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUAdapter.h.
        * GPUProcess/graphics/WebGPU/RemoteGPU.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemotePipelineLayout::RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::~RemotePipelineLayout):
        (WebKit::RemotePipelineLayout::setLabel):
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemotePipelineLayout.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteQuerySet::RemoteQuerySet):
        (WebKit::RemoteQuerySet::~RemoteQuerySet):
        (WebKit::RemoteQuerySet::destroy):
        (WebKit::RemoteQuerySet::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteQuerySet.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteQueue.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteQueue::RemoteQueue):
        (WebKit::RemoteQueue::~RemoteQueue):
        (WebKit::RemoteQueue::submit):
        (WebKit::RemoteQueue::onSubmittedWorkDone):
        (WebKit::RemoteQueue::writeBuffer):
        (WebKit::RemoteQueue::writeTexture):
        (WebKit::RemoteQueue::copyExternalImageToTexture):
        (WebKit::RemoteQueue::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteQueue.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteQueue.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteRenderBundle::RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::~RemoteRenderBundle):
        (WebKit::RemoteRenderBundle::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundle.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp: Added.
        (WebKit::RemoteRenderBundleEncoder::RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::~RemoteRenderBundleEncoder):
        (WebKit::RemoteRenderBundleEncoder::setPipeline):
        (WebKit::RemoteRenderBundleEncoder::setIndexBuffer):
        (WebKit::RemoteRenderBundleEncoder::setVertexBuffer):
        (WebKit::RemoteRenderBundleEncoder::draw):
        (WebKit::RemoteRenderBundleEncoder::drawIndexed):
        (WebKit::RemoteRenderBundleEncoder::drawIndirect):
        (WebKit::RemoteRenderBundleEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderBundleEncoder::setBindGroup):
        (WebKit::RemoteRenderBundleEncoder::pushDebugGroup):
        (WebKit::RemoteRenderBundleEncoder::popDebugGroup):
        (WebKit::RemoteRenderBundleEncoder::insertDebugMarker):
        (WebKit::RemoteRenderBundleEncoder::finish):
        (WebKit::RemoteRenderBundleEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp: Added.
        (WebKit::RemoteRenderPassEncoder::RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::~RemoteRenderPassEncoder):
        (WebKit::RemoteRenderPassEncoder::setPipeline):
        (WebKit::RemoteRenderPassEncoder::setIndexBuffer):
        (WebKit::RemoteRenderPassEncoder::setVertexBuffer):
        (WebKit::RemoteRenderPassEncoder::draw):
        (WebKit::RemoteRenderPassEncoder::drawIndexed):
        (WebKit::RemoteRenderPassEncoder::drawIndirect):
        (WebKit::RemoteRenderPassEncoder::drawIndexedIndirect):
        (WebKit::RemoteRenderPassEncoder::setBindGroup):
        (WebKit::RemoteRenderPassEncoder::pushDebugGroup):
        (WebKit::RemoteRenderPassEncoder::popDebugGroup):
        (WebKit::RemoteRenderPassEncoder::insertDebugMarker):
        (WebKit::RemoteRenderPassEncoder::setViewport):
        (WebKit::RemoteRenderPassEncoder::setScissorRect):
        (WebKit::RemoteRenderPassEncoder::setBlendConstant):
        (WebKit::RemoteRenderPassEncoder::setStencilReference):
        (WebKit::RemoteRenderPassEncoder::beginOcclusionQuery):
        (WebKit::RemoteRenderPassEncoder::endOcclusionQuery):
        (WebKit::RemoteRenderPassEncoder::beginPipelineStatisticsQuery):
        (WebKit::RemoteRenderPassEncoder::endPipelineStatisticsQuery):
        (WebKit::RemoteRenderPassEncoder::executeBundles):
        (WebKit::RemoteRenderPassEncoder::endPass):
        (WebKit::RemoteRenderPassEncoder::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteRenderPipeline::RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::~RemoteRenderPipeline):
        (WebKit::RemoteRenderPipeline::getBindGroupLayout):
        (WebKit::RemoteRenderPipeline::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteRenderPipeline.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteSampler.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteSampler::RemoteSampler):
        (WebKit::RemoteSampler::~RemoteSampler):
        (WebKit::RemoteSampler::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteSampler.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteSampler.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteShaderModule::RemoteShaderModule):
        (WebKit::RemoteShaderModule::~RemoteShaderModule):
        (WebKit::RemoteShaderModule::compilationInfo):
        (WebKit::RemoteShaderModule::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.h: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h.
        * GPUProcess/graphics/WebGPU/RemoteShaderModule.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteTexture.cpp: Copied from Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp.
        (WebKit::RemoteTexture::RemoteTexture):
        (WebKit::RemoteTexture::~RemoteTexture):
        (WebKit::RemoteTexture::createView):
        (WebKit::RemoteTexture::destroy):
        (WebKit::RemoteTexture::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteTexture.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteTexture.messages.in: Added.
        * GPUProcess/graphics/WebGPU/RemoteTextureView.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUMapMode.h.
        (WebKit::RemoteTextureView::RemoteTextureView):
        (WebKit::RemoteTextureView::~RemoteTextureView):
        (WebKit::RemoteTextureView::setLabel):
        * GPUProcess/graphics/WebGPU/RemoteTextureView.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUTexture.h.
        * GPUProcess/graphics/WebGPU/RemoteTextureView.messages.in: Added.
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp: Added.
        (WebKit::WebGPU::ObjectHeap::ObjectHeap):
        (WebKit::WebGPU::ObjectHeap::~ObjectHeap):
        (WebKit::WebGPU::ObjectHeap::convertAdapterFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBindGroupLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandBufferFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertCommandEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertComputePipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertDeviceFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertGPUFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertPipelineLayoutFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQuerySetFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertQueueFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderBundleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPassEncoderFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertRenderPipelineFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertSamplerFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertShaderModuleFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureFromBacking):
        (WebKit::WebGPU::ObjectHeap::convertTextureViewFromBacking):
        * GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h: Added.
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/WebGPU/WebGPUBindGroupDescriptor.h:
        (WebKit::WebGPU::BindGroupDescriptor::encode const):
        (WebKit::WebGPU::BindGroupDescriptor::decode):
        * Shared/WebGPU/WebGPUBindGroupEntry.h:
        (WebKit::WebGPU::BindGroupEntry::encode const):
        (WebKit::WebGPU::BindGroupEntry::decode):
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h:
        (WebKit::WebGPU::BindGroupLayoutDescriptor::encode const):
        (WebKit::WebGPU::BindGroupLayoutDescriptor::decode):
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.h:
        (WebKit::WebGPU::BindGroupLayoutEntry::encode const):
        (WebKit::WebGPU::BindGroupLayoutEntry::decode):
        * Shared/WebGPU/WebGPUBlendComponent.h:
        (WebKit::WebGPU::BlendComponent::encode const):
        (WebKit::WebGPU::BlendComponent::decode):
        * Shared/WebGPU/WebGPUBlendState.h:
        (WebKit::WebGPU::BlendState::encode const):
        (WebKit::WebGPU::BlendState::decode):
        * Shared/WebGPU/WebGPUBufferBinding.h:
        (WebKit::WebGPU::BufferBinding::encode const):
        (WebKit::WebGPU::BufferBinding::decode):
        * Shared/WebGPU/WebGPUBufferBindingLayout.h:
        (WebKit::WebGPU::BufferBindingLayout::encode const):
        (WebKit::WebGPU::BufferBindingLayout::decode):
        * Shared/WebGPU/WebGPUBufferDescriptor.h:
        (WebKit::WebGPU::BufferDescriptor::encode const):
        (WebKit::WebGPU::BufferDescriptor::decode):
        * Shared/WebGPU/WebGPUCanvasConfiguration.h:
        (WebKit::WebGPU::CanvasConfiguration::encode const):
        (WebKit::WebGPU::CanvasConfiguration::decode):
        * Shared/WebGPU/WebGPUColor.h:
        (WebKit::WebGPU::ColorDict::encode const):
        (WebKit::WebGPU::ColorDict::decode):
        * Shared/WebGPU/WebGPUColorTargetState.h:
        (WebKit::WebGPU::ColorTargetState::encode const):
        (WebKit::WebGPU::ColorTargetState::decode):
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.h:
        (WebKit::WebGPU::CommandBufferDescriptor::encode const):
        (WebKit::WebGPU::CommandBufferDescriptor::decode):
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.h:
        (WebKit::WebGPU::CommandEncoderDescriptor::encode const):
        (WebKit::WebGPU::CommandEncoderDescriptor::decode):
        * Shared/WebGPU/WebGPUCompilationMessage.h: Added.
        (WebKit::WebGPU::CompilationMessage::encode const):
        (WebKit::WebGPU::CompilationMessage::decode):
        * Shared/WebGPU/WebGPUComputePassDescriptor.h:
        (WebKit::WebGPU::ComputePassDescriptor::encode const):
        (WebKit::WebGPU::ComputePassDescriptor::decode):
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.h:
        (WebKit::WebGPU::ComputePassTimestampWrite::encode const):
        (WebKit::WebGPU::ComputePassTimestampWrite::decode):
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.h:
        (WebKit::WebGPU::ComputePipelineDescriptor::encode const):
        (WebKit::WebGPU::ComputePipelineDescriptor::decode):
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h:
        * Shared/WebGPU/WebGPUDepthStencilState.h:
        (WebKit::WebGPU::DepthStencilState::encode const):
        (WebKit::WebGPU::DepthStencilState::decode):
        * Shared/WebGPU/WebGPUDeviceDescriptor.h:
        (WebKit::WebGPU::DeviceDescriptor::encode const):
        (WebKit::WebGPU::DeviceDescriptor::decode):
        * Shared/WebGPU/WebGPUError.h: Copied from Source/WebKit/Shared/WebGPU/WebGPUCommandEncoderDescriptor.h.
        * Shared/WebGPU/WebGPUExtent3D.h:
        (WebKit::WebGPU::Extent3DDict::encode const):
        (WebKit::WebGPU::Extent3DDict::decode):
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.h:
        (WebKit::WebGPU::ExternalTextureBindingLayout::encode const):
        (WebKit::WebGPU::ExternalTextureBindingLayout::decode):
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.h:
        (WebKit::WebGPU::ExternalTextureDescriptor::encode const):
        (WebKit::WebGPU::ExternalTextureDescriptor::decode):
        * Shared/WebGPU/WebGPUFragmentState.h:
        (WebKit::WebGPU::FragmentState::encode const):
        (WebKit::WebGPU::FragmentState::decode):
        * Shared/WebGPU/WebGPUImageCopyBuffer.h:
        (WebKit::WebGPU::ImageCopyBuffer::encode const):
        (WebKit::WebGPU::ImageCopyBuffer::decode):
        * Shared/WebGPU/WebGPUImageCopyExternalImage.h:
        (WebKit::WebGPU::ImageCopyExternalImage::encode const):
        (WebKit::WebGPU::ImageCopyExternalImage::decode):
        * Shared/WebGPU/WebGPUImageCopyTexture.h:
        (WebKit::WebGPU::ImageCopyTexture::encode const):
        (WebKit::WebGPU::ImageCopyTexture::decode):
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.h:
        (WebKit::WebGPU::ImageCopyTextureTagged::encode const):
        (WebKit::WebGPU::ImageCopyTextureTagged::decode):
        * Shared/WebGPU/WebGPUImageDataLayout.h:
        (WebKit::WebGPU::ImageDataLayout::encode const):
        (WebKit::WebGPU::ImageDataLayout::decode):
        * Shared/WebGPU/WebGPUMultisampleState.h:
        (WebKit::WebGPU::MultisampleState::encode const):
        (WebKit::WebGPU::MultisampleState::decode):
        * Shared/WebGPU/WebGPUObjectDescriptorBase.h:
        (WebKit::WebGPU::ObjectDescriptorBase::encode const):
        (WebKit::WebGPU::ObjectDescriptorBase::decode):
        * Shared/WebGPU/WebGPUOrigin2D.h:
        (WebKit::WebGPU::Origin2DDict::encode const):
        (WebKit::WebGPU::Origin2DDict::decode):
        * Shared/WebGPU/WebGPUOrigin3D.h:
        (WebKit::WebGPU::Origin3DDict::encode const):
        (WebKit::WebGPU::Origin3DDict::decode):
        * Shared/WebGPU/WebGPUOutOfMemoryError.h: Copied from Source/WebKit/Shared/WebGPU/WebGPUCommandBufferDescriptor.h.
        (WebKit::WebGPU::OutOfMemoryError::encode const):
        (WebKit::WebGPU::OutOfMemoryError::decode):
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.h:
        (WebKit::WebGPU::PipelineDescriptorBase::encode const):
        (WebKit::WebGPU::PipelineDescriptorBase::decode):
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h:
        (WebKit::WebGPU::PipelineLayoutDescriptor::encode const):
        (WebKit::WebGPU::PipelineLayoutDescriptor::decode):
        * Shared/WebGPU/WebGPUPrimitiveState.h:
        (WebKit::WebGPU::PrimitiveState::encode const):
        (WebKit::WebGPU::PrimitiveState::decode):
        * Shared/WebGPU/WebGPUProgrammableStage.h:
        (WebKit::WebGPU::ProgrammableStage::encode const):
        (WebKit::WebGPU::ProgrammableStage::decode):
        * Shared/WebGPU/WebGPUQuerySetDescriptor.h:
        (WebKit::WebGPU::QuerySetDescriptor::encode const):
        (WebKit::WebGPU::QuerySetDescriptor::decode):
        * Shared/WebGPU/WebGPURenderBundleDescriptor.h:
        (WebKit::WebGPU::RenderBundleDescriptor::encode const):
        (WebKit::WebGPU::RenderBundleDescriptor::decode):
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.h:
        (WebKit::WebGPU::RenderBundleEncoderDescriptor::encode const):
        (WebKit::WebGPU::RenderBundleEncoderDescriptor::decode):
        * Shared/WebGPU/WebGPURenderPassColorAttachment.h:
        (WebKit::WebGPU::RenderPassColorAttachment::encode const):
        (WebKit::WebGPU::RenderPassColorAttachment::decode):
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.h:
        (WebKit::WebGPU::RenderPassDepthStencilAttachment::encode const):
        (WebKit::WebGPU::RenderPassDepthStencilAttachment::decode):
        * Shared/WebGPU/WebGPURenderPassDescriptor.h:
        (WebKit::WebGPU::RenderPassDescriptor::encode const):
        (WebKit::WebGPU::RenderPassDescriptor::decode):
        * Shared/WebGPU/WebGPURenderPassLayout.h:
        (WebKit::WebGPU::RenderPassLayout::encode const):
        (WebKit::WebGPU::RenderPassLayout::decode):
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.h:
        (WebKit::WebGPU::RenderPassTimestampWrite::encode const):
        (WebKit::WebGPU::RenderPassTimestampWrite::decode):
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.h:
        (WebKit::WebGPU::RenderPipelineDescriptor::encode const):
        (WebKit::WebGPU::RenderPipelineDescriptor::decode):
        * Shared/WebGPU/WebGPURequestAdapterOptions.h:
        (WebKit::WebGPU::RequestAdapterOptions::encode const):
        (WebKit::WebGPU::RequestAdapterOptions::decode):
        * Shared/WebGPU/WebGPUSamplerBindingLayout.h:
        (WebKit::WebGPU::SamplerBindingLayout::encode const):
        (WebKit::WebGPU::SamplerBindingLayout::decode):
        * Shared/WebGPU/WebGPUSamplerDescriptor.h:
        (WebKit::WebGPU::SamplerDescriptor::encode const):
        (WebKit::WebGPU::SamplerDescriptor::decode):
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.h:
        (WebKit::WebGPU::ShaderModuleDescriptor::encode const):
        (WebKit::WebGPU::ShaderModuleDescriptor::decode):
        * Shared/WebGPU/WebGPUStencilFaceState.h:
        (WebKit::WebGPU::StencilFaceState::encode const):
        (WebKit::WebGPU::StencilFaceState::decode):
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.h:
        (WebKit::WebGPU::StorageTextureBindingLayout::encode const):
        (WebKit::WebGPU::StorageTextureBindingLayout::decode):
        * Shared/WebGPU/WebGPUSupportedFeatures.h: Copied from Source/WebKit/Shared/WebGPU/WebGPUColor.h.
        (WebKit::WebGPU::SupportedFeatures::encode const):
        (WebKit::WebGPU::SupportedFeatures::decode):
        * Shared/WebGPU/WebGPUSupportedLimits.h: Added.
        (WebKit::WebGPU::SupportedLimits::encode const):
        (WebKit::WebGPU::SupportedLimits::decode):
        * Shared/WebGPU/WebGPUTextureBindingLayout.h:
        (WebKit::WebGPU::TextureBindingLayout::encode const):
        (WebKit::WebGPU::TextureBindingLayout::decode):
        * Shared/WebGPU/WebGPUTextureDescriptor.h:
        (WebKit::WebGPU::TextureDescriptor::encode const):
        (WebKit::WebGPU::TextureDescriptor::decode):
        * Shared/WebGPU/WebGPUTextureViewDescriptor.h:
        (WebKit::WebGPU::TextureViewDescriptor::encode const):
        (WebKit::WebGPU::TextureViewDescriptor::decode):
        * Shared/WebGPU/WebGPUValidationError.h: Copied from Source/WebKit/Shared/WebGPU/WebGPUColor.h.
        (WebKit::WebGPU::ValidationError::encode const):
        (WebKit::WebGPU::ValidationError::decode):
        * Shared/WebGPU/WebGPUVertexAttribute.h:
        (WebKit::WebGPU::VertexAttribute::encode const):
        (WebKit::WebGPU::VertexAttribute::decode):
        * Shared/WebGPU/WebGPUVertexBufferLayout.h:
        (WebKit::WebGPU::VertexBufferLayout::encode const):
        (WebKit::WebGPU::VertexBufferLayout::decode):
        * Shared/WebGPU/WebGPUVertexState.h:
        (WebKit::WebGPU::VertexState::encode const):
        (WebKit::WebGPU::VertexState::decode):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.cpp:
        (WebKit::WebGPU::RemoteAdapterProxy::requestDevice):
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp:
        (WebKit::WebGPU::RemoteTextureProxy::createView):
        (WebKit::WebGPU::RemoteTextureProxy::createView const): Deleted.
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h:

2021-11-17  Alex Christensen  <achristensen@webkit.org>

        Implement most of redirect and modify-headers action types
        https://bugs.webkit.org/show_bug.cgi?id=233268

        Reviewed by Tim Hatcher.

        * Shared/WebsitePoliciesData.cpp:
        (WebKit::WebsitePoliciesData::encode const):
        (WebKit::WebsitePoliciesData::decode):
        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
        * Shared/WebsitePoliciesData.h:
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::compileContentRuleList):
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::data):
        (API::WebsitePolicies::~WebsitePolicies): Deleted.
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreCompile):
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (-[WKContentRuleListStore compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]):
        (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:allowedRedirectSchemes:completionHandler:]):
        (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _setActiveContentRuleListActionsPatterns:]):
        (-[WKWebpagePreferences _activeContentRuleListActionsPatterns]):
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::remove):
        Fix a regression from https://trac.webkit.org/changeset/276193/webkit
        When fetching a resource with a forbidden port and a custom scheme and {mode:"no-cors"},
        WebLoaderStrategy::remove is called with a resource that doesn't have an identifier.
        My test hit this, so I moved the check to before the identifier is used.

2021-11-17  Tim Horton  <timothy_horton@apple.com>

        Unified source build fix

        * Shared/GPUProcessConnectionParameters.h:

2021-11-17  Per Arne Vollan  <pvollan@apple.com>

        [macOS][GPUP] Add access to logging service for root
        https://bugs.webkit.org/show_bug.cgi?id=233300
        <rdar://85529760>

        Reviewed by Brent Fulgham.

        Access to logging service is required for root in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-17  Cameron McCormack  <heycam@apple.com>

        Protect against null SharedBitmaps when starting a drag
        https://bugs.webkit.org/show_bug.cgi?id=233217
        <rdar://problem/85478309>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startDrag):

2021-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Plumb an identifier string through `ChromeClient::requestTextRecognition()`
        https://bugs.webkit.org/show_bug.cgi?id=233210

        Reviewed by Dean Jackson.

        Add an optional (i.e. null-by-default) identifier string to the `requestTextRecognition()` WebKit client hook,
        and call into a new helper function in TextRecognitionUtilities.h, that's implemented in WebKitAdditions (with
        an empty stub in open source code).

        See corresponding radar for more information.

        * Platform/cocoa/TextRecognitionUtilities.h:
        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::requestImageAnalysisWithIdentifier):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::requestTextRecognition):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::requestTextRecognition):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestTextRecognition):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestTextRecognition):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestTextRecognition:imageData:identifier:completionHandler:]):
        (-[WKContentView requestTextRecognition:imageData:completionHandler:]): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestTextRecognition):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestTextRecognition):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestTextRecognition):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::requestTextRecognition):

2021-11-17  John Wilander  <wilander@apple.com>

        PCM: Add capability for click destination to fire triggering event without cross-site requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=233173
        <rdar://79426605>

        Reviewed by Alex Christensen.

        This patch enables click destination sites a non-JavaScript way to fire triggering
        events without a requirement to make cross-site requests to source sites. This is
        referred to as a "same-site pixel API" and has been discussed in W3C Privacy CG:
        https://github.com/privacycg/private-click-measurement/issues/71

        The reason why some merchants want such an "API" is reluctance to deploy new
        JavaScript on their sites. In some industries it's even a compliance issue. Legacy
        "pixels" are however accepted and so a same-site "pixel" can work for them.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::insertPrivateClickMeasurement):
            These changes are just a correction of a function name:
            - sourceUnlinkableToken() to sourceSecretToken()
            Note that it was always the secret token used, just bad renaming earlier.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
            Now checks if the incoming WebCore::PrivateClickMeasurement::AttributionTriggerData
            carries a sourceRegistrableDomain. If so, it accepts that domain as the source site
            for attribution if the triggering event was same-site as the first-party.
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
            These changes are just a correction of a function name:
            - sourceUnlinkableToken() to sourceSecretToken()
            Note that it was always the secret token used, just bad renaming earlier.
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
            These changes are because of clarification in naming:
            - attributionReportSourceURL to attributionReportClickSourceURL
            - attributionReportAttributeOnURL to attributionReportClickDestinationURL
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:

2021-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a Translation WebKit2 logging category
        https://bugs.webkit.org/show_bug.cgi?id=233286

        Reviewed by Tim Horton.

        Add the new category.

        * Platform/Logging.h:

2021-11-17  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add SPI for makeCredential / getAssertion using clientDataHash
        https://bugs.webkit.org/show_bug.cgi?id=233216
        <rdar://problem/85476386>

        Reviewed by Brent Fulgham.

        In order to avoid needing to make and coordinate changes to ASC to support new fields or changes
        within ClientDataJSON and to maintain a single source of truth, calls to ASC from WebKit
        will contain a precomputed ClientDataHash. This change creates new SPIs that will be called
        from ASC using the ClientDataHash.

        * UIProcess/API/Cocoa/_WKAuthenticatorResponse.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel makeCredentialWithClientDataHash:options:completionHandler:]):
        (-[_WKWebAuthenticationPanel getAssertionWithClientDataHash:options:completionHandler:]):
        New functions to take in ClientDataHash instead of the data needed to construct it.

2021-11-17  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add message filter guard in the GPU process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=233282
        <rdar://85514428>

        Reviewed by Brent Fulgham.

        Add message filter guard in the GPU process' sandbox.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-17  Tim Horton  <timothy_horton@apple.com>

        Momentum animator sometimes starts the animation at a very high velocity
        https://bugs.webkit.org/show_bug.cgi?id=233245
        <rdar://problem/85307115>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        Ensure that wheel events always have velocities attached, even for
        events that don't go through the delta filter.

2021-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper class to coordinate batch analysis of images
        https://bugs.webkit.org/show_bug.cgi?id=233075

        Reviewed by Dean Jackson.

        Add a couple of WKWebView SPI methods to kick off (and cancel) batch image analysis for mainframe content.
        See WebCore ChangeLog for more details.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _startImageAnalysis:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startImageAnalysis):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::startImageAnalysis):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-11-17  Dean Jackson  <dino@apple.com>

        Add ModelDocument for directly showing content that can be handled by <model>
        https://bugs.webkit.org/show_bug.cgi?id=233057
        rdar://85265880

        Reviewed by Darin Adler.

        We don't need to use WKUSDPreviewView if we have ModelDocument.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):

2021-11-17  Antoine Quint  <graouts@webkit.org>

        [Model] Create iOS ModelPlayer implementation
        https://bugs.webkit.org/show_bug.cgi?id=233192

        Reviewed by Dean Jackson.

        Bug 232848 factored platform-specific code out of HTMLModelElement with the use of a new ModelPlayer
        abstraction with a concrete ARKitInlinePreviewModelPlayer implementation. This first patch moved the
        macOS code, and this patch moves the remaining iOS code.

        To do so we make ARKitInlinePreviewModelPlayer a parent class of two platform-specific subclasses:
        ARKitInlinePreviewModelPlayerMac and ARKitInlinePreviewModelPlayerIOS. We add a new enterFullscreen()
        method to ModelPlayer, with an implementation in the iOS subclass. To support this new method, we
        add a new platformLayerID() on ModelPlayerClient.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.h: Added.
        (WebKit::ARKitInlinePreviewModelPlayer::page):
        (WebKit::ARKitInlinePreviewModelPlayer::client):
        * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm: Added.
        (WebKit::ARKitInlinePreviewModelPlayer::ARKitInlinePreviewModelPlayer):
        (WebKit::ARKitInlinePreviewModelPlayer::~ARKitInlinePreviewModelPlayer):
        (WebKit::ARKitInlinePreviewModelPlayer::load):
        (WebKit::ARKitInlinePreviewModelPlayer::layer):
        (WebKit::ARKitInlinePreviewModelPlayer::enterFullscreen):
        * WebProcess/Model/WebModelPlayerProvider.cpp:
        (WebKit::WebModelPlayerProvider::createModelPlayer):
        * WebProcess/Model/WebModelPlayerProvider.h:
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h: Added.
        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm: Added.
        (WebKit::ARKitInlinePreviewModelPlayerIOS::create):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::ARKitInlinePreviewModelPlayerIOS):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::~ARKitInlinePreviewModelPlayerIOS):
        (WebKit::ARKitInlinePreviewModelPlayerIOS::enterFullscreen):
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h: Renamed from Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayer.h.
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm: Renamed from Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayer.mm.
        (WebKit::ARKitInlinePreviewModelPlayerMac::create):
        (WebKit::ARKitInlinePreviewModelPlayerMac::ARKitInlinePreviewModelPlayerMac):
        (WebKit::ARKitInlinePreviewModelPlayerMac::~ARKitInlinePreviewModelPlayerMac):
        (WebKit::ARKitInlinePreviewModelPlayerMac::setModelElementCacheDirectory):
        (WebKit::ARKitInlinePreviewModelPlayerMac::createFile):
        (WebKit::ARKitInlinePreviewModelPlayerMac::clearFile):
        (WebKit::ARKitInlinePreviewModelPlayerMac::load):
        (WebKit::ARKitInlinePreviewModelPlayerMac::layer):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):

2021-11-17  Zixing Liu  <liushuyu011@gmail.com>

        [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers
        https://bugs.webkit.org/show_bug.cgi?id=203273

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_get_http_headers): Added new API function
        (webkitURISchemeRequestReadCallback): Include user-specified headers
        * UIProcess/API/glib/WebKitURISchemeResponse.cpp:
        (WebKitURISchemeResponseGetHeaders): Added a new private getter
        (webkit_uri_scheme_response_set_http_headers): Added new API function
        * UIProcess/API/glib/WebKitURISchemeResponsePrivate.h:
        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Added function prototype for 
        webkit_uri_scheme_request_get_http_headers
        * UIProcess/API/gtk/WebKitURISchemeResponse.h: Added function prototype for 
        webkit_uri_scheme_request_set_http_headers
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new symbols
        * UIProcess/API/wpe/WebKitURISchemeRequest.h: Added function prototype for 
        webkit_uri_scheme_request_get_http_headers
        * UIProcess/API/wpe/WebKitURISchemeResponse.h: Added function prototype for 
        webkit_uri_scheme_request_set_http_headers
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Added new symbols

2021-11-16  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, fix WinCairo build following r285881.

        * CMakeLists.txt:
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h:

2021-11-16  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemFileHandle.getFile()
        https://bugs.webkit.org/show_bug.cgi?id=232716
        <rdar://problem/85022453>

        Reviewed by Youenn Fablet.

        Let web process send message to network process for file path.

        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::getFile):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::getFile):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-11-16  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add sandbox telemetry for preference access
        https://bugs.webkit.org/show_bug.cgi?id=233194

        Reviewed by Brent Fulgham.

        Add sandbox telemetry for preference access on macOS.

        * Shared/Sandbox/preferences.sb:

2021-11-16  Devin Rousso  <drousso@apple.com>

        [iOS] use PhotosUIPrivate instead of PhotosUI
        https://bugs.webkit.org/show_bug.cgi?id=233213
        <rdar://problem/85300427>

        Reviewed by Aditya Keerthi.

        * Platform/spi/ios/PhotosUISPI.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:

2021-11-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Reduce telemetry
        https://bugs.webkit.org/show_bug.cgi?id=233218

        Reviewed by Brent Fulgham.

        Reduce telemetry with backtrace for the system calls we have information about.

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

2021-11-16  Devin Rousso  <drousso@apple.com>

        [Apple Pay] handle unknown setup features
        https://bugs.webkit.org/show_bug.cgi?id=233212

        Reviewed by Wenson Hsieh.

        * Shared/ApplePay/ApplePayPaymentSetupFeatures.mm:
        (WebKit::PaymentSetupFeatures::operator Vector<Ref<WebCore::ApplePaySetupFeature>> const):
        Skip `PKPaymentSetupFeature` that have an unknown `PKPaymentSetupFeatureType`. This ensures
        that `WebCore::ApplePaySetupFeature` will only ever be created with known/supported `PKPaymentSetupFeatureType`.

2021-11-16  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Add overscroll behavior to ScrollableAreaParameters
        https://bugs.webkit.org/show_bug.cgi?id=233159

        Reviewed by Simon Fraser.

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

2021-11-16  Per Arne Vollan  <pvollan@apple.com>

        Adjust graphics related message filter
        https://bugs.webkit.org/show_bug.cgi?id=233151
        <rdar://problem/85430575>

        Reviewed by Brent Fulgham.

        Adjust graphics related message filter in the WebContent process' sandbox on iOS. This patch unifies
        the filter for different OS versions.

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

2021-11-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Limit graphics related IOKit method filtering
        https://bugs.webkit.org/show_bug.cgi?id=233209
        <rdar://problem/85473581>

        Reviewed by Brent Fulgham.

        Limit graphics related IOKit method filtering based on OS version. This patch also adds an entitlement which
        will enable a replacement for the disabled filtering.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * Scripts/process-entitlements.sh:

2021-11-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Start preparing for serializing commands to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=233179

        Reviewed by Alex Christensen.

        The interaction between WebGPU and the GPU process will work as such:

        1. We have a virtual interface in PAL which holds 3 things:
               a) Refcounted objects (command buffer, queue, device, etc.).
               b) Structs holding descriptors for commands. E.g. device.createRenderPipeline(RenderPipelineDescriptor)
               c) Enums
           The virtual interface holds all 3 of these things. For refcounted objects, it holds virtual interfaces with no
           implementations. (There is one implementation of these interfaces which connects them to WebGPU.framework.)
        2. This patch adds a new implementation of these virtual interfaces, called Remote***Proxy, in
           WebKit/WebProcess/GPU/graphics/WebGPU. The implementation of all the methods in this implementation will simply
           send messages to the GPU process. In this patch, these methods are still stubs - they'll be filled in in a
           subsequent patch.
        3. The arguments to the commands consist of the structs and enums from PAL. However, we can't use the structs
           directly, because the structs hold references to the refcounted objects. E.g. a BindGroupDescriptor holds a
           reference to the Buffer which should be part of the bind group. We can't send refcounted objects across IPC,
           so instead of sending the objects, we send a WebGPUIdentifier instead. Every refcounted object gets a unique
           WebGPU identifier. However, because these references to RefCounted objects are buried deep inside nested structs,
           we can't simply use the structs out of the box. Instead, we have to have a parallel set of structs, where the
           references are replaced with WebGPUIdentifiers. These structs will be the ones actually sent across the wire.
        4. The enums don't have this problem, so those are untouched. A subsequent patch will be adding the EnumTraits
           directly in PAL to make them serializable.
        5. Upon receiving a struct from the wire, we're going to have to convert it back into its corresponding PAL type,
           which means we have to find the object associated with the WebGPUIdentifier. The serializers themselves can't do
           this, because they lack the context necessary for performing the lookup. This patch adds two new context objects
           which we'll use ourselves when implementing our own conversions - ConvertToBackingContext and
           ConvertFromBackingContext. Only the first one is implemented in this patch; the second will be implemented in a
           subsequent patch.
        6. The GPU process side won't actually implement the virtual interface - only the web process side will implement it.
           Instead, the GPU process has to manage lifetime of the objects. Just like how 2D canvas in the GPU process has
           a RemoteResourceCache, the WebGPU objects will be owned by a high-level object in the GPU process. The
           ownership will be top-down in the GPU process, where Devices have strong references to Textures, and Textures
           have strong references to TextureViews. On the other hand, in the Web process, ownership will be bottom-up:
           JavaScript will have strong references to TextureViews, TextureViews will have strong references to Textures, and
           Textures will have strong references to Devices. This works out quite nicely - it means that, when GC runs and
           a TextureView gets deleted, the TextureView tells its owner that it's getting destroyed, its owner sends a
           message to the GPU process, and the corresponding owner in the GPU process looks up its relevant child in its
           children list, and delete it. Easy peasy.

        No new tests because there is no behavior change (yet). We're getting close, though!

        * Shared/WebGPU/WebGPUBindGroupDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBindGroupDescriptor.h.
        * Shared/WebGPU/WebGPUBindGroupEntry.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassColorAttachment.h.
        * Shared/WebGPU/WebGPUBindGroupLayoutDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUBindGroupLayoutEntry.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUBlendComponent.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUBlendState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUBufferBinding.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUBufferBindingLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUBufferDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUCanvasConfiguration.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyTexture.h.
        * Shared/WebGPU/WebGPUColor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUColorTargetState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUCommandBufferDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUCommandEncoderDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUComputePassDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUComputePassTimestampWrites.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUComputePassTimestampWrites.h.
        * Shared/WebGPU/WebGPUComputePipelineDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUConvertFromBackingContext.h: Added.
        * Shared/WebGPU/WebGPUConvertToBackingContext.h: Added.
        * Shared/WebGPU/WebGPUDepthStencilState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUDeviceDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBindGroupDescriptor.h.
        * Shared/WebGPU/WebGPUExtent3D.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassTimestampWrites.h.
        * Shared/WebGPU/WebGPUExternalTextureBindingLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUExternalTextureDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUFragmentState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUIdentifier.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUImageCopyBuffer.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUImageCopyExternalImage.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUImageCopyTexture.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyTexture.h.
        * Shared/WebGPU/WebGPUImageCopyTextureTagged.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUImageDataLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUMultisampleState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUObjectDescriptorBase.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUOrigin2D.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPUOrigin3D.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPUPipelineDescriptorBase.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUPipelineLayoutDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPUPrimitiveState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUProgrammableStage.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUProgrammableStage.h.
        * Shared/WebGPU/WebGPUQuerySetDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBindGroupDescriptor.h.
        * Shared/WebGPU/WebGPURenderBundleDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPURenderBundleEncoderDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPURenderPassColorAttachment.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassColorAttachment.h.
        * Shared/WebGPU/WebGPURenderPassDepthStencilAttachment.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        * Shared/WebGPU/WebGPURenderPassDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPURenderPassLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPURenderPassTimestampWrites.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassTimestampWrites.h.
        * Shared/WebGPU/WebGPURenderPipelineDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPURequestAdapterOptions.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Shared/WebGPU/WebGPUSamplerBindingLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUSamplerDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUShaderModuleDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUStencilFaceState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUStorageTextureBindingLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUTextureBindingLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUTextureDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUTextureViewDescriptor.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineDescriptorBase.h.
        * Shared/WebGPU/WebGPUVertexAttribute.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUImageCopyBuffer.h.
        * Shared/WebGPU/WebGPUVertexBufferLayout.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUPipelineLayoutDescriptor.h.
        * Shared/WebGPU/WebGPUVertexState.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUBufferBinding.h.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteAdapterProxy::RemoteAdapterProxy):
        (WebKit::WebGPU::RemoteAdapterProxy::~RemoteAdapterProxy):
        (WebKit::WebGPU::RemoteAdapterProxy::requestDevice):
        * WebProcess/GPU/graphics/WebGPU/RemoteAdapterProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteBindGroupLayoutProxy::RemoteBindGroupLayoutProxy):
        (WebKit::WebGPU::RemoteBindGroupLayoutProxy::~RemoteBindGroupLayoutProxy):
        (WebKit::WebGPU::RemoteBindGroupLayoutProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteBindGroupProxy::RemoteBindGroupProxy):
        (WebKit::WebGPU::RemoteBindGroupProxy::~RemoteBindGroupProxy):
        (WebKit::WebGPU::RemoteBindGroupProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBindGroupProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteBufferProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteBufferProxy::RemoteBufferProxy):
        (WebKit::WebGPU::RemoteBufferProxy::~RemoteBufferProxy):
        (WebKit::WebGPU::RemoteBufferProxy::mapAsync):
        (WebKit::WebGPU::RemoteBufferProxy::getMappedRange):
        (WebKit::WebGPU::RemoteBufferProxy::unmap):
        (WebKit::WebGPU::RemoteBufferProxy::destroy):
        (WebKit::WebGPU::RemoteBufferProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteBufferProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandBufferProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteCommandBufferProxy::RemoteCommandBufferProxy):
        (WebKit::WebGPU::RemoteCommandBufferProxy::~RemoteCommandBufferProxy):
        (WebKit::WebGPU::RemoteCommandBufferProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandBufferProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandEncoderProxy.cpp: Added.
        (WebKit::WebGPU::RemoteCommandEncoderProxy::RemoteCommandEncoderProxy):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::~RemoteCommandEncoderProxy):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::beginRenderPass):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::beginComputePass):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyBufferToBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyBufferToTexture):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyTextureToBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::copyTextureToTexture):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::fillBuffer):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::writeTimestamp):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::resolveQuerySet):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::finish):
        (WebKit::WebGPU::RemoteCommandEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteCommandEncoderProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.cpp: Added.
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::RemoteComputePassEncoderProxy):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::~RemoteComputePassEncoderProxy):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::dispatch):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::dispatchIndirect):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::beginPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::endPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::endPass):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteComputePassEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteComputePipelineProxy::RemoteComputePipelineProxy):
        (WebKit::WebGPU::RemoteComputePipelineProxy::~RemoteComputePipelineProxy):
        (WebKit::WebGPU::RemoteComputePipelineProxy::getBindGroupLayout):
        (WebKit::WebGPU::RemoteComputePipelineProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp: Added.
        (WebKit::WebGPU::RemoteDeviceProxy::RemoteDeviceProxy):
        (WebKit::WebGPU::RemoteDeviceProxy::~RemoteDeviceProxy):
        (WebKit::WebGPU::RemoteDeviceProxy::destroy):
        (WebKit::WebGPU::RemoteDeviceProxy::createBuffer):
        (WebKit::WebGPU::RemoteDeviceProxy::createTexture):
        (WebKit::WebGPU::RemoteDeviceProxy::createSampler):
        (WebKit::WebGPU::RemoteDeviceProxy::importExternalTexture):
        (WebKit::WebGPU::RemoteDeviceProxy::createBindGroupLayout):
        (WebKit::WebGPU::RemoteDeviceProxy::createPipelineLayout):
        (WebKit::WebGPU::RemoteDeviceProxy::createBindGroup):
        (WebKit::WebGPU::RemoteDeviceProxy::createShaderModule):
        (WebKit::WebGPU::RemoteDeviceProxy::createComputePipeline):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderPipeline):
        (WebKit::WebGPU::RemoteDeviceProxy::createComputePipelineAsync):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderPipelineAsync):
        (WebKit::WebGPU::RemoteDeviceProxy::createCommandEncoder):
        (WebKit::WebGPU::RemoteDeviceProxy::createRenderBundleEncoder):
        (WebKit::WebGPU::RemoteDeviceProxy::createQuerySet):
        (WebKit::WebGPU::RemoteDeviceProxy::pushErrorScope):
        (WebKit::WebGPU::RemoteDeviceProxy::popErrorScope):
        (WebKit::WebGPU::RemoteDeviceProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteExternalTextureProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteExternalTextureProxy::RemoteExternalTextureProxy):
        (WebKit::WebGPU::RemoteExternalTextureProxy::~RemoteExternalTextureProxy):
        (WebKit::WebGPU::RemoteExternalTextureProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteExternalTextureProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteGPUProxy::RemoteGPUProxy):
        (WebKit::WebGPU::RemoteGPUProxy::~RemoteGPUProxy):
        (WebKit::WebGPU::RemoteGPUProxy::requestAdapter):
        * WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemotePipelineLayoutProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemotePipelineLayoutProxy::RemotePipelineLayoutProxy):
        (WebKit::WebGPU::RemotePipelineLayoutProxy::~RemotePipelineLayoutProxy):
        (WebKit::WebGPU::RemotePipelineLayoutProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemotePipelineLayoutProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteQuerySetProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteQuerySetProxy::RemoteQuerySetProxy):
        (WebKit::WebGPU::RemoteQuerySetProxy::~RemoteQuerySetProxy):
        (WebKit::WebGPU::RemoteQuerySetProxy::destroy):
        (WebKit::WebGPU::RemoteQuerySetProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteQuerySetProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteQueueProxy.cpp: Added.
        (WebKit::WebGPU::RemoteQueueProxy::RemoteQueueProxy):
        (WebKit::WebGPU::RemoteQueueProxy::~RemoteQueueProxy):
        (WebKit::WebGPU::RemoteQueueProxy::submit):
        (WebKit::WebGPU::RemoteQueueProxy::onSubmittedWorkDone):
        (WebKit::WebGPU::RemoteQueueProxy::writeBuffer):
        (WebKit::WebGPU::RemoteQueueProxy::writeTexture):
        (WebKit::WebGPU::RemoteQueueProxy::copyExternalImageToTexture):
        (WebKit::WebGPU::RemoteQueueProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteQueueProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.cpp: Added.
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::RemoteRenderBundleEncoderProxy):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::~RemoteRenderBundleEncoderProxy):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setIndexBuffer):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setVertexBuffer):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::draw):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndexed):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndirect):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::drawIndexedIndirect):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::finish):
        (WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteRenderBundleProxy::RemoteRenderBundleProxy):
        (WebKit::WebGPU::RemoteRenderBundleProxy::~RemoteRenderBundleProxy):
        (WebKit::WebGPU::RemoteRenderBundleProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.cpp: Added.
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::RemoteRenderPassEncoderProxy):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::~RemoteRenderPassEncoderProxy):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setPipeline):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setIndexBuffer):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setVertexBuffer):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::draw):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndexed):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndirect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::drawIndexedIndirect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setBindGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::pushDebugGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::popDebugGroup):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::insertDebugMarker):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setViewport):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setScissorRect):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setBlendConstant):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setStencilReference):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::beginOcclusionQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endOcclusionQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::beginPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endPipelineStatisticsQuery):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::executeBundles):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::endPass):
        (WebKit::WebGPU::RemoteRenderPassEncoderProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.h: Added.
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteRenderPipelineProxy::RemoteRenderPipelineProxy):
        (WebKit::WebGPU::RemoteRenderPipelineProxy::~RemoteRenderPipelineProxy):
        (WebKit::WebGPU::RemoteRenderPipelineProxy::getBindGroupLayout):
        (WebKit::WebGPU::RemoteRenderPipelineProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteSamplerProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUProgrammableStage.h.
        (WebKit::WebGPU::RemoteSamplerProxy::RemoteSamplerProxy):
        (WebKit::WebGPU::RemoteSamplerProxy::~RemoteSamplerProxy):
        (WebKit::WebGPU::RemoteSamplerProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteSamplerProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteShaderModuleProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteShaderModuleProxy::RemoteShaderModuleProxy):
        (WebKit::WebGPU::RemoteShaderModuleProxy::~RemoteShaderModuleProxy):
        (WebKit::WebGPU::RemoteShaderModuleProxy::compilationInfo):
        (WebKit::WebGPU::RemoteShaderModuleProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteShaderModuleProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteTextureProxy::RemoteTextureProxy):
        (WebKit::WebGPU::RemoteTextureProxy::~RemoteTextureProxy):
        (WebKit::WebGPU::RemoteTextureProxy::createView const):
        (WebKit::WebGPU::RemoteTextureProxy::destroy):
        (WebKit::WebGPU::RemoteTextureProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureViewProxy.cpp: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/WebGPURenderPassDepthStencilAttachment.h.
        (WebKit::WebGPU::RemoteTextureViewProxy::RemoteTextureViewProxy):
        (WebKit::WebGPU::RemoteTextureViewProxy::~RemoteTextureViewProxy):
        (WebKit::WebGPU::RemoteTextureViewProxy::setLabelInternal):
        * WebProcess/GPU/graphics/WebGPU/RemoteTextureViewProxy.h: Copied from Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUAdapterImpl.h.
        * WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.cpp: Added.
        (WebKit::WebGPU::DowncastConvertToBackingContext::convertToBacking):
        * WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.h: Added.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:

2021-11-16  Per Arne Vollan  <pvollan@apple.com>

        Adjust graphics related message filter
        https://bugs.webkit.org/show_bug.cgi?id=233151
        <rdar://problem/85430575>

        Reviewed by Brent Fulgham.

        Adjust graphics related message filter in the WebContent process' sandbox on iOS. This patch unifies
        the filter for different OS versions.

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

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

2021-11-16  Chris Dumez  <cdumez@apple.com>

        Crash under WebKit::WebPageProxy::commitProvisionalPage()
        https://bugs.webkit.org/show_bug.cgi?id=233199
        <rdar://57659921>

        Reviewed by Youenn Fablet.

        In the event where the committed WebProcess would crash while a cross-site provisional load
        is going on in a provisional page / WebProcess, we would do a null dereference of the page's
        drawing area when trying to commit the provisional page later on. We would also hit various
        assertions in debug since the page's state gets completely reset when its WebProcess crashes.

        To address the issue, we now clear the provisional page if the page's WebProcess crashes.

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

2021-11-16  Chris Dumez  <cdumez@apple.com>

        [iOS] Do not require the web browser entitlement to opt into captive portal mode
        https://bugs.webkit.org/show_bug.cgi?id=233191

        Reviewed by Brent Fulgham.

        Do not require the web browser entitlement to opt into captive portal mode on iOS, only require
        it to opt out.

        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _setCaptivePortalModeEnabled:]):

2021-11-16  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Add telemetry for syscalls
        https://bugs.webkit.org/show_bug.cgi?id=232888
        <rdar://problem/85207011>

        Reviewed by Brent Fulgham.

        Add more telemetry for syscalls in the GPU process' sandbox on macOS. Also add entitlement for the GPU
        process to use message filtering.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Scripts/process-entitlements.sh:

2021-11-16  Chris Dumez  <cdumez@apple.com>

        Decoder::unwrapForTesting() is unnecessarily inefficient
        https://bugs.webkit.org/show_bug.cgi?id=233145

        Reviewed by Darin Adler.

        Decoder::unwrapForTesting() is unnecessarily inefficient. It can take the whole
        m_attachments data members from the decoder instead of calling removeAttachment()
        repeatedly on the Decoder.

        Also rename removeAttachment() to takeAttachment() since it returns the Attachment.
        Update it to return a std::optional<Attachment> instead of using an out-parameter.

        * Platform/IPC/Attachment.cpp:
        (IPC::Attachment::decode):
        * Platform/IPC/Attachment.h:
        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::unwrapForTesting):
        (IPC::Decoder::takeAttachment):
        (IPC::Decoder::removeAttachment): Deleted.
        * Platform/IPC/Decoder.h:
        * Platform/IPC/win/AttachmentWin.cpp:
        (IPC::Attachment::decode):

2021-11-16  Chris Dumez  <cdumez@apple.com>

        Do some hardening in IPC::createMessageDecoder()
        https://bugs.webkit.org/show_bug.cgi?id=233148
        <rdar://75139294>

        Reviewed by Darin Adler.

        Do more bound validation insde createMessageDecoder() to make sure we stay within
        the bounds of our ReceiveBuffer.

        Also, when the body is out of line, set `out_of_line.deallocate` to false since
        we are taking ownership of the memory and will vm_deallocate() it ourselves.
        Normally the sender (Connection::sendOutgoingMessage) sets that flag to false but
        it is better not to rely on the sender setting a particular flag.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::createMessageDecoder):
        (IPC::Connection::receiveSourceEventHandler):

2021-11-16  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] WebKitTestRunner/TWAPI lacks an entitlement and bundle identifier to use required [ASCAgent performAuthorizationRequestsForContext]
        https://bugs.webkit.org/show_bug.cgi?id=232846
        rdar://problem/85170633

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        Calling to ASC requires converting WebAuthenticationRequestData to ASCCredentialRequestContext and then making
        a call to _WKAuthenticatorAssertionResponse, while also requiring entitlements currently unavailable in OpenSource.
        This change avoids calling out to ASC in tests using mock / virtual authenticators to avoid this problem, the
        serialization to and from ASCAgent can be tested seperately.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        Refactor creation of ASCCredentialRequestContext.
        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        Refactor use of ASC and add clarifying comment about flow.

2021-11-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteGraphicsContextGLCocoa::m_swapChain is unused
        https://bugs.webkit.org/show_bug.cgi?id=233176

        Reviewed by Antti Koivisto.

        Remove the unused variable.

        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:

2021-11-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285812.
        https://bugs.webkit.org/show_bug.cgi?id=233162

        Introduced test failures

        Reverted changeset:

        "[macOS][GPUP] Add telemetry for syscalls"
        https://bugs.webkit.org/show_bug.cgi?id=232888
        https://commits.webkit.org/r285812

2021-11-15  Sam Weinig  <weinig@apple.com>

        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
        https://bugs.webkit.org/show_bug.cgi?id=233112

        Reviewed by Dean Jackson.

        Add support for instantiating the new SceneKit backed ModelPlayer.

        If both ARKit based ModelPlayer and SceneKit based ModelPlayer are enabled,
        the ARKit one wins.

        * WebProcess/Model/WebModelPlayerProvider.cpp:
        (WebKit::WebModelPlayerProvider::createModelPlayer):
        Add support for creating a SceneKit based ModelPlayer and add checks
        for whether the backend is enabled.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::useARKitForModel const):
        (WebKit::WebPage::useSceneKitForModel const):
        Add bits to store which <model> backends are enabled.

2021-11-15  Eric Liang  <ericliang@apple.com>

        _AXSCopyPathForAccessibilityBundle is going to be deprecated.
        https://bugs.webkit.org/show_bug.cgi?id=233081

        Reviewed by Andres Gonzalez.

        To support macOS Accessibility v2 runtime, on macOS there are two places where bundles can live. By doing so, `_AXSCopyPathForAccessibilityBundle` will going to be deprecated because it won’t always return the correct path you would expect.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::webProcessLoaderAccessibilityBundlePath):

2021-11-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        Make valgrind work properly without extra environment variables
        https://bugs.webkit.org/show_bug.cgi?id=230460

        Reviewed by Carlos Garcia Campos.

        WebKitGTK and WPE WebKit users also have to set the WEBKIT_FORCE_SANDBOX=0 environment
        variable, because the web process sandbox breaks valgrind for some reason I never attempted
        to understand. If we have bmalloc expose valgrind.h as a public header, then we can check
        for valgrind in higher layers and make this work automatically too.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2021-11-15  Chris Dumez  <cdumez@apple.com>

        Remove some dead code from IPC::Encoder / IPC::Decoder
        https://bugs.webkit.org/show_bug.cgi?id=233134

        Reviewed by Sam Weinig.

        Remove some dead code from IPC::Encoder / IPC::Decoder and make sure both
        types are non-copyable / non-movable.

        * Platform/IPC/Decoder.cpp:
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::decodeSingleObject): Deleted.
        (): Deleted.
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::Encoder):
        * Platform/IPC/Encoder.h:

2021-11-15  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Add telemetry for syscalls
        https://bugs.webkit.org/show_bug.cgi?id=232888
        <rdar://problem/85207011>

        Reviewed by Brent Fulgham.

        Add more telemetry for syscalls in the GPU process' sandbox on macOS. Also add entitlement for the GPU
        process to use message filtering.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Scripts/process-entitlements.sh:

2021-11-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285774.
        https://bugs.webkit.org/show_bug.cgi?id=233136

        Introduced GPUP crash on some configurations

        Reverted changeset:

        "[macOS][GPUP] Add telemetry for syscalls"
        https://bugs.webkit.org/show_bug.cgi?id=232888
        https://commits.webkit.org/r285774

2021-11-14  Brady Eidson  <beidson@apple.com>

        Get daemon API ready to work in the iOS simulator (starting with WebPushD)
        https://bugs.webkit.org/show_bug.cgi?id=232982

        Reviewed by Geoff Garen.

        Move all the "enable Notifications" SPI from Mac-only to cross platform:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setNotificationsEnabled:]):
        (-[WKPreferences _notificationsEnabled]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest):

        * WebKit.xcodeproj/project.pbxproj: Add a build phase script to install the daemon executables
          inside a Daemons directory within the built WebKit.framework for engineering builds.
        * webpushd/WebPushDaemon.mm:

2021-11-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GraphicsLayerWC] Incorrect compositing debug border color
        https://bugs.webkit.org/show_bug.cgi?id=233107

        Reviewed by Don Olmstead.

        GraphicsLayer::updateDebugIndicators() should be called after
        changing some layer properties.

        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp:
        (WebKit::GraphicsLayerWC::setMasksToBounds):
        (WebKit::GraphicsLayerWC::setDrawsContent):
        (WebKit::GraphicsLayerWC::setContentsToPlatformLayer):
        (WebKit::GraphicsLayerWC::setBackdropFilters):
        Call updateDebugIndicators.

2021-11-14  Simon Fraser  <simon.fraser@apple.com>

        Attach IOHIDEvent timestamps to wheel events
        https://bugs.webkit.org/show_bug.cgi?id=233051

        Reviewed by Wenson Hsieh.
        
        On some macOS devices, there can be significant deltas between NSEvent timestamps,
        and the timestamps on underlying IOHIDEvents (rdar://85309639). This makes momentum
        velocity computation unpredictable; we can get better results by using IOHIDEvent
        timestamps.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode const):
        (WebKit::WebWheelEvent::decode):
        * Shared/WebWheelEvent.h:
        (WebKit::WebWheelEvent::ioHIDEventTimestamp const):
        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::coalesce):
        * Shared/ios/WebIOSEventFactory.mm:
        (WebIOSEventFactory::createWebWheelEvent):
        * Shared/mac/NativeWebGestureEventMac.mm:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2021-11-13  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove logging of used syscalls
        https://bugs.webkit.org/show_bug.cgi?id=232839
        <rdar://problem/85168823>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove logging of used unix syscalls in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-13  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Add telemetry for syscalls
        https://bugs.webkit.org/show_bug.cgi?id=232888
        <rdar://problem/85207011>

        Reviewed by Brent Fulgham.

        Add more telemetry for syscalls in the GPU process' sandbox on macOS. Also add entitlement for the GPU
        process to use message filtering.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Scripts/process-entitlements.sh:

2021-11-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS][GPUP] Add system call logging
        https://bugs.webkit.org/show_bug.cgi?id=233079
        <rdar://problem/85362041>

        Reviewed by Brent Fulgham.

        Add telemetry for system calls in the GPU process' sandbox on iOS.

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

2021-11-12  Darin Adler  <darin@apple.com>

        Make sort-Xcode-project-file idempotent
        https://bugs.webkit.org/show_bug.cgi?id=233077

        Reviewed by Wenson Hsieh.

        * WebKit.xcodeproj/project.pbxproj: Sorted.

2021-11-12  Garrett Davidson  <davidson.garrettm@gmail.com>

        _WKWebAuthenticationPanel should expose a way to encode CTAP commands
        https://bugs.webkit.org/show_bug.cgi?id=232977
        <rdar://85279329>

        Reviewed by David Kilzer.

        Expose the existing CTAP command encoding through _WKWebAuthenticationPanel.

        Covered by existing tests.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (coreUserVerificationAvailability):
        (+[_WKWebAuthenticationPanel getClientDataJSONForAuthenticationType:challenge:origin:])
        (+[_WKWebAuthenticationPanel encodeMakeCredentialCommandWithClientDataJSON:options:userVerificationAvailability:]):
        (+[_WKWebAuthenticationPanel encodeGetAssertionCommandWithClientDataJSON:options:userVerificationAvailability:]):

2021-11-12  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Allow access to syscalls
        https://bugs.webkit.org/show_bug.cgi?id=232825
        <rdar://problem/85164522>

        Reviewed by Brent Fulgham.

        Based on telemetry, add access to unix syscalls in the GPU process on iOS.

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

2021-11-12  Sihui Liu  <sihui_liu@apple.com>

        Set default general storage directory to websiteDataDirectory
        https://bugs.webkit.org/show_bug.cgi?id=232985

        Reviewed by Geoffrey Garen.

        New API test: FileSystemAccess.MigrateToNewStorageDirectory

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):

2021-11-12  Timothy Hatcher  <timothy@apple.com>

        Remove non-completionHandler version of -[WKWebView _loadServiceWorker:]
        https://bugs.webkit.org/show_bug.cgi?id=233069
        rdar://problem/85355540

        Reviewed by Chris Dumez.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _loadServiceWorker:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Removed _loadServiceWorker:.

2021-11-12  Peng Liu  <peng.liu6@apple.com>

        Promote WKPreferences._fullScreenEnabled to API
        https://bugs.webkit.org/show_bug.cgi?id=230784
        <rdar://83255308>

        Reviewed by Jer Noble.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences isElementFullscreenEnabled]):
        (-[WKPreferences setElementFullscreenEnabled:]):
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView fullscreenState]):
        * UIProcess/Cocoa/FullscreenClient.h:
        * UIProcess/Cocoa/FullscreenClient.mm:
        (WebKit::FullscreenClient::willEnterFullscreen):
        (WebKit::FullscreenClient::didEnterFullscreen):
        (WebKit::FullscreenClient::willExitFullscreen):
        (WebKit::FullscreenClient::didExitFullscreen):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebKit::WebFullScreenManagerProxy::fullscreenState const):

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Demote WKWebpagePreferences.captivePortalModeEnabled API to SPI
        https://bugs.webkit.org/show_bug.cgi?id=233059

        Reviewed by Geoffrey Garen.

        Demote WKWebpagePreferences.captivePortalModeEnabled API to SPI until we reach
        agreement on a suitable API name.

        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences _setCaptivePortalModeEnabled:]):
        (-[WKWebpagePreferences _captivePortalModeEnabled]):
        (-[WKWebpagePreferences setCaptivePortalModeEnabled:]): Deleted.
        (-[WKWebpagePreferences captivePortalModeEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Rename ProcessLauncherMac.mm to ProcessLauncherCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=233045
        <rdar://problem/85347107>

        Reviewed by Brent Fulgham.

        Follow-up to r285729 to rename to ProcessLauncherCocoa.mm instead of ProcessLauncherDarwin.mm
        given that the implementation is using NSBundle.

        * SourcesCocoa.txt:
        * UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm: Renamed from Source/WebKit/UIProcess/Launcher/darwin/ProcessLauncherDarwin.mm.
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        (WebKit::systemDirectoryPath):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        (WebKit::ProcessLauncher::terminateXPCConnection):
        (WebKit::terminateWithReason):
        * WebKit.xcodeproj/project.pbxproj:

2021-11-12  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r285698): Build correction after refactoring id handling
        https://bugs.webkit.org/show_bug.cgi?id=233052
        <rdar://problem/85347865>

        Reviewed by Chris Dumez.

        Build fix after r285698. The new 'toNSData' method needs its namespace included.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::toASCDescriptor):
        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        (WebKit::toNSData): Deleted.

2021-11-12  Per Arne  <pvollan@apple.com>

        [macOS][GPUP] Block access to mach register
        https://bugs.webkit.org/show_bug.cgi?id=232259
        <rdar://problem/84624488>

        Reviewed by Brent Fulgham.

        Based on telemetry, block access to mach register in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Disable MathML when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233013
        <rdar://84567129>

        Reviewed by Brent Fulgham.

        Turn off MathML support when in Captive Portal Mode.

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

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm
        https://bugs.webkit.org/show_bug.cgi?id=233045

        Reviewed by Brent Fulgham.

        Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm since this implementation is used by both macOS and iOS.
        I chose the Darwin naming (as opposed to the Cocoa one) because the implementation only relies on libXPC and mach.

        * SourcesCocoa.txt:
        * UIProcess/Launcher/darwin/ProcessLauncherDarwin.mm: Renamed from Source/WebKit/UIProcess/Launcher/mac/ProcessLauncherMac.mm.
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        (WebKit::systemDirectoryPath):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        (WebKit::ProcessLauncher::terminateXPCConnection):
        (WebKit::terminateWithReason):
        * WebKit.xcodeproj/project.pbxproj:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, partial revert of r285565 to resolve a PLT5 regression.
        <rdar://85269156>

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        (WebKit::NetworkSessionCocoa::isolatedSession):
        (WebKit::SessionSet::isolatedSession):
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const):
        (WebKit::NetworkSessionCocoa::clearIsolatedSessions):
        (WebKit::NetworkSessionCocoa::invalidateAndCancelSessionSet):

2021-11-12  Adrian Perez de Castro  <aperez@igalia.com>

        Some C++ source files use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=233040

        Remove spurious usage of "#pragma once" in implementation files.

        Reviewed by Chris Dumez.

        * WebProcess/WebCoreSupport/WebCaptionPreferencesDelegate.cpp:

2021-11-12  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove sandbox write access to files
        https://bugs.webkit.org/show_bug.cgi?id=232247
        <rdar://problem/84620023>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove sandbox write access to files in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-12  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPU] Remove access to IOKit classes
        https://bugs.webkit.org/show_bug.cgi?id=232344
        <rdar://problem/84684751>

        Reviewed by Darin Adler.

        Based on telemetry, remove access to unused IOKit classes in the GPU process' sandbox on iOS.

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

2021-11-12  Per Arne  <pvollan@apple.com>

        [macOS][GPUP] Add syscalls to sandbox
        https://bugs.webkit.org/show_bug.cgi?id=232210
        <rdar://problem/84584844>

        Reviewed by Brent Fulgham.

        Based on telemetry, add syscalls to the GPU process' sandbox on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-12  Chris Dumez  <cdumez@apple.com>

        WebKit is unable to recover if a WebProcess gets terminated while it is launching
        https://bugs.webkit.org/show_bug.cgi?id=233001
        <rdar://85302938>

        Reviewed by Brent Fulgham.

        While investigating <rdar://83941760>, I found that the WebAuthn Process would get
        jetsammed, which would cause us to call WebProcessPool::terminateAllWebContentProcesses().
        I also noticed that if one of these WebProcesses was still launching at the time
        of the termination, then the WebProcessProxy / WebPageProxy would keep thinking the
        WebProcess is still launching and would never attempt to relaunch it. This would result
        in a blank and unresponsive WKWebView which wouldn't be able to do any loads.

        The issue was due to ProcessLauncher::terminateProcess() calling invalidate(), which
        it would not only terminate the XPC connection, it would also null out m_client. As a
        result, we wouldn't notify the client that the process failed to launch. To address
        the issue, I move the XPC connection termination logic out of invalidate() and into
        its own terminateXPCConnection() function. I then called terminateXPCConnection()
        instead of invalidate() inside ProcessLauncher::terminateProcess().

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateAllWebContentProcesses]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::invalidate):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        (WebKit::ProcessLauncher::terminateXPCConnection):

2021-11-12  Chris Dumez  <cdumez@apple.com>

        Disable getUserMedia() when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233021

        Reviewed by Brent Fulgham.

        Disable getUserMedia() when in Captive Portal Mode.

        No new tests, covered by updated API test.

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

2021-11-11  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add flex-basis: content support
        https://bugs.webkit.org/show_bug.cgi?id=221479

        Reviewed by Javier Fernandez.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Length>::encode): Handle content in switch.
        (IPC::ArgumentCoder<Length>::decode): Ditto.

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

        [macOS][GPUP] Remove access to mach services in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=232208
        <rdar://problem/84584565>

        Reviewed by Darin Adler.

        Remove access to mach services in the GPU process on macOS based on telemetry
        and similar changes previously made in the WebContent process' sandbox.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-11  Brent Fulgham  <bfulgham@apple.com>

        [WebAuthn] Stop serializing BufferSource and Vector<uint8_t> duplicates of identifiers
        https://bugs.webkit.org/show_bug.cgi?id=233011
        <rdar://problem/85313807>

        Reviewed by Chris Dumez.

        The original WebAuthn logic converted WebCore::BufferSource objects to Vector<uint8_t>
        during serialization, which created a weird design where some code dealt with BufferSource
        objects, and other with Vectors, and lots of converting to and from these types. It also caused
        WebAuthn data structures to have two places where this information might live, with the
        UIProcess using one representation, and the WebContent process using another.

        This patch revises the code as follows:

        1. The identifiers are always stored as BufferSource, and the same member is used in UIProcess
           and WebContent process when accessing this information.
        2. We now serialize BufferSource directly.

        Tested by existing WebAuthn test cases (API and Layout tests)

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (publicKeyCredentialUserEntity):
        (publicKeyCredentialDescriptors):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::produceHashSet):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::deleteDuplicateCredential const):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::toASCDescriptor):
        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::issueSignCommand):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):

2021-11-11  Michael Catanzaro  <mcatanzaro@gnome.org>

        Misc compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=232989

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:

2021-11-11  Per Arne  <pvollan@apple.com>

        [macOS] Add required methods to IOKit message filter
        https://bugs.webkit.org/show_bug.cgi?id=233012
        <rdar://85307256>

        Reviewed by Brent Fulgham.

        Add required methods to IOKit message filter on macOS.

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

2021-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move image overlay code out of HTMLElement and into a separate helper file
        https://bugs.webkit.org/show_bug.cgi?id=232974

        Reviewed by Antti Koivisto.

        See WebCore/ChangeLog for more details.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::findDataDetectionResultElementInImageOverlay):
        (WebKit::WebPage::requestTextRecognition):
        (WebKit::WebPage::updateWithTextRecognitionResult):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::findTextIndicatorOptions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::insideImageOverlay):
        (WebKit::rangeForPointInRootViewCoordinates):
        (WebKit::hostVideoElementIgnoringImageOverlay):
        (WebKit::elementPositionInformation):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2021-11-11  Ben Nham  <nham@apple.com>

        Log memory usage metadata when WebContent crosses critical or warning level memory thresholds
        https://bugs.webkit.org/show_bug.cgi?id=232976

        Reviewed by Darin Adler.

        Added callbacks to log memory usage metadata the first time a process hits these milestones:

         - exceeded inactive memory limit while active (on Mac)
         - exceeded warning process limit threshold (on other non-Mac Apple platforms)
         - exceeded critical process limit threshold (on other non-Mac Apple platforms)

        The reason for this is we  receive a large number of out of memory reports with very little
        info in the logs. We want to log more metadata about memory usage (similar to what we do on
        Mac in `WebCore::logMemoryStatisticsAtTimeOfDeath`) to help us debug those reports.

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

2021-11-11  Rachel Ginsberg  <rginsberg@apple.com>

        Add support in WebCore for web app manifest icons
        https://bugs.webkit.org/show_bug.cgi?id=231339
        rdar://84311306

        Reviewed by Brent Fulgham.

        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (makeVectorElement):
        Used by makeVector in initWithCoder:. Takes a _WKApplicationManifestIcon and returns
        a WebCore::ApplicationManifest::Icon.
        (-[_WKApplicationManifest initWithCoder:]):
        Added icons.
        (-[_WKApplicationManifest encodeWithCoder:]):
        Added icons.
        (-[_WKApplicationManifest icons]):
        Should appease build error before full support for icons is built into _WKApplicationManifest

        (+[_WKApplicationManifestIcon supportsSecureCoding]):
        (-[_WKApplicationManifestIcon initWithCoder:]):
        (-[_WKApplicationManifestIcon encodeWithCoder:]):
        (-[_WKApplicationManifestIcon dealloc]):
        * UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:

2021-11-11  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION (iOS 15, GPU Process): Fails to load texture map
        https://bugs.webkit.org/show_bug.cgi?id=231471
        <rdar://problem/84328146>

        Reviewed by Tim Horton.

        Use the normal "draw image buffer" call to draw the image buffer
        to the shareable bitmap. Before, it was manually re-implementing this
        API call via the lower level calls.
        The drawImageBuffer call now fixes up the IOSurface -backed source
        ImageBuffers to not keep referencing to the CGImage that provided
        the data to the draw. Otherwise GPU process jetsams as the CGImage
        inside IOSurface is counted against GPU process memory limit.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):

2021-11-11  Tomoki Imai  <Tomoki.Imai@sony.com>

        [RemoteInspector][Socket] Can't find the target since r277787
        https://bugs.webkit.org/show_bug.cgi?id=232986

        Reviewed by Don Olmstead.

        Remote Inspector has the same issue as bug 226908.
        RemoteInspectorProtocolHandler needs the same fix as r278748.

        * UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.cpp: Copy WebURLSchemeTask.request().url() to avoid obtaining the temporary object.

2021-11-11  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll granularity an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232641

        Reviewed by Cameron McCormack.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::onMouseWheel):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onHorizontalScroll):
        (WebKit::WebView::onVerticalScroll):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scrollBy):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performNonEditingBehaviorForSelector):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2021-11-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Drop support for <object usemap> making <object> interactive
        https://bugs.webkit.org/show_bug.cgi?id=222642

        Reviewed by Antti Koivisto.

        Remove support for usemap attribute in GTK DOM API adding a warning message instead.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        (webkit_dom_html_object_element_get_use_map):
        (webkit_dom_html_object_element_set_use_map):

2021-11-11  Sam Weinig  <weinig@apple.com>

        Factor platform specific code out of HTMLModelElement
        https://bugs.webkit.org/show_bug.cgi?id=232848

        Reviewed by Dean Jackson.

        Move implementation details of the macOS ARKit <model> implementation
        into an ARKit model player implementation.

        * CMakeLists.txt:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        Add new files.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelElementDidCreatePreview):
        * UIProcess/ModelElementController.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Make modelElementDidCreatePreview() an async callback rather than
        using a ElementContext to reconnect on the way back.

        * WebProcess/Model: Added.
        * WebProcess/Model/WebModelPlayerProvider.cpp: Added.
        * WebProcess/Model/WebModelPlayerProvider.h: Added.
        Add ModelPlayerProvider implementation for WebKit.

        * WebProcess/Model/mac: Added.
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayer.h: Added.
        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayer.mm: Added.
        Move code from HTMLModelElementCocoa here, and implement the ModelPlayer
        interface using it. Rather than using the ChromeClient, we can now directly
        use an async IPC message to set up the link.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):
        Fix build issue caused by adding new files.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        Update call to setModelElementCacheDirectory to be on the ARKitInlinePreviewModelPlayer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::modelElementDidCreatePreview const): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Remove no longer needed modelElementDidCreatePreview client function.

2021-11-11  Dean Jackson  <dino@apple.com>

        WKSystemPreviewView should be called WKUSDPreviewView
        https://bugs.webkit.org/show_bug.cgi?id=232961
        <rdar://problem/85265415>

        Reviewed by Sam Weinig.

        WKSystemPreviewView is a uninformative name. WKUSDPreviewView is more accurate.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):
        * UIProcess/SystemPreviewController.cpp:
        (WebKit::SystemPreviewController::canPreview const):
        * UIProcess/ios/WKUSDPreviewView.h: Renamed from Source/WebKit/UIProcess/ios/WKSystemPreviewView.h.
        * UIProcess/ios/WKUSDPreviewView.mm: Renamed from Source/WebKit/UIProcess/ios/WKSystemPreviewView.mm.
        (getUTIForSystemPreviewMIMEType):
        (-[WKUSDPreviewView web_initWithFrame:webView:mimeType:]):
        (-[WKUSDPreviewView web_setContentProviderData:suggestedFilename:]):
        (-[WKUSDPreviewView _layoutThumbnailView]):
        (-[WKUSDPreviewView thumbnailView:wantsToPresentPreviewController:forItem:]):
        (-[WKUSDPreviewView web_contentView]):
        (+[WKUSDPreviewView web_requiresCustomSnapshotting]):
        (-[WKUSDPreviewView web_setMinimumSize:]):
        (-[WKUSDPreviewView web_setOverlaidAccessoryViewsInset:]):
        (-[WKUSDPreviewView web_computedContentInsetDidChange]):
        (-[WKUSDPreviewView web_setFixedOverlayView:]):
        (-[WKUSDPreviewView web_didSameDocumentNavigation:]):
        (-[WKUSDPreviewView web_isBackground]):
        (-[WKUSDPreviewView web_countStringMatches:options:maxCount:]):
        (-[WKUSDPreviewView web_findString:options:maxCount:]):
        (-[WKUSDPreviewView web_hideFindUI]):
        (-[WKUSDPreviewView provideDataForItem:]):
        * WebKit.xcodeproj/project.pbxproj:

2021-11-11  Chris Dumez  <cdumez@apple.com>

        Turn off various preferences when in captive portal mode
        https://bugs.webkit.org/show_bug.cgi?id=232958
        <rdar://84622396>

        Reviewed by Brent Fulgham.

        Disable the following settings when in captive portal mode:
        - WebGL
        - WebGL2
        - Gamepads
        - RemotePlayback
        - FileSystemAccess
        - AllowsPictureInPictureMediaPlayback
        - PictureInPictureAPI
        - SpeechRecognition
        - Notifications
        - WebXR
        - WebXRAugmentedRealityModule
        - WebAudio
        - DownloadableBinaryFonts
        - PeerConnection (WebRTC)

        Covered by updated API tests.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::isCaptivePortalModeEnabled const):

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

        [macOS][GPUP] Allow access to power logging service
        https://bugs.webkit.org/show_bug.cgi?id=232978
        <rdar://problem/85279539>

        Reviewed by Brent Fulgham.

        Access to this logging service is still required in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-10  Chris Dumez  <cdumez@apple.com>

        We should not kill all WebContent processes whenever the WebAuthn process crashes
        https://bugs.webkit.org/show_bug.cgi?id=232970
        <rdar://83941760>

        Reviewed by Geoff Garen.

        We should not kill all WebContent processes whenever the WebAuthn process crashes. This is overly aggressive. We should
        instead do like for the network process and have the WebProcess re-initiate the connection to the WebAuthn process when
        it's gone.

        No new tests, updated existing API test.

        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::webAuthnProcessCrashed):
        Do not terminate all WebProcesses when the WebAuthn process crashes.

        * WebProcess/WebAuthentication/WebAuthnProcessConnection.cpp:
        (WebKit::WebAuthnProcessConnection::didClose):
        Make sure we call WebProcess::webAuthnProcessConnectionClosed() when the WebProcess
        loses its connection to the WebAuthn process. This makes sure we clear m_webAuthnProcessConnection
        and properly re-initiate a new WebAuthn process connection the next time WebProcess::ensureWebAuthnProcessConnection()
        is called.

2021-11-10  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Unify _WKWebAuthenticationPanel SPI and AuthenticatorCoordinator's ClientDataJson generation 
        https://bugs.webkit.org/show_bug.cgi?id=232965
        <rdar://problem/85268216>

        Reviewed by Brent Fulgham.

        The _WKWebAuthenticationPanel SPI and AuthenticatorCoordinator use different methods of generating 
        clientDataJson, which results in strings with the keys in a different order. This causes problems
        because when generating asserts via ASC ui, the hash signed and the client data json used to generate
        that hash are different from the client data json returned to js. 

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (produceClientDataJson):

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        Block sandbox access to consume mach extensions
        https://bugs.webkit.org/show_bug.cgi?id=232254
        <rdar://problem/84622169>

        Reviewed by Brent Fulgham.

        Block sandbox access to consume mach extensions that are not issued by WebKit.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-11-10  Devin Rousso  <drousso@apple.com>

        Unreviewed internal build fix after r285444

        * Platform/spi/Cocoa/AppleMediaServicesUISPI.h:
        Make sure that `AppleMediaServicesSPI.h` is always included.

        * Platform/spi/Cocoa/AppleMediaServicesSPI.h:
        Add missing `;`.

2021-11-10  Devin Rousso  <drousso@apple.com>

        Add support for marking an `<input>` as being autofilled with obscured content
        https://bugs.webkit.org/show_bug.cgi?id=232903
        <rdar://problem/84276999>

        Reviewed by Aditya Keerthi.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFilledAndObscured const): Added.
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFilledAndObscured): Added.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle HTMLInputElementIsAutoFilledAndObscured]): Added.
        (-[WKWebProcessPlugInNodeHandle setHTMLInputElementIsAutoFilledAndObscured:]): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleSetHTMLInputElementAutoFilledAndObscured): Added.
        Expose a way to get/set the CSS `-webkit-autofill-and-obscured` pseudo-class on an `<input>`.

2021-11-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some image overlay logic to work with built-in media controls
        https://bugs.webkit.org/show_bug.cgi?id=232899
        rdar://83173597

        Reviewed by Antoine Quint and Tim Horton.

        See WebCore/ChangeLog for more details.

        * Shared/ios/InteractionInformationAtPosition.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (canAttemptTextRecognitionForNonImageElements):

        Add a new WebKitAdditions integration point.

        (-[WKContentView imageAnalysisGestureDidBegin:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionPositionInformation):

        Adjust for the changes to the built-in media controls stylesheet by adding logic to prevent the magnifier from
        showing up when long pressing (or long pressing inside) video elements on iOS.

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove access to sysctl properties
        https://bugs.webkit.org/show_bug.cgi?id=232329
        <rdar://problem/84679628>

        Reviewed by Darin Adler.

        Based on telemetry, remove access to unused sysctl properties in the GPU process' sandbox on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-10  Chris Dumez  <cdumez@apple.com>

        Add basic support for launching CaptivePortalMode WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=232737
        <rdar://84473037>

        Reviewed by Brent Fulgham.

        Add new `WKWebpagePreferences.captivePortalModeEnabled` API to allow clients apps to opt in or
        out of captive portal mode for each navigation (WKWebpagePreferences is passed with the navigation
        policy decision). For setting the default state of this setting, the client can set
        `WebWebViewConfiguration.defaultWebpagePreferences.captivePortalModeEnabled` (will impact all views
        using this configuration).

        Note that both this property can only be set by apps with the browser entitlement on iOS (no
        restriction on macOS). On iOS, the default value of WKWebpagePreferences.captivePortalModeEnabled
        depends on the corresponding system setting. For now, this is simulated by a NSUserDefault but it
        will eventually come from somewhere else (TCC?).

        Whenever transitioning in or out of captive portal mode, we process-swap on navigation policy
        decision. Whenever captive portal mode is enabled, we turn off JIT, generational and concurrent GC
        in the WebProcess, as soon as it launches.

        Covered by new API tests.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::captivePortalModeEnabled const):
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        (API::WebsitePolicies::captivePortalModeEnabled const):
        * UIProcess/API/APIWebsitePolicies.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        (-[WKWebpagePreferences setCaptivePortalModeEnabled:]):
        (-[WKWebpagePreferences captivePortalModeEnabled]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::captivePortalModeEnabledBySystem):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::Client::shouldEnableCaptivePortalMode const):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::findReusableSuspendedPageProcess):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::triggerBrowsingContextGroupSwitchForNavigation):
        (WebKit::WebPageProxy::isJITEnabled):
        (WebKit::WebPageProxy::shouldEnableCaptivePortalMode const):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::takeProcess):
        * UIProcess/WebProcessCache.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::prewarmProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        (WebKit::captivePortalModeEnabledBySystem):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::createForServiceWorkers):
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::captivePortalMode const):

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Remove sandbox read access to files
        https://bugs.webkit.org/show_bug.cgi?id=232389
        <rdar://problem/84717349>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove read access to files in the GPU process' sandbox on iOS.
        This patch also adds some new telemetry for rules related to reading of files.

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

2021-11-10  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Use bytesAsString, saving creation and destruction
        of a CString each time this is called.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (-[WKSecureCodingURLWrapper encodeWithCoder:]): Use bytesAsVector.

        * Shared/Cocoa/WKNSURLExtras.h: Removed unused methods
        +[NSURL _web_URLWithWTFString:relativeToURL:] and
        -[NSURL _web_originalDataAsWTFString].

        * Shared/Cocoa/WKNSURLExtras.mm:
        (+[NSURL _web_URLWithWTFString:relativeToURL:]): Deleted.
        (-[NSURL _web_originalDataAsWTFString]): Deleted.

        * Shared/Cocoa/WKNSURLRequest.mm:
        (-[WKNSURLRequest URL]): Removed unneeded call to +[NSURL _web_URLWithWTFString:]
        because this code is converting a WTF::URL to an NSURL, which can use the conversion
        operator in the WTF::URL class.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::ArgumentCoder<CFURLRef>::encode): Use bytesAsVector.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:userData:]):
        Use bytesAsString and bridge_cast.
        (-[WKBrowsingContextController loadHTMLString:baseURL:userData:]): Ditto.
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]): Ditto.
        (setUpPagePolicyClient): Removed unneeded call to +[NSURL _web_URLWithWTFString:]
        because this code is converting a WTF::URL to an NSURL, which can use the conversion
        operator in the WTF::URL class.

        * UIProcess/Cocoa/LegacyDownloadClient.mm:
        (WebKit::LegacyDownloadClient::willSendRequest): Removed unneeded call to
        +[NSURL _web_URLWithWTFString:] because this code is converting a WTF::URL to an NSURL,
        which can use the conversion operator in the WTF::URL class.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame URL]): Ditto.

2021-11-10  Alex Christensen  <achristensen@webkit.org>

        [macOS] Unable to build WebKit with multiple users in the same machine, webpushd uses /tmp/WebKit.dst
        https://bugs.webkit.org/show_bug.cgi?id=232940

        Reviewed by Alexey Proskuryakov.

        * WebKit.xcodeproj/project.pbxproj:

2021-11-10  Jer Noble  <jer.noble@apple.com>

        [iOS] Adopt -[AVAudioSession setAuditTokensForProcessAssertion:]
        https://bugs.webkit.org/show_bug.cgi?id=232909
        <rdar://68184444>

        Reviewed by Eric Carlson.

        When a page is loaded through SafariViewService, the UIProcess is SVS, but the "presenting"
        application is the client of SafariViewController. To further compliate things, multiple apps
        all using a SafariViewController will use a singleton SafariViewService application. When such
        an application goes to the background while playing audio, the audio subsystem will keep the
        UIProcess from suspending, but not the presenting application. The audio subsystem will see
        that the presenting application has become suspended, and will interrupt audio playback.

        Opt into a AVAudioSession behavior where a client can provide an array of audit tokens for
        those processes which are "presenting" the audio playback to the user. This will include the
        UIProcess, but also the process which is hosting the SafariViewController. The audio subsystem
        will keep the processes in that list from becoming suspended during audio playback.

        Since there may be different clients of SafariViewService existing simultaneously, only include
        those presenting application tokens whose WebContent processes require an "active" audio session.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::presentingApplicationAuditToken const):
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::audioSessionManager const):
        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::tryToSetActive):
        * GPUProcess/media/RemoteAudioSessionProxy.h:
        (WebKit::RemoteAudioSessionProxy::gpuConnectionToWebProcess const):
        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::RemoteAudioSessionProxyManager):
        (WebKit::RemoteAudioSessionProxyManager::updatePresentingProcesses):
        * GPUProcess/media/RemoteAudioSessionProxyManager.h:
        * Scripts/process-entitlements.sh:
        * Shared/GPUProcessConnectionParameters.h:
        (WebKit::GPUProcessConnectionParameters::encode const):
        (WebKit::GPUProcessConnectionParameters::decode):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setPresentingApplicationProcessToken:]):
        (-[_WKProcessPoolConfiguration presentingApplicationProcessToken]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection):
        * WebProcess/GPU/GPUProcessConnection.h:

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Remove access to sysctl properties
        https://bugs.webkit.org/show_bug.cgi?id=232821
        <rdar://problem/85162088>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove access to unused sysctl properties in the GPU process' sandbox on iOS.

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

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Remove access to mach-register
        https://bugs.webkit.org/show_bug.cgi?id=232442
        <rdar://problem/84763289>

        Reviewed by Darin Adler.

        Based on telemetry, remove access to mach-register in the GPU process' sandbox on iOS.

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

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Block access to mapping of executables
        https://bugs.webkit.org/show_bug.cgi?id=232824
        <rdar://problem/85163925>

        Reviewed by Brent Fulgham.

        Block access to mapping of certain executables in the GPU process on iOS.
        These changes are based on collected telemetry.

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

2021-11-10  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove access to IOKit classes
        https://bugs.webkit.org/show_bug.cgi?id=232308
        <rdar://problem/84665748>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove access to unused IOKit classes in the GPU process' sandbox on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-10  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc to M96
        https://bugs.webkit.org/show_bug.cgi?id=232873

        Reviewed by Alex Christensen.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):

2021-11-10  Youenn Fablet  <youenn@apple.com>

        [iOS] Add audio gain in case category switches to PlayAndRecord
        https://bugs.webkit.org/show_bug.cgi?id=232941
        <rdar://85250248>

        Reviewed by Eric Carlson.

        In case of PlayAndRecord, apply a static gain of 5 to audio rendered from MediaStreamTracks.
        For that purpose, observe changes to the AudioSession category and react upon it.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::Unit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::start):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::render):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::categoryDidChange):

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Migrate DialogElementEnabled from RuntimeFlags to Settings
        https://bugs.webkit.org/show_bug.cgi?id=232926

        Reviewed by Youenn Fablet.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDialogElementEnabled): Deleted.
        (WKPreferencesGetDialogElementEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2021-11-10  Sihui Liu  <sihui_liu@apple.com>

        Perform FileSystemSyncAccessHandle operations in web process
        https://bugs.webkit.org/show_bug.cgi?id=232146
        <rdar://problem/84809428>

        Reviewed by Youenn Fablet.

        Network process no longer needs to hold open file handle for FileSystemSyncAccessHandle. Now it creates an open 
        file handle, pass it to web process and close it.

        * NetworkProcess/storage/FileSystemStorageError.h:
        (WebKit::convertToException):
        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::createSyncAccessHandle):
        (WebKit::FileSystemStorageHandle::close):
        (WebKit::FileSystemStorageHandle::move):
        (WebKit::FileSystemStorageHandle::~FileSystemStorageHandle): Deleted.
        (WebKit::FileSystemStorageHandle::getSize): Deleted.
        (WebKit::FileSystemStorageHandle::truncate): Deleted.
        (WebKit::FileSystemStorageHandle::flush): Deleted.
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::createSyncAccessHandle):
        (WebKit::NetworkStorageManager::getSizeForAccessHandle): Deleted.
        (WebKit::NetworkStorageManager::truncateForAccessHandle): Deleted.
        (WebKit::NetworkStorageManager::flushForAccessHandle): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * Platform/IPC/SharedFileHandle.cpp:
        (IPC::SharedFileHandle::close):
        * Platform/IPC/SharedFileHandle.h:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::getSize): Deleted.
        (WebKit::WebFileSystemStorageConnection::truncate): Deleted.
        (WebKit::WebFileSystemStorageConnection::flush): Deleted.
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-11-09  Chris Dumez  <cdumez@apple.com>

        [macOS] Enable NSURLSession partitioning based on first-party domain at CFNetwork level
        https://bugs.webkit.org/show_bug.cgi?id=230750
        <rdar://problem/83159358>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (overrideAttributionContext): Deleted.
        Stop disabling CFNetwork NSURLSession partitioning based on first-party domain on
        macOS.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const):
        (WebKit::NetworkSessionCocoa::clearIsolatedSessions):
        (WebKit::NetworkSessionCocoa::invalidateAndCancelSessionSet):
        Disable ITP session partitioning of certain prevalent domains on platforms where
        CFNetwork already does full partitioning of all domains (now that it is enabled
        on macOS 12+ and iOS15+).

2021-11-09  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Remove shared memory access
        https://bugs.webkit.org/show_bug.cgi?id=232823
        <rdar://problem/85163103>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove shared memory access in the GPU process' sandbox on iOS.

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

2021-11-09  Per Arne  <pvollan@apple.com>

        [iOS][GPUP] Remove read access to preferences
        https://bugs.webkit.org/show_bug.cgi?id=232439
        <rdar://problem/84762138>

        Reviewed by Darin Adler.

        Based on telemetry, remove access to reading some preference domains in the GPU process' sandbox on iOS.

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

2021-11-09  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add telemetry for system calls in WP
        https://bugs.webkit.org/show_bug.cgi?id=231836
        <rdar://problem/84317842>

        Reviewed by Brent Fulgham.

        Add telemetry for system calls in WP to understand in which context they are being used.

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

2021-11-09  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove shared memory access
        https://bugs.webkit.org/show_bug.cgi?id=232281
        <rdar://problem/84635475>

        Reviewed by Darin Adler.

        Based on telemetry, remove shared memory access in the GPU process' sandbox on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-09  Per Arne  <pvollan@apple.com>

        [macOS][GPUP] Block access to mapping of executables
        https://bugs.webkit.org/show_bug.cgi?id=232257
        <rdar://problem/84623297>

        Reviewed by Brent Fulgham.

        Block access to mapping of certain executables in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-09  Chris Dumez  <cdumez@apple.com>

        REGRESSION (Safari 15): AudioContext.currentTime speeds up (and audio won't play) when Bluetooth speaker connected
        https://bugs.webkit.org/show_bug.cgi?id=232728
        <rdar://problem/85075538>

        Reviewed by Jer Noble.

        This was a regression from us moving WebAudio to the GPUProcess in Safari 15. The issue occurred because the
        WebProcess (writer) would get further and further ahead of the GPUProcess (reader) after a hardware sample
        rate change.

        When rendering on https://mdn.github.io/webaudio-examples/audiocontext-states/ with a hardware sample rate of
        96Khz, RemoteAudioDestination::render() would get called with a numberOfFrame=128. Each time
        RemoteAudioDestination::render() was called, it would signal the IPC semaphore, causing the WebProcess to
        produce one WebAudio rendering quantum (128 frames). This would match perfectly and there would be no issues.
        However, if during playback, the hardware sample rate changes (which can happen when connecting to bluetooth
        speakers), CoreAudio would start calling RemoteAudioDestination::render() with a different numberOfFrame.
        For example, when switching the hardware sample rate to 44.1Khz, numberOfFrames would be 278. Every time it
        is called, render() would signal the semaphore 3 times, causing the WebProcess to produce 3 WebAudio rendering
        quantums (3 * 128 = 384 frames). So each time render() is called, the WebProcess would generate `384 - 278 = 105`
        frames too many, causing it to get further and further ahead of the GPUProcess. One symptom would be that
        AudioContext.currentTime would progress too fast. Also, eventually, our RingBuffer between the 2 process would
        fill up and lead to rendering issues.

        To address the issue, I updated RemoteAudioDestination::render() to keep track of how many extra samples it
        requested from the WebProcess previously. This avoids signalling the IPC semaphore too many times and the
        WebProcess can no longer get too far ahead of the GPUProcess. The logic matches what was already done in
        RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::render().

        * GPUProcess/media/RemoteAudioDestinationManager.cpp:

2021-11-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285536.
        https://bugs.webkit.org/show_bug.cgi?id=232915

        causes API test crashes

        Reverted changeset:

        "[CF] Reduce duplication and unneeded buffer allocations and
        copying in URL code, also remove unused methods and functions"
        https://bugs.webkit.org/show_bug.cgi?id=232220
        https://commits.webkit.org/r285536

2021-11-09  Per Arne  <pvollan@apple.com>

        [iOS][GPUP] Add syscalls to sandbox
        https://bugs.webkit.org/show_bug.cgi?id=232211
        <rdar://problem/84584880>

        Reviewed by Darin Adler.

        Based on telemetry, add syscalls to the GPU process' sandbox on iOS.

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

2021-11-09  Per Arne  <pvollan@apple.com>

        [iOS][GPUP] Remove sandbox access to mach services
        https://bugs.webkit.org/show_bug.cgi?id=232209
        <rdar://problem/84584739>

        Reviewed by Darin Adler.

        Remove access to mach services in the GPU process' sandbox that are unused according to telemetry.

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

2021-11-09  Devin Rousso  <drousso@apple.com>

        Unreviewed internal build fix after r285444

        * Platform/spi/Cocoa/AppleMediaServicesSPI.h:

2021-11-09  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] User handle is not saved on create via ASC
        https://bugs.webkit.org/show_bug.cgi?id=232900
        rdar://85216105

        Reviewed by Brent Fulgham.

        This value is required to be stored along the credential on create calls
        such that it can be returned via get calls. Currently, it is always read
        as empty because user.id is empty after ipc, while the id is decoded to
        idVector.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::configureRegistrationRequestContext):

2021-10-28  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Use bytesAsString, saving creation and destruction
        of a CString each time this is called.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (-[WKSecureCodingURLWrapper encodeWithCoder:]): Use bytesAsVector.

        * Shared/Cocoa/WKNSURLExtras.h: Removed unused methods
        +[NSURL _web_URLWithWTFString:relativeToURL:] and
        -[NSURL _web_originalDataAsWTFString].

        * Shared/Cocoa/WKNSURLExtras.mm:
        (+[NSURL _web_URLWithWTFString:relativeToURL:]): Deleted.
        (-[NSURL _web_originalDataAsWTFString]): Deleted.

        * Shared/Cocoa/WKNSURLRequest.mm:
        (-[WKNSURLRequest URL]): Removed unneeded call to +[NSURL _web_URLWithWTFString:]
        because this code is converting a WTF::URL to an NSURL, which can use the conversion
        operator in the WTF::URL class.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::ArgumentCoder<CFURLRef>::encode): Use bytesAsVector.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:userData:]):
        Use bytesAsString and bridge_cast.
        (-[WKBrowsingContextController loadHTMLString:baseURL:userData:]): Ditto.
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]): Ditto.
        (setUpPagePolicyClient): Removed unneeded call to +[NSURL _web_URLWithWTFString:]
        because this code is converting a WTF::URL to an NSURL, which can use the conversion
        operator in the WTF::URL class.

        * UIProcess/Cocoa/LegacyDownloadClient.mm:
        (WebKit::LegacyDownloadClient::willSendRequest): Removed unneeded call to
        +[NSURL _web_URLWithWTFString:] because this code is converting a WTF::URL to an NSURL,
        which can use the conversion operator in the WTF::URL class.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame URL]): Ditto.

2021-11-09  Chris Dumez  <cdumez@apple.com>

        BroadcastChannel is still disabled in service workers
        https://bugs.webkit.org/show_bug.cgi?id=232855

        Reviewed by Darin Adler.

        No new tests, rebaselined existing test.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        Make sure BroadcastChannel is functional is Service Workers by setting up proper
        BroadcastChannelRegistry on the PageConfiguration we use to construct the service
        worker's dummy page.

2021-11-09  Antoine Quint  <graouts@webkit.org>

        REGRESSION(r272201): Safari showed red distortion on webview after using Web Inspector, returning from another app
        https://bugs.webkit.org/show_bug.cgi?id=231358
        <rdar://problem/81505208>

        Reviewed by Devin Rousso.

        * WebProcess/Inspector/WebInspectorClient.h:

2021-11-09  Tim Horton  <timothy_horton@apple.com>

        Add runtime flag for momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=232898
        <rdar://problem/85211338>

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):

2021-11-09  Devin Rousso  <drousso@apple.com>

        REGRESSION(r271735): PaymentShippingOption.selected ignored
        https://bugs.webkit.org/show_bug.cgi?id=221960
        <rdar://problem/73464404>

        Reviewed by Tim Horton.

        Leverage new `PKShippingMethods` SPI to provide both the general list of `PKShippingMethod`
        and the default selected `PKShippingMethods` when creating/updating a payment request.

        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKShippingMethods): Added.
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        Add new helper to generate the `PKShippingMethods` from WebCore objects.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completePaymentMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeCouponCodeChange):
        (WebKit::toPKShippingMethods): Deleted.

        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate completePaymentMethodSelection:]):
        (-[WKPaymentAuthorizationDelegate completeShippingContactSelection:]):
        (-[WKPaymentAuthorizationDelegate completeShippingMethodSelection:]):
        (-[WKPaymentAuthorizationDelegate completeCouponCodeChange:]):
        (-[WKPaymentAuthorizationDelegate _initWithRequest:presenter:]):
        (toShippingMethod):
        (-[WKPaymentAuthorizationDelegate _didSelectShippingMethod:completion:]):
        (-[WKPaymentAuthorizationDelegate summaryItems]): Deleted.
        (-[WKPaymentAuthorizationDelegate shippingMethods]): Deleted.
        Drive-by: Delete unused methods.

2021-11-09  Sihui Liu  <sihui_liu@apple.com>

        Keep track of captured data time in SpeechRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=232867

        Reviewed by Youenn Fablet.

        Removed a redundant call.

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

2021-11-09  Devin Rousso  <drousso@apple.com>

        Unreviewed internal build fix after r285424
        <rdar://problem/85207411>

        ```
        WKScrollView.mm:227:35: error: incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'UIColor * _Nullable'
        ```

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setBackgroundColor:]):

2021-11-09  Sihui Liu  <sihui_liu@apple.com>

        Fix wrong frame count of CARingBuffer in SpeechRecognitionRemoteRealtimeMediaSource
        https://bugs.webkit.org/show_bug.cgi?id=232863
        <rdar://83381842>

        Reviewed by Youenn Fablet.

        SpeechRecognitionRealtimeMediaSourceManager::Source uses shared ring buffer to pass audio data to 
        SpeechRecognitionRemoteRealtimeMediaSource. We used to ask CARingBuffer in 
        SpeechRecognitionRealtimeMediaSourceManager::Source to allocate with m_numberOfFrames and send m_numberOfFrames
        to SpeechRecognitionRemoteRealtimeMediaSource (so SpeechRecognitionRemoteRealtimeMediaSource can create a 
        corresponding CARingBuffer). This is wrong because CARingBuffer::allocate() rounds up frameCount to power of 
        two, which means m_numberOfFrames may be not the number used. We should get the actual frameCount in the 
        setStorage callback of SharedRingBufferStorage, and pass that value to SpeechRecognitionRemoteRealtimeMediaSource.

        Manually tested.

        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp:
        (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage):
        * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp:
        (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::Source):
        (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::storageChanged):

2021-11-09  Brent Fulgham  <bfulgham@apple.com>

        Reduce telemetry for well-understood sandbox rules
        https://bugs.webkit.org/show_bug.cgi?id=232885
        <rdar://problem/84950269>

        Reviewed by Per Arne Vollan.

        Now that we have telemetry showing the use case for this syscall, remove the telemetry.

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

2021-11-09  Chris Dumez  <cdumez@apple.com>

        New spec: Block external protocol handler in sandboxed frames
        https://bugs.webkit.org/show_bug.cgi?id=231727
        <rdar://problem/84498192>

        Reviewed by Brent Fulgham.

        Per the HTML specification [1][2], we should prevent sandboxed iframes from opening
        external applications by navigating to a URL with a custom procotol (e.g. rdar://).

        Indeed, it would be surprising if malvertisers would be able to redirect you to
        an external app.

        To support valid use cases, we still allow such navigations in sandboxed iframes
        if any of the following is true:
        - sandboxFlags contains "allow-top-navigation-by-user-activation" and hasTransientActivation is true
        - sandboxFlags contains "allow-top-navigation"
        - sandboxFlags contains "allow-popups"

        [1] https://github.com/whatwg/html/issues/2191
        [2] https://html.spec.whatwg.org/#hand-off-to-external-software

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

2021-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a position information bit to indicate whether the hit-tested element is a paused video
        https://bugs.webkit.org/show_bug.cgi?id=232861

        Reviewed by Megan Gardner.

        Add `InteractionInformationAtPosition::isPausedVideo`, a flag that is true when the position information request
        is over a paused video element (or inside the media control shadow root underneath that paused video element, in
        the case where native controls are shown).

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Also rename `imageElementContext` to `hostImageOrVideoElementContext` to clarify that it (1) may now include
        element contexts for video elements, and (2) unlike the regular `elementContext`, this includes the image or
        video element that is the host for hit-tested content in the UA shadow root of the element corresponding to
        `elementContext`.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::videoPositionInformation):

        Additionally populate the `image` of the position information, in the case where `includeImageData` is set on
        the incoming request.

        (WebKit::hostVideoElementIgnoringImageOverlay):
        (WebKit::imagePositionInformation):
        (WebKit::elementPositionInformation):
        (WebKit::WebPage::positionInformation):

2021-11-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285432.
        https://bugs.webkit.org/show_bug.cgi?id=232864

        Introduced audio capture regression

        Reverted changeset:

        "[macOS][GPUP] Remove access in sandbox to
        com.apple.audio.AudioComponentRegistrar"
        https://bugs.webkit.org/show_bug.cgi?id=231694
        https://commits.webkit.org/r285432

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make it possible to toggle several experimental media features when GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=232818

        Reviewed by Tim Horton.

        Refactor a bit of logic around `GPUProcessProxy::updatePreferences`, such that the experimental features that
        are set underneath this method can be toggled by checking or unchecking the preference in the experimental
        features menu in Safari, and then restarting Safari (or simply killing and relaunching the GPU process).

        As detailed in the existing FIXME, we currently consult the global WebPageGroups' WebPreferences, which do not
        account for changes to the experimental feature defaults since they initialize their own WebPreferences that
        are (1) prefixed with a unique identifier, and (2) have `keyPrefix` and `globalDebugKeyPrefix` that are
        different from normal WebPreferences on WebPageProxy.

        Instead, we can add some plumbing to provide a WebProcessProxy to `updatePreferences()`, and use this to
        determine whether we need to enable any experimental features by iterating over each WebPageProxy's preferences
        and enabling each feature if it's enabled by at least one web page (roughly matching the current behavior).
        While it's still not ideal, these features are all process-global and there is only one GPU process, so in lieu
        of more extensive refactoring around these media feature flags, it makes sense to just turn them on if it's
        enabled in any individual instance of WebPreferences.

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

        Hoist the call to `updatePreferences()` out of this method and into `WebProcessPool::ensureGPUProcess` instead,
        so that we can pass in WebProcessProxy.

        (WebKit::GPUProcessProxy::updatePreferences):

        See above for more details.

        (WebKit::GPUProcessProxy::updateScreenPropertiesIfNeeded):

        Split out logic to update screen properties into a separate method, so that we don't end up unnecessarily
        computing and sending redundant screen properties `WebProcessPool::ensureGPUProcess()`.

        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureGPUProcess):
        (WebKit::WebProcessPool::createWebPage):

2021-11-08  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] challenge does not get passed to -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=232836
        rdar://85163927

        Reviewed by Brent Fulgham.

        -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:] receives
        an empty challenge, causing _WKWebAuthenticationPanel to immediately close when using the new UNIFIED_ASC_AUTH_UI.

        This change encodes/decodes challenge in PublicKeyCredentialRequestOptions.
        Before this field was not used after xpc, but with the new UNIFIED_ASC_AUTH_UI it is.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        Use challengeVector instead of challenge as it's available after being passed via xpc.

2021-11-08  Devin Rousso  <drousso@apple.com>

        [Payment Request] Add a new payment method for showing AMS UI
        https://bugs.webkit.org/show_bug.cgi?id=232634
        <rdar://problem/79024227>

        Reviewed by Tim Horton.

        Leverage the W3C Payment Request API as a way for Apple domains to show alternate native
        payment UIs without having to add new proprietary APIs (e.g. Apple Pay JS). This new payment
        method is quite bare-bones in that it just takes some JSON and passes it to AMS, which then
        decides what UI to show based on that. No data is exposed back to the page other than either
        an error or a yes/no as to whether the payment was successful.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::startApplePayAMSUISession): Added.
        (WebKit::WebChromeClient::abortApplePayAMSUISession): Added.
        Add plumbing between WebCore/WebProcess and UIProcess.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::startApplePayAMSUISession): Added.
        (WebKit::WebPageProxy::abortApplePayAMSUISession): Added.
        Use AMS to present UI for the given engagement request data and originating URL.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::presentingViewController):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::presentingViewController):
        Add support for `-[WKUIDelegatePrivate _presentingViewControllerForWebView:]` on macOS too.

        * Platform/spi/Cocoa/AppleMediaServicesSPI.h: Added.
        * Platform/spi/Cocoa/AppleMediaServicesUISPI.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

2021-11-08  Alex Christensen  <achristensen@webkit.org>

        Parse redirect and modify-headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232838

        Reviewed by Tim Hatcher.

        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::compileContentRuleList):

2021-11-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GLIB][SOUP] Unify memoryPressureMonitorDisabled implementation
        https://bugs.webkit.org/show_bug.cgi?id=232706

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Add missing OS(LINUX) guard
        around MemoryPressureMonitor.

2021-11-08  Per Arne  <pvollan@apple.com>

        [macOS][GPUP] Remove sandbox read access to files
        https://bugs.webkit.org/show_bug.cgi?id=232245
        <rdar://problem/84617482>

        Reviewed by Brent Fulgham.

        Based on telemetry, remove sandbox read access to files in the GPU process on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-11-08  Brent Fulgham  <bfulgham@apple.com>

        Add additional mach message filter 
        https://bugs.webkit.org/show_bug.cgi?id=232819
        <rdar://84827214>

        Reviewed by Per Arne Vollan.

        Add support for an additional mach message trap endpoint when available. I also
        adjusted some whitespace to make the rules easier for me to follow.

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

2021-11-08  Per Arne Vollan <pvollan@apple.com>

        [macOS][GPUP] Remove access in sandbox to com.apple.audio.AudioComponentRegistrar
        https://bugs.webkit.org/show_bug.cgi?id=231694
        <rdar://75225923>

        Reviewed by Brent Fulgham.

        After https://trac.webkit.org/changeset/274435/webkit, there is no need to allow access to this service. This patch also implements sending
        the Audio component registrations to the GPU process, which is a requirement before blocking the service in the GPU process.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/cocoa/GPUProcessCocoa.mm:
        (WebKit::GPUProcess::consumeAudioComponentRegistrations):
        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Shared/Cocoa/AudioComponentRegistration.cpp: Added.
        (WebKit::consumeAudioComponentRegistrations):
        * Shared/Cocoa/AudioComponentRegistration.h: Added.
        (WebKit::sendAudioComponentRegistrations):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::revokeAudioCaptureExtension):
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKSyntheticTapGestureRecognizer's action targets should be weak pointers
        https://bugs.webkit.org/show_bug.cgi?id=232812

        Reviewed by Tim Horton.

        Make WKSyntheticTapGestureRecognizer robust against the case where it outlives its WKContentView, by making its
        "reset", "gesture identified", and "gesture failed" targets weak pointers instead of raw pointers.

        * UIProcess/ios/WKSyntheticTapGestureRecognizer.mm:
        (-[WKSyntheticTapGestureRecognizer lastTouchedScrollView]):

        Drive-by fix: we can also make `_lastTouchedScrollView` use the __weak ivar attribute instead of WeakObjCPtr,
        now that __weak is enabled in WebKit2.

2021-11-08  Devin Rousso  <drousso@apple.com>

        webView.scrollView.indicatorStyle does not work on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=232295
        <rdar://problem/82816423>

        Reviewed by Wenson Hsieh.

        Keep track of whether the `backgroundColor` and/or `indicatorStyle` of the `WKScrollView`
        has been set by the `WKWebView` owner/client. If so, don't allow the `WKWebView` to override
        it when it updates. Clients can opt-out of this "override prevention" by setting to `nil`
        and `UIScrollViewIndicatorStyleDefault` respectively.

        Tests: WKScrollViewTests.IndicatorStyleSetByClient
               WKScrollViewTests.BackgroundColorSetByClient

        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setBackgroundColor:]): Added.
        (-[WKScrollView _setBackgroundColorInternal:]): Added.
        (-[WKScrollView setIndicatorStyle:]): Added.
        (-[WKScrollView _setIndicatorStyleInternal:]): Added.

        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _resetCachedScrollViewBackgroundColor]): Added.
        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _updateScrollViewIndicatorStyle]): Added.
        (-[WKWebView _processDidExit]):

2021-11-08  Per Arne Vollan <pvollan@apple.com>

        Unify sandbox rules for diagnostic services
        https://bugs.webkit.org/show_bug.cgi?id=232207
        <rdar://problem/84582424>

        Reviewed by Darin Adler.

        In the WebContent process, we only allow access to diagnostic services for internal builds. We should do the same in all WebKit sandboxes.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::isInternalInstall): Deleted.
        (WebKit::diagnosticServices): Deleted.
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/com.apple.WebProcess.sb.in:

2021-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enabling "media source inline painting" by default should work when using GPU Process for media
        https://bugs.webkit.org/show_bug.cgi?id=232802

        Reviewed by Eric Carlson.

        Propagate the bit for `MediaSourceInlinePaintingEnabled` over to the GPU process when updating preferences in
        GPUProcessProxy.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::setMediaSourceInlinePaintingEnabled):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::updatePreferences):

        Also, add a couple of FIXMEs here. Note that due to the latter FIXME, this change *still* doesn't allow us to
        turn on media source inline painting when using GPU process for media by simply toggling the feature in user
        defaults or through UI. This is because preferences on WebPageGroups are not modified when changing experimental
        feature user defaults, so logic that iterates through all page groups and looks at preferences will still only
        get the default value of each feature flag (as defined in the yaml file).

2021-11-08  Kate Cheney  <katherine_cheney@apple.com>

        trustd network connections occasionally omitted from App Privacy report
        https://bugs.webkit.org/show_bug.cgi?id=232770
        <rdar://problem/83840427>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (NetworkSessionCocoa::setClientAuditToken):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):

2021-11-08  Andres Gonzalez  <andresg_22@apple.com>

        WTR::AccessibilityController::focusedElement() cannot get the focused object via WKAccessibilityFocusedObject in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=232756
        <rdar://problem/85069882>

        Reviewed by Chris Fleizach.

        WTR::AccessibilityController::focusedElement() was getting the focused
        object from WKAccessibilityFocusedObject, which has to run on the main
        thread. WKAccessibilityFocusedObject was in turn calling AXObjectCache::
        focusedUIElementForPage that tried to return the isolated focused
        object. The problem with this is that the isolated focused object can
        only be retrieved on the secondary thread.
        The solution in this patch is to retrieve the focused object from the
        root object as an AT client would do.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityFocusedObject):
        Now uses AXObjectCache::focusedObejctForPage().

2021-11-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/media-stream-video-track-interrupted.html is failing since added in 242093@main
        https://bugs.webkit.org/show_bug.cgi?id=231057

        Reviewed by Xabier Rodriguez-Calvar.

        Wire up mock camera interruption IPC support in WPE/GTK.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMockCameraIsInterrupted):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMockCameraIsInterrupted):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMockCameraIsInterrupted):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-11-06  Simon Fraser  <simon.fraser@apple.com>

        WheelEventDeltaFilter::shouldApplyFilteringForEvent can be a static function
        https://bugs.webkit.org/show_bug.cgi?id=232786

        Reviewed by Wenson Hsieh.
        
        This function just looks at event phase. It can be static.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

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

        Simplify code that makes use of WheelEventDeltaFilter
        https://bugs.webkit.org/show_bug.cgi?id=232536

        Reviewed by Wenson Hsieh.

        Push the decision about which kinds of wheel events to apply filtering to down into
        WheelEventDeltaFilter, which simplifies call sites.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):

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

        [iOS] IPC decoder for ResourceRequest loses systemPreviewInfo when there is platform data
        https://bugs.webkit.org/show_bug.cgi?id=232769

        Reviewed by Wenson Hsieh.

        The IPC decoder for ResourceRequest decodes systemPreviewInfo and sets it on the ResourceRequest.
        It then uses different code paths to decode the rest of the ResourceRequest based on whether or not
        there is underlying platform data. If there is underlying platform data, we call decodePlatformData()
        which creates a brand-new ResourceRequest, and thus loses the systemPreviewInfo we've just set.

        To address the issue, we now decode extra data members *after* decoding platform data instead of
        *before*.

        This was causing the ProcessSwap.SameOriginSystemPreview API test to fail on iOS with the patch for
        Bug 231727.

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

2021-11-05  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll bar mode an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232651

        Reviewed by Simon Fraser.

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

2021-11-05  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scroll elasticity an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232646

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setEnableVerticalRubberBanding):
        (WebKit::WebPage::setEnableHorizontalRubberBanding):

2021-11-05  Devin Rousso  <drousso@apple.com>

        [css-values-4] viewport units should be floats
        https://bugs.webkit.org/show_bug.cgi?id=231644
        <rdar://problem/84172685>

        Reviewed by Tim Horton.

        Views can be fractional pixels wide. We should not round, especially since viewport units
        are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport").

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

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

        * Shared/WebPageCreationParameters.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewportSizeForCSSViewportUnits):
        (WebKit::WebPage::viewportSizeForCSSViewportUnits const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):

2021-11-04  Jean-Yves Avenard  <jya@apple.com>

        Have RemoteMediaResource use SharedMemory
        https://bugs.webkit.org/show_bug.cgi?id=232744
        rdar://85045948

        Reviewed by Alex Christensen.

        When playing a non-mse media element, the loading gets initiated in the
        GPU Process and proxied to the WebContent process via a RemoteMediaResource.
        By using a SharedBuffer in the RemoteMediaResource wrapping a SharedMemory
        we can allocate the buffer in the content process and pass it to the GPU
        process without copy nor new allocations.
        Playing a 694MB mp4, the GPU memory usage goes from 868MB to 14MB on an
        iPhone running iOS 15.
        This is a follow-up on bug 232422, what landed was missing this part.

        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::dataReceived):
        * GPUProcess/media/RemoteMediaResource.h:
        * GPUProcess/media/RemoteMediaResourceManager.cpp:
        (WebKit::RemoteMediaResourceManager::dataReceived): Wrap SharedMemory into
        a SharedBuffer.
        * GPUProcess/media/RemoteMediaResourceManager.h:
        * GPUProcess/media/RemoteMediaResourceManager.messages.in: Change data type
        from an IPCDataReference to a ShareMemory's handle.
        * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:
        (WebKit::RemoteMediaResourceProxy::dataReceived): Allocate a SharedMemory
        and copy the download data into it, before sending it to the GPU process.

2021-11-04  Dean Jackson  <dino@apple.com>

        REGRESSION: AR Quicklook asset is shared instead of page URL
        https://bugs.webkit.org/show_bug.cgi?id=232674
        rdar://84220997

        Reviewed by Antoine Quint.

        There was a typo. ENABLE(ARKIT_QUICK_LOOK_PREVIEW_ITEM)
        should be HAVE(ARKIT_QUICK_LOOK_PREVIEW_ITEM).

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:

2021-11-04  Nikolaos Mouchtaris  <nmouchtaris@apple.com>

        Make scrollbar orientation an enum class
        https://bugs.webkit.org/show_bug.cgi?id=232648

        Reviewed by Simon Fraser.

        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updateScrollbars):
        (WebKit::PDFPlugin::createScrollbar):
        (WebKit::PDFPlugin::destroyScrollbar):
        (WebKit::PDFPlugin::destroy):

2021-11-04  Aditya Keerthi  <akeerthi@apple.com>

        Crash when opening and closing color picker while resetting form
        https://bugs.webkit.org/show_bug.cgi?id=232689
        rdar://84979791

        Reviewed by Simon Fraser.

        Resetting a <form> element containing an <input type=color> resets
        the value of the color input. If the WebProcess believes that a
        color picker is visible in the UIProcess, an IPC message
        (WebPageProxy_SetColorPickerColor) is sent to the UIProcess to update
        the selected color.

        If the color picker is closed by user action (on macOS, clicking
        outside the popover), the UIProcess nulls out `m_colorPicker`, and
        notifies the WebProcess that the color picker is no longer visible
        by sending the WebPage_DidEndColorPicker message.

        Consequently, it is possible for WebPageProxy_SetColorPickerColor to be
        dispatched in the UIProcess after `m_colorPicker` is nulled out, while
        the WebProcess is still waiting to process WebPage_DidEndColorPicker.
        This sequence of events results in a MESSAGE_CHECK failure in
        WebPageProxy::setColorPickerColor, leading to WebProcess termination.

        To fix, remove the MESSAGE_CHECK and replace it with a null check, since
        a null `m_colorPicker` is a valid state.

        Test: fast/forms/color/color-input-reset-crash.html

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

2021-11-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Implement add/remove_virtual_authenticator for transport=internal
        https://bugs.webkit.org/show_bug.cgi?id=232635
        <rdar://problem/84942173>

        Reviewed by Brent Fulgham.

        This change implements much of the plumbing needed to call the virtual authenticator
        commands from safaridriver. The idea is that virtual authenticators are added via
        the add_virtual_authenticator call, which replaces the default AuthenticatorManager
        with a VirtualAuthenticatorManager similar to how we do it for mocks. Then the
        VirtualService will create the virtual connections for authenticators as nessesary
        to make webauthn calls within WebDriver based tests.

        Tested manually via safaridriver.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::toAuthenticatorTransport):
        (WebKit::WebAutomationSession::removeVirtualAuthenticator):
        (WebKit::WebAutomationSession::addVirtualAuthenticatorCredential):
        (WebKit::WebAutomationSession::removeVirtualAuthenticatorCredential):
        (WebKit::WebAutomationSession::removeAllVirtualAuthenticatorCredentials):
        (WebKit::WebAutomationSession::setVirtualAuthenticatorUserVerified):
        * UIProcess/Automation/WebAutomationSession.h:
        Plumbing to call from safaridriver
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        (WebKit::AuthenticatorManager::isVirtual const):
        * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorConfiguration.h: Added.
        * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.cpp: Added.
        (WebKit::VirtualAuthenticatorManager::VirtualAuthenticatorManager):
        (WebKit::VirtualAuthenticatorManager::createAuthenticator):
        (WebKit::VirtualAuthenticatorManager::removeAuthenticator):
        (WebKit::VirtualAuthenticatorManager::createService const):
        Manages virtual authenticators, replaces the default manager when used similar to MockAuthenticatorManager.
        * UIProcess/WebAuthentication/Virtual/VirtualAuthenticatorManager.h: Added.
        * UIProcess/WebAuthentication/Virtual/VirtualLocalConnection.h: Added.
        * UIProcess/WebAuthentication/Virtual/VirtualLocalConnection.mm: Added.
        (WebKit::VirtualLocalConnection::VirtualLocalConnection):
        (WebKit::VirtualLocalConnection::verifyUser):
        (WebKit::VirtualLocalConnection::getAttestation const):
        (WebKit::VirtualLocalConnection::filterResponses const):
        * UIProcess/WebAuthentication/Virtual/VirtualService.h: Added.
        * UIProcess/WebAuthentication/Virtual/VirtualService.mm: Added.
        (WebKit::VirtualService::VirtualService):
        (WebKit::VirtualService::createVirtual):
        (WebKit::VirtualService::startDiscoveryInternal):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::virtualAuthenticatorManager):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-11-04  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r285077) [GLIB] 'MemoryPressureMonitor' has not been declared
        https://bugs.webkit.org/show_bug.cgi?id=232706

        Unreviewed non-linux build fix.

        MemoryPressureMonitor is only available on Linux, so its usage should
        be guarded, like WebProcessPool.cpp does when starting it.

        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize): Add OS(LINUX) guard.
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.

2021-11-04  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Update IOKit message filters for later iOS releases
        https://bugs.webkit.org/show_bug.cgi?id=232681
        <rdar://problem/78779102>

        Reviewed by Per Arne Vollan.

        Now that method ordinals have stabilized, we can re-enable message filtering
        in our trunk builds.

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

2021-11-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r285228.
        https://bugs.webkit.org/show_bug.cgi?id=232704

        Broke iOS builds

        Reverted changeset:

        "REGRESSION: AR Quicklook asset is shared instead of page URL"
        https://bugs.webkit.org/show_bug.cgi?id=232674
        https://commits.webkit.org/r285228

2021-11-03  Jer Noble  <jer.noble@apple.com>

        [macOS] MediaSession coordinator enabled in UIProcess, disabled in WebContent
        https://bugs.webkit.org/show_bug.cgi?id=232687
        <rdar://84990898>

        Reviewed by Eric Carlson.

        The default value of defaultMediaSessionCoordinatorEnabled() will be true if the UIProcess has
        the correct entitlement. However, this value is not passed across the XPC boundary unless it has
        been overridden, which means defaultMediaSessionCoordinatorEnabled() will control the setting
        in the WebContent process, which is not entitled.

        Have the WebContent process check its parent process's entitlement rather than its own when
        determining the default value for defaultMediaSessionCoordinatorEnabled().

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultMediaSessionCoordinatorEnabled):

2021-11-03  Tyler Wilcock  <tyler_w@apple.com>

        AX: WKAccessibilityWebPageObjectMac.mm should expose accessibilityChildrenInNavigationOrder and NSAccessibilityChildrenInNavigationOrderAttribute
        https://bugs.webkit.org/show_bug.cgi?id=232654

        Reviewed by Chris Fleizach.

        Some clients expect accessibilityChildrenInNavigationOrder and 
        NSAccessibilityChildrenInNavigationOrderAttribute to be available,
        and WKAccessibilityWebPageObjectMac didn't expose them.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityChildrenInNavigationOrder]): Added.
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        Handle NSAccessibilityChildrenInNavigationOrderAttribute.
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames:]):
        Add NSAccessibilityChildrenInNavigationOrderAttribute.

2021-11-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Rendering backend may stop processing IPC stream messages after a sync message timeout
        https://bugs.webkit.org/show_bug.cgi?id=232580

        Reviewed by Tim Horton.

        Currently, it's possible for sync IPC messages that are sent through IPC streams to time out and subsequently
        cause the IPC stream server (e.g. RemoteRenderingBackend) to stop processing IPC stream messages altogether. The
        following example illustrates how this might happen:

        1.      Web process sends the sync message at offset `n` (relative to the start of the ring buffer).
                Web process then begins to wait for the sync stream response under `tryAcquireAll()`.

        2.      GPU process receives the sync message, and takes a while (> 1 sec.) attempting to dispatch it.

        3.      Meanwhile in the web process, we hit the IPC timeout and bail from `tryAcquireAll()`. The client offset
                is still at `n`. Shortly afterwards, the web process tries to send a regular stream message, calling
                `tryAcquire()` and waiting for the client semaphore to be signaled.

        4.      The GPU process finally finishes dispatching the sync message from (2), sends a sync reply (unaware that
                the web process has already given up waiting), and finally calls `releaseAll()`, signaling the client
                semaphore. The server offset is then reset back to 0.

        5.      The web process finishes waiting, returns from `tryAcquire()`, proceeds to write the new stream
                message after offset `n`, and wakes up the GPU process with the intention of handling this message.

        6.      The GPU process wakes up and begins reading from offset 0. The first message it encounters is the
                `SyncMessageReply` it just wrote in step (4), and subsequently bails from the processing loop because it
                isn't capable of dispatching this message (which was meant to be consumed in the web process in the
                first place).

        In summary, the sync IPC timeout causes us to enter a state where the web process continues to encode messages
        at the buffer offset prior to timeout (i.e. offset `n`), while the GPU process is reading from the start of the
        buffer (offset `0`). To avoid this, simply replace the timeouts when synchronously grabbing image data from the
        GPU process. This ensures that we're never in a state where we're continuing to send stream messages to a
        rendering backend connection stream after timing out when waiting for a previous sync message to that stream to
        finish.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetPixelBuffer):
        (WebKit::RemoteRenderingBackendProxy::waitForGetPixelBufferToComplete):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

2021-11-03  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelElementDidCreatePreview):

2021-11-03  Dean Jackson  <dino@apple.com>

        REGRESSION: AR Quicklook asset is shared instead of page URL
        https://bugs.webkit.org/show_bug.cgi?id=232674
        rdar://84220997

        Reviewed by Antoine Quint.

        There was a typo. ENABLE(ARKIT_QUICK_LOOK_PREVIEW_ITEM)
        should be HAVE(ARKIT_QUICK_LOOK_PREVIEW_ITEM).

        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:

2021-11-03  Chris Dumez  <cdumez@apple.com>

        Clicking a link should preconnect to destination as first party
        https://bugs.webkit.org/show_bug.cgi?id=232668

        Reviewed by Alex Christensen.

        Clicking a link should preconnect to destination as first party, not third-party. Otherwise, the
        preconnect is wasted when session isolation based on registrable domain is enabled. This is a
        follow-up to r284730.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Network/WebLoaderStrategy.h:

2021-11-03  Jer Noble  <jer.noble@apple.com>

        [Catalina] HLS streams will not select HDR variants when GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=232671
        <rdar://84686676>

        Reviewed by Eric Carlson.

        Tested manually.

        In Catalina, fall back to a MediaToolbox API for setting a global HDR override in the GPU
        process which instructs all AVPlayer instances whether HDR playback is supported for the
        current set of displays. Pass the required data across from the UIProcess to the GPU process
        at process start up and when the displays are reconfigured.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/mac/GPUProcessMac.mm:
        (WebKit::GPUProcess::setScreenProperties):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::setScreenProperties):
        (WebKit::GPUProcessProxy::updatePreferences):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::screenPropertiesStateChanged):
        (WebKit::displayReconfigurationCallBack):

2021-11-03  David Kilzer  <ddkilzer@apple.com>

        Leak of UUID in WebKit::ModelElementController::modelElementDidCreatePreview()
        <https://webkit.org/b/232628>
        <rdar://problem/84935290>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelElementDidCreatePreview):
        - Use adoptNS() to fix the leak.

2021-11-03  Kate Cheney  <katherine_cheney@apple.com>

        [iOS] Need API for marking file requests as non-app-initiated
        https://bugs.webkit.org/show_bug.cgi?id=232506
        <rdar://problem/84824703>

        Reviewed by Brent Fulgham.

        Pass app initiated value through to the WebPage so file loads
        can be attributed correctly.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadFileRequest:allowingReadAccessToURL:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebPageProxy.h:

2021-11-02  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes early November 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=232589

        Unreviewed non-unified build fixes.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
        (WebKit::GPUProcess::webProcessConnection const):
        (WebKit::GPUProcess::updateCaptureAccess):
        (WebKit::GPUProcess::updateCaptureOrigin):
        (WebKit::GPUProcess::nowPlayingManager):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:

2021-11-02  Chris Dumez  <cdumez@apple.com>

        Crash under WebPage::sendCOEPCORPViolation()
        https://bugs.webkit.org/show_bug.cgi?id=232631
        <rdar://84919898>

        Reviewed by Alex Christensen.

        Add missing null checks for the frame after calling `WebProcess::singleton().webFrame(frameID)`.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendCOEPPolicyInheritenceViolation):
        (WebKit::WebPage::sendCOEPCORPViolation):
        (WebKit::WebPage::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebKit::WebPage::sendViolationReportWhenNavigatingAwayFromCOOPResponse):

2021-11-02  Sihui Liu  <sihui_liu@apple.com>

        Terminate unresponsive network process by crashing it
        https://bugs.webkit.org/show_bug.cgi?id=232603

        Reviewed by Chris Dumez.

        UI process currently kills network process when it does not respond message in some time (network process being 
        unresponsive). We've found one common case where network process becomes unresponsive is that it is blocked by 
        some slow operation on the main thread (like file operation in rdar://84511633). To understand what the 
        operations are and make a fix, we now ask network process to crash itself on IPC thread. In this way, we can get 
        crash report that includes the call stack of the main thread. To avoid generating too many crash reports, we 
        only send the crash message to network process when it becomes unresponsive multiple times in a short time 
        period.

        * Platform/IPC/Connection.cpp:
        (IPC::terminateDueToIPCTerminateMessage):
        (IPC::Connection::processIncomingMessage):
        * Scripts/webkit/model.py:
        * Scripts/webkit/tests/MessageNames.cpp:
        (IPC::description):
        (IPC::receiverName):
        (IPC::isValidMessageName):
        * Scripts/webkit/tests/MessageNames.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::shouldTerminateNetworkProcessBySendingMessage):
        (WebKit::NetworkProcessProxy::didBecomeUnresponsive):

2021-11-02  Kate Cheney  <katherine_cheney@apple.com>

        PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
        https://bugs.webkit.org/show_bug.cgi?id=228104
        <rdar://problem/80991209>

        Reviewed by John Wilander.

        firePendingAttributionRequests() was sometimes scheduling the next timer
        fire to be the raw time value instead of the difference between now
        and the scheduled send time. This was resulting in some reports not being
        sent within the 24-48 hour range.

        To test this, this patch removes the immediate timer fire for testing
        and instead sets the earliest time to send values to both be 1 second.
        This will test that the proper timer gets set to send both reports.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::attributePrivateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::startTimer):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::randomlyBetweenFifteenAndThirtyMinutes const):
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        In the case of both times being past due to report, schedule one for
        15 - 30 minutes later.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:

2021-11-02  Simon Fraser  <simon.fraser@apple.com>

        Revert the wheel event coalescing added in r277587
        https://bugs.webkit.org/show_bug.cgi?id=232602
        <rdar://84908023>

        Reviewed by Wenson Hsieh.

        This wheel event coalescing was added to allow the tail end of momentum scrolls on
        120Hz devices to fall back to 60fps for power reasons. However, the OS does this for
        us, so we don't need to do our own coalescing.

        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::shouldDispatchEvent):
        (WebKit::WebWheelEventCoalescer::isMomentumPhaseEvent): Deleted.
        * Shared/WebWheelEventCoalescer.h:
        (WebKit::WebWheelEventCoalescer::shouldCoalesceEventsDuringDeceleration const): Deleted.
        (WebKit::WebWheelEventCoalescer::setShouldCoalesceEventsDuringDeceleration): Deleted.
        (): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wheelEventCoalescer):
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::WebPageProxy::shouldCoalesceWheelEventsDuringDeceleration const): Deleted.
        * UIProcess/WebPageProxy.h:

2021-11-02  Patrick Angle  <pangle@apple.com>

        WebDriver: [Cocoa] support `acceptInsecureCerts` capability
        https://bugs.webkit.org/show_bug.cgi?id=231789

        Reviewed by BJ Burg.

        Add necessary plumbing to support the `acceptInsecureCerts` WebDriver capability.

        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.h:
        * UIProcess/API/Cocoa/_WKAutomationSessionConfiguration.mm:
        (-[_WKAutomationSessionConfiguration init]):
        (-[_WKAutomationSessionConfiguration copyWithZone:]):
        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::requestAutomationSession):

2021-11-02  Kate Cheney  <katherine_cheney@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=232593
        Remove isAppInitiated from _WKSessionState

        Reviewed by Brent Fulgham.

        After https://bugs.webkit.org/show_bug.cgi?id=232486 we no longer need
        the isAppInitiated value on _WKSessionState. It will be set
        automatically when session state is retrieved.

        No new tests. Confirmed by existing RestoreFromSessionState* API
        tests.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _restoreSessionState:andNavigate:]):
        * UIProcess/API/Cocoa/_WKSessionState.h:
        * UIProcess/API/Cocoa/_WKSessionState.mm:
        (-[_WKSessionState _sessionStateWithAppInitiatedValue]): Deleted.
        * UIProcess/API/Cocoa/_WKSessionStateInternal.h:

2021-11-02  Chris Dumez  <cdumez@apple.com>

        Use higher QoS for WheelEvent and DisplayWasRefreshed IPCs
        https://bugs.webkit.org/show_bug.cgi?id=232458
        <rdar://82657744>

        Reviewed by Simon Fraser.

        Use higher QoS for WheelEvent and DisplayWasRefreshed IPCs since those are high priority. The
        UIProcess's main thread has high UserInteractive QoS but the IPC thread has a lower QoS by default.

        We cannot raise the QoS of the IPC thread without regressing some performance benchmarks since not
        all IPC is high priority.

        Making this change helps with responsiveness under heavy load scenarios.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):

2021-11-02  Zixing Liu  <liushuyu011@gmail.com>

        [GTK][WPE] Support setting status code and getting HTTP method in custom URI scheme handlers
        https://bugs.webkit.org/show_bug.cgi?id=231880

        Reviewed by Carlos Garcia Campos.

        * SourcesGTK.txt: Added WebKitURISchemeResponse.cpp
        * SourcesWPE.txt: Added WebKitURISchemeResponse.cpp
        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_get_http_method): Added new API function
        (webkit_uri_request_finish_with_response): Added new API function
        * UIProcess/API/glib/WebKitURISchemeRequestPrivate.h:  Added.
        * UIProcess/API/glib/WebKitURISchemeResponse.cpp: Added.
        (webkit_uri_scheme_response_class_init): Added init function for the new type
        (webkit_uri_scheme_response_new): Added new API function
        (webkit_uri_scheme_response_set_status): Added new API function
        (webkit_uri_scheme_response_set_content_type): Added new API function
        * UIProcess/API/glib/WebKitURISchemeResponsePrivate.h: Copied from Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequestPrivate.h.
        * UIProcess/API/gtk/WebKitAutocleanups.h: Register clean-up function for WebkitURISchemeResponse
        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Added function prototype for 
        webkit_uri_scheme_request_get_http_method
        * UIProcess/API/gtk/WebKitURISchemeResponse.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new symbols and new types
        * UIProcess/API/gtk/webkit2.h: Include a new header: WebKitURISchemeResponse.h
        * UIProcess/API/wpe/WebKitURISchemeRequest.h: Added function prototype for 
        webkit_uri_scheme_request_get_http_method
        * UIProcess/API/gtk/WebKitURISchemeResponse.h: Added.
        * UIProcess/API/wpe/webkit.h: Include a new header: WebKitURISchemeResponse.h
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Added new symbols and new types

2021-11-01  Michael[tm] Smith  <mike@w3.org>

        [WebInspector][CORS] Show HTTP status code in CORS messages.
        https://bugs.webkit.org/show_bug.cgi?id=231928

        Reviewed by Darin Adler

        Make the HTTP status be included in all CORS messages that might
        get logged to the Inspector console when a 4xx or 5xx error occurs.
        That means these:

        * Failed to load resource: Origin foo is not allowed by
        Access-Control-Allow-Origin

        * Failed to load resource: Preflight response is not successful

        The change makes those messages read as follows (in the case of,
        for example, a 500 error):

        * Failed to load resource: Origin foo is not allowed by
        Access-Control-Allow-Origin. Status code: 500

        * Failed to load resource: Preflight response is not successful.
        Status code: 500

        Tests: Updates 100+ existing tests, by changing expected messages.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):

2021-11-01  Chris Dumez  <cdumez@apple.com>

        Avoid heap-allocating ImportanceAssertion
        https://bugs.webkit.org/show_bug.cgi?id=232579

        Reviewed by Alex Christensen.

        Avoid heap-allocating ImportanceAssertion since this is just a wrapper around a
        mach_port.

        Also update the ImportanceAssertion destructor to null out the mach port as
        hardening given <rdar://75139294>.

        * Platform/IPC/Decoder.cpp:
        (IPC::Decoder::setImportanceAssertion):
        * Platform/IPC/Decoder.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/cocoa/ImportanceAssertion.h:
        (IPC::ImportanceAssertion::ImportanceAssertion):
        (IPC::ImportanceAssertion::operator=):
        (IPC::ImportanceAssertion::~ImportanceAssertion):

2021-11-01  Per Arne  <pvollan@apple.com>

        [macOS] Opening local html files is failing
        https://bugs.webkit.org/show_bug.cgi?id=232572
        <rdar://81330442>

        Reviewed by Brent Fulgham.

        On some macOS versions, opening local html files is failing. In order for the WebContent process
        to successfully issue the file extension to the Networking process, the flags for the extension
        in the WebContent process must include the user intent flag when the extension is issued with an
        audit token.

        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):

2021-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Enable gpu_process_canvas_rendering and gpu_process_webgl by default
        https://bugs.webkit.org/show_bug.cgi?id=232555

        Reviewed by Don Olmstead.

        They can be disabled by the registry.

        > reg add HKEY_CURRENT_USER\Software\WebKit /v gpu_process_canvas_rendering /t REG_DWORD /d 0 /f
        > reg add HKEY_CURRENT_USER\Software\WebKit /v gpu_process_webgl /t REG_DWORD /d 0 /f

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultUseGPUProcessForCanvasRenderingEnabled):
        (WebKit::defaultUseGPUProcessForWebGLEnabled):
        * Shared/win/WebPreferencesDefaultValuesWin.cpp:
        (WebKit::isFeatureFlagEnabled):

2021-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        HashMap<GraphicsContextGLIdentifier, IPC::ScopedActiveMessageReceiveQueue<RemoteGraphicsContextGL>>::get can't compile
        https://bugs.webkit.org/show_bug.cgi?id=232554

        Reviewed by Kimmo Kinnunen.

        Because IPC::ScopedActiveMessageReceiveQueue didn't have own
        HashTraits, it used GenericHashTraits. So, HashMap::get tried to
        return PeekType, that was ScopedActiveMessageReceiveQueue. But, it
        couldn't construct ScopedActiveMessageReceiveQueue from "const
        ScopedActiveMessageReceiveQueue&".

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::findRemoteGraphicsContextGL):
        Use get() instead of find().
        * Platform/IPC/ScopedActiveMessageReceiveQueue.h: Added HashTraits for it.

2021-11-01  Brady Eidson  <beidson@apple.com>

        webpushd: Add mock in-memory registration, and the WKWebsiteDataStore SPI to manage them
        https://bugs.webkit.org/show_bug.cgi?id=232539

        Reviewed by Alex Christensen.

        Covered by API test.
        
        The old SPI to ask the client if notifications should be allowed will remain.
        
        Assuming the client okays notifications, in the case of built-in notifications, the *actual*
        registration interaction with the system will take place as an additional step in webpushd
        
        This patch:
        - Adds in-memory notification registration for webpushd
        - Adds SPI to WKWebsiteDataStore to manage registrations
        - Tests the SPI
        
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deletePushAndNotificationRegistration):
        (WebKit::NetworkProcess::getOriginsWithPushAndNotificationPermissions):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::notificationManager):

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::requestSystemNotificationPermission):
        (WebKit::NetworkNotificationManager::deletePushAndNotificationRegistration):
        (WebKit::NetworkNotificationManager::getOriginsWithPushAndNotificationPermissions):
        (WebKit::ReplyCaller<bool>::callReply):
        (WebKit::ReplyCaller<Vector<String>::callReply):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:

        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::create):

        * Shared/Notifications/NotificationManagerMessageHandler.h:
        * Shared/Notifications/NotificationManagerMessageHandler.messages.in:

        * Shared/WebPushDaemonConstants.h:
        (WebKit::WebPushD::messageTypeSendsReply):

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _deletePushAndNotificationRegistration:completionHandler:]):
        (-[WKWebsiteDataStore _getOriginsWithPushAndNotificationPermissions:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deletePushAndNotificationRegistration):
        (WebKit::NetworkProcessProxy::getOriginsWithPushAndNotificationPermissions):
        * UIProcess/Network/NetworkProcessProxy.h:

        * UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp:
        (WebKit::WebNotificationManagerMessageHandler::requestSystemNotificationPermission):
        * UIProcess/Notifications/WebNotificationManagerMessageHandler.h:

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):

        * webpushd/WebPushDaemon.h:
        * webpushd/WebPushDaemon.mm:
        (WebPushD::MessageInfo::getOriginsWithPushAndNotificationPermissions::encodeReply):
        (WebPushD::MessageInfo::deletePushAndNotificationRegistration::encodeReply):
        (WebPushD::MessageInfo::requestSystemNotificationPermission::encodeReply):
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::requestSystemNotificationPermission):
        (WebPushD::Daemon::getOriginsWithPushAndNotificationPermissions):
        (WebPushD::Daemon::deletePushAndNotificationRegistration):

2021-11-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        GPU process WebKit logging is not initialised
        https://bugs.webkit.org/show_bug.cgi?id=232563

        Reviewed by Chris Dumez.

        The file was not including LogInitialization.h.
        "using namespace WebCore" caused
        WebKit::logChannels() to mean WebCore::logChannels().

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):

2021-11-01  Sihui Liu  <sihui_liu@apple.com>

        Increase responsiveness timeout for network process
        https://bugs.webkit.org/show_bug.cgi?id=232505

        Reviewed by Chris Dumez.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::AuxiliaryProcessProxy):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::start):
        (): Deleted.
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):

2021-11-01  Tim Horton  <timothy_horton@apple.com>

        Add a testing preference to replay CG display lists manually
        https://bugs.webkit.org/show_bug.cgi?id=232566

        Reviewed by Wenson Hsieh.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::replayCGDisplayListsIntoBackingStore const):
        Plumb the preference through to _setWKContents.

        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h:
        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm:
        (-[WKCompositingLayer _setWKContents:withDisplayList:replayForTesting:]):
        (-[WKCompositingLayer drawInContext:]):
        (-[WKCompositingLayer _setWKContents:withDisplayList:]): Deleted.
        If the preference is set, store the display list instead of setting it on the layer,
        and call setNeedsDisplay, and then replay the display list in drawInContext.

2021-11-01  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285055.

        Reverting because this commit may have caused
        webgl/1.0.x/conformance/textures/misc/texture-corner-case-
        videos.html and webgl/2.0.y/conformance/textures/misc/texture-
        corner-case-videos.html to time out

        Reverted changeset:

        "Avoid sending video data to Web process for
        canvas.drawImage(video)"
        https://bugs.webkit.org/show_bug.cgi?id=230766
        https://commits.webkit.org/r285055

2021-11-01  Daniel Kolesa  <dkolesa@igalia.com>

        Fix build with GCC 8.4 on Ubuntu 18.04
        https://bugs.webkit.org/show_bug.cgi?id=232305

        Reviewed by Adrian Perez de Castro.

        Thes sections of the code trigger an internal compiler error with
        GCC 8.4, segfaulting the compiler. This adds a workaround that
        makes it work again.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):

2021-10-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] New GraphicsLayer for GPU process mode
        https://bugs.webkit.org/show_bug.cgi?id=228308

        Reviewed by Don Olmstead.

        Added a new GraphicsLayer implementation GraphicsLayerWC which
        transfers GraphicsLayer tree to GPU process and runs the
        compositor (TextureMapper) in GPU process.

        In GPU process mode, WebGL is run in GPU process. So, the
        compositor should be run in GPU process. Otherwise, the output
        texture of WebGL has to be transferred from GPU process to the
        compositor process (UI process or web process).

        Because ANGLE isn't thread-safe, the compositor and WebGL should
        be run in the same thread in GPU process.

        Enabling gpu_process_webgl also enables GPU process compositing now.
        > reg add HKEY_CURRENT_USER\Software\WebKit /v gpu_process_webgl /t REG_DWORD /d 1 /f

        gpu_process_canvas_rendering can also be enabled.
        > reg add HKEY_CURRENT_USER\Software\WebKit /v gpu_process_canvas_rendering /t REG_DWORD /d 1 /f

        Enabling gpu_process_dom_rendering is still experimental.
        > reg add HKEY_CURRENT_USER\Software\WebKit /v gpu_process_dom_rendering /t REG_DWORD /d 1 /f

        The following commands restore the non-GPU process mode.
        > reg delete HKEY_CURRENT_USER\Software\WebKit /v gpu_process_canvas_rendering /f
        > reg delete HKEY_CURRENT_USER\Software\WebKit /v gpu_process_webgl /f
        > reg delete HKEY_CURRENT_USER\Software\WebKit /v gpu_process_dom_rendering /f

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createWCLayerTreeHost):
        (WebKit::GPUConnectionToWebProcess::releaseWCLayerTreeHost):
        (WebKit::GPUConnectionToWebProcess::findRemoteGraphicsContextGL):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * GPUProcess/GPUProcess.h:
        (WebKit::GPUProcess::sharedSceneContext):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        (WebKit::RemoteGraphicsContextGL::platformLayer const):
        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.cpp:
        (WebKit::ScopedWebGLRenderingResourcesRequest::scheduleFreeWebGLRenderingResources):
        * GPUProcess/graphics/wc/RemoteWCLayerTreeHost.cpp: Added.
        (WebKit::RemoteWCLayerTreeHost::create):
        (WebKit::RemoteWCLayerTreeHost::RemoteWCLayerTreeHost):
        (WebKit::RemoteWCLayerTreeHost::~RemoteWCLayerTreeHost):
        (WebKit::RemoteWCLayerTreeHost::messageSenderConnection const):
        (WebKit::RemoteWCLayerTreeHost::messageSenderDestinationID const):
        (WebKit::RemoteWCLayerTreeHost::update):
        * GPUProcess/graphics/wc/RemoteWCLayerTreeHost.h: Added.
        * GPUProcess/graphics/wc/RemoteWCLayerTreeHost.messages.in: Added.
        * GPUProcess/graphics/wc/WCScene.cpp: Added.
        (WebKit::WCScene::initialize):
        (WebKit::WCScene::~WCScene):
        (WebKit::WCScene::update):
        * GPUProcess/graphics/wc/WCScene.h: Added.
        * GPUProcess/graphics/wc/WCSceneContext.cpp: Added.
        (WebKit::WCSceneContext::WCSceneContext):
        (WebKit::WCSceneContext::makeContextCurrent):
        (WebKit::WCSceneContext::createTextureMapper):
        (WebKit::WCSceneContext::swapBuffers):
        * GPUProcess/graphics/wc/WCSceneContext.h: Added.
        * GPUProcess/graphics/wc/WCSharedSceneContextHolder.h: Added.
        (WebKit::WCSharedSceneContextHolder::ensureHolderForWindow):
        (WebKit::WCSharedSceneContextHolder::removeHolder):
        * GPUProcess/win/GPUProcessMainWin.cpp:
        (WebKit::GPUProcessMain):
        * PlatformWin.cmake:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (conditions_for_header):
        * Shared/DrawingAreaInfo.h:
        * UIProcess/wc/DrawingAreaProxyWC.cpp: Added.
        (WebKit::DrawingAreaProxyWC::DrawingAreaProxyWC):
        (WebKit::DrawingAreaProxyWC::paint):
        (WebKit::DrawingAreaProxyWC::sizeDidChange):
        (WebKit::DrawingAreaProxyWC::update):
        (WebKit::DrawingAreaProxyWC::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyWC::incorporateUpdate):
        (WebKit::DrawingAreaProxyWC::discardBackingStore):
        * UIProcess/wc/DrawingAreaProxyWC.h: Added.
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::RemoteGraphicsContextGLProxy):
        * WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.cpp: Added.
        (WebKit::RemoteWCLayerTreeHostProxy::RemoteWCLayerTreeHostProxy):
        (WebKit::RemoteWCLayerTreeHostProxy::~RemoteWCLayerTreeHostProxy):
        (WebKit::RemoteWCLayerTreeHostProxy::messageSenderConnection const):
        (WebKit::RemoteWCLayerTreeHostProxy::ensureGPUProcessConnection):
        (WebKit::RemoteWCLayerTreeHostProxy::disconnectGpuProcessIfNeeded):
        (WebKit::RemoteWCLayerTreeHostProxy::gpuProcessConnectionDidClose):
        (WebKit::RemoteWCLayerTreeHostProxy::messageSenderDestinationID const):
        (WebKit::RemoteWCLayerTreeHostProxy::update):
        (WebKit::RemoteWCLayerTreeHostProxy::didUpdate):
        * WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.h: Added.
        (WebKit::RemoteWCLayerTreeHostProxy::wcLayerTreeHostIdentifier const):
        * WebProcess/GPU/graphics/wc/RemoteWCLayerTreeHostProxy.messages.in: Added.
        * WebProcess/GPU/graphics/wc/WCLayerTreeHostIdentifier.h: Added.
        * WebProcess/GPU/graphics/wc/WCPlatformLayerGCGL.h: Added.
        (WebKit::WCPlatformLayerGCGL::WCPlatformLayerGCGL):
        (WebKit::WCPlatformLayerGCGL::graphicsContextGLIdentifier):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::supportsGPUProcessRendering):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/wc/DrawingAreaWC.cpp: Added.
        (WebKit::DrawingAreaWC::DrawingAreaWC):
        (WebKit::DrawingAreaWC::~DrawingAreaWC):
        (WebKit::DrawingAreaWC::graphicsLayerFactory):
        (WebKit::DrawingAreaWC::updateRootLayers):
        (WebKit::DrawingAreaWC::setRootCompositingLayer):
        (WebKit::DrawingAreaWC::attachViewOverlayGraphicsLayer):
        (WebKit::DrawingAreaWC::setLayerTreeStateIsFrozen):
        (WebKit::DrawingAreaWC::updateGeometry):
        (WebKit::DrawingAreaWC::setNeedsDisplay):
        (WebKit::DrawingAreaWC::setNeedsDisplayInRect):
        (WebKit::DrawingAreaWC::scroll):
        (WebKit::DrawingAreaWC::triggerRenderingUpdate):
        (WebKit::flushLayerImageBuffers):
        (WebKit::DrawingAreaWC::isCompositingMode):
        (WebKit::DrawingAreaWC::updateRendering):
        (WebKit::DrawingAreaWC::sendUpdateAC):
        (WebKit::shouldPaintBoundsRect):
        (WebKit::DrawingAreaWC::sendUpdateNonAC):
        (WebKit::DrawingAreaWC::graphicsLayerAdded):
        (WebKit::DrawingAreaWC::graphicsLayerRemoved):
        (WebKit::DrawingAreaWC::commitLayerUpateInfo):
        (WebKit::DrawingAreaWC::createImageBuffer):
        (WebKit::DrawingAreaWC::didUpdate):
        (WebKit::DrawingAreaWC::RootLayerClient::RootLayerClient):
        (WebKit::DrawingAreaWC::RootLayerClient::paintContents):
        (WebKit::DrawingAreaWC::RootLayerClient::deviceScaleFactor const):
        * WebProcess/WebPage/wc/DrawingAreaWC.h: Added.
        * WebProcess/WebPage/wc/GraphicsLayerWC.cpp: Added.
        (WebKit::GraphicsLayerWC::GraphicsLayerWC):
        (WebKit::GraphicsLayerWC::~GraphicsLayerWC):
        (WebKit::GraphicsLayerWC::generateLayerID):
        (WebKit::GraphicsLayerWC::primaryLayerID const):
        (WebKit::GraphicsLayerWC::setNeedsDisplay):
        (WebKit::GraphicsLayerWC::setNeedsDisplayInRect):
        (WebKit::GraphicsLayerWC::setContentsNeedsDisplay):
        (WebKit::GraphicsLayerWC::setChildren):
        (WebKit::GraphicsLayerWC::addChild):
        (WebKit::GraphicsLayerWC::addChildAtIndex):
        (WebKit::GraphicsLayerWC::addChildBelow):
        (WebKit::GraphicsLayerWC::addChildAbove):
        (WebKit::GraphicsLayerWC::replaceChild):
        (WebKit::GraphicsLayerWC::removeFromParent):
        (WebKit::GraphicsLayerWC::setMaskLayer):
        (WebKit::GraphicsLayerWC::setReplicatedLayer):
        (WebKit::GraphicsLayerWC::setReplicatedByLayer):
        (WebKit::GraphicsLayerWC::setPosition):
        (WebKit::GraphicsLayerWC::setAnchorPoint):
        (WebKit::GraphicsLayerWC::setSize):
        (WebKit::GraphicsLayerWC::setBoundsOrigin):
        (WebKit::GraphicsLayerWC::setTransform):
        (WebKit::GraphicsLayerWC::setChildrenTransform):
        (WebKit::GraphicsLayerWC::setPreserves3D):
        (WebKit::GraphicsLayerWC::setMasksToBounds):
        (WebKit::GraphicsLayerWC::setOpacity):
        (WebKit::GraphicsLayerWC::setContentsRect):
        (WebKit::GraphicsLayerWC::setContentsClippingRect):
        (WebKit::GraphicsLayerWC::setDrawsContent):
        (WebKit::GraphicsLayerWC::setContentsVisible):
        (WebKit::GraphicsLayerWC::setBackfaceVisibility):
        (WebKit::GraphicsLayerWC::setContentsToSolidColor):
        (WebKit::GraphicsLayerWC::setContentsToPlatformLayer):
        (WebKit::GraphicsLayerWC::usesContentsLayer const):
        (WebKit::GraphicsLayerWC::setShowDebugBorder):
        (WebKit::GraphicsLayerWC::setDebugBorder):
        (WebKit::GraphicsLayerWC::setShowRepaintCounter):
        (WebKit::filtersCanBeComposited):
        (WebKit::GraphicsLayerWC::setFilters):
        (WebKit::GraphicsLayerWC::setBackdropFilters):
        (WebKit::GraphicsLayerWC::setBackdropFiltersRect):
        (WebKit::GraphicsLayerWC::noteLayerPropertyChanged):
        (WebKit::GraphicsLayerWC::flushCompositingState):
        (WebKit::GraphicsLayerWC::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/wc/GraphicsLayerWC.h: Added.
        * WebProcess/WebPage/wc/WCBackingStore.h: Added.
        (WebKit::WCBackingStore::WCBackingStore):
        (WebKit::WCBackingStore::imageBuffer):
        (WebKit::WCBackingStore::setImageBuffer):
        (WebKit::WCBackingStore::bitmap const):
        (WebKit::WCBackingStore::encode const):
        (WebKit::WCBackingStore::decode):
        * WebProcess/WebPage/wc/WCLayerFactory.cpp: Added.
        (WebKit::WCLayerFactory::WCLayerFactory):
        (WebKit::WCLayerFactory::createGraphicsLayer):
        * WebProcess/WebPage/wc/WCLayerFactory.h: Added.
        * WebProcess/WebPage/wc/WCUpateInfo.h: Added.
        (WebKit::WCLayerUpateInfo::encode const):
        (WebKit::WCLayerUpateInfo::decode):
        (WebKit::WCUpateInfo::encode const):
        (WebKit::WCUpateInfo::decode):

2021-10-31  Simon Fraser  <simon.fraser@apple.com>

        Scroll animations should run at 120Hz on 120Hz displays
        https://bugs.webkit.org/show_bug.cgi?id=232534

        Reviewed by Tim Horton.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationScrollingCoordinator.mm:
        (WebKit::TiledCoreAnimationScrollingCoordinator::hasNodeWithAnimatedScrollChanged):

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate the first few callers from ImageBuffer::truncatedLogicalSize() to ImageBuffer::logicalSize()
        https://bugs.webkit.org/show_bug.cgi?id=232528

        Reviewed by Tim Horton.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):

2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Layer tree should not be stuck in frozen state after explicitly stopping a page load
        https://bugs.webkit.org/show_bug.cgi?id=232532
        rdar://84522357

        Reviewed by Tim Horton.

        From diagnostic logs gathered in rdar://84522357, it's apparently possible for the layer tree to be stuck in a
        state where it's indefinitely frozen after the user explicitly stops the page load (e.g. by tapping on the "x"
        button in Safari). Specifically, these logs indicate that the `PageTransition` layer tree freeze reason may
        persist even after the user has canceled the load, leading to situations where content may be visible but
        unresponsive.

        From code inspection, this may happen for multiple reasons, one of which is that a media element has incremented
        the load event delay count, which in turn prevents us from transitioning to completed state inside
        `FrameLoader::checkLoadCompleteForThisFrame()`. It's unknown whether this (in particular) is the cause of
        unresponsiveness observed by the reporter of rdar://84522357, but we can at least use this in order to come up
        with a layout test; to mitigate all instances where the `PageTransition` reason may persist after the load has
        been stopped, we make `WebPage::stopLoading()` complete the page transition (thereby lifting the freeze reason)
        if needed.

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

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails
        https://bugs.webkit.org/show_bug.cgi?id=232520
        <rdar://problem/84829717>

        Reviewed by Simon Fraser.

        Guard against the possibility of it returning null.

        No new tests because there shouldn't be any behavior change after https://bugs.webkit.org/show_bug.cgi?id=232470.
        It's still good to do this, though, to be defensive.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode const):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::createImageBufferBackendHandle):

2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Small ImageBuffers cause the web process to crash
        https://bugs.webkit.org/show_bug.cgi?id=232470
        <rdar://problem/84626560>

        Reviewed by Tim Horton.

        The problem is when the (floating point) size < 1x1, but the size*resolution is >= 1x1.
        In this situation, calculateSafeBackendSize() is correctly determining that this
        isn't a zero-sized ImageBuffer, but when we go to actually pass the size to the GPU
        process, we call this:

        IntSize logicalSize() const override { return IntSize(m_parameters.logicalSize); }

        So, the logical size gets truncated down to 0, and then the GPU process fails to allocate
        the ImageBuffer, and then the web process blocks on the GPU process indefinitely, and then
        eventually times out and then crashes. I'm going to deal with that last step (the crash
        itself) in a secondary patch - if the web process doesn't hear from the GPU process, it
        shouldn't crash.

        This patch simply exposes a floatLogicalSize() function on ImageBuffer, so we can get
        the full-fidelity logical size to pass that to the GPU process.

        Test: compositing/device-pixel-image-buffer-hidpi.html

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

2021-10-30  Chris Dumez  <cdumez@apple.com>

        Improve error handling in sendWithAsyncReply()
        https://bugs.webkit.org/show_bug.cgi?id=232508

        Reviewed by Darin Adler.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::invalidate):
        We stop delivering messages as soon as |m_valid| becomes false. It is
        thus a good idea to cancel any pending async reply handlers as soon
        as we set m_isValid to false. We were doing it correctly in connectionDidClose()
        but not in invalidate(). The Connection destructor would eventually call
        the async reply handlers. However, I have noticed when investigating a leak
        that this may delay the calling of the reply handler for a long time if
        something keeps the Connection alive (or forever in case of a leak).

        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithAsyncReply):
        Return early if the connection is no longer valid and call the
        completion handler right away (but asynchronously). Previously,
        we'd register the async reply handler and then the call to
        sendMessage() would fail.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getContentsAsStringWithCompletionHandlerKeepIPCConnectionAliveForTesting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add helper SPI for API test.

2021-10-30  Kate Cheney  <katherine_cheney@apple.com>

        [iOS 15] Loads after WKWebView session restore are marked as app-initiated 
        https://bugs.webkit.org/show_bug.cgi?id=232486
        <rdar://problem/84811692>

        Reviewed by Brent Fulgham.

        Return app initiated value in the page's SessionState so it can be restored
        by third party apps using the [WKWebView setInteractionState] API.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionState const):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeLegacySessionState):
        (WebKit::decodeLegacySessionState):

2021-10-29  Lauro Moura  <lmoura@igalia.com>

        [GLIB][SOUP] Unify memoryPressureMonitorDisabled implementation
        https://bugs.webkit.org/show_bug.cgi?id=232519

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        Follow up the fix of r285062, to avoid having two copies of
        the same function around.

        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitialize):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::memoryPressureMonitorDisabled): Deleted.
        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::MemoryPressureMonitor::disabled):
        * UIProcess/linux/MemoryPressureMonitor.h:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::memoryPressureMonitorDisabledSoup): Deleted.

2021-10-29  Tim Horton  <timothy_horton@apple.com>

        Add release logging of display list size to CGDisplayListImageBufferBackend
        https://bugs.webkit.org/show_bug.cgi?id=232496

        Reviewed by Wenson Hsieh.

        No new tests, just new logging.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::createImageBufferBackendHandle const):

2021-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename ImageBuffer.logicalSize to ImageBuffer.truncatedLogicalSize
        https://bugs.webkit.org/show_bug.cgi?id=232515
        <rdar://problem/84829689>

        Reviewed by Tim Horton.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

2021-10-29  Kate Cheney  <katherine_cheney@apple.com>

        Crash setting up AVCaptureSession
        https://bugs.webkit.org/show_bug.cgi?id=232507
        <rdar://problem/84820282>

        Reviewed by Jer Noble.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setTCCIdentity):

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix WPE build after r285047
        https://bugs.webkit.org/show_bug.cgi?id=232462

        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::memoryPressureMonitorDisabledSoup):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::memoryPressureMonitorDisabled): Deleted.

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r284917.
        <rdar://84807461>

        Likely caused significant performance regression

        Reverted changeset:

        "Remove properties set by NSURLProtocol on NSURLRequest before
        serializing"
        https://bugs.webkit.org/show_bug.cgi?id=232332
        https://commits.webkit.org/r284917

2021-10-29  John Pascoe  <j_pascoe@apple.com>

        Add last modified and creation time to +[_WKWebAuthenticationPanel getAllLocalAuthenticatorCredentials]
        https://bugs.webkit.org/show_bug.cgi?id=232390
        <rdar://problem/84689277>

        Reviewed by Darin Adler.

        This change adds new fields to returned credentials useful for providing context about them, namely
        when they were created and last modified.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (getAllLocalAuthenticatorCredentialsImpl):

2021-10-29  Cameron McCormack  <heycam@apple.com>

        Avoid sending video data to Web process for canvas.drawImage(video).
        https://bugs.webkit.org/show_bug.cgi?id=230766
        <rdar://problem/83576009>

        Reviewed by Simon Fraser.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix internal macOS build after r285047
        https://bugs.webkit.org/show_bug.cgi?id=232462

        * Modules/OSX.modulemap:

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Remove code inside ENABLE(NETSCAPE_PLUGIN_API)
        https://bugs.webkit.org/show_bug.cgi?id=232462

        Reviewed by Anders Carlsson.

        * Configurations/PluginService.xcconfig:
        * Configurations/WebKit.xcconfig:
        * DerivedSources.make:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::shouldRemoveDataRecords const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
        * PlatformMac.cmake:
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginService.Info.plist: Removed.
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm: Removed.
        * PluginProcess/PluginControllerProxy.cpp: Removed.
        * PluginProcess/PluginControllerProxy.h: Removed.
        * PluginProcess/PluginControllerProxy.messages.in: Removed.
        * PluginProcess/PluginCreationParameters.cpp: Removed.
        * PluginProcess/PluginCreationParameters.h: Removed.
        * PluginProcess/PluginProcess.cpp: Removed.
        * PluginProcess/PluginProcess.h: Removed.
        * PluginProcess/PluginProcess.messages.in: Removed.
        * PluginProcess/WebProcessConnection.cpp: Removed.
        * PluginProcess/WebProcessConnection.h: Removed.
        * PluginProcess/WebProcessConnection.messages.in: Removed.
        * PluginProcess/mac/PluginControllerProxyMac.mm: Removed.
        * PluginProcess/mac/PluginProcessMac.mm: Removed.
        * PluginProcess/mac/PluginProcessShim.h: Removed.
        * PluginProcess/mac/PluginProcessShim.mm: Removed.
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: Removed.
        * Resources/PlugInSandboxProfiles/cn.microdone.cmb.safari.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.BocomSubmitCtrl.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.NPSafeInput.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.NPSafeSubmit.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.appstore.CodeRedeemerNetscapePlugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.cfca.npSecEditCtl.MAC.BOC.plugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.cisco.webex.plugin.gpc64.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.cmbchina.CMBSecurity.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.ftsafe.NPAPI-Core-Safe-SoftKeybaord.plugin.rfc1034identifier.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.google.googletalkbrowserplugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.google.o1dbrowserplugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player ESR.plugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb: Removed.
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb: Removed.
        * Shared/API/c/WKPluginInformation.cpp:
        (WKPluginInformationBundleIdentifierKey):
        (WKPluginInformationBundleVersionKey):
        (WKPluginInformationBundleShortVersionKey):
        (WKPluginInformationPathKey):
        (WKPluginInformationDisplayNameKey):
        (WKPluginInformationDefaultLoadPolicyKey):
        (WKPluginInformationUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WKPluginInformationHasSandboxProfileKey):
        (WKPluginInformationFrameURLKey):
        (WKPluginInformationMIMETypeKey):
        (WKPluginInformationPageURLKey):
        (WKPluginInformationPluginspageAttributeURLKey):
        (WKPluginInformationPluginURLKey):
        (WKPlugInInformationReplacementObscuredKey):
        * Shared/Plugins/NPIdentifierData.cpp: Removed.
        * Shared/Plugins/NPIdentifierData.h: Removed.
        * Shared/Plugins/NPObjectMessageReceiver.cpp: Removed.
        * Shared/Plugins/NPObjectMessageReceiver.h: Removed.
        * Shared/Plugins/NPObjectMessageReceiver.messages.in: Removed.
        * Shared/Plugins/NPObjectProxy.cpp: Removed.
        * Shared/Plugins/NPObjectProxy.h: Removed.
        * Shared/Plugins/NPRemoteObjectMap.cpp: Removed.
        * Shared/Plugins/NPRemoteObjectMap.h: Removed.
        * Shared/Plugins/NPVariantData.cpp: Removed.
        * Shared/Plugins/NPVariantData.h: Removed.
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Removed.
        * Shared/Plugins/Netscape/NetscapePluginModule.h: Removed.
        * Shared/Plugins/Netscape/PluginInformation.cpp: Removed.
        * Shared/Plugins/Netscape/PluginInformation.h: Removed.
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm: Removed.
        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm: Removed.
        * Shared/Plugins/PluginModuleInfo.h: Removed.
        * Shared/Plugins/PluginProcessAttributes.h: Removed.
        * Shared/Plugins/PluginProcessCreationParameters.cpp: Removed.
        * Shared/Plugins/PluginProcessCreationParameters.h: Removed.
        * Shared/Plugins/PluginQuirks.h: Removed.
        * Shared/Plugins/mac/PluginComplexTextInputState.h: Removed.
        * Shared/Plugins/mac/PluginSandboxProfile.h: Removed.
        * Shared/Plugins/mac/PluginSandboxProfile.mm: Removed.
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode const):
        (WebKit::WebsiteData::decode):
        (WebKit::WebsiteData::ownerProcess):
        (WebKit::WebsiteData::isolatedCopy const):
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/WebsiteData/WebsiteDataType.h:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APILoaderClient.h:
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::contentRuleListNotification):
        (API::NavigationClient::didFailToInitializePlugIn): Deleted.
        (API::NavigationClient::didBlockInsecurePluginVersion): Deleted.
        (API::NavigationClient::decidePolicyForPluginLoad): Deleted.
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::mouseDidMoveOverElement):
        (API::UIClient::unavailablePluginButtonClicked): Deleted.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadPolicy): Deleted.
        (WebKit::toWKPluginLoadClientPolicy): Deleted.
        (WebKit::toPluginModuleLoadPolicy): Deleted.
        (WebKit::toPluginLoadClientPolicy): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetAdditionalPluginsDirectory):
        (WKContextRefreshPlugIns):
        (WKContextAddSupportedPlugin):
        (WKContextClearSupportedPlugins):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextCopyPlugInInfoForBundleIdentifier):
        (WKContextGetInfoForInstalledPlugIns):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setExperimentalPlugInSandboxProfilesEnabled:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _pluginProcessCount]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::toWKPlugInUnavailabilityReason): Deleted.
        (WebKit::UIDelegate::UIClient::unavailablePluginButtonClicked): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::updateProcessSuppressionState):
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::pluginComplexTextInputState const): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::disableComplexTextInputIfNecessary):
        (WebKit::WebViewImpl::handlePluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::tryHandlePluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::tryPostProcessPluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::setPluginComplexTextInputState): Deleted.
        (WebKit::WebViewImpl::setPluginComplexTextInputStateAndIdentifier): Deleted.
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        * UIProcess/PageClient.h:
        * UIProcess/Plugins/PluginInfoStore.cpp: Removed.
        * UIProcess/Plugins/PluginInfoStore.h: Removed.
        * UIProcess/Plugins/PluginProcessManager.cpp: Removed.
        * UIProcess/Plugins/PluginProcessManager.h: Removed.
        * UIProcess/Plugins/PluginProcessProxy.cpp: Removed.
        * UIProcess/Plugins/PluginProcessProxy.h: Removed.
        * UIProcess/Plugins/PluginProcessProxy.messages.in: Removed.
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm: Removed.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm: Removed.
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        (WebKit::WebPageProxy::findPlugin): Deleted.
        (WebKit::WebPageProxy::unavailablePluginButtonClicked): Deleted.
        (WebKit::WebPageProxy::didFailToInitializePlugin): Deleted.
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendMemoryPressureEvent):
        (WebKit::WebProcessPool::addSupportedPlugin):
        (WebKit::WebProcessPool::clearSupportedPlugins):
        (WebKit::WebProcessPool::setAdditionalPluginsDirectory): Deleted.
        (WebKit::WebProcessPool::refreshPlugins): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins): Deleted.
        (WebKit::WebProcessProxy::getPluginProcessConnection): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::topPrivatelyControlledDomain):
        (WebKit::WebsiteDataRecord::isolatedCopy const):
        (WebKit::WebsiteDataRecord::addPluginDataHostName): Deleted.
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::plugins const): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setPluginComplexTextInputState): Deleted.
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setPluginComplexTextInputState): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setPluginComplexTextInputState): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp: Removed.
        * WebProcess/Plugins/Netscape/JSNPMethod.h: Removed.
        * WebProcess/Plugins/Netscape/JSNPObject.cpp: Removed.
        * WebProcess/Plugins/Netscape/JSNPObject.h: Removed.
        * WebProcess/Plugins/Netscape/NPJSObject.cpp: Removed.
        * WebProcess/Plugins/Netscape/NPJSObject.h: Removed.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: Removed.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h: Removed.
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp: Removed.
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.h: Removed.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp: Removed.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.h: Removed.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: Removed.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Removed.
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp: Removed.
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h: Removed.
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Removed.
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm: Removed.
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp: Removed.
        * WebProcess/Plugins/PluginProcessConnection.h: Removed.
        * WebProcess/Plugins/PluginProcessConnection.messages.in: Removed.
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp: Removed.
        * WebProcess/Plugins/PluginProcessConnectionManager.h: Removed.
        * WebProcess/Plugins/PluginProcessConnectionManager.messages.in: Removed.
        * WebProcess/Plugins/PluginProxy.cpp: Removed.
        * WebProcess/Plugins/PluginProxy.h: Removed.
        * WebProcess/Plugins/PluginProxy.messages.in: Removed.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didFinishLoading):
        (WebKit::PluginView::destroyPluginAndReset):
        (WebKit::PluginView::didFailToInitializePlugin):
        (WebKit::PluginView::scriptObject):
        (WebKit::PluginView::pageMutedStateDidChange):
        (WebKit::PluginView::windowScriptNPObject): Deleted.
        (WebKit::PluginView::pluginElementNPObject): Deleted.
        (WebKit::PluginView::evaluate): Deleted.
        (WebKit::PluginView::setPluginIsPlayingAudio): Deleted.
        (WebKit::PluginView::isMuted const): Deleted.
        (WebKit::PluginView::setComplexTextInputState): Deleted.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::refreshPlugins):
        (WebKit::WebPluginInfoProvider::pluginInfo):
        (WebKit::WebPluginInfoProvider::populatePluginCache): Deleted.
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::unavailablePluginButtonClicked const):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::refreshPlugins):
        (WebKit::WebProcess::pluginProcessConnectionManager): Deleted.
        * WebProcess/WebProcess.h:

2021-10-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, revert r284440, r284397, r284359

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

2021-10-29  Sihui Liu  <sihui_liu@apple.com>

        Release FileSystemStorageHandle when it is not in use
        https://bugs.webkit.org/show_bug.cgi?id=232363

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::close):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::closeHandle):
        (WebKit::FileSystemStorageManager::connectionClosed):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::closeHandle):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::closeHandle):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-10-29  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r285007.

        Reverting r285007 because it caused storage/filesystemaccess
        /sync-access-handle-basics-worker.html to constantly fail.

        Reverted changeset:

        "Release FileSystemStorageHandle when it is not in use"
        https://bugs.webkit.org/show_bug.cgi?id=232363
        https://commits.webkit.org/r285007

2021-10-29  Takashi Komori  <Takashi.Komori@sony.com>

        WKAPI does not have any APIs to set cookie path to WKWebsiteDataStoreConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=232336

        Reviewed by Alex Christensen.

        Add cookie-path setting API for WKWebasiteDataStoreConfigurationRef.

        Test: CookieStorageFile.CustomPath

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCopyCookieStorageFile):
        (WKWebsiteDataStoreConfigurationSetCookieStorageFile):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):

2021-10-28  Tim Horton  <timothy_horton@apple.com>

        Yahoo.com has fragments of wrongly-scaled content throughout when using CGDisplayListImageBufferBackend
        https://bugs.webkit.org/show_bug.cgi?id=232459

        Reviewed by Dean Jackson.

        Similar to r284991, 2D transforms that getCTM() from a CGBitmap context and set
        the result on a CGDisplayList with setCTM() (via BifurcatedGraphicsContext)
        corrupt the display list's CTM, because it starts out in a different initial state,
        because the display list is always recorded with a 1x scale.

        To fix this, sneak the fake scale into setCTM/getCTM (multiplying it in in get,
        dividing it out in set) so that it appears to the outside as if it has
        the same base transform as the CGBitmap context.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::GraphicsContextCGDisplayList::GraphicsContextCGDisplayList):
        (WebKit::CGDisplayListImageBufferBackend::create):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):

2021-10-28  Sihui Liu  <sihui_liu@apple.com>

        Release FileSystemStorageHandle when it is not in use
        https://bugs.webkit.org/show_bug.cgi?id=232363

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::close):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::closeHandle):
        (WebKit::FileSystemStorageManager::connectionClosed):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::closeHandle):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::closeHandle):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-10-28  Alex Christensen  <achristensen@webkit.org>

        Disable NETSCAPE_PLUGIN_API at build time on macOS and Windows
        https://bugs.webkit.org/show_bug.cgi?id=232396

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _pluginProcessCount]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2021-10-28  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Add warning comments regarding use of child setup functions
        https://bugs.webkit.org/show_bug.cgi?id=232444

        Reviewed by Adrian Perez de Castro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::launch):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2021-10-28  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][Qt] Do not use WebKit internals in the implementation
        https://bugs.webkit.org/show_bug.cgi?id=232228

        Reviewed by Philippe Normand.

        Remove usage of GRefPtr, GUniquePtr, WTF macros, and usage of the config.h header from
        the WPE Qt API implementation, as all the funcionality can be achieved on top of the
        public API. This allows building the Qt plug-in in a standalone fashion, without involving
        any of the WebKit machinery, and a sample CMakeLists.txt which does that is provided as
        well. Distributors may prefer to build using this approach instead of as part of the whole
        WebKit compilation process, specially if when providing split packages on top of their
        base WPE WebKit ones.

        No new tests needed.

        * UIProcess/API/wpe/qt/CMakeLists.txt: Added.
        * UIProcess/API/wpe/qt/WPEQmlExtensionPlugin.cpp:
        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::createWebView):
        (jsAsyncReadyCallback):
        * UIProcess/API/wpe/qt/WPEQtView.h:
        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp:
        (WPEQtViewBackend::displayImage):
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.cpp:

2021-10-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add WebPageProxy identifiers to `ViewGestures` category logging
        https://bugs.webkit.org/show_bug.cgi?id=232437

        Reviewed by Tim Horton.

        Make it easier to correlate release logging from "ViewGestures" and "ViewState" categories in WebKit2 by having
        "ViewGestures" logging include "pageProxyID=...", instead of just the content view pointer. This makes it more
        straightforward to (for instance) detect when the user is trying to interact with a page that has stopped
        receiving layer tree commits in the UI process for an extended period of time.

        Note that in all of the below codepaths, we either already call into `_page`, or they're called as a result of
        gesture recognizer delegate methods that should never be invoked by WebKit clients prior to common
        initialization (where we initialize `_page`), so null checks for `_page` are unnecessary here.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _didRelaunchProcess]):

        Also log the web process pid here, to make it easier to correlate logging in WKWebView with logs from the
        corresponding web process.

        * UIProcess/ios/WKContentViewInteraction.h:

        Drive-by fix: also rename `m_commitPotentialTapPointerId` to `_commitPotentialTapPointerId`, so that it is
        consistent with the other Objective-C ivar names.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:nodeIsRootLevel:]):
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        (-[WKContentView _singleTapIdentified:]):
        (-[WKContentView _singleTapDidReset:]):
        (-[WKContentView _doubleTapDidFail:]):
        (-[WKContentView _commitPotentialTapFailed]):
        (-[WKContentView _didCompleteSyntheticClick]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _doubleTapRecognized:]):

2021-10-28  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix.

        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:

2021-10-28  Tim Horton  <timothy_horton@apple.com>

        DOM GPUP: Yahoo.com has fragments of wrongly-scaled content throughout
        https://bugs.webkit.org/show_bug.cgi?id=232356
        <rdar://83884813>

        Reviewed by Simon Fraser.

        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::backendSize const):
        Implement backendSize() so that ImageBufferShareableIOSurfaceBackend
        doesn't always report itself as being 0x0.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

2021-10-28  Daniel Kolesa  <dkolesa@igalia.com>

        Non-unified build fixes
        https://bugs.webkit.org/show_bug.cgi?id=232318

        Reviewed by Don Olmstead.

        * UIProcess/API/APIWebAuthenticationAssertionResponse.cpp:
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h:

2021-10-28  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][Qt] String memory leak in WPEQtView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=232435

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (jsAsyncReadyCallback): Remove unneeded usage of g_strdup(), and replace direct usage
        of the QString constructor with QString::fromUtf8(), which better indicates that the
        call will copy the string contents.

2021-10-28  Youenn Fablet  <youenn@apple.com>

        [ Mac wk1 ] 2 media-capabilities/webrtc tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=232283
        <rdar://problem/84637007>

        Reviewed by Eric Carlson.

        * WebProcess/WebPage/WebPage.cpp:

2021-10-28  Youenn Fablet  <youenn@apple.com>

        Fetch API: Network process leaks when blobs are unused
        https://bugs.webkit.org/show_bug.cgi?id=232371
        <rdar://problem/84704184>

        Reviewed by Geoffrey Garen.

        Make sure to unregister blobs created by a WebProcess in case WebProcess terminates.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:

2021-10-27  David Kilzer  <ddkilzer@apple.com>

        [WebKit] Enable -Wformat=2 warnings
        <https://webkit.org/b/232360>
        <rdar://problem/84571460>

        Reviewed by Darin Adler.

        With one exception noted below, this patch changes calls from
        WEB_UI_STRING() to WEB_UI_NSSTRING(), which includes the proper
        compiler attribute to be used with +[NSString stringWithFormat:].
        This fixes the -Wformat-nonliteral warnings that occurred after
        adding -Wformat=2.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS):
        - Add -Wformat=2 switch, which includes -Wformat-nonliteral.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
        * GPUProcess/mac/GPUProcessMac.mm:
        (WebKit::GPUProcess::initializeProcessName):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeProcessName):
        * UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:
        (WebKit::WebInspectorUIProxy::updateInspectorWindowTitle const):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::experimentalFeatureEnabled):
        - Change `format` to be a constant NSString pointer to fix the
          -Wformat-nonliteral warnings.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _appendAppLinkOpenActionsForURL:actions:elementInfo:]):
        * UIProcess/ios/WKPDFPageNumberIndicator.mm:
        (-[WKPDFPageNumberIndicator _updateLabel]):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController _showPhishingAlert]):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionsController showSuggestionsDropdown:]):
        * WebAuthnProcess/mac/WebAuthnProcessMac.mm:
        (WebKit::WebAuthnProcess::initializeProcessName):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):

2021-10-27  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (iOS 15): Touch events are not fired during quick successive taps
        https://bugs.webkit.org/show_bug.cgi?id=232324
        rdar://83455472

        Reviewed by Wenson Hsieh.

        To support Live Text on iOS 15, two new gesture recognizers were added
        to `WKContentView`. When the gesture recognizers were added,
        `-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]`
        was not updated, resulting in a failure dependency between the new gesture
        recognizers and the touchstart deferring gesture recognizer for "immediately
        resettable" gestures.

        The failure dependency causes the entire "immediately resettable" subgraph
        (which contains UIWebTouchEventsGestureRecognizer) to have a delayed reset,
        as the new gestures recognizers are connected to the "delayed resettable"
        subgraph by way of UIKit's exclusion gestures that control context menu
        presentation. The delayed reset prevents successive touches from being
        recognized, and touch events are only recognized after the delay has
        passed. Consequently, quick successive taps result in some touch events
        being dropped.

        To fix, remove the existing failure dependency and instead add an explicit
        failure dependency to the "delayed resettable" subgraph. This ensures the
        immediately resettable subgraph can reset as intended.

        No new tests, as the issue has been difficult to reproduce in WebKitTestRunner,
        even though it reproduces consistently in Safari. Filed webkit.org/b/232326
        as a follow-up to investigate a testing strategy.

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

2021-10-27  Martin Robinson  <mrobinson@webkit.org>

        Eliminate duplicated platform-specific code in ScrollingTreeStickyNode
        https://bugs.webkit.org/show_bug.cgi?id=231571

        Reviewed by Simon Fraser.

        Abstract code from the Nicosia and Cooca version of ScrollingTreeStickyNode,
        so that it can be shared by both ports.

        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:

2021-10-26  Alex Christensen  <achristensen@webkit.org>

        Remove properties set by NSURLProtocol on NSURLRequest before serializing
        https://bugs.webkit.org/show_bug.cgi?id=232332
        <rdar://79227845>

        Reviewed by Geoff Garen.

        NSURLRequest encodeWithCoder: encodes the protocol properties, which are not used by WebKit.
        They exist to be used by NSURLProtocol.  Serializing them can serialize a large amount of data,
        so to be more efficient and hopefully run out of memory less, remove the properties before serializing.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):

2021-10-26  Kate Cheney  <katherine_cheney@apple.com>

        NetworkProcess::updateBundleIdentifier, a testing function, overrides the actual bundleID instead of the override value
        https://bugs.webkit.org/show_bug.cgi?id=232327

        Reviewed by John Wilander.

        No new tests, behavior confirmed by existing App Bound Domains tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::updateBundleIdentifier):
        We should only ever set the override bundleID for testing purposes.

2021-10-26  Brent Fulgham  <bfulgham@apple.com>

        [AppSSO] Avoid attempting to display a nil view controller
        https://bugs.webkit.org/show_bug.cgi?id=232311
        <rdar://problem/55199117>

        Reviewed by Kate Cheney.

        Avoid attempting to present a nil NSViewController. Instead, just treat the interaction as if
        the authentication was cancelled.

        * UIProcess/Cocoa/SOAuthorization/WKSOAuthorizationDelegate.mm:
        (-[WKSOAuthorizationDelegate authorization:presentViewController:withCompletion:]):

2021-10-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r281054): [iOS] Context menu presents from wrong location when long pressing a link in Mail
        https://bugs.webkit.org/show_bug.cgi?id=232287
        rdar://82671325

        Reviewed by Tim Horton.

        In the case where the WebKit client isn't overriding the context menu configuration via WebKit context menu UI
        delegate methods, `_contextMenuElementInfo` on WKContentView will end up being nil while presenting the context
        menu via long press.

        After the changes in r281054, this means that when the last view is removed from our WKTargetedPreviewContainer,
        we'll unparent WKTargetedPreviewContainer too early, since `_contextMenuElementInfo` won't prevent us from
        bailing in `-_removeContextMenuHintContainerIfPossible`. To fix this, we add a boolean flag to track when the
        context menu presentation animation is running, and avoid unparenting the preview container if the flag is set.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView _removeContextMenuHintContainerIfPossible]):
        (-[WKContentView _contentsOfUserInterfaceItem:]):
        (-[WKContentView contextMenuInteraction:willDisplayMenuForConfiguration:animator:]):

        To test this change, add an assertion that fires if the context menu preview hint container has already been
        unparented by the time we've presented the context menu. This assertion already fires during the extant layout
        test fast/events/touch/ios/long-press-on-link.html, which technically exhibits the bug (albeit in a more subtle
        way).

        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):

2021-10-26  Brady Eidson  <beidson@apple.com>

        Add helper classes and messaging infrastructure to launch webpushd and round trip a message to it
        https://bugs.webkit.org/show_bug.cgi?id=232262

        Reviewed by Alex Christensen.

        No new tests (No behavior change yet)

        This patch:
        - Adds classes representing the WebPushDaemon and connections to it
        - Adds classes/constants/macros related to messaging that daemon
        - Adds SPI for configuring a connect to that daemon
        - Gets MiniBrowser closer to supporting built-in notifications
        - Has way more commented out code than usual for a patch, but that enables a great stopping-point milestone

        * NetworkProcess/Notifications/Cocoa/WebPushDaemonConnectionCocoa.mm: Added.
        (WebKit::WebPushD::addVersionAndEncodedMessageToDictionary):
        (WebKit::WebPushD::Connection::newConnectionWasInitialized const):
        (WebKit::WebPushD::Connection::connectionReceivedEvent const):
        (WebKit::WebPushD::Connection::dictionaryFromMessage const):

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
        (WebKit::NetworkNotificationManager::NetworkNotificationManager):
        (WebKit::NetworkNotificationManager::showNotification):
        (WebKit::NetworkNotificationManager::cancelNotification):
        (WebKit::NetworkNotificationManager::clearNotifications):
        (WebKit::NetworkNotificationManager::didDestroyNotification):
        (WebKit::NetworkNotificationManager::sendMessage const):
        (WebKit::ReplyCaller<>::callReply):
        (WebKit::ReplyCaller<String>::callReply):
        (WebKit::NetworkNotificationManager::sendMessageWithReply const):
        * NetworkProcess/Notifications/NetworkNotificationManager.h:
        (WebKit::NetworkNotificationManager::networkSession const):

        * NetworkProcess/Notifications/WebPushDaemonConnection.cpp: Copied from Source/WebKit/Platform/IPC/DaemonConnection.cpp.
        (WebKit::WebPushD::Connection::Connection):
        (WebKit::WebPushD::Connection::networkSession const):
        * NetworkProcess/Notifications/WebPushDaemonConnection.h: Copied from Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

        * Platform/IPC/DaemonConnection.cpp:
        * Platform/IPC/DaemonConnection.h:
        (WebKit::Daemon::ConnectionToMachService::machServiceName const):
        * Platform/IPC/cocoa/DaemonConnectionCocoa.mm:

        * Platform/Logging.h:

        * Shared/WebPushDaemonConstants.h: Copied from Source/WebKit/Platform/IPC/DaemonConnection.cpp.
        (WebKit::WebPushD::messageTypeSendsReply):

        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):

        * webpushd/WebPushDaemon.h: Copied from Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h.
        * webpushd/WebPushDaemon.mm: Copied from Source/WebKit/webpushd/WebPushDaemonMain.mm.
        (WebPushD::MessageInfo::echoTwice::encodeReply):
        (WebPushD::handleWebPushDMessageWithReply):
        (WebPushD::Daemon::singleton):
        (WebPushD::Daemon::connectionEventHandler):
        (WebPushD::Daemon::connectionAdded):
        (WebPushD::Daemon::connectionRemoved):
        (WebPushD::CompletionHandler<void):
        (WebPushD::Daemon::decodeAndHandleMessage):
        (WebPushD::Daemon::echoTwice):
        
        * webpushd/WebPushDaemonMain.mm:
        (WebPushD::connectionEventHandler):
        (WebPushD::connectionAdded):
        (WebPushD::connectionRemoved):
        (WebPushD::CompletionHandler<void): Deleted.
        (WebPushD::echoTwice): Deleted.
        (WebPushD::decodeMessageAndSendReply): Deleted.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        
2021-10-26  Kate Cheney  <katherine_cheney@apple.com>

        [ App Privacy Report ] Restoring a session after clearing the cache results in app initiated loads in Safari
        https://bugs.webkit.org/show_bug.cgi?id=232292
        <rdar://problem/84597422>

        Reviewed by Brent Fulgham.

        Update session restore code to also set the app initiated value on
        the current document loader. Previously, this was only set on the new
        document loader. This is a problem because the main resource load
        uses the old document loader, so if we restore from a previous session
        state, the main resource load will have the incorrect attribution
        value.

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

2021-10-26  Chris Dumez  <cdumez@apple.com>

        Improve didFailProvisionalLoadForFrame logging to indicate if it is for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=232273

        Reviewed by Darin Adler.

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

2021-10-26  Per Arne  <pvollan@apple.com>

        [iOS][WP] Reduce sandbox telemetry
        https://bugs.webkit.org/show_bug.cgi?id=232279
        <rdar://problem/84634347>

        Reviewed by Brent Fulgham.

        Reduce sandbox telemetry for rules we already have collected information for.

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

2021-10-26  Youenn Fablet  <youenn@apple.com>

        Only one AudioSampleDataSource::pullSamples is needed
        https://bugs.webkit.org/show_bug.cgi?id=232145

        Reviewed by Eric Carlson.

        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:

2021-10-26  Adrian Perez de Castro  <aperez@igalia.com>

        Multiple build issues with ENABLE_VIDEO=OFF
        https://bugs.webkit.org/show_bug.cgi?id=232264

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap): Guard usage of RenderVideo with ENABLE(VIDEO).

2021-10-25  John Wilander  <wilander@apple.com>

        Remove assert failure expectations after r284846 landed
        https://bugs.webkit.org/show_bug.cgi?id=232048
        <rdar://problem/84479642>
        https://bugs.webkit.org/show_bug.cgi?id=232102
        <rdar://problem/84521189>
        https://bugs.webkit.org/show_bug.cgi?id=231255
        <rdar://problem/83903881>
        https://bugs.webkit.org/show_bug.cgi?id=231431
        <rdar://problem/84029425>

        Unreviewed test gardening.

        Depends on this fix: https://trac.webkit.org/changeset/284846/webkit

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting):
            Removed comment with Bugzilla reference.
            I decided to keep the logging since it was so useful in finding the root
            cause of the assertion crashes. Logging is only triggered when we will
            fail the assertion.

2021-10-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename a few variable and parameter names in WKContentViewInteraction.mm
        https://bugs.webkit.org/show_bug.cgi?id=232275

        Reviewed by Tim Horton.

        The `ProceedWithTextSelectionInImage` enum flag was being stored in a variable named
        `ProceedWithTextSelectionInImage` in a few places, likely due to mass renaming when upstreaming WebKit support
        for Live Text. Rename this so that we use lowercase for these variable names.

        No change in behavior.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView _doAfterPendingImageAnalysis:]):
        (-[WKContentView _invokeAllActionsToPerformAfterPendingImageAnalysis:]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):

2021-10-25  Alex Christensen  <achristensen@webkit.org>

        Use xpc_connection_copy_invalidation_reason where available for debugging daemon connection failures
        https://bugs.webkit.org/show_bug.cgi?id=232152

        Reviewed by Brady Eidson.

        * Platform/IPC/cocoa/DaemonConnectionCocoa.mm:
        (WebKit::Daemon::ConnectionToMachService<Traits>::initializeConnectionIfNeeded const):
        * Shared/Daemon/DaemonUtilities.mm:
        (WebKit::startListeningForMachServiceConnections):

2021-10-25  Kate Cheney  <katherine_cheney@apple.com>

        [App Privacy Report] CORS preflight requests attributed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=232221
        <rdar://problem/84116159>

        Reviewed by Brent Fulgham.

        HTTP redirects should already be marked as app-initiated or not based
        on the NSURLRequest that initiated the redirect, either because the
        same NSURLRequest is used or because it is set in the completion
        handler of the networkDataTask->willPerformHTTPRedirection call in
        NetworkSessionCocoa.

        However, checking the request before calling the completion handler
        can initiate CORS preflight checks that create loads that are incorrectly
        marked for App Privacy Report. This patch sets the app initiated value
        in the ResourceRequest object before the new NetworkDataTask is created to fix this.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

2021-10-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r284079): Audio continues playing on hulu.com in private browsing mode after closing the tab
        https://bugs.webkit.org/show_bug.cgi?id=232113
        rdar://84399283

        Reviewed by Chris Dumez.

        I inadvertently introduced a ref-counting cycle between RemoteRenderingBackend and RemoteDisplayListRecorder
        after IPC stream refactoring in r284079, since RemoteDisplayListRecorder directly strongly refs the rendering
        backend, and the rendering backend indirectly holds on to RemoteDisplayListRecorders through remote image
        buffers in the resource cache. Since RemoteRenderingBackend also strongly refs  GPUConnectionToWebProcess as
        well, this caused the entire GPUConnectionToWebProcess to leak after tearing down the connected web process, if
        the web process ever installed a remote rendering backend for 2D canvas.

        To avoid this cycle, turn RemoteDisplayListRecorder's `m_renderingBackend` into a RefPtr instead of a Ref, and
        clear it out in `stopListeningForIPC()`. This also means that we no longer need a separate boolean flag to
        ensure that `RemoteDisplayListRecorder::stopListeningForIPC()` is idempotent, so we also remove
        `m_isListeningForIPC` altogether.

        Test: GPUProcess.DoNotLeakConnectionAfterClosingWebPage

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::~GPUConnectionToWebProcess):
        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::objectCountForTesting):
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::webProcessConnectionCountForTesting):

        Add support for a testing-only SPI hook to ask for the live GPUConnectionToWebProcess count. This retrieves a
        statically incremented/decremented count of the GPUConnectionToWebProcess instances that exist in the GPU
        process; importantly, this is different from asking the GPUProcess for the number of connections in
        `m_webProcessConnections`, since the latter will be 0 even when one or more GPUConnectionToWebProcesses are
        still alive.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::RemoteDisplayListRecorder):

        Also fix a leak caused by RemoteDisplayListRecorder and RemoteImageBuffer strongly reffing each other. Since
        RemoteImageBuffer owns RemoteDisplayListRecorder, the backpointer from RemoteDisplayListRecorder to the image
        buffer should be weak, not strong.

        (WebKit::RemoteDisplayListRecorder::startListeningForIPC):
        (WebKit::RemoteDisplayListRecorder::stopListeningForIPC):
        (WebKit::RemoteDisplayListRecorder::paintFrameForMedia):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        (): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::stopListeningForIPC):

        Adjust this logic to ensure that we finish pending work and destroy cached resources *right before* we stop
        listening for all stream IPC messages. Since RemoteDisplayListRecorder now clears out its pointer to the
        rendering backend in `stopListeningForIPC()`, we'll need to ensure that any pending IPC stream messages that
        might cause RemoteDisplayListRecorder to call into the back end are processed before we sever the IPC stream
        connection for good by removing all receivers.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:

        Add the new testing SPI (see above for more details).

        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _gpuToWebProcessConnectionCountForTesting:]):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::webProcessConnectionCountForTesting):
        * UIProcess/GPU/GPUProcessProxy.h:

2021-10-25  Sam Sneddon  <gsnedders@apple.com>

        [Python] rename assertEquals/assertNotEquals
        https://bugs.webkit.org/show_bug.cgi?id=232214

        Reviewed by Alexey Proskuryakov.

        This is assert(Not)?Equals -> assert(\1)Equal

        Python 3.11 (currently CPython main branch) removes the deprecated
        aliases assertEquals/assertNotEquals. These have long been deprecated,
        and the modern names exist all the way back to Python 2.7, hence there's
        no reason not to switch.

        * Scripts/webkit/messages_unittest.py:
        (GeneratedFileContentsTest.assertGeneratedFileContentsEqual):
        * Scripts/webkit/model_unittest.py:
        * Scripts/webkit/parser_unittest.py:
        (ParsingTest.check_message):
        (ParsingTest.test_receiver):

2021-10-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        RemoteRenderingBackend should not send IPC in the middle of destruction
        https://bugs.webkit.org/show_bug.cgi?id=232179

        Reviewed by Darin Adler.

        Make a couple of minor adjustments to RemoteRenderingBackend (see below for more details). This is necessary in
        order to avoid flaky crashes after fixing bug #232113, after which the RemoteRenderingBackend will no longer be
        leaked in the GPU process.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::startListeningForIPC):
        (WebKit::RemoteRenderingBackend::stopListeningForIPC):
        (WebKit::RemoteRenderingBackend::didCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend): Deleted.

        Move logic to flush remaining incoming IPC messages in the GPU process out of the destructor, and into
        `stopListeningForIPC()` instead. This is because the act of processing certain stream IPC messages (such as
        CreateImageBuffer or FlushContext) may cause RemoteRenderingBackend to try and send IPC back to the web process.
        However, if RemoteRenderingBackend is in the middle of destruction, it will crash when attempting to do so (when
        attempting to call into IPC::MessageSender).

        To avoid this, we need to do this work earlier, after we've already stopped listening for further IPC messages.

        * GPUProcess/graphics/RemoteRenderingBackend.h:

        Turn `m_remoteDisplayLists` into a regular hash map containing RemoteDisplayListRecorders by their process-
        qualified rendering resource identifiers. Since this map may be modified from different threads, we (1) don't
        want to be using weak pointers here, and (2) need to ensure that access to this table is guarded behind a lock.
        To avoid reference cycles, entries in this table are cleared out when the remote image buffer corresponding to
        each RemoteDisplayListRecorder is released in the GPU process.

2021-10-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (iOS 15): Safari shows zoom callout even if -webkit-user-select is none
        https://bugs.webkit.org/show_bug.cgi?id=231161
        rdar://83863266

        Reviewed by Darin Adler.

        Make several minor tweaks to prevent the text interaction assistant's loupe gesture from beginning when long
        pressing inside content with `-webkit-user-select: none;`. Importantly, this prevents both the text
        interaction's haptic feedback and the text selection magnifier UI (introduced in iOS 15) from showing up. See
        comments below for more details.

        Test: editing/selection/ios/do-not-allow-text-selection-in-user-select-none.html

        * Shared/ios/InteractionInformationAtPosition.h:
        (WebKit::InteractionInformationAtPosition::isSelectable const):

        Add a helper method to return whether the `selectability` flag is equal to `Selectable`, and use this in places
        where we current check the `isSelectable` flag.

        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Break the current `isSelectable` flag out into different enum types, which enumerate the reasons why we might
        need to treat hit-tested content as non-user-selectable. Importantly, this allows us to only early return inside
        `-textInteractionGesture:shouldBeginAtPoint:` below if the element has an explicit `-webkit-user-select: none;`,
        and not because of the other reasons (i.e. large element bounds or the fact that we're long pressing editable
        text while not editing).

        This nuance is important in order to continue allowing the loupe gesture (which manifests as a floating caret)
        to begin when long pressing inside a focused a text field.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Return NO here in the case where we're recognizing a loupe gesture (i.e. long press) inside content with
        `-webkit-user-select: none;` (by consulting the new `selectability` enumeration). This allows us to prevent both
        haptic feedback as well as the new magnifier UI from triggering when long pressing inside content that has
        explicitly disabled text selection.

        (-[WKContentView closestPositionToPoint:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionPositionInformation):
        (WebKit::WebPage::positionInformation):

        Additionally populate the `selectability` flag even when long pressing inside images and links. Instead of
        putting the call to `selectionPositionInformation` behind the `isLink`/`isImage` check, move that condition into
        `selectionPositionInformation` in the form of an early return, and always populate `selectability` in either
        case.

2021-10-24  Darin Adler  <darin@apple.com>

        [Cocoa] Adopt bridge_cast and makeVector in a few more places, including cases where adoptCF/NS was used incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=232200

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (-[WKSecureCodingURLWrapper encodeWithCoder:]): Use bridge_cast.
        (-[WKSecureCodingURLWrapper initWithCoder:]): Use bridge_cast
        after calling adoptCF rather than first doing a bridging cast and
        then doing adoptNS and relying on it correctly adopting a CF object.
        This fixes an ARC incompatibility.
        (IPC::encodeDataInternal): Use bridge_cast.
        (IPC::decodeDataInternal): Use bridge_cast/WTFMove instead of
        adoptNS/cast/leakRef. This fixes an ARC incompatibility
        (IPC::encodeDateInternal): Use bridge_cast.
        (IPC::decodeDateInternal): Use bridge_cast/WTFMove as above.
        (IPC::encodeNumberInternal): Use bridge_cast.
        (IPC::decodeNumberInternal): Use bridge_cast/WTFMove as above.
        (IPC::decodeSecureCodingInternal): Use bridge_cast.
        (IPC::encodeStringInternal): Use bridge_cast.
        (IPC::decodeStringInternal): Use bridge_cast/WTFMove as above.
        (IPC::encodeURLInternal): Use bridge_cast.
        (IPC::decodeURLInternal): Use bridge_cast/WTFMove as above.

        * UIProcess/API/Cocoa/WKConnection.mm:
        (didReceiveMessage): Use bridge_cast and remove unneeded use of
        RetainPtr/get on the body.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginPathsInDirectory): Use bridge_cast
        and makeVectort.

2021-10-23  Dean Jackson  <dino@apple.com>

        Disable PiP when HAVE(UIKIT_WEBKIT_INTERNALS)
        https://bugs.webkit.org/show_bug.cgi?id=232206
        rdar://84516632

        Reviewed by Tim Horton.

        In preparation for moving to AVPictureInPictureController, disable
        PiP when HAVE(UIKIT_WEBKIT_INTERNALS) is true so that we are
        no longer creating an AVPlayerViewController. The rationale for the
        move is to use API rather than SPI, and this will allow changes to
        be made to AVPlayerViewController in this special configuration.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::supportsVideoFullscreen const): Only support regular
        fullscreen, not PiP.
        (WebKit::VideoFullscreenManager::supportsVideoFullscreenStandby const): Don't support
        "video fullscreen standby", which is another name for PiP.

2021-10-23  Brandon Stewart  <brandonstewart@apple.com>

        WebContent crash when sending invalid IPC message using IPC testing API
        https://bugs.webkit.org/show_bug.cgi?id=232060

        Reviewed by Wenson Hsieh.

        Do not trigger a crash in WebContent Process when sending an invalid IPC message using the
        IPC testing API.

        Test: ipc/send-invalid-message.html

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchSyncMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):

2021-10-22  Jean-Yves Avenard  <jya@apple.com>

        video appears blank with only audio playing if video element isn't appended to the dom tree
        https://bugs.webkit.org/show_bug.cgi?id=232124
        rdar://83438282

        Reviewed by Eric Carlson.

        Ensure that we inform the GPU process whenever
        MediaPlayer::renderingCanBeAccelerated value could have changed.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::readyStateChanged):
        (WebKit::MediaPlayerPrivateRemote::checkAcceleratedRenderingState):
        (WebKit::MediaPlayerPrivateRemote::updateConfiguration):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer):
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2021-10-22  Chris Fleizach  <cfleizach@apple.com>

        AX: Inform AX when the injected bundle sends a synchronous message
        https://bugs.webkit.org/show_bug.cgi?id=232159

        Reviewed by Andres Gonzalez.

        When an injected bundle sends a synchronous message we need to inform accessibility clients, so they don't get
        stuck trying to message the WebContent process. This is already handled for synchronous messages
        generated from the WebPage.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postSynchronousMessage):

2021-10-22  Alex Christensen  <achristensen@webkit.org>

        Use C++17 nested namespace syntax for WebKit::PCM
        https://bugs.webkit.org/show_bug.cgi?id=232162

        Reviewed by Yusuke Suzuki.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDebugInfo.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDebugInfo.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementConnectionCocoa.mm:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.mm:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonConnectionSet.mm:

2021-10-22  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Add required syscall
        https://bugs.webkit.org/show_bug.cgi?id=232153
        <rdar://84523250>

        Reviewed by Brent Fulgham.

        Add required syscall to WP sandbox on iOS.

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

2021-10-22  Takashi Komori  <Takashi.Komori@sony.com>

        WKErrorRef.h does't have some error definitions
        https://bugs.webkit.org/show_bug.cgi?id=232116

        Reviewed by Alex Christensen.

        Add error definitions which exist in APIrror.h but do not exist in WKErrorRef.h

                kWKErrorCodeCancelled
                kWKErrorCodeFileDoesNotExist

        No test as this patch does not change code behavior.

        * Shared/API/c/WKErrorRef.cpp:
        (WKErrorGetErrorCode):
        * Shared/API/c/WKErrorRef.h:

2021-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        RemoteRenderingBackend::CreateImageBuffer should be an async IPC stream message
        https://bugs.webkit.org/show_bug.cgi?id=231970

        Reviewed by Kimmo Kinnunen.

        This patch reverts the changes in r284476, which worked around a race when adding receive queues for newly
        created IPC stream destinations and simultaneously dispatching IPC messages to those destinations. Rather than
        making the IPC message that creates and adds the new image buffer's RemoteDisplayListRecorder synchronous, we
        instead keep that message async and make adjustments to ensure that incoming out-of-stream IPC messages for
        RemoteDisplayListRecorder can always be mapped to an appropriate receive queue. See below for more details.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::startListeningForIPC):

        Move the main runloop bounce down to `StreamServerConnectionBase::startReceivingMessagesImpl()` instead (to deal
        with the fact that `addMessageReceiveQueue` currently needs to be invoked on the main runloop). This allows us
        to call `StreamServerConnection::startReceivingMessages()` from the processing queue while creating a remote
        image buffer, which (in turn) ensures that incoming out-of-stream messages from the IPC thread will be sent to
        the correct RemoteDisplayListRecorder destination by the time they're dispatched on the work queue thread.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::startListeningForIPC):
        (WebKit::RemoteRenderingBackend::stopListeningForIPC):

        Additionally register a "0-destination" receiver to ensure that all RemoteDisplayListRecorder messages (even
        without pre-existing destinations) will be enqueued on the same IPC stream connection as this remote rendering
        backend.

        (WebKit::RemoteRenderingBackend::createImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:

        Make `CreateImageBuffer` an async stream message once again.

        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::processStreams):
        * Platform/IPC/StreamConnectionWorkQueue.h:

        Change `m_connections` into a HashCountedSet (from a HashSet), to ensure that the same server connection object
        can be added to and removed from the work queue multiple times, without removing the connection from the map
        early.

        * Platform/IPC/StreamServerConnection.cpp:
        (IPC::StreamServerConnectionBase::startReceivingMessagesImpl):
        (IPC::StreamServerConnectionBase::stopReceivingMessagesImpl):
        * Platform/IPC/StreamServerConnection.h:
        (IPC::StreamServerConnection::startReceivingMessages):
        (IPC::StreamServerConnection::stopReceivingMessages):

        Add new methods to start and stop receiving all messages for a given ReceiverName, regardless of incoming
        destination ID. RemoteRenderingBackend now uses this to register a "catch-all" listener for all
        RemoteDisplayListRecorder messages.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

2021-10-22  Sihui Liu  <sihui_liu@apple.com>

        Followup to r284652: ensure file handle is closed in web process
        https://bugs.webkit.org/show_bug.cgi?id=232127

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::~FileSystemStorageHandle):
        (WebKit::FileSystemStorageHandle::createSyncAccessHandle):
        (WebKit::FileSystemStorageHandle::close):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * Platform/IPC/cocoa/SharedFileHandleCocoa.cpp: an extra fd is created here and does not get closed.
        (IPC::SharedFileHandle::decode):

2021-10-22  Youenn Fablet  <youenn@apple.com>

        REGRESSION (Safari 15 - iOS15): [WebRTC] Increased audio latency while playing webrtc audio stream over audio element
        https://bugs.webkit.org/show_bug.cgi?id=230903
        <rdar://problem/83692944>

        Reviewed by Eric Carlson.

        We used to render audio tracks in process and are now doing rendering in GPU process.
        Current implementation requests data with a fixed chunk size, that we were setting as the max of preferred buffer size and web audio chunk size.
        If we are reading too close to the end of data in AudioSampleDataSource, we will delay reading the data by this buffer size. This triggers delay but allows getting a consistent rendering.
        To reduce delay, we are now using the maximum of web audio chunk size and 10 ms chunk size, as WebRTC tracks are usually manipulating 10 ms chunks.

        Manually tested.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:

2021-10-22  Per Arne Vollan <pvollan@apple.com>

        [macOS] Add needed syscall
        https://bugs.webkit.org/show_bug.cgi?id=232110
        <rdar://84519690>

        Reviewed by Brent Fulgham.

        Add required syscall in WP sandbox.

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

2021-10-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        StreamConnectionWorkQueue::processStreams() has a incorrect protection ref
        https://bugs.webkit.org/show_bug.cgi?id=232070

        Reviewed by Wenson Hsieh.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):
        Additionally remove redundant protection ref from `RemoteRenderingBackend`
        cleanup task. Since `m_workQueue->stop()` is run after dispatching the
        task, and since `stop()` waits until queue has executed the
        all the tasks, the `m_workQueue` ref outlives the protection ref.

        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::processStreams):
        Remove the redundant protection ref so it does not cause confusion.
        The protection ref cannot hold the last ref, as that would mean
        that the `StreamConnectionWorkQueue` thread would run the code to
        destroy the work queue itself. There has to be a external ref for
        `queue->stop()` that outlives the protection ref, as the `stop()` will
        wait until the queue thread stops.

        (IPC::StreamConnectionWorkQueue::stopAndWaitForCompletion):
        (IPC::StreamConnectionWorkQueue::stop): Deleted.
        * Platform/IPC/StreamConnectionWorkQueue.h:
        Rename `stop()` to `stopAndWaitForCompletion()` to signify what
        the function does.

2021-10-22  Alberto Garcia  <berto@igalia.com>

        Unreviewed, fix typo in the WebKitWebInspector documentation.

        * UIProcess/API/gtk/WebKitWebInspector.cpp:

2021-10-22  Youenn Fablet  <youenn@apple.com>

        Audio over peer connection becomes latent when changing the output
        https://bugs.webkit.org/show_bug.cgi?id=231110
        <rdar://problem/84049005>

        Reviewed by Eric Carlson.

        When detecting an audio timeline change, send it from GPUProcess to WebProcess.
        Let the WebProcess reset the sources to properly restart.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/GPUProcessConnection.messages.in:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.h:
        * WebProcess/WebProcess.cpp:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:

2021-10-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        StreamConnectionWorkQueue is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=232068

        Reviewed by Wenson Hsieh.

        Make StreamConnectionWorkQueue thread-safe so that
        addStreamConnection works from multiple threads.
        In the future, this will be called when a new RemoteDisplayListRecorder is
        added during the StreamConnectionWorkQueue message processing
        invocation for RemoteRenderingBackend::createRemoteImageBuffer.

        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::~StreamConnectionWorkQueue):
        (IPC::StreamConnectionWorkQueue::dispatch):
        (IPC::StreamConnectionWorkQueue::addStreamConnection):
        (IPC::StreamConnectionWorkQueue::removeStreamConnection):
        Change semantics so that adding and removing connections during
        shutdown is ok. This is required for simpler code since
        during stop we must dispatch all pending messages, but during
        message code we might have unconditional start listening when
        the message creates a new RemoteDisplayListRecorder.
        As a consequence it's not an error to add a connection,
        stop and destroy the work queue without removing it.
        (IPC::StreamConnectionWorkQueue::stop):
        (IPC::StreamConnectionWorkQueue::startProcessingThread):
        (IPC::StreamConnectionWorkQueue::wakeUpProcessingThread): Deleted.
        * Platform/IPC/StreamConnectionWorkQueue.h:

2021-10-21  Alex Christensen  <achristensen@webkit.org>

        Add webpushd plist
        https://bugs.webkit.org/show_bug.cgi?id=231981

        Reviewed by Brady Eidson.

        This can be done once rdar://83086960 is approved.

        * WebKit.xcodeproj/project.pbxproj:
        * webpushd/com.apple.webkit.webpushd.plist: Added.

2021-10-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r284570.

        No longer needed

        Reverted changeset:

        "Remove com.apple.webkit.adattributiond.plist from build
        temporarily"
        https://bugs.webkit.org/show_bug.cgi?id=232045
        https://commits.webkit.org/r284570

2021-10-21  Chris Dumez  <cdumez@apple.com>

        Call to [NSURL URLByAppendingPathComponent:] under NetworkSessionCocoa() may be inefficient
        https://bugs.webkit.org/show_bug.cgi?id=232098

        Reviewed by Alex Christensen.

        Call [NSURL URLByAppendingPathComponent:isDirectory:] whenever possible instead of
        [NSURL URLByAppendingPathComponent], as it is more efficient.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/Cocoa/WKShareSheet.mm:
        (+[WKShareSheet createRandomSharingDirectoryForFile:]):
        (+[WKShareSheet writeFileToShareableURL:data:temporaryDirectory:]):

2021-10-21  John Wilander  <wilander@apple.com>

        PCM: Add temporary logging when isRunningTest() assertion is about to fail to be able to investigate
        https://bugs.webkit.org/show_bug.cgi?id=232108

        Unreviewed. Just adding logging for test-only functionality.

        This patch adds logging to when we are about to fail the assert of isRunningTest() in
        WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting)(). This is
        added to help investigate https://bugs.webkit.org/show_bug.cgi?id=232048.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting):

2021-10-21  Simon Fraser  <simon.fraser@apple.com>

        Rare crash under DisplayLink::displayLinkCallback()
        https://bugs.webkit.org/show_bug.cgi?id=232101
        <rdar://84153991>

        Reviewed by Tim Horton.

        The crash was a divide by zero under m_currentUpdate.nextUpdate(), indicating that
        m_currentUpdate.updatesPerSecond was zero. Previous assumptions that this was caused
        by weird display configs were wrong. The actual issue is a race condition where
        the callback can fire while we're still inside CVDisplayLinkStart(), or at least
        before we've updated m_currentUpdate.

        The fix is to initialize m_currentUpdate before we call CVDisplayLinkStart().

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):

2021-10-21  Per Arne Vollan <pvollan@apple.com>

        Launch Services database is not always sent to GPUP
        https://bugs.webkit.org/show_bug.cgi?id=232047
        <rdar://problem/84480229>

        Unreviewed, address post commit review feedback.

        Address review feedback. Also rename a data member which had a misleading name.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        (WebKit::GPUProcessProxy::addSession):
        * UIProcess/GPU/GPUProcessProxy.h:

2021-10-19  Darin Adler  <darin@apple.com>

        [Cocoa] Merge and simplify the nsColor family of functions
        https://bugs.webkit.org/show_bug.cgi?id=231992

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::encodeColorInternal): Merged the NSColor and UIColor
        implementations into a single one that uses CocoaColor.
        (IPC::decodeColorInternal): Ditto.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView themeColor]): Use cocoaColorOrNil instead
        of isValid and platformColor.
        (-[WKWebView underPageBackgroundColor]): Use cocoaColor
        instead of platformColor.
        (-[WKWebView _pageExtendedBackgroundColor]): Use cocoaColorOrNil
        instead of isValid and platformColor.
        (-[WKWebView _sampledPageTopColor]): Ditto.

        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest themeColor]): Use cocoaColor instead
        of platformColor.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _updateScrollViewBackground]): Use cocoaColor instead
        of -[UIColor initWithCGColor:] and cachedCGColor.

        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _serializedSelectionCaretBackgroundColorForTesting]):
        Use colorFromCocoaColor instead of colorFromUIColor.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKTextTouchBarItemController _wkChangeColor:]): Use cocoaColor
        instead of nsColor.
        (WebKit::WebViewImpl::updateTextTouchBar): Use colorFromCocoaColor
        instead of colorFromNSColor.
        (WebKit::WebViewImpl::setUnderlayColor): Use cocoaColorOrNil instead
        of isValid and nsColor.
        (WebKit::WebViewImpl::underlayColor const): Ditto.
        (WebKit::WebViewImpl::pageExtendedBackgroundColor const): Ditto.
        (WebKit::WebViewImpl::changeFontColorFromSender): Ditto.
        (WebKit::extractUnderlines): Use colorFromCocoaColor instead of
        colorFromNSColor.

        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::DragDropInteractionState::deliverDelayedDropPreview): Use
        cocoaColor instead of +[UIColor colorWithCGColor:] and cachedCGColor.
        (WebKit::DragDropInteractionState::previewForDragItem const): Ditto.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Use cocoaColor
        instead of -[UIColor initWithCGColor:] and cachedCGColor.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateTapHighlight]): Use cocoaColor instead of
        -[UIColor initWithCGColor:] and cachedCGColor.
        (-[WKContentView _cascadeInteractionTintColor]): Use cocoaColor
        instead of +[UIColor colorWithCGColor:] and cachedCGColor.
        (compositionHighlights): Use colorFromCocoaColor instead of
        colorFromUIColor.
        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]): Use
        cocoaColor instead of +[UIColor colorWithCGColor:] and cachedCGColor.

        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKColorPicker focusedElementSuggestedColors]): Use createNSArray
        and cocoaColor instead of +[NSMutableArray array], a for loop,
        -[NSMutableArray addObject:], +[UIColor colorWithCGColor:], and cachedCGColor
        (-[WKColorPicker updateColorPickerState]): Use cocoaColor instead of
        +[UIColor colorWithCGColor:] and cachedCGColor.

        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::accentColor): Use cocoaColor instead of nsColor.

        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::setSelectedColor): Use cocoaColor instead of nsColor.
        (WebKit::WebColorPickerMac::showColorPicker): Ditto.
        (-[WKColorPopoverMac setAndShowPicker:withColor:suggestions:]): Ditto.
        (-[WKColorPopoverMac didChooseColor:]): Ditto.

        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement): Use
        colorFromCocoaColor instead of colorFromNSColor
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement): Ditto.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setAccentColor): Use cocoaColorOrNil instead of
        isValid and nsColor.

2021-10-21  Devin Rousso  <drousso@apple.com>

        [css-values-4] Support small (sv*), large (lv*) and dynamic (dv*) viewport units
        https://bugs.webkit.org/show_bug.cgi?id=219287
        <rdar://problem/71857370>

        Reviewed by Simon Fraser.

        Spec: <https://drafts.csswg.org/css-values-4/#viewport-variants>

        Tests: CSSViewportUnits.AllSame
               CSSViewportUnits.EmptyUnobscuredSizeOverrides
               CSSViewportUnits.SameUnobscuredSizeOverrides
               CSSViewportUnits.DifferentUnobscuredSizeOverrides

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _processWillSwapOrDidExit]):
        (-[WKWebView _dispatchSetMinimumUnobscuredSize:]): Added.
        (-[WKWebView _frameOrBoundsChanged]):
        (activeMinimumUnobscuredSize): Added.
        (-[WKWebView _didCompleteAnimatedResize]):
        (-[WKWebView _minimumUnobscuredSizeOverride]): Added.
        (-[WKWebView _setMinimumUnobscuredSizeOverride:]): Added.
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _clearOverrideLayoutParameters]):
        When this value is set from `-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]`
        it should be used as the value for "small viewport" `svw`/`svh`/`svmin`/`svmax`, but only
        from that codepath. Dynamic viewport changes should not update it as they don't necessarily
        represent a change in the minimum/maximum viewport size, just the current size.
        "large viewport" `lvw`/`lvh`/`lvmin`/`lvmax` and "dynamic viewport" `dvw`/`dvh`/`dvmin`/`dvmax`
        (as well as the existing "UA-default viewport" `vw`/`vh`/`vmin`/`vmax`) can be derived from
        existing logic.
        See the WebCore ChangeLog for more information.

        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setMinimumUnobscuredSize): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setViewportSizeForCSSViewportUnits):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setMinimumUnobscuredSize): Added.
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):
        Add piping from the UIProcess to the WebProcess for the new minimum unobscured size override.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Drive-by: Rename `setViewportSizeForCSSViewportUnits` to `setSizeForCSSLargeViewportUnits` for clarity.

2021-10-21  Devin Rousso  <drousso@apple.com>

        [iOS] Zooming out should use the page's background color instead of fading
        https://bugs.webkit.org/show_bug.cgi?id=232036
        <rdar://problem/81926190>

        Reviewed by Tim Horton.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (scrollViewBackgroundColor):

2021-10-21  John Pascoe  <j_pascoe@apple.com>

        Followup: Fix crash when calling setUsernameForLocalCredentialWithID
        https://bugs.webkit.org/show_bug.cgi?id=232057
        <rdar://problem/84507268>

        Reviewed by David Kilzer.

        Follow up to address David's comment.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (getAllLocalAuthenticatorCredentialsImpl):
        (+[_WKWebAuthenticationPanel deleteLocalAuthenticatorCredentialWithID:]):
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):
        - Use <wtf/cocoa/TypeCastsCocoa.h>

2021-10-21  Chris Dumez  <cdumez@apple.com>

        WebKit should process-swap for initial navigation of a popup if it has no opener
        https://bugs.webkit.org/show_bug.cgi?id=231990
        <rdar://84425504>

        Reviewed by Brent Fulgham.

        WebKit should process-swap for initial navigation of a popup if it has no opener, even if the navigation is
        same-site. Swapping process is not Web-observable here since there is no opener relationship. However, swapping
        processes has benefits here since we don't want to end up with too many tabs sharing the same process.

        This impacts Google Drive where double-clicking a document will open Google Docs in a new tab and in the same
        WebProcess as Google Drive.

        No new tests, updated existing API tests and this is not Web-observable.

        * Shared/FrameInfoData.cpp:
        (WebKit::FrameInfoData::encode const):
        (WebKit::FrameInfoData::decode):
        * Shared/FrameInfoData.h:
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode const):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigation.h:
        (API::Navigation::effectiveSandboxFlags const):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::cancel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::info const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):

2021-10-21  Chris Lord  <clord@igalia.com>

        [WPE][GTK] Enable smooth scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=220512

        Reviewed by Carlos Garcia Campos.

        Enable smooth scrolling by default on GTK and WPE platforms.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):

2021-10-20  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider
        https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        Currently, notification messages route from WebContent to the UI process.

        When "WebKit-managed built-in notifications" are enabled, notification requests will route from
        WebContent to Networking instead.

        From there they will head off to webpushd to be handled.

        This patch just sets up the switch where messages can optionally head off to the Networking
        process instead of the UIProcess.

        (It also lays the SPI groundwork for the webpushd mach service name)

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

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:

        * NetworkProcess/Notifications/NetworkNotificationManager.cpp: Added.
        (WebKit::NetworkNotificationManager::NetworkNotificationManager):
        (WebKit::NetworkNotificationManager::showNotification):
        (WebKit::NetworkNotificationManager::cancelNotification):
        (WebKit::NetworkNotificationManager::clearNotifications):
        (WebKit::NetworkNotificationManager::didDestroyNotification):
        * NetworkProcess/Notifications/NetworkNotificationManager.h: Added.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp: Unified build fixup.

        * Sources.txt:

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration webPushMachServiceName]):
        (-[_WKWebsiteDataStoreConfiguration setWebPushMachServiceName:]):

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::setWebPushMachServiceName):
        (WebKit::WebsiteDataStoreConfiguration::webPushMachServiceName const):

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::sendNotificationMessage):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):

2021-10-20  Per Arne Vollan <pvollan@apple.com>

        Launch Services database is not always sent to GPUP
        https://bugs.webkit.org/show_bug.cgi?id=232047
        <rdar://problem/84480229>

        Reviewed by Brent Fulgham.

        Currently, the XPC endpoint for receiving the Launch Services database is being sent to GPUP in GPUProcessProxy::addSession.
        If GPUP has not finished launching at that point, the endpoint will not be sent on the first page load. This is addressed by
        sending the XPC endpoint in GPUProcessProxy::didFinishLaunching, since the XPC connection over which the XPC endpoint is
        being sent is available then.

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        (WebKit::GPUProcessProxy::addSession):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToProcess const):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-10-20  John Pascoe  <j_pascoe@apple.com>

        Fix crash when calling setUsernameForLocalCredentialWithID
        https://bugs.webkit.org/show_bug.cgi?id=231986
        <rdar://problem/84425279>

        Reviewed by David Kilzer.

        Using a copy here results in a crash when the NSData deallocs because the
        [NSData dataWithBytesNoCopy] was used a buffer that was not allocated with malloc.
        This is fixed by instead using [NSData initWithBytes] and RetainPtr.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):

2021-10-20  Alex Christensen  <achristensen@webkit.org>

        Remove com.apple.webkit.adattributiond.plist from build temporarily
        https://bugs.webkit.org/show_bug.cgi?id=232045

        Reviewed by Tim Horton.

        There are some problems with the internal verifiers that will take some time to resolve.
        Until they are resolved, don't install the plist and don't tell the network process to connect to the daemon registered by the plist.

        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        * WebKit.xcodeproj/project.pbxproj:

2021-10-20  Brady Eidson  <beidson@apple.com>

        Factor out some Notifications-specific messages from WebPageProxy messages
        https://bugs.webkit.org/show_bug.cgi?id=232021

        Reviewed by Alex Christensen.

        In a future patch, there will be a runtime switch where WebContent sometimes sends these Notification
        related messages to an objecting in Networking, and othertimes sends them to a WebPageProxy in the UIProcess.

        To accomodate this switch, let's split them out into their own Notifications specific object and messages.
        
        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

        * Shared/Notifications/NotificationManagerMessageHandler.h: Added.
        * Shared/Notifications/NotificationManagerMessageHandler.messages.in: Added.

        * UIProcess/Notifications/WebNotificationManagerMessageHandler.cpp: Added.
        (WebKit::WebNotificationManagerMessageHandler::WebNotificationManagerMessageHandler):
        (WebKit::WebNotificationManagerMessageHandler::showNotification):
        (WebKit::WebNotificationManagerMessageHandler::cancelNotification):
        (WebKit::WebNotificationManagerMessageHandler::clearNotifications):
        (WebKit::WebNotificationManagerMessageHandler::didDestroyNotification):
        * UIProcess/Notifications/WebNotificationManagerMessageHandler.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_notificationManagerMessageHandler):
        (WebKit::WebPageProxy::addAllMessageReceivers):
        (WebKit::WebPageProxy::removeAllMessageReceivers):
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::swapToProvisionalPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::m_limitsNavigationsToAppBoundDomains): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):

2021-10-20  David Kilzer  <ddkilzer@apple.com>

        WebKit Objective-C classes should use weak delegates
        <https://webkit.org/b/231956>
        <rdar://problem/84416233>

        Reviewed by Brent Fulgham.

        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/mac/WKScrollViewMac.h:
        - Change `delegate` property from `assign` to `weak` to document
          that WeakObjCPtr<> is used to store the value.

        * UIProcess/ios/forms/WKFileUploadPanel.h:
        - Change `delegate` property from `assign` to `weak` to make the
          instance variable weak.

2021-10-20  Said Abou-Hallawa  <said@apple.com>

        [iOS] Ensure the CA transaction has been synchronously committed before snapshotting it
        https://bugs.webkit.org/show_bug.cgi?id=230085
        <rdar://81800118>

        Reviewed by Tim Horton.

        Because committing the CA transaction may be an asynchronous operation,
        we need to ensure the CALayer is fully updated before snapshotting it.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _snapshotRectAfterScreenUpdates:rectInViewCoordinates:intoImageOfWidth:completionHandler:]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2021-10-20  Ross Kirsling  <ross.kirsling@sony.com>

        Mac CMake build should not need to include iOS headers
        https://bugs.webkit.org/show_bug.cgi?id=231998

        Reviewed by Alex Christensen.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        * PlatformMac.cmake:
        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        * UIProcess/Cocoa/UIDelegate.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:

2021-10-20  Antti Koivisto  <antti@apple.com>

        Don't re-evaluate viewport dependent media queries if the viewport doesn't change
        https://bugs.webkit.org/show_bug.cgi?id=231949
        rdar://77240171

        Reviewed by Alan Bujtas.

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

        Remember to signal accessibility settings change on this code path too.

2021-10-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Do not use strerror()
        https://bugs.webkit.org/show_bug.cgi?id=231913

        Reviewed by Chris Dumez.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler):
        (IPC::Connection::sendOutputMessage):
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::allocate):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::setAndSerializeSandboxParameters):
        (WebKit::sandboxDataVaultParentDirectory):
        (WebKit::ensureSandboxCacheDirectory):
        (WebKit::tryApplyCachedSandbox):
        (WebKit::applySandbox):

2021-10-20  John Pascoe  <j_pascoe@apple.com>
        [WebAuthn] Obtain consent to create new credential when platform authenticator in excludedCredentials
        https://bugs.webkit.org/show_bug.cgi?id=219813
        <rdar://problem/72484635>

        Reviewed by Brent Fulgham.

        Currently, whenever the platform authenticator is within excludedCredentials during makeCredential we
        always return NotAllowedError and merely flash a consent screen. This does not match the spec per Step 3.1
        of makeCredential (https://w3c.github.io/webauthn/#sctn-op-make-cred). Instead, we should always obtain consent
        and return a different error depending on consent was obtained.

        A fixme to add this was inadvertently removed in https://bugs.webkit.org/attachment.cgi?id=393180&action=prettypatch

        Added api test TestWebKitAPI.WebAuthenticationPanel.LADuplicateCredentialWithConsent

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):

2021-10-20  Youenn Fablet  <youenn@apple.com>

        Add support for requestVideoFrameCallback API and MediaStreamTrack-based backend support
        https://bugs.webkit.org/show_bug.cgi?id=231803

        Reviewed by Eric Carlson.

        Add temporary getter/setter of rvfc feature flag.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetRequestVideoFrameCallbackEnabled):
        (WKPreferencesGetRequestVideoFrameCallbackEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Reenable -fvisibility=hidden and -fvisibility-inlines-hidden
        https://bugs.webkit.org/show_bug.cgi?id=222860

        Reviewed by Don Olmstead.

        * PlatformWPE.cmake:

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] UserInteractive threads are not Real-time in Linux
        https://bugs.webkit.org/show_bug.cgi?id=220115

        Reviewed by Michael Catanzaro.

        Enable real time threads in the web process only when there's a visible page.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::pageActivityStateDidChange):
        (WebKit::WebProcess::platformInitializeProcess): Deleted.
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/playstation/WebProcessPlayStation.cpp:
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeProcess):

2021-10-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r276635): [GTK] local HTML file is downloaded instead of displayed if any application has ever called g_desktop_app_info_set_as_default_for_extension(info, "html")
        https://bugs.webkit.org/show_bug.cgi?id=230797

        Reviewed by Carlos Garcia Campos.

        Let's revert this change. Disabling content sniffing prevents WebKit from distinguishing
        between different content types with the same file extension, which is something it needs
        to be able to do. In this bug report, it is conflating text/html with
        application/x-extension-html, but it could just as well confuse text/html with
        application/xhtml+xml, causing rendering issues. I don't think we can remove the content
        sniffing.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didGetFileInfo):

2021-10-19  Ben Nham  <nham@apple.com>

        Add NetworkProcess stubs for push subscriptions
        https://bugs.webkit.org/show_bug.cgi?id=231922

        Reviewed by Youenn Fablet.

        Added stubs in NetworkProcess for push subscription-related IPC. Currently the stubs return
        that subscribing is unsupported and that there are no active push subscriptions.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::subscribeToPushService):
        (WebKit::WebSWServerConnection::unsubscribeFromPushService):
        (WebKit::WebSWServerConnection::getPushSubscription):
        (WebKit::WebSWServerConnection::getPushPermissionState):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
        * WebProcess/Storage/WebSWClientConnection.cpp:
        (WebKit::WebSWClientConnection::subscribeToPushService):
        (WebKit::WebSWClientConnection::unsubscribeFromPushService):
        (WebKit::WebSWClientConnection::getPushSubscription):
        (WebKit::WebSWClientConnection::getPushPermissionState):
        * WebProcess/Storage/WebSWClientConnection.h:

2021-10-19  Jigen Zhou  <jigen.zhou@sony.com>

        Fix build break after r284406 if ENABLE_SERVICE_WORKER=OFF
        https://bugs.webkit.org/show_bug.cgi?id=231968

        Reviewed by Don Olmstead.

        r284406 made m_isServiceWorkerPage of WebPageProxy not available if !ENABLE(SERVICE_WORKER), 
        but the change was incomplete and can cause build failure if ENABLE_SERVICE_WORKER=OFF. 
        This patch avoids accessing m_isServiceWorkerPage if !ENABLE(SERVICE_WORKER) in WebPageProxy 
        methods isServiceWorkerPage, loadDataWithNavigationShared, and resetStateAfterProcessExited.  

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2021-10-19  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid October 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=231915

        Unreviewed non-unified build fixes.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:

2021-10-19  Ross Kirsling  <ross.kirsling@sony.com>

        [CMake] Align OptionsMac with Xcode build
        https://bugs.webkit.org/show_bug.cgi?id=231982

        Reviewed by Don Olmstead.

        * CMakeLists.txt:
        Enable -fobjc-weak to support r284329.

2021-10-19  Alexey Proskuryakov  <ap@apple.com>

        Eagerly resolve python3 path in Makefiles
        https://bugs.webkit.org/show_bug.cgi?id=231979

        Reviewed by Jonathan Bedard.

        * DerivedSources.make:

2021-10-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284099.
        https://bugs.webkit.org/show_bug.cgi?id=231984

        Introduced build failure

        Reverted changeset:

        "[iOS] Stop including 'util.sb' in the WebContent process'
        sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=231570
        https://commits.webkit.org/r284099

2021-10-19  Garrett Davidson  <garrett_davidson@apple.com>

        WebAuthn Platform UI callbacks are not guaranteed to happen on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=231963
        <rdar://84420452>

        Reviewed by Brent Fulgham.

        - The clearanceHandler is not guaranteed to happen on the main thread, but
        weakThis.get() needs to happen there.

        - `proxy` needs to stay alive for the whole transaction, otherwise it will tear
        down the connection and cancel the request, so explicitly capture it everywhere.

        - Start logging if we get an error from clearanceHandler.

        Covered by existing tests.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::WebAuthenticatorCoordinatorProxy::performRequest):

2021-10-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r284079): fast/canvas/gradient-with-clip.html and fast/canvas/gradient-text-with-shadow.html are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=231681
        rdar://84202478

        Reviewed by Kimmo Kinnunen.

        These tests occasionally fail when we time out while waiting for the pixel buffer to be populated underneath
        `RemoteImageBufferProxy::getPixelBuffer`; this happens because the GPU process sometimes halts (and never
        resumes) while processing stream messages, and consequently never ends up processing the GetPixelBuffer IPC
        stream message that's necessary to populate the shared memory buffer for GetPixelBuffer.

        This, in turn, happens when the IPC stream buffer is about to exhaust all available capacity (i.e. the write
        cursor is nearing the end of the 2MB buffer), and as a result, we send messages that would normally be encoded
        in the IPC stream as out-of-line IPC messages instead, which are received in the GPU process on the IPC thread
        and appended to the receive queue corresponding to the destination ID in `Connection::processIncomingMessage()`.

        If we happen to have sent `RemoteRenderingBackend::CreateImageBuffer(a)` right before exhausting capacity and
        sending out-of-line messages targeting the RemoteDisplayListRecorder corresponding to the newly created image
        buffer `a`, we'll end up with a race condition where the IPC thread may receive the out-of-line messages meant
        for the new remote display list destination *before* the new remote display list has added itself as an IPC
        receive queue by calling into `StreamServerConnection::startReceivingMessages()`.

        In this particular scenario (where we "lose" the race), `Connection::processIncomingMessage` will skip past the
        early return where it would normally find its corresponding receive queue via `m_receiveQueues.get(*message)`,
        and instead falls through to `Connection::SyncMessageState::processIncomingMessage()`, which will attempt to
        dispatch the incoming message to the Connection's client (GPUConnectionToWebProcess). Of course, the
        GPUConnectionToWebProcess isn't aware of how to process this incoming message, so it simply gets dropped. By the
        time the receive queue is added for the new RemoteDisplayListRecorder, we'll observe a ProcessOutOfStreamMessage
        and end up waiting forever for this out-of-line message to be added to the receive queue, but this never ends up
        happening because it has already been received and dropped by GPUConnectionToWebProcess.

        To address the flaky tests in the short term, we work around this issue by making `CreateImageBuffer` a sync
        message, so we guarantee that any subsequent messages sent to the image buffer's RemoteDisplayListRecorder will
        not be dropped. In the (slightly) longer term, we should turn this back into an async stream message, and add a
        mechanism to redirect all receiver-less RemoteDisplayListRecorder messages to a separate queue.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:

        Make `CreateImageBuffer` a synchronous stream message for now.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):

2021-10-19  Youenn Fablet  <youenn@apple.com>

        Guarantee order of WebSocket events in case of being resumed
        https://bugs.webkit.org/show_bug.cgi?id=231664

        Reviewed by Chris Dumez.

        We no longer need to handle resume/suspend in WebSocketChannel layer since WebSocket will deal with itself by enqueuing a task in the event loop.

        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::disconnect):
        (WebKit::WebSocketChannel::didConnect):
        (WebKit::WebSocketChannel::didReceiveText):
        (WebKit::WebSocketChannel::didReceiveBinaryData):
        (WebKit::WebSocketChannel::didClose):
        (WebKit::WebSocketChannel::didReceiveMessageError):
        (WebKit::WebSocketChannel::suspend):
        (WebKit::WebSocketChannel::resume):
        (WebKit::WebSocketChannel::didSendHandshakeRequest):
        (WebKit::WebSocketChannel::didReceiveHandshakeResponse):
        (WebKit::WebSocketChannel::enqueueTask): Deleted.
        * WebProcess/Network/WebSocketChannel.h:

2021-10-19  David Kilzer  <ddkilzer@apple.com>

        Follow-up #2: WebKit::LocalConnection::createCredentialPrivateKey leaks an NSMutableDictionary
        <https://webkit.org/b/231814>
        <rdar://problem/84307054>

        Unreviewed follow-up to address Darin's comment.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::createCredentialPrivateKey const):
        - Use WTFMove() to avoid ref count churn.

2021-10-19  Chris Dumez  <cdumez@apple.com>

        cachedCGColor() and nsColor() should return smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=231909

        Reviewed by Tim Horton.

        r276283 attempted to make cachedCGColor() and nsColor() thread-safe but the fix was incomplete
        since those functions return unretained objects that can be released from the cache on any
        other thread. This patch updates cachedCGColor() and nsColor() to return a RetainPtr to address
        the issue.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::cgColorFromColor):
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView themeColor]):
        (-[WKWebView underPageBackgroundColor]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _sampledPageTopColor]):
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest themeColor]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView underlayColor]):
        (-[WKView _pageExtendedBackgroundColor]):
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView _underlayColor]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateTextTouchBar):
        (WebKit::WebViewImpl::underlayColor const):
        (WebKit::WebViewImpl::pageExtendedBackgroundColor const):
        * UIProcess/PDF/WKPDFHUDView.mm:
        (-[WKPDFHUDView _setupLayer:]):
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::setSelectedColor):
        (WebKit::WebColorPickerMac::showColorPicker):
        (-[WKColorPopoverMac setAndShowPicker:withColor:suggestions:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setAccentColor):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):

2021-10-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        Update seccomp filters with latest changes from flatpak
        https://bugs.webkit.org/show_bug.cgi?id=231479

        Reviewed by Adrian Perez de Castro.

        Additionally, let's fix a minor inconsistency in our error-handling code: all but one of
        our codepaths carefully free and close resources, but the process is about to crash so
        there's not really any reason to do so. The code is slightly simpler if we don't bother.

        The seemingly-extraneous include order changes are required to placate the style checker.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::seccompStrerror):
        (WebKit::setupSeccomp):
        * UIProcess/Launcher/glib/Syscalls.h: Added.

2021-10-19  Martin Robinson  <mrobinson@igalia.com>

        [css-scroll-snap] Triggering a layout during scroll causes jittery scrolling on iOS
        https://bugs.webkit.org/show_bug.cgi?id=173887
        <rdar://problem/67153673>

        Reviewed by Simon Fraser.

        Tests: fast/scrolling/ios/scroll-snap-with-relayouts-horizontal.html
               fast/scrolling/ios/scroll-snap-with-relayouts-vertical.html

        Ensure that when the root node is scrolling, it is added to the list of nodes
        with an active user scroll. This prevents the web process from resnapping during
        layout when the user is actively scrolling.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView scrollViewWillBeginDragging:]): Call RemoteScrollingCoordinatorProxy::setRootNodeIsInUserScroll
        when a scdroll starts and ends.
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h: Added method declaration.
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::setRootNodeIsInUserScroll): Added setRootNodeIsInUserScroll method.

2021-10-19  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia MediaStreamTrack.applyConstraints behavior regressed in Safari 15
        https://bugs.webkit.org/show_bug.cgi?id=231286
        <rdar://problem/83930865>

        Reviewed by Eric Carlson.

        Display tracks are different in that they do not have presets.
        Revert back to directly linking the WebProcess track with the remote display source without going through RealtimeVideoSource.
        This restores past behavior.
        Refactoring of UserMediaCaptureManager to use a single map.
        We do not yet support cloning tracks to get different sizes, this should be done as a follow-up.

        Covered by fast/mediastream/getDisplayMedia-size.html.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        * WebProcess/cocoa/RemoteCaptureSampleManager.h:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.h:
        * WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp: Added.
        * WebProcess/cocoa/RemoteRealtimeDisplaySource.h: Added.
        * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        * WebProcess/cocoa/UserMediaCaptureManager.h:

2021-10-19  Youenn Fablet  <youenn@apple.com>

        Close peer connection sockets when entering page cache
        https://bugs.webkit.org/show_bug.cgi?id=231890

        Reviewed by Eric Carlson.

        We proactively close all peer connection sockets when entering page cache.
        This makes peer connection go to disconnected and then failed state.
        Covered by updated tests.

        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:

2021-10-18  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Add flex-basis: content support
        https://bugs.webkit.org/show_bug.cgi?id=221479
        <rdar://problem/74279369>

        Reviewed by Javier Fernandez.

        Handle LengthType::Content in encode/decode functions.

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

2021-10-19  Cameron McCormack  <heycam@apple.com>

        Ensure CanvasRenderingContext2D.drawImage(video) uses the right color space
        https://bugs.webkit.org/show_bug.cgi?id=229025
        <rdar://problem/81828490>

        Reviewed by Sam Weinig.

        When GPU process media handling is enabled, ctx.drawImage(video)
        calls work by sending a NativeImageForCurrentTime message to the GPU
        process, which returns an IOSurface around which a CGImage is created.
        There's no good way to get the color space off the IOSurface, so we
        add a second return argument to NativeImageForCurrentTime to indicate
        the color space used.

        ImageBitmap creates an ImageBuffer for that image to be painted into,
        and for that we also need to know the color space of the video. The
        code that sends NativeImageForCurrentTime and then paints the
        resulting image into the GraphicsContext is further down. So we add
        a separate IPC message that gets the color space of the video's
        current frame. (It would be better if we could avoid a second
        synchronous IPC message call, but either ImageBitmap's scaling and
        cropping code, or the ImageBuffer creation call, would need to be moved
        down into MediaPlayerPrivateRemote::paintCurrentFrameInContext, which
        doesn't seem like the right place for it.)

        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::createFrameImageAtIndex):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::nativeImageForCurrentTime):
        (WebKit::RemoteMediaPlayerProxy::colorSpace):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::colorSpace):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::nativeImageForCurrentTime): Add a
        second return argument to NativeImageForCurrentTime to indicate the
        color space of the returned IOSurface.
        (WebKit::MediaPlayerPrivateRemote::colorSpace): Add a new IPC message to
        get the color space of a video's current frame.

2021-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284413.
        https://bugs.webkit.org/show_bug.cgi?id=231936

        BrokeSafariBuildByAddingANewEnum

        Reverted changeset:

        "[WebAuthn] Obtain consent to create new credential when
        platform authenticator in excludedCredentials"
        https://bugs.webkit.org/show_bug.cgi?id=219813
        https://commits.webkit.org/r284413

2021-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284240.
        https://bugs.webkit.org/show_bug.cgi?id=231931

        NeedDifferentArchitectureToWorkWithWebpushd

        Reverted changeset:

        "WebKit Managed Notifications: Skeleton NotificationProvider."
        https://bugs.webkit.org/show_bug.cgi?id=231786
        https://commits.webkit.org/r284240

2021-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        GPU process occasionally crashes under `StreamConnectionWorkQueue::processStreams()` in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=231897

        Reviewed by Simon Fraser.

        Certain layout tests (e.g. in `LayoutTests/compositing`) currently cause the GPU process to crash on the remote
        rendering backend thread ("RemoteRenderingBackend work queue") in `StreamConnectionWorkQueue::processStreams()`.
        This happens because the `dispatch()` call to delete cached resources underneath `~RemoteRenderingBackend()`
        may fire after the destructor is finished running (thereby destroying `m_workQueue` itself). This leaves the
        stream work queue in a bad state and causes various crashes when the function is eventually dispatched.

        Since StreamConnectionWorkQueue is already ThreadSafeRefCounted, it doesn't make sense to directly store
        StreamConnectionWorkQueue as a member of RemoteRenderingBackend; to fix these crashes, we make `m_workQueue` on
        RemoteRenderingBackend a strong Ref, and additionally make `StreamConnectionWorkQueue::processStreams()` protect
        itself to avoid destroying the work queue in the middle of processing.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:

        Drive-by fix: remove an unnecessary header include.

        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):

        Ensure that the work queue is protected through the final dispatch call that deletes cached resources, and also
        explicitly `stop()` the work queue when this is done to ensure that the thread permanently stops waiting for
        additional work.

        (WebKit::RemoteRenderingBackend::dispatch):
        * GPUProcess/graphics/RemoteRenderingBackend.h:

        Replace the IPC::StreamConnectionWorkQueue member with a Ref instead, so that it isn't immediately destroyed
        when the rendering backend is destroyed, and can instead be protected by strong references on the stack.

        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::processStreams):
        * Platform/IPC/StreamConnectionWorkQueue.h:

        Add a boilerplate `StreamConnectionWorkQueue::create()` function that returns a Ref.

2021-10-18  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Obtain consent to create new credential when platform authenticator in excludedCredentials
        https://bugs.webkit.org/show_bug.cgi?id=219813
        <rdar://problem/72484635>

        Currently, whenever the platform authenticator is within excludedCredentials during makeCredential we
        always return NotAllowedError and merely flash a consent screen. This does not match the spec per Step 3.1
        of makeCredential (https://w3c.github.io/webauthn/#sctn-op-make-cred). Instead, we should always obtain consent
        and return a different error depending on consent was obtained.

        A fixme to add this was inadvertently removed in  https://bugs.webkit.org/attachment.cgi?id=393180&action=prettypatch

        Reviewed by Brent Fulgham.

        Added api test TestWebKitAPI.WebAuthenticationPanel.LADuplicateCredentialWithConsent 

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        (WebKit::wkWebAuthenticationPanelUpdate):
        * UIProcess/WebAuthentication/WebAuthenticationFlags.h:

2021-10-18  Chris Dumez  <cdumez@apple.com>

        Add a callback to know when the service worker loads via -[WKWebView _loadServiceWorker:]
        https://bugs.webkit.org/show_bug.cgi?id=231771
        <rdar://problem/84274364>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _loadServiceWorker:completionHandler:]):
        (-[WKWebView _loadServiceWorker:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didFinishServiceWorkerPageRegistration):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::loadServiceWorker):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didFinishServiceWorkerPageRegistration):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2021-10-18  Alex Christensen  <achristensen@webkit.org>

        Revert r284216
        https://webkit.org/b/231523
        <rdar://84342878>

        There is an internal build configuration that doesn't know how to find libWebCoreStatic.a
        and I have reason to believe that this is not necessary anyways.

        * Configurations/adattributiond.xcconfig:
        * Shared/API/Cocoa/WKMain.h:
        * Shared/API/Cocoa/WKMain.mm:
        (WKAdAttributionDaemonMain):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process occasionally crashes under `RemoteDisplayListRecorderProxy::recordRestore()`
        https://bugs.webkit.org/show_bug.cgi?id=231900

        Reviewed by Tim Horton.

        It's apparently possible for a RemoteImageBufferProxy in the web process to outlive RemoteRenderingBackendProxy.
        Before the IPC stream refactoring in r284079, we were robust against this possibility because
        RemoteImageBufferProxy checked for a null rendering backend in `canAppendItemOfType` and returned `false`, which
        prevented us from trying to call into the rendering backend. However, I accidentally omitted this null check
        in the new RemoteDisplayListRecorderProxy, which currently assumes that `m_renderingBackend` is always non-null
        when sending any IPC stream messages.

        Fix this crash by restoring the null check for the weak `m_renderingBackend` pointer. I only observed this crash
        once locally and, unfortunately, haven't been able to come up with a test case that consistently reproduces it.

        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:
        (WebKit::RemoteDisplayListRecorderProxy::send):

2021-10-18  David Kilzer  <ddkilzer@apple.com>

        Bug 231882: WebKit::GPUConnectionToWebProcess::setTCCIdentity() leaks a tcc_identity_t
        <https://webkit.org/b/231882>
        <rdar://problem/84350854>

        Reviewed by Chris Dumez.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setTCCIdentity):
        - Use WTF::adoptOSObject() to fix the leak.
        - Expand the scope of !PLATFORM(MACCATALYST) since none of this
          code needs to run on the MacCatalyst platform.

2021-10-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa GraphicsContextGLOpenGL should not use WebGLLayer
        https://bugs.webkit.org/show_bug.cgi?id=231804

        Reviewed by Dean Jackson.

        Implement changes so that GPU process side GraphicsContextGLOpenGL,
        the new class GPUProcessGraphicsContextGL, does not use
        WebGLLayer. Instead, the swap chain is in GraphicsContextGLOpenGL
        and the GPUProcessGraphicsContextGL exposes a function to extract
        the display buffer out to be sent to WebContent process.

        * GPUProcess/graphics/GPUProcessGraphicsContextGL.h: Added.
        Add a simpler class for GPUProcess side GraphicsContextGLOpenGL
        instance, one that can get the display buffer from the instance.

        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::platformWorkQueueInitialize):
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):
        * GPUProcess/graphics/RemoteGraphicsContextGLWin.cpp:
        (WebKit::RemoteGraphicsContextGLWin::platformWorkQueueInitialize):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::~RemoteGraphicsContextGLProxy):
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay):
        Move Cocoa implemenation to an Objective-C++ file.

        * WebProcess/GPU/graphics/cocoa/RemoteGraphicsContextGLProxyCocoa.mm: Added.
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay):
        Set the display buffer contents directly to the WebGLLayer after
        prepare.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.mm:
        (WebKit::PlatformCALayerRemoteModelHosting::dumpAdditionalProperties):
        Unified build fixes.

2021-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Simplify SleepDisabler by checking if we are under sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231670

        Reviewed by Adrian Perez de Castro.

        Move functions to check if running inside a sandbox to WTF.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::isInsideDocker): Deleted.
        (WebKit::isInsideFlatpak): Deleted.
        (WebKit::isInsideSnap): Deleted.

2021-10-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/video-rotation tests are failing due to missing TestController::takeViewPortSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=231059

        Reviewed by Xabier Rodriguez-Calvar.

        Implement setOrientationForMediaCapture for GStreamer ports. Because media capture runs in
        the WebProcess for those ports, we need a new IPC message, sent from the UIProcess to the
        WebProcess.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMockCameraOrientation):
        (WKPageIsMockRealtimeMediaSourceCenterEnabled):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setOrientationForMediaCapture):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setOrientationForMediaCapture):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-10-18  Tim Nguyen  <ntim@apple.com>

        Fix mouse selection on modal <dialog> text nodes
        https://bugs.webkit.org/show_bug.cgi?id=231741

        Reviewed by Antti Koivisto.

        Tests:
        - editing/selection/modal-dialog-select-paragraph.html (tests this bug)
        - imported/w3c/web-platform-tests/inert/inert-node-is-unselectable.tentative.html (tests what
        the canStartSelection check was supposed to fix)

        The inert check in Node::canStartSelection() was too restrictive, which caused this bug to happen because
        we set the root node as inert and then reset it for the modal <dialog> itself, causing the text in the
        <dialog> to be unselectable. Instead, just mirror how -webkit-user-select: none; is implemented by
        introducing RenderStyle::userSelectIncludingInert().

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isSelectableTextNode const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionPositionInformation):

2021-10-18  David Kilzer  <ddkilzer@apple.com>

        Use-after-move of m_sockets in NetworkRTCProvider::close()
        <https://webkit.org/b/231779>
        <rdar://problem/84278026>

        Reviewed by Youenn Fablet.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::close):
        - Replace WTFMove() with std::exchange() to make it clear that
          m_sockets will be emptied, then iterate on `sockets` to close
          them.  Update ASSERT() to check that no sockets were added
          to m_sockets during the loop.

2021-10-17  David Kilzer  <ddkilzer@apple.com>

        Build fix #3: Adopt attribution AVCaptureSession SPI for GPU process
        https://bugs.webkit.org/show_bug.cgi?id=231621
        <rdar://problem/80748535>

        Unreviewed build fix.

        * Shared/Cocoa/TCCSoftLink.h:
        (tcc_identity_create):
        * Shared/Cocoa/TCCSoftLink.mm:
        (tcc_identity_create):
        - Use HAVE(TCC_IOS_14_BIG_SUR_SPI).

2021-10-17  David Kilzer  <ddkilzer@apple.com>

        Follow-up: WebKit::LocalConnection::createCredentialPrivateKey leaks an NSMutableDictionary
        <https://webkit.org/b/231814>
        <rdar://problem/84307054>

        Unreviewed follow-up to address Darin's comments.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::createCredentialPrivateKey const):
        - Remove need for C-style cast by using a local variable for the
          mutable copy of the NSDictionary.

2021-10-17  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: remove _WKInspectorExtensionPrivateForTesting
        https://bugs.webkit.org/show_bug.cgi?id=231784
        <rdar://problem/84280608>

        Reviewed by Timothy Hatcher.

        Promote the only method to be API for _WKInspectorExtension. It is needed
        to implement some parts of the devtools API.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/_WKInspectorExtension.h:
        * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
        (-[_WKInspectorExtension evaluateScript:inTabWithIdentifier:completionHandler:]):
        * UIProcess/API/Cocoa/_WKInspectorExtensionPrivateForTesting.h: Removed.
        * UIProcess/API/Cocoa/_WKInspectorExtensionTesting.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2021-10-16  David Kilzer  <ddkilzer@apple.com>

        [WebAuthn] Many Objective-C classes leak their instance variables
        <https://webkit.org/b/231834>
        <rdar://problem/84317190>

        Reviewed by Brent Fulgham.

        * UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.mm:
        (-[_WKAuthenticationExtensionsClientInputs dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.mm:
        (-[_WKPublicKeyCredentialCreationOptions dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.mm:
        (-[_WKPublicKeyCredentialDescriptor dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.mm:
        (-[_WKPublicKeyCredentialEntity dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.mm:
        (-[_WKPublicKeyCredentialParameters dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.mm:
        (-[_WKPublicKeyCredentialRelyingPartyEntity dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm:
        (-[_WKPublicKeyCredentialRequestOptions dealloc]):
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.mm:
        (-[_WKPublicKeyCredentialUserEntity dealloc]):
        - Add -dealloc methods that release instance variables.

2021-10-16  David Kilzer  <ddkilzer@apple.com>

        _WKRemoteWebInspectorViewController leaks an instance variable and should use a weak delegate
        <https://webkit.org/b/231830>
        <rdar://problem/84316056>

        Reviewed by Brent Fulgham.

        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        - Use a weak reference for the delegate.
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController dealloc]): Add.
        - Fix leak by releasing _configuration instance variable.

2021-10-16  Tim Horton  <timothy_horton@apple.com>

        WebKit ignores inherited GCC_PREPROCESSOR_DEFINITIONS
        https://bugs.webkit.org/show_bug.cgi?id=231867

        Reviewed by Sam Weinig.

        * Configurations/BaseTarget.xcconfig:
        Add a $(inherited) here like in every other project, so that we don't
        just drop defines that come from above.

2021-10-16  Simon Fraser  <simon.fraser@apple.com>

        Page zoom is messed up after navigating back from a PDF
        https://bugs.webkit.org/show_bug.cgi?id=231841
        <rdar://72666365>

        Reviewed by Tim Horton.

        A navigation back from a PDF is a FrameLoadType::Back, so resetting
        m_mainFramePluginHandlesPageScaleGesture only for FrameLoadType::Standard is wrong.

        For all navigations, the plugins seem to call
        pluginScaleFactorDidChange/pluginZoomFactorDidChange/
        mainFramePluginHandlesPageScaleGestureDidChange so it's safe to reset them for all
        navigation types.

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

2021-10-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r284300.
        https://bugs.webkit.org/show_bug.cgi?id=231866

        broke-apple-silicon-performance

        Reverted changeset:

        "[macOS] Add telemetry for system calls in WP"
        https://bugs.webkit.org/show_bug.cgi?id=231836
        https://commits.webkit.org/r284300

2021-10-16  David Kilzer  <ddkilzer@apple.com>

        WebKit::LocalConnection::createCredentialPrivateKey leaks an NSMutableDictionary
        <https://webkit.org/b/231814>
        <rdar://problem/84307054>

        Reviewed by Kate Cheney.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::createCredentialPrivateKey const):
        - Use RetainPtr<> and adoptNS to fix the leak.

2021-10-16  Lauro Moura  <lmoura@igalia.com>

        [GTK4] Update signal name to monitor window resize
        https://bugs.webkit.org/show_bug.cgi?id=231854

        Reviewed by Carlos Garcia Campos.

        Using size-changed (previous signal name) makes the MiniBrowser crash
        running the WebDriver tests.

        The signal name was changed in
        https://gitlab.gnome.org/GNOME/gtk/-/commit/b7380543449ea679a2c912b66aab4855b2bb41f2,
        as part of GTK 3.99.5.

        Covered by existing tests.

        * UIProcess/API/glib/WebKitUIClient.cpp:

2021-10-15  Alex Christensen  <achristensen@webkit.org>

        Start using adattributiond on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231829

        Reviewed by Brady Eidson.

        This makes one small change to use adattributiond on iOS by default instead of the network process.
        The rest of this patch is to keep the tests doing what they used to.

        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCopyPCMMachServiceName):
        (WKWebsiteDataStoreConfigurationSetPCMMachServiceName):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):

2021-10-15  Alex Christensen  <achristensen@webkit.org>

        Use attributedBundleIdentifier instead of applicationBundleIdentifier when present for handling PCM attribution
        https://bugs.webkit.org/show_bug.cgi?id=231827

        Reviewed by Brady Eidson.

        This is the same identifier that SafariViewController uses in _setEphemeralUIEventAttribution:forApplicationWithBundleID:
        If we don't do this, then SafariViewController looks in the database for PCMs from com.apple.SafariViewService and doesn't find any and doesn't send any reports.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::attributedBundleIdentifier):
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::attributedBundleIdentifier):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
        * NetworkProcess/NetworkSession.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:ephemeral:]):
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:]): Deleted.

2021-10-15  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Add telemetry for system calls in WP
        https://bugs.webkit.org/show_bug.cgi?id=231836
        <rdar://problem/84317842>

        Reviewed by Brent Fulgham.

        Add telemetry for system calls in WP to understand in which context they are being used.

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

2021-10-15  Ross Kirsling  <ross.kirsling@sony.com>

        Realize Mac CMake build of WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=231749

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2021-10-15  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Support getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=231455
        <rdar://problem/84044495>

        Reviewed by Youenn Fablet and Jer Noble.

        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::alertMessageText): Add text for default screen capture prompt.
        (WebKit::allowButtonText): Ditto.
        (WebKit::doNotAllowButtonText): Ditto.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): Call
        default getDisplayMedia prompt if the delegate doesn't implement the private
        prompt selector.

        * UIProcess/MediaPermissionUtilities.h:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::promptForGetDisplayMedia): New default
        getDisplayMedia prompt.
        (WebKit::UserMediaPermissionRequestProxy::promptForGetUserMedia): 
        (WebKit::UserMediaPermissionRequestProxy::doDefaultAction): Call promptForGetDisplayMedia
        or promptForGetUserMedia according to the request type.
        (WebKit::UserMediaPermissionRequestProxy::canPromptForGetDisplayMedia):
        (WebKit::UserMediaPermissionRequestProxy::prompt): Deleted.
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::doDefaultAction): Deleted.

2021-10-15  Jer Noble  <jer.noble@apple.com>

        [iOS] Screen Sharing doesn't switch to AirPlay when <video> enters fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=231807
        <rdar://82995799>

        Reviewed by Eric Carlson.

        WebKit will allow AVPlayer to switch to AirPlay Video mode from Screen Sharing when a
        <video> element is in fullscreen mode. However, the fullscreen state this code depends on
        is not stored in the GPU process.

        Implement RemoteMediaPlayerProxy::mediaPlayerFullscreenMode()
        and ::mediaPlayerIsVideoFullscreenStandby().

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenMode):
        (WebKit::RemoteMediaPlayerProxy::videoFullscreenStandbyChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFullscreenMode const):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerIsVideoFullscreenStandby const):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::videoFullscreenStandbyChanged):

2021-10-15  Per Arne Vollan  <pvollan@apple.com>

        Some canvas tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=231837
        <rdar://problem/84318280>

        Reviewed by Brent Fulgham.

        To be able to receive the Launch Services database over XPC, a Network process XPC endpoint has to be sent to the
        GPU process. This was being sent in GPUProcessProxy::didFinishLaunching, but since the session ID and Website data
        store is not always available there, it was sometimes not being sent. Instead, send the endpoint in
        GPUProcessProxy::addSession, where the Website data store is always available.
 
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        (WebKit::GPUProcessProxy::addSession):

2021-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283925.
        https://bugs.webkit.org/show_bug.cgi?id=231839

        Incorrect

        Reverted changeset:

        "[macOS] Grant access in sandbox to 'system-privilege' for
        root"
        https://bugs.webkit.org/show_bug.cgi?id=231501
        https://commits.webkit.org/r283925

2021-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Explicitly link adattributiond with Foundation and CoreFoundation
        https://bugs.webkit.org/show_bug.cgi?id=231835

        Reviewed by Brady Eidson.

        Apply the same treatment to adattributiond as was done for webpushd in r284250.

        * Configurations/adattributiond.xcconfig:

2021-10-15  Garrett Davidson  <garrett_davidson@apple.com>

        Import AuthenticationServicesCore's public module as well
        https://bugs.webkit.org/show_bug.cgi?id=231806
        <rdar://84299174>

        Reviewed by Wenson Hsieh.

        Import the public module explicitly before the private module.

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:

2021-10-15  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Sort unix syscall list in WP sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231810
        <rdar://problem/84305761>

        Unreviewed formatting change. No change in behavior.

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

2021-10-15  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: handle Promise objects returned from evaluateScriptInExtensionTab
        https://bugs.webkit.org/show_bug.cgi?id=231709
        <rdar://problem/84224179>

        Reviewed by Timothy Hatcher.

        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::evaluateScriptForExtension):
        (WebKit::WebInspectorUIExtensionController::evaluateScriptInExtensionTab):
        Add JSLockHolders for when we are poking at the result value.
        Drive-by, fix a typo in logging code.

2021-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r284079): [Debug] IPCTestingAPI.CanReceiveSharedMemory is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231701
        <rdar://problem/84219000>

        Reviewed by Tim Horton.

        Implement two new methods on JSIPCStreamClientConnection: `sendMessage()` and `sendSyncMessage()`, which can be
        used to send IPC messages through the IPC stream client connection. To do this, we match the existing methods of
        the same names on JSIPC by creating a message encoder and sending it over the stream connection's IPC
        connection, effectively treating all IPC messages as out-of-line.

        In the future, this should be changed so that we only try to send out-of-line messages if the message itself is
        not stream encodable; for the time being, this at least allows us to fix the failing API test, and still makes
        it possible to test sending arbitrary IPC through the connection stream, such that we'll be able to exercise
        WebGL and display list IPC via these special JS IPC bindings.

        * Platform/IPC/StreamClientConnection.h:
        * WebProcess/WebPage/IPCTestingAPI.cpp:

        Declare several static helper functions near the top of this source file, so that we can use them in
        JSIPCStreamClientConnection below.

        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::create):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::JSIPCStreamClientConnection):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::staticFunctions):

        Drive-by fix: make the pointer from JSIPCStreamConnectionBuffer to JSIPCStreamClientConnection a WeakPtr, to
        prevent the stream connection buffer from keeping the client connection alive for longer than necessary. The
        JSIPCStreamConnectionBuffer is always intended to be outlived by JSIPCStreamClientConnection when using JS IPC.

        (WebKit::IPCTestingAPI::extractIPCStreamMessageInfo):

        Pull logic for extracting a destination ID, message name, and IPC timeout into a common helper method.

        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::prepareToSendOutOfStreamMessage):

        Add a helper method that encodes the given message and prepares the stream connection for sending this as an
        out-of-stream message by setting the destination ID (if needed) and appending the `ProcessOutOfStreamMessage`
        message to indicate that the recipient should expect an out-of-stream message.

        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::sendMessage):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::sendSyncMessage):
        (WebKit::IPCTestingAPI::JSIPC::createStreamClientConnection):

2021-10-15  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Update sandboxes to support finer-grained XPC services in the media stack
        https://bugs.webkit.org/show_bug.cgi?id=231782
        <rdar://problem/84275671>

        Reviewed by Eric Carlson.

        CoreMedia is refactoring to limit the features accessible through a given XPC service.
        We need to add an additional service name. This new name just exposes features already
        exposed through other XPC endpoints we already allow.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in: Always allow access to the new service.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::mediaRelatedMachServices): Updated for new service name.
        * WebProcess/com.apple.WebProcess.sb.in: Conditionally consume the new extension
        if the GPU process is turned off.

2021-10-15  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed maccatalyst build fix.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setTCCIdentity):

2021-10-15  Alex Christensen  <achristensen@webkit.org>

        Explicitly link webpushd with Foundation and CoreFoundation
        https://bugs.webkit.org/show_bug.cgi?id=231808
        <rdar://84302128>

        Reviewed by Brady Eidson.

        There is a build environment where the linker can't find a bunch of symbols from Foundation and CoreFoundation.
        This should fix that build.

        * Configurations/webpushd.xcconfig:

2021-10-15  Per Arne  <pvollan@apple.com>

        [iOS][GPUP] Block access to Launch Services Database service
        https://bugs.webkit.org/show_bug.cgi?id=231504
        <rdar://problem/84091679>

        Reviewed by Brent Fulgham.

        After <https://commits.webkit.org/242382@main>, access to this service is no longer required.

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

2021-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, revert an unintentional sandbox change in r284079

        I accidentally included the below change as a part of r284079, since it was necessary in order to avoid several
        layout test failures on macOS Monterey:

        - fast/canvas/toDataURL-supportedTypes.html
        - fast/canvas/canvas-blending-image-over-image.html
        - fast/canvas/canvas-blending-image-over-gradient.html
        - fast/canvas/canvas-blending-image-over-color.html
        - fast/canvas/toDataURL-not-empty.html

        ...but forgot to revert this change when landing the final patch.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-10-15  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider.
        <rdar://84275562> and https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        No new tests (No behavior change yet)

        Currently WebNotificationManagerProxy manages dispatching out stuff to the NotificationProvider SPI
        that - for example - Safari on Mac implements.
        
        The interface between the ManagerProxy and the Provider is already the perfect way to add an alternative behavior.
        
        This introduces the skeleton class of an alternative NotificationProvider that will eventually implement 
        WebKit-managed notifications.
        
        While under development it will have a global runtime switch so we can A/B test between the client-managed and 
        WebKit-managed notifications. That switch would eventually be replaced by full compile-time behavior which would
        be decided by a shipping vendor.
        
        Note: This patch enables the new flag BUILT_IN_NOTIFICATIONS to get the new mechanisms building, but that flag by
        itself doesn't expose Notifications interfaces in WebCore.
        That will still require enabling NOTIFICATIONS separately.
        
        * SourcesCocoa.txt:
        * UIProcess/API/APINotificationProvider.h:
        (API::NotificationProvider::isClientReplaceable const): A temporary mechanism to prevent API clients from overriding
          the built-in NotificationProvider if the feature is enabled. Useful right now because existing Safari does that with existing SPI.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::decidePolicyForNotificationPermissionRequest):

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest):

        * UIProcess/Notifications/Cocoa/WebNotificationProviderCocoa.h: Copied from Source/WebKit/UIProcess/API/APINotificationProvider.h.
        * UIProcess/Notifications/Cocoa/WebNotificationProviderCocoa.mm: Added.
        (WebKit::WebNotificationProviderCocoa::createIfEnabled):
        (WebKit::WebNotificationProviderCocoa::WebNotificationProviderCocoa):
        (WebKit::WebNotificationProviderCocoa::show):
        (WebKit::WebNotificationProviderCocoa::cancel):
        (WebKit::WebNotificationProviderCocoa::didDestroyNotification):
        (WebKit::WebNotificationProviderCocoa::clearNotifications):
        (WebKit::WebNotificationProviderCocoa::addNotificationManager):
        (WebKit::WebNotificationProviderCocoa::removeNotificationManager):
        (WebKit::WebNotificationProviderCocoa::notificationPermissions):

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        (WebKit::WebNotificationManagerProxy::setProvider):

        Fix changes to the Unified Build:
        * UIProcess/ios/WKHoverPlatter.h:
        * UIProcess/ios/WKHoverPlatter.mm:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Add AdAttributionDaemon plist on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231309

        Reviewed by John Wilander.

        This adds a plist that tells launchd where to find AdAttributionDaemon and how to launch it.
        In another patch I'll add a change to WebsiteDataStoreConfiguration to tell WebKit to use the daemon.

        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::registerScheduledActivityHandler):
        * Shared/EntryPointUtilities/Cocoa/Daemon/com.apple.webkit.adattributiond.plist: Added.
        * WebKit.xcodeproj/project.pbxproj:

2021-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [JS IPC] Implement a way to synchronously wait for an incoming IPC message
        https://bugs.webkit.org/show_bug.cgi?id=231745

        Reviewed by Tim Horton.

        Add support for `IPC.waitForMessage()`, which blocks until we receive an incoming IPC message that matches the
        given message name and destination ID. We use this new method to fix the failing API test
        IPCTestingAPI.CanReceiveIPCSemaphore, which verifies that we're able to receive, decode, and call methods on
        an IPC semaphore sent from the GPU process to the web process. In this case, we wait for the incoming
        "RemoteRenderingBackendProxy::DidCreateWakeUpSemaphoreForDisplayListStream" message after creating the remote
        rendering backend in the GPU process.

        * Platform/IPC/Connection.h:
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::setWakeUpSemaphore):

        Also add a method on JSIPCStreamClientConnection to install a given IPC semaphore as the wakeup semaphore for
        the IPC stream. We'll use this in the next patch when implementing the ability to send messages through the IPC
        stream.

        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::staticFunctions):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::streamBuffer):

        Drive-by fix: make sure we grab the VM lock before trying to unwrap JS objects.

        (WebKit::IPCTestingAPI::JSIPC::staticFunctions):
        (WebKit::IPCTestingAPI::JSIPC::sendMessage):

        Drive-by fix: correct a minor typo in the exception message.

        (WebKit::IPCTestingAPI::extractSyncIPCMessageInfo):

        Pull logic for extracting an IPC::Connection, destination ID, message name, and IPC timeout into a separate
        helper function, and use it in `waitForMessage` as well as `sendSyncMessage`.

        (WebKit::IPCTestingAPI::JSIPC::waitForMessage):
        (WebKit::IPCTestingAPI::JSIPC::sendSyncMessage):

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Fix build after r284216
        https://bugs.webkit.org/show_bug.cgi?id=231523

        * WebKit.xcodeproj/project.pbxproj:

2021-10-14  Kate Cheney  <katherine_cheney@apple.com>

        Adopt attribution AVCaptureSession SPI for GPU process
        https://bugs.webkit.org/show_bug.cgi?id=231621
        <rdar://problem/80748535>

        Reviewed by Eric Carlson.

        Add SPI to attribute camera access to host app in the GPU process.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setTCCIdentity):
        * Shared/Cocoa/TCCSoftLink.h:
        * Shared/Cocoa/TCCSoftLink.mm:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::startProducingData):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        (WebKit::UserMediaCaptureManagerProxy::ConnectionProxy::setTCCIdentity):
        * WebKit.xcodeproj/project.pbxproj:

2021-10-14  John Pascoe  <j_pascoe@apple.com>

        Update deleteLocalAuthenticatorCredentialWithID and setUsernameForLocalCredentialWithID according to internal needs
        https://bugs.webkit.org/show_bug.cgi?id=231777
        rdar://84276065

        Reviewed by Brent Fulgham.

        Covered by manual tests.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel deleteLocalAuthenticatorCredentialWithID:]):
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Reduce memory use of AdAttributionDaemon
        https://bugs.webkit.org/show_bug.cgi?id=231523

        Reviewed by Brady Eidson.

        * Configurations/adattributiond.xcconfig:
        * Shared/API/Cocoa/WKMain.h:
        * Shared/API/Cocoa/WKMain.mm:
        (WKXPCServiceMain):
        (WKPCMDaemonMain): Deleted.
        * Shared/EntryPointUtilities/Cocoa/Daemon/adattributiond.cpp: Renamed from Source/WebKit/Shared/EntryPointUtilities/Cocoa/Daemon/adattributiond.c.
        (main):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix build failures with newer clang
        https://bugs.webkit.org/show_bug.cgi?id=231783

        Reviewed by Chris Dumez.

        We do not need to define copy constructor and assignment operator if we would like to use the default implementation.
        The default copy constructor and assignment operator works well for TouchBarMenuItemData, so let's drop it.

        * Shared/TouchBarMenuItemData.h:

2021-10-14  Peng Liu  <peng.liu6@apple.com>

        Promote WKPreferences._needsSiteSpecificQuirks to API
        https://bugs.webkit.org/show_bug.cgi?id=230721
        <rdar://83255206>

        Reviewed by Jer Noble.

        Add a new API `WKPreferences.isSetSiteSpecificQuirksModeEnabled`.

        No new tests. Updated API tests to use the new API.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences isSiteSpecificQuirksModeEnabled]):
        (-[WKPreferences setSiteSpecificQuirksModeEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Remove Variant.h
        https://bugs.webkit.org/show_bug.cgi?id=231744

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/cache/NetworkCacheData.h:
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/Attachment.h:
        * Platform/IPC/MessageReceiveQueueMap.h:
        * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb:
        * Shared/WebCompiledContentRuleListData.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/wpe/TouchGestureController.h:
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/PageClient.h:
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * WebProcess/GPU/graphics/ImageBufferBackendHandle.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:

2021-10-14  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Crash on WP startup
        https://bugs.webkit.org/show_bug.cgi?id=231773
        <rdar://84218823>

        Unreviewed partial revert of https://trac.webkit.org/r283375.

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

2021-10-14  Alex Christensen  <achristensen@webkit.org>

        Share IPC communication code between webpushd and adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231718

        Reviewed by Brady Eidson.

        This shares enough code from adattributiond to implement a communication protocol for webpushd.
        Right now the protocol only has one action, EchoTwice, which echos a WTF::String twice as its reply,
        but that is just a testable behavior that will be soon replaced by more complicated and useful behaviors.

        * Configurations/webpushd.xcconfig:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.mm:
        (WebKit::PCM::addVersionAndEncodedMessageToDictionary):
        * Shared/Daemon/DaemonUtilities.h: Copied from Source/WebKit/Shared/EntryPointUtilities/Cocoa/Daemon/webpushd.c.
        * Shared/Daemon/DaemonUtilities.mm: Added.
        (WebKit::startListeningForMachServiceConnections):
        (WebKit::vectorToXPCData):
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::connectionAdded):
        (WebKit::connectionRemoved):
        (WebKit::PCMDaemonMain):
        (WebKit::startListeningForMachServiceConnections): Deleted.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * webpushd/WebPushDaemonMain.mm: Added.
        (WebPushD::CompletionHandler<void):
        (WebPushD::echoTwice):
        (WebPushD::decodeMessageAndSendReply):
        (WebPushD::connectionEventHandler):
        (WebPushD::connectionAdded):
        (WebPushD::connectionRemoved):
        (main):

2021-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [JS IPC] Make it possible to establish a stream connection using the JS IPC testing API
        https://bugs.webkit.org/show_bug.cgi?id=231710

        Reviewed by Tim Horton.

        Work towards fixing IPCTestingAPI.CanReceiveIPCSemaphore and IPCTestingAPI.CanReceiveSharedMemory, which broke
        after I refactored RemoteRenderingBackend to be a IPC stream message receiver (instead of a standard IPC message
        receiver). To achieve this, we introduce two new JS wrapper objects to encapsulate an IPC stream client
        connection, as well as the stream buffer used to service that connection.

        This allows us to establish a streaming IPC connection from the web process to the GPU process via JS IPC API,
        like so:

        ```
        const bufferSize = 1 << 16;
        const streamConnection = IPC.createStreamClientConnection('GPU', bufferSize);
        IPC.sendMessage('GPU', 0, IPC.messages.GPUConnectionToWebProcess_CreateRenderingBackend.name, [
            { type: 'RemoteRenderingBackendCreationParameters', 'identifier': 123, 'pageProxyID': IPC.webPageProxyID, 'pageID': IPC.pageID },
            { type: 'StreamConnectionBuffer', value: streamConnection.streamBuffer() }
        ]);
        ```

        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::create):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::connection):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::JSIPCStreamClientConnection):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::create):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::encode const):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::JSIPCStreamConnectionBuffer):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::createJSWrapper):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::wrapperClass):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::unwrap):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::toWrapped):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::initialize):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::finalize):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::staticFunctions):
        (WebKit::IPCTestingAPI::JSIPCStreamClientConnection::streamBuffer):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::createJSWrapper):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::wrapperClass):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::unwrap):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::toWrapped):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::initialize):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::finalize):
        (WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::staticFunctions):
        (WebKit::IPCTestingAPI::JSIPC::staticFunctions):
        (WebKit::IPCTestingAPI::encodeStreamConnectionBuffer):
        (WebKit::IPCTestingAPI::encodeArgument):
        (WebKit::IPCTestingAPI::JSIPC::createStreamClientConnection):

2021-10-14  Timothy Hatcher  <timothy@apple.com>

        Null check the context in -[WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:]
        https://bugs.webkit.org/show_bug.cgi?id=231758

        Reviewed by Chris Dumez.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:]):
        _frame->jsContextForServiceWorkerWorld() can return nullptr, so null check before using the result.

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        * Configurations/SDKVariant.xcconfig:

2021-10-14  Chris Dumez  <cdumez@apple.com>

        [WKWebView _loadServiceWorkerURL] ends up lowercasing URL host
        https://bugs.webkit.org/show_bug.cgi?id=231742

        Reviewed by Timothy Hatcher.

        [WKWebView _loadServiceWorkerURL] ends up lowercasing URL host. While I don't think it is technically wrong
        (hosts should not be case-sensitive), it can be confusing.

        The reason this was happening is that I was using SecurityOriginData::fromURL(url).toString() to extract the
        URL's scheme/host/port and SecurityOriginData::fromURL() lowercases the scheme and host. I am now using
        URL::protocolHostAndPort() instead, which does not have this side effect and is actually more efficient.

        No new tests, extended existing API test.

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

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Move getCurrentExecutablePath() and getCurrentExecutableName() to FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=231732

        Reviewed by Michael Catanzaro.

        * Shared/glib/ProcessExecutablePathGLib.cpp:
        (WebKit::getExecutablePath):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:

2021-10-13  Chris Dumez  <cdumez@apple.com>

        Drop makeWeakPtr() and use WeakPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=231679

        Reviewed by Darin Adler.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        * GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp:
        (WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):
        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
        * GPUProcess/media/RemoteCDMFactoryProxy.cpp:
        (WebKit::RemoteCDMFactoryProxy::RemoteCDMFactoryProxy):
        (WebKit::RemoteCDMFactoryProxy::createCDM):
        * GPUProcess/media/RemoteCDMInstanceProxy.cpp:
        (WebKit::RemoteCDMInstanceProxy::RemoteCDMInstanceProxy):
        (WebKit::RemoteCDMInstanceProxy::createSession):
        * GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp:
        (WebKit::RemoteCDMInstanceSessionProxy::create):
        * GPUProcess/media/RemoteCDMProxy.cpp:
        (WebKit::RemoteCDMProxy::createInstance):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::RemoteImageDecoderAVFProxy):
        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
        (WebKit::RemoteLegacyCDMFactoryProxy::RemoteLegacyCDMFactoryProxy):
        (WebKit::RemoteLegacyCDMFactoryProxy::createCDM):
        * GPUProcess/media/RemoteLegacyCDMProxy.cpp:
        (WebKit::RemoteLegacyCDMProxy::createSession):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy):
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::setLegacyCDMSession):
        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::RemoteMediaResource):
        * GPUProcess/media/RemoteMediaResourceLoader.cpp:
        (WebKit::RemoteMediaResourceLoader::RemoteMediaResourceLoader):
        * GPUProcess/media/RemoteMediaSourceProxy.cpp:
        (WebKit::RemoteMediaSourceProxy::RemoteMediaSourceProxy):
        * GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp:
        (WebKit::RemoteRemoteCommandListenerProxy::RemoteRemoteCommandListenerProxy):
        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::RemoteSourceBufferProxy):
        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::RemoteTextTrackProxy):
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm:
        (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]):
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::NetworkCORSPreflightChecker):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::NetworkDataTask):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::startWithScheduling):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::simulateResourceLoadStatisticsSessionRestart):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendDidReceiveResponsePotentiallyInNewBrowsingContextGroup):
        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::NetworkSocketChannel):
        * NetworkProcess/NetworkStorageSessionProvider.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        (WebKit::PCM::ClientImpl::ClientImpl):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        (WebKit::PCM::ConnectionToMachService::ConnectionToMachService):
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementConnectionCocoa.mm:
        (WebKit::PCM::ConnectionToMachService::initializeConnectionIfNeeded const):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::start):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::ServiceWorkerSoftUpdateLoader):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        (WebKit::WebSWServerToContextConnection::registerFetch):
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::connectToLocalStorageArea):
        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
        (WebKit::StorageManagerSet::connectToSessionStorageArea):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::Engine):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::swapSessionIfNecessary):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:wrapper:withCredentials:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        (WebKit::NetworkSessionCocoa::addWebPageNetworkParameters):
        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::FileSystemStorageHandle):
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.cpp:
        (WebKit::FileSystemStorageHandleRegistry::registerHandle):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addMessageObserver):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::addMessageReceiver):
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate _initWithRequest:presenter:]):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        * Shared/WebSQLiteDatabaseTracker.h:
        * Shared/XR/XRDeviceProxy.cpp:
        (WebKit::XRDeviceProxy::XRDeviceProxy):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::initializeSecItemShim):
        * UIProcess/API/APIAttachment.cpp:
        (API::Attachment::Attachment):
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::HTTPCookieStore):
        (API::HTTPCookieStore::registerObserver):
        * UIProcess/API/APIInspectorExtension.cpp:
        (API::InspectorExtension::InspectorExtension):
        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        (API::WebAuthenticationPanel::handleRequest):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _removeDataDetectedLinks:]):
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKMediaSessionCoordinatorHelper initWithCoordinator:]):
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel setDelegate:]):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _detectDataWithTypes:completionHandler:]):
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm:
        (-[WKGroupActivitiesCoordinatorDelegate initWithParent:]):
        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.mm:
        (-[WKCustomProtocolLoader initWithLegacyCustomProtocolManagerProxy:customProtocolID:request:]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::NavigationClient::NavigationClient):
        (WebKit::tryInterceptNavigation):
        (WebKit::NavigationState::HistoryClient::HistoryClient):
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        (-[WKSOSecretDelegate initWithSession:]):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::SOAuthorizationSession):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::ContextMenuClient::ContextMenuClient):
        (WebKit::UIDelegate::UIClient::UIClient):
        (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest):
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::grantAccess):
        (WebKit::WebPasteboardProxy::didModifyContentsOfPasteboard):
        (WebKit::WebPasteboardProxy::PasteboardAccessInformation::grantAccess):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::setMediaAccessibilityPreferences):
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKDOMPasteMenuDelegate initWithWebViewImpl:]):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::DownloadProxy):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getOrCreate):
        * UIProcess/Inspector/InspectorTargetProxy.cpp:
        (WebKit::InspectorTargetProxy::create):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::WebInspectorUIExtensionControllerProxy):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        * UIProcess/MediaKeySystemPermissionRequestProxy.cpp:
        (WebKit::MediaKeySystemPermissionRequestProxy::MediaKeySystemPermissionRequestProxy):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxyCocoa.mm:
        (WebKit::NetworkProcessProxy::XPCEventHandler::XPCEventHandler):
        * UIProcess/PDF/WKPDFHUDView.mm:
        (-[WKPDFHUDView initWithFrame:pluginIdentifier:page:]):
        * UIProcess/SpeechRecognitionPermissionRequest.h:
        (WebKit::SpeechRecognitionPermissionRequest::SpeechRecognitionPermissionRequest):
        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp:
        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp:
        (WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::addSource):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::setAlternateBackForwardListSourcePage):
        * UIProcess/WebAuthentication/Authenticator.h:
        (WebKit::Authenticator::setObserver):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::dispatchPanelClientCall const):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::AuthenticatorTransportService):
        * UIProcess/WebAuthentication/Cocoa/AuthenticatorPresenterCoordinator.mm:
        (WebKit::AuthenticatorPresenterCoordinator::AuthenticatorPresenterCoordinator):
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::NfcConnection):
        * UIProcess/WebAuthentication/Cocoa/WKASCAuthorizationPresenterDelegate.mm:
        (-[WKASCAuthorizationPresenterDelegate initWithCoordinator:]):
        * UIProcess/WebAuthentication/Cocoa/WKNFReaderSessionDelegate.mm:
        (-[WKNFReaderSessionDelegate initWithConnection:]):
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
        (WebKit::WebAuthenticatorCoordinatorProxy::performRequest):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        * UIProcess/WebAuthentication/fido/FidoService.cpp:
        (WebKit::FidoService::getInfo):
        * UIProcess/WebContextMenuListenerProxy.cpp:
        (WebKit::WebContextMenuListenerProxy::WebContextMenuListenerProxy):
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::WebContextMenuProxy):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebDataListSuggestionsDropdown.cpp:
        (WebKit::WebDataListSuggestionsDropdown::WebDataListSuggestionsDropdown):
        * UIProcess/WebDateTimePicker.cpp:
        (WebKit::WebDateTimePicker::WebDateTimePicker):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::WebEditCommandProxy):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::PageClientProtector::PageClientProtector):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::addObserver):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection):
        (WebKit::WebProcessPool::getWebAuthnProcessConnection):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::createSpeechRecognitionServer):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::WeakOrStrongPtr::WeakOrStrongPtr):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::attachBuffer):
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _notifyAssertionsOfImminentSuspension]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsControl showSuggestionsDropdown:activationType:]):
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setImpl):
        * UIProcess/mac/WKRevealItemPresenter.mm:
        (-[WKRevealItemPresenter initWithWebViewImpl:item:frame:menuLocation:]):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem):
        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
        (-[WKDataListSuggestionsController showSuggestionsDropdown:]):
        * UIProcess/mac/WebDateTimePickerMac.mm:
        (-[WKDateTimePicker showPicker:]):
        * WebProcess/Automation/WebAutomationDOMWindowObserver.cpp:
        (WebKit::WebAutomationDOMWindowObserver::WebAutomationDOMWindowObserver):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
        (WebKit::m_renderingBackend):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::cacheImageBuffer):
        (WebKit::RemoteResourceCacheProxy::recordNativeImageUse):
        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        * WebProcess/GPU/media/MediaSourcePrivateRemote.cpp:
        (WebKit::MediaSourcePrivateRemote::MediaSourcePrivateRemote):
        * WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
        (WebKit::RemoteAudioDestinationProxy::connection):
        * WebProcess/GPU/media/RemoteAudioHardwareListener.cpp:
        (WebKit::RemoteAudioHardwareListener::RemoteAudioHardwareListener):
        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::ensureConnection):
        * WebProcess/GPU/media/RemoteAudioSourceProvider.cpp:
        (WebKit::RemoteAudioSourceProvider::RemoteAudioSourceProvider):
        * WebProcess/GPU/media/RemoteCDM.cpp:
        (WebKit::RemoteCDM::createInstance):
        * WebProcess/GPU/media/RemoteCDMFactory.cpp:
        (WebKit::RemoteCDMFactory::createCDM):
        * WebProcess/GPU/media/RemoteCDMInstance.cpp:
        (WebKit::RemoteCDMInstance::createSession):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::RemoteImageDecoderAVF):
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.cpp:
        (WebKit::RemoteImageDecoderAVFManager::createImageDecoder):
        (WebKit::RemoteImageDecoderAVFManager::ensureGPUProcessConnection):
        * WebProcess/GPU/media/RemoteLegacyCDMFactory.cpp:
        (WebKit::RemoteLegacyCDMFactory::createCDM):
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
        * WebProcess/GPU/media/RemoteRemoteCommandListener.cpp:
        (WebKit::RemoteRemoteCommandListener::ensureGPUProcessConnection):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::SourceBufferPrivateRemote):
        * WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
        (WebKit::TextTrackPrivateRemote::TextTrackPrivateRemote):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
        (-[WKVideoLayerRemote setMediaPlayerPrivateRemote:]):
        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
        (WebKit::RemoteMediaSessionHelper::ensureConnection):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::add):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::SampleBufferDisplayLayer):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp:
        (WebKit::SampleBufferDisplayLayerManager::createLayer):
        (WebKit::SampleBufferDisplayLayerManager::addLayer):
        * WebProcess/InjectedBundle/API/glib/DOM/DOMObjectCache.cpp:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::WebInspectorUIExtensionController):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::WebSocketChannel):
        * WebProcess/Network/WebSocketChannelManager.cpp:
        (WebKit::WebSocketChannelManager::addChannel):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::connectToSource):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject initWithPDFPlugin:andElement:]):
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::initialize):
        * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.cpp:
        (WebKit::WebDeviceOrientationUpdateProvider::WebDeviceOrientationUpdateProvider):
        (WebKit::WebDeviceOrientationUpdateProvider::deviceOrientationChanged):
        (WebKit::WebDeviceOrientationUpdateProvider::deviceMotionChanged):
        * WebProcess/WebCoreSupport/WebPermissionController.cpp:
        (WebKit::WebPermissionController::WebPermissionController):
        * WebProcess/WebCoreSupport/WebSpeechRecognitionConnection.cpp:
        (WebKit::WebSpeechRecognitionConnection::registerClient):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::setRemoteObjectRegistry):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPC::JSIPC):
        (WebKit::IPCTestingAPI::JSMessageListener::JSMessageListener):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::RemoteLayerTreeDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::updateDrawingArea):
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::WebContextMenu):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::initWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::setLoadListener):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActiveDataListSuggestionPicker):
        (WebKit::WebPage::setActiveDateTimeChooser):
        (WebKit::WebPage::startTextManipulations):
        (WebKit::WebPage::requestTextRecognition):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didFinishContentChangeObserving):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::createPDFHUD):
        * WebProcess/WebStorage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        * WebProcess/cocoa/AudioSessionRoutingArbitrator.cpp:
        (WebKit::AudioSessionRoutingArbitrator::AudioSessionRoutingArbitrator):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::enterVideoFullscreenForVideoElement):

2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Clearly distinguish serial from concurrent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=231418
        rdar://problem/84021977

        Reviewed by Chris Dumez.

        Replace instances of WorkQueue being constructed as a concurrent one
        with ConcurrentWorkQueue.
        Remove the now unnecessary use of WorkQueue::Type::Serial in constructor.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::videoMediaStreamTrackRendererQueue):
        (WebKit::GPUProcess::libWebRTCCodecsQueue):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::Engine):
        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cache/NetworkCacheIOChannelGLib.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSyncInThread):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::ioQueue):
        (WebKit::NetworkCache::Storage::backgroundIOQueue):
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::open):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::readerQueue):
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        (WebKit::MediaTrackReader::storageQueue):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::ContentRuleListStore):
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::appBoundDomainQueue):
        * WebProcess/GPU/media/RemoteAudioSourceProviderManager.cpp:
        (WebKit::RemoteAudioSourceProviderManager::RemoteAudioSourceProviderManager):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::LibWebRTCCodecs):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteCaptureSampleManager):

2021-10-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Opening emoji chooser crashes UI process with GTK 3.24.30
        https://bugs.webkit.org/show_bug.cgi?id=228664

        Reviewed by Michael Catanzaro.

        Instead of providing a copy of the emoji chooser widget, use GLib's
        introspection features and a little sprinkle of knowledge about how
        GTK works in order to obtain the type code of the GtkEmojiChooser
        widget included with GTK. This ensures that a working widget is
        always used, regardless of the current GTK version.

        No new tests needed.

        * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
        (webkitEmojiChooserNew):
        (): Deleted.
        (webkitEmojiChooserAddEmoji): Deleted.
        (webkitEmojiChooserAddRecentItem): Deleted.
        (emojiActivated): Deleted.
        (emojiDataHasVariations): Deleted.
        (webkitEmojiChooserShowVariations): Deleted.
        (emojiLongPressed): Deleted.
        (emojiPressed): Deleted.
        (emojiPopupMenu): Deleted.
        (verticalAdjustmentChanged): Deleted.
        (webkitEmojiChooserSetupSectionBox): Deleted.
        (scrollToSection): Deleted.
        (webkitEmojiChooserSetupSectionButton): Deleted.
        (webkitEmojiChooserSetupRecent): Deleted.
        (webkitEmojiChooserEnsureEmptyResult): Deleted.
        (webkitEmojiChooserSearchChanged): Deleted.
        (webkitEmojiChooserSetupFilters): Deleted.
        (webkitEmojiChooserSetupEmojiSections): Deleted.
        (webkitEmojiChooserInitializeEmojiMaxWidth): Deleted.
        (webkitEmojiChooserConstructed): Deleted.
        (webkitEmojiChooserShow): Deleted.
        (webkit_emoji_chooser_class_init): Deleted.
        * UIProcess/API/gtk/WebKitEmojiChooser.h:

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Prepare adattributiond Connection and IPC code for reuse with webpushd
        https://bugs.webkit.org/show_bug.cgi?id=231680

        Reviewed by Brady Eidson.

        I move Connection, Encoder, and Decoder out of namespace PCM and into namespace Daemon and keep the PCM parts in PCM::Connection.
        I remove an unnecessary memory copy by using a Span instead of a Vector for decoding.
        I make ConnectionToMachService a template to be used with a different communication protocol for communicating with webpushd.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        (WebKit::PCM::Connection::Connection):
        (WebKit::PCM::ConnectionToMachService::ConnectionToMachService): Deleted.
        (WebKit::PCM::ConnectionToMachService::send const): Deleted.
        (WebKit::PCM::ConnectionToMachService::sendWithReply const): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h:
        (WebKit::PCM::Connection::Connection): Deleted.
        (WebKit::PCM::Connection::get const): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::MessageInfo::toStringForTesting::encodeReply):
        (WebKit::PCM::handlePCMMessage):
        (WebKit::PCM::handlePCMMessageSetDebugModeIsEnabled):
        (WebKit::PCM::handlePCMMessageWithReply):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::sendMessage const):
        (WebKit::PCM::ReplyCaller<>::callReply):
        (WebKit::PCM::ReplyCaller<String>::callReply):
        (WebKit::PCM::ManagerProxy::sendMessageWithReply const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementConnectionCocoa.mm:
        (WebKit::PCM::Connection::newConnectionWasInitialized const):
        (WebKit::PCM::Connection::connectionReceivedEvent const):
        (WebKit::PCM::Connection::dictionaryFromMessage const):
        (WebKit::PCM::ConnectionToMachService::initializeConnectionIfNeeded const): Deleted.
        (WebKit::PCM::ConnectionToMachService::sendDebugModeIsEnabledMessageIfNecessary const): Deleted.
        (WebKit::PCM::ConnectionToMachService::checkForDebugMessageBroadcast const): Deleted.
        (WebKit::PCM::dictionaryFromMessage): Deleted.
        (WebKit::PCM::Connection::send const): Deleted.
        (WebKit::PCM::Connection::sendWithReply const): Deleted.
        (WebKit::PCM::ConnectionToMachService::send const): Deleted.
        (WebKit::PCM::ConnectionToMachService::sendWithReply const): Deleted.
        * Platform/IPC/ArgumentCoders.cpp:
        * Platform/IPC/DaemonConnection.cpp: Copied from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEncoder.cpp.
        (WebKit::Daemon::ConnectionToMachService<Traits>::send const):
        (WebKit::Daemon::ConnectionToMachService<Traits>::sendWithReply const):
        * Platform/IPC/DaemonConnection.h: Copied from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h.
        (WebKit::Daemon::Connection::Connection):
        (WebKit::Daemon::Connection::get const):
        (WebKit::Daemon::ConnectionToMachService::ConnectionToMachService):
        * Platform/IPC/DaemonDecoder.cpp: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.cpp.
        * Platform/IPC/DaemonDecoder.h: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.h.
        (WebKit::Daemon::Decoder::Decoder):
        * Platform/IPC/DaemonEncoder.cpp: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEncoder.cpp.
        * Platform/IPC/DaemonEncoder.h: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEncoder.h.
        * Platform/IPC/cocoa/DaemonConnectionCocoa.mm: Copied from Source/WebKit/NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementConnectionCocoa.mm.
        (WebKit::Daemon::Connection::send const):
        (WebKit::Daemon::Connection::sendWithReply const):
        (WebKit::Daemon::ConnectionToMachService<Traits>::initializeConnectionIfNeeded const):
        (WebKit::Daemon::ConnectionToMachService<Traits>::send const):
        (WebKit::Daemon::ConnectionToMachService<Traits>::sendWithReply const):
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonConnectionSet.h:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonConnectionSet.mm:
        (WebKit::PCM::DaemonConnectionSet::setConnectedNetworkProcessHasDebugModeEnabled):
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::connectionEventHandler):
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::encode):
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::decode):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-13  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemHandle move()
        https://bugs.webkit.org/show_bug.cgi?id=231676
        <rdar://problem/84199823>

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::isValidFileName):
        (WebKit::FileSystemStorageHandle::requestCreateHandle):
        (WebKit::FileSystemStorageHandle::removeEntry):
        (WebKit::FileSystemStorageHandle::move):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::move):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::move):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-10-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support both VK and VKC-prefixed SPI when softlinking VisionKitCore classes
        https://bugs.webkit.org/show_bug.cgi?id=231683
        rdar://83744729

        Reviewed by Tim Horton.

        Several SPI classes in VisionKitCore are going to be renamed to be prefixed with VKC- rather than VK-, with a
        `@compatibility_alias` for the existing SPI names. Refactor Live Text support in WebKit to be both binary and
        source compatible with this future version of VisionKitCore, by checking for the existence of both class names
        when softlinking VKImageAnalyzer and VKImageAnalyzerRequest. See below for more details.

        * Platform/cocoa/TextRecognitionUtilities.h:
        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::hasVisionKitCorePrefixedClasses):
        (WebKit::createImageAnalyzer):
        (WebKit::createImageAnalyzerRequest):

        Instead of calling into PAL softlinking functions to allocate VKImageAnalyzer, put this logic behind a helper
        function in TextRecognitionUtilities, which knows how to check for either class.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::ensureImageAnalyzer):
        (WebKit::createImageAnalyzerRequest):
        (WebKit::WebViewImpl::requestTextRecognition):
        (WebKit::WebViewImpl::computeHasImageAnalysisResults):
        (WebKit::createImageAnalysisRequest): Deleted.

        Use the helper functions declared in TextRecognitionUtilities.h.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView imageAnalyzer]):
        (-[WKContentView createImageAnalyzerRequest:image:imageURL:]):
        (-[WKContentView createImageAnalyzerRequest:image:]):
        (-[WKContentView requestTextRecognition:imageData:completionHandler:]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):
        (-[WKContentView imageAnalysisGestureDidTimeOut:]):
        (-[WKContentView createImageAnalysisRequest:image:imageURL:]): Deleted.
        (-[WKContentView createImageAnalysisRequest:image:]): Deleted.

        Use the helper functions declared in TextRecognitionUtilities.h, instead of using PAL softlinking directly. We
        also refactor this code to pass a CGImageRef instead of a UIImage when initializing the image analyzer request,
        such that the helper functions can work across macOS and iOS.

        Also rename `createImageAnalysisRequest` to `createImageAnalyzerRequest` for consistency with the class name.

2021-10-13  Per Arne  <pvollan@apple.com>

        Restrict "darwin-notification-post" to a minimal set in the WP sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231594
        <rdar://66586792>

        Reviewed by Brent Fulgham.

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

2021-10-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL video texture upload is very slow due to excessive transfer of the video pixel buffer
        https://bugs.webkit.org/show_bug.cgi?id=231425

        Reviewed by Youenn Fablet.

        Typical WebGL content requests the videos to be uploaded to a texture
        once per render loop update, even though the video has not changed.
        The video pixel buffer is slow to transfer across IPC. It should be transferred
        only when it has changed.

        MediaPlayerPrivateAVFoundationObjC and MediaPlayerPrivateMediaSourceAVFObjC hold
        the last requested pixel buffer ref. They will update it or discard it only
        when pixelBufferForCurrentTime() is called.

        Cache the pixel buffer to MediaPlayerPrivateRemote (GPUP side proxy)
        Cache the pixel buffer to RemoteMediaPlayerProxy (WebP side proxy)

        The caches increase the total memory use only during the duration
        of the call, since after the ref has been updated, it refers
        to the one always held in the original objects (MediaPlayerPrivateAVFoundationObjC
        and MediaPlayerPrivateMediaSourceAVFObjC)

        No new tests, fixes a perf regression wrt GPUP media.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::invalidate):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::nativeImageForCurrentTime):
        (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTimeIfChanged):
        (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTime): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime):

2021-10-13  Per Arne Vollan <pvollan@apple.com>

        [iOS] Stop including 'util.sb' in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231570
        <rdar://problem/84143956>

        Reviewed by Brent Fulgham.

        This is a step towards being able to test-compile the sandbox on Open Source builders.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * Shared/Sandbox/util.sb: Added.

2021-10-12  Alexey Proskuryakov  <ap@apple.com>

        Invoke build scripts with python3 explicitly
        https://bugs.webkit.org/show_bug.cgi?id=231587

        Reviewed by Jonathan Bedard.

        Much of the work to support Python 3 was done years ago, but we need this to
        actually use Python 3 on macOS.

        * DerivedSources.make:
        * Scripts/generate-message-receiver.py:
        * Scripts/postprocess-header-rule:
        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/model_unittest.py:
        * Scripts/webkit/parser_unittest.py:
        * Scripts/webkit/tests/Makefile:

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::Variant and WTF::get
        https://bugs.webkit.org/show_bug.cgi?id=231675

        Reviewed by Chris Dumez.

        * GPUProcess/graphics/QualifiedResourceHeap.h:
        (WebKit::QualifiedResourceHeap::get const):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::Data):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PasteboardCustomData::Entry>::encode):
        (IPC::ArgumentCoder<IDBKeyPath>::encode):
        (IPC::ArgumentCoder<ServiceWorkerOrClientData>::encode):
        (IPC::ArgumentCoder<ServiceWorkerOrClientIdentifier>::encode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        * UIProcess/API/wpe/TouchGestureController.h:
        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::isValidBackgroundActivity):
        (WebKit::ProcessThrottler::isValidForegroundActivity):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::getRpId):
        (WebKit::WebCore::getUserName):
        (WebKit::AuthenticatorManager::respondReceived):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterDecidePolicy):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterResponseSelected):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserVerification):
        (WebKit::LocalAuthenticator::deleteDuplicateCredential const):
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.cpp:
        (WebKit::getUserVerificationRequirement):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::processGoogleLegacyAppIdSupportExtension):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::makeCredential):
        (WebKit::U2fAuthenticator::checkExcludeList):
        (WebKit::U2fAuthenticator::issueRegisterCommand):
        (WebKit::U2fAuthenticator::getAssertion):
        (WebKit::U2fAuthenticator::issueSignCommand):
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::create):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::createImageBufferBackendHandle const):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::create):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::audioSamplesAvailable):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_add):
        * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::removeAnnotationRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::annotatedSubstringBetweenPositions):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):

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

        [Build-time perf] Forward-declare more things in Document.h
        https://bugs.webkit.org/show_bug.cgi?id=231489

        Reviewed by Myles C. Maxfield.

        Move the folowing enumerations outside their classes so that they can be forward-declared:
        - MediaProducer::MediaStateFlags -> MediaProducerMediaStateFlags
        - MediaProducer::MediaCaptureKind -> MediaProducerMediaCaptureKind
        - MediaProducer::MutedState -> MediaProducerMutedState

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::enqueueSecurityPolicyViolationEvent):
        * NetworkProcess/NetworkResourceLoader.h:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::mediaCaptureStateDidChange):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMuted):
        (WKPageGetMediaState):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView cameraCaptureState]):
        (-[WKWebView microphoneCaptureState]):
        (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
        (-[WKWebView setCameraCaptureState:completionHandler:]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _setPageMuted:]):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConfigureMediaCapture):
        (webkit_web_view_set_camera_capture_state):
        (webkit_web_view_set_microphone_capture_state):
        (webkit_web_view_set_display_capture_state):
        * UIProcess/Cocoa/MediaUtilities.h:
        * UIProcess/Cocoa/MediaUtilities.mm:
        (WebKit::toWKMediaCaptureStateDeprecated):
        (WebKit::toWKMediaMutedState):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::mediaCaptureStateDidChange):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::~UserMediaPermissionRequestManagerProxy):
        (WebKit::UserMediaPermissionRequestManagerProxy::stopCapture):
        (WebKit::UserMediaPermissionRequestManagerProxy::captureStateChanged):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::stopMediaCapture):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::updatePlayingMediaDidChange):
        (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::pageMutedStateChanged):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::mediaState const):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange):
        (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::enqueueSecurityPolicyViolationEvent):
        (WebKit::WebPage::setMuted):
        (WebKit::WebPage::stopMediaCapture):
        (WebKit::WebPage::isPlayingMediaDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Use IPC streaming for concurrent display list processing
        https://bugs.webkit.org/show_bug.cgi?id=230860
        rdar://83438038

        Reviewed by Tim Horton.

        This patch rebuilds the concurrent display list architecture in the web and GPU processes on top of the
        streamable IPC connections currently used by WebGL in the GPU process. See below for more details.

        There should be no change in behavior.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):

        Pass a StreamConnectionBuffer from the web process to the GPU process when constructing
        RemoteRenderingBackend; this serves as the pool of shared memory used to store streaming IPC messages sent from
        the web process to the GPU process. I've (somewhat arbitrarily) chosen the size of this StreamConnectionBuffer
        to match WebGL's connection buffer, though this can be tuned as needed. In a future patch, we may also want to
        implement a mechanism for starting out with a small connection buffer, and growing it by successively larger
        segments as needed.

        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * GPUProcess/cocoa/GPUProcessCocoa.mm:
        (WebKit::GPUProcess::additionalStateForDiagnosticReport const):

        Add a FIXME for re-introducing diagnostic state logging when using streamable IPC.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::RemoteDisplayListRecorder):
        (WebKit::RemoteDisplayListRecorder::startListeningForIPC):
        (WebKit::RemoteDisplayListRecorder::stopListeningForIPC):

        Add and remove the remote display list as a destination on the RemoteRenderingBackend's stream connection. Note
        that the synchronous dispatch to the main thread here is necessary to maintain the ordering of out-of-stream IPC
        messages that may have been received on the IPC thread.

        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        (WebKit::RemoteDisplayListRecorder::create):
        (WebKit::RemoteDisplayListRecorder::handleItem):
        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::RemoteImageBuffer):
        (WebKit::RemoteImageBuffer::apply): Deleted.

        Introduce `m_remoteDisplayList` to RemoteImageBuffer, and remove some logic for applying display list items that
        is no longer necessary.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::create):
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):

        Set up the IPC stream connection and stream connection work queue, and immediately send a wakeup semaphore back
        to the web process.

        (WebKit::RemoteRenderingBackend::startListeningForIPC):
        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::stopListeningForIPC):

        Add a mechanism to immediately tell all `m_remoteDisplayLists` to stop listening for streaming IPC messages when
        the owning RemoteRenderingBackend stops listening.

        (WebKit::RemoteRenderingBackend::dispatch):
        (WebKit::RemoteRenderingBackend::didCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        (WebKit::RemoteRenderingBackend::applyMediaItem): Deleted.
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::ReplayerDelegate): Deleted.
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::apply): Deleted.
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::didCreateMaskImageBuffer): Deleted.
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::didResetMaskImageBuffer): Deleted.
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::recordResourceUse): Deleted.
        (WebKit::RemoteRenderingBackend::submit): Deleted.
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists): Deleted.
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList): Deleted.
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier): Deleted.
        (WebKit::RemoteRenderingBackend::setNextItemBufferToRead): Deleted.
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandle): Deleted.
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandleWithQualifiedIdentifier): Deleted.
        (WebKit::RemoteRenderingBackend::resumeFromPendingWakeupInformation): Deleted.
        (WebKit::RemoteRenderingBackend::didCreateMaskImageBuffer): Deleted.
        (WebKit::RemoteRenderingBackend::didResetMaskImageBuffer): Deleted.
        (WebKit::RemoteRenderingBackend::decodeItem): Deleted.
        (WebKit::RemoteRenderingBackend::lastKnownState const): Deleted.
        (WebKit::RemoteRenderingBackend::updateLastKnownState): Deleted.

        Remove logic for coordinating wakeups and shared display list item buffers in the GPU process.

        * GPUProcess/graphics/RemoteRenderingBackend.h:

        Subclass IPC::StreamMessageReceiver. In this new concurrent display list model, RemoteRenderingBackend serves
        as a streaming IPC destination alongside each RemoteDisplayListRecorder in the GPU process; all messages
        previously sent to the RemoteRenderingBackend as normal IPC are now sent through the connection stream (though
        some must be marked as non-stream-encodable).

        (WebKit::RemoteRenderingBackend::streamConnection const):
        (WebKit::RemoteRenderingBackend::decodeAndCreate): Deleted.
        (): Deleted.
        (WebKit::RemoteRenderingBackend::PendingWakeupInformation::shouldPerformWakeup const): Deleted.

        Delete more logic related to concurrent display lists.

        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:

        Make RemoteRenderingBackend a stream message receiver.

        * GPUProcess/graphics/RemoteRenderingBackendCreationParameters.h:
        (WebKit::RemoteRenderingBackendCreationParameters::encode const):
        (WebKit::RemoteRenderingBackendCreationParameters::decode):

        Remove the IPC::Semaphore here, that was previously used for quick GPU process wakeups. This semaphore is no
        longer needed because we always use IPC::Semaphore for waking the GPU process when using streaming IPC.

        * GPUProcess/graphics/RemoteResourceCache.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

        Make the RemoteImageBufferProxy template class directly subclass ConcreteImageBuffer instead of
        DisplayList::ImageBuffer; additionally, introduce a `RemoteDisplayListRecorderProxy m_remoteDisplayList` here,
        which we use as our drawing graphics context.

        (WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy):
        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
        (WebKit::RemoteImageBufferProxy::recordNativeImageUse):
        (WebKit::RemoteImageBufferProxy::recordFontUse):
        (WebKit::RemoteImageBufferProxy::recordImageBufferUse):
        (WebKit::RemoteImageBufferProxy::clearDisplayList): Deleted.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::RemoteRenderingBackendProxy):
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):
        (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetPixelBuffer):
        (WebKit::RemoteRenderingBackendProxy::destroyGetPixelBufferSharedMemory):
        (WebKit::RemoteRenderingBackendProxy::getDataURLForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getDataForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getShareableBitmap):

        Send all IPC messages to RemoteRenderingBackend in the GPU process through the stream connection, instead of
        using standard IPC messages. This guarantees ordering when receiving cached resources.

        (WebKit::RemoteRenderingBackendProxy::cacheNativeImage):
        (WebKit::RemoteRenderingBackendProxy::cacheFont):
        (WebKit::RemoteRenderingBackendProxy::deleteAllFonts):
        (WebKit::RemoteRenderingBackendProxy::releaseRemoteResource):
        (WebKit::RemoteRenderingBackendProxy::finalizeRenderingUpdate):
        (WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const):
        (WebKit::RemoteRenderingBackendProxy::ensureBackendCreated):
        (WebKit::RemoteRenderingBackendProxy::streamConnection):

        Add a mechanism to ensure that we have the IPC stream wakeup semaphore before grabbing the stream connection.

        (WebKit::RemoteRenderingBackendProxy::didCreateWakeUpSemaphoreForDisplayListStream):
        (WebKit::RemoteRenderingBackendProxy::willAppendItem): Deleted.
        (WebKit::RemoteRenderingBackendProxy::sendWakeupMessage): Deleted.
        (WebKit::RemoteRenderingBackendProxy::sendDeferredWakeupMessageIfNeeded): Deleted.
        (WebKit::RemoteRenderingBackendProxy::didAppendData): Deleted.
        (WebKit::RemoteRenderingBackendProxy::mostRecentlyUsedDisplayListHandle): Deleted.
        (WebKit::RemoteRenderingBackendProxy::findReusableDisplayListHandle): Deleted.
        (WebKit::RemoteRenderingBackendProxy::createItemBuffer): Deleted.

        Remove all logic previously used to coordinate concurrent display list processing on the remote rendering
        backend.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        (WebKit::RemoteRenderingBackendProxy::remoteResourceCacheProxy):
        (WebKit::RemoteRenderingBackendProxy::sendToStream):
        (WebKit::RemoteRenderingBackendProxy::sendSyncToStream):

        Add helper methods to send IPC messages to the remote rendering backend through the connection stream.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::encodeRemoteRenderingBackendCreationParameters):

2021-10-12  Ross Kirsling  <ross.kirsling@sony.com>

        Non-unified build fixes, October 2021 edition.
        https://bugs.webkit.org/show_bug.cgi?id=231654

        Reviewed by Don Olmstead.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Add webpushd executable
        https://bugs.webkit.org/show_bug.cgi?id=231650

        Reviewed by Brady Eidson.

        * Configurations/webpushd.xcconfig: Added.
        * Scripts/process-entitlements.sh:
        * Shared/EntryPointUtilities/Cocoa/Daemon/webpushd.c: Added.
        (main):
        * WebKit.xcodeproj/project.pbxproj:

2021-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move some staged VisionKitCore SPI into VisionKitCoreSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=231648

        Reviewed by Tim Horton.

        Move these interface declarations out of this implementation file, and into PAL instead, but only if we're not
        using the Apple internal SDK. Additionally, redefine VKWKDataDetectorInfo as a class instead of a protocol; this
        workaround was only added to ensure source and binary compatibility with older versions of the internal macOS
        Monterey/iOS 15 SDK.

        No change in behavior.

        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::makeTextRecognitionResult):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use std::variant instead of WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=231629

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkLoadChecker.h:
        * NetworkProcess/cache/NetworkCacheData.h:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::VariantCoder::encode):
        (IPC::VariantCoder::decode):
        * Platform/IPC/Attachment.h:
        * Platform/IPC/MessageReceiveQueueMap.h:
        * Shared/SessionState.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPreferencesStore.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/C/WKMockMediaDevice.cpp:
        (WKAddMockMediaDevice):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showSafeBrowsingWarning:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:detailsWithLinks:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel makeCredentialWithChallenge:origin:options:completionHandler:]):
        (-[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]):
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::simulateKeyboardInteraction):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/ios/WebAutomationSessionIOS.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyboardInteraction):
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::showSafeBrowsingWarning):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebAuthentication/Authenticator.h:
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::getRpId):
        (WebKit::WebCore::getUserName):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.cpp:
        (WebKit::getClientDataType):
        (WebKit::getUserVerificationRequirement):
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::showSafeBrowsingWarning):
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.cpp:
        (WebKit::WebAuthnConnectionToWebProcess::handleRequest):
        * WebProcess/GPU/graphics/ImageBufferBackendHandle.h:
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.h:

2021-10-12  Garrett Davidson  <garrett_davidson@apple.com>

        Adopt platform UI for WebAuthn
        https://bugs.webkit.org/show_bug.cgi?id=230906
        <rdar://74659556>

        Reviewed by David Kilzer.

        Switch to using the platform's UI for WebAuthn transactions, where available,
        which takes precedence over the WebAuthn process.

        Covered by existing tests.

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:
        When possible, switch to importing the umbrella header directly instead of
        redeclaring the entire interface.

        Also, fix an existing bug caused by the redeclaration, where the
        ASCSecurityKeyPublicKeyCredentialKind enum was renamed.

        * SourcesCocoa.txt:
        Build the new file.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel makeCredentialWithChallenge:origin:options:completionHandler:]):
        Return the full error to the delegate.

        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.h:
        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.mm:
        Add all of the new required classes for soft linking, and sort the list.

        * UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm: Added.
        (WebKit::toArrayBuffer):
        (WebKit::toNSData):
        (WebKit::toNSString):
        (WebKit::toExceptionCode):
        (WebKit::toASCDescriptor):
        Helper methods for converting between WK and ASC types.

        (WebKit::configureRegistrationRequestContext):
        (WebKit::configurationAssertionRequestContext):
        Create and configure an ASCCredentialRequestContext from the provided options.

        (WebKit::WebAuthenticatorCoordinatorProxy::makeCredential):
        (WebKit::WebAuthenticatorCoordinatorProxy::getAssertion):
        Configure and perform the request.

        (WebKit::WebAuthenticatorCoordinatorProxy::performRequest):
        - Create a proxy to talk to AuthenticationServicesAgent.
        - Ask the proxy if we're allowed to perform the request.
          - If no, return an error.
          - If yes, create presenter and present over the web page's window.
        - When the request if finished, check the kind of credential we got, and return
        the relevant AuthenticatorResponseData/AuthenticatorAttachment.
        - If the request was canceled or failed, `credential` will be nil and `error` will
        be non-nil. In most cases, the error will be WKErrorDomain, which we can convert
        directly to ExceptionData. The one exception is the user canceled the request in
        the platform UI, so return the appropriate ExceptionData in that case. The final
        "Operation failed." case covers anything else unexpected happening.

        (WebKit::WebAuthenticatorCoordinatorProxy::isUserVerifyingPlatformAuthenticatorAvailable):
        If +shouldUseAlternateCredentialStore is true, this is always true. Otherwise,
        fall back to the old behavior.

        * UIProcess/WebAuthentication/Cocoa/WKASCAuthorizationPresenterDelegate.mm:
        (-[WKASCAuthorizationPresenterDelegate authorizationPresenter:credentialRequestedForLoginChoice:authenticatedContext:completionHandler:]):
        Use the new name of the enum, unconditionally.

        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        Wrap a few methods in the new flag. When the flag is on, these methods will exist
        in WebAuthenticatorCoordinatorProxy.mm.

        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        New ivar and method for the platform presenter.
        Make the superclass public so we can use the WeakPtr inheritance.

        * UIProcess/ios/WKHoverPlatterParameters.mm:
        Add some missing imports since this file got pushed off the end of
        UnifiedSource47-mm.mm.

        * WebKit.xcodeproj/project.pbxproj:
        Add the new file.

        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        When platform UI is available, prefer it over the WebAuthn process.
        (WebKit::WebAuthenticatorCoordinator::makeCredential):
        (WebKit::WebAuthenticatorCoordinator::getAssertion):
        (WebKit::WebAuthenticatorCoordinator::isUserVerifyingPlatformAuthenticatorAvailable):

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread animations need to commit layers on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231593

        Reviewed by Tim Horton.
        
        Re-land r284022 with a fix in WebPageProxy to avoid non-balanced calls to
        setDisplayLinkForDisplayWantsFullSpeedUpdates().
        
        Scroll animations were running on the scrolling thread (in that the timers were firing on
        that thread), but the scrolling thread wasn't changing layer positions, so those animations
        weren't smooth.

        This happened because of an existing assumption that we only commit layer changes on the
        scrolling thread in response to wheel events; the machinery around
        ThreadedScrollingTree::displayDidRefresh() was all gated on having recently received a wheel
        event.

        To fix this we need to communicate back to the UI process when there are active scroll
        animations running. The ScrollingTree already tracks this, and the virtual
        hasNodeWithAnimatedScrollChanged() on ScrollingCoordinator is called for it. To get this to
        the UI process on macOS, subclass ScrollingCoordinatorMac in WebKit2 and override
        hasNodeWithAnimatedScrollChanged() to call into WebPage, which then IPCs to WebPageProxy.
        This ends up calling setDisplayLinkForDisplayWantsFullSpeedUpdates() so that know to IPC
        displayDidRefresh to EventDispatcher off the main thread (as we do for wheel events).

        Scroll animations are still based on a 60Hz timer, but in future should be driven by
        displayDidRefresh() notifications.

        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wheelEventHysteresisUpdated):
        (WebKit::WebPageProxy::updateDisplayLinkFrequency):
        (WebKit::WebPageProxy::updateWheelEventActivityAfterProcessSwap):
        (WebKit::WebPageProxy::setHasActiveAnimatedScrolls):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createScrollingCoordinator const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHasActiveAnimatedScrolls):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationScrollingCoordinator.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        * WebProcess/WebPage/mac/TiledCoreAnimationScrollingCoordinator.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (WebKit::TiledCoreAnimationScrollingCoordinator::TiledCoreAnimationScrollingCoordinator):
        (WebKit::TiledCoreAnimationScrollingCoordinator::pageDestroyed):
        (WebKit::TiledCoreAnimationScrollingCoordinator::hasNodeWithAnimatedScrollChanged):

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Remove some unused UIKit SPI declarations
        https://bugs.webkit.org/show_bug.cgi?id=231646

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:

2021-10-12  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemSyncAccessHandle read() and write()
        https://bugs.webkit.org/show_bug.cgi?id=231466
        <rdar://problem/84050394>

        Reviewed by Youenn Fablet.

        Let network process open the file and pass file descriptor to web process, so that web process can read and 
        write the file without sending IPC messages. Currently getting file size, truncating file and syncing file are 
        still performed by network process.

        * NetworkProcess/storage/FileSystemStorageError.h:
        (WebKit::convertToException):
        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::createSyncAccessHandle):
        (WebKit::FileSystemStorageHandle::truncate):
        (WebKit::FileSystemStorageHandle::flush):
        (WebKit::FileSystemStorageHandle::close):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::createSyncAccessHandle):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * Platform/IPC/SharedFileHandle.cpp: Added.
        (IPC::SharedFileHandle::create):
        (IPC::SharedFileHandle::encode const):
        (IPC::SharedFileHandle::decode):
        * Platform/IPC/SharedFileHandle.h: Added.
        (IPC::SharedFileHandle::handle):
        (IPC::SharedFileHandle::SharedFileHandle):
        * Platform/IPC/cocoa/SharedFileHandleCocoa.cpp: Added.
        (IPC::SharedFileHandle::create):
        (IPC::SharedFileHandle::encode const):
        (IPC::SharedFileHandle::decode):
        * Sources.txt:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _fileSystemAccessEnabled]):
        (-[WKPreferences _setFileSystemAccessEnabled:]):
        (-[WKPreferences _storageAPIEnabled]):
        (-[WKPreferences _setStorageAPIEnabled:]):
        (-[WKPreferences _accessHandleEnabled]):
        (-[WKPreferences _setAccessHandleEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::createSyncAccessHandle):
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Decrease use of makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231615

        Reviewed by Alex Christensen.

        Decrease use of makeWeakPtr() and use WeakPtr { } directly instead.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::getConfiguration):
        (WebKit::RemoteMediaPlayerProxy::performTaskAtMediaTime):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::Unit):
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
        (WebKit::RemoteSampleBufferDisplayLayer::initialize):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::processContentRuleListsForLoad):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::cannotHandle):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::controlClient):
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::firePushEvent):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::initialize):
        (WebKit::CacheStorage::Engine::writeFile):
        (WebKit::CacheStorage::Engine::readFile):
        (WebKit::CacheStorage::Engine::fetchEntries):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDisk):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::readNextMessage):
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]):
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::createTabForExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::evaluateScriptForExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::reloadForExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::showExtensionTab):
        (WebKit::WebInspectorUIExtensionControllerProxy::evaluateScriptInExtensionTab):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/SpeechRecognitionPermissionManager.cpp:
        (WebKit::SpeechRecognitionPermissionManager::requestSpeechRecognitionServiceAccess):
        (WebKit::SpeechRecognitionPermissionManager::requestMicrophoneAccess):
        * UIProcess/SpeechRecognitionServer.cpp:
        (WebKit::SpeechRecognitionServer::requestPermissionForRequest):
        (WebKit::SpeechRecognitionServer::handleRequest):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):
        * UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.cpp:
        (WebKit::WebDeviceOrientationAndMotionAccessController::shouldAllowAccess):
        * WebProcess/GPU/media/RemoteLegacyCDMFactory.cpp:
        (WebKit::RemoteLegacyCDMFactory::registerFactory):
        * WebProcess/GPU/media/RemoteMediaEngineConfigurationFactory.cpp:
        (WebKit::RemoteMediaEngineConfigurationFactory::registerFactory):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::createRemoteUnit):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::startRecording):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::initialize):
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::registerExtension):
        (WebKit::WebInspectorUIExtensionController::unregisterExtension):
        (WebKit::WebInspectorUIExtensionController::createTabForExtension):
        (WebKit::WebInspectorUIExtensionController::evaluateScriptForExtension):
        (WebKit::WebInspectorUIExtensionController::reloadForExtension):
        (WebKit::WebInspectorUIExtensionController::showExtensionTab):
        (WebKit::WebInspectorUIExtensionController::evaluateScriptInExtensionTab):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::join):
        (WebKit::RemoteMediaSessionCoordinator::seekTo):
        (WebKit::RemoteMediaSessionCoordinator::play):
        (WebKit::RemoteMediaSessionCoordinator::pause):
        (WebKit::RemoteMediaSessionCoordinator::setTrack):
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.cpp:
        (WebKit::LibWebRTCNetworkManager::StartUpdating):
        (WebKit::LibWebRTCNetworkManager::StopUpdating):
        (WebKit::LibWebRTCNetworkManager::CreateNameForAddress):
        * WebProcess/XR/PlatformXRSystemProxy.cpp:
        (WebKit::PlatformXRSystemProxy::enumerateImmersiveXRDevices):

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Stop passing RegistrableDomain by value in NetworkSessionCocoa
        https://bugs.webkit.org/show_bug.cgi?id=231633

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::hasIsolatedSession const):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::isolatedSession):
        (WebKit::SessionSet::isolatedSession):
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Rename AdAttributionDaemon to adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231620

        Reviewed by Kate Cheney.

        adattributiond is its approved name in rdar://80701098 and we already used it in some places.
        Use it consistently.

        * Configurations/adattributiond.xcconfig: Renamed from Source/WebKit/Configurations/AdAttributionDaemon.xcconfig.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.adattributiond.sb: Renamed from Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.AdAttributionDaemon.sb.
        * Scripts/process-entitlements.sh:
        * Shared/EntryPointUtilities/Cocoa/Daemon/adattributiond.c: Renamed from Source/WebKit/Shared/EntryPointUtilities/Cocoa/Daemon/AdAttributionDaemon.c.
        * WebKit.xcodeproj/project.pbxproj:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Reduce use of WebCore structures in adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231617

        Reviewed by Chris Dumez.

        In order to reduce the memory use of adattributiond, I'm planning to have it not link WebKit.framework.
        This is progress towards that.
        I use a RunLoop::Timer instead of a WebCore::Timer, which does the same thing on the main thread.
        I use a WTF::String to represent the error description or lack thereof instead of sending the whole error.
        I stop sending the response, because it was unused.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::PrivateClickMeasurementManager):
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PCM::NetworkLoader::start):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm:
        (WebKit::PCM::NetworkLoader::start):

2021-10-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r284022.

        Caused tests to exit early due to an assertion failure

        Reverted changeset:

        "Scrolling thread animations need to commit layers on the
        scrolling thread"
        https://bugs.webkit.org/show_bug.cgi?id=231593
        https://commits.webkit.org/r284022

2021-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231414
        <rdar://problem/84015584>

        Reviewed by Said Abou-Hallawa.

        Now that DisplayList::ResourceHeap exists, we can make a ResourceHeap subclass specifically for
        the GPU process. The implementation of this class holds QualifiedRenderingResourceIdentifiers
        instead of RenderingResourceIdentifier.

        * GPUProcess/graphics/QualifiedResourceHeap.h: Added.
        (WebKit::QualifiedResourceHeap::QualifiedResourceHeap):
        (WebKit::QualifiedResourceHeap::add):
        (WebKit::QualifiedResourceHeap::getImageBuffer const):
        (WebKit::QualifiedResourceHeap::getNativeImage const):
        (WebKit::QualifiedResourceHeap::getFont const):
        (WebKit::QualifiedResourceHeap::hasImageBuffer const):
        (WebKit::QualifiedResourceHeap::hasNativeImage const):
        (WebKit::QualifiedResourceHeap::hasFont const):
        (WebKit::QualifiedResourceHeap::removeImageBuffer):
        (WebKit::QualifiedResourceHeap::removeNativeImage):
        (WebKit::QualifiedResourceHeap::removeFont):
        (WebKit::QualifiedResourceHeap::deleteAllFonts):
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cacheFont):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        * GPUProcess/graphics/RemoteResourceCache.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread animations need to commit layers on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231593

        Reviewed by Tim Horton.
        
        Scroll animations were running on the scrolling thread (in that the timers were firing on
        that thread), but the scrolling thread wasn't changing layer positions, so those animations
        weren't smooth.

        This happened because of an existing assumption that we only commit layer changes on the
        scrolling thread in response to wheel events; the machinery around
        ThreadedScrollingTree::displayDidRefresh() was all gated on having recently received a wheel
        event.

        To fix this we need to communicate back to the UI process when there are active scroll
        animations running. The ScrollingTree already tracks this, and the virtual
        hasNodeWithAnimatedScrollChanged() on ScrollingCoordinator is called for it. To get this to
        the UI process on macOS, subclass ScrollingCoordinatorMac in WebKit2 and override
        hasNodeWithAnimatedScrollChanged() to call into WebPage, which then IPCs to WebPageProxy.
        This ends up calling setDisplayLinkForDisplayWantsFullSpeedUpdates() so that know to IPC
        displayDidRefresh to EventDispatcher off the main thread (as we do for wheel events).

        Scroll animations are still based on a 60Hz timer, but in future should be driven by
        displayDidRefresh() notifications.

        * SourcesCocoa.txt:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wheelEventHysteresisUpdated):
        (WebKit::WebPageProxy::updateDisplayLinkFrequency):
        (WebKit::WebPageProxy::updateWheelEventActivityAfterProcessSwap):
        (WebKit::WebPageProxy::setHasActiveAnimatedScrolls):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createScrollingCoordinator const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHasActiveAnimatedScrolls):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationScrollingCoordinator.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        * WebProcess/WebPage/mac/TiledCoreAnimationScrollingCoordinator.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (WebKit::TiledCoreAnimationScrollingCoordinator::TiledCoreAnimationScrollingCoordinator):
        (WebKit::TiledCoreAnimationScrollingCoordinator::pageDestroyed):
        (WebKit::TiledCoreAnimationScrollingCoordinator::hasNodeWithAnimatedScrollChanged):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use STL instead of WTF::get_if, WTF::Monostate, WTF::visit, and WTF::holds_alternative
        https://bugs.webkit.org/show_bug.cgi?id=231582

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::Data):
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<std::monostate>::encode):
        (IPC::ArgumentCoder<std::monostate>::decode):
        (IPC::ArgumentCoder<Monostate>::encode): Deleted.
        (IPC::ArgumentCoder<Monostate>::decode): Deleted.
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        * Platform/IPC/MessageReceiveQueueMap.cpp:
        (IPC::MessageReceiveQueueMap::get const):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::sendOutputMessage):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PasteboardCustomData::Entry>::encode):
        (IPC::ArgumentCoder<IDBKeyPath>::encode):
        (IPC::ArgumentCoder<ServiceWorkerOrClientData>::encode):
        (IPC::ArgumentCoder<ServiceWorkerOrClientIdentifier>::encode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::isValidBackgroundActivity):
        (WebKit::ProcessThrottler::isValidForegroundActivity):
        (WebKit::ProcessThrottler::TimedActivity::updateTimer):
        * UIProcess/WebAuthentication/Authenticator.cpp:
        (WebKit::Authenticator::handleRequest):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::getRpId):
        (WebKit::WebCore::getUserName):
        (WebKit::AuthenticatorManager::respondReceived):
        (WebKit::AuthenticatorManager::invokePendingCompletionHandler):
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.cpp:
        (WebKit::getClientDataType):
        (WebKit::getUserVerificationRequirement):
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeCustomData):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::create):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::create):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::create):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::removeAnnotationRelativeToSelection):

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Allow direct construction of WeakPtr without makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231580

        Reviewed by Darin Adler.

        Allow direct construction of WeakPtr without makeWeakPtr(), and deprecate makeWeakPtr().

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsStore::scheduleStatisticsProcessingRequestIfNecessary):
        (WebKit::ResourceLoadStatisticsStore::debugBroadcastConsoleMessage):
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::cancel):
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::scheduleFailure):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkRequest):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::m_messagePortChannelRegistry):
        (WebKit::NetworkProcess::suspendIDBServers):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::initialize):
        (WebKit::PingLoad::didReceiveChallenge):
        (WebKit::PingLoad::didReceiveResponse):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        (WebKit::PrivateClickMeasurementManager::destroyStoreForTesting):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::ServiceWorkerSoftUpdateLoader):
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::startTransactionIfNecessary):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::setIsHoldingLockedFiles):
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):
        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::checkForResponsiveness):
        * UIProcess/Cocoa/DownloadProxyMapCocoa.mm:
        (WebKit::DownloadProxyMap::platformCreate):
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelElementDidCreatePreview):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::start):
        (WebKit::SOAuthorizationSession::continueStartAfterGetAuthorizationHints):
        (WebKit::SOAuthorizationSession::complete):
        (WebKit::SOAuthorizationSession::presentViewController):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::scheduleActivityStateUpdate):
        (WebKit::WebPageProxy::setUpHighlightsObserver):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::showSafeBrowsingWarning):
        (WebKit::WebViewImpl::updateWindowAndViewFrames):
        (WebKit::WebViewImpl::scheduleSetTopContentInsetDispatch):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::prepareForMoveToWindow):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::interpretKeyEvent):
        (WebKit::WebViewImpl::firstRectForCharacterRange):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyUp):
        (WebKit::WebViewImpl::keyDown):
        (WebKit::WebViewImpl::flagsChanged):
        (WebKit::WebViewImpl::nativeMouseEventHandler):
        (WebKit::WebViewImpl::handleContextMenuTranslation):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::setAssertionType):
        (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
        * UIProcess/SpeechRecognitionPermissionManager.cpp:
        (WebKit::SpeechRecognitionPermissionManager::requestUserPermission):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::updateCaptureDevices):
        * UIProcess/WebAuthentication/Authenticator.cpp:
        (WebKit::Authenticator::handleRequest):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::clearStateAsync):
        (WebKit::AuthenticatorManager::downgrade):
        (WebKit::AuthenticatorManager::requestPin):
        (WebKit::AuthenticatorManager::runPanel):
        * UIProcess/WebAuthentication/AuthenticatorTransportService.cpp:
        (WebKit::AuthenticatorTransportService::startDiscovery):
        (WebKit::AuthenticatorTransportService::restartDiscovery):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterDecidePolicy):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterReceivingLAContext):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::getAssertion):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterResponseSelected):
        * UIProcess/WebAuthentication/Cocoa/NfcService.mm:
        (WebKit::NfcService::platformStartDiscovery):
        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::send):
        (WebKit::MockHidConnection::feedReports):
        (WebKit::MockHidConnection::continueFeedReports):
        * UIProcess/WebAuthentication/Mock/MockNfcService.mm:
        (WebKit::MockNfcService::receiveStartPolling):
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::getWebAuthnProcessConnection):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetNextAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::getRetries):
        (WebKit::CtapAuthenticator::continueGetKeyAgreementAfterGetRetries):
        (WebKit::CtapAuthenticator::continueRequestPinAfterGetKeyAgreement):
        (WebKit::CtapAuthenticator::continueGetPinTokenAfterRequestPin):
        * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp:
        (WebKit::CtapHidDriver::Worker::transact):
        (WebKit::CtapHidDriver::Worker::write):
        (WebKit::CtapHidDriver::transact):
        (WebKit::CtapHidDriver::continueAfterChannelAllocated):
        * UIProcess/WebAuthentication/fido/FidoService.cpp:
        (WebKit::FidoService::getInfo):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::issueCommand):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::setUnderPageBackgroundColorOverride):
        (WebKit::WebPageProxy::handlePreventableTouchEvent):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::runModalJavaScriptDialog):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        (WebKit::WebPageProxy::createMediaSessionCoordinator):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection):
        (WebKit::WebProcessPool::getWebAuthnProcessConnection):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::isResponsive):
        (WebKit::WebProcessProxy::isResponsiveWithLazyStop):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
        * UIProcess/XR/PlatformXRSystem.cpp:
        (WebKit::PlatformXRSystem::initializeTrackingAndRendering):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::acquireSync):
        (WebKit::ProcessAndUIAssertion::processAssertionWasInvalidated):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::willOpenAppLink):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::performTaskAtMediaTime):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::updateCaptureDevices):
        * WebProcess/WebCoreSupport/WebPermissionController.cpp:
        (WebKit::WebPermissionController::tryProcessingRequests):
        * WebProcess/WebCoreSupport/WebSpeechSynthesisClient.cpp:
        (WebKit::WebSpeechSynthesisClient::speak):
        (WebKit::WebSpeechSynthesisClient::pause):
        (WebKit::WebSpeechSynthesisClient::resume):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::sendDidFirstLayerFlushIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaintAsync):
        (WebKit::TiledCoreAnimationDrawingArea::handleActivityStateChangeCallbacksIfNeeded):

2021-10-12  Brent Fulgham  <bfulgham@apple.com>

        Sandbox complexity and performance improvements
        https://bugs.webkit.org/show_bug.cgi?id=231184
        <rdar://problem/47565664>

        Reviewed by Per Arne Vollan.

        This patch adopts a set of suggested improvements made by Apple's Sandbox team:

        1. Minimize regex usage
        2. Remove duplicate rules
        3. Remove 'defined?' checks for the many things that are supported in all WebKit target OSes.

        These will simplify the rules, and should provide some launch time improvement.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-12  Per Arne Vollan <pvollan@apple.com>

        [iOS][GPUP] Remove sandbox access to com.apple.audio.AudioComponentRegistrar
        https://bugs.webkit.org/show_bug.cgi?id=231583
        <rdar://75225970>

        Reviewed by Brent Fulgham.

        Remove sandbox access to com.apple.audio.AudioComponentRegistrar in GPUP on iOS, since it is not required there.

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

2021-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add some missing WebCore:: namespaces in RemoteDisplayListRecorderProxy
        https://bugs.webkit.org/show_bug.cgi?id=231584

        Reviewed by Myles C. Maxfield.

        A tiny bit of cleanup before #230860.

        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        (WebKit::RemoteDisplayListRecorder::handleItem):

        Drive-by fix: also add a missing call to `std::forward` when applying display list items with additional
        resources as arguments.

        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:

        Add the missing `WebCore::` prefixes.

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Remove non-HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE) code
        https://bugs.webkit.org/show_bug.cgi?id=231579

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (processServerTrustEvaluation):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):

2021-10-12  Simon Fraser  <simon.fraser@apple.com>

        Have the ScrollingTree track nodes with animated scrolls
        https://bugs.webkit.org/show_bug.cgi?id=231554

        Reviewed by Tim Horton.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::startAnimatedScrollToPosition):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Begin migration from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231086

        Reviewed by Chris Dumez.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::VariantCoder::encode):
        (IPC::VariantCoder::decode):

2021-10-12  Per Arne Vollan <pvollan@apple.com>

        [iOS] Add syscall telemetry in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231508
        <rdar://83197060>

        Reviewed by Brent Fulgham.

        Add syscall telemetry in the WebContent process' sandbox to learn more about the context in which they are being used.
        This patch also removes some telemetry with backtraces for other rules, since they are no longer needed.

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

2021-10-12  Per Arne Vollan <pvollan@apple.com>

        [GPUP] Add missing entitlement
        https://bugs.webkit.org/show_bug.cgi?id=231499
        <rdar://83847918>

        Reviewed by Brent Fulgham.

        Add the entitlement "com.apple.private.webkit.use-xpc-endpoint" in the GPU process,
        which will enable XPC communication with other WebKit processes.

        * Scripts/process-entitlements.sh:

2021-10-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283890.
        https://bugs.webkit.org/show_bug.cgi?id=231567

        Introduced crash

        Reverted changeset:

        "Block access in sandbox to capability which is allowed by
        default"
        https://bugs.webkit.org/show_bug.cgi?id=231079
        https://commits.webkit.org/r283890

2021-10-12  Youenn Fablet  <youenn@apple.com>

        Error the encoder in case we cannot create a RemoteVideoSample
        https://bugs.webkit.org/show_bug.cgi?id=231505
        <rdar://83975229>

        Reviewed by Eric Carlson.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::encodeFrame):
        RemoteVideoSample::create can return nullptr if we cannot get an IOSurface from the pixel buffer or if pixel buffer is null
        due to VTPixelBufferConformerCopyConformedPixelBuffer failing.
        In that case, we error the encoder instead of trying to encode the frame.

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 8: Consolidate DisplayList::ResourceHeap
        https://bugs.webkit.org/show_bug.cgi?id=231411
        <rdar://problem/84013167>

        Reviewed by Simon Fraser.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::submit):
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cacheFont):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::deleteAllFonts):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        (WebKit::RemoteResourceCache::updateHasActiveDrawables):
        * GPUProcess/graphics/RemoteResourceCache.h:
        (WebKit::RemoteResourceCache::resourceHeap const):
        (WebKit::RemoteResourceCache::imageBuffers const): Deleted.
        (WebKit::RemoteResourceCache::nativeImages const): Deleted.
        (WebKit::RemoteResourceCache::fonts const): Deleted.

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 5: Migrate RemoteResourceCache to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231407
        <rdar://problem/84010479>

        Reviewed by Said Abou-Hallawa.

        This pushes QualifiedRenderingResourceIdentifier down into RemoteResourceCache, but doesn't go all the way.
        This patch augments RemoteResourceCache's API to accept QualifiedRenderingResourceIdentifiers, and also
        migrates RemoteResourceCache::m_resourceUseCounters to use QualifiedRenderingResourceIdentifiers.

        RemoteResourceCache::m_imageBuffers, RemoteResourceCache::m_nativeImages, and RemoteResourceCache::m_fonts
        are WebCore typedefs, and are passed to WebCore's display list replaying code, but that code should have no
        notion of process identifiers. Therefore, in order to make those members hold data that WebCore doesn't
        understand, I'm going to have to wrap an opaque class around them and pass that class around instead of
        the raw HashMaps. I'll do that in another patch.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::setStateWithQualifiedIdentifiers):
        (WebKit::RemoteDisplayListRecorder::clipToImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawGlyphsWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawPatternWithQualifiedIdentifier):
        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::ReplayerDelegate):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::recordResourceUse):
        (WebKit::RemoteRenderingBackend::submit):
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataURLForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cacheFont):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::ensureResourceUseCounter):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        (WebKit::RemoteResourceCache::recordResourceUse):
        (WebKit::RemoteResourceCache::releaseRemoteResource):
        * GPUProcess/graphics/RemoteResourceCache.h:

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 6: Uniquify more of RemoteDisplayListRecorder at entry points
        https://bugs.webkit.org/show_bug.cgi?id=231552
        <rdar://problem/84130587>

        This is an extension of https://bugs.webkit.org/show_bug.cgi?id=231548. It applies QualifiedRenderingResourceIdentifiers
        at the rest of the entry points of RemoteDisplayListRecorder.

        Reviewed by Wenson Hsieh.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::setState):
        (WebKit::RemoteDisplayListRecorder::setStateWithQualifiedIdentifiers):
        (WebKit::RemoteDisplayListRecorder::drawGlyphs):
        (WebKit::RemoteDisplayListRecorder::drawGlyphsWithQualifiedIdentifier):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h:

2021-10-11  Simon Fraser  <simon.fraser@apple.com>

        Make DrawingAreaType an enum class
        https://bugs.webkit.org/show_bug.cgi?id=231543

        Reviewed by Wenson Hsieh.

        Make DrawingAreaType an enum class, and make the DrawingArea type member const.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::isUsingUISideCompositing const):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::DrawingAreaProxyCoordinatedGraphics):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDrawingArea):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        (WebKit::WebPageProxy::didFirstLayerFlush):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createScrollingCoordinator const):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::DrawingAreaCoordinatedGraphics):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::supportsGPUProcessRendering):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 5: Uniquify RemoteDisplayListRecorder at entry points
        https://bugs.webkit.org/show_bug.cgi?id=231548
        <rdar://problem/84128595>

        Reviewed by Wenson Hsieh.

        This simply applies the same treatment in https://commits.webkit.org/242676@main to
        RemoteDisplayListRecorder. This is being done in a follow-up patch because it
        relies on https://bugs.webkit.org/show_bug.cgi?id=231484.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
        (WebKit::RemoteDisplayListRecorder::RemoteDisplayListRecorder):
        (WebKit::RemoteDisplayListRecorder::clipToImageBuffer):
        (WebKit::RemoteDisplayListRecorder::clipToImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawImageBuffer):
        (WebKit::RemoteDisplayListRecorder::drawImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawNativeImage):
        (WebKit::RemoteDisplayListRecorder::drawNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteDisplayListRecorder::drawPattern):
        (WebKit::RemoteDisplayListRecorder::drawPatternWithQualifiedIdentifier):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h:
        (WebKit::RemoteDisplayListRecorder::create):

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Revert 242806@main because it broke the build
        https://bugs.webkit.org/show_bug.cgi?id=231546

        Unreviewed.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::ReplayerDelegate):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::recordResourceUse):
        (WebKit::RemoteRenderingBackend::submit):
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataURLForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cacheFont):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::ensureResourceUseCounter):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        (WebKit::RemoteResourceCache::recordResourceUse):
        (WebKit::RemoteResourceCache::releaseRemoteResource):
        * GPUProcess/graphics/RemoteResourceCache.h:

2021-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Clean up some code in DisplayList::Recorder in preparation for bug #230860
        https://bugs.webkit.org/show_bug.cgi?id=231532

        Reviewed by Myles C. Maxfield.

        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
        (WebKit::RemoteDisplayListRecorderProxy::recordGetPixelBuffer): Deleted.
        (WebKit::RemoteDisplayListRecorderProxy::recordPutPixelBuffer): Deleted.

        See WebCore ChangeLog for more details.

        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h:

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 5: Migrate RemoteResourceCache to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231407
        <rdar://problem/84010479>

        Reviewed by Said Abou-Hallawa.

        This pushes QualifiedRenderingResourceIdentifier down into RemoteResourceCache, but doesn't go all the way.
        This patch augments RemoteResourceCache's API to accept QualifiedRenderingResourceIdentifiers, and also
        migrates RemoteResourceCache::m_resourceUseCounters to use QualifiedRenderingResourceIdentifiers.

        RemoteResourceCache::m_imageBuffers, RemoteResourceCache::m_nativeImages, and RemoteResourceCache::m_fonts
        are WebCore typedefs, and are passed to WebCore's display list replaying code, but that code should have no
        notion of process identifiers. Therefore, in order to make those members hold data that WebCore doesn't
        understand, I'm going to have to wrap an opaque class around them and pass that class around instead of
        the raw HashMaps. I'll do that in another patch.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::ReplayerDelegate):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::recordResourceUse):
        (WebKit::RemoteRenderingBackend::submit):
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataURLForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cacheFont):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::ensureResourceUseCounter):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        (WebKit::RemoteResourceCache::recordResourceUse):
        (WebKit::RemoteResourceCache::releaseRemoteResource):
        * GPUProcess/graphics/RemoteResourceCache.h:

2021-10-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce RemoteDisplayListRecorderProxy and RemoteDisplayListRecorder
        https://bugs.webkit.org/show_bug.cgi?id=231484

        Reviewed by Simon Fraser.

        Introduce two new classes that house most of the logic for propagating display list items from the web content
        process to the GPU process. RemoteDisplayListRecorderProxy is a subclass of DisplayList::Recorder that records
        each item by sending it to the GPU process through a stream connection, which will be added to
        RemoteRenderingBackendProxy in a subsequent patch. The RemoteDisplayListRecorderProxy will be managed by
        RemoteImageBufferProxy in the web process. RemoteDisplayListRecorder acts as the streaming IPC destination in
        the GPU process, and handles the incoming display list items by applying them to the platform graphics context.

        For most of these display list items, we can propagate them to the GPU process by sending each display list
        item's constructor arguments as separate IPC arguments. In a future patch, we should add support for encoding
        the following display list items in the same way:

        - SetInlineFillColor
        - SetInlineStrokeColor
        - SetState
        - SetLineDash
        - DrawGlyphs
        - DrawLinesForText
        - FillRectWithGradient

        For now, the above display list items are encoded and decoded as whole items. While there's no practical
        disadvantage to implementing it this way, it would be nice to make it consistent.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp: Added.
        (WebKit::RemoteDisplayListRecorder::RemoteDisplayListRecorder):
        (WebKit::RemoteDisplayListRecorder::resourceCache):
        (WebKit::RemoteDisplayListRecorder::drawingContext):
        (WebKit::RemoteDisplayListRecorder::startListeningForIPC):
        (WebKit::RemoteDisplayListRecorder::stopListeningForIPC):
        (WebKit::RemoteDisplayListRecorder::save):
        (WebKit::RemoteDisplayListRecorder::restore):
        (WebKit::RemoteDisplayListRecorder::translate):
        (WebKit::RemoteDisplayListRecorder::rotate):
        (WebKit::RemoteDisplayListRecorder::scale):
        (WebKit::RemoteDisplayListRecorder::setCTM):
        (WebKit::RemoteDisplayListRecorder::concatenateCTM):
        (WebKit::RemoteDisplayListRecorder::setInlineFillColor):
        (WebKit::RemoteDisplayListRecorder::setInlineStrokeColor):
        (WebKit::RemoteDisplayListRecorder::setStrokeThickness):
        (WebKit::RemoteDisplayListRecorder::setState):
        (WebKit::RemoteDisplayListRecorder::setLineCap):
        (WebKit::RemoteDisplayListRecorder::setLineDash):
        (WebKit::RemoteDisplayListRecorder::setLineJoin):
        (WebKit::RemoteDisplayListRecorder::setMiterLimit):
        (WebKit::RemoteDisplayListRecorder::clearShadow):
        (WebKit::RemoteDisplayListRecorder::clip):
        (WebKit::RemoteDisplayListRecorder::clipOut):
        (WebKit::RemoteDisplayListRecorder::clipToImageBuffer):
        (WebKit::RemoteDisplayListRecorder::clipOutToPath):
        (WebKit::RemoteDisplayListRecorder::clipPath):
        (WebKit::RemoteDisplayListRecorder::beginClipToDrawingCommands):
        (WebKit::RemoteDisplayListRecorder::endClipToDrawingCommands):
        (WebKit::RemoteDisplayListRecorder::drawGlyphs):
        (WebKit::RemoteDisplayListRecorder::drawImageBuffer):
        (WebKit::RemoteDisplayListRecorder::drawNativeImage):
        (WebKit::RemoteDisplayListRecorder::drawPattern):
        (WebKit::RemoteDisplayListRecorder::beginTransparencyLayer):
        (WebKit::RemoteDisplayListRecorder::endTransparencyLayer):
        (WebKit::RemoteDisplayListRecorder::drawRect):
        (WebKit::RemoteDisplayListRecorder::drawLine):
        (WebKit::RemoteDisplayListRecorder::drawLinesForText):
        (WebKit::RemoteDisplayListRecorder::drawDotsForDocumentMarker):
        (WebKit::RemoteDisplayListRecorder::drawEllipse):
        (WebKit::RemoteDisplayListRecorder::drawPath):
        (WebKit::RemoteDisplayListRecorder::drawFocusRingPath):
        (WebKit::RemoteDisplayListRecorder::drawFocusRingRects):
        (WebKit::RemoteDisplayListRecorder::fillRect):
        (WebKit::RemoteDisplayListRecorder::fillRectWithColor):
        (WebKit::RemoteDisplayListRecorder::fillRectWithGradient):
        (WebKit::RemoteDisplayListRecorder::fillCompositedRect):
        (WebKit::RemoteDisplayListRecorder::fillRoundedRect):
        (WebKit::RemoteDisplayListRecorder::fillRectWithRoundedHole):
        (WebKit::RemoteDisplayListRecorder::fillLine):
        (WebKit::RemoteDisplayListRecorder::fillArc):
        (WebKit::RemoteDisplayListRecorder::fillQuadCurve):
        (WebKit::RemoteDisplayListRecorder::fillBezierCurve):
        (WebKit::RemoteDisplayListRecorder::fillPath):
        (WebKit::RemoteDisplayListRecorder::fillEllipse):
        (WebKit::RemoteDisplayListRecorder::getPixelBuffer):
        (WebKit::RemoteDisplayListRecorder::putPixelBuffer):
        (WebKit::RemoteDisplayListRecorder::paintFrameForMedia):
        (WebKit::RemoteDisplayListRecorder::strokeRect):
        (WebKit::RemoteDisplayListRecorder::strokeLine):
        (WebKit::RemoteDisplayListRecorder::strokeArc):
        (WebKit::RemoteDisplayListRecorder::strokeQuadCurve):
        (WebKit::RemoteDisplayListRecorder::strokeBezierCurve):
        (WebKit::RemoteDisplayListRecorder::strokePath):
        (WebKit::RemoteDisplayListRecorder::strokeEllipse):
        (WebKit::RemoteDisplayListRecorder::clearRect):
        (WebKit::RemoteDisplayListRecorder::applyStrokePattern):
        (WebKit::RemoteDisplayListRecorder::applyFillPattern):
        (WebKit::RemoteDisplayListRecorder::applyDeviceScaleFactor):
        (WebKit::RemoteDisplayListRecorder::flushContext):
        * GPUProcess/graphics/RemoteDisplayListRecorder.h: Added.
        (WebKit::RemoteDisplayListRecorder::create):
        (WebKit::RemoteDisplayListRecorder::handleItem):
        * GPUProcess/graphics/RemoteDisplayListRecorder.messages.in: Added.
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::performWithMediaPlayerOnMainThread):
        * GPUProcess/graphics/RemoteRenderingBackend.h:

        Add helper methods to RemoteRenderingBackend that are called from RemoteDisplayListRecorder.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:

        Make it possible to encode and decode SetInlineFillColor and SetInlineStrokeColor using simple argument coder.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp: Added.
        (WebKit::RemoteDisplayListRecorderProxy::RemoteDisplayListRecorderProxy):
        (WebKit::m_renderingBackend):
        (WebKit::RemoteDisplayListRecorderProxy::getPixelBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::putPixelBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::canDrawImageBuffer const):
        (WebKit::RemoteDisplayListRecorderProxy::renderingMode const):
        (WebKit::RemoteDisplayListRecorderProxy::recordSave):
        (WebKit::RemoteDisplayListRecorderProxy::recordRestore):
        (WebKit::RemoteDisplayListRecorderProxy::recordTranslate):
        (WebKit::RemoteDisplayListRecorderProxy::recordRotate):
        (WebKit::RemoteDisplayListRecorderProxy::recordScale):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetCTM):
        (WebKit::RemoteDisplayListRecorderProxy::recordConcatenateCTM):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetInlineFillColor):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetInlineStrokeColor):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetStrokeThickness):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetState):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetLineCap):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetLineDash):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetLineJoin):
        (WebKit::RemoteDisplayListRecorderProxy::recordSetMiterLimit):
        (WebKit::RemoteDisplayListRecorderProxy::recordClearShadow):
        (WebKit::RemoteDisplayListRecorderProxy::recordClip):
        (WebKit::RemoteDisplayListRecorderProxy::recordClipOut):
        (WebKit::RemoteDisplayListRecorderProxy::recordClipToImageBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::recordClipOutToPath):
        (WebKit::RemoteDisplayListRecorderProxy::recordClipPath):
        (WebKit::RemoteDisplayListRecorderProxy::recordBeginClipToDrawingCommands):
        (WebKit::RemoteDisplayListRecorderProxy::recordEndClipToDrawingCommands):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawGlyphs):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawImageBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawNativeImage):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawPattern):
        (WebKit::RemoteDisplayListRecorderProxy::recordBeginTransparencyLayer):
        (WebKit::RemoteDisplayListRecorderProxy::recordEndTransparencyLayer):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawLine):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawLinesForText):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawDotsForDocumentMarker):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawEllipse):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawPath):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawFocusRingPath):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawFocusRingRects):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillRectWithColor):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillRectWithGradient):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillCompositedRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillRoundedRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillRectWithRoundedHole):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillLine):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillArc):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillQuadCurve):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillBezierCurve):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillPath):
        (WebKit::RemoteDisplayListRecorderProxy::recordFillEllipse):
        (WebKit::RemoteDisplayListRecorderProxy::recordGetPixelBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::recordPutPixelBuffer):
        (WebKit::RemoteDisplayListRecorderProxy::recordPaintFrameForMedia):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeLine):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeArc):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeQuadCurve):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeBezierCurve):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokePath):
        (WebKit::RemoteDisplayListRecorderProxy::recordStrokeEllipse):
        (WebKit::RemoteDisplayListRecorderProxy::recordClearRect):
        (WebKit::RemoteDisplayListRecorderProxy::recordApplyStrokePattern):
        (WebKit::RemoteDisplayListRecorderProxy::recordApplyFillPattern):
        (WebKit::RemoteDisplayListRecorderProxy::recordApplyDeviceScaleFactor):
        (WebKit::RemoteDisplayListRecorderProxy::recordResourceUse):
        (WebKit::RemoteDisplayListRecorderProxy::flushContext):
        (WebKit::RemoteDisplayListRecorderProxy::createNestedContext):
        * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h: Added.
        (WebKit::RemoteDisplayListRecorderProxy::~RemoteDisplayListRecorderProxy):
        (WebKit::RemoteDisplayListRecorderProxy::resetNeedsFlush):
        (WebKit::RemoteDisplayListRecorderProxy::needsFlush const):
        (WebKit::RemoteDisplayListRecorderProxy::send):
        (WebKit::RemoteDisplayListRecorderProxy::recordDrawPattern):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::recordNativeImageUse):
        (WebKit::RemoteRenderingBackendProxy::recordFontUse):
        (WebKit::RemoteRenderingBackendProxy::recordImageBufferUse):
        (WebKit::RemoteRenderingBackendProxy::isCached const):

        Add helper methods to RemoteRenderingBackendProxy that are called from RemoteDisplayListRecorderProxy.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        (WebKit::RemoteRenderingBackendProxy::sendToStream):

2021-10-11  Dean Jackson  <dino@apple.com>

        Disable SystemPreview in WKContentProviderRegistry
        https://bugs.webkit.org/show_bug.cgi?id=231538
        rdar://84110761

        Reviewed by Tim Horton.

        Disable the WebViewContentProvider for System Previews
        if UIKIT_WEBKIT_INTERNALS is true.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]):
        * UIProcess/ios/WKSystemPreviewView.h:
        * UIProcess/ios/WKSystemPreviewView.mm:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Unified build fix
        https://bugs.webkit.org/show_bug.cgi?id=231524

        Reviewed by Chris Dumez.

        This adds some missing includes and things to fix the build once I add some more files, making the unified build combine differently

        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm:
        (-[WKNetworkSessionDelegateAllowingOnlyNonRedirectedJSON URLSession:dataTask:didReceiveResponse:completionHandler:]):
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.mm:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:

2021-10-11  Per Arne Vollan <pvollan@apple.com>

        [macOS] Grant access in sandbox to 'system-privilege' for root
        https://bugs.webkit.org/show_bug.cgi?id=231501
        <rdar://83959448>

        Reviewed by Brent Fulgham.

        When running as root, WebKit processes need access to 'system-privilege'.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-11  Simon Fraser  <simon.fraser@apple.com>

        Smooth-scroll animations should run in the UI process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=204936

        Reviewed by Tim Horton.

        Implement animated scrolls in the UI process for UI-side compositing. The scrolling tree
        decoded in the UI process has a RequestedScrollData with the 'animated' flag. This is
        processed by handleScrollPositionRequest() as normal.

        ScrollingTreeOverflowScrollingNodeIOS::startAnimatedScrollToPosition() responds by calling
        through to the delegate, which simply calls -[setContentOffset:animated:YES] on the
        UIScrollView.

        Main frame scrolls are a little different because the programmatic scroll needs to be
        handled after layer tree commits; leverage the existing
        RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll() code, but clean it up to
        share the RequestedScrollData type, and have commitScrollingTreeState() return
        std::optional<RequestedScrollData> instead of storing a pointer to a struct on the stack as
        it did before. The various requestScroll() functions take a ScrollIsAnimated flag which
        turns into  -[setContentOffset:animated:YES] in WKWebView.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::dump):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:animated:]):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]): Deleted.
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/API/wpe/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::commitScrollingTreeState):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeRequestsScroll):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren): The delegate's
        commitStateAfterChildren() has to run first to update UIScrollView state before the programmatic scroll
        is handled in the base class.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateAfterChildren): The delegate's
        commitStateAfterChildren() has to run first to update UIScrollView state before the programmatic scroll
        is handled in the base class.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::startAnimatedScrollToPosition):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::stopAnimatedScroll):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollLayer const): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActions const): Deleted.
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::clearActiveTouchActions): Deleted.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::startAnimatedScrollToPosition):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::stopAnimatedScroll):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/playstation/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/playstation/PageClientImpl.h:
        * UIProcess/win/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/win/PageClientImpl.h:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Prepare to switch from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231239

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::locateIterator const):
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/Automation/SimulatedInputDispatcher.h:
        * UIProcess/Cocoa/WKSafeBrowsingWarning.h:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Add AdAttributionDaemon sandbox on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231308

        Reviewed by Brent Fulgham.

        This makes it so that AdAttributionDaemon has enough permission to access the network and its storage file and not much else.

        * Configurations/AdAttributionDaemon.xcconfig:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.AdAttributionDaemon.sb: Added.
        * Scripts/process-entitlements.sh:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::enterSandbox):
        * WebKit.xcodeproj/project.pbxproj:

2021-10-11  Per Arne Vollan <pvollan@apple.com>

        [iOS] Sort syscall filters in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231509
        <rdar://problem/84095366>

        Unreviewed, this patch only sorts existing message filters.

        Syscall filters should be sorted in the WebContent process' sandbox. This patch does not add or
        remove items from the filters, so there should be no change in behavior.

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

2021-10-11  Per Arne Vollan <pvollan@apple.com>

        Block access in sandbox to capability which is allowed by default
        https://bugs.webkit.org/show_bug.cgi?id=231079
        <rdar://66586853>

        Reviewed by Brent Fulgham.

        Some capabilities are allowed by default, and needs to be explicitly denied in the sandbox.

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

2021-10-11  Per Arne Vollan <pvollan@apple.com>

        [iOS] Add message filter in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=231046
        <rdar://problem/83743661>

        Reviewed by Brent Fulgham.

        Add IOKit message filter in the WebContent process' sandbox on iOS.

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

2021-10-10  Sihui Liu  <sihui_liu@apple.com>

        Add support for iterating FileSystemDirectoryHandle
        https://bugs.webkit.org/show_bug.cgi?id=231142
        <rdar://problem/83848092>

        Reviewed by Youenn Fablet and Yusuke Suzuki.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::FileSystemStorageHandle):
        (WebKit::FileSystemStorageHandle::getHandleNames):
        (WebKit::FileSystemStorageHandle::getHandle):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (WebKit::FileSystemStorageHandle::type const):
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::createHandle):
        (WebKit::FileSystemStorageManager::getType):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::getHandleNames):
        (WebKit::NetworkStorageManager::getHandle):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::getFileHandle):
        (WebKit::WebFileSystemStorageConnection::getDirectoryHandle):
        (WebKit::WebFileSystemStorageConnection::getHandleNames):
        (WebKit::WebFileSystemStorageConnection::getHandle):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:

2021-10-10  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE] Expose WKTextCheckerSetContinuousSpellCheckingEnabled and use it from WKTR
        https://bugs.webkit.org/show_bug.cgi?id=231446

        Reviewed by Philippe Normand.

        This is to avoid WKTR needing to poke WebKit internals to turn on spellchecking.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/C/glib/WKTextCheckerGLib.cpp: Renamed from Source/WebKit/UIProcess/API/C/gtk/WKTextCheckerGtk.cpp.
        (WKTextCheckerSetClient):
        (WKTextCheckerContinuousSpellCheckingEnabledStateChanged):
        (WKTextCheckerGrammarCheckingEnabledStateChanged):
        (WKTextCheckerCheckSpelling):
        (WKTextCheckerChangeSpellingToWord):
        (WKTextCheckerSetSpellCheckingLanguages):
        (WKTextCheckerSetContinuousSpellCheckingEnabled):
        * UIProcess/API/C/glib/WKTextCheckerGLib.h: Renamed from Source/WebKit/UIProcess/API/C/gtk/WKTextCheckerGtk.h.
        * UIProcess/gtk/WebTextChecker.h:
        * UIProcess/gtk/WebTextCheckerClient.h:

2021-10-09  Simon Fraser  <simon.fraser@apple.com>

        Run smooth scroll animations on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231481

        Reviewed by Tim Horton.

        Implement AsyncScrollingCoordinator::requestAnimatedScrollToPosition() and stopAnimatedScroll()
        so that smooth scroll animations are dispatched to the scrolling thread.

        RequestedScrollData gains a requestType field so that we can indicate the need
        to cancel a running animation on the scrolling thread.
        
        Tested by tests in imported/w3c/web-platform-tests/css/cssom-view.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<RequestedScrollData>::encode):
        (ArgumentCoder<RequestedScrollData>::decode):
        (WebKit::dump):

2021-10-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be notified when the inspected page navigates
        https://bugs.webkit.org/show_bug.cgi?id=231338
        <rdar://71200338>

        Reviewed by Devin Rousso.

        Add plumbing for a new event to pass from WebInspectorUI out to _WKInspectorExtensionDelegate.

        * UIProcess/API/APIInspectorExtensionClient.h:
        (API::InspectorExtensionClient::inspectedPageDidNavigate):

        * UIProcess/API/Cocoa/_WKInspectorExtensionDelegate.h:
        * UIProcess/Inspector/Cocoa/InspectorExtensionDelegate.h:
        * UIProcess/Inspector/Cocoa/InspectorExtensionDelegate.mm:
        (WebKit::InspectorExtensionDelegate::InspectorExtensionDelegate):
        (WebKit::InspectorExtensionDelegate::InspectorExtensionClient::inspectedPageDidNavigate):

        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.messages.in:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::inspectedPageDidNavigate):
        Call the delegate method for all _WKInspectorExtensions associated with this
        id<_WKInspectorExtensionHost>. Clients can map from extension to inspector if needed.

        * WebProcess/Inspector/RemoteWebInspectorUI.h:
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::inspectedPageDidNavigate):

        * WebProcess/Inspector/WebInspectorUI.h:
        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::inspectedPageDidNavigate):

        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::inspectedPageDidNavigate):

2021-10-08  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in Element.h
        https://bugs.webkit.org/show_bug.cgi?id=231283

        Reviewed by Myles C. Maxfield.

        Include ElementInlines.h in various necessary places.

        * Shared/TouchBarMenuData.cpp:
        * Shared/TouchBarMenuItemData.cpp:
        * Shared/glib/InputMethodState.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementGtk.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBaseElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLBodyElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDivElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLEmbedElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFontElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFrameSetElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHRElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHeadingElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLIElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLegendElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMetaElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLModElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptGroupElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParagraphElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLParamElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCaptionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableColElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableRowElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableSectionElement.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLUListElement.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/cocoa/PlaybackSessionManager.mm:

2021-10-08  Simon Fraser  <simon.fraser@apple.com>

        Ensure that animated scrolls will run on the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=231441

        Reviewed by Tim Horton.

        On macOS, scrolling tree commits run on the main thread (holding a lock), so we can't start
        scroll animations directly inside the commit because then they will run on the main thread.

        Fix by adding ScrollingTree::didCommitTree(), and having ThreadedScrollingTree override it
        to bounce to the scrolling tree to start animations. We also have to intercept requested scroll
        position updates via ScrollingTree::scrollingTreeNodeRequestsScroll(); ThreadedScrollingTree
        uses this to put pending animations into m_nodesWithPendingScrollAnimations.

        Now that ScrollingTreeScrollingNode::commitStateAfterChildren() responds to
        RequestedScrollPosition changes by calling handleScrollPositionRequest(), we can remove code
        in derived classes that did the same thing.

        Not yet tested because animated scrolls don't yet get to the scrolling tree.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeRequestsScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren):

2021-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Split DisplayList::Recorder into an abstract base class and a concrete implementation
        https://bugs.webkit.org/show_bug.cgi?id=231404

        Reviewed by Myles Maxfield.

        See WebCore/ChangeLog for more details.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-10-08  Ben Nham  <nham@apple.com>

        Fix crash in NetworkProcess preconnect due to dereferencing deallocated session
        https://bugs.webkit.org/show_bug.cgi?id=231456
        <rdar://problem/83752148>

        Reviewed by Chris Dumez.

        We capture a raw NetworkSession reference in the preconnect completion handler. This
        reference could point to a deallocated object if the NetworkSession dies before the
        preconnect finishes.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):

2021-10-08  John Pascoe  <j_pascoe@apple.com>

        Update getAllLocalAuthenticatorCredentials query according to internal needs
        https://bugs.webkit.org/show_bug.cgi?id=231439
        rdar://84032359

        Reviewed by Tim Horton.

        Covered by manual tests.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (updateQueryIfNecessary):
        (getAllLocalAuthenticatorCredentialsImpl):

2021-10-08  Basuke Suzuki  <basuke.suzuki@sony.com>

        Fix build break after r283796 when ENABLE_SERVICE_WORKER is off
        https://bugs.webkit.org/show_bug.cgi?id=231440

        Unreviewed build fix.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::hasServiceWorkerBackgroundActivityForTesting const):

2021-10-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 4: Migrate PendingWakeupInformation to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231406
        <rdar://problem/84009999>

        Reviewed by Wenson Hsieh.

        This starts pushing QualifiedRenderingResourceIdentifier into a few more places. It's being pushed into
        PendingWakeupInformation and RemoteImageBuffer. (I can't split this patch up any further because the
        pieces intermingle.)

        The next step is to push QualifiedRenderingResourceIdentifier down into RemoteResourceCache.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::create):
        (WebKit::RemoteImageBuffer::RemoteImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::didCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackend::didFlush):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::setNextItemBufferToRead):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        (WebKit::RemoteRenderingBackend::resumeFromPendingWakeupInformation):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        (WebKit::RemoteRenderingBackend::PendingWakeupInformation::shouldPerformWakeup const):

2021-10-08  Tim Horton  <timothy_horton@apple.com>

        defaultAlternateFormControlDesignEnabled() can't read UIUserInterfaceIdiom in the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=231416
        <rdar://problem/84009054>

        Reviewed by Anders Carlsson.

        It turns out WebPreferences default getters are run in the Web Content process,
        which is a problem for defaultAlternateFormControlDesignEnabled because
        it needs to consult with application state.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        Explicitly initialize this preference in the UI process.

2021-10-08  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r283802): broke Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=231434

        Unreviewed, revert changes to TextChecker.h that broke the iOS build.

        * UIProcess/TextChecker.h:

2021-10-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 3: Uniquify in wakeUpAndApplyDisplayList
        https://bugs.webkit.org/show_bug.cgi?id=231405
        <rdar://problem/84008003>

        Reviewed by Chris Dumez.

        This simply applies the same treatment in https://commits.webkit.org/242676@main to
        RemoteRenderingBackend::wakeUpAndApplyDisplayList(). This is being done in a follow-up
        patch because it relies on https://bugs.webkit.org/show_bug.cgi?id=231403.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayListWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::resumeFromPendingWakeupInformation):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        (WebKit::RemoteRenderingBackend::PendingWakeupInformation::arguments const): Deleted.

2021-10-08  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] API export fixes
        https://bugs.webkit.org/show_bug.cgi?id=231430

        Reviewed by Michael Catanzaro.

        Remove internal WebKit API (GRefPtr) from the public QtWPE API, and export classes exposing
        the public QtWPE API.

        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::~WPEQtView):
        (WPEQtView::createWebView):
        (WPEQtView::url const):
        (WPEQtView::setUrl):
        (WPEQtView::loadProgress const):
        (WPEQtView::title const):
        (WPEQtView::canGoBack const):
        (WPEQtView::isLoading const):
        (WPEQtView::canGoForward const):
        (WPEQtView::goBack):
        (WPEQtView::goForward):
        (WPEQtView::reload):
        (WPEQtView::stop):
        (WPEQtView::loadHtml):
        (WPEQtView::runJavaScript):
        * UIProcess/API/wpe/qt/WPEQtView.h:
        (): Deleted.
        (WPEQtView::triggerUpdate): Deleted.
        (WPEQtView::errorOccured const): Deleted.
        (WPEQtView::setErrorOccured): Deleted.
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.h:
        * UIProcess/TextChecker.h:

2021-10-08  Youenn Fablet  <youenn@apple.com>

        Bind the number of WebRTC sockets opened per process
        https://bugs.webkit.org/show_bug.cgi?id=231171

        Reviewed by Alex Christensen.

        Migrate from HashMap to StdMap so that we can keep the order based on socket identifiers.
        Take benefit of the ordering so that, above a certain size, we get the oldest socket, close it and remove it from the map.
        We set the maximum size to 256 sockets per process.
        Fix a potential bug in NetworkRTCTCPSocketCocoa to ensure we remove the socket from the map even if the nw connection is not live.
        Manually tested.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:

2021-10-08  Youenn Fablet  <youenn@apple.com>

        Add support for processing push events without service worker clients
        https://bugs.webkit.org/show_bug.cgi?id=231285

        Reviewed by Chris Dumez.

        When firing a push event, ask UIProcess to take a background assertion for the process running the service worker.
        We use a counter based approach to take/dispose of the backgorund assertion.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Plumb "animated scroll did end" back from the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=231412

        Reviewed by Tim Horton.

        Before we can enable async animated scrolls, we have to get the "did end" notification back
        from the scrolling thread/UI process in order to clear the ScrollAnimationStatus on
        ScrollableArea.

        The scroll animations are run by the ScrollingEffectsController owned by
        ScrollingTreeScrollingNodeDelegateMac/ScrollingTreeScrollingNodeDelegateNicosia. Their
        didStopAnimatedScroll() implementations call through the ScrollingTreeScrollingNde to the
        ScrollingTree, which enqueues ScrollUpdate just as we do for scroll position changes.

        ScrollUpdate is enhanced to contain an 'updateType' with a AnimatedScrollDidEnd value. When
        this is received by AsyncScrollingCoordinator it clears the ScrollAnimationStatus on the
        relevant FrameView/RenderLayerScrollableArea.

        With UI-side compositing, AnimatedScrollDidEndForNode is an IPC message back to
        RemoteScrollingCoordinator.

        Not yet tested because async animated scrolls are not enabled.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidStopAnimatedScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidStopAnimatedScroll):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.messages.in:
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):
        (WebKit::RemoteScrollingCoordinator::animatedScrollDidEndForNode):

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Add some plumbing for running smooth scroll animations in the scrolling thread/UI process
        https://bugs.webkit.org/show_bug.cgi?id=231402

        Reviewed by Tim Horton.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<RequestedScrollData>::encode):
        (ArgumentCoder<RequestedScrollData>::decode):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateAfterChildren):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::startAnimatedScrollToPosition):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::stopAnimatedScroll):

2021-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 2: Unroll PendingWakeupInformation::arguments
        https://bugs.webkit.org/show_bug.cgi?id=231403

        Reviewed by Wenson Hsieh.

        We're in the process of replacing RenderingResourceIdentifiers in the GPU process with
        QualifiedRenderingResourceIdentifier. Unfortunately, PendingWakeupInformation holds
        a GPUProcessWakeupMessageArguments which itself holds a RenderingResourceIdentifiers.
        PendingWakeupInformation is part of the GPU process, so it needs to migrate to 
        QualifiedRenderingResourceIdentifier, but GPUProcessWakeupMessageArguments is the type
        of the arguments to the WakeUpAndApplyDisplayList message, so it can't hold a
        QualifiedRenderingResourceIdentifier.

        So, the solution is to unroll PendingWakeupInformation::arguments, and hoist its fields
        directly into the PendingWakeupInformation. That way, PendingWakeupInformation can be
        updated to use QualifiedRenderingResourceIdentifier, without affecting
        the WakeUpAndApplyDisplayList message.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):
        (WebKit::RemoteRenderingBackend::setNextItemBufferToRead):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandleWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::resumeFromPendingWakeupInformation):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        (WebKit::RemoteRenderingBackend::PendingWakeupInformation::arguments const):
        (WebKit::RemoteRenderingBackend::PendingWakeupInformation::shouldPerformWakeup const):

2021-10-07  Simon Fraser  <simon.fraser@apple.com>

        Minor refactoring to use ScrollUpdate in more places
        https://bugs.webkit.org/show_bug.cgi?id=231395

        Reviewed by Myles C. Maxfield.

        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):

2021-10-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 1: Uniquify at entry points
        https://bugs.webkit.org/show_bug.cgi?id=231281
        <rdar://problem/83920780>

        Reviewed by Chris Dumez.

        Each web process creates its own RenderingResourceIdentifiers. Because the GPU process
        can service multiple web processes, these identifiers can collide in the GPU process.
        This is somewhat error prone, and might cause us to make a mistake in the future and
        introduce a bug which lets one web process see another web process's resources (which
        would be mega bad).

        The goal of this project is to treat RenderingResourceIdentifiers in the GPU process
        as a tuple of (the identifer we got from the web process, the process identifier of
        the web process). This way, the tuples uniquely identify a resource across the entire
        GPU process. Doing it this way makes it less likely that we'll make a mega bad mistake
        in the future.

        This patch is the first step: It introduces the QualifiedRenderingResourceIdentifier
        type, which holds the tuple described above, and makes all the GPU process message
        receivers immediately turn any RenderingResourceIdentifiers they received from the
        web processes into QualifiedRenderingResourceIdentifiers. Not only do the identifiers
        immediately get packed, but each message receiver now has an implementation function
        which only accepts the QualifiedRenderingResourceIdentifier, so we can't make a
        mistake and use the unpacked one accidentally.

        Because this patch is just the first step, the QualifiedRenderingResourceIdentifiers
        get unpacked eagerly, and the inner logic of the GPU process is unaffected. The
        subsequent two patches will push the QualifiedRenderingResourceIdentifiers deeper
        into the guts of the GPU process, eventually to the point where
        RenderingResourceIdentifiers are never used there.

        * GPUProcess/graphics/QualifiedRenderingResourceIdentifier.h: Added.
        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        (WebKit::RemoteGraphicsContextGL::paintRenderingResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintRenderingResultsToCanvasWithQualifiedIdentifier):
        (WebKit::RemoteGraphicsContextGL::paintCompositedResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintCompositedResultsToCanvasWithQualifiedIdentifier):
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        (WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataURLForImageBuffer):
        (WebKit::RemoteRenderingBackend::getDataURLForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getDataForImageBuffer):
        (WebKit::RemoteRenderingBackend::getDataForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBuffer):
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBufferWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheNativeImage):
        (WebKit::RemoteRenderingBackend::cacheNativeImageWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::cacheFont):
        (WebKit::RemoteRenderingBackend::cacheFontWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::releaseRemoteResource):
        (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandle):
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandleWithQualifiedIdentifier):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-07  Arcady Goldmints-Orlov  <agoldmints@igalia.com>

        [GTK][WPE] Disable privateClickMeasurement when creating the network process
        https://bugs.webkit.org/show_bug.cgi?id=231175

        Reviewed by Adrian Perez de Castro.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):

2021-10-07  Aditya Keerthi  <akeerthi@apple.com>

        Fix the macCatalyst build
        https://bugs.webkit.org/show_bug.cgi?id=231373
        rdar://83984197

        Reviewed by Tim Horton.

        * UIProcess/API/ios/WKWebViewIOS.mm: Add missing import.

2021-10-07  Darin Adler  <darin@apple.com>

        Get rid of the deviceClass function, up-leveling to deviceClassIsSmallScreen
        https://bugs.webkit.org/show_bug.cgi?id=231344

        Reviewed by Tim Horton.

        * Shared/UserInterfaceIdiom.h:
        * Shared/UserInterfaceIdiom.mm:
        (WebKit::currentUserInterfaceIdiomIsSmallScreen): Renamed to say "is small screen"
        instead of "is phone or watch", the same concept. Also switched to TriState instead
        of using a unique enumeration.
        (WebKit::setCurrentUserInterfaceIdiomIsSmallScreen): Ditto.
        (WebKit::updateCurrentUserInterfaceIdiom): Updated for name change.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Updated for name change.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h: Ditto.

        * Shared/ios/WebPreferencesDefaultValuesIOS.mm:
        (WebKit::defaultTextAutosizingUsesIdempotentMode): Updated for name change.
        (WebKit::defaultMediaSourceEnabled): Use !deviceClassIsSmallScreen instead of
        deviceClass != iPhone and != iPod, and also remove unneeded compile time conditionals.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: Removed uneeded Device.h include.
        (-[WKWebViewConfiguration init]): Updated for name change.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Ditto.
        (WebKit::WebProcessPool::registerNotificationObservers): Ditto, also got rid of
        local variable.

        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        Updated for name change.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]): Ditto.
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]): Ditto.
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]): Ditto.
        (-[WKContentView _zoomToRevealFocusedElement]): Ditto.
        (-[WKContentView _elementTypeRequiresAccessoryView:]): Ditto.
        (-[WKContentView _updateAccessory]): Ditto.
        (-[WKContentView _shouldUseLegacySelectPopoverDismissalBehavior]): Ditto.
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (WebKit::WebDataListSuggestionsDropdownIOS::show): Ditto.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingSupported): Ditto.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker show:fromRect:]): Ditto.
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]): Ditto.
        (-[WKFileUploadPanel _presentMenuOptionForCurrentInterfaceIdiom:]): Ditto.
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]): Ditto.
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectMultiplePicker configurePresentation]): Ditto.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Ditto.
        (WebKit::WebProcess::userInterfaceIdiomDidChange): Ditto.

2021-10-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add the ability to dispatch messages to multiple receiver types in IPC::StreamServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=231305

        Reviewed by Kimmo Kinnunen.

        In preparation for using streamable IPC for display list rendering in the GPU process (i.e. 2D canvas and DOM
        rendering), refactor StreamServerConnection such that it is capable of dispatching stream messages to generic
        StreamMessageReceivers. This has the disadvantage of performing a vtable lookup with each message dispatch, but
        I did not measure this to be a significant performance regression on any of the canvas subtests in MotionMark.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:

        Make RemoteGraphicsContextGL subclass StreamMessageReceiver.

        * Platform/IPC/StreamMessageReceiver.h: Added.
        (IPC::StreamMessageReceiver::~StreamMessageReceiver):
        * Platform/IPC/StreamServerConnection.cpp:
        (IPC::StreamServerConnection::startReceivingMessages):
        (IPC::StreamServerConnection::stopReceivingMessages):
        (IPC::StreamServerConnection::dispatchStreamMessages):
        (IPC::StreamServerConnection::processSetStreamDestinationID):
        (IPC::StreamServerConnection::dispatchStreamMessage):
        (IPC::StreamServerConnection::dispatchOutOfStreamMessage):

        Now that these methods are no longer templated, we can move their implementations from the header to the
        implementation file.

        * Platform/IPC/StreamServerConnection.h:

        Remove the template argument from StreamServerConnection, and instead make this start and stop receiving
        messages for generic StreamMessageReceiver objects.

        (IPC::StreamServerConnection<Receiver>::startReceivingMessages): Deleted.
        (IPC::StreamServerConnection<Receiver>::stopReceivingMessages): Deleted.
        (IPC::StreamServerConnection<Receiver>::dispatchStreamMessages): Deleted.
        (IPC::StreamServerConnection<Receiver>::processSetStreamDestinationID): Deleted.
        (IPC::StreamServerConnection<Receiver>::dispatchStreamMessage): Deleted.
        (IPC::StreamServerConnection<Receiver>::dispatchOutOfStreamMessage): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

2021-10-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        ScopedEGLDefaultDisplay should be removed
        https://bugs.webkit.org/show_bug.cgi?id=231011

        Reviewed by Kenneth Russell.

        Implement the release of WebGL resources with the amended
        GraphicsContextGLOpenGL::releaseResources() instead of
        previous separate function GraphicsContextGLOpenGL::releaseAllResources().

        Use the resource release code path universally, as
        GraphicsContextGLOpenGL::releaseResources() is now common code.

        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.cpp:
        (WebKit::ScopedWebGLRenderingResourcesRequest::scheduleFreeWebGLRenderingResources):
        (WebKit::ScopedWebGLRenderingResourcesRequest::freeWebGLRenderingResources):
        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.h:
        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequestCocoa.cpp: Removed.
        (WebKit::ScopedWebGLRenderingResourcesRequest::scheduleFreeWebGLRenderingResources): Deleted.
        (WebKit::ScopedWebGLRenderingResourcesRequest::freeWebGLRenderingResources): Deleted.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-07  Basuke Suzuki  <basuke.suzuki@sony.com>

        Change the confusing feature name for testing purpose
        https://bugs.webkit.org/show_bug.cgi?id=231259

        Reviewed by Tim Horton.

        ENABLE(EXPERIMENTAL_FEATURE) was used in the test, but that is very confusing with
        ENABLE_EXPERIMENTAL_FEATURES. Change them to more obvious ENABLE(FEATURE_FOR_TESTING).

        * Scripts/webkit/parser_unittest.py:
        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
        (IPC::jsValueForArguments):
        (IPC::messageArgumentDescriptions):
        * Scripts/webkit/tests/MessageNames.cpp:
        (IPC::isValidMessageName):
        * Scripts/webkit/tests/TestWithLegacyReceiver.messages.in:
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessages.h:
        * Scripts/webkit/tests/TestWithoutAttributes.messages.in:
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessages.h:

2021-10-06  Timothy Hatcher  <timothy@apple.com>

        _WKRemoteObjectRegistry's ReplyBlockCallChecker should always dealloc on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=231346
        rdar://problem/83965481

        Reviewed by Chris Dumez.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]): Added WTF::DestructionThread::MainRunLoop to ReplyBlockCallChecker.

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

        Delete WebCore::DisplayList::SetInlineFillGradient
        https://bugs.webkit.org/show_bug.cgi?id=231326

        Reviewed by Simon Fraser.

        See WebCore/ChangeLog for more details.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::decodeItem):

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

        Add a configurable wake up message hysteresis to IPC::StreamClientConnection
        https://bugs.webkit.org/show_bug.cgi?id=231304

        Reviewed by Simon Fraser.

        Make it possible to avoid sending the wakeup message in StreamClientConnection, until some configurable number
        of messages have been queued up. This allows us to avoid triggering excessive wakeups in the GPU Process when
        using streaming IPC for display lists in the Canvas Lines subtest in MotionMark, which exercises sending a
        massive, constant stream of cheap drawing commands to the GPUP.

        By default, this hysteresis remains at 0, which means that we'll continue to immediately send GL commands to the
        GPU Process when using GPU Process for WebGL. In a future patch, I intend on defaulting to a small hysteresis
        (i.e. ~256) for 2D canvas and DOM rendering.

        * Platform/IPC/StreamClientConnection.cpp:
        (IPC::StreamClientConnection::wakeUpServer):
        (IPC::StreamClientConnection::deferredWakeUpServer):
        (IPC::StreamClientConnection::decrementRemainingMessageCountBeforeSendingWakeUp):
        (IPC::StreamClientConnection::sendDeferredWakeUpMessageIfNeeded):
        * Platform/IPC/StreamClientConnection.h:

        Also mark StreamClientConnection with `WTF_MAKE_FAST_ALLOCATED`, so that we can wrap the client connection in a
        `std::unique_ptr` in a future patch.

        (IPC::StreamClientConnection::trySendStream):

        When sending a normal (non-blocking) stream message, if the wakeup hysteresis count is non-zero, avoid
        immediately signaling the semaphore and instead just set the hysteresis count to the client's specified count
        (`m_wakeUpMessageHysteresis`).

        (IPC::StreamClientConnection::trySendSyncStream):

        When sending a sync message, we always want to immediately flush out any pending wakeup message regardless of
        the current hysteresis, since we're waiting for the server to process a reply.

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

        Fix unified source-related build failures in RemoteSourceBufferProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=231335

        Reviewed by Tim Horton.

        We directly use WebCore::AudioTrackPrivate and WebCore::VideoTrackPrivate in RemoteSourceBufferProxy.cpp, but we
        don't import their respective WebCore headers; this causes the build to break when shifting around unified
        source groupings. Resolve this via the usual means (by importing these headers).

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:

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

        Add some helper functions to RemoteResourceCache and RemoteResourceCacheProxy
        https://bugs.webkit.org/show_bug.cgi?id=231319

        Reviewed by Simon Fraser.

        Add a few const getters to RemoteResourceCache, and make an existing getter on RemoteResourceCacheProxy const.
        I plan to use these in future patches, to support using streamable IPC for display list rendering in the GPU
        process.

        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::cachedImageBuffer const):
        (WebKit::RemoteResourceCache::cachedNativeImage const):
        (WebKit::RemoteResourceCache::cachedFont const):
        (WebKit::RemoteResourceCache::cachedImageBuffer): Deleted.
        * GPUProcess/graphics/RemoteResourceCache.h:
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::cachedImageBuffer const):
        (WebKit::RemoteResourceCacheProxy::cachedImageBuffer): Deleted.
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

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

        Adopt WTF::ApproximateTime in IPC::Timeout
        https://bugs.webkit.org/show_bug.cgi?id=231301

        Reviewed by Simon Fraser.

        When computing time out deadlines for IPC messages, the time granularities (on the order of hundreds of
        milliseconds) are many, many orders of magnitude greater than the granularity of ApproximateTime; this makes it
        much cheaper to use ApproximateTime instead of MonotonicTime when computing these deadlines, which significantly
        improves performance in the case where we're streaming high volumes of IPC messages.

        Additionally, in the case where the timeout duration is infinite, we can avoid asking for the current time
        altogether, and simply use `ApproximateTime::infinity()`.

        * Platform/IPC/Timeout.h:
        (IPC::Timeout::Timeout):
        (IPC::Timeout::secondsUntilDeadline const):
        (IPC::Timeout::deadline const):
        (IPC::Timeout::didTimeOut const):

2021-10-06  Sihui Liu  <sihui_liu@apple.com>

        Add support for FileSystemSyncAccessHandle
        https://bugs.webkit.org/show_bug.cgi?id=231185
        <rdar://problem/83847859>

        Reviewed by Youenn Fablet.

        Currently we only allow one open access handle on one file. Second access handle can be created after the first
        is closed.

        * NetworkProcess/storage/FileSystemStorageError.h:
        (WebKit::convertToException):
        (WebKit::convertToExceptionOr):
        (WebKit::convertToExceptionCode): Deleted.
        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::createSyncAccessHandle):
        (WebKit::FileSystemStorageHandle::getSize):
        (WebKit::FileSystemStorageHandle::truncate):
        (WebKit::FileSystemStorageHandle::flush):
        (WebKit::FileSystemStorageHandle::close):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::connectionClosed):
        (WebKit::FileSystemStorageManager::acquireLockForFile):
        (WebKit::FileSystemStorageManager::releaseLockForFile):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::createSyncAccessHandle):
        (WebKit::NetworkStorageManager::getSizeForAccessHandle):
        (WebKit::NetworkStorageManager::truncateForAccessHandle):
        (WebKit::NetworkStorageManager::flushForAccessHandle):
        (WebKit::NetworkStorageManager::closeAccessHandle):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp:
        (WebKit::WebFileSystemStorageConnection::getFileHandle):
        (WebKit::WebFileSystemStorageConnection::getDirectoryHandle):
        (WebKit::WebFileSystemStorageConnection::removeEntry):
        (WebKit::WebFileSystemStorageConnection::resolve):
        (WebKit::WebFileSystemStorageConnection::createSyncAccessHandle):
        (WebKit::WebFileSystemStorageConnection::getSize):
        (WebKit::WebFileSystemStorageConnection::truncate):
        (WebKit::WebFileSystemStorageConnection::flush):
        (WebKit::WebFileSystemStorageConnection::close):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h:
        * WebProcess/WebCoreSupport/WebStorageConnection.cpp:
        (WebKit::WebStorageConnection::fileSystemGetDirectory):

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

        Move FlushIdentifier out of the DisplayList namespace
        https://bugs.webkit.org/show_bug.cgi?id=231263

        Reviewed by Simon Fraser.

        In a future patch, I plan to use `DisplayList::FlushIdentifier` in code that is not specific to WebCore display
        lists. As such, move this out into a separate header (`GraphicsContextFlushIdentifier.h`), and rename the enum
        class accordingly.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::didFlush):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::lastSentFlushIdentifier const):
        (WebKit::RemoteImageBufferProxy::waitForDidFlushOnSecondaryThread):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::didFlush):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:

2021-10-06  Aditya Keerthi  <akeerthi@apple.com>

        Fix watchOS, tvOS, and macCatalyst builds after r283592
        https://bugs.webkit.org/show_bug.cgi?id=231300
        rdar://83936867

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/PhotosUISPI.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMultipleMediaWithInfo:]):

2021-10-06  Megan Gardner  <megan_gardner@apple.com>

        Allow text selection to flip.
        https://bugs.webkit.org/show_bug.cgi?id=231234
        rdar://83889188

        Reviewed by Wenson Hsieh.

        In order to bring webkit more in line with UIKit, allow text selection to flip.
        This also requires a UIKit change tracked in rdar://83788439
        This is currently guarded behind an off-by-default flag so that we can
        test this new behavior before turning it on by default.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/ios/GestureTypes.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toUIWKSelectionFlags):
        (toSelectionFlags):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::selectionFlippingEnabled const):
        (WebKit::WebPage::setSelectionFlippingEnabled):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::rangeForPointInRootViewCoordinates):
        (WebKit::WebPage::updateSelectionWithTouches):

2021-10-06  Chris Dumez  <cdumez@apple.com>

        IPC SimpleArgumentEncoder should static_assert(std::is_trivially_copyable<T>)
        https://bugs.webkit.org/show_bug.cgi?id=230743
        <rdar://problem/83757335>

        Reviewed by Kimmo Kinnunen.

        Add static_assert(std::is_trivially_copyable<T>) to IPC SimpleArgumentEncoder to avoid misuses.

        * Platform/IPC/ArgumentCoders.h:

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

        [WebKit2] Refactor some IPC argument encoder logic to work with StreamConnectionEncoder
        https://bugs.webkit.org/show_bug.cgi?id=230714
        rdar://83477591

        Reviewed by Tim Horton.

        Make it possible to use `IPC::StreamConnectionEncoder` to encode display list items (and their members) in an
        IPC stream. This patch comprises two main sets of changes in `ArgumentCoders`, and `WebCoreArgumentCoders`. See
        below for more details.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<audit_token_t>::decode):
        (IPC::ArgumentCoder<Monostate>::encode): Deleted.
        (IPC::ArgumentCoder<Monostate>::decode): Deleted.
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<Monostate>::encode):
        (IPC::ArgumentCoder<Monostate>::decode):

        Many of these `encode()` methods are currently non-templated, which means that Encoder and Decoder used here
        refer solely to IPC::Encoder and IPC::Decoder (respectively) instead of other types of encoders (namely,
        StreamConnectionEncoder). Make these use templated `encode` methods intead, so that they work with generic
        encoders.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AffineTransform>::encode): Deleted.
        (IPC::ArgumentCoder<AffineTransform>::decode): Deleted.
        (IPC::ArgumentCoder<FloatPoint>::encode): Deleted.
        (IPC::ArgumentCoder<FloatPoint>::decode): Deleted.
        (IPC::ArgumentCoder<FloatPoint3D>::encode): Deleted.
        (IPC::ArgumentCoder<FloatPoint3D>::decode): Deleted.
        (IPC::ArgumentCoder<FloatRect>::encode): Deleted.
        (IPC::ArgumentCoder<FloatRect>::decode): Deleted.
        (IPC::ArgumentCoder<FloatBoxExtent>::encode): Deleted.
        (IPC::ArgumentCoder<FloatBoxExtent>::decode): Deleted.
        (IPC::ArgumentCoder<FloatSize>::encode): Deleted.
        (IPC::ArgumentCoder<FloatSize>::decode): Deleted.
        (IPC::ArgumentCoder<FloatRoundedRect>::encode): Deleted.
        (IPC::ArgumentCoder<FloatRoundedRect>::decode): Deleted.
        (IPC::ArgumentCoder<IntPoint>::encode): Deleted.
        (IPC::ArgumentCoder<IntPoint>::decode): Deleted.
        (IPC::ArgumentCoder<IntRect>::encode): Deleted.
        (IPC::ArgumentCoder<IntRect>::decode): Deleted.
        (IPC::ArgumentCoder<IntSize>::encode): Deleted.
        (IPC::ArgumentCoder<IntSize>::decode): Deleted.
        (IPC::ArgumentCoder<LayoutSize>::encode): Deleted.
        (IPC::ArgumentCoder<LayoutSize>::decode): Deleted.
        (IPC::ArgumentCoder<LayoutPoint>::encode): Deleted.
        (IPC::ArgumentCoder<LayoutPoint>::decode): Deleted.

        These WebCore argument coders are also currently incompatible with StreamConnectionEncoder, since they are non-
        templated (and thus only work with IPC::Encoder). Since these are all encodable as POD types, we can just use
        SimpleArgumentCoder for all of these. We also add new `DEFINE_SIMPLE_ARGUMENT_CODER_FOR_(HEADER|SOURCE)` macros
        to make this code a bit easier to read, which adds SimpleArgumentCoder for the given type, for both standard
        IPC::Encoder as well as IPC::StreamConnectionEncoder.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<CGRect>::encode): Deleted.
        (IPC::ArgumentCoder<CGRect>::decode): Deleted.
        (IPC::ArgumentCoder<CGSize>::encode): Deleted.
        (IPC::ArgumentCoder<CGSize>::decode): Deleted.
        (IPC::ArgumentCoder<CGPoint>::encode): Deleted.
        (IPC::ArgumentCoder<CGPoint>::decode): Deleted.
        (IPC::ArgumentCoder<CGAffineTransform>::encode): Deleted.
        (IPC::ArgumentCoder<CGAffineTransform>::decode): Deleted.

2021-10-06  Youenn Fablet  <youenn@apple.com>

        Implement https://w3c.github.io/push-api/#receiving-a-push-message
        https://bugs.webkit.org/show_bug.cgi?id=231070
        <rdar://problem/83759574>

        Reviewed by Chris Dumez.

        Add temporary SPI in WKWebsiteDataStore to allow pushing messages to service workers.
        It takes a completion handler to check whether the message is acknowledged or not.
        The service worker registration is identified by its scope for now.
        A few additional things might need to be done:
        - The case where the service worker is launched with no client.
        - Handling of background assertions, especially if service worker has no client.
        - Optimizations: skip events, optimization of network process launch by only loading the service worker registrations of an origin.

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

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

        [Build-time perf] Forward declare JS TypedArrays
        https://bugs.webkit.org/show_bug.cgi?id=231196

        Reviewed by Tim Horton.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:

2021-10-06  Youenn Fablet  <youenn@apple.com>

        Close NetworkRTCProvider sockets explicitly when closing NetworkRTCProvider
        https://bugs.webkit.org/show_bug.cgi?id=231228
        <rdar://83237496>

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::close):
        Make sure to explictly closing the socket before deleting it.

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        Do daily activity in AdAttributionDaemon based off of when the xpc activity happens
        https://bugs.webkit.org/show_bug.cgi?id=231254

        Reviewed by Kate Cheney.

        Before this change, we did the activity 5 seconds after startup of the daemon, which can be started
        by sending an attribution to it or by the daily xpc activity.  We want to do it only because of the xpc activity.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::PrivateClickMeasurementManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::doDailyActivityInManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::registerScheduledActivityHandler):

2021-10-05  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Transcode videos selected from UIImagePickerController
        https://bugs.webkit.org/show_bug.cgi?id=230639
        rdar://79665678

        Reviewed by Tim Horton.

        File inputs on iOS allow users to choose images/videos from the system
        photo picker, using UIImagePickerController. In single selection mode,
        UIImagePickerController transcodes the selected video to H.264. However,
        in multiple selection mode, video is not transcoded and is left in its
        original format.

        Today, videos on most iOS devices are encoded with HEVC by default.
        However, some sites, such as Twitter, only accept H.264 encoded video.
        Thus, the current video upload behavior is problematic, as users may be
        unable to upload video.

        Unfortunately, the photo picking functionality of UIImagePickerController
        is deprecated. The best solution would be to adopt PHPickerViewController,
        the replacement API, which performs transcoding when retrieving selected
        items (regardless of single/multiple selection). However,
        PHPickerViewController currently lacks other functionality that WebKit
        requires, preventing adoption.

        Consequently, the short term solution is to transcode the videos in
        WebKit, ensuring H.264 encoded video is always provided to sites. See
        below for implementation details.

        * Platform/spi/ios/PhotosUISPI.h: Added.
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[_WKFileUploadItem setFileURL:]):

        Add a setter to update the file URL. Called after transcoding a _WKFileUploadItem.

        (-[WKFileUploadMediaTranscoder initWithItems:videoCount:completionHandler:]):

        Introduce WKFileUploadMediaTranscoder to manage transcoding of videos
        and the display of progress UI. Transcoding is performed serially
        (one video at a time), but occurs off the main thread.

        (-[WKFileUploadMediaTranscoder start]):

        Begin transcoding. Run a timer to update the progress UI, as
        AVAssetExportSession does not provide progress updates on its own.

        The progress UI is implemented using PUActivityProgressController, to
        match system Photos UI.

        (-[WKFileUploadMediaTranscoder _processItemAtIndex:]):

        Transcode a single video, using AVAssetExportSession. If transcoding
        fails for any reason, the original video is used as a fallback.
        Transcoding can also be cancelled using the progress UI, in which case
        no more videos are processed.

        (-[WKFileUploadMediaTranscoder _finishedProcessing]):
        (-[WKFileUploadMediaTranscoder _dismissProgress]):
        (-[WKFileUploadMediaTranscoder _updateProgress:]):
        (-[WKFileUploadMediaTranscoder _temporaryDirectoryCreateIfNecessary]):
        (-[WKFileUploadPanel _chooseMediaItems:]):

        Refactor the common aspects of single/multiple media selection into a
        single method.

        (-[WKFileUploadPanel imagePickerController:didFinishPickingMediaWithInfo:]):
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMultipleMediaWithInfo:]):
        (-[WKFileUploadPanel _processMediaInfoDictionaries:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _processMediaInfoDictionaries:atIndex:processedResults:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):

        Remove redundant platform conditional.

        (-[WKFileUploadPanel _uploadMediaItemsTranscodingVideo:]):

        If any videos were selected, transcode them prior to uploading.

        * WebKit.xcodeproj/project.pbxproj:

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        Add an entitlement check to only allow AdAttributionDaemon to be connected to by the network process
        https://bugs.webkit.org/show_bug.cgi?id=231248

        Reviewed by Alexey Proskuryakov.

        Adding a restricted entitlement on macOS when using a non-internal SDK causes the network process to not start,
        so in open source builds (in which the daemon is only used for unit tests) just skip the entitlement check.

        * Scripts/process-entitlements.sh:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::startListeningForMachServiceConnections):

2021-10-05  Chris Dumez  <cdumez@apple.com>

        Authorization header lost on 30x redirects
        https://bugs.webkit.org/show_bug.cgi?id=230935
        <rdar://problem/83689955>

        Reviewed by Darin Adler.

        CFNetwork drops the Authorization request header in cases of same-origin redirects, which is not as per
        the fetch specification [1] and doesn't match the behavior of other browsers.

        To address the issue, WebKit adds the Authorization request back in case of a same-origin redirect.

        [1] https://fetch.spec.whatwg.org/#concept-http-redirect-fetch

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

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

        <model> should be draggable, similar to <img>
        https://bugs.webkit.org/show_bug.cgi?id=229246

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/DragDropInteractionState.mm:
        (WebKit::shouldUseDragImageToCreatePreviewForDragSource):
        For now, use the Web-Content-process-painted node-snapshot DragImage for the targeted preview on iOS.

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

        Add an alternate style for form controls, and implement it for checkboxes and radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=231160

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultAlternateFormControlDesignEnabled):
        * Shared/WebPreferencesDefaultValues.h:

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        Implement missing functions in PrivateClickMeasurementDaemonClient
        https://bugs.webkit.org/show_bug.cgi?id=231060

        Reviewed by Chris Dumez.

        Enable debug mode in the daemon if any connected clients have debug mode enabled.
        Broadcast debug messages to all clients, which will then broadcast them to all web processes.
        Add an API test that turns it on then off and checks that the debug messages make it all the way to the inspector.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::managerOrProxy):
        (WebKit::NetworkSession::setPrivateClickMeasurementDebugMode):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        (WebKit::PCM::ConnectionToMachService::ConnectionToMachService):
        (WebKit::PCM::ConnectionToMachService::send const):
        (WebKit::PCM::ConnectionToMachService::sendWithReply const):
        (WebKit::PCM::Connection::Connection): Deleted.
        (WebKit::PCM::Connection::send const): Deleted.
        (WebKit::PCM::Connection::sendWithReply const): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h:
        (WebKit::PCM::Connection::Connection):
        (WebKit::PCM::Connection::get const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.cpp:
        (WebKit::PCM::DaemonClient::broadcastConsoleMessage):
        (WebKit::PCM::DaemonClient::debugModeEnabled const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::setDebugModeIsEnabled):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::messageTypeSendsReply):
        (WebKit::PCM::handlePCMMessageSetDebugModeIsEnabled):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::ManagerProxy):
        (WebKit::PCM::ManagerProxy::setDebugModeIsEnabled):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementConnectionCocoa.mm: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementDaemonConnectionCocoa.mm.
        (WebKit::PCM::ConnectionToMachService::initializeConnectionIfNeeded const):
        (WebKit::PCM::ConnectionToMachService::sendDebugModeIsEnabledMessageIfNecessary const):
        (WebKit::PCM::ConnectionToMachService::checkForDebugMessageBroadcast const):
        (WebKit::PCM::Connection::send const):
        (WebKit::PCM::Connection::sendWithReply const):
        (WebKit::PCM::ConnectionToMachService::send const):
        (WebKit::PCM::ConnectionToMachService::sendWithReply const):
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonConnectionSet.h: Copied from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h.
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonConnectionSet.mm: Added.
        (WebKit::PCM::DaemonConnectionSet::singleton):
        (WebKit::PCM::DaemonConnectionSet::add):
        (WebKit::PCM::DaemonConnectionSet::remove):
        (WebKit::PCM::DaemonConnectionSet::setConnectedNetworkProcessHasDebugModeEnabled):
        (WebKit::PCM::DaemonConnectionSet::debugModeEnabled const):
        (WebKit::PCM::DaemonConnectionSet::broadcastConsoleMessage):
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::connectionEventHandler):
        (WebKit::startListeningForMachServiceConnections):
        (WebKit::peers): Deleted.
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _setPrivateClickMeasurementDebugModeEnabledForTesting:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-10-04  Chris Dumez  <cdumez@apple.com>

        Add SPI to launch a service service worker in a WKWebView and expose service worker to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=231045
        <rdar://problem/83744069>

        Reviewed by Geoff Garen.

        Add new [WKWebView loadServiceWorker:(NSURL *)] to load a service worker in a web view. When called,
        it causes us to create a page with HTML start registers the service worker with the provided URL.

        The service worker in question will differ slightly from usual service workers in that:
        - The service worker URL doesn't need to be HTTP/HTTPS. In particular, a custom scheme (with corresponding
          custom scheme handler) can be used.
        - The service worker will always run in the WKWebView's associated WebProcess (which can be controlled via
          WKWebViewConfiguration._relatedWebView).
        - The service worker will run on the main thead
        - The service worker is not persistent, meaning that it will not be saved to disk, unlike regular service
          workers.
        - The service worker's global object will be exposed to the injected bundle via a new serviceWorkerGlobalObjectIsAvailableForFrame
          function call on WKWebProcessPlugInLoadDelegate. The provided Frame will be the WKWebView's main frame.
        - The service worker will be unregistered & exit as soon as its WKWebView gets closed / deallocated.

        To make the service worker more usable via the injected bundle API, the following changes were made too:
        - [WKWebProcessPlugInFrame lookUpFrameFromJSContext:] will return the WKWebView's main frame when passed in
          that view's service worker context.
        - A new [WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:(WKWebProcessPlugInScriptWorld *)] SPI was
          added to get the service worker's JS context from the view.

        I added an API test that launches such a service worker, makes sure the injected bundle gets notified on
        the main thread of the service worker global object and that it can script it. The test also makes sure
        the _relatedWebView SPI works to force a service worker into another view's process. It also tests that
        [WKWebProcessPlugInFrame lookUpFrameFromJSContext:] and [WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:(WKWebProcessPlugInScriptWorld *)]
        work as expected. Finally, it makes sure the service worker properly exits when the view gets closed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::startFetch):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        (-[WKWebView _loadServiceWorker:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::loadServiceWorker):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        (WebKit::WebProcessProxy::enableServiceWorkers):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h:
        (API::InjectedBundle::PageLoaderClient::serviceWorkerGlobalObjectIsAvailableForFrame):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame jsContextForServiceWorkerWorld:]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (serviceWorkerGlobalObjectIsAvailableForFrame):
        (setUpPageLoaderClient):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::globalObjectIsAvailableForFrame):
        (WebKit::InjectedBundlePageLoaderClient::serviceWorkerGlobalObjectIsAvailableForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        (WebKit::WebSWContextManagerConnection::establishConnection):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchServiceWorkerGlobalObjectAvailable):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsContextForServiceWorkerWorld):
        (WebKit::WebFrame::frameForContext):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-10-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r283431.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):

2021-10-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r283431.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):

2021-10-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Prefer internal user verification if available over pin entry.
        https://bugs.webkit.org/show_bug.cgi?id=213903
        <rdar://problem/65359269>

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::feedReports):
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::makeCredential):
        (WebKit::CtapAuthenticator::getAssertion):
        (WebKit::fido::toStatus): Deleted.
        (WebKit::fido::isPinError): Deleted.

2021-10-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add SPI to change username of credential
        https://bugs.webkit.org/show_bug.cgi?id=230956
        <rdar://problem/83471755>

        Reviewed by Brent Fulgham.

        Adds a new method for changing the username of a given stored webauthn credential.

        New API test: TestWebKitAPI.WebAuthenticationPanel.UpdateCredentialUsername

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (+[_WKWebAuthenticationPanel setUsernameForLocalCredentialWithID:username:]):

2021-10-04  Youenn Fablet  <youenn@apple.com>

        Send necessary sandbox extensions to WebProcess in case WebRTC codecs run in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=231073

        Reviewed by Eric Carlson.

        Manually tested, make sure to send extensions like if audio/video capture happens in WebProcess.
        This allows validating regressions due or not to GPUProcess.

        * UIProcess/WebPageProxy.cpp:

2021-10-04  Tim Horton  <timothy_horton@apple.com>

        process-entitlements should fail if a subcommand fails
        https://bugs.webkit.org/show_bug.cgi?id=231155

        Reviewed by Anders Carlsson.

        * Scripts/process-entitlements.sh:
        See bug 231154, which fixes a mistake in r283156 which made one of the
        PlistBuddy invocations from process-entitlements fail, but did not
        result in a failing build. PlistBuddy does correctly return a non-zero
        return value in this case, so we should just tell the shell to propagate
        that upwards.

2021-10-04  Alex Christensen  <achristensen@webkit.org>

        Enable PCM debug mode per WebsiteDataStore instead of process-global
        https://bugs.webkit.org/show_bug.cgi?id=231096

        Reviewed by Kate Cheney.

        This will make it so we don't need to restart the network process in order to enable or disable debug mode.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setPrivateClickMeasurementDebugMode):
        (WebKit::NetworkProcess::privateClickMeasurementDebugModeEnabled const): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::setPrivateClickMeasurementDebugMode):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::privateClickMeasurementDebugModeEnabled const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        (WebKit::PCM::ClientImpl::debugModeEnabled const):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setPrivateClickMeasurementDebugMode):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::experimentalFeatureEnabled):
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setPrivateClickMeasurementDebugMode):

2021-10-04  Jean-Yves Avenard  <jya@apple.com>

        Vorbis decoder can't be instantiated - follow up on Bug 230742
        https://bugs.webkit.org/show_bug.cgi?id=231154
        rdar://problem/83825162

        Fix typo in expression.

        Reviewed by Tim Horton.

        * Scripts/process-entitlements.sh: Add missing bool keyword.

2021-10-03  Lauro Moura  <lmoura@igalia.com>

        [GTK] REGRESSION(r283304): All GTK4 layout tests are aborting
        https://bugs.webkit.org/show_bug.cgi?id=231153

        Reviewed by Alexey Proskuryakov.

        Revert back to the previous NOP behavior of bindAccessibilityTree()
        for GTK4, leaving the assert for the debug mode with an informative
        message in the log.

        Covered by existing tests.

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):

2021-10-03  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early October 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=231143

        Unreviewed non-unified build fixes.

        * NetworkProcess/NetworkResourceLoadParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateGPUProcess):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:

2021-10-03  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Pass logging channel parameter to WebProcess from environment variable
        https://bugs.webkit.org/show_bug.cgi?id=230726
        <rdar://problem/83740947>

        Reviewed by Fujii Hironori.

        Added release log configuration environment variables to PlayStation port.

        * UIProcess/playstation/WebProcessPoolPlayStation.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/playstation/WebProcessPlayStation.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-10-03  David Kilzer  <ddkilzer@apple.com>

        WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (transformTrustToData):
        - Change return type to match object.
        (encodeError):
        - Use bridge_cast() to fix assignment.
        (transformDataToTrust):
        - Change return type to match object.
        (decodeError):
        - Use bridge_id_cast() to fix assignment.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        - Use bridge_id_cast() to fix assignment.

        * UIProcess/mac/WebDataListSuggestionsDropdownMac.h:
        - Use correct name of class that actually exists.

2021-10-03  Simon Fraser  <simon.fraser@apple.com>

        WebCore::Length incorrectly uses memcpy() for copy constructors/operator and IPC encoding/decoding
        https://bugs.webkit.org/show_bug.cgi?id=230744

        Reviewed by David Kilzer.
        
        Safe encoding/decoding of Length requires that we encode the enum and fields separately,
        and don't allow calc types (there isn't enough context in the receiving process to resolve
        calc).

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

2021-10-02  David Kilzer  <ddkilzer@apple.com>

        Replace WKProcessPoolWeakObserver (Direct) category with (direct) property attribute
        <https://webkit.org/b/231119>

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (-[WKProcessPoolWeakObserver initWithWeakPtr:]):
        - Merge WKProcessPoolWeakObserver (Direct) category into primary
          interface, and use the (direct) property attribute instead.

2021-10-02  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r275455): ASSERTION FAILED: process->hasOneRef() seen with TestWebKitAPI.WKProcessPool.WarmInitialProcess
        https://bugs.webkit.org/show_bug.cgi?id=231106

        Reviewed by Geoffrey Garen.

        r275455 added a dispatch_async() which captures a Ref<> to a WebProcessProxy. This may cause the WebProcessProxy to
        outlive its WebProcessPool (prewarmed WebProcessProxies to not ref their WebProcessPool), which is not supported.
        We could fix the crash by also capturing a Ref<> to the WebProcessPool in the lambda. However, in this particular
        instance, it does not seem useful to extend the lifetime of the WebProcessProxy / WebProcessPool so I opted to use
        a WeakPtr.

        No new tests, covered by existing API test crashing in debug.

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

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Drop support for macOS < 10.15
        https://bugs.webkit.org/show_bug.cgi?id=231085

        Reviewed by Darin Adler.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (-[WKSecureCodingArchivingDelegate archiver:willEncodeObject:]):
        * Shared/Cocoa/CoreTextHelpers.mm:
        (WebKit::fontWithAttributes):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createNetworkExtensionsSandboxExtensions):
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-01  Remy Demarest  <rdemarest@apple.com>

        Use DYLD_FRAMEWORK_PATH instead of DYLD_VERSIONED_FRAMEWORK_PATH on Safari Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=231058

        Reviewed by David Kilzer.

        Modify the DYLD environment variable that is used when compiling with staged frameworks.
        We want to use DYLD_VERSIONED_FRAMEWORK_PATH to define the search path of the frameworks
        for DYLD because this makes launching Safari and its child processes faster. However,
        on Apple Silicon Big Sur using that environment variable does not work and results in Safari
        loading frameworks from the System folder rather than from the StagedFrameworks/Safari
        folder, this is because dyld on M1 does not look up that variable properly. To make sure
        we actually load the frameworks from the desired location, we need to use DYLD_FRAMEWORK_PATH
        instead, this makes dyld perform more stat() calls than usual to link the frameworks hence
        why we prefer the other variable, but this is the only way to workaround the issue in
        Big Sur on M1. In Monterey and above, this bug will be fixed in dyld so we only need this
        variable before macOS 11.

        Override OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH_YES based on SDK and architecture to use
        DYLD_FRAMEWORK_PATH instead of DYLD_VERSIONED_FRAMEWORK_PATH when building for macOS 11 and arm64.

        * Configurations/BaseTarget.xcconfig:

2021-10-01  Brent Fulgham  <bfulgham@apple.com>

        Remove reference to od-server-name from sandbox profiles 
        https://bugs.webkit.org/show_bug.cgi?id=231098
        <rdar://problem/67766415>

        Reviewed by Per Arne Vollan.

        The code that used to read the od-server-name property was removed in Big Sur,
        so WebKit no longer needs to allow reading that property in its sandbox profiles.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-01  Ian Anderson  <iana@apple.com>

        WebKitLegacy's module map files don't get installed
        https://bugs.webkit.org/show_bug.cgi?id=230736

        Reviewed by David Kilzer.

        Revert r271607 because it doesn't work and isn't the right approach.

        * mac/MigrateHeadersFromWebKitLegacy.make:

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r283274.

        Broke HSTS.CrossOriginRedirect API test

        Reverted changeset:

        "Use isolated NSURLSessions for each first party registrable
        domain"
        https://bugs.webkit.org/show_bug.cgi?id=230750
        https://commits.webkit.org/r283274

2021-10-01  Brent Fulgham  <bfulgham@apple.com>

        Remove special treatment for /private/var/db/dyld on older macOS
        https://bugs.webkit.org/show_bug.cgi?id=231092
        <rdar://problem/66580290>

        Reviewed by Per Arne Vollan.

        The dyld shared cache moved to /System/Library/dyld in Big Sur. We should remove access to the
        old location from Big Sur (and beyond) since it isn't needed anymore.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-01  Kate Cheney  <katherine_cheney@apple.com>

        GPU Process microphone attribution SPI adoption
        https://bugs.webkit.org/show_bug.cgi?id=231034
        <rdar://problem/83732537>

        Reviewed by Youenn Fablet.

        Adopt SPI for App Privacy Report that attributes mic capture to the
        host app.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::audioSessionProxy):
        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::addProxy):
        * GPUProcess/media/RemoteAudioSessionProxyManager.h:
        * Scripts/process-entitlements.sh:

2021-10-01  Brent Fulgham  <bfulgham@apple.com>

        Protect WebFrame during invalidatePolicyListener()
        https://bugs.webkit.org/show_bug.cgi?id=229981
        <rdar://problem/82807413>

        Reviewed by Alex Christensen.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::invalidatePolicyListeners): Protect the WebFrame while
        policy handlers are run.

2021-10-01  Alex Christensen  <achristensen@webkit.org>

        Move ephemeral PCM storage from PCM manager to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=231025

        Reviewed by Kate Cheney.

        With the daemon, we want the network process to hang on to an ephemeral PCM instead of the daemon,
        which is responsible for many network processes.  When attribution happens we insert the PCM then
        attribute it like we did before, but from the NetworkSession instead of from the PCM manager.

        Functionality covered by existing tests.
        This just reduces state in the daemon.  All the other state in the PCM manager is only used for tests.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::storePrivateClickMeasurement):
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
        (WebKit::NetworkSession::clearPrivateClickMeasurement):
        (WebKit::NetworkSession::setPrivateClickMeasurementEphemeralMeasurementForTesting):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
        (WebKit::PrivateClickMeasurementManager::migratePrivateClickMeasurementFromLegacyStorage):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::clear):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::messageTypeSendsReply):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::storeUnattributed):
        (WebKit::PCM::ManagerProxy::setEphemeralMeasurementForTesting): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::insertPrivateClickMeasurement):
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:

2021-10-01  Per Arne Vollan <pvollan@apple.com>

        [macOS] Remove obsolete sandbox rule
        https://bugs.webkit.org/show_bug.cgi?id=231067

        Reviewed by Brent Fulgham.

        Remove sandbox rule that is no longer compiled on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-10-01  Chris Dumez  <cdumez@apple.com>

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths
        https://bugs.webkit.org/show_bug.cgi?id=231081

        Reviewed by Alex Christensen.

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths, as we no longer support Mac OS 14 Mojave.

        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
        (WebKit::Download::platformCancelNetworkLoad):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView resumeDownloadFromResumeData:completionHandler:]):

2021-10-01  Per Arne Vollan  <pvollan@apple.com>

        Make sandbox rules for debug syscalls stricter
        https://bugs.webkit.org/show_bug.cgi?id=230985
        <rdar://49531420>

        Reviewed by Brent Fulgham.

        Make sandbox rules for debug syscalls stricter in the WebContent process on macOS and iOS.

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

2021-10-01  Per Arne Vollan  <pvollan@apple.com>

        Send Launch Services database to GPU process
        https://bugs.webkit.org/show_bug.cgi?id=225151
        <rdar://74749122>

        Reviewed by Brent Fulgham.

        Send Launch Services database to the GPU process after it has finished launching, like we do for WebContent processes.
        The Launch Services database is represented as an XPC object, and needs to be sent over a dedicated XPC channel.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::didFinishLaunching):
        (WebKit::GPUProcessProxy::addSession):
        * UIProcess/Network/NetworkProcessProxyCocoa.mm:
        (WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setWebsiteDataStore):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToProcess const):
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllProcesses):
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess): Deleted.
        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-10-01  Youenn Fablet  <youenn@apple.com>

        Attribute IOSurfaces created by camera and decoders to responsible WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=231075

        Reviewed by Chris Dumez.

        Make sure to mark camera and decoder generated IOSurfaces as owned by the responsible WebProcess.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:

2021-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial implementation of accessible interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230256

        Reviewed by Adrian Perez de Castro.

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformDetach): Unregister the page accessible object.

2021-09-30  Sam Weinig  <weinig@apple.com>

        Add dumping for UIViews with separated layers
        https://bugs.webkit.org/show_bug.cgi?id=231056

        Reviewed by Tim Horton.

        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (allowListedClassToString):
        Fix typo from previous patch where a comma was missed
        and remove unnecessary assertion.

        (dumpUIView):
        Use the new dumpSeparatedLayerProperties when separated layers
        are present.

2021-09-30  Simon Fraser  <simon.fraser@apple.com>

        Simplify some scrolling-related code in WebKit with use of RectEdges<bool>
        https://bugs.webkit.org/show_bug.cgi?id=231037

        Reviewed by Tim Horton.

        Use RectEdges<bool> in code that tracks rubber banding state, and edge pinned state.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<RectEdges<bool>>::encode):
        (IPC::ArgumentCoder<RectEdges<bool>>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsPinnedToLeftSide):
        (WKPageIsPinnedToRightSide):
        (WKPageIsPinnedToTopSide):
        (WKPageIsPinnedToBottomSide):
        (WKPageRubberBandsAtLeft):
        (WKPageRubberBandsAtRight):
        (WKPageRubberBandsAtTop):
        (WKPageRubberBandsAtBottom):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::toWKRectEdge):
        (WebKit::toRectEdges):
        (WebKit::WebViewImpl::pinnedState):
        (WebKit::WebViewImpl::rubberBandingEnabled):
        (WebKit::WebViewImpl::setRubberBandingEnabled):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::setRubberBandsAtLeft):
        (WebKit::WebPageProxy::setRubberBandsAtRight):
        (WebKit::WebPageProxy::setRubberBandsAtTop):
        (WebKit::WebPageProxy::setRubberBandsAtBottom):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        (WebKit::WebPageProxy::rubberBandsAtLeft const): Deleted.
        (WebKit::WebPageProxy::rubberBandsAtRight const): Deleted.
        (WebKit::WebPageProxy::rubberBandsAtTop const): Deleted.
        (WebKit::WebPageProxy::rubberBandsAtBottom const): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updateMainFrameScrollOffsetPinning):
        * WebProcess/WebPage/WebPage.h:

2021-09-30  Christopher Reid  <chris.reid@sony.com>

        Fix !ENABLE(WIRELESS_PLAYBACK_TARGET) build after r283319
        https://bugs.webkit.org/show_bug.cgi?id=231036

        Unreviewed build fix.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp: MediaPlaybackTargetContext.h is already included with WIRELESS_PLAYBACK_TARGET
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

2021-09-30  Per Arne  <pvollan@apple.com>

        [GPUP] Add syscall filter telemetry
        https://bugs.webkit.org/show_bug.cgi?id=230960
        <rdar://problem/83674166>

        Reviewed by Brent Fulgham.

        Add syscall filter telemetry in the GPU process' sandbox on iOS and macOS.
        Syscall observed being in use are added without telemetry.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:

2021-09-30  Per Arne  <pvollan@apple.com>

        Add syscall filter telemetry for the Networking process
        https://bugs.webkit.org/show_bug.cgi?id=230961
        <rdar://problem/83674634>

        Reviewed by Brent Fulgham.

        Add syscall filter telemetry for the Networking process on iOS and macOS.
        Syscalls that are known to be used are added without telemetry.

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

2021-09-30  Per Arne  <pvollan@apple.com>

        [macOS] Reduce sandbox telemetry
        https://bugs.webkit.org/show_bug.cgi?id=231026
        <rdar://83694937>

        Reviewed by Brent Fulgham.

        Remove sandbox telemetry for resources that we already see are in use.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-09-30  Eddy Wong  <eddy_wong@apple.com>

        Adopt presentationSceneIdentifierForPaymentAuthorizationController delegate call from PassKit
        https://bugs.webkit.org/show_bug.cgi?id=230874

        Reviewed by Devin Rousso.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm:         
        (WebKit::NetworkConnectionToWebProcess::getWindowSceneIdentifierForPaymentPresentation): Implements getWindowSceneIdentifierForPaymentPresentation() by asking parent process (UIProcess) for scene ID via new XPC message.
        * Platform/cocoa/PaymentAuthorizationPresenter.h:
        (WebKit::PaymentAuthorizationPresenter::sceneIdentifier const): Holds temporarily the scene ID we'd like to use when presenting the payment sheet, to be read by WKPaymentAuthorizationControllerDelegate.
        * Platform/cocoa/PaymentAuthorizationViewController.h: Declares presentInScene() which is just for conformance to PaymentAuthorizationPresenter
        * Platform/cocoa/PaymentAuthorizationViewController.mm:
        (WebKit::PaymentAuthorizationViewController::presentInScene): Provides a dummy implementation for presentInScene() for conformance.
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h: Surfaces _presenter for PaymentAuthorizationPresenter's use.
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm: Ditto.
        * Platform/ios/PaymentAuthorizationController.h:
        * Platform/ios/PaymentAuthorizationController.mm:
        (-[WKPaymentAuthorizationControllerDelegate presentationSceneIdentifierForPaymentAuthorizationController:]): Implements the new PassKit delegate call returning the scene ID for the UIProcess.
        (WebKit::PaymentAuthorizationController::dismiss): House keeping.
        (WebKit::PaymentAuthorizationController::presentInScene): Stores the scene ID from the caller for WKPaymentAuthorizationControllerDelegate to read from.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp: 
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI): Relays webPageProxyID for use by UIProcess ultimately to look up the correct WebPageProxy.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h: Ditto.
        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in: Ditto.
        * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Presents payment sheet with scene ID if applicable.
        * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Signature change.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getWindowSceneIdentifierForPaymentPresentation): Looks up the correct WebPageProxy and retrieve the scene ID for the caller (NetworkProcess).
        * UIProcess/Network/NetworkProcessProxy.h: Ditto.
        * UIProcess/Network/NetworkProcessProxy.messages.in: Ditto.
        * UIProcess/PageClient.h: Adds ability to retrieve scene ID.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::sceneID): Ditto.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::getWindowSceneIdentifierForPaymentPresentation): Dummy implementation for conformance to WebPageProxy. WebProcess does not talk to UIProcess directly for this function.
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::showPaymentUI): Passes the WebPageProxyIdentifier along.


2021-09-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed Catalyst build fix; forward-declare in RemoteMediaPlayerProxy.h and include the correct file in RemoteMediaPlayerProxy.cpp.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

2021-09-30  John Wilander  <wilander@apple.com>

        PCM: Take app bundle ID into consideration when matching triggering events with pending clicks
        https://bugs.webkit.org/show_bug.cgi?id=230778
        <rdar://problem/83516528>

        Reviewed by Alex Christensen.

        https://commits.webkit.org/r282884 added app bundle IDs to unattributed
        and attributed clicks in PCM. This patch makes sure we take those IDs
        into consideration in PCM::Database::attributePrivateClickMeasurement().

        A lot of the WebKit part is:
        - Piping through app bundle IDs from the network session to the PCM
            database where the ID will be matched against stored app bundle IDs.
        - Piping through test configuration for app bundle ID.

        The real change is in PCM::Database which is explained below.

        Test: http/tests/privateClickMeasurement/multiple-app-bundle-ids.html

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setPrivateClickMeasurementAppBundleIDForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
        (WebKit::NetworkSession::setPrivateClickMeasurementAppBundleIDForTesting):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::findPrivateClickMeasurement):
            Now takes an app bundle ID supplied from the network session and
            includes it in the database query to find matching entries. If and
            attribution was saved with app bundle ID XYZ, it should only be
            be converted in an application with app bundle ID XYZ.
        (WebKit::PCM::Database::attributePrivateClickMeasurement):
            This function calls PCM::Database::findPrivateClickMeasurement()
            which needs the app bundle ID so that ID is forwarded through.
        (WebKit::PCM::Database::removeUnattributed):
            Also needs to take the app bundle ID into consideration.
        (WebKit::PCM::Database::clearSentAttribution):
            Also needs to take the app bundle ID into consideration.
        (WebKit::PCM::Database::markReportAsSentToDestination):
            Also needs to take the app bundle ID into consideration.
        (WebKit::PCM::Database::markReportAsSentToSource):
            Also needs to take the app bundle ID into consideration.
        (WebKit::PCM::Database::earliestTimesToSend):
            Also needs to take the app bundle ID into consideration.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
        (WebKit::PrivateClickMeasurementManager::setPrivateClickMeasurementAppBundleIDForTesting):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::clear):
            Clears the test setting for app bundle ID.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::messageTypeSendsReply):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::handleAttribution):
        (WebKit::PCM::ManagerProxy::setPrivateClickMeasurementAppBundleIDForTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPCMFraudPreventionValuesForTesting):
        (WKPageSetPrivateClickMeasurementAppBundleIDForTesting):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _setPrivateClickMeasurementAppBundleIDForTesting:completionHandler:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setPrivateClickMeasurementAppBundleIDForTesting):
        * UIProcess/WebPageProxy.h:

2021-09-30  Alex Christensen  <achristensen@webkit.org>

        Clean up PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=230978

        Reviewed by Kate Cheney.

        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:]):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setUIEventAttribution:]):
        (-[WKWebView _uiEventAttribution]):
        (-[WKWebView _setEphemeralUIEventAttribution:forApplicationWithBundleID:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:

2021-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Connect UI process a11y tree with the web process when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230255

        Reviewed by Adrian Perez de Castro.

        Change BindAccessibilityTree IPC message API to have an async reply. When using ATSPI the UI process replies to
        the message including the object path of the AtkSocket, to be used by the web process root object as its parent
        property (building the reference with the UI process unique name we get from GetState message).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const): Encode accessibilityBusAddress.
        (WebKit::WebProcessCreationParameters::decode): Decode accessibilityBusAddress.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bindA11y): Set the accessibilityBusAddress to the shared PlatformDisplay so that it doesn't need to be
        get again.
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::bindAccessibilityTree):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::CompletionHandler<void):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Set the accessibilityBusAddress parameter.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree): Call atk_object_ref_state_set() right after atk_socket_embed() to
        make sure that's the first GetState message received by the web process root object. Then build the AtkSocket
        path and send the async reply.
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::accessibilityRootObject const):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize): Create the root object and send BindAccessibilityTree to the UI process,
        setting the root object parent path using the socket path received from the UI process.
        * WebProcess/WebPage/wpe/WebPageWPE.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::accessibilityAtspi const):
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Create the AccessibilityAtspi instance for the given address.

2021-09-29  Ada Chan  <ada.chan@apple.com>

        [WebXR] Hold a foreground assertion for the duration of the immersive session
        https://bugs.webkit.org/show_bug.cgi?id=230991

        Reviewed by Chris Dumez.

        * UIProcess/XR/PlatformXRSystem.cpp:
        (WebKit::PlatformXRSystem::initializeTrackingAndRendering):

2021-09-29  Chris Dumez  <cdumez@apple.com>

        Add support for running service workers on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=230649

        Reviewed by Alex Christensen.

        Add support for running service workers on the main thread (off by default).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::swServerForSession):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::shouldRunServiceWorkersOnMainThread const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration shouldRunServiceWorkersOnMainThread]):
        (-[_WKWebsiteDataStoreConfiguration setShouldRunServiceWorkersOnMainThread:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::shouldRunServiceWorkersOnMainThread const):
        (WebKit::WebsiteDataStoreConfiguration::setShouldRunServiceWorkersOnMainThread):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2021-09-29  Alex Christensen  <achristensen@webkit.org>

        Add weakThis check in addition to null check added in r282881
        https://bugs.webkit.org/show_bug.cgi?id=231000
        <rdar://83605614>

        Reviewed by Brady Eidson.

        r282881 made NetworkLoad::start call didCompleteWithError, which can cause the
        NetworkResourceLoader to be deleted.  It added a null check on m_networkLoad which
        sometimes reads freed memory.  This certainly isn't great, but luckily we have a way
        to check if this object has been deleted.  Let's do that.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):

2021-09-29  Per Arne Vollan <pvollan@apple.com>

        [macOS] Allow audio service in the WebContent process on older versions
        https://bugs.webkit.org/show_bug.cgi?id=230974
        <rdar://82445437>

        Reviewed by Brent Fulgham.

        Older versions of macOS still need access to "com.apple.audio.AudioComponentRegistrar" in the WebContent process.

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

2021-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] REGRESSION(r280726): registry keys enabling GPU process mode don't work
        https://bugs.webkit.org/show_bug.cgi?id=230871

        Reviewed by Don Olmstead.

        r270175 (Bug 219294) added registry keys to enable GPU process
        mode for WinCairo port. But after r280726 (Bug 228803) changed the
        function signature, they didn't work.

        * Shared/WebPreferencesDefaultValues.cpp:
        * Shared/win/WebPreferencesDefaultValuesWin.cpp:
        (WebKit::isFeatureFlagEnabled):

2021-09-29  Chris Dumez  <cdumez@apple.com>

        [ iOS Debug ] http/tests/xmlhttprequest/access-control-preflight-credential-sync.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=228305
        <rdar://problem/81136891>

        Reviewed by Alex Christensen.

        When a NetworkResourceLoader for a synchronous XHR gets aborted (e.g. because the connection to
        the WebProcess was severed), NetworkResourceLoader::abort() would fail to call
        sendReplyToSynchronousRequest() (sendReplyToSynchronousRequest was only called in didFailLoading() and
        didFinishLoading()). As a result, we would hit the following assertion in the NetworkResourceLoader
        destructor later on: ASSERT(!isSynchronous() || !m_synchronousLoadData->delayedReply)

        No new tests, covered by existing test that I am unskipping.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::abort):

2021-09-29  Sihui Liu  <sihui_liu@apple.com>

        Add a default return value in convertToExceptionCode
        https://bugs.webkit.org/show_bug.cgi?id=230989

        Reviewed by Chris Dumez.

        To fix non-Cocoa build.

        * NetworkProcess/storage/FileSystemStorageError.h:
        (WebKit::convertToExceptionCode):

2021-09-29  BJ Burg  <bburg@apple.com>

        [Cocoa] add _WKInspectorExtension SPI to evaluate script on an extension tab
        https://bugs.webkit.org/show_bug.cgi?id=230646
        <rdar://problem/83420328>

        Reviewed by Devin Rousso.

        Add new testing API for evaluating script expressions in the context of a
        tab created by _WKInspectorExtension. For the most part, this is implemented
        in the same way as the -evaluateScript: method, but the script is evaluated
        within the Web Inspector frontend itself rather than in the inspected page.

        To avoid CSP issues, the actual evaluation is performed on subframes using a
        new InspectorFrontendHost method which takes an <iframe> and script source.

        Along the way, tweak Web Inspector's CSP policy to allow loading images from
        custom URL schemes as specified using _WKInspectorConfiguration. This is so
        that tab icons from the test-resource: scheme can be loaded in the main frame
        of Web Inspector's WKWebView under testing situations.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        Add new files.

        * UIProcess/API/APIInspectorExtension.h:
        * UIProcess/API/APIInspectorExtension.cpp:
        (API::InspectorExtension::evaluateScriptInExtensionTab):
        Based on evaluateScript(). Call through to the shared extension controller.

        * UIProcess/API/Cocoa/_WKInspectorExtensionPrivateForTesting.h: Added.
        * UIProcess/API/Cocoa/_WKInspectorExtensionTesting.mm: Added.
        (-[_WKInspectorExtension _evaluateScript:inExtensionTabWithIdentifier:completionHandler:]):
        Added. Call through to the shared extension controller.

        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::evaluateScriptInExtensionTab):
        Based on evaluateScript(). Send IPC to the Inspector WebProcess.

        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::evaluateScriptInExtensionTab):
        Based on evaluateScriptForExtension. Call into the frontend API
        which will perform the actual evaluation on the <iframe> contentWindow.

        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm:
        (-[WKInspectorResourceURLSchemeHandler webView:startURLSchemeTask:]):
        Specify the list of custom protocols as allowable sources for 'img-src'.
        The 'img-src' directive also includes 'file: blob: resource:' as allowable
        sources, since this was the previous CSP policy defined in Main.html.

        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm:
        Fix UnifiedSources fallout by including a missing header.

2021-09-29  Chris Dumez  <cdumez@apple.com>

        Use isolated NSURLSessions for each first party registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=230750
        <rdar://83159358>

        Reviewed by Alex Christensen.

        Previously would use up to 10 isolated NSURLSessions only for domains marked as prevalent
        by ITP *and* that the user interacts with as first party website. We now use different
        isolated NSURLSession for each top-level registrable domain, not matter their ITP status.
        This significantly improves privacy.

        To avoid having too many NSURLSession, we clear the ones that haven't been used in the
        last 10 minutes, every time we add a new one.

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        (WebKit::SessionSet::isolatedSession):

2021-09-29  Sihui Liu  <sihui_liu@apple.com>

        Replace FileSystemHandleImpl with FileSystemStorageConnection
        https://bugs.webkit.org/show_bug.cgi?id=230861
        <rdar://problem/83606465>

        Reviewed by Youenn Fablet.

        Replace FileSystemStorageHandleProxy with WebFileSystemStorageConnection.

        * NetworkProcess/storage/FileSystemStorageHandle.cpp:
        (WebKit::FileSystemStorageHandle::FileSystemStorageHandle):
        (WebKit::FileSystemStorageHandle::isSameEntry):
        (WebKit::FileSystemStorageHandle::requestCreateHandle):
        (WebKit::FileSystemStorageHandle::getFileHandle):
        (WebKit::FileSystemStorageHandle::getDirectoryHandle):
        (WebKit::FileSystemStorageHandle::resolve):
        * NetworkProcess/storage/FileSystemStorageHandle.h:
        (WebKit::FileSystemStorageHandle::identifier const):
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.cpp:
        (WebKit::FileSystemStorageHandleRegistry::registerHandle):
        (WebKit::FileSystemStorageHandleRegistry::unregisterHandle):
        (WebKit::FileSystemStorageHandleRegistry::getHandle):
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.h:
        * NetworkProcess/storage/FileSystemStorageManager.cpp:
        (WebKit::FileSystemStorageManager::createHandle):
        (WebKit::FileSystemStorageManager::getPath):
        (WebKit::FileSystemStorageManager::getDirectory):
        * NetworkProcess/storage/FileSystemStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::fileSystemGetDirectory):
        (WebKit::NetworkStorageManager::isSameEntry):
        (WebKit::NetworkStorageManager::getFileHandle):
        (WebKit::NetworkStorageManager::getDirectoryHandle):
        (WebKit::NetworkStorageManager::removeEntry):
        (WebKit::NetworkStorageManager::resolve):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * NetworkProcess/storage/OriginStorageManager.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.cpp: Renamed from Source/WebKit/WebProcess/WebCoreSupport/FileSystemStorageHandleProxy.cpp.
        (WebKit::WebFileSystemStorageConnection::create):
        (WebKit::WebFileSystemStorageConnection::WebFileSystemStorageConnection):
        (WebKit::WebFileSystemStorageConnection::connectionClosed):
        (WebKit::WebFileSystemStorageConnection::isSameEntry):
        (WebKit::WebFileSystemStorageConnection::getFileHandle):
        (WebKit::WebFileSystemStorageConnection::getDirectoryHandle):
        (WebKit::WebFileSystemStorageConnection::removeEntry):
        (WebKit::WebFileSystemStorageConnection::resolve):
        * WebProcess/WebCoreSupport/WebFileSystemStorageConnection.h: Renamed from Source/WebKit/WebProcess/WebCoreSupport/FileSystemStorageHandleProxy.h.
        * WebProcess/WebCoreSupport/WebStorageConnection.cpp:
        (WebKit::WebStorageConnection::persist):
        (WebKit::WebStorageConnection::fileSystemGetDirectory):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::fileSystemStorageConnection):
        * WebProcess/WebProcess.h:

2021-09-29  Per Arne  <pvollan@apple.com>

        Add telemetry to the Networking process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=230919
        <rdar://problem/83641392>

        Reviewed by Brent Fulgham.

        Add telemetry to the Networking process sandbox on iOS and macOS.

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

2021-09-29  Jer Noble  <jer.noble@apple.com>

        Build-time optimization: forward declare more things in MediaPlayer.h and HTMLMediaElement.h
        https://bugs.webkit.org/show_bug.cgi?id=230853

        Reviewed by Eric Carlson.

        Use new WeakPtr based client setters on TrackPrivates.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
        (WebKit::RemoteAudioTrackProxy::~RemoteAudioTrackProxy):
        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::RemoteTextTrackProxy):
        (WebKit::RemoteTextTrackProxy::~RemoteTextTrackProxy):
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
        (WebKit::RemoteVideoTrackProxy::~RemoteVideoTrackProxy):

2021-09-29  Alex Christensen  <achristensen@webkit.org>

        Reduce allocations in DatabaseUtilities::sortedTables
        https://bugs.webkit.org/show_bug.cgi?id=230933

        Reviewed by Chris Dumez.

        No change in behavior except no more memory allocations.  What a wonderful thing.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::sortedTables):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::migrateDataToNewTablesIfNecessary):
        * NetworkProcess/DatabaseUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::sortedTables):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:

2021-09-29  Devin Rousso  <drousso@apple.com>

        Add support for sending Expected<void, E> in IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=230907

        Reviewed by Chris Dumez.

        * Platform/IPC/ArgumentCoders.h:

        * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:
        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::registerExtension):
        (WebKit::WebInspectorUIExtensionController::unregisterExtension):
        (WebKit::WebInspectorUIExtensionController::showExtensionTab):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::showExtensionTab):
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector unregisterExtension:completionHandler:]):
        (-[_WKInspector showExtensionTabWithIdentifier:completionHandler:]):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController unregisterExtension:completionHandler:]):
        (-[_WKRemoteWebInspectorViewController showExtensionTabWithIdentifier:completionHandler:]):
        Replace `Expected<bool, ...>` with `Expected<void, ...>` now that it can be sent over IPC.
        No change in functionality as the `bool` was never actually used (it was a hardcoded `true`).

2021-09-28  Simon Fraser  <simon.fraser@apple.com>

        Crash in WebKit::DisplayLink::displayLinkCallback()
        https://bugs.webkit.org/show_bug.cgi?id=230917
        <rdar://82528370>

        Reviewed by Tim Horton.

        We have evidence of a divide-by-zero crash in DisplayLink::notifyObserversDisplayWasRefreshed()
        where m_currentUpdate.updatesPerSecond is zero. The only way I can see this happening
        is if DisplayLink::DisplayLink() returns early, which should log. Protect against
        this by initializing m_displayNominalFramesPerSecond to 60, and do another check,
        with a log, in DisplayLink::addObserver() before we use m_displayNominalFramesPerSecond
        for the first time.

        Convert the logging to RELEASE_LOG_FAULT reports.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::addObserver):
        * UIProcess/mac/DisplayLink.h:

2021-09-28  Brent Fulgham  <bfulgham@apple.com>

        Remove unused "com.apple.security.exception.file*" rules from WebKit sandboxes 
        https://bugs.webkit.org/show_bug.cgi?id=230918
        <rdar://problem/66585844>

        Reviewed by Per Arne Vollan.

        The Sandbox implementation provides a mechanism where apps can extend the default app
        sandbox with entitled extension properties attached to their binary at signing time.
        WebKit does not need or use this feature. However, the rules were imported to our custom
        sandbox when we stopped using the system one. We should remove these rules since we don't
        need them, and they add to the size and complexity of the sandbox rule set.

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

2021-09-28  BJ Burg  <bburg@apple.com>

        [Cocoa] Add SPI to select a tab created by _WKInspectorExtension
        https://bugs.webkit.org/show_bug.cgi?id=230580
        <rdar://problem/83372851>

        Reviewed by Devin Rousso.

        Add a new method for selecting an extension tab in WebInspectorUI
        that was previously created by using
        -[_WKInspectorExtension createNewTab:tabIconURL:sourceURL:completionHandler].

        This is a straightforward plumbing exercise. The API test uses the new method
        to test the existing _WKInspectorExtensionDelegate callback methods for
        didShowTab and didHideTab.

        New API test: WKInspectorExtensionDelegate.ShowAndHideTabCallbacks.

        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector showExtensionTabWithIdentifier:completionHandler:]):
        * UIProcess/API/Cocoa/_WKInspectorExtensionHost.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController showExtensionTabWithIdentifier:completionHandler:]):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::showExtensionTab):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
        (WebKit::WebInspectorUIExtensionController::showExtensionTab):
        * WebProcess/Inspector/WebInspectorUIExtensionController.h:
        * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:

2021-09-28  Brent Fulgham  <bfulgham@apple.com>

        Remove redundant sandbox exception rules for registering mach extensions
        https://bugs.webkit.org/show_bug.cgi?id=230909
        <rdar://problem/66583587>

        Reviewed by Per Arne Vollan.

        The Sandbox implementation offers a mechanism for apps to extend their sandbox at compile
        time. WebKit does not use those extensions in its sandbox design, so we should remove those
        unused rules. They are left-over from importing the global App Sandbox rules long ago, and
        are not needed by WebKit.

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

2021-09-28  Kate Cheney  <katherine_cheney@apple.com>

        PCM: different bundleID entries will override each other
        https://bugs.webkit.org/show_bug.cgi?id=230839

        Reviewed by Alex Christensen.

        We recently added a bundleID column to PCM tables. We want to make
        sure entries with different bundleIDs do not override each other,
        so we should make it a part of the unique constraint on both PCM
        tables that contain it. This requires creating new tables and
        migrating existing data to them. Luckily this code already exists
        in the ITP database, and we can just move it to the shared
        DatabaseUtilities class.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::expectedTableAndIndexQueries):
        (WebKit::stripIndexQueryToMatchStoredValue): Deleted.
        (WebKit::expectedTableAndIndexQueries): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries): Deleted.
        (WebKit::insertDistinctValuesInTableStatement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::stripIndexQueryToMatchStoredValue):
        (WebKit::DatabaseUtilities::currentTableAndIndexQueries):
        (WebKit::insertDistinctValuesInTableStatement):
        (WebKit::DatabaseUtilities::migrateDataToNewTablesIfNecessary):
        * NetworkProcess/DatabaseUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::Database):
        (WebKit::PCM::Database::expectedTableAndIndexQueries):
        (WebKit::PCM::Database::createUniqueIndices):
        (WebKit::PCM::Database::needsUpdatedSchema):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:

2021-09-28  Brent Fulgham  <bfulgham@apple.com>

        Explicitly deny 'system-privilege' in the sandbox profile as a hardening measure 
        https://bugs.webkit.org/show_bug.cgi?id=230782
        <rdar://problem/66582813>

        Reviewed by Per Arne Vollan.

        Although we do not need 'system-privilege', the default sandbox state includes it as a convenience
        for backwards-compatibility.

        Update our sandboxes to tell the kernel we don't need the support, except for one case in the
        Networking process.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-09-28  Sihui Liu  <sihui_liu@apple.com>

        Make StorageManager available in Worker
        https://bugs.webkit.org/show_bug.cgi?id=230675
        <rdar://problem/83448115>

        Reviewed by Youenn Fablet.

        * WebProcess/WebCoreSupport/WebStorageConnection.cpp:
        (WebKit::WebStorageConnection::getPersisted):
        * WebProcess/WebCoreSupport/WebStorageConnection.h:

2021-09-28  Per Arne Vollan  <pvollan@apple.com>

        Enable CFPrefs direct mode in all WebKit processes
        https://bugs.webkit.org/show_bug.cgi?id=230771
        <rdar://problem/83510055>

        Reviewed by Brent Fulgham.

        We currently enable CFPrefs direct mode in the WebContent and GPU Process, and we should enable it in all WebKit processes.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::notifyPreferencesChanged):
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceMain):
        (WebKit::shouldEnableCFPrefsDirectMode): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::notifyPreferencesChanged):
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::singletonIfCreated):
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.h:
        * WebAuthnProcess/WebAuthnProcess.cpp:
        (WebKit::WebAuthnProcess::notifyPreferencesChanged):
        * WebAuthnProcess/WebAuthnProcess.h:
        * WebAuthnProcess/WebAuthnProcess.messages.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:

2021-09-28  Per Arne  <pvollan@apple.com>

        [GPUP] Add sandbox telemetry
        https://bugs.webkit.org/show_bug.cgi?id=230859
        <rdar://problem/83591291>

        Reviewed by Brent Fulgham.

        Add more sandbox telemetry to the GPU process' sandbox on iOS and macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:

2021-09-28  Per Arne  <pvollan@apple.com>

        [macOS] Allow access to mach service for root in the Networking process
        https://bugs.webkit.org/show_bug.cgi?id=230843
        <rdar://problem/83576091>

        Reviewed by Alexey Proskuryakov.

        Allow access to the mach service com.apple.trustd for root in the Networking process on macOS.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-09-28  Youenn Fablet  <youenn@apple.com>

        Validate DeviceIdHashSaltStorage persistent data
        https://bugs.webkit.org/show_bug.cgi?id=230852
        <rdar://problem/83615408>

        Reviewed by Eric Carlson.

        Add nullptr check to decoded data.
        Covered by API test.

        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk):

2021-09-28  Chris Dumez  <cdumez@apple.com>

        Move Cross-Origin-Opener-Policy handling to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=230812
        <rdar://83504842>

        Reviewed by Youenn Fablet.

        Implement COOP handling in the NetworkProcess, inside the NetworkResourceLoader class.
        This was logic that was currently implemented at DocumentLoader-level, in the WebProcess.

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::doCrossOriginOpenerHandlingOfResponse):
        (WebKit::toBrowsingContextGroupSwitchDecision):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::sendDidReceiveResponsePotentiallyInNewBrowsingContextGroup):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::triggerBrowsingContextGroupSwitchForNavigation):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::triggerBrowsingContextGroupSwitchForNavigation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViolationReportWhenNavigatingToCOOPResponse):
        (WebKit::WebPage::sendViolationReportWhenNavigatingAwayFromCOOPResponse):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * PlatformMac.cmake:

2021-09-28  Youenn Fablet  <youenn@apple.com>

        applyConstraints throws OverconstrainedError if specify exact for deviceId
        https://bugs.webkit.org/show_bug.cgi?id=230819
        <rdar://problem/83577361>

        Reviewed by Eric Carlson.

        We were not setting properly the persistent device ID of remote sources.
        Set values according provided device.

        Test: fast/mediastream/applyConstraints-deviceId.html

        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        (WebKit::RemoteRealtimeAudioSource::RemoteRealtimeAudioSource):
        * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
        (WebKit::RemoteRealtimeVideoSource::RemoteRealtimeVideoSource):

2021-09-27  Cameron McCormack  <heycam@apple.com>

        Avoid building log messages when IPCMessages log stream is off
        https://bugs.webkit.org/show_bug.cgi?id=230878
        <rdar://problem/83605670>

        Reviewed by Alex Christensen.

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

2021-09-27  Jean-Yves Avenard  <jya@apple.com>

        Vorbis decoder can't be instantiated - Remove workaround added in bug 228139
        https://bugs.webkit.org/show_bug.cgi?id=230742
        rdar://83484414

        Reviewed by Eric Carlson.

        This is already covered by test; however this will fail on Monterey without the updated
        CoreMedia framework.

        * Scripts/process-entitlements.sh: Add new required entitlement.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox): Only have bug workaround on BigSur and earlier.

2021-09-27  Per Arne  <pvollan@apple.com>

        [iOS][GPUP] Remove access to unused mach services in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=230832
        <rdar://problem/83573640>

        Reviewed by Brent Fulgham.

        Remove access to mach services on iOS in the GPU process that are unused, according to telemetry.

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

2021-09-27  BJ Burg  <bburg@apple.com>

        [Cocoa] backport showConsole() and showResources() for RemoteWebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=230573
        <rdar://problem/83365814>

        Reviewed by Devin Rousso.

        These methods already exist for _WKInspector. A test will be added in 
        future patch that tests _WKInspectorExtensionDelegate shown/hidden callback methods.

        * UIProcess/API/Cocoa/_WKInspectorIBActions.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKInspector.h.
        Added. API and SPI that are shared between local and remote Web Inspector
        should go in this class. Since these methods are used to implement IBActions for a
        detached Web Inspector window, the protocol is named _WKInspectorIBActions.
        Hoist showResources() and showConsole() to this shared protocol.

        * UIProcess/API/Cocoa/_WKInspectorExtensionHost.h:
        * UIProcess/API/Cocoa/_WKInspector.h: Remove methods that are
        part of the _WKInspectorIBActions protocol.

        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController showConsole]):
        (-[_WKRemoteWebInspectorViewController showResources]):
        Added. Call into RemoteWebInspectorUIProxy.

        * UIProcess/Inspector/RemoteWebInspectorUIProxy.h:
        * UIProcess/Inspector/RemoteWebInspectorUIProxy.cpp:
        (WebKit::RemoteWebInspectorUIProxy::showConsole):
        (WebKit::RemoteWebInspectorUIProxy::showResources):
        Added. Send an IPC message to the Inspector web process.

        * WebProcess/Inspector/RemoteWebInspectorUI.h:
        * WebProcess/Inspector/RemoteWebInspectorUI.messages.in:
        Add new messages.

        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::showConsole):
        (WebKit::RemoteWebInspectorUI::showResources):
        Added. Backport the implementation from WebInspectorUI.

2021-09-27  Youenn Fablet  <youenn@apple.com>

        iPadOS 15 / iOS 15 unable to decode VP9 stream
        https://bugs.webkit.org/show_bug.cgi?id=230604
        <rdar://problem/83391595>

        Reviewed by Eric Carlson.

        Update code to retrieve some parameters when synchronously creating the GPU process connection.
        The sole parameter is currently to know the HW VP9 decoder availability.
        If HW VP9 decoder is not supported by GPUProcess code, we fallback to SW libvpx.

        Manually tested.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * Shared/GPUProcessConnectionInitializationParameters.h: Added.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        * WebProcess/GPU/GPUProcessConnection.h:
        (WebKit::GPUProcessConnection::create):
        (WebKit::GPUProcessConnection::hasVP9HardwareDecoder const):
        * WebProcess/GPU/GPUProcessConnectionInfo.h:
        (WebKit::GPUProcessConnectionInfo::encode const):
        (WebKit::GPUProcessConnectionInfo::decode):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::setCallbacks):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureGPUProcessConnection):

2021-09-27  Youenn Fablet  <youenn@apple.com>

        Make sure to reset presenting application pid in case of mediaserverd crash
        https://bugs.webkit.org/show_bug.cgi?id=230822
        <rdar://83474184>

        Reviewed by Eric Carlson.

        Add API to crash GPUProcess from WebKitTestRunner.

        Make sure to forward to MediaPlayer the fact that the layer failed.
        This was handled for GPUProcess crash but not for other cases like mediaserverd crashes.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextTerminateGPUProcess):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::terminateForTesting):
        * UIProcess/GPU/GPUProcessProxy.h:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::setDidFail):

2021-09-27  Youenn Fablet  <youenn@apple.com>

        Rename RemoteCaptureSampleManager::RemoteAudio thread appropriately
        https://bugs.webkit.org/show_bug.cgi?id=230745

        Reviewed by Eric Carlson.

        No change of behavior.

        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::startThread):

2021-09-27  Tim Nguyen  <ntim@apple.com>

        Replace Node::isInert() with RenderStyle::effectiveInert()
        https://bugs.webkit.org/show_bug.cgi?id=230686

        Reviewed by Antti Koivisto.

        This replaces Node::isInert() in favor of RenderStyle::effectiveInert() which is more accurate. We can't use it in
        Element::isFocusable(), since there's a bug with invalidation when accessing the cached computedStyle, hence
        the Node::deprecatedIsInert() method.

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

2021-09-25  Ben Nham  <nham@apple.com>

        Pending preconnect key should include User-Agent
        https://bugs.webkit.org/show_bug.cgi?id=230565

        Reviewed by Chris Dumez.

        When using an HTTPS proxy, the HTTP connection cache key used for connection coalescing in
        CFNetwork includes the User-Agent (<rdar://problem/59434166>). This means we should also
        include it in the preconnect cache key. Otherwise, we might delay the main resource load on
        preconnect unnecessarily in cases where the User-Agent mismatches and the preconnect gets
        thrown away. This can happen if (for instance) a page is force-loaded into desktop or mobile
        mode on iOS, which causes a UA change after the call to decidePolicyForNavigationAction.

        * NetworkProcess/NetworkLoadScheduler.cpp:
        (WebKit::mainResourceLoadKey):
        (WebKit::NetworkLoadScheduler::scheduleMainResourceLoad):
        (WebKit::NetworkLoadScheduler::unscheduleMainResourceLoad):
        (WebKit::NetworkLoadScheduler::startedPreconnectForMainResource):
        (WebKit::NetworkLoadScheduler::finishedPreconnectForMainResource):
        * NetworkProcess/NetworkLoadScheduler.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):

2021-09-24  Lauro Moura  <lmoura@igalia.com>

        Non-unified partial build fixes late September edition
        https://bugs.webkit.org/show_bug.cgi?id=230763

        Unreviewed non-unified build fixes.

        * NetworkProcess/NetworkProcess.cpp: Add missing header.
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.cpp: Ditto.
        * NetworkProcess/storage/FileSystemStorageManager.cpp: Ditto.
        * NetworkProcess/storage/OriginStorageManager.h: Ditto.
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp: Add missing header.
        (WebKit::RTCDataChannelRemoteManager::detectError): WebCore namespace.
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didDetectError): Ditto.
        * WebProcess/WebCoreSupport/WebStorageConnection.cpp: Add missing
        header.

2021-09-24  Per Arne Vollan  <pvollan@apple.com>

        Clean up preference rules in sandboxes
        https://bugs.webkit.org/show_bug.cgi?id=230578
        <rdar://problem/83371815>

        Reviewed by Brent Fulgham.

        We are currently duplicating many preference domains in the sandboxes after blocking cfprefsd by using CFPrefs direct mode.
        This is addressed by adopting a pre-existing macro that adds the required file access privileges in CFPrefs direct mode.
        This patch also creates a sandbox include file for preferences, which can be shared among WebKit processes.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * Shared/Sandbox: Added.
        * Shared/Sandbox/preferences.sb: Added.
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-09-24  Devin Rousso  <drousso@apple.com>

        Add typechecking `is` overloads for `std::unique_ptr`, `WTF::UniqueRef`, and `WTF::WeakPtr`
        https://bugs.webkit.org/show_bug.cgi?id=230734

        Reviewed by Chris Dumez.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTextAsync):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::performActionOnElement):
        (WebKit::WebPage::autofillLoginCredentials):

2021-09-24  Eric Hutchison  <ehutchison@apple.com>

        Unreviewed, reverting r283024.

        Causes slowdown and crash on EWS

        Reverted changeset:

        "[WebKit2] Refactor some IPC argument encoder logic to work
        with StreamConnectionEncoder"
        https://bugs.webkit.org/show_bug.cgi?id=230714
        https://commits.webkit.org/r283024

2021-09-24  Youenn Fablet  <youenn@apple.com>

        RTCDataChannelHandlerClient does not need to be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=230679

        Reviewed by Eric Carlson.

        Move to UniqueRef now that it is no longer ref counted.

        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::connectToRemoteSource):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.h:

2021-09-24  Per Arne Vollan  <pvollan@apple.com>

        Remove directory rule from sandboxes
        https://bugs.webkit.org/show_bug.cgi?id=230637
        <rdar://58899134>

        Reviewed by Brent Fulgham.

        This rule is related to UITextField, which is only used in the UI process.

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

2021-09-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add utility to create CVPixelBuffers from IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=230338

        Reviewed by Youenn Fablet.

        The helper function moved from ImageTransferSessionVT
        to free standalone function. Stop instantiating the
        object and just call the function.

        In both of the cases, the pixel buffer is created out of
        the IOSurface and the pool is not used. In both of the cases
        the size and the pixel format of the image transfer session
        is the same as the input IOSurface.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::completedDecoding):
        (WebKit::LibWebRTCCodecs::encodeFrame):
        (WebKit::LibWebRTCCodecs::pixelBufferPool):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:

2021-09-24  Youenn Fablet  <youenn@apple.com>

        <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
        https://bugs.webkit.org/show_bug.cgi?id=229792
        <rdar://problem/82776741>

        Reviewed by Eric Carlson.

        Helper routined used in WTR.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateDataURLFromImage):
        * Shared/API/c/cg/WKImageCG.h:

2021-09-24  Youenn Fablet  <youenn@apple.com>

        [IOS 15] Video track does not get unmuted in case of tab was inactive less than ~500 ms
        https://bugs.webkit.org/show_bug.cgi?id=230538
        <rdar://problem/83355705>

        Reviewed by Eric Carlson.

        Add support for mock capture interruption.
        When receiving a notification that GPUProcess source is muted, we consider it is interrupted.
        In that case, we notify the source is muted instead of calling setMuted (which would set the source as muted AND stop producing data).
        It is important to not stop the source so that it can continue receiving interruption notifications.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::setMockCameraIsInterrupted):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsMockRealtimeMediaSourceCenterEnabled):
        (WKPageSetMockCameraIsInterrupted):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::setMockCameraIsInterrupted):
        * UIProcess/GPU/GPUProcessProxy.h:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.h:
        * WebProcess/cocoa/RemoteRealtimeVideoSource.h:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::sourceMutedChanged):

2021-09-24  Sihui Liu  <sihui_liu@apple.com>

        Add initial support for File System Access API
        https://bugs.webkit.org/show_bug.cgi?id=230484
        rdar://83405890

        Reviewed by Youenn Fablet.

        Introduce FileSystemStorageManager to manage file handles. Each FileSystemStorageHandle corresponds to a 
        FileSystemHandle in web process.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeStorageManagerForSession):
        * NetworkProcess/storage/FileSystemStorageError.h: Added.
        (WebKit::convertToExceptionCode):
        * NetworkProcess/storage/FileSystemStorageHandle.cpp: Added.
        (WebKit::FileSystemStorageHandle::FileSystemStorageHandle):
        (WebKit::FileSystemStorageHandle::isSameEntry):
        (WebKit::FileSystemStorageHandle::requestCreateHandle):
        (WebKit::FileSystemStorageHandle::getFileHandle):
        (WebKit::FileSystemStorageHandle::getDirectoryHandle):
        (WebKit::FileSystemStorageHandle::removeEntry):
        (WebKit::FileSystemStorageHandle::resolve):
        * NetworkProcess/storage/FileSystemStorageHandle.h: Added.
        (WebKit::FileSystemStorageHandle::identifier const):
        (WebKit::FileSystemStorageHandle::path const):
        * NetworkProcess/storage/FileSystemStorageHandleIdentifier.h: Added.
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.cpp: Added.
        (WebKit::FileSystemStorageHandleRegistry::registerHandle):
        (WebKit::FileSystemStorageHandleRegistry::unregisterHandle):
        (WebKit::FileSystemStorageHandleRegistry::getHandle):
        * NetworkProcess/storage/FileSystemStorageHandleRegistry.h: Added.
        * NetworkProcess/storage/FileSystemStorageManager.cpp: Added.
        (WebKit::FileSystemStorageManager::FileSystemStorageManager):
        (WebKit::FileSystemStorageManager::~FileSystemStorageManager):
        (WebKit::FileSystemStorageManager::createHandle):
        (WebKit::FileSystemStorageManager::getPath):
        (WebKit::FileSystemStorageManager::connectionClosed):
        (WebKit::FileSystemStorageManager::getDirectory):
        * NetworkProcess/storage/FileSystemStorageManager.h: Added.
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::NetworkStorageManager):
        (WebKit::NetworkStorageManager::~NetworkStorageManager):
        (WebKit::NetworkStorageManager::close):
        (WebKit::NetworkStorageManager::startReceivingMessageFromConnection):
        (WebKit::NetworkStorageManager::stopReceivingMessageFromConnection):
        (WebKit::NetworkStorageManager::clearStorageForTesting):
        (WebKit::NetworkStorageManager::fileSystemGetDirectory):
        (WebKit::NetworkStorageManager::isSameEntry):
        (WebKit::NetworkStorageManager::getFileHandle):
        (WebKit::NetworkStorageManager::getDirectoryHandle):
        (WebKit::NetworkStorageManager::removeEntry):
        (WebKit::NetworkStorageManager::resolve):
        * NetworkProcess/storage/NetworkStorageManager.h:
        (WebKit::NetworkStorageManager::sessionID const): Deleted.
        * NetworkProcess/storage/NetworkStorageManager.messages.in:
        * NetworkProcess/storage/OriginStorageManager.cpp:
        (WebKit::OriginStorageManager::StorageBucket::connectionClosed):
        (WebKit::OriginStorageManager::StorageBucket::typeStoragePath const):
        (WebKit::OriginStorageManager::StorageBucket::fileSystemStorageManager):
        (WebKit::OriginStorageManager::connectionClosed):
        (WebKit::OriginStorageManager::defaultBucket):
        (WebKit::OriginStorageManager::persist):
        (WebKit::OriginStorageManager::fileSystemStorageManager):
        * NetworkProcess/storage/OriginStorageManager.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/FileSystemStorageHandleProxy.cpp: Added.
        (WebKit::FileSystemStorageHandleProxy::create):
        (WebKit::FileSystemStorageHandleProxy::FileSystemStorageHandleProxy):
        (WebKit::FileSystemStorageHandleProxy::connectionClosed):
        (WebKit::FileSystemStorageHandleProxy::isSameEntry):
        (WebKit::FileSystemStorageHandleProxy::getFileHandle):
        (WebKit::FileSystemStorageHandleProxy::getDirectoryHandle):
        (WebKit::FileSystemStorageHandleProxy::removeEntry):
        (WebKit::FileSystemStorageHandleProxy::resolve):
        * WebProcess/WebCoreSupport/FileSystemStorageHandleProxy.h: Added.
        * WebProcess/WebCoreSupport/WebStorageConnection.cpp:
        (WebKit::WebStorageConnection::getPersisted):
        (WebKit::WebStorageConnection::persist):
        (WebKit::WebStorageConnection::fileSystemGetDirectory):
        (WebKit::WebStorageConnection::persisted): Deleted.
        * WebProcess/WebCoreSupport/WebStorageConnection.h:

2021-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Refactor some IPC argument encoder logic to work with StreamConnectionEncoder
        https://bugs.webkit.org/show_bug.cgi?id=230714

        Reviewed by Simon Fraser.

        Make it possible to use `IPC::StreamConnectionEncoder` to encode display list items (and their members) in an
        IPC stream. This patch comprises two main sets of changes in `ArgumentCoders`, and `WebCoreArgumentCoders`. See
        below for more details.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<audit_token_t>::decode):
        (IPC::ArgumentCoder<Monostate>::encode): Deleted.
        (IPC::ArgumentCoder<Monostate>::decode): Deleted.
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<Monostate>::encode):
        (IPC::ArgumentCoder<Monostate>::decode):

        Many of these `encode()` methods are currently non-templated, which means that Encoder and Decoder used here
        refer solely to IPC::Encoder and IPC::Decoder (respectively) instead of other types of encoders (namely,
        StreamConnectionEncoder).

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AffineTransform>::encode): Deleted.
        (IPC::ArgumentCoder<AffineTransform>::decode): Deleted.
        (IPC::ArgumentCoder<TransformationMatrix>::encode): Deleted.
        (IPC::ArgumentCoder<TransformationMatrix>::decode): Deleted.
        (IPC::ArgumentCoder<FloatPoint>::encode): Deleted.
        (IPC::ArgumentCoder<FloatPoint>::decode): Deleted.
        (IPC::ArgumentCoder<FloatPoint3D>::encode): Deleted.
        (IPC::ArgumentCoder<FloatPoint3D>::decode): Deleted.
        (IPC::ArgumentCoder<FloatRect>::encode): Deleted.
        (IPC::ArgumentCoder<FloatRect>::decode): Deleted.
        (IPC::ArgumentCoder<FloatBoxExtent>::encode): Deleted.
        (IPC::ArgumentCoder<FloatBoxExtent>::decode): Deleted.
        (IPC::ArgumentCoder<FloatSize>::encode): Deleted.
        (IPC::ArgumentCoder<FloatSize>::decode): Deleted.
        (IPC::ArgumentCoder<FloatRoundedRect>::encode): Deleted.
        (IPC::ArgumentCoder<FloatRoundedRect>::decode): Deleted.
        (IPC::ArgumentCoder<IntPoint>::encode): Deleted.
        (IPC::ArgumentCoder<IntPoint>::decode): Deleted.
        (IPC::ArgumentCoder<IntRect>::encode): Deleted.
        (IPC::ArgumentCoder<IntRect>::decode): Deleted.
        (IPC::ArgumentCoder<IntSize>::encode): Deleted.
        (IPC::ArgumentCoder<IntSize>::decode): Deleted.
        (IPC::ArgumentCoder<LayoutSize>::encode): Deleted.
        (IPC::ArgumentCoder<LayoutSize>::decode): Deleted.
        (IPC::ArgumentCoder<LayoutPoint>::encode): Deleted.
        (IPC::ArgumentCoder<LayoutPoint>::decode): Deleted.

        These WebCore argument coders are also currently incompatible with StreamConnectionEncoder, since they are non-
        templated (and thus only work with IPC::Encoder). Since these are all encodable as POD types, we can just use
        SimpleArgumentCoder for all of these. We also add a new `DEFINE_SIMPLE_ARGUMENT_CODER` macro to make this code a
        bit easier to read.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<CGRect>::encode): Deleted.
        (IPC::ArgumentCoder<CGRect>::decode): Deleted.
        (IPC::ArgumentCoder<CGSize>::encode): Deleted.
        (IPC::ArgumentCoder<CGSize>::decode): Deleted.
        (IPC::ArgumentCoder<CGPoint>::encode): Deleted.
        (IPC::ArgumentCoder<CGPoint>::decode): Deleted.
        (IPC::ArgumentCoder<CGAffineTransform>::encode): Deleted.
        (IPC::ArgumentCoder<CGAffineTransform>::decode): Deleted.

2021-09-23  Per Arne Vollan  <pvollan@apple.com>

        Remove access to unused services in the Networking access
        https://bugs.webkit.org/show_bug.cgi?id=230715
        <rdar://problem/83462947>

        Reviewed by Brent Fulgham.

        Telemetry is showing that some services allowed in the Networking process' sandbox are unused. These should be removed.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-09-23  Per Arne Vollan  <pvollan@apple.com>

        Remove access to unused services in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=230716
        <rdar://problem/83464232>

        Reviewed by Brent Fulgham.

        Telemetry is showing that some services allowed in the GPU process' sandbox are unused. These should be removed.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-09-23  Tim Horton  <timothy_horton@apple.com>

        Move more linked-on-or-after checks to WebCore::linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=230694

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldRequireUserGestureToLoadVideo):
        (-[WKWebView _initializeWithConfiguration:]):

2021-09-23  Tim Horton  <timothy_horton@apple.com>

        shouldAllowPictureInPictureMediaPlayback should use WebCore's linkedOnOrAfter()
        https://bugs.webkit.org/show_bug.cgi?id=230674

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback):
        Adopt the WebCore API (which supports overrides for Safari and for testing).

2021-09-23  Brent Fulgham  <bfulgham@apple.com>

        Remove XSS Auditor: Part 3 (Deprecate API)
        https://bugs.webkit.org/show_bug.cgi?id=230661
        <rdar://problem/83428911>

        Reviewed by Mark Lam.

        As a final step, deprecate the API now that the feature is removed. Once all clients have
        removed use of the API we can remove from the framework.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetXSSAuditorEnabled):
        (WKPreferencesGetXSSAuditorEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:

2021-09-23  Per Arne Vollan  <pvollan@apple.com>

        Fix incorrect mach service name in sandboxes
        https://bugs.webkit.org/show_bug.cgi?id=230640
        <rdar://55258216>

        Reviewed by Brent Fulgham.

        Authentication related rules are using incorrect service names in sandboxes.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:

2021-09-23  Jean-Yves Avenard  <jya@apple.com>

        Opus and Vorbis codecs aren't available on iPad.
        https://bugs.webkit.org/show_bug.cgi?id=230595
        rdar://problem/83382734

        Vorbis and Opus are usable on platforms other than macOS and are being checked
        at runtime.

        Reviewed by Eric Carlson.

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

2021-09-23  Chris Lord  <clord@igalia.com>

        [GTK] Allow sending precise mouse wheel events in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=230541

        Reviewed by Tim Horton.

        Add code to be able to send precise synthetic mouse-wheel events in GTK.

        * Shared/NativeWebWheelEvent.h:
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSynthesizeWheelEvent):
        (webkitWebViewBaseSetWheelHasPreciseDeltas):
        * UIProcess/API/gtk/WebKitWebViewBaseInternal.h:

2021-09-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, (manually) reverting r282856.
        https://bugs.webkit.org/show_bug.cgi?id=230634

        Caused ProcessSwap API test failures on iOS.

        Reverted changest:

        "Remove GenericCallback"
        https://bugs.webkit.org/show_bug.cgi?id=229366
        https://trac.webkit.org/changeset/282856/webkit

2021-09-22  Alex Christensen  <achristensen@webkit.org>

        PCM should include the bundle ID of the app from which it originated
        https://bugs.webkit.org/show_bug.cgi?id=230576
        <rdar://83065221>

        Reviewed by Kate Cheney.

        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase const):
        (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase): Deleted.
        * NetworkProcess/DatabaseUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::Database):
        (WebKit::PCM::Database::insertPrivateClickMeasurement):
        (WebKit::PCM::Database::privateClickMeasurementToStringForTesting const):
        (WebKit::PCM::Database::attributionToStringForTesting const):
        (WebKit::PCM::Database::addBundleIDColumnIfNecessary):
        (WebKit::PCM::Database::columnsForTable):
        (WebKit::PCM::Database::addMissingColumnToTable):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:]):
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:]): Deleted.
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setEphemeralUIEventAttribution:]):
        (-[WKWebView _setEphemeralUIEventAttribution:forApplicationWithBundleID:]):

2021-09-22  Alex Christensen  <achristensen@webkit.org>

        Move PCMDaemon to WebKit.framework and rename it to AdAttributionDaemon
        https://bugs.webkit.org/show_bug.cgi?id=230516

        Reviewed by Brent Fulgham.

        Also, open iOS NetworkProcess's sandbox to allow connecting to it.

        * Configurations/AdAttributionDaemon.xcconfig: Renamed from Tools/TestWebKitAPI/Configurations/TestPCMDaemon.xcconfig.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Shared/EntryPointUtilities/Cocoa/Daemon/AdAttributionDaemon.c: Renamed from Tools/TestWebKitAPI/cocoa/TestPCMDaemonMain.c.
        * WebKit.xcodeproj/project.pbxproj:

2021-09-22  Chris Dumez  <cdumez@apple.com>

        Drop makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230626

        Reviewed by Alex Christensen.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        (WebKit::RemoteRenderingBackend::cacheNativeImage):
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::createH264Decoder):
        (WebKit::LibWebRTCCodecsProxy::createH265Decoder):
        (WebKit::LibWebRTCCodecsProxy::createVP9Decoder):
        (WebKit::LibWebRTCCodecsProxy::createEncoder):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToPCMDatabaseIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateCookieBlocking):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::removeDataRecords):
        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
        (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
        (WebKit::ResourceLoadStatisticsStore::updateCacheMaxAgeCap):
        (WebKit::ResourceLoadStatisticsStore::updateClientSideCookiesAgeCap):
        (WebKit::ResourceLoadStatisticsStore::updateCookieBlockingForDomains):
        (WebKit::ResourceLoadStatisticsStore::logTestingEvent):
        (WebKit::ResourceLoadStatisticsStore::removeAllStorageAccess):
        * NetworkProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::SessionStorageQuotaManager::ensureOriginStorageQuotaManager):
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::initialize):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::Store):
        (WebKit::PCM::Store::insertPrivateClickMeasurement):
        (WebKit::PCM::Store::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        (WebKit::PCM::Store::privateClickMeasurementToStringForTesting const):
        (WebKit::PCM::Store::allAttributedPrivateClickMeasurement):
        (WebKit::PCM::Store::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::PCM::Store::clearPrivateClickMeasurement):
        (WebKit::PCM::Store::clearPrivateClickMeasurementForRegistrableDomain):
        (WebKit::PCM::Store::clearExpiredPrivateClickMeasurement):
        (WebKit::PCM::Store::clearSentAttribution):
        (WebKit::PCM::Store::close):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::loadWithCacheEntry):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::from):
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::open):
        (WebKit::CacheStorage::Cache::retrieveRecord):
        (WebKit::CacheStorage::Cache::retrieveRecords):
        (WebKit::CacheStorage::Cache::put):
        (WebKit::CacheStorage::Cache::updateRecordToDisk):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::readRecordsList):
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::readRecord):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheIOChannelGLib.cpp:
        (WebKit::NetworkCache::IOChannel::readSyncInThread):
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::NetworkStorageManager):
        (WebKit::NetworkStorageManager::clearStorageForTesting):
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageSynchronous):
        (IPC::handleMessageSynchronousWantsConnection):
        (IPC::handleMessageAsync):
        (IPC::handleMessageAsyncWantsConnection):
        * Platform/IPC/MessageReceiveQueues.h:
        * Platform/IPC/StreamServerConnection.h:
        (IPC::StreamServerConnection<Receiver>::startReceivingMessages):
        * Platform/SharedMemory.cpp:
        (WebKit::SharedMemory::createSharedBuffer const):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::updateSceneState):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::~CompositingRunLoop):
        * UIProcess/API/APIContentWorld.cpp:
        (API::ContentWorld::sharedWorldWithName):
        * UIProcess/API/Cocoa/WKDownload.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frames:]):
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload cancel]):
        * UIProcess/API/glib/WebKitDownload.cpp:
        (webkit_download_cancel):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::simulateWheelInteraction):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
        (WebKit::BackgroundProcessResponsivenessTimer::setResponsive):
        * UIProcess/Cocoa/LegacyDownloadClient.mm:
        (WebKit::LegacyDownloadClient::didReceiveAuthenticationChallenge):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
        (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin):
        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
        (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::beginSafeBrowsingCheck):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
        (WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataInUIProcessForRegistrableDomains):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::callObserverCallback):
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::stop):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::updateStoredRequests):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::addProcessIfPossible):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleSynchronousMessage):
        (WebKit::WebProcessPool::processForNavigation):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createSpeechRecognitionServer):
        (WebKit::WebProcessProxy::ensureSpeechRecognitionRemoteRealtimeMediaSourceManager):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::beginAppBoundDomainCheck):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::networkProcessForSession):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem):
        * WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.cpp:
        (WebKit::MediaKeySystemPermissionRequestManager::sendMediaKeySystemRequest):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::recordFontUse):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionOnMainThreadWithLock):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::schedulePluginStreamLoad):
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.cpp:
        (WebKit::LibWebRTCNetworkManager::StartUpdating):
        (WebKit::LibWebRTCNetworkManager::networksChanged):
        (WebKit::LibWebRTCNetworkManager::networkProcessCrashed):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::cancelAndForgetLoader):
        * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp:
        (WebKit::SpeechRecognitionRealtimeMediaSourceManager::createSource):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPC::visitedLinkStoreID):
        (WebKit::IPCTestingAPI::JSMessageListener::didReceiveMessage):
        (WebKit::IPCTestingAPI::JSMessageListener::willSendMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::requestStorageAccess):
        (WebKit::WebPage::requestTextRecognition):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::showEmojiPicker):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):
        (WebKit::isObscuredElement):
        (WebKit::elementPositionInformation):
        (WebKit::WebPage::focusTextInputContextAndPlaceCaret):
        (WebKit::WebPage::animationDidFinishForElement):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):
        (WebKit::TiledCoreAnimationDrawingArea::handleActivityStateChangeCallbacksIfNeeded):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureSpeechRecognitionRealtimeMediaSourceManager):

2021-09-22  Brady Eidson  <beidson@apple.com>

        Disable FTP.
        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477

        Reviewed by Geoff Garen.

        Covered by new API tests.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::start):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::ftpEnabled const):
        
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2021-09-22  Megan Gardner  <megan_gardner@apple.com>

        Build fix for 230521
        https://bugs.webkit.org/show_bug.cgi?id=230629

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (toGestureType):

2021-09-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Switch runtime to 21.08 SDK
        https://bugs.webkit.org/show_bug.cgi?id=229919

        Reviewed by Michael Catanzaro.

        * Shared/RTCNetwork.h: Unified build fix, include <optional> before using std::optional<T>.

2021-09-22  Megan Gardner  <megan_gardner@apple.com>

        Remove unused enums.
        https://bugs.webkit.org/show_bug.cgi?id=230521

        Reviewed by Wenson Hsieh.

        Removing enums that are not used by UIKit or WebKit.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/ios/GestureTypes.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toGestureType):
        (toUIWKGestureType):

2021-09-21  Jean-Yves Avenard  <jya@apple.com>

        Use SharedMemory for transferring appended buffers from SourceBuffer to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=230329
        rdar://problem/83291495

        Use SharedMemory to pass SourceBuffer content to RemoteSourceBufferProxy in GPU process.
        This is done by wrapping a SharedMemory into a SharedBuffer.

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::append):
        * GPUProcess/media/RemoteSourceBufferProxy.h:
        * GPUProcess/media/RemoteSourceBufferProxy.messages.in:
        * Platform/SharedMemory.cpp:
        (WebKit::SharedMemory::createSharedBuffer const):
        * Platform/SharedMemory.h:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::append):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:

2021-09-21  Simon Fraser  <simon.fraser@apple.com>

        Change from ENABLE(RUBBER_BANDING) to HAVE(RUBBER_BANDING)
        https://bugs.webkit.org/show_bug.cgi?id=230583

        Reviewed by Tim Horton.

        RUBBER_BANDING is not a feature we'll ever turn off on macOS, and it was only ever enabled
        for that platform. However, it's also used in some cross-platform code, so
        HAVE(RUBBER_BANDING) makes more sense for that use.

        Also remove ENABLE(RUBBER_BANDING) #ifdefs from inside PLATFORM(MAC) code.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::updateCustomAppearance):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didAddHeaderLayer):
        (WebKit::WebChromeClient::didAddFooterLayer):

2021-09-21  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Unreviewed build fix (second attempt).

        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:

2021-09-21  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Unreviewed build fix.

        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:

2021-09-21  Alex Christensen  <achristensen@webkit.org>

        Remove GenericCallback
        https://bugs.webkit.org/show_bug.cgi?id=229366

        Reviewed by Chris Dumez.

        It has been replaced by sendWithAsyncReply.

        This last use can't really be replaced by sendWithAsyncReply because the CallbackIDs are sent, then further encoded
        in RemoteLayerTreeTransaction::encode/decode which you can't really do with a CompletionHandler.  But we can replace
        GenericCallback with WTF::Function.

        * Shared/CallbackID.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * UIProcess/API/APIAttachment.h:
        * UIProcess/API/APIIconLoadingClient.h:
        * UIProcess/API/APIInspectorExtension.cpp:
        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCallAfterNextPresentationUpdate):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/API/Cocoa/WKErrorInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _internalDoAfterNextPresentationUpdate:withoutWaitingForPainting:withoutWaitingForAnimatedResize:]):
        * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _doAfterNextPresentationUpdate:]):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::takeScreenshot):
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/GenericCallback.h: Removed.
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/WebContextClient.cpp:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::callAfterNextPresentationUpdate):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willFinishIgnoringCalloutBarFadeAfterPerformingAction]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::~TiledCoreAnimationDrawingAreaProxy):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchPresentationCallbacksAfterFlushingLayers):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKTextFinderClient.mm:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm:

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Launch the new process a bit earlier when doing a COOP process-swap
        https://bugs.webkit.org/show_bug.cgi?id=230555

        Reviewed by Alex Christensen.

        Launch the new process a bit earlier when doing a COOP process-swap for better performance.

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

2021-09-21  Alex Christensen  <achristensen@webkit.org>

        Reduce sizeof(NetworkLoadMetrics)
        https://bugs.webkit.org/show_bug.cgi?id=226982

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::additionalNetworkLoadMetricsForWebInspector):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):
        (WebKit::NetworkDataTaskSoup::wroteHeadersCallback):
        (WebKit::NetworkDataTaskSoup::wroteBodyCallback):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * Shared/WebCoreArgumentCoders.h:

2021-09-21  David Kilzer  <ddkilzer@apple.com>

        Follow-up: WebKit::WebProcessPool should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/230227>
        <rdar://problem/83067708>

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::registerNotificationObservers):
        - Set m_weakObserver for all platforms at the beginning of the
          method.  Previously it was only set for macOS.

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Drop makeRefPtr() and use RefPtr { } directly instead
        https://bugs.webkit.org/show_bug.cgi?id=230564

        Reviewed by Alex Christensen.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::addConnection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::MessagesThrottler::scheduleMessagesDispatch):
        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::parseByteSource):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewCreateNewPage):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        (WebKit::WebAutomationSession::maximizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::hideWindowOfBrowsingContext):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runOpenPanel):
        (WebKit::UIDelegate::UIClient::requestPointerLock):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::scheduleActivityStateUpdate):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (-[WKProcessPoolWeakObserver pool]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::terminateUnresponsiveServiceWorkerProcesses):
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::useContextMenuItems):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handlePreventableTouchEvent):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::runModalJavaScriptDialog):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigation):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::waitForDidCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackendProxy::waitForDidFlush):
        (WebKit::RemoteRenderingBackendProxy::findReusableDisplayListHandle):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::networkStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setReadyState):
        (WebKit::MediaPlayerPrivateRemote::readyStateChanged):
        (WebKit::MediaPlayerPrivateRemote::volumeChanged):
        (WebKit::MediaPlayerPrivateRemote::muteChanged):
        (WebKit::MediaPlayerPrivateRemote::timeChanged):
        (WebKit::MediaPlayerPrivateRemote::durationChanged):
        (WebKit::MediaPlayerPrivateRemote::rateChanged):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::engineFailedToLoad):
        (WebKit::MediaPlayerPrivateRemote::characteristicChanged):
        (WebKit::MediaPlayerPrivateRemote::sizeChanged):
        (WebKit::MediaPlayerPrivateRemote::firstVideoFrameAvailable):
        (WebKit::MediaPlayerPrivateRemote::renderingModeChanged):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::currentPlaybackTargetIsWirelessChanged):
        (WebKit::MediaPlayerPrivateRemote::mediaPlayerKeyNeeded):
        (WebKit::MediaPlayerPrivateRemote::waitingForKeyChanged):
        (WebKit::MediaPlayerPrivateRemote::initializationDataEncountered):
        (WebKit::MediaPlayerPrivateRemote::resourceNotSupported):
        (WebKit::MediaPlayerPrivateRemote::activeSourceBuffersChanged):
        (WebKit::MediaPlayerPrivateRemote::getRawCookies const):
        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
        (WebKit::MediaRecorderPrivate::startRecording):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didDestroyNotification):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findStringMatches):
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPCSemaphore::signal):
        (WebKit::IPCTestingAPI::JSIPCSemaphore::waitFor):
        (WebKit::IPCTestingAPI::JSSharedMemory::readBytes):
        (WebKit::IPCTestingAPI::JSSharedMemory::writeBytes):
        (WebKit::IPCTestingAPI::JSIPC::addMessageListener):
        (WebKit::IPCTestingAPI::encodeRemoteRenderingBackendCreationParameters):
        (WebKit::IPCTestingAPI::encodeSharedMemory):
        (WebKit::IPCTestingAPI::encodeSemaphore):
        (WebKit::IPCTestingAPI::encodeArgument):
        (WebKit::IPCTestingAPI::JSIPC::sendMessage):
        (WebKit::IPCTestingAPI::JSIPC::sendSyncMessage):
        (WebKit::IPCTestingAPI::JSIPC::vmPageSize):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::addCommitHandlers):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
        (WebKit::WebPage::getContentsAsString):
        (WebKit::WebPage::removeDataDetectedLinks):
        (WebKit::WebPage::detectDataInAllFrames):
        (WebKit::WebPage::startTextManipulations):
        (WebKit::WebPage::completeTextManipulation):
        (WebKit::WebPage::requestTextRecognition):
        (WebKit::WebPage::updateWithTextRecognitionResult):
        (WebKit::WebPage::createAppHighlightInSelectedRange):
        (WebKit::WebPage::setAppHighlightsVisibility):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):
        (WebKit::insideImageOverlay):
        (WebKit::expandForImageOverlay):
        (WebKit::rangeForPointInRootViewCoordinates):
        (WebKit::WebPage::rootViewBounds):
        (WebKit::WebPage::absoluteInteractionBounds):
        (WebKit::WebPage::rootViewInteractionBounds):
        (WebKit::WebPage::requestEvasionRectsAboveSelection):
        (WebKit::dataDetectorImageOverlayPositionInformation):
        (WebKit::selectionPositionInformation):
        (WebKit::populateCaretContext):
        (WebKit::WebPage::positionInformation):
        (WebKit::WebPage::performActionOnElement):
        (WebKit::WebPage::shrinkToFitContent):
        (WebKit::WebPage::updateVisibleContentRects):
        (WebKit::WebPage::updateSelectionWithDelta):
        (WebKit::WebPage::requestDocumentEditingContext):
        (WebKit::WebPage::animationDidFinishForElement):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::addCommitHandlers):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2021-09-21  Megan Gardner  <megan_gardner@apple.com>

        Remove unused selection parameter.
        https://bugs.webkit.org/show_bug.cgi?id=230519

        Reviewed by Wenson Hsieh.

        The direction of movement of the selection is not actually used to determine which direction to extend to a
        word boundary, so do not pass it in. In preparation of being able to condense these enums into one.

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

2021-09-21  David Kilzer  <ddkilzer@apple.com>

        Rename {checked,dynamic}_ns_cast<> to {checked,dynamic}_objc_cast<>
        <https://webkit.org/b/230508>
        <rdar://problem/83323145>

        Reviewed by Brent Fulgham.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::extractWebProcessPool):
        - Update for rename.

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        * Shared/mac/ObjCObjectGraph.mm:
        * UIProcess/API/Cocoa/NSAttributedString.mm:
        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        - Also fix *SoftLink.h header order.
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        - Import <wtf/cocoa/TypeCastsCocoa.h> for future move of
          WTF::dynamic_objc_cast<> from RetainPtr.h to that header.

2021-09-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(241918@main): [WPE][GTK] New test is timing out on bots
        https://bugs.webkit.org/show_bug.cgi?id=230556

        Reviewed by Alex Christensen.

        Switch WebKitWebContext to use both ResourceLoaderIdentifier and WebPageProxyIdentifier as
        the key for tracking outstanding tasks, since the ResourceLoaderIdentifier is not unique.

        Rename WebURLSchemeTask::identifier to WebURLSchemeTask::resourceLoaderID because this is
        really only one component of the ID for the WebURLSchemeTask, and cannot be used on its own
        to identify the WebURLSchemeTask. It must always be paired with the WebPageProxyIdentifier.

        This fixes WPE/GTK TestWebKitWebContext /webkit/WebKitWebContext/uri-scheme

        * UIProcess/API/glib/WebKitWebContext.cpp:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::taskCompleted):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::WebURLSchemeTask):
        (WebKit::WebURLSchemeTask::willPerformRedirection):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::resourceLoaderID const):
        (WebKit::WebURLSchemeTask::identifier const): Deleted.

2021-09-21  Per Arne  <pvollan@apple.com>

        Remove preference write access to AX media domain
        https://bugs.webkit.org/show_bug.cgi?id=230574
        <rdar://58899152>

        Reviewed by Brent Fulgham.

        This has been brokered to the UI process, so there should no longer be any need to write to the AX media domain in WebKit processes.

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

2021-09-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] jquery/offset.html is randomly failing an assertion in DrawingAreaCoordinatedGraphics::layerHostDidFlushLayers
        https://bugs.webkit.org/show_bug.cgi?id=230531

        Reviewed by Don Olmstead.

        DrawingAreaCoordinatedGraphics::layerHostDidFlushLayers shouldn't
        be called while LayerTreeHost is paused by pauseRendering().

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        (WebKit::LayerTreeHost::pauseRendering):
        (WebKit::LayerTreeHost::resumeRendering):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.h: Added m_isSuspended.

2021-09-21  Youenn Fablet  <youenn@apple.com>

        NetworkRTCUDPSocketCocoaConnections should handle NAT64 IP addresses correctly
        https://bugs.webkit.org/show_bug.cgi?id=230552
        <rdar://83297256>

        Reviewed by Alex Christensen.

        When opening a UDP socket, check whether it is a NAT64 IPv4 address.
        In that case, we cannot bind it like we used to do with the sockets API.
        Instead use "0.0.0.0".
        Manually tested.

        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::isNat64IPAddress):
        (WebKit::computeHostAddress):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        * NetworkProcess/webrtc/NetworkRTCUtilitiesCocoa.h:
        * Platform/spi/Cocoa/NWSPI.h: Renamed from Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h.
        * WebKit.xcodeproj/project.pbxproj:

2021-09-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Enable MSE in WKWebViews by default on iPad
        https://bugs.webkit.org/show_bug.cgi?id=230426

        Reviewed by Tim Horton.

        Add a default value getter for the MediaSourceEnabled preference.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultMediaSourceEnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * Shared/ios/WebPreferencesDefaultValuesIOS.mm:
        (WebKit::defaultMediaSourceEnabled):

2021-09-21  Alex Christensen  <achristensen@webkit.org>

        Use typed identifier for WebSocketChannel identifiers
        https://bugs.webkit.org/show_bug.cgi?id=230486

        Reviewed by Youenn Fablet.

        * WebProcess/Network/WebSocketChannel.h:

2021-09-21  Youenn Fablet  <youenn@apple.com>

        Ensure that capture attribution works even for URLS without hostnames
        https://bugs.webkit.org/show_bug.cgi?id=230479
        <rdar://81832853>

        Reviewed by Eric Carlson.

        Some URLs allow to call getUserMedia but do not have origins, like custom scheme URLs.
        In that case, the attribution status call was failing previously as we were not able to get a visible name to provide.
        We mimick what we are doing for the default prompt by using the visible application name if the origin is not available.
        Since we do the system attribution in GPUProcess, we now send the visible name to GPUProcess when creating it.

        Manually tested.
        We do not have system status attributon on MacOS or simulator so we cannot test it automatically.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcess.h:
        (WebKit::GPUProcess::applicationVisibleName const):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
        * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::applicationVisibleNameFromOrigin):
        (WebKit::applicationVisibleName):
        (WebKit::alertMessageText):
        * UIProcess/MediaPermissionUtilities.h:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Avoid doing a second server pre-connect after a process-swap
        https://bugs.webkit.org/show_bug.cgi?id=230517

        Reviewed by Geoffrey Garen.

        Avoid doing a second server pre-connect after a process-swap. It is unnecessary as we've already
        asked the network process to do so before process-swapping.

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

2021-09-20  Megan Gardner  <megan_gardner@apple.com>

        Remove unused gesture code.
        https://bugs.webkit.org/show_bug.cgi?id=230515

        Reviewed by Wenson Hsieh.

        * Shared/ios/GestureTypes.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toGestureType):
        (toUIWKGestureType):

2021-09-20  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Videos sometimes don't render when loaded in the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=230495
        rdar://83205407

        Reviewed by Jer Noble.

        The media players choose what type of video output to create based on whether
        or not the renderer can support accelerated rendering. We were only pushing
        this state to the GPU process when the renderer changed to require backing, but
        that state was lost if that transition happened before the AVFoundation-backed
        media player was created. Change this to push the current state from the web process
        when a remote media player is created, and again whenever its readyState changes.

        We haven't figured out how to reliably reproduce this, so https://webkit.org/b/230500
        tracks figuring that out and creating a test.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy): Set m_renderingCanBeAccelerated
        from the configuration.
        (WebKit::RemoteMediaPlayerProxy::prepareToPlay): Add logging.
        (WebKit::RemoteMediaPlayerProxy::prepareForRendering): Ditto.
        (WebKit::RemoteMediaPlayerProxy::setPageIsVisible): Ditto.
        (WebKit::RemoteMediaPlayerProxy::acceleratedRenderingStateChanged): Ditto.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged): Ditto.

        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h: Add renderingCanBeAccelerated.
        (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
        (WebKit::RemoteMediaPlayerProxyConfiguration::decode): Decode it.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::readyStateChanged): Call acceleratedRenderingStateChanged
        if the state has changed.
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged): Remember
        the state.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer): Pass the accelerated 
        rendering state with the configuration.

2021-09-20  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for WinCairo with ENABLE_EXPERIMENTAL_FEATURES off.

        * NetworkProcess/NetworkSession.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline webkitpy test after r282755.

        * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp:
        (WebKit::TestWithCVPixelBuffer::didReceiveMessage):
        (WebKit::TestWithCVPixelBuffer::didReceiveSyncMessage):

2021-09-20  Alex Christensen  <achristensen@webkit.org>

        WebKit might load custom URI scheme request content multiple times
        https://bugs.webkit.org/show_bug.cgi?id=229116

        Reviewed by Brady Eidson.

        Use a ResourceLoaderIdentifier and a WebPageProxyIdentifier as keys in WebURLSchemeHandler.
        This also makes it so that we don't need a new one per page on Cocoa platforms.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::startTask):
        (WebKit::WebURLSchemeHandler::processForTaskIdentifier const):
        (WebKit::WebURLSchemeHandler::stopAllTasksForPage):
        (WebKit::WebURLSchemeHandler::stopTask):
        (WebKit::WebURLSchemeHandler::taskCompleted):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):

2021-09-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Use ObjectIdentifier for WebURLSchemeHandler
        https://bugs.webkit.org/show_bug.cgi?id=230462

        Reviewed by Alex Christensen.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Shared/URLSchemeTaskParameters.cpp:
        (WebKit::URLSchemeTaskParameters::decode):
        * Shared/URLSchemeTaskParameters.h:
        (): Deleted.
        * Shared/WebPageCreationParameters.h:
        * Shared/WebURLSchemeHandlerIdentifier.h: Copied from Source/WebKit/Shared/URLSchemeTaskParameters.h.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopURLSchemeTask):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::WebURLSchemeHandler):
        (WebKit::generateWebURLSchemeHandlerIdentifier): Deleted.
        * UIProcess/WebURLSchemeHandler.h:
        (WebKit::WebURLSchemeHandler::identifier const):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::registerURLSchemeHandler):
        (WebKit::WebPage::urlSchemeTaskWillPerformRedirection):
        (WebKit::WebPage::urlSchemeTaskDidPerformRedirection):
        (WebKit::WebPage::urlSchemeTaskDidReceiveResponse):
        (WebKit::WebPage::urlSchemeTaskDidReceiveData):
        (WebKit::WebPage::urlSchemeTaskDidComplete):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::WebURLSchemeHandlerProxy):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
        (WebKit::WebURLSchemeHandlerProxy::create):
        (WebKit::WebURLSchemeHandlerProxy::identifier const):
        (): Deleted.
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Stop using makeRef(*this) / makeRefPtr(this)
        https://bugs.webkit.org/show_bug.cgi?id=230464

        Reviewed by Alex Christensen.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::initialize):
        (WebKit::RemoteGraphicsContextGL::displayWasReconfigured):
        * GPUProcess/media/RemoteAudioSourceProviderProxy.cpp:
        (WebKit::RemoteAudioSourceProviderProxy::createRingBuffer):
        * GPUProcess/media/RemoteMediaResource.cpp:
        (WebKit::RemoteMediaResource::responseReceived):
        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::removeCodedFrames):
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::close):
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp:
        (WebKit::RemoteSampleBufferDisplayLayerManager::close):
        (WebKit::RemoteSampleBufferDisplayLayerManager::createLayer):
        (WebKit::RemoteSampleBufferDisplayLayerManager::releaseLayer):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::postTask):
        (WebKit::WebResourceLoadStatisticsStore::destroyResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
        (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessEphemeral):
        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::registerTemporaryBlobFilePaths):
        (WebKit::WebIDBServer::close):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFilesForIndexedDB):
        (WebKit::NetworkConnectionToWebProcess::takeAllMessagesForPort):
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::resume):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        (WebKit::NetworkProcess::createWebIDBServer):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/NetworkSocketStream.cpp:
        (WebKit::NetworkSocketStream::sendData):
        (WebKit::NetworkSocketStream::sendHandshake):
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::add):
        (WebKit::StorageManagerSet::remove):
        (WebKit::StorageManagerSet::removeConnection):
        (WebKit::StorageManagerSet::handleLowMemoryWarning):
        (WebKit::StorageManagerSet::suspend):
        (WebKit::StorageManagerSet::getSessionStorageOrigins):
        (WebKit::StorageManagerSet::deleteSessionStorage):
        (WebKit::StorageManagerSet::deleteSessionStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOrigins):
        (WebKit::StorageManagerSet::deleteLocalStorageModifiedSince):
        (WebKit::StorageManagerSet::deleteLocalStorageForOrigins):
        (WebKit::StorageManagerSet::getLocalStorageOriginDetails):
        (WebKit::StorageManagerSet::renameOrigin):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::readCache):
        (WebKit::CacheStorage::Engine::fetchDirectoryEntries):
        (WebKit::CacheStorage::CompletionHandler<void):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::storeOrigin):
        (WebKit::CacheStorage::Caches::initializeSize):
        (WebKit::CacheStorage::Caches::clear):
        (WebKit::CacheStorage::Caches::readCachesFromDisk):
        (WebKit::CacheStorage::Caches::writeCachesToDisk):
        (WebKit::CacheStorage::Caches::writeRecord):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cache/NetworkCacheIOChannelGLib.cpp:
        (WebKit::NetworkCache::IOChannel::readSyncInThread):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::finishReadOperation):
        (WebKit::NetworkCache::Storage::finishWriteOperation):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::shrink):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::resume):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::curlDidSendData):
        (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::curlDidReceiveBuffer):
        (WebKit::NetworkDataTaskCurl::invokeDidReceiveResponse):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::tryHttpAuthentication):
        (WebKit::NetworkDataTaskCurl::tryProxyAuthentication):
        (WebKit::NetworkDataTaskCurl::tryServerTrustEvaluation):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createServerTCPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        (WebKit::NetworkRTCProvider::createResolver):
        (WebKit::NetworkRTCProvider::stopResolver):
        (WebKit::NetworkRTCProvider::closeListeningSockets):
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.cpp:
        (WebKit::RTCDataChannelRemoteManagerProxy::registerConnectionToWebProcess):
        (WebKit::RTCDataChannelRemoteManagerProxy::unregisterConnectionToWebProcess):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::invalidate):
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::enqueueIncomingMessage):
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::open):
        (IPC::Connection::initializeSendSource):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::sendOutputMessage):
        * Platform/IPC/win/ConnectionWin.cpp:
        (IPC::Connection::invokeReadEventHandler):
        (IPC::Connection::invokeWriteEventHandler):
        * Scripts/webkit/messages.py:
        (generate_message_handler):
        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        (WebKit::TestWithImageData::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        (WebKit::TestWithLegacyReceiver::didReceiveSyncTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        (WebKit::TestWithSemaphore::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:
        (WebKit::TestWithSuperclass::didReceiveMessage):
        (WebKit::TestWithSuperclass::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        (WebKit::TestWithoutAttributes::didReceiveSyncMessage):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::invalidate):
        (WebKit::ThreadedCompositor::suspend):
        (WebKit::ThreadedCompositor::resume):
        (WebKit::ThreadedCompositor::forceRepaint):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::startOnMainThread):
        (WebKit::MediaFormatReader::parseByteSource):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::getAvailableContentRuleListIdentifiers):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::removeContentRuleList):
        (API::ContentRuleListStore::getContentRuleListSource):
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::cookiesForURL):
        (API::HTTPCookieStore::setCookies):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::checkIconURLAndSetPageURLIfNeeded):
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):
        (WebKit::IconDatabase::clear):
        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
        (WebKit::SimulatedInputDispatcher::transitionToNextKeyFrame):
        (WebKit::SimulatedInputDispatcher::transitionToNextInputSourceState):
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getBrowsingContexts):
        (WebKit::WebAutomationSession::getBrowsingContext):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext):
        (WebKit::WebAutomationSession::maximizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::hideWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::exitFullscreenWindowForPage):
        (WebKit::WebAutomationSession::willShowJavaScriptDialog):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::simulateMouseInteraction):
        (WebKit::WebAutomationSession::simulateTouchInteraction):
        (WebKit::WebAutomationSession::simulateWheelInteraction):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::performInteractionSequence):
        (WebKit::WebAutomationSession::cancelInteractionSequence):
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::dismissViewController):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::DeviceIdHashSaltStorage):
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk):
        (WebKit::DeviceIdHashSaltStorage::storeHashSaltToDisk):
        (WebKit::DeviceIdHashSaltStorage::deleteHashSaltFromDisk):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        (WebKit::DownloadProxy::willSendRequest):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::gpuProcessExited):
        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::join):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSeekTo):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePlay):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePause):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSetTrack):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::prompt):
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::useContextMenuItems):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestFontAttributesAtSelectionStart):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::getWindowFrame):
        (WebKit::WebPageProxy::getWindowFrameWithCallback):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithImageTranscoding):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        (WebKit::WebPageProxy::requestStorageSpace):
        (WebKit::WebPageProxy::getLoadDecisionForIcon):
        (WebKit::WebPageProxy::dispatchActivityStateUpdateForTesting):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::terminateServiceWorkers):
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::didExceedCPULimit):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::willPerformRedirection):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::ensureAppBoundDomains const):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::acquireAsync):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::getShareMenuItem):
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::useContextMenuItems):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::pdfSaveToPDF):
        (WebKit::WebPageProxy::pdfOpenWithPreview):
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didClose):
        * WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
        (WebKit::RemoteAudioDestinationProxy::startRendering):
        (WebKit::RemoteAudioDestinationProxy::stopRendering):
        * WebProcess/GPU/media/RemoteAudioSourceProviderManager.cpp:
        (WebKit::RemoteAudioSourceProviderManager::addProvider):
        (WebKit::RemoteAudioSourceProviderManager::removeProvider):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::removeCodedFrames):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::sendMessage):
        (WebKit::WebSocketChannel::close):
        (WebKit::WebSocketChannel::fail):
        (WebKit::WebSocketChannel::didClose):
        (WebKit::WebSocketChannel::resume):
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        (WebKit::PDFPlugin::pdfLog):
        (WebKit::PDFPlugin::receivedNonLinearizedPDFSentinel):
        (WebKit::PDFPlugin::getResourceBytesAtPosition):
        (WebKit::PDFPlugin::tryRunScriptsInPDFDocument):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):
        * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
        (WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::gestureEvent):
        (WebKit::EventDispatcher::touchEvent):
        (WebKit::EventDispatcher::dispatchWheelEventViaMainThread):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspendForProcessSwap):
        (WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
        (WebKit::WebPage::drawPagesForPrinting):
        (WebKit::WebPage::elementDidBlur):
        (WebKit::WebPage::requestStorageAccess):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection):
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse):
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):
        (WebKit::WebURLSchemeTaskProxy::didComplete):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::didFinishContentChangeObserving):
        (WebKit::WebPage::didFinishLoadingImageForElement):
        (WebKit::WebPage::updateInputContextAfterBlurringAndRefocusingElementIfNeeded):
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::addSource):
        (WebKit::RemoteCaptureSampleManager::removeSource):
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        (WebKit::RemoteRealtimeAudioSource::createRemoteMediaSource):
        * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
        (WebKit::RemoteRealtimeVideoSource::createRemoteMediaSource):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::exitVideoFullscreenForVideoElement):
        (WebKit::VideoFullscreenManager::requestVideoContentLayer):
        (WebKit::VideoFullscreenManager::returnVideoContentLayer):
        (WebKit::VideoFullscreenManager::didSetupFullscreen):
        (WebKit::VideoFullscreenManager::willExitFullscreen):
        (WebKit::VideoFullscreenManager::didEnterFullscreen):
        (WebKit::VideoFullscreenManager::didExitFullscreen):
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Fix race in RemoteRenderingBackend::allowsExitUnderMemoryPressure()
        https://bugs.webkit.org/show_bug.cgi?id=229870
        <rdar://82459484>

        Reviewed by Simon Fraser.

        RemoteRenderingBackend::allowsExitUnderMemoryPressure() gets called on the main thread while
        RemoteResourceCache is always modified on a work queue. Introduce a std::atomic<bool> on
        the RemoteResourceCache that RemoteRenderingBackend::allowsExitUnderMemoryPressure() can
        safely query from the main thread.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::updateRenderingResourceRequest):
        (WebKit::RemoteRenderingBackend::allowsExitUnderMemoryPressure const):
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::RemoteResourceCache):
        (WebKit::RemoteResourceCache::cacheImageBuffer):
        (WebKit::RemoteResourceCache::cacheNativeImage):
        (WebKit::RemoteResourceCache::maybeRemoveResource):
        (WebKit::RemoteResourceCache::updateHasActiveDrawables):
        * GPUProcess/graphics/RemoteResourceCache.h:
        (WebKit::RemoteResourceCache::hasActiveDrawables const):

2021-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Teach `WebKit::createShareableBitmap` to snapshot video elements
        https://bugs.webkit.org/show_bug.cgi?id=230468

        Reviewed by Tim Horton.

        `createShareableBitmap` currently only returns a non-null image bitmap for image renderers that have cached
        images; notably, this omits video elements. For use in future patches, we should allow this helper function to
        handle video elements by snapshotting the current frame of the video.

        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):

2021-09-17  Alex Christensen  <achristensen@webkit.org>

        Use ObjectIdentifier for ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=230278

        Reviewed by Michael Catanzaro.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::isResourceLoadFinished):
        (WebKit::NetworkConnectionToWebProcess::didFinishPreconnection):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        (WebKit::NetworkConnectionToWebProcess::startTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::stopTrackingResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::findNetworkActivityTracker):
        (WebKit::NetworkConnectionToWebProcess::prioritizeResourceLoads):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkResourceLoader):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::getNetworkLoadInformationResponse):
        (WebKit::NetworkConnectionToWebProcess::getNetworkLoadIntermediateInformation):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationMetrics):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformation):
        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
        (WebKit::NetworkConnectionToWebProcess::removeNetworkLoadInformation):
        (WebKit::NetworkConnectionToWebProcess::ResourceNetworkActivityTracker::ResourceNetworkActivityTracker):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareLoadForWebProcessTransfer):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadMap.cpp:
        (WebKit::NetworkResourceLoadMap::add):
        (WebKit::NetworkResourceLoadMap::remove):
        (WebKit::NetworkResourceLoadMap::take):
        (WebKit::NetworkResourceLoadMap::get const):
        * NetworkProcess/NetworkResourceLoadMap.h:
        (WebKit::NetworkResourceLoadMap::contains const):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::transferToNewWebProcess):
        (WebKit::escapeIDForJSON):
        (WebKit::logBlockedCookieInformation):
        (WebKit::logCookieInformationInternal):
        (WebKit::NetworkResourceLoader::logCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Shared/URLSchemeTaskParameters.cpp:
        (WebKit::URLSchemeTaskParameters::decode):
        * Shared/URLSchemeTaskParameters.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::prepareLoadForWebProcessTransfer):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        (WebKit::WebPageProxy::stopURLSchemeTask):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::startTask):
        (WebKit::WebURLSchemeHandler::processForTaskIdentifier const):
        (WebKit::WebURLSchemeHandler::stopAllTasksForPage):
        (WebKit::WebURLSchemeHandler::stopTask):
        (WebKit::WebURLSchemeHandler::removeTaskFromPageMap):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::identifier const):
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageResourceLoadClient.h:
        (API::InjectedBundle::ResourceLoadClient::didInitiateLoadForResource):
        (API::InjectedBundle::ResourceLoadClient::willSendRequestForFrame):
        (API::InjectedBundle::ResourceLoadClient::didReceiveResponseForResource):
        (API::InjectedBundle::ResourceLoadClient::didReceiveContentLengthForResource):
        (API::InjectedBundle::ResourceLoadClient::didFinishLoadForResource):
        (API::InjectedBundle::ResourceLoadClient::didFailLoadForResource):
        (API::InjectedBundle::ResourceLoadClient::shouldCacheResponse):
        (API::InjectedBundle::ResourceLoadClient::shouldUseCredentialStorage):
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::didInitiateLoadForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
        (WebKit::InjectedBundlePageResourceLoadClient::didReceiveResponseForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didReceiveContentLengthForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didFinishLoadForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didFailLoadForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::shouldCacheResponse):
        (WebKit::InjectedBundlePageResourceLoadClient::shouldUseCredentialStorage):
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didFinishPingLoad):
        (WebKit::NetworkProcessConnection::didFinishPreconnection):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::tryLoadingSynchronouslyUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::startPingLoad):
        (WebKit::WebLoaderStrategy::didFinishPingLoad):
        (WebKit::WebLoaderStrategy::preconnectTo):
        (WebKit::WebLoaderStrategy::didFinishPreconnection):
        (WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::intermediateLoadInformationFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):
        (WebKit::WebLoaderStrategy::prioritizeResourceLoads):
        (WebKit::WebLoaderStrategy::generateLoadIdentifier): Deleted.
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebResourceInterceptController.cpp:
        (WebKit::WebResourceInterceptController::isIntercepting const):
        (WebKit::WebResourceInterceptController::beginInterceptingResponse):
        (WebKit::WebResourceInterceptController::continueResponse):
        (WebKit::WebResourceInterceptController::interceptedResponse):
        (WebKit::WebResourceInterceptController::defer):
        * WebProcess/Network/WebResourceInterceptController.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderDestinationID const):
        (WebKit::WebResourceLoader::didReceiveResponse):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
        (WebKit::WebFrameLoaderClient::shouldUseCredentialStorage):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebKit::WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::willCacheResponse const):
        (WebKit::WebFrameLoaderClient::sendH2Ping):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addConsoleMessage):
        (WebKit::WebPage::addResourceRequest):
        (WebKit::WebPage::removeResourceRequest):
        (WebKit::WebPage::urlSchemeTaskWillPerformRedirection):
        (WebKit::WebPage::urlSchemeTaskDidPerformRedirection):
        (WebKit::WebPage::urlSchemeTaskDidReceiveResponse):
        (WebKit::WebPage::urlSchemeTaskDidReceiveData):
        (WebKit::WebPage::urlSchemeTaskDidComplete):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::addConsoleMessage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::loadSynchronously):
        (WebKit::WebURLSchemeHandlerProxy::taskDidPerformRedirection):
        (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveResponse):
        (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveData):
        (WebKit::WebURLSchemeHandlerProxy::taskDidComplete):
        (WebKit::WebURLSchemeHandlerProxy::removeTask):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        * WebProcess/WebPage/WebURLSchemeTaskProxy.h:
        (WebKit::WebURLSchemeTaskProxy::identifier const):

2021-09-17  Kate Cheney  <katherine_cheney@apple.com>

        Remove unnecessary ITP memory store code
        https://bugs.webkit.org/show_bug.cgi?id=229512
        <rdar://problem/82644309>

        Reviewed by John Wilander.

        No new tests. Confirmed by existing tests.

        Remove ITP Memory store. This is the first part of a two part operation,
        which removes the ResourceLoadStatisticsMemoryStore class. The next 
        step will be reducing ResourceLoadStatisticsStore and
        ResourceLoadStatisticsDatabaseStore to one single ResourceLoadStatisticsStore class.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: Removed.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix.

        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:

2021-09-17  Cameron McCormack  <heycam@apple.com>

        Preserve color space when creating ImageBuffers for ImageBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=229022
        <rdar://problem/81828459>

        Reviewed by Sam Weinig.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::validateConfiguration): Factor out some
        loging into DestinationColorSpace::asRGB.

2021-09-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r282011.

        This causes GPUProcess main thread hangs on memory pressure

        Reverted changeset:

        "Fix race in
        RemoteRenderingBackend::allowsExitUnderMemoryPressure()"
        https://bugs.webkit.org/show_bug.cgi?id=229870
        https://commits.webkit.org/r282011

2021-09-17  Per Arne Vollan  <pvollan@apple.com>

        [GPUP] Update AX settings on preference updates
        https://bugs.webkit.org/show_bug.cgi?id=230409

        Reviewed by Chris Fleizach.

        We should update AX settings in the GPUP process on preference updates, like we do in the WebContent process. To address this,
        move associated code from the WebProcess class to the AuxiliaryProcess class.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/cocoa/GPUProcessCocoa.mm:
        (WebKit::GPUProcess::notifyPreferencesChanged):
        (WebKit::GPUProcess::dispatchSimulatedNotificationsForPreferenceChange):
        * Shared/AuxiliaryProcess.h:
        (WebKit::AuxiliaryProcess::dispatchSimulatedNotificationsForPreferenceChange):
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::preferenceDidUpdate):
        (WebKit::AuxiliaryProcess::handlePreferenceChange):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::dispatchSimulatedNotificationsForPreferenceChange):
        (WebKit::WebProcess::handlePreferenceChange):
        (WebKit::WebProcess::notifyPreferencesChanged):
        (WebKit::dispatchSimulatedNotificationsForPreferenceChange): Deleted.
        (WebKit::handlePreferenceChange): Deleted.

2021-09-17  Chris Dumez  <cdumez@apple.com>

        Crash under RemoteMediaPlayerManager::getSupportedTypes()
        https://bugs.webkit.org/show_bug.cgi?id=230410

        Reviewed by Eric Carlson.

        The code would do a null dereference of m_supportedTypesCache if the IPC to the GPUProcess
        failed, which could happen in the event of the GPUProcess crash or jetsam.

        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.cpp:
        (WebKit::RemoteMediaPlayerMIMETypeCache::addSupportedTypes):
        (WebKit::RemoteMediaPlayerMIMETypeCache::isEmpty const):
        (WebKit::RemoteMediaPlayerMIMETypeCache::supportedTypes):
        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.h:

2021-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add a build option to enable ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230254

        Reviewed by Adrian Perez de Castro.

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize): Add ATK ifdef.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMain): Disable ATK/GTK accessibility support in the WebProcess when using ATSPI.

2021-09-17  Tim Horton  <timothy_horton@apple.com>

        Replaying WKCGCommandsContext results in a doubly-scaled backing store
        https://bugs.webkit.org/show_bug.cgi?id=230386

        Reviewed by Wenson Hsieh.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::create):
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        WKCGCommandsContextCreate() expects the bounds in logical coordinates, so
        we don't need to use calculateBackendSize().
        This also means that the workaround no longer needs to work around the
        missing scale; only the flip is missing.

2021-09-16  Youenn Fablet  <youenn@apple.com>

        Make WebProcess use a RefPtr of LibWebRTCNetwork
        https://bugs.webkit.org/show_bug.cgi?id=230342

        Reviewed by Eric Carlson.

        No change of behavior, ref counted object should use RefPtr<>, not unique_ptr.

        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
        (WebKit::LibWebRTCNetwork::create):
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::networksChanged):
        (WebKit::WebRTCMonitor::sendOnMainThread): Deleted.
        * WebProcess/Network/webrtc/WebRTCMonitor.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::libWebRTCNetwork):
        * WebProcess/WebProcess.h:

2021-09-16  David Kilzer  <ddkilzer@apple.com>

        WebKit::WebProcessPool should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/230227>
        <rdar://problem/83067708>

        Reviewed by Darin Adler.

        To fix the bug, implement an Objective-C class named
        WKProcessPoolWeakObserver which contains an instance variable
        holding a WeakPtr<WebProcessPool>, and tell CFNotificationCenter
        to hold a weak reference to WKProcessPoolWeakObserver.

        Since WKProcessPoolWeakObserver is self-contained within the
        source file, it uses the NS_DIRECT_MEMBERS attribute since it
        does not require the overhead of dynamic Objective-C method
        dispatch.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (-[WKProcessPoolWeakObserver initWithWeakPtr:]): Add.
        (-[WKProcessPoolWeakObserver pool]): Add.
        - Implement WKProcessPoolWeakObserver class.
        - Note that init methods can never be marked as NS_DIRECT, and
          @property statements can't use NS_DIRECT in their declaration,
          so the @property is declared in a category which uses
          NS_DIRECT_MEMBERS.
        (WebKit::extractWebProcessPool): Add.
        - Static helper method for extracting RefPtr<WebProcessPool>
          from type-punned WKProcessPoolWeakObserver.
        (WebKit::WebProcessPool::backlightLevelDidChangeCallback):
        (WebKit::WebProcessPool::accessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::colorPreferencesDidChangeCallback):
        (WebKit::WebProcessPool::remoteWebInspectorEnabledCallback):
        - Clean up function parameter list.
        - Use extractWebProcessPool() helper method to get a
          RefPtr<WebProcessPool> from `observer`.
        (WebKit::WebProcessPool::addCFNotificationObserver): Add.
        (WebKit::WebProcessPool::removeCFNotificationObserver): Add.
        - Private helper methods to reduce duplicate code.
        - Use m_weakObserver for CFNotificationCenter observer and
          include _CFNotificationObserverIsObjC to fix the bug.
        (WebKit::WebProcessPool::registerNotificationObservers):
        - Make use of new addCFNotificationObserver() helper method.
        - Fixes use of static_cast<CFStringRef> to make code ready for
          ARC by using a __bridge cast or removing the static_cast when
          CFSTR() is used.
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        - Make use of new removeCFNotificationObserver() helper method.

        * UIProcess/WebProcessPool.h:
        - Add m_weakObserver instance variable to hold the
          WKProcessPoolWeakObserver object.
        (WebKit::WebProcessPool::addCFNotificationObserver): Add.
        (WebKit::WebProcessPool::removeCFNotificationObserver): Add.
        - Add declarations for new helper methods.
        (WebKit::WebProcessPool::backlightLevelDidChangeCallback):
        (WebKit::WebProcessPool::accessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::colorPreferencesDidChangeCallback):
        (WebKit::WebProcessPool::remoteWebInspectorEnabledCallback):
        - Clean up function parameter list.

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Support patterns with a wide gamut source painting into a display-p3 canvas
        https://bugs.webkit.org/show_bug.cgi?id=229023
        <rdar://problem/81828466>

        Reviewed by Sam Weinig.

        Patterns are sent to the GPU process using ShareableBitmaps created
        from ImageBuffers. Ensure we pass along the pattern source color space
        to ShareableBitmap::create.

        Tests: imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-canvas.html
               imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-pattern-image.html

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBuffer):

2021-09-16  Cameron McCormack  <heycam@apple.com>

        Support drawImage with a wide gamut image painting into a display-p3 canvas
        https://bugs.webkit.org/show_bug.cgi?id=229021
        <rdar://problem/81828450>

        Reviewed by Sam Weinig.

        ShareableBitmap is used to share image data used by drawImage() calls,
        from the Web process to the GPU process. This change makes
        ShareableBitmap create a CGBitmap with a color space matching the
        source NativeImage, if that is an RGB-based color space, or extended
        sRGB otherwise. This allows us to pass Adobe RGB, Display P3, etc.
        images to the GPU process without needing to convert color space,
        while still allowing for example CMYK JPEGs to be drawn correctly.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        * Shared/ShareableBitmap.h:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::validateConfiguration):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::validateConfiguration): Map the requested
        color space into one appropriate for the CGBitmap.
        (WebKit::colorSpace):
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::validateConfiguration):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::createShareableBitmapFromNativeImage): Pass in the color
        space of the NativeImage.

2021-09-16  Chris Dumez  <cdumez@apple.com>

        Stringify process termination reason in dispatchProcessDidTerminate logging
        https://bugs.webkit.org/show_bug.cgi?id=230361

        Reviewed by Geoffrey Garen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::processTerminationReasonToString):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):

2021-09-16  Chris Dumez  <cdumez@apple.com>

        Add violations reporting support for Cross-Origin-Embedder-Policy
        https://bugs.webkit.org/show_bug.cgi?id=230269

        Reviewed by Youenn Fablet.

        Add support for COEP inheritance violation reporting:
        - https://html.spec.whatwg.org/multipage/origin.html#check-a-navigation-response's-adherence-to-its-embedder-policy
        - https://html.spec.whatwg.org/multipage/origin.html#check-a-global-object's-embedder-policy
        - https://html.spec.whatwg.org/multipage/origin.html#queue-a-cross-origin-embedder-policy-inheritance-violation

        Add support for COEP CORP violation reporting:
        - https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check
        - https://fetch.spec.whatwg.org/#queue-a-cross-origin-embedder-policy-corp-violation-report

        Add support for Fetch destination="iframe" because the COEP test relied on it:
        - https://fetch.spec.whatwg.org/#concept-request-destination

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::performCORPCheck):
        (WebKit::NetworkLoadChecker::validateResponse):
        (WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::resourceLoadInfo):
        (WebKit::NetworkResourceLoader::shouldInterruptNavigationForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::shouldInterruptWorkerLoadForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendCOEPPolicyInheritenceViolation):
        (WebKit::WebPage::sendCOEPCORPViolation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-09-16  Tim Horton  <timothy_horton@apple.com>

        Adjust ARKIT_INLINE_PREVIEW* compile time flags
        https://bugs.webkit.org/show_bug.cgi?id=230332

        Reviewed by Sam Weinig.

        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:
        * UIProcess/ModelElementController.cpp:
        * UIProcess/ModelElementController.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        * UIProcess/ios/WKModelInteractionGestureRecognizer.h:
        * UIProcess/ios/WKModelInteractionGestureRecognizer.mm:
        * UIProcess/ios/WKModelView.h:
        * UIProcess/ios/WKModelView.mm:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
        Adopt the new name.

2021-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] test animations/steps-transform-rendering-updates.html fails
        https://bugs.webkit.org/show_bug.cgi?id=230307

        Reviewed by Carlos Alberto Lopez Perez.

        ThreadedDisplayRefreshMonitor is not setting isScheduled back to false when it's fired. That causes
        hasBeenRescheduled to be true and handleDisplayRefreshMonitorUpdate() is called with force repaint option, so we
        end up flushing layers on every display refresh update.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):

2021-09-15  Chris Dumez  <cdumez@apple.com>

        Implement network process crash recovery for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=230236

        Reviewed by Alex Christensen.

        Have the WebBroadcastChannelRegistry register its BroadcastChannels with the network
        process after a network process crash. This is useful so that cross-WebProcess
        communication can keep happening via existing BroadcastChannel after a network process
        crash.

        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.cpp:
        (WebKit::WebBroadcastChannelRegistry::networkProcessCrashed):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

2021-09-15  Devin Rousso  <drousso@apple.com>

        [Payment Request] Clean up some WKA hooks
        https://bugs.webkit.org/show_bug.cgi?id=230182
        <rdar://problem/78824639>

        Reviewed by Tim Horton.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::merge):
        (WebKit::PaymentAuthorizationPresenter::completePaymentMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingContactSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeCouponCodeChange):
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::merge):
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        Instead of using `#define`, create actual functions so that the code in WKA is cleaner.

2021-09-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Silence -Wswitch warning enumeration value ‘ExceededProcessCountLimit’ not handled in switch
        https://bugs.webkit.org/show_bug.cgi?id=230280

        Reviewed by Darin Adler.

        * UIProcess/API/glib/WebKitNavigationClient.cpp:

2021-09-15  Tim Horton  <timothy_horton@apple.com>

        Remove the "Replace WebKitAdditions in Framework Headers" build phase
        https://bugs.webkit.org/show_bug.cgi?id=230300

        Reviewed by Wenson Hsieh.

        * WebKit.xcodeproj/project.pbxproj:
        * mac/replace-webkit-additions-includes.py: Removed.
        As Wenson pointed out in bug 230198, this build phase is currently unused.
        It's also wasting a quarter of the WebKit-only null build time, so let's
        just remove it and hope we never need it again (but if we do, it's in the history!).
        This gets us down to 11 seconds on the same benchmark mentioned in r282367.

2021-09-14  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=230110

        Unreviewed non-unified build fixes.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PCM::NetworkLoader::start):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:
        * NetworkProcess/storage/OriginStorageManager.h:

2021-09-14  John Wilander  <wilander@apple.com>

        Rename RESOURCE_LOAD_STATISTICS to INTELLIGENT_TRACKING_PREVENTION
        https://bugs.webkit.org/show_bug.cgi?id=230279
        <rdar://problem/83118683>

        Reviewed by Darin Adler.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::updateClientSideCookiesAgeCap):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::clearPageSpecificData):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::restrictRequestReferrerToOriginIfNeeded):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::validateCacheEntryForMaxAgeCapValidation):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::invalidateAndCancel):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::storeRedirect):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        * NetworkProcess/cache/NetworkCacheEntry.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::NetworkDataTaskCurl):
        (WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):
        (WebKit::NetworkDataTaskCurl::blockCookies):
        (WebKit::NetworkDataTaskCurl::unblockCookies):
        (WebKit::NetworkDataTaskCurl::shouldBlockCookies):
        * NetworkProcess/curl/NetworkSessionCurl.cpp:
        (WebKit::NetworkSessionCurl::NetworkSessionCurl):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        * Shared/ResourceLoadStatisticsParameters.h:
        (WebKit::ResourceLoadStatisticsParameters::encode const):
        (WebKit::ResourceLoadStatisticsParameters::decode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode const):
        (WebKit::WebsiteData::decode):
        (WebKit::WebsiteData::isolatedCopy const):
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadedSubresourceDomains):
        (WKPageClearLoadedSubresourceDomains):
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveITPDataForDomain):
        (WKWebsiteDataStoreDoesStatisticsDomainIDExistInDatabase):
        (WKWebsiteDataStoreSetResourceLoadStatisticsEnabled):
        (WKWebsiteDataStoreIsStatisticsEphemeral):
        (WKWebsiteDataStoreSetResourceLoadStatisticsDebugModeWithCompletionHandler):
        (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode):
        (WKWebsiteDataStoreSetStatisticsLastSeen):
        (WKWebsiteDataStoreSetStatisticsMergeStatistic):
        (WKWebsiteDataStoreSetStatisticsExpiredStatistic):
        (WKWebsiteDataStoreSetStatisticsPrevalentResource):
        (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreDumpResourceLoadStatistics):
        (WKWebsiteDataStoreIsStatisticsPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder):
        (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo):
        (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction):
        (WKWebsiteDataStoreIsStatisticsOnlyInDatabaseOnce):
        (WKWebsiteDataStoreSetStatisticsGrandfathered):
        (WKWebsiteDataStoreIsStatisticsGrandfathered):
        (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo):
        (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom):
        (WKWebsiteDataStoreSetStatisticsCrossSiteLoadWithLinkDecoration):
        (WKWebsiteDataStoreSetStatisticsTimeToLiveUserInteraction):
        (WKWebsiteDataStoreStatisticsProcessStatisticsAndDataRecords):
        (WKWebsiteDataStoreStatisticsUpdateCookieBlocking):
        (WKWebsiteDataStoreSetStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WKWebsiteDataStoreSetStatisticsIsRunningTest):
        (WKWebsiteDataStoreSetStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WKWebsiteDataStoreSetStatisticsGrandfatheringTime):
        (WKWebsiteDataStoreSetStatisticsMaxStatisticsEntries):
        (WKWebsiteDataStoreSetStatisticsPruneEntriesDownTo):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStore):
        (WKWebsiteDataStoreStatisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WKWebsiteDataStoreStatisticsDeleteCookiesForTesting):
        (WKWebsiteDataStoreStatisticsHasLocalStorage):
        (WKWebsiteDataStoreSetStatisticsCacheMaxAgeCap):
        (WKWebsiteDataStoreStatisticsHasIsolatedSession):
        (WKWebsiteDataStoreSetResourceLoadStatisticsShouldDowngradeReferrerForTesting):
        (WKWebsiteDataStoreSetResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting):
        (WKWebsiteDataStoreSetResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
        (WKWebsiteDataStoreSetResourceLoadStatisticsToSameSiteStrictCookiesForTesting):
        (WKWebsiteDataStoreSetResourceLoadStatisticsFirstPartyHostCNAMEDomainForTesting):
        (WKWebsiteDataStoreSetResourceLoadStatisticsThirdPartyCNAMEDomainForTesting):
        (WKWebsiteDataStoreStatisticsResetToConsistentState):
        (WKWebsiteDataStoreGetAllStorageAccessEntries):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _seedResourceLoadStatisticsForTestingWithFirstParty:thirdParty:shouldScheduleNotification:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsDebugMode]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsDebugMode:]):
        (-[WKWebsiteDataStore _setResourceLoadStatisticsTestingCallback:]):
        (-[WKWebsiteDataStore _loadedSubresourceDomainsFor:completionHandler:]):
        (-[WKWebsiteDataStore _clearLoadedSubresourceDomainsFor:]):
        (-[WKWebsiteDataStore _getAllStorageAccessEntriesFor:completionHandler:]):
        (-[WKWebsiteDataStore _scheduleCookieBlockingUpdate:]):
        (-[WKWebsiteDataStore _logUserInteraction:completionHandler:]):
        (-[WKWebsiteDataStore _setPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _getIsPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _clearPrevalentDomain:completionHandler:]):
        (-[WKWebsiteDataStore _clearResourceLoadStatistics:]):
        (-[WKWebsiteDataStore _getResourceLoadStatisticsDataSummary:]):
        (-[WKWebsiteDataStore _isRelationshipOnlyInDatabaseOnce:thirdParty:completionHandler:]):
        (-[WKWebsiteDataStore _isRegisteredAsSubresourceUnderFirstParty:thirdParty:completionHandler:]):
        (-[WKWebsiteDataStore _statisticsDatabaseHasAllTables:]):
        (-[WKWebsiteDataStore _processStatisticsAndDataRecords:]):
        (-[WKWebsiteDataStore _setThirdPartyCookieBlockingMode:onlyOnSitesWithoutUserInteraction:completionHandler:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::isolatedCopy const):
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchDataAndApply):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
        (WebKit::WebsiteDataStore::resourceLoadStatisticsEnabled const):
        (WebKit::WebsiteDataStore::resourceLoadStatisticsDebugMode const):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
        (WebKit::WebsiteDataStore::isResourceLoadStatisticsEphemeral const):
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:
        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::cookies const):
        (WebKit::WebCookieJar::setCookies):
        (WebKit::WebCookieJar::cookiesEnabled const):
        (WebKit::WebCookieJar::cookieRequestHeaderFieldValue const):
        (WebKit::WebCookieJar::getRawCookies const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        (WebKit::WebProcess::setResourceLoadStatisticsEnabled):
        (WebKit::WebProcess::clearResourceLoadStatistics):
        (WebKit::WebProcess::flushResourceLoadStatistics):
        (WebKit::WebProcess::seedResourceLoadStatisticsForTesting):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-09-14  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix -Wredundant-move warnings
        https://bugs.webkit.org/show_bug.cgi?id=230282

        Reviewed by Alex Christensen.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<CString>::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::decode):

2021-09-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid computing post-layout EditorState data unless necessary
        https://bugs.webkit.org/show_bug.cgi?id=230204
        <rdar://problem/83078713>

        Reviewed by Devin Rousso.

        Add a new codepath on macOS that allows us to entirely avoid post-layout EditorState computation in the case
        where it's not needed for anything; in particular, unless the text touch bar may be presented or the UI delegate
        implements the `-webView:didChangeFontAttributes:` method, the post-layout portion of EditorState is not needed
        at all.

        See below for more details.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:

        Plumb a bit indicating whether user interaction is required in order to show the text touch bar. See
        `WebPage::shouldAvoidComputingPostLayoutDataForEditorState` below for more details.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::updateEditorStateAfterLayoutIfEditabilityChanged):

        When computing `EditorState.isContentEditable`, use VisibleSelection's `hasEditableStyle` method instead of
        `isContentEditable`. Unlike the latter, the former does not trigger style resolution.

        (WebKit::WebPage::didStartPageTransition):

        Make a slight adjustment to only set the `m_hasEverFocusedElementDueToUserInteractionSincePageTransition` bit if
        the user is actually interacting with text form control or editable element. This allows us to still avoid
        computing post-layout editor state data in cases where the user has clicked on non-editable elements on the
        page, such that text editing controls in the touch bar are still not being shown.

        (WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition):
        (WebKit::WebPage::sendEditorStateUpdate):

        Don't bother scheduling another post-layout EditorState in the case where post-layout data is missing, but we're
        avoiding post-layout data computation altogether due to `shouldAvoidComputingPostLayoutDataForEditorState`
        returning `true`.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::requiresPostLayoutDataForEditorState const):
        (WebKit::WebPage::shouldAvoidComputingPostLayoutDataForEditorState const):
        (WebKit::WebPage::platformNeedsLayoutForEditorState const): Deleted.

        Rename this to `requiresPostLayoutDataForEditorState`, to avoid some confusion with the new method,
        `shouldAvoidComputingPostLayoutDataForEditorState`. The former is a way for platforms to indicate that post-
        layout data *must* be included, even if layout is not up to date yet upon computing the EditorState. The latter
        is a way for platforms to indicate that we can completely avoid all post-layout editor state computation,
        regardless of whether or not layout is up to date.

        By default, if both of the above methods return `false`, we compute and include post-layout data only if layout
        is up-to-date when computing the EditorState, and schedule a subsequent "full" EditorState update after the
        next rendering update in the case where layout was *not* up-to-date already (indicated by the EditorState's
        `isMissingPostLayoutData` flag).

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requiresPostLayoutDataForEditorState const):
        (WebKit::WebPage::platformNeedsLayoutForEditorState const): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldAvoidComputingPostLayoutDataForEditorState const):

        Only return `true` here if the user interaction requirements for showing text editing controls on the touch bar
        have not been met, and the UI delegate method for observing font attributes is also not implemented by the
        client.

2021-09-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Enable IPCMessages debug logging for non-Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=230081
        <rdar://problem/82939596>

        Reviewed by Don Olmstead.

        * Platform/IPC/MessageArgumentDescriptions.h: Added some #if to
        align with the generated MessageArgumentDescriptions.cpp.

2021-09-14  Chris Dumez  <cdumez@apple.com>

        [Hardening] Validate IDBValue's blob paths in WebIDBServer::putOrAdd()
        https://bugs.webkit.org/show_bug.cgi?id=230233
        <rdar://79562514>

        Reviewed by Brady Eidson.

        When the SerializedScriptValue contains BlobURLs, IDBTransaction::putOrAddOnServer()
        calls SerializedScriptValue::writeBlobsToDiskForIndexedDB() before sending the
        WebIDBServer::PutOrAdd IPC to the network process. writeBlobsToDiskForIndexedDB()
        sends a NetworkProcessConnection::writeBlobsToTemporaryFilesForIndexedDB IPC to the
        network process and the network process will write the blobs to temporary files and
        then return the file paths to those temporary files to the WebProcess. The file paths
        are then stored inside the IDBValue object that gets sent in the WebIDBServer::PutOrAdd
        IPC.

        This patch hardens our IPC by validating in WebIDBServer::PutOrAdd() that the IDBValue's
        Blob file paths were indeed file paths previously created by the network process on behalf
        of the WebProcess sending the IPC. If it is not, we ignore the IPC.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::registerTemporaryBlobFilePaths):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFilesForIndexedDB):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFilesForIndexedDB):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFilesForIndexedDB):
        * WebProcess/Network/NetworkProcessConnection.h:

2021-09-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r274929): [CoordinatedGraphics] DrawingAreaCoordinatedGraphics::createDisplayRefreshMonitor is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=230214

        Reviewed by Adrian Perez de Castro.

        That means we use the right display refresh monitor in the threaded compositor but a different one for rendering
        update scheduler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::displayRefreshMonitorFactory const): Remove platform ifdef, DrawingArea
        unconditionally inherits from DisplayRefreshMonitorFactory and the default implementation of
        createDisplayRefreshMonitor() returns nullptr.

2021-09-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Reduce amount of IPC needed by BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=230181

        Reviewed by Alex Christensen.

        Reduce amount of IPC needed by BroadcastChannel for both registration / unregistration
        and communication. Each WebBroadcastChannelRegistry in the WebProcess now maintains
        a map of BroadcastChannels within the WebProcess. As a result, we are able to dispatch
        messages to other BroadcastChannels within the same process without going via the
        NetworkProcess.

        Also, the NetworkBroadcastChannelRegistry on the NetworkProcess side no longer needs
        to store individual BroadcastChannelIdentifiers. It merely needs to know which
        WebProcesses have one or more BroadcastChannels for a given ClientOrigin / name.
        When NetworkBroadcastChannelRegistry::postMessage() is called, we no longer send
        IPC to the source process in case there are other BroadcastChannels than the source
        with the given ClientOrigin / name in that process. Also, if there is more than
        one BroadcastChannel for the given ClientOrigin / name within a given destination
        WebProcess, we now send a single IPC message instead of sending one per BroadcastChannel.

        * NetworkProcess/NetworkBroadcastChannelRegistry.cpp:
        (WebKit::NetworkBroadcastChannelRegistry::registerChannel):
        (WebKit::NetworkBroadcastChannelRegistry::unregisterChannel):
        (WebKit::NetworkBroadcastChannelRegistry::postMessage):
        (WebKit::NetworkBroadcastChannelRegistry::removeConnection):
        * NetworkProcess/NetworkBroadcastChannelRegistry.h:
        * NetworkProcess/NetworkBroadcastChannelRegistry.messages.in:
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.cpp:
        (WebKit::WebBroadcastChannelRegistry::registerChannel):
        (WebKit::WebBroadcastChannelRegistry::unregisterChannel):
        (WebKit::WebBroadcastChannelRegistry::postMessage):
        (WebKit::WebBroadcastChannelRegistry::postMessageLocally):
        (WebKit::WebBroadcastChannelRegistry::postMessageToRemote):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.h:
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.messages.in:

2021-09-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor -[WKWebViewConfiguration _setRequiresUserActionForEditingControlsManager:] to use API::PageConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=230238
        rdar://83078713

        Reviewed by Tim Horton.

        Move the `_requiresUserActionForEditingControlsManager` bit out of WebViewImpl and into API::PageConfiguration.
        This makes it easier to introduce state in WebPage that keeps track of whether or not user action is required
        for showing text editing controls on the touch bar, since we can fetch the (unchanging) state off of
        API::PageConfiguration, and propagate it to the web process via WebPageCreationParameters.

        No change in behavior.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::requiresUserActionForEditingControlsManager const):
        (API::PageConfiguration::setRequiresUserActionForEditingControlsManager):
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _requiresUserActionForEditingControlsManager]):
        (-[WKWebViewConfiguration _setRequiresUserActionForEditingControlsManager:]):

        Call into API::PageConfiguration instead.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _requiresUserActionForEditingControlsManager]): Deleted.
        (-[WKView _setRequiresUserActionForEditingControlsManager:]): Deleted.

        Additionally delete this private method on WKView, which was only used by Safari on macOS, back before Safari
        used WKWebView. There are currently no internal clients of this SPI method.

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::setRequiresUserActionForEditingControlsManager): Deleted.
        (WebKit::WebViewImpl::requiresUserActionForEditingControlsManager const): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::requiresUserActionForEditingControlsManager const):

        Turn this into a helper method that just asks the API::PageConfiguration.

        (WebKit::WebViewImpl::updateTouchBar):

2021-09-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] -toggleAutomaticSpellingCorrection: menu item validation shouldn't require post-layout editor state
        https://bugs.webkit.org/show_bug.cgi?id=230205

        Reviewed by Darin Adler.

        In preparation for https://webkit.org/b/230204, refactor code on macOS that determines whether or not the
        "Correct Spelling Automatically" menu bar item should be enabled, such that it doesn't require post-layout
        editor state data. This is requisite to avoiding post-layout editor state computation altogether on macOS, when
        the touch bar is either unavailable, or hasn't ever been shown in the context of text editing. See below for
        more details.

        We also take this opportunity to remove support for the unused _WKSelectionAttributeAtStartOfSentence SPI value
        in _WKSelectionAttributes, which was originally intended for use in Mail compose in WebKit2 but seems to have
        been obviated by the ability to swipe horizontally on the custom input accessory view in Mail compose to switch
        between text candidates and the text formatting options.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        (WebKit::operator<<):

        Remove the `atStartOfSentence` bit on EditorState's post-layout data that was only used to implement the
        _WKSelectionAttributeAtStartOfSentence SPI flag value, and also move the `canEnableAutomaticSpellingCorrection`
        bit out of post-layout data, and into the EditorState struct. Importantly, computing this bit does not require
        or trigger layout, and this refactoring will allow us to completely forgo post-layout data on configurations
        that do not require it (i.e. when the text touch bar is not active).

        * Shared/EditorState.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (selectionAttributes):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Remove an unused value, _WKSelectionAttributeAtStartOfSentence, in the _WKSelectionAttributes SPI flag.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getPlatformEditorState const):

2021-09-13  Alex Christensen  <achristensen@webkit.org>

        Add unit test that uses PCM daemon
        https://bugs.webkit.org/show_bug.cgi?id=230191

        Reviewed by Chris Dumez.

        I make a way to specify what mach service to connect to,
        then I temporarily register an executable with launchd to provide that mach service,
        then I run the test communicating with that executable.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::managerOrProxy):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp:
        (WebKit::PCM::Connection::Connection):
        (WebKit::PCM::Connection::send const):
        (WebKit::PCM::Connection::sendWithReply const):
        (WebKit::PCM::Connection::connectionToDaemon): Deleted.
        (WebKit::PCM::Connection::send): Deleted.
        (WebKit::PCM::Connection::sendWithReply): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::managerPointer):
        (WebKit::PCM::initializePCMStorageInDirectory):
        (WebKit::PCM::daemonManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::sendMessage const):
        (WebKit::PCM::ManagerProxy::sendMessageWithReply const):
        (WebKit::PCM::ManagerProxy::ManagerProxy):
        (WebKit::PCM::sendMessage): Deleted.
        (WebKit::PCM::sendMessageWithReply): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementDaemonConnectionCocoa.mm:
        (WebKit::PCM::Connection::Connection):
        (WebKit::PCM::Connection::initializeConnectionIfNeeded const):
        (WebKit::PCM::Connection::send const):
        (WebKit::PCM::Connection::sendWithReply const):
        (WebKit::PCM::Connection::connectionToDaemon): Deleted.
        (WebKit::PCM::Connection::send): Deleted.
        (WebKit::PCM::Connection::sendWithReply): Deleted.
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::startListeningForMachServiceConnections):
        (WebKit::registerScheduledActivityHandler):
        (WebKit::PCMDaemonMain):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration pcmMachServiceName]):
        (-[_WKWebsiteDataStoreConfiguration setPCMMachServiceName:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::setPCMMachServiceName):
        (WebKit::WebsiteDataStoreConfiguration::pcmMachServiceName const):

2021-09-13  Tim Horton  <timothy_horton@apple.com>

        Postprocess framework headers in parallel
        https://bugs.webkit.org/show_bug.cgi?id=230198

        Reviewed by Wenson Hsieh.

        * mac/postprocess-framework-headers.sh:
        Previously, the framework header postprocessing step operated serially
        on each of our 665 framework headers; not doing a particularly large
        amount of work on any, but still, 20 wall clock ms * 665 headers is
        a good chunk of time.

        Instead, run them in parallel and wait on the result.

        On a 10 core machine, this better than halves the time of a WebKit-only
        null build (from 36 seconds to 15).

        This is definitely not an ideal solution; we're still wasting a ton
        of time launching processes; it's likely possible to get further wins
        here; on the other hand, header postprocessing only takes 2 seconds now.

2021-09-13  Chris Dumez  <cdumez@apple.com>

        Relax BroadcastChannel origin partitioning if iframe has storage access
        https://bugs.webkit.org/show_bug.cgi?id=230164

        Reviewed by Alex Christensen.

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

2021-09-13  Chris Dumez  <cdumez@apple.com>

        Crash under WebPage::runJavaScript()
        https://bugs.webkit.org/show_bug.cgi?id=230223
        <rdar://80172436>

        Reviewed by Brady Eidson.

        The resolveFunction() was capturing `frame = makeRef(frame)` and then calling `frame->coreFrame()->script()`.
        This would lead to a null dereference crash in the case where the core frame gets destroyed before the JS
        promise gets resolved. Protecting the WebFrame does not keep the core Frame alive as WebFrame::m_coreFrame
        is merely a WeakPtr. To address the issue, the lambda now also protects the core frame and uses it to get
        the script controller.

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

2021-09-13  Per Arne Vollan  <pvollan@apple.com>

        Send preference updates to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=230159
        <rdar://81049367>

        Reviewed by Brent Fulgham.

        Like the WebContent process, the GPU process should also receive preference updates since it is blocking the preference service in the sandbox.
        The common code to set a preference is being moved to the AuxiliaryProcess base class, so that also the GPU process can make use of it. When
        the UI process is sending preference update messages to all the WebContent processes, it will now also send to the GPU process.

        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/cocoa/GPUProcessCocoa.mm:
        (WebKit::GPUProcess::notifyPreferencesChanged):
        * Shared/AuxiliaryProcess.h:
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::decodePreferenceValue):
        (WebKit::AuxiliaryProcess::setPreferenceValue):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::notifyPreferencesChanged):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::handlePreferenceChange):
        (WebKit::WebProcess::notifyPreferencesChanged):
        (WebKit::setPreferenceValue): Deleted.

2021-09-13  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make PDFs loaded via <embed> accessible
        https://bugs.webkit.org/show_bug.cgi?id=229556

        Reviewed by Chris Fleizach and Andres Gonzalez.

        This patch makes PDFs loaded in `<embed>` elements accessible to
        clients by exposing the underlying `WKPDFPluginAccessibilityObject`
        created by PDF plugins.

        Full-frame PDF accessibility support (e.g. file:///path/to/example.pdf) was
        implemented in https://bugs.webkit.org/show_bug.cgi?id=170589, but this
        wasn't sufficient for PDFs loaded in `<embed>`s.

        This patch only implements `<embed>` PDF support for Mac - iOS support will
        need to follow in a separate patch.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject initWithPDFPlugin:andElement:]):
        Change this method to also accept the `HTMLPlugInElement` that the plugin
        originates from.
        (-[WKPDFPluginAccessibilityObject parent]):
        Added. Returns the cached parent if present, otherwises tries to cache
        the parent in the form of the `HTMLPlugInElement` that the plugin
        originates from.
        (-[WKPDFPluginAccessibilityObject setParent:]): Added.
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        Query against newly added `parent` getter when fulfilling attribute
        value requests.
        (-[WKPDFPluginAccessibilityObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WKPDFPluginAccessibilityObject accessibilityHitTestIntPoint:]): Added.
        (-[WKPDFPluginAccessibilityObject accessibilityHitTest:]):
        Changed to convert `NSPoint` to `WebCore::IntPoint` and call
        `accessibilityHitTestIntPoint`.
        (WebKit::PDFPlugin::create):
        Add parameter to accept the `HTMLPlugInElement` that the plugin
        originates from.
        (WebKit::PDFPlugin::PDFPlugin):
        Add parameter to accept the `HTMLPlugInElement` that the plugin
        originates from.
        (WebKit::PDFPlugin::accessibilityHitTest const): Added.
        (-[WKPDFPluginAccessibilityObject initWithPDFPlugin:]): Deleted.

        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::accessibilityHitTest const): Added.
        (WebKit::Plugin::accessibilityObject const): Change the return type to
        `id` as that is more common practice.

        * WebProcess/Plugins/PluginView.h:
        Add `id accessibilityHitTest` and change `accessibilityObject()`
        to return `id`.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::accessibilityObject const): Change return type to
        `id`.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Pass the originating `pluginElement` to `PDFPlugin::create`.

2021-09-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r282320 - avoid a potential memory leak
        https://bugs.webkit.org/show_bug.cgi?id=230187
        <rdar://problem/81436658>

        Reviewed by Myles C. Maxfield.

        Use `adoptCF` to prevent leaking the last resort font descriptor.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::createCTFont):

2021-09-13  David Kilzer  <ddkilzer@apple.com>

        Linker warnings for WKWebViewConfiguration.limitsNavigationsToAppBoundDomains property methods
        <https://webkit.org/b/230190>

        Reviewed by Kate Cheney.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration limitsNavigationsToAppBoundDomains]):
        (-[WKWebViewConfiguration setLimitsNavigationsToAppBoundDomains:]):
        - Move methods from category WKWebViewConfiguration (WKPrivate) to
          @implementation WKWebViewConfiguration to fix the warnings.

2021-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Drawing the rounded system ui font into canvas causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=230187
        <rdar://problem/81436658>

        Reviewed by Wenson Hsieh.

        It turns out that r281792 didn't do the right thing. It was trying to differentiate between
        system fonts and installed fonts by looking at various values in the font's attribute dictionary.
        However, the right way to do this is to treat the dictionary as opaque, and let
        kCTFontOptionsSystemUIFont do the heavy lifting to make sure the font round-trips properly.

        Test: fast/text/canvas-fonts.html

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::createCTFont):
        (IPC::findFontDescriptor):

2021-09-12  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r280758): WebKit project won't open in Xcode 11.4

        Unreviewed Xcode project fix.

        * WebKit.xcodeproj/project.pbxproj:
        - Change objectVersion back to 52.  There was no need to make
          this change in the original patch, and other projects use even
          older values for objectVersion.  Found by `git bisect`.

2021-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove support for -[WKWebView _needsSiteSpecificViewportQuirks]
        https://bugs.webkit.org/show_bug.cgi?id=230193

        Reviewed by Tim Horton.

        This SPI is no longer needed; for the brief moment it existed, it was only used to allow Safari's lowered bar
        (which previously overlapped page content) to additionally apply obscured bottom insets on a handful of
        webpages.

        This method has no internal clients (including Safari).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _needsSiteSpecificViewportQuirks]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessTermination):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:

2021-09-11  David Kilzer  <ddkilzer@apple.com>

        CFNotificationCenterAddObserver() should use weak observers
        <https://webkit.org/b/230168>
        <rdar://problem/82987695>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (hardwareKeyboardAvailabilityChangedCallback):
        - Use RetainPtr to store `observer` for the duration of the
          function, and add an early return if it is nil.
        (-[WKWebView _initializeWithConfiguration:]):
        - Use _CFNotificationObserverIsObjC to fix the bug.
        - Extract local variables and change notificationName cast to be
          ARC-ready.  Remove notificationName from autoreleasePool.
        (-[WKWebView dealloc]):
        - Extract local variable and change notificationName cast to be
          ARC-ready.  Remove notificationName from autoreleasePool.

2021-09-11  Philippe Normand  <pnormand@igalia.com>

        [GLIB] MediaSession is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=217991
        <rdar://problem/70740119>

        Reviewed by Michael Catanzaro.

        Pass Application name and unique ID from the UIProcess to the WebProcess in WPE and GTK
        ports. The Bubblewrap launcher was also adapted to allow DBus MPRIS name ownership in the
        sandboxed WebProcess.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::applicationId):
        (WebKit::createFlatpakInfo):
        (WebKit::XDGDBusProxyLauncher::launch):
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-09-10  Chris Dumez  <cdumez@apple.com>

        Implement navigation reporting for Cross-Origin-Opener-Policy
        https://bugs.webkit.org/show_bug.cgi?id=230046

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):
        Now that we may abort expired loaders that are cached on the NetworkSession
        (because awaiting transfer to another web process connection), we would hit
        this assertion because the loader is not associated with this connection
        anymore at the point it is adopted. For this reason, I silenced this
        assertion.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::CachedNetworkResourceLoader::expirationTimerFired):
        Abort the loader before destroying it to avoid hitting an assertion in the
        destructor (loaders cannot be loading at the point they are destroyed).

2021-09-10  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Support running applications with ENABLE_STATIC_JSC=ON
        https://bugs.webkit.org/show_bug.cgi?id=230170

        Reviewed by Ross Kirsling.

        Updating loading code to not load libJavaScriptCore shared library
        if we are using a static version.

        * NetworkProcess/EntryPoint/playstation/NetworkProcessMain.cpp:
        * WebProcess/EntryPoint/playstation/WebProcessMain.cpp:

2021-09-10  Per Arne  <pvollan@apple.com>

        [macOS] Close XPC connection before entering the WP sandbox
        https://bugs.webkit.org/show_bug.cgi?id=230120
        <rdar://82097909>

        Reviewed by Tim Horton.

        On macOS, close XPC connection before entering the WebContent process' sandbox.

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

2021-09-10  Per Arne Vollan <pvollan@apple.com>

        [macOS] Use macro to close XPC connection
        https://bugs.webkit.org/show_bug.cgi?id=230120
        <rdar://82097909>

        Reviewed by Brent Fulgham.

        On macOS, use macro to close XPC connection before entering the sandbox.

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

2021-09-10  Alex Christensen  <achristensen@webkit.org>

        Add infrastructure to allow TLS during PCM tests
        https://bugs.webkit.org/show_bug.cgi?id=230137

        Reviewed by Chris Dumez.

        We were using NetworkSessionCocoa::allowsSpecificHTTPSCertificateForHost but that doesn't work when we are in a daemon,
        where there is no NetworkSession or NetworkSessionCocoa.  We needed a new SPI for setting the test TLS certificates wherever
        the networking is being done.

        I also found that we were unnecessarily pinging example.com when running these unit tests.  I added an early return to prevent that
        when running tests with a local server.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setAllowsAnySSLCertificateForWebSocket):
        (WebKit::NetworkProcess::allowTLSCertificateChainForLocalPCMTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::allowTLSCertificateChainForLocalPCMTesting):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.cpp:
        (WebKit::PCM::Decoder::~Decoder):
        (WebKit::PCM::Decoder::decodeFixedLengthReference):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::allowTLSCertificateChainForLocalPCMTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
        (WebKit::PCM::messageTypeSendsReply):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
        (WebKit::PCM::ManagerProxy::allowTLSCertificateChainForLocalPCMTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PCM::NetworkLoader::allowTLSCertificateChainForLocalPCMTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm:
        (allowedLocalTestServerTrust):
        (trustsServerForLocalTests):
        (-[WKNetworkSessionDelegateAllowingOnlyNonRedirectedJSON URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::PCM::NetworkLoader::allowTLSCertificateChainForLocalPCMTesting):
        (WebKit::PCM::NetworkLoader::start):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost): Deleted.
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost): Deleted.
        * Platform/IPC/ArgumentCoders.h:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm:
        (WebKit::startListeningForMachServiceConnections):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        * Shared/glib/ArgumentCodersGLib.cpp:
        * Shared/glib/ArgumentCodersGLib.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::encode):
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<SerializedPlatformDataCueValue>::decodePlatformData):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _allowTLSCertificateChain:forHost:]):
        (-[WKWebsiteDataStore _trustServerForLocalPCMTesting:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkit_web_context_allow_tls_certificate_for_host):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::allowSpecificHTTPSCertificateForHost):
        (WebKit::WebsiteDataStore::allowTLSCertificateChainForLocalPCMTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-09-10  Youenn Fablet  <youenn@apple.com>

        Use RTCErrorEvent for data channel error event
        https://bugs.webkit.org/show_bug.cgi?id=230090

        Reviewed by Eric Carlson.

        Add support for transfered data chnnel by piping error info to the transfered data channel.

        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.cpp:
        (WebKit::RTCDataChannelRemoteManagerProxy::detectError):
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.h:
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.messages.in:
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::detectError):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::connectToSource):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didDetectError):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.h:
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.messages.in:

2021-09-09  Alex Christensen  <achristensen@webkit.org>

        Modernize CertificateInfo decoder
        https://bugs.webkit.org/show_bug.cgi?id=230125

        Reviewed by Chris Dumez.

        Return std::optional instead of bool.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::ArgumentCoder<RetainPtr<CFTypeRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFArrayRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFBooleanRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFDataRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFDateRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFDictionaryRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFNumberRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFStringRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CFURLRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<CGColorSpaceRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<SecCertificateRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<SecKeychainItemRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<SecAccessControlRef>>::decode):
        (IPC::ArgumentCoder<RetainPtr<SecTrustRef>>::decode):
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/curl/WebCoreArgumentCodersCurl.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::decode):

2021-09-09  Ben Nham  <nham@apple.com>

        Preconnected socket is sometimes not used for initial request
        https://bugs.webkit.org/show_bug.cgi?id=229686

        Reviewed by Alex Christensen.

        In the previous release, we preconnected to the main resource origin early in page load from
        UIProcess to save ~10-15 ms per page load (https://bugs.webkit.org/show_bug.cgi?id=204992).
        The savings comes from the fact that there's some latency in initiating the request in
        WebProcess and waiting for the nav delegate reply in UIProcess. We hide that latency by
        having the eventual main resource request reuse the early preconnected socket.

        However, this optimization doesn't work for connections to known HTTP/1.1 origins due to
        CFNetwork's in-memory cache of known HTTP/1.1 origins. If an origin is in this cache, and
        a preconnect is still in flight, then the network stack will go wide immediately and issue
        the main resource request on a new socket rather than trying to wait for the preconnect to
        finish and reuse the preconnected socket. Thus the preconneted socket just goes to waste.
        This can also cause issues with single-threaded web servers that serve only one request at
        a time, as the main resource request can get head-of-line blocked by the preconnect that
        is wasted.

        To work around this, this patch tracks a small number of known HTTP/1.1 origins in memory.
        If there is a pending preconnect to an HTTP/1.1 origin and a main resource request to that
        origin comes in, then we block the request from going out until the preconnect finishes.
        This allows the main resource request to utilize the preconnected socket.

        This is worth ~1.25%-2.5% on PLT5 depending on device.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didCompleteWithError):
        * NetworkProcess/NetworkLoadScheduler.cpp:
        (WebKit::NetworkLoadScheduler::schedule):
        (WebKit::NetworkLoadScheduler::unschedule):
        (WebKit::NetworkLoadScheduler::scheduleLoad):
        (WebKit::NetworkLoadScheduler::unscheduleLoad):
        (WebKit::NetworkLoadScheduler::scheduleMainResourceLoad):
        (WebKit::NetworkLoadScheduler::unscheduleMainResourceLoad):
        (WebKit::NetworkLoadScheduler::startedPreconnectForMainResource):
        (WebKit::NetworkLoadScheduler::finishedPreconnectForMainResource):
        (WebKit::NetworkLoadScheduler::maybePrunePreconnectInfo):
        (WebKit::NetworkLoadScheduler::isOriginHTTP1X):
        (WebKit::NetworkLoadScheduler::updateOriginProtocolInfo):
        * NetworkProcess/NetworkLoadScheduler.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        * NetworkProcess/PreconnectTask.cpp:
        (WebKit::PreconnectTask::PreconnectTask):
        (WebKit::PreconnectTask::setTimeout):
        (WebKit::PreconnectTask::start):
        * NetworkProcess/PreconnectTask.h:

2021-09-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Mac Catalyst] Korean characters do not combine correctly in editable fields in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=230122
        rdar://79062204

        Reviewed by Devin Rousso.

        When using Korean input method (e.g. 2-set Korean) to type into editable input fields in WKWebView on Catalyst,
        character combination is broken. While this is partly due to a WebKit-specific UIKit bug (see rdar://82938391),
        this is also broken due to the fact that WKContentView reports a UIWKAutocorrectionContext with a
        `contextBeforeSelection` that starts with a newline (\n); this causes UIKit to believe that the text selection
        range when a single character has been typed is `NSRange { 2, 0 }` instead of `NSRange { 1, 0 }`, due to the
        extra newline. This subsequently causes character combination logic to proceed with a range that is off by one
        character, which leads to characters not being combined (or the wrong characters being combined).

        To address this, we simply avoid including the leading newline in the case where the starting position for the
        "context before selection" is exactly at the first position inside the editable root.

        Test: AutocorrectionTests.AutocorrectionContextDoesNotIncludeNewlineInTextField

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

        Also drive-by fix a typo in "minContextLenght" while I'm here, and rename `currentPosition` to
        `contextStartPosition`, to better describe the purpose of this local variable.

2021-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Enable IPCMessages debug logging for non-Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=230081

        Reviewed by Alex Christensen.

        r282177 temporarily disabled IPCMessages debug logging for
        non-Cocoa ports because the generated
        MessageArgumentDescriptions.cpp couldn't compile for them. Then,
        r282190 fixed the problem. Enable it.

        * Platform/IPC/HandleMessage.h:
        (IPC::logMessageImpl): Reverted the change of r282177 to enable the logging.
        (IPC::logReply): Ditto.
        * Scripts/webkit/messages.py:
        (generate_message_argument_description_implementation):
        ENABLE(IPC_TESTING_API) isn't enabled for non-Cocoa ports yet.
        Changed the condition.
        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp: Updated
        this test expectation.

2021-09-09  Alex Christensen  <achristensen@webkit.org>

        Add PrivateClickMeasurement daemon
        https://bugs.webkit.org/show_bug.cgi?id=230052

        Reviewed by Chris Dumez.

        This adds the infrastructure to use a daemon instead of the network process to handle PrivateClickMeasurement.
        It does not start using the daemon yet, so there is no change in behavior.
        I made a new class PCM::ManagerInterface which can either be a PrivateClickMeasurementManager or a PCM::ManagerProxy,
        which would send messages to the daemon instead of doing the work locally.
        I implemented the encoding and decoding of parameters using some of the IPC encoding templates.
        I have an entry point for an executable but no executable yet.
        I have verified that EventAttribution unit tests pass when using the daemon, so the infrastructure is good.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::pcmStoreDirectory): Deleted.
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::privateClickMeasurement):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp: Added.
        (WebKit::PCM::Connection::connectionToDaemon):
        (WebKit::PCM::Connection::send):
        (WebKit::PCM::Connection::sendWithReply):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.h: Added.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.cpp: Added.
        (WebKit::PCM::DaemonClient::loadFromNetwork):
        (WebKit::PCM::DaemonClient::broadcastConsoleMessage):
        (WebKit::PCM::DaemonClient::featureEnabled const):
        (WebKit::PCM::DaemonClient::debugModeEnabled const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.h: Added.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.cpp: Added.
        (WebKit::PCM::Decoder::bufferIsLargeEnoughToContainBytes const):
        (WebKit::PCM::Decoder::decodeFixedLengthData):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDecoder.h: Added.
        (WebKit::PCM::Decoder::Decoder):
        (WebKit::PCM::Decoder::operator>>):
        (WebKit::PCM::Decoder::bufferIsLargeEnoughToContain const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEncoder.cpp: Added.
        (WebKit::PCM::Encoder::encodeFixedLengthData):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEncoder.h: Added.
        (WebKit::PCM::Encoder::operator<<):
        (WebKit::PCM::Encoder::encode):
        (WebKit::PCM::Encoder::takeBuffer):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp: Added.
        (WebKit::PCM::MessageInfo::toStringForTesting::encodeReply):
        (WebKit::PCM::manager):
        (WebKit::PCM::handlePCMMessage):
        (WebKit::PCM::handlePCMMessageWithReply):
        (WebKit::PCM::decodeMessageAndSendToManager):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h: Added.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp: Added.
        (WebKit::PCM::sendMessage):
        (WebKit::PCM::ReplyCaller<>::callReply):
        (WebKit::PCM::ReplyCaller<String>::callReply):
        (WebKit::PCM::sendMessageWithReply):
        (WebKit::PCM::ManagerProxy::storeUnattributed):
        (WebKit::PCM::ManagerProxy::handleAttribution):
        (WebKit::PCM::ManagerProxy::clear):
        (WebKit::PCM::ManagerProxy::clearForRegistrableDomain):
        (WebKit::PCM::ManagerProxy::migratePrivateClickMeasurementFromLegacyStorage):
        (WebKit::PCM::ManagerProxy::toStringForTesting const):
        (WebKit::PCM::ManagerProxy::setOverrideTimerForTesting):
        (WebKit::PCM::ManagerProxy::setTokenPublicKeyURLForTesting):
        (WebKit::PCM::ManagerProxy::setTokenSignatureURLForTesting):
        (WebKit::PCM::ManagerProxy::setAttributionReportURLsForTesting):
        (WebKit::PCM::ManagerProxy::markAllUnattributedAsExpiredForTesting):
        (WebKit::PCM::ManagerProxy::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::PCM::ManagerProxy::setEphemeralMeasurementForTesting):
        (WebKit::PCM::ManagerProxy::setPCMFraudPreventionValuesForTesting):
        (WebKit::PCM::ManagerProxy::startTimerImmediatelyForTesting):
        (WebKit::PCM::ManagerProxy::destroyStoreForTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h: Added.
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementDaemonConnectionCocoa.mm: Added.
        (WebKit::PCM::Connection::Connection):
        (WebKit::PCM::Connection::connectionToDaemon):
        (WebKit::PCM::dictionaryFromMessage):
        (WebKit::PCM::Connection::send):
        (WebKit::PCM::Connection::sendWithReply):
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.h: Added.
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementXPCUtilities.mm: Added.
        (WebKit::PCM::addVersionAndEncodedMessageToDictionary):
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Platform/IPC/ArgumentCoder.h:
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::decodeStringText):
        (IPC::ArgumentCoder<String>::decode):
        * Platform/IPC/ArgumentCoders.h:
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.h: Added.
        * Shared/EntryPointUtilities/Cocoa/Daemon/PCMDaemonEntryPoint.mm: Added.
        (WebKit::peers):
        (WebKit::CompletionHandler<void):
        (WebKit::connectionEventHandler):
        (WebKit::startListeningForMachServiceConnections):
        (WebKit::registerScheduledActivityHandler):
        (WebKit::enterSandbox):
        (WebKit::PCMDaemonMain):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-09  Sihui Liu  <sihui_liu@apple.com>

        Address post-commit comments on r282130 (Add basic support for Storage API)
        https://bugs.webkit.org/show_bug.cgi?id=230059

        Reviewed by Youenn Fablet.

        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::localOriginStorageManager):

2021-09-09  Chris Dumez  <cdumez@apple.com>

        Implement a WebProcess cap
        https://bugs.webkit.org/show_bug.cgi?id=230067
        <rdar://79479244>

        Reviewed by Geoffrey Garen.

        Implement a WebProcess cap to avoid getting into a state where we run out of resources and crash in various ways.
        The current limit is 400 and can be changed via an SPI. The limit is per UIProcess (not per process pool).
        When we try and launch a new WebProcess and the limit has been reached, we terminate the least recently used
        WebProcess to avoid going over the limit.

        * Shared/ProcessTerminationReason.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _setWebProcessCountLimit:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::wkProcessTerminationReason):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::shouldReloadAfterProcessTermination):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setProcessCountLimit):
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        (WebKit::WebProcessProxy::markProcessAsRecentlyUsed):
        * UIProcess/WebProcessProxy.h:

2021-09-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the Mac Catalyst build after r282191
        https://bugs.webkit.org/show_bug.cgi?id=230037

        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:

        Update some logic that's guarded by ENABLE(PLATFORM_DRIVEN_TEXT_CHECKING) to use "->" for accessing methods on
        Ref and CheckedRef, rather than ".".

        (WebKit::TextCheckingControllerProxy::rangeAndOffsetRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::removeAnnotationRelativeToSelection):

2021-09-09  Youenn Fablet  <youenn@apple.com>

        Categorize WebRTC TCP nw connections like done for WebRTC UDP nw connections
        https://bugs.webkit.org/show_bug.cgi?id=229801

        Reviewed by Eric Carlson.

        Move NetworkRTCUDPSocketCocoa tracker related code to its own routine in NetworkRTCUtilitiesCocoa.
        Make use of that routine in NetworkRTCTCPSocketCocoa.
        To do so, we need to pass more information when creating a client TCP socket from WebProcess to NetworkProcess.
        Manually tested.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket):
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
        (WebKit::isKnownTracker): Deleted.
        * NetworkProcess/webrtc/NetworkRTCUtilitiesCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCUtilitiesCocoa.mm:
        (WebKit::setNWParametersTrackerOptions):
        (WebKit::isKnownTracker):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::CreateClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

2021-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy CheckedRef on FocusController
        https://bugs.webkit.org/show_bug.cgi?id=230037

        Reviewed by Wenson Hsieh.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameFocus):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityFocusedObject):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::focusPluginElement):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::changeWordCase):
        * WebProcess/WebPage/Cocoa/TextCheckingControllerProxy.mm:
        (WebKit::TextCheckingControllerProxy::rangeAndOffsetRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::replaceRelativeToSelection):
        (WebKit::TextCheckingControllerProxy::removeAnnotationRelativeToSelection):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPage::insertDictatedTextAsync):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::showFindIndicatorInSelection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::changeFontAttributes):
        (WebKit::WebPage::changeFont):
        (WebKit::WebPage::updateEditorStateAfterLayoutIfEditabilityChanged):
        (WebKit::WebPage::executeEditingCommand):
        (WebKit::WebPage::setEditable):
        (WebKit::WebPage::increaseListLevel):
        (WebKit::WebPage::decreaseListLevel):
        (WebKit::WebPage::changeListType):
        (WebKit::WebPage::setBaseWritingDirection):
        (WebKit::WebPage::isEditingCommandEnabled):
        (WebKit::WebPage::contextMenuForKeyEvent):
        (WebKit::WebPage::handleKeyEventByRelinquishingFocusToChrome):
        (WebKit::WebPage::validateCommand):
        (WebKit::WebPage::requestFontAttributesAtSelectionStart):
        (WebKit::WebPage::centerSelectionInVisibleArea):
        (WebKit::WebPage::insertNewlineInQuotedContent):
        (WebKit::WebPage::viewWillStartLiveResize):
        (WebKit::WebPage::viewWillEndLiveResize):
        (WebKit::WebPage::setInitialFocus):
        (WebKit::WebPage::getSelectionOrContentsAsString):
        (WebKit::WebPage::advanceToNextMisspelling):
        (WebKit::WebPage::hasRichlyEditableSelection const):
        (WebKit::WebPage::changeSpellingToWord):
        (WebKit::WebPage::uppercaseWord):
        (WebKit::WebPage::lowercaseWord):
        (WebKit::WebPage::capitalizeWord):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::restoreSelectionInFocusedEditableElement):
        (WebKit::WebPage::handleAlternativeTextUIResult):
        (WebKit::WebPage::setCompositionForTesting):
        (WebKit::WebPage::hasCompositionForTesting):
        (WebKit::WebPage::confirmCompositionForTesting):
        (WebKit::WebPage::setTextAsync):
        (WebKit::WebPage::insertTextAsync):
        (WebKit::WebPage::hasMarkedText):
        (WebKit::WebPage::getMarkedRangeAsync):
        (WebKit::WebPage::getSelectedRangeAsync):
        (WebKit::WebPage::characterIndexForPointAsync):
        (WebKit::WebPage::firstRectForCharacterRangeAsync):
        (WebKit::WebPage::setCompositionAsync):
        (WebKit::WebPage::confirmCompositionAsync):
        (WebKit::WebPage::didChangeSelectionOrOverflowScrollPosition):
        (WebKit::WebPage::didEndUserTriggeredSelectionChanges):
        (WebKit::WebPage::sendEditorStateUpdate):
        (WebKit::WebPage::flushPendingEditorStateUpdate):
        (WebKit::WebPage::insertAttachment):
        (WebKit::WebPage::createAppHighlightInSelectedRange):
        (WebKit::WebPage::restoreAppHighlightsAndScrollToIndex):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::didFindString):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformWillPerformEditingCommand):
        (WebKit::WebPage::getSelectionContext):
        (WebKit::WebPage::updateSelectionAppearance):
        (WebKit::WebPage::generateSyntheticEditingCommand):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::didConcludeEditDrag):
        (WebKit::WebPage::clearSelectionAfterTapIfNeeded):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::dispatchSyntheticMouseEventsForSelectionGesture):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::selectWithTwoTouches):
        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::platformDidSelectAll):
        (WebKit::WebPage::selectWordBackward):
        (WebKit::WebPage::moveSelectionByOffset):
        (WebKit::WebPage::startAutoscrollAtPosition):
        (WebKit::WebPage::requestEvasionRectsAboveSelection):
        (WebKit::WebPage::getRectsForGranularityWithSelectionOffset):
        (WebKit::WebPage::storeSelectionForAccessibility):
        (WebKit::WebPage::getRectsAtSelectionOffsetWithText):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection):
        (WebKit::WebPage::setFocusedFrameBeforeSelectingTextAtLocation):
        (WebKit::WebPage::setSelectionRange):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPage::updateSelectionWithExtentPoint):
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::replaceSelectedText):
        (WebKit::WebPage::replaceDictatedText):
        (WebKit::WebPage::requestAutocorrectionData):
        (WebKit::WebPage::applyAutocorrectionInternal):
        (WebKit::WebPage::autocorrectionContext):
        (WebKit::focusedElementPositionInformation):
        (WebKit::nextAssistableElement):
        (WebKit::WebPage::focusedElementInformation):
        (WebKit::WebPage::hardwareKeyboardAvailabilityChanged):
        (WebKit::WebPage::insertTextPlaceholder):
        (WebKit::WebPage::updateSelectionWithDelta):
        (WebKit::WebPage::requestDocumentEditingContext):
        (WebKit::WebPage::focusTextInputContextAndPlaceCaret):
        (WebKit::WebPage::animationDidFinishForElement):

2021-09-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        generated MessageArgumentDescriptions.cpp can't compile for non-Cocoa ports due to missing headers
        https://bugs.webkit.org/show_bug.cgi?id=230075

        Reviewed by Ryosuke Niwa.

        The generated MessageArgumentDescriptions.cpp unconditionally
        included platform specific headers, for example
        <WebCore/CAAudioStreamDescription.h>.

        generate_message_argument_description_implementation generates the
        #includes, it should take receiver.condition into account.

        * CMakeLists.txt:
        (GENERATE_MESSAGE_SOURCES): Added MessageArgumentDescriptions.cpp to compile.
        * Scripts/webkit/messages.py:
        (generate_message_argument_description_implementation):
        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp:

2021-09-08  Tim Horton  <timothy_horton@apple.com>

        WKWebView specific bug: WKWebView as the contents of a SceneKit/ARKit node doesn't work (UIWebView works)
        https://bugs.webkit.org/show_bug.cgi?id=203060
        <rdar://problem/82899923>

        Reviewed by Dean Jackson.

        SceneKit's snapshotter cannot handle CAMachPort-as-layer-contents.

        If we get parented in a SceneKit snapshotting window, map all existing
        surfaces, and prefer using actual IOSurfaces instead of CAMachPort from then on.

        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::windowKind):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::webViewDidMoveToWindow):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WindowKind.h: Added.
        Keep track of the kind of window we're currently in (the only special
        case at the moment is the SceneKit snapshotting window, but you could
        easily imagine us caring about others).

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::windowKindDidChange):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::windowKind):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::windowKindDidChange):
        Map CAMachPorts to IOSurfaces when we move into a SceneKit snapshotting window.

        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::layerContentsType const):
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        Prefer IOSurface if we're already in a SceneKit snapshotting window.
        Also factor this code out and improve the comments.

2021-09-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r282115): undefined reference to `IPC::messageArgumentDescriptions(IPC::MessageName)' in Debug build
        https://bugs.webkit.org/show_bug.cgi?id=230064

        Unreviewed build fix.

        Debug build of non-Cocoa ports were broken since r282115 started
        to use IPC::messageArgumentDescriptions for debug logging.
        However, MessageArgumentDescriptions.cpp has a long-standing
        compilation problem for non-Cocoa ports.

        Temporarily disabled the debug logging for non-Cocoa ports by
        using ENABLE(IPC_TESTING_API) macro. I'll revert this change after
        I will fix the fundamental problem of messages.py.

        * Platform/IPC/HandleMessage.h:
        (IPC::logMessageImpl):
        (IPC::logReply):

2021-09-08  Sihui Liu  <sihui_liu@apple.com>

        Remove unnecessary WTF:: in WebsiteDataStore files
        https://bugs.webkit.org/show_bug.cgi?id=230036

        Reviewed by Darin Adler.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultApplicationCacheDirectory):
        (WebKit::WebsiteDataStore::defaultCacheStorageDirectory):
        (WebKit::WebsiteDataStore::defaultNetworkCacheDirectory):
        (WebKit::WebsiteDataStore::defaultAlternativeServicesDirectory):
        (WebKit::WebsiteDataStore::defaultMediaCacheDirectory):
        (WebKit::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory):
        (WebKit::WebsiteDataStore::defaultLocalStorageDirectory):
        (WebKit::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (WebKit::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        (WebKit::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (WebKit::WebsiteDataStore::defaultResourceLoadStatisticsDirectory):
        (WebKit::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStore::defaultModelElementCacheDirectory):
        (WebKit::WebsiteDataStore::tempDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (WebKit::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::defaultMediaCacheDirectory):
        (WebKit::WebsiteDataStore::defaultAlternativeServicesDirectory):
        (WebKit::WebsiteDataStore::defaultJavaScriptConfigurationDirectory):
        (WebKit::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-09-08  Peng Liu  <peng.liu6@apple.com>

        [macOS] -[WKFullScreenWindowController exitFullScreenImmediately] does not exit fullscreen immediately
        https://bugs.webkit.org/show_bug.cgi?id=230024

        Reviewed by Jer Noble.

        A WebContent process may ask the `WKFullScreenWindowController` in
        the UI process to exit fullscreen immediately without walking through
        the normal exit fullscreen sequence, and the WebContent process won't
        expect any IPC message related to fullscreen to come back from the
        UI process. If the UI process sends an IPC message to the WebContent
        process and expects the response from the WebContent process (e.g., in
        `WebPageProxy::forceRepaint()`), the UI process will be stuck.

        That will happen when a tab navigates to the previous page while a video
        element in the current page is playing in fullscreen. The reason is that
        `-[WKFullScreenWindowController exitFullScreen]` is called before
        `-[WKFullScreenWindowController exitFullScreenImmediately]`.
        `-[WKFullScreenWindowController exitFullScreen]` changes `_fullScreenState`
        to `WaitingToExitFullScreen`, so `-[WKFullScreenWindowController exitFullScreenImmediately]`
        will return early. This patch fixes this issue by changing the early return condition.

        In addition, `-[WKFullScreenWindowController exitFullScreenImmediately]`
        does not really exit fullscreen immediately. Instead, it calls
        `-[WKFullScreenWindowController finishedExitFullScreenAnimation:]`,
        which always calls `WebPageProxy::forceRepaint()` and expects a response
        from the WebContet process. This patch fixes this issue as well.

        Tested manually.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitFullScreenImmediately]):
        Update the early return condition to make sure the UI process will proceed
        to exit fullscreen unless the current state is `NotInFullScreen`.
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        The `completed` parameter was not used. This patch renames it to `immediately` to
        indicate whether `WKFullScreenWindowController` wants to exit fullscreen immediately.
        (-[WKFullScreenWindowController close]):
        Clean up this function after revising `-[WKFullScreenWindowController exitFullScreenImmediately]`.
        (-[WKFullScreenWindowController windowDidFailToExitFullScreen:]):
        Update the argument according to the change of `-[WKFullScreenWindowController finishedExitFullScreenAnimation:]`.
        (-[WKFullScreenWindowController windowDidExitFullScreen:]): Ditto.

2021-09-08  Sihui Liu  <sihui_liu@apple.com>

        Remove responsiveness timer in NetworkProcessProxy::getNetworkProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=230016
        rdar://problem/80760179

        Reviewed by Chris Dumez.

        We've seen evidence that network process may be blocked in initializeNetworkProcess. Since we have a 3-second
        responsiveness timer in NetworkProcessProxy::getNetworkProcessConnection, blocked network process will be killed
        and a new network process will be launched for getting connection. However, the new network process may get 
        stuck in initializeNetworkProcess too. In this case, web process will crash for not being able to get network 
        process connection.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp: change RELEASE_ASSERT_NOT_REACHED_WITH_MESSAGE to
        RELEASE_LOG_ERROR as the message is not printed in non-debug build.
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):

2021-09-08  Sihui Liu  <sihui_liu@apple.com>

        Regression (r282130): [ macOS iOS wk2 ] imported/w3c/web-platform-tests/storage/persisted.https.any.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=230053
        <rdar://problem/82879548>

        Reviewed by Chris Dumez.

        Add SPI to clear storage states for testing.

        Covered by existing tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearStorage):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/storage/NetworkStorageManager.cpp:
        (WebKit::NetworkStorageManager::clearStorageForTesting):
        * NetworkProcess/storage/NetworkStorageManager.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreClearStorage):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::clearStorage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::clearStorage):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-09-08  Per Arne  <pvollan@apple.com>

        Remove unneeded call on startup of WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=230022
        <rdar://problem/82838000>

        Reviewed by Darin Adler.

        There is no need to call CGSShutdownServerConnections during startup of the WebContent process on macOS,
        since we already have asserted that there are no open connections at this point.

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

2021-09-08  Jean-Yves Avenard  <jya@apple.com>

        Safari TP 131 audio canPlayType() reports false negatives
        https://bugs.webkit.org/show_bug.cgi?id=229799
        rdar://problem/82776747

        Reviewed by Youenn Fablet.

        * Shared/WebPreferencesDefaultValues.cpp:
        * Shared/WebPreferencesDefaultValues.h: Remove no longer used method.

2021-09-07  Sihui Liu  <sihui_liu@apple.com>

        Add basic support for Storage API
        https://bugs.webkit.org/show_bug.cgi?id=229925

        Reviewed by Darin Adler.

        Set up basic infrastructure for StorageManager.
        UI process sets the directory for StorageMananager with datastore configuration. 
        Network process manages storage with NetworkStorageManager (per Session). It has multiple OriginStorageManagers
        for managing storage of different origins, and each OriginStorageManager has a default StorageBucket.
        Web process can get and set persist property of each bucket by sending messages to network process.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::addStorageManagerForSession):
        (WebKit::NetworkProcess::removeStorageManagerForSession):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/storage/NetworkStorageManager.cpp: Added.
        (WebKit::NetworkStorageManager::create):
        (WebKit::NetworkStorageManager::NetworkStorageManager):
        (WebKit::NetworkStorageManager::startReceivingMessageFromConnection):
        (WebKit::NetworkStorageManager::stopReceivingMessageFromConnection):
        (WebKit::encode):
        (WebKit::originPath):
        (WebKit::NetworkStorageManager::localOriginStorageManager):
        (WebKit::NetworkStorageManager::persisted):
        (WebKit::NetworkStorageManager::persist):
        * NetworkProcess/storage/NetworkStorageManager.h: Added.
        (WebKit::NetworkStorageManager::sessionID const):
        * NetworkProcess/storage/NetworkStorageManager.messages.in: Added.
        * NetworkProcess/storage/OriginStorageManager.cpp: Added.
        (WebKit::OriginStorageManager::StorageBucket::StorageBucket):
        (WebKit::OriginStorageManager::StorageBucket::mode const):
        (WebKit::OriginStorageManager::StorageBucket::setMode):
        (WebKit::OriginStorageManager::OriginStorageManager):
        (WebKit::OriginStorageManager::persist):
        * NetworkProcess/storage/OriginStorageManager.h: Added.
        (WebKit::OriginStorageManager::persisted const):
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * Sources.txt:
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.cpp:
        (WKWebsiteDataStoreConfigurationCopyGeneralStorageDirectory):
        (WKWebsiteDataStoreConfigurationSetGeneralStorageDirectory):
        * UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration generalStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setGeneralStorageDirectory:]):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::generalStorageDirectory const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::generalStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setGeneralStorageDirectory):
        * UIProcess/WebsiteData/playstation/WebsiteDataStorePlayStation.cpp:
        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
        * UIProcess/WebsiteData/win/WebsiteDataStoreWin.cpp:
        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
        * UIProcess/glib/WebsiteDataStoreGLib.cpp:
        (WebKit::WebsiteDataStore::defaultGeneralStorageDirectory):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebStorageConnection.cpp: Added.
        (WebKit::WebStorageConnection::create):
        (WebKit::WebStorageConnection::persisted):
        (WebKit::WebStorageConnection::persist):
        (WebKit::WebStorageConnection::connection):
        * WebProcess/WebCoreSupport/WebStorageConnection.h: Added.
        * WebProcess/WebCoreSupport/WebStorageProvider.h: Added.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):

2021-09-07  Alex Christensen  <achristensen@webkit.org>

        Replace PrivateClickMeasurementNetworkLoader::start with an implementation that doesn't need NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=230015

        This fixes the internal build after r282110.

        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm:
        (WebKit::PCM::NetworkLoader::start):
        (processPCMRequest): Deleted.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (processPCMRequest):
        (WebKit::setPCMDataCarriedOnRequest):

2021-09-07  Cameron McCormack  <heycam@apple.com>

        Add an IPCMessages channel to log all IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=229664
        <rdar://problem/82511640>

        Reviewed by Alex Christensen.

        This adds a new IPCMessages log channel, to which all IPC message names,
        arguments, and return values are logged. To avoid performance impacts
        when not logging, these are only enabled in debug builds.

        ValueOrDefault is used when writing out each message argument to (1)
        avoid having to add operator<<(TextStream&) defintions for all
        argument types right now, and (2) to alleviate the need to add such a
        definition when adding new IPC messages. The string "..." is output
        for types with no operator<< defined.

        The remote and local process IDs are included in the log message. The
        remote process ID is only readily accessible on OS(DARWIN), as we can
        grab it from the XPC connection. But not all IPC::Connections are
        created for XPC connections. For example, the Web -> GPU process
        connection is created by the UI process on behalf of the Web process,
        and the IPC::Connection::Identifier does not have an XPC service
        handle in it. So for now, we omit the remote process ID. (We'd need
        to thread it through messages like CreateGPUConnectionToWebProcess
        to have it available.)

        Since we need the IPC::Connection object for logging now, all of the
        handleMessage* functions take a connection, and the messages.py code
        generator is updated accordingly.

        * Platform/IPC/HandleMessage.h:
        (IPC::textStreamForLogging):
        (IPC::logMessageImpl):
        (IPC::logMessage):
        (IPC::logReply):
        (IPC::handleMessage):
        (IPC::handleMessageWantsConnection):
        (IPC::handleMessageSynchronous):
        (IPC::handleMessageSynchronousWantsConnection):
        (IPC::handleMessageAsync):
        (IPC::handleMessageAsyncWantsConnection):
        * Platform/Logging.h:
        * Scripts/webkit/messages.py:
        (async_message_statement):
        (sync_message_statement):
        * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp:
        (WebKit::TestWithCVPixelBuffer::didReceiveMessage):
        (WebKit::TestWithCVPixelBuffer::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        (WebKit::TestWithImageData::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        (WebKit::TestWithLegacyReceiver::didReceiveSyncTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        (WebKit::TestWithSemaphore::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp:
        (WebKit::TestWithStream::didReceiveStreamMessage):
        * Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:
        (WebKit::TestWithSuperclass::didReceiveMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        (WebKit::TestWithoutAttributes::didReceiveSyncMessage):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didReceiveMessage):

2021-09-07  Per Arne  <pvollan@apple.com>

        Fix incorrect preprocess guard in WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=230025
        <rdar://82721734>

        Reviewed by Brent Fulgham.

        Fix incorrect macOS version guard.

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

2021-09-07  Alex Christensen  <achristensen@webkit.org>

        Replace PrivateClickMeasurementNetworkLoader::start with an implementation that doesn't need NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=230015

        Reviewed by John Wilander.

        This is needed to run this code in a process that doesn't have NetworkSession, which is a class tied closely to WKWebsiteDataStore.
        This replaces it with a simple implementation that does the same things:
        1. Uses an ephemeral stateless session that doesn't accept cookies or use credentials.
        2. Does not allow redirects.
        3. Only accepts JSON mime types.
        4. Calls processPCMRequest

        We still need to call NetworkSessionCocoa::allowsSpecificHTTPSCertificateForHost to get tests to pass.
        Covered by existing tests.

        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::addPrivateClickMeasurementNetworkLoader): Deleted.
        (WebKit::NetworkSession::removePrivateClickMeasurementNetworkLoader): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h:
        (WebKit::PCM::Client::~Client):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        (WebKit::PCM::ClientImpl::loadFromNetwork): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PCM::NetworkLoader::start):
        (WebKit::generateNetworkLoadParameters): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::start): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::PrivateClickMeasurementNetworkLoader): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::~PrivateClickMeasurementNetworkLoader): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::fail): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::cancel): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::willSendRedirectedRequest): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::didReceiveResponse): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::didReceiveBuffer): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::didFinishLoading): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::didFailLoading): Deleted.
        (WebKit::PrivateClickMeasurementNetworkLoader::didComplete): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:
        (): Deleted.
        * NetworkProcess/PrivateClickMeasurement/cocoa/PrivateClickMeasurementNetworkLoaderCocoa.mm: Added.
        (processPCMRequest):
        (-[WKNetworkSessionDelegateAllowingOnlyNonRedirectedJSON URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegateAllowingOnlyNonRedirectedJSON URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegateAllowingOnlyNonRedirectedJSON URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::PCM::taskMap):
        (WebKit::PCM::statelessSessionWithoutRedirects):
        (WebKit::PCM::NetworkLoader::start):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (processPCMRequest): Deleted.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-07  Alex Christensen  <achristensen@webkit.org>

        Simplify PrivateClickMeasurementManager interface
        https://bugs.webkit.org/show_bug.cgi?id=230014

        Reviewed by John Wilander.

        ResourceRequest serialization is excessive and complicated.
        Let's just serialize the parts we need instead.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:

2021-09-07  Chris Dumez  <cdumez@apple.com>

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=229814

        Reviewed by Alex Christensen.

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel to address privacy
        concerns, as discussed here:
        - https://github.com/whatwg/html/issues/5803

        * NetworkProcess/NetworkBroadcastChannelRegistry.cpp:
        (WebKit::NetworkBroadcastChannelRegistry::registerChannel):
        (WebKit::NetworkBroadcastChannelRegistry::unregisterChannel):
        (WebKit::NetworkBroadcastChannelRegistry::postMessage):
        (WebKit::NetworkBroadcastChannelRegistry::removeConnection):
        * NetworkProcess/NetworkBroadcastChannelRegistry.h:
        * NetworkProcess/NetworkBroadcastChannelRegistry.messages.in:
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.cpp:
        (WebKit::WebBroadcastChannelRegistry::registerChannel):
        (WebKit::WebBroadcastChannelRegistry::unregisterChannel):
        (WebKit::WebBroadcastChannelRegistry::postMessage):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.h:

2021-09-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Post-layout `EditorState` updates should be scheduled using `RenderingUpdateScheduler`
        https://bugs.webkit.org/show_bug.cgi?id=229905

        Reviewed by Simon Fraser.

        Use `Page::scheduleRenderingUpdate` rather than `DrawingArea::triggerRenderingUpdate` to ensure that we schedule
        a layer tree flush when sending a full post-layout `EditorState` update to the UI process. On macOS, the latter
        method on DrawingArea will immediately install a runloop observer for the next CA commit, while the former only
        does so after a zero-delay timer fires, courtesy of RenderingUpdateScheduler.

        This prevents us from triggering unnecessary layer tree flushes in the case where the selection changes
        frequently during a single rendering update; in particular, in Speedometer 2 on macOS, this decreases the total
        number of rendering updates performed over the course of the benchmark by roughly 30%.

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

2021-09-07  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=229983

        Unreviewed non-unified build fixes.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h: Add missing
        WebCore/PrivateClickMeasurement.h header.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        (WebKit::PCM::ClientImpl::loadFromNetwork): Sprinkle missing WebCore:: namespace prefixes.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h: Add missing
        wtf/WeakPtr.h header.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp: Add
        missing WebCore/RuntimeApplicationChecks.h header.

2021-09-06  Dmitry Kalinkin  <dmitry.kalinkin+webkit@gmail.com>

        Fix WebKitGTK build on MacOS
        https://bugs.webkit.org/show_bug.cgi?id=225850

        Reviewed by Michael Catanzaro.

        Define HAVE_AUDIT_TOKEN only for Cocoa backend.
        Streamline other conditionals for consistency between headers and implementations.

        * NetworkProcess/ServiceWorker/WebSWOriginStore.cpp:
        (WebKit::WebSWOriginStore::sendStoreHandle):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        * Platform/IPC/IPCSemaphore.h:
        * Platform/SharedMemory.h:
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::sendStoreHandleToProcess):

2021-09-06  Youenn Fablet  <youenn@apple.com>

        Implement libwebrtc network manager GetMdnsResponder
        https://bugs.webkit.org/show_bug.cgi?id=229757

        Reviewed by Eric Carlson.

        Implement RTCNetworkManager API in LibWebRTCNetworkManager to handle per-document mDNS registrations.
        Move part of WebRTCMonitor to LibWebRTCNetworkManager.
        LibWebRTCNetworkManager is a WebRTCMonitor observer to get the list of networks.
        Since libwebrtc is now doing the mDNS registration, we need to return a mDNS name even if registration failed.
        We update WebMDNSRegister and NetworkMDNSRegister accordingly.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::registerMDNSNameCallback):
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.cpp: Added.
        (WebKit::LibWebRTCNetworkManager::getOrCreate):
        (WebKit::LibWebRTCNetworkManager::LibWebRTCNetworkManager):
        (WebKit::LibWebRTCNetworkManager::~LibWebRTCNetworkManager):
        (WebKit::LibWebRTCNetworkManager::unregisterMDNSNames):
        (WebKit::LibWebRTCNetworkManager::StartUpdating):
        (WebKit::LibWebRTCNetworkManager::StopUpdating):
        (WebKit::LibWebRTCNetworkManager::GetMdnsResponder const):
        (WebKit::LibWebRTCNetworkManager::networksChanged):
        (WebKit::LibWebRTCNetworkManager::networkProcessCrashed):
        (WebKit::LibWebRTCNetworkManager::CreateNameForAddress):
        (WebKit::LibWebRTCNetworkManager::RemoveNameForAddress):
        * WebProcess/Network/webrtc/LibWebRTCNetworkManager.h: Added.
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        (WebKit::LibWebRTCProvider::disableNonLocalhostConnections):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
        (WebKit::WebMDNSRegister::finishedRegisteringMDNSName):
        (WebKit::WebMDNSRegister::registerMDNSName):
        * WebProcess/Network/webrtc/WebMDNSRegister.h:
        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::startUpdating):
        (WebKit::WebRTCMonitor::stopUpdating):
        (WebKit::WebRTCMonitor::networksChanged):
        (WebKit::WebRTCMonitor::networkProcessCrashed):
        * WebProcess/Network/webrtc/WebRTCMonitor.h:
        (WebKit::WebRTCMonitor::addObserver):
        (WebKit::WebRTCMonitor::removeObserver):
        (WebKit::WebRTCMonitor::didReceiveNetworkList const):
        (WebKit::WebRTCMonitor::networkList const):
        (WebKit::WebRTCMonitor::ipv4 const):
        (WebKit::WebRTCMonitor::ipv6 const):

2021-09-05  Simon Fraser  <simon.fraser@apple.com>

        Use a strongly typed identifier for authentication challenge IDs
        https://bugs.webkit.org/show_bug.cgi?id=229890

        Reviewed by Anders Carlsson.

        Add AuthenticationChallengeIdentifier and use it to replace uint64_t values that
        represent authentication challenge identifiers.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::addChallengeToChallengeMap):
        (WebKit::AuthenticationManager::shouldCoalesceChallenge const):
        (WebKit::AuthenticationManager::coalesceChallengesMatching const):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::completeAuthenticationChallenge):
        (WebKit::generateAuthenticationChallengeID): Deleted.
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/AuthenticationManager.messages.in:
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm:
        (WebKit::AuthenticationManager::initializeConnection):
        * Shared/IdentifierTypes.h:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        * UIProcess/Authentication/cocoa/AuthenticationChallengeProxyCocoa.mm:
        (WebKit::AuthenticationChallengeProxy::sendClientCertificateCredentialOverXpc):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2021-09-03  Stephan Szabo  <stephan.szabo@sony.com>

        Fix for debug mode on MSVC after r281998
        https://bugs.webkit.org/show_bug.cgi?id=229894

        Unreviewed build fix for wincairo debug.

        No new tests, build fix only.

        Pull the #if out from inside the ASSERT.

        * NetworkProcess/NetworkResourceLoader.cpp:

2021-09-03  Kate Cheney  <katherine_cheney@apple.com>

        Safari’s Privacy Report window is completely blank
        https://bugs.webkit.org/show_bug.cgi?id=229847
        <rdar://problem/80974688>

        Reviewed by Chris Dumez.

        We should not wait for an IPC reply on a cached web process, because
        it will cause long hangs.

        In order to test this I added a new SPI to update the
        cachedProcessSuspensionDelay (the usual timeout is 30 seconds). I also
        moved the initial suspension timer call to be after the responsiveness
        check, otherwise the cached process will be resumed very soon.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _setCachedProcessSuspensionDelayForTesting:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::setCachedProcessSuspensionDelayForTesting):
        (WebKit::WebProcessCache::addProcess):
        (WebKit::WebProcessCache::CachedProcess::CachedProcess):
        (WebKit::WebProcessCache::CachedProcess::startSuspensionTimer):
        * UIProcess/WebProcessCache.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::sendResourceLoadStatisticsDataImmediately):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setCachedProcessSuspensionDelayForTesting):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-09-03  Alex Christensen  <achristensen@webkit.org>

        Simplify PCM::Client interface
        https://bugs.webkit.org/show_bug.cgi?id=229887

        Reviewed by Kate Cheney.

        NetworkLoadParameters is a heavy object to have on an interface like this.
        We really only need a URL, a RefPtr<JSON::Object> from which the HTTP method can be inferred
        from whether it's null or not, and PcmDataCarried to give to processPCMRequest.

        The NetworkLoadParameters generation is only needed in a networking implementation that uses NetworkSession,
        so I moved it to PrivateClickMeasurementNetworkLoader::start.

        I moved the debugModeEnabled calls to the callers of loadFromNetwork to simplify the interface and to
        keep the responsibility for that in PrivateClickMeasurementManager instead of the loadFromNetwork function,
        which should be simple and just take what it gets and give it to the network.

        No change in behavior.  Just moving things around.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
        (WebKit::PCM::ClientImpl::loadFromNetwork):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        (WebKit::generateNetworkLoadParameters): Deleted.
        (WebKit::generateNetworkLoadParametersForHttpPost): Deleted.
        (WebKit::generateNetworkLoadParametersForHttpGet): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::generateNetworkLoadParameters):
        (WebKit::PrivateClickMeasurementNetworkLoader::start):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h:

2021-09-03  Devin Rousso  <drousso@apple.com>

        [Web App Manifest] Always fetch the first manifest if provided
        https://bugs.webkit.org/show_bug.cgi?id=229059
        <rdar://problem/82148333>

        Reviewed by Brent Fulgham.

        Before this patch, WebKit only fetched/parsed/applied/etc. the web app manifest when
        `-[WKWebView _getApplicationManifestWithCompletionHandler:]` was called. This patch makes
        WebKit do all that as soon as a `<link rel="manifest">` (with a valid URL) is encountered.
        This allows manifests that have specified a `"theme_color"` to actually have an effect.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoadingApplicationManifest): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::getApplicationManifest):
        (WebKit::WebPage::didFinishLoadingApplicationManifest):
        Simplify the way that the UIProcess communicates with the WebProcess (and between WebKit and
        WebCore). There's no need to have a `HashMap` of callbacks since each document can only have
        at most one web app manifest. Furthermore, instead of having a `HashMap` in both WebKit and
        WebCore, just pass along the `CompletionHandler` to the `DocumentLoader` for a single list
        of completion callbacks (a list is needed because it's possible for a client to invoke
        `-[WKWebView _getApplicationManifestWithCompletionHandler:]` multiple times).

2021-09-03  Per Arne  <pvollan@apple.com>

        [GPUP] Temporarily allow access to power logging service
        https://bugs.webkit.org/show_bug.cgi?id=229878
        <rdar://82441564>

        Reviewed by Brent Fulgham.

        Temporarily allow access to power logging service in GPUP on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-09-03  Chris Dumez  <cdumez@apple.com>

        Fix race in RemoteRenderingBackend::allowsExitUnderMemoryPressure()
        https://bugs.webkit.org/show_bug.cgi?id=229870
        <rdar://82459484>

        Reviewed by David Kilzer.

        RemoteRenderingBackend::m_remoteResourceCache should only be used safely from RemoteRenderingBackend's work queue.
        RemoteRenderingBackend::allowsExitUnderMemoryPressure() gets called on the main thread so we need to make sure we
        dispatch to RemoteRenderingBackend's work queue before accessing m_remoteResourceCache.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::allowsExitUnderMemoryPressure const):

2021-09-03  Alex Christensen  <achristensen@webkit.org>

        Clean up PrivateClickMeasurementManager interface
        https://bugs.webkit.org/show_bug.cgi?id=229840

        Reviewed by Kate Cheney.

        Notably, PrivateClickMeasurementManager::store is now private, which makes it possible to use
        the interface and have the store in a different process.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToPCMDatabaseIfNecessary):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::simulateResourceLoadStatisticsSessionRestart):
        (WebKit::NetworkProcess::firePrivateClickMeasurementTimerImmediately): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::firePrivateClickMeasurementTimerImmediatelyForTesting):
        (WebKit::NetworkSession::firePrivateClickMeasurementTimerImmediately): Deleted.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::~PrivateClickMeasurementManager):
        (WebKit::PrivateClickMeasurementManager::migratePrivateClickMeasurementFromLegacyStorage):
        (WebKit::PrivateClickMeasurementManager::startTimerImmediatelyForTesting):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:

2021-09-03  Jer Noble  <jer.noble@apple.com>

        Buffer large media XHRs in the NetworkProcess to reduce IPC overhead
        https://bugs.webkit.org/show_bug.cgi?id=229813
        <rdar://82406803>

        Reviewed by Alex Christensen.

        When playing back media through MSE, a significant amount of CPU time is spent sending
        small chunks of loaded media across the XPC boundary, on the order of 16kb at a time out
        of a 1-3MB resource. This large number of small XPC messages, each with a fixed cost, causes
        a relatively large CPU overhead. Media loaded directly through a HTMLMediaElement already
        is coalesced in the NetworkProcess on a 50ms timer.

        Buffer all loads of large media resources, performed over fetch() or XHR, when those resources
        have an expected length of more than 1MB, by coalescing them on the same 50ms timer as we use
        for HTMLMediaElement-generated loads.

        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):
        * WebProcess/Network/WebLoaderStrategy.h:

2021-09-03  Stephan Szabo  <stephan.szabo@sony.com>

        Fix for debug mode with ENABLE_SERVICE_WORKER=OFF after r281706
        https://bugs.webkit.org/show_bug.cgi?id=229845

        Reviewed by Alex Christensen.

        Put m_serviceWorkerFetchTask check into #if.

        No new tests, is a build fix for having service workers off.

        * NetworkProcess/NetworkResourceLoader.cpp:

2021-09-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] editing/caret/ios/caret-in-overflow-area.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=229830
        rdar://82190832

        Reviewed by Tim Horton.

        See Tools/ChangeLog for more details.

        * Platform/spi/ios/TextInputSPI.h:

2021-09-03  David Kilzer  <ddkilzer@apple.com>

        RemoteVideoSample needs CVPixelBufferRef to be kept alive, but relies on caller to retain it
        <https://webkit.org/b/229806>
        <rdar://problem/82684479>

        Reviewed by Darin Adler.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::encodeFrame):
        - Pass converted CVPixelBufferRef to
          RemoteVideoSample::create().  A similar change in an earlier
          patch for Bug 229661 caused test failures.

2021-09-03  Youenn Fablet  <youenn@apple.com>

        Enable WebRTC relay for SafariViewController
        https://bugs.webkit.org/show_bug.cgi?id=229768

        Reviewed by Eric Carlson.

        Use source application bundle identifier instead of attributed bundle identifier for nw_parameters_set_source_application_by_bundle_id.
        Use attributed bundle identifier for nw_parameters_set_attributed_bundle_identifier.
        Make sure to not set token data in case application bundle identifier is available.
        This allows the OS to decide whether to relay the nw_connections or not.

        Introduce a helper routine to share more code between UDP and TCP sockets.

        Manually tested as testing relay would require non-localhost connections
        and an application bundle identifier that would be known by the OS.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::applicationBundleIdentifier const):
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
        * NetworkProcess/webrtc/NetworkRTCUtilitiesCocoa.h: Added.
        * NetworkProcess/webrtc/NetworkRTCUtilitiesCocoa.mm: Added.
        (WebKit::setNWParametersApplicationIdentifiers):
        * Platform/spi/Cocoa/NWParametersSPI.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-03  Said Abou-Hallawa  <said@apple.com>

        Add a layout test to detect memory leaks when drawing images to a detached canvas
        https://bugs.webkit.org/show_bug.cgi?id=229790

        Reviewed by Darin Adler.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
        (WebKit::RemoteResourceCacheProxy::imagesCount const):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::remoteImagesCountForTesting const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::remoteImagesCountForTesting const):
        * WebProcess/WebPage/WebPage.h:

2021-09-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r280767): Caret color is black after pasting rich text in Mail compose in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=229808
        rdar://82600990

        Reviewed by Tim Horton.

        Partially revert one of the changes in r280767 that makes caret-color follow the immediate container node of the
        selection caret, rather than the focused element (which it previously used). This was effectively a drive-by fix
        for a FIXME about allowing `caret-color` to match child containers inside the root editable container element.
        While this matches behavior on macOS, this change also causes the caret color to become black when pasting rich
        text copied in dark mode, since we write `caret-color: rgb(0, 0, 0);` to the pasteboard when copying the editing
        style for rich text.

        In the short term, we should restore old (pre-r280767) `caret-color` on iOS; in the slightly longer term, I've
        filed bug #229809 to track unifying macOS and iOS caret-color behavior, with respect to nested editable
        container nodes.

        To retain the fix for rdar://81674787 without exhibiting the above bug, we use the selection's root editable
        container (rather than `m_focusedElement`, which was used prior to r280767).

        Test: editing/caret/ios/caret-color-in-nested-editable-containers.html

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

        Also adjust this logic so that we only attempt the tree-walk to find the root editable element if the selection
        has editable style.

2021-09-02  Alex Christensen  <achristensen@webkit.org>

        Gracefully recover from WebAuthnProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=229828
        <rdar://82682650>

        Reviewed by Chris Dumez.

        When a WebAuthn process closes, it can't be connected with again, which causes persistent web process "crashes".
        Let's start a new process when this happens instead.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _webAuthnProcessIdentifier]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::sharedProcess):
        (WebKit::WebAuthnProcessProxy::singleton):
        (WebKit::WebAuthnProcessProxy::webAuthnProcessCrashed):

2021-09-02  Chris Dumez  <cdumez@apple.com>

        [ BigSur arm64 Debug EWS ] ASSERTION FAILED: m_uncommittedState.state == State::Provisional
        https://bugs.webkit.org/show_bug.cgi?id=229769
        <rdar://problem/82645706>

        Reviewed by Alex Christensen.

        I am unable to reproduce the crash but we know that we're crashing when committing the load
        after a process-swap, because the WebPageProxy doesn't know that a provisional load is going
        on. One possible explanation for this, and the most likely one is that the WebPageProxy got
        a DidFailProvisionalLoadForFrame IPC from the current process while the provisional load is
        proceeding in the new provisional process. We had logic in WebPageProxy::didFailProvisionalLoadForFrame()
        to try and discard such IPC but the check was relying on the navigationID and was therefore
        fragile. I updated the check in didFailProvisionalLoadForFrame() to ignore all
        DidFailProvisionalLoadForFrame IPCs for the main frame from the current process when there
        is a ProvisionalPageProxy, without relying on the navigationID. This should be more robust
        and will hopefully fix this flaky crash.

        No new tests, unskipped existing tests.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        * UIProcess/WebPageProxy.h:

2021-09-02  Alex Christensen  <achristensen@webkit.org>

        Move PrivateClickMeasurementManager and PrivateClickMeasurementNetworkLoader into PrivateClickMeasurement directory
        https://bugs.webkit.org/show_bug.cgi?id=229835

        Reviewed by Tim Horton.

        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurementManager.cpp.
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurementManager.h.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.cpp: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurementNetworkLoader.cpp.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementNetworkLoader.h: Renamed from Source/WebKit/NetworkProcess/PrivateClickMeasurementNetworkLoader.h.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-02  Per Arne  <pvollan@apple.com>

        [iOS] Gather logs for IOKit class
        https://bugs.webkit.org/show_bug.cgi?id=228784

        Reviewed by Brent Fulgham.

        Add telemetry for an IOKit class on iOS.

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

2021-09-02  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Simplify date picker logic for datetime-local inputs
        https://bugs.webkit.org/show_bug.cgi?id=229773

        Reviewed by Darin Adler.

        Currently, the date picker logic for getting/setting the value of a
        datetime-local input relies on the numeric value of input. This
        logic differs from logic for date, time, and month inputs, where we use
        the string value of the input. This patch simplifies the code by using
        string values for all the date/time input types.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker initWithView:datePickerMode:]):

        Set the format string for datetime-local inputs, matching the spec.

        (-[WKDateTimePicker _sanitizeInputValueForFormatter:]):

        Sanitize datetime-local values to remove seconds and milliseconds
        information. UIKit does not support anything beyond minute granularity.

        (-[WKDateTimePicker dateFormatterForPicker]):
        (-[WKDateTimePicker _dateChanged]):

        Always use setValueAsString, matching the other date/time inputs.

        Time zone conversion before sending the date back to the web process
        is no longer needed.

        (-[WKDateTimePicker setDateTimePickerToInitialValue]):

        Time zone conversion when retrieving the date from the web process is no
        longer needed.

        (-[WKDateTimePicker controlBeginEditing]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

2021-09-02  Peng Liu  <peng.liu6@apple.com>

        [MSE][GPUP] SourceBufferPrivateAVFObjC does not work properly when audio and video exchange their track IDs
        https://bugs.webkit.org/show_bug.cgi?id=229617

        Reviewed by Jer Noble.

        Fix the bug in updating the hash map by creating a new one instead of
        updating the hash map in-place.

        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::updateTrackIds):
        (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateDidReceiveInitializationSegment):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:

2021-09-02  Alex Christensen  <achristensen@webkit.org>

        Introduce PCM::Client for PrivateClickMeasurementManager
        https://bugs.webkit.org/show_bug.cgi?id=229789

        Reviewed by Kate Cheney.

        This makes it so that PrivateClickMeasurementManager can run in environments other than the NetworkProcess.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h: Added.
        (WebKit::PCM::Client::~Client):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp: Added.
        (WebKit::PCM::ClientImpl::ClientImpl):
        (WebKit::PCM::ClientImpl::loadFromNetwork):
        (WebKit::PCM::ClientImpl::broadcastConsoleMessage):
        (WebKit::PCM::ClientImpl::featureEnabled const):
        (WebKit::PCM::ClientImpl::debugModeEnabled const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h: Added.
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::PrivateClickMeasurementManager):
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        (WebKit::PrivateClickMeasurementManager::featureEnabled const):
        (WebKit::PrivateClickMeasurementManager::debugModeEnabled const):
        * NetworkProcess/PrivateClickMeasurementManager.h:
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-09-02  Chris Dumez  <cdumez@apple.com>

        [COOP] Cross origin isolation doesn't happen when going from an HTTP URL to a HTTPS one with COOP+COEP
        https://bugs.webkit.org/show_bug.cgi?id=229745
        <rdar://problem/82630927>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptNavigationForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::shouldInterruptWorkerLoadForCrossOriginEmbedderPolicy):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::processResponse):

2021-09-02  Tim Nguyen  <ntim@apple.com>

        Add more inert checks for selection-related functionality
        https://bugs.webkit.org/show_bug.cgi?id=229728

        Reviewed by Antti Koivisto.

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

2021-09-01  Alex Christensen  <achristensen@webkit.org>

        Move PCM::Store ownership from WebResourceLoadStatisticsStore to PrivateClickMeasurementManager
        https://bugs.webkit.org/show_bug.cgi?id=229770

        Reviewed by Kate Cheney.

        Now that PrivateClickMeasurement storage is separate from ResourceLoadStatistics storage, they don't need to know about each other.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToPCMDatabaseIfNecessary):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::create):
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        (WebKit::pcmStoreDirectory): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::pcmStoreDirectory):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::privateClickMeasurementToStringForTesting const):
        (WebKit::PCM::Database::attributionToStringForTesting const):
        (WebKit::PCM::Database::privateClickMeasurementToStringForTesting): Deleted.
        (WebKit::PCM::Database::attributionToStringForTesting): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
        (WebKit::PCM::Store::postTask const):
        (WebKit::PCM::Store::postTaskReply const):
        (WebKit::PCM::Store::privateClickMeasurementToStringForTesting const):
        (WebKit::PCM::Store::postTask): Deleted.
        (WebKit::PCM::Store::postTaskReply): Deleted.
        (WebKit::PCM::Store::privateClickMeasurementToStringForTesting): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::PrivateClickMeasurementManager):
        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::clearSentAttribution):
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        (WebKit::PrivateClickMeasurementManager::clear):
        (WebKit::PrivateClickMeasurementManager::clearForRegistrableDomain):
        (WebKit::PrivateClickMeasurementManager::clearExpired):
        (WebKit::PrivateClickMeasurementManager::toStringForTesting const):
        (WebKit::PrivateClickMeasurementManager::markAllUnattributedAsExpiredForTesting):
        (WebKit::PrivateClickMeasurementManager::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        * NetworkProcess/PrivateClickMeasurementManager.h:
        (WebKit::PrivateClickMeasurementManager::store):
        (WebKit::PrivateClickMeasurementManager::store const):

2021-09-01  Alex Christensen  <achristensen@webkit.org>

        Remove _statisticsDatabaseColumnsForTable and related unused test functions
        https://bugs.webkit.org/show_bug.cgi?id=229771

        Reviewed by Kate Cheney.

        This removes some code that was used for tests until r281779

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::statisticsDatabaseColumnsForTable): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::statisticsDatabaseColumnsForTable): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _statisticsDatabaseColumnsForTable:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::statisticsDatabaseColumnsForTable): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::statisticsDatabaseColumnsForTable): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-09-01  David Kilzer  <ddkilzer@apple.com>

        [WebRTC] Leak or over-release of CFPixelBufferRef returned from webrtc::createPixelBufferFromFrame()
        <https://webkit.org/b/229661>
        <rdar://problem/82507827>

        Reviewed by Eric Carlson.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::encodeFrame):
        - Use adoptCF() to prevent a leak since
          webrtc::createPixelBufferFromFrame() always returns a +1
          retained CVPixelBufferRef now.
        - Change the functor to return a +1 retained CVPixelBufferRef.
        - Reuse `pixelBuffer` to store the converted CVPixelBufferRef
          since this object needs to be kept alive until after the
          send() method is called.

2021-09-01  Chris Dumez  <cdumez@apple.com>

        Add support for ServiceWorkerGlobalScope.serviceWorker
        https://bugs.webkit.org/show_bug.cgi?id=229720

        Reviewed by Youenn Fablet.

        Add support for ServiceWorkerGlobalScope.serviceWorker:
        - https://w3c.github.io/ServiceWorker/#dom-serviceworkerglobalscope-serviceworker

        Also add support for the "parsed" initial ServiceWorkerState:
        - https://w3c.github.io/ServiceWorker/#enumdef-serviceworkerstate

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

2021-09-01  Tomoki Imai  <Tomoki.Imai@sony.com>

        [CoordinatedGraphics] Schedule rendering after setLayerTreeStateIsFrozen(false) in non-AC mode
        https://bugs.webkit.org/show_bug.cgi?id=229749

        We should schedule another rendering when the setLayerTreeStateIsFrozen(false) is called.
        In some rare cases, the browser only shows the white page after the page transition,
        because the rendering is skipped while the layer tree is frozen and there was no guarantee that there is
        another rendering after setLayerTreeStateIsFrozen(false).

        Reviewed by Carlos Garcia Campos.

        Tested by manual.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::setLayerTreeStateIsFrozen): Schedule another rendering when the layer tree becomes unfrozen.

2021-08-31  Lauro Moura  <lmoura@igalia.com>

        Non-unified build partial fixes, late late August 2021
        https://bugs.webkit.org/show_bug.cgi?id=229741

        Unreviewed non-unified build fixes.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        Add missing header.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        Add missing header.
        (WebKit::PCM::Database::attributePrivateClickMeasurement): Namespace
        some names.
        (WebKit::PCM::Database::removeUnattributed): Ditto.
        (WebKit::PCM::Database::clearPrivateClickMeasurement): Ditto.
        (WebKit::PCM::Database::clearSentAttribution): Ditto.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        Add missing header.

2021-08-31  Chris Dumez  <cdumez@apple.com>

        Enable SharedArrayBuffer support when COOP/COEP headers are used
        https://bugs.webkit.org/show_bug.cgi?id=229559
        <rdar://problem/82391945>

        Reviewed by Alex Christensen.

        Make sure window.crossOriginIsolated returns true when COOP=same-origin and
        COEP=require-corp are used. Also make sure that cross-origin-isolates pages
        are allowed to use SharedArrayBuffer.

        When the WebProcess determines it needs to switch browsing context group it
        now sends a NeedsBrowsingContextGroupSwitch::YesWithoutCrossOriginIsolation /
        NeedsBrowsingContextGroupSwitch::YesWithCrossOriginIsolation enum value to
        the UIProcess with the DecidePolicyForResponse IPC instead of a simple
        boolean. We send YesWithoutCrossOriginIsolation when the navigation
        destination will be cross-origin-isolated due to COOP=same-origin and
        COEP=require-corp. In the UIProcess, when YesWithCrossOriginIsolation is
        received, we take care of launching a fresh WebProcess (never recycling an
        existing WebProcess) and we make this WebProcess as cross-origin-isolated.
        When a process is cross-origin-isolated, we pass it a XPC flag on launch
        to allow the process to use SharedArrayBuffer. We use an XPC flag because
        JSC Options need to be set before JSC::initialize() is called, which occurs
        during XPC service initialization. When a WebProcess is marked as
        cross-origin-isolated, we make sure to never cache it so it cannot be
        recycled for a new navigation (given that it has special permission to use
        SharedArrayBuffer).

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::Client::shouldEnableSharedArrayBuffer const):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::findReusableSuspendedPageProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::createForServiceWorkers):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isCrossOriginIsolated const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Use after move in ServiceWorkerThreadProxy
        https://bugs.webkit.org/show_bug.cgi?id=229731

        Reviewed by Chris Dumez.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):

2021-08-31  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Move the implementation of -[WKWebView _dynamicUserInterfaceTraitDidChange] out of the testing category
        https://bugs.webkit.org/show_bug.cgi?id=229735

        Reviewed by Tim Horton.

        r253465 incorrectly moved -[WKWebView _dynamicUserInterfaceTraitDidChange]
        into the WKTestingIOS category. _dynamicUserInterfaceTraitDidChange is used
        to respond to trait collection changes that affect dynamic colors, and is
        not a testing only method. Consequently, the method should be implemented
        in the WKViewInternalIOS category.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _dynamicUserInterfaceTraitDidChange]):
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:

2021-08-31  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r281771): ASSERTION FAILED: !m_deletionHasBegun under WebCore::Permissions::~Permissions()
        https://bugs.webkit.org/show_bug.cgi?id=229714
        <rdar://problem/82581552>

        Reviewed by Chris Dumez.

        * WebProcess/WebCoreSupport/WebPermissionController.cpp:
        (WebKit::WebPermissionController::create):
        * WebProcess/WebCoreSupport/WebPermissionController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Loads after session restore marked app initiated in Safari
        https://bugs.webkit.org/show_bug.cgi?id=229721
        <rdar://problem/82084236>

        Reviewed by Brent Fulgham.

        Offer a way to set the app initiated value when restoring a session.

        * Shared/SessionState.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _restoreSessionState:andNavigate:]):
        * UIProcess/API/Cocoa/_WKSessionState.h:
        * UIProcess/API/Cocoa/_WKSessionState.mm:
        (-[_WKSessionState _sessionStateWithAppInitiatedValue]):
        * UIProcess/API/Cocoa/_WKSessionStateInternal.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::restoreFromSessionState):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Assertion in startObservingCookieChanges()
        https://bugs.webkit.org/show_bug.cgi?id=229708

        Reviewed by Philippe Normand.

        Do not observe cookies changes unconditionally on session creation/destruction.

        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
        (WebKit::NetworkSessionSoup::~NetworkSessionSoup):

2021-08-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Drawing system fallback fonts to canvas causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=229633
        <rdar://problem/81889036>

        Reviewed by Wenson Hsieh.

        Dot-prefixed font names don't survive the round-trip through
        CTFontDescriptorCopyAttributes(CTFontCopyFontDescriptor(font)) unless you also
        pass in the kCTFontOptionsSystemUIFont option.

        Tests: fast/text/system-fallback-canvas.html
               fast/text/draw-synthetic-system-bold-font-into-canvas.html

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::createCTFont):
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::decodePlatformData):

2021-08-26  Darin Adler  <darin@apple.com>

        Cut down on use of CFGetTypeID, using dynamic_cf_cast instead; related streamlining
        https://bugs.webkit.org/show_bug.cgi?id=229414

        Reviewed by Tim Horton.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists): Use dynamic_cf_cast.
        (WebKit::NetscapePluginModule::getPluginInfo): Ditto.

2021-08-30  Alex Christensen  <achristensen@webkit.org>

        Remove unused OptionalCallbackID
        https://bugs.webkit.org/show_bug.cgi?id=229359

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.h:
        * Shared/CallbackID.h:
        * Shared/OptionalCallbackID.h: Removed.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        * UIProcess/WebPageProxy.cpp:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.h:

2021-08-30  Alex Christensen  <achristensen@webkit.org>

        Update availability macros for APIs available in iOS 14.5 and macOS 11.3
        https://bugs.webkit.org/show_bug.cgi?id=229466

        Reviewed by Chris Dumez.

        We mistakenly updated them to 15.0/12.0

        * UIProcess/API/Cocoa/WKDownload.h:
        * UIProcess/API/Cocoa/WKDownloadDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2021-08-30  Alex Christensen  <achristensen@webkit.org>

        Migrate PrivateClickMeasurements from ResourceLoadStatistics database to new database
        https://bugs.webkit.org/show_bug.cgi?id=229646

        Reviewed by Kate Cheney.

        In r281721 I moved the PCM database to be separate from the ResourceLoadStatistics database.
        This patch extracts data from the old database and sends it to the new database.

        I added some tests that create databases in each of the 3 historical schemas then verify that
        data is successfully migrated to the new database.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::tableExists):
        (WebKit::ResourceLoadStatisticsDatabaseStore::deleteTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToPCMDatabaseIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::destroyStatements):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/DatabaseUtilities.cpp:
        (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase):
        * NetworkProcess/DatabaseUtilities.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
        (WebKit::PCM::Database::insertPrivateClickMeasurement):
        (WebKit::PCM::Database::findPrivateClickMeasurement):
        (WebKit::PCM::Database::allAttributedPrivateClickMeasurement):
        (WebKit::PCM::Database::getDomainStringFromDomainID const):
        (WebKit::PCM::Database::buildPrivateClickMeasurementFromDatabase): Deleted.
        (WebKit::PCM::Database::getDomainStringFromDomainID): Deleted.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _dumpPrivateClickMeasurement:]):

2021-08-30  Alex Christensen  <achristensen@webkit.org>

        WKWebViewConfiguration._loadsSubresources=NO should prevent preconnecting
        https://bugs.webkit.org/show_bug.cgi?id=229684

        Reviewed by Tim Horton.

        This is like bug 228044 and even uses the same test setup.
        This should fix rdar://79307070

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

2021-08-30  Sihui Liu  <sihui_liu@apple.com>

        Add stubs for Permissions API
        https://bugs.webkit.org/show_bug.cgi?id=229339
        <rdar://problem/82442205>

        Reviewed by Chris Dumez.

        Set up basic infrastructure of permission getting and setting.

        * Sources.txt:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestPermission):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebPermissionController.cpp: Added.
        (WebKit::WebPermissionController::WebPermissionController):
        (WebKit::WebPermissionController::query):
        (WebKit::WebPermissionController::request):
        (WebKit::WebPermissionController::queryCache):
        (WebKit::WebPermissionController::updateCache):
        (WebKit::WebPermissionController::tryProcessingRequest):
        (WebKit::WebPermissionController::addObserver):
        (WebKit::WebPermissionController::removeObserver):
        (WebKit::WebPermissionController::permissionChanged):
        * WebProcess/WebCoreSupport/WebPermissionController.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h:

2021-08-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r281102): ASSERTION FAILED: !isInAcceleratedCompositingMode() in DrawingAreaProxyCoordinatedGraphics::incorporateUpdate
        https://bugs.webkit.org/show_bug.cgi?id=229228

        Reviewed by Carlos Garcia Campos.

        WinCairo WK2 layout tests were observing an assertion failure for
        some animations tests since r281102.

        DrawingAreaProxyCoordinatedGraphics::incorporateUpdate has an
        assertion ensuring a DrawingAreaProxy::Update message isn't sent
        during the compositing mode. However,
        DrawingAreaCoordinatedGraphics sent a Update message before
        sending ExitAcceleratedCompositingMode message in the following
        scenario.

        1. DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingMode calls DrawingAreaCoordinatedGraphics::display(WebKit::UpdateInfo&)
        2. It calls WebPage::updateRendering()
        3. It executes JavaScript
        4. It calls notifyDone
        5. It calls WTR::TestRunner::notifyDone which calls WKBundlePageForceRepaint
        6. It calls DrawingAreaCoordinatedGraphics::display() which dispatches the Update message

        Send an ExitAcceleratedCompositingMode message instead of an
        Update message if ExitAcceleratedCompositingMode isn't sent yet in
        display().

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::forceRepaint):
        (WebKit::DrawingAreaCoordinatedGraphics::display):

2021-08-29  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r281096.

        No new tests, no new behavioral changes.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::stateString const):

2021-08-28  Cameron McCormack  <heycam@apple.com>

        Miscellaneous typo fixes
        https://bugs.webkit.org/show_bug.cgi?id=229642

        Reviewed by Fujii Hironori.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunction):
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::encodeArrayInternal):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::ArgumentCoder<CFArrayRef>::encode):

2021-08-27  Cameron McCormack  <heycam@apple.com>

        Fix std::optional<> stripping in MessageArgumentDescriptions.cpp generator
        https://bugs.webkit.org/show_bug.cgi?id=229636
        <rdar://problem/82461615>

        Reviewed by Darin Adler.

        * Scripts/webkit/messages.py:
        (generate_js_argument_descriptions):
        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
        (IPC::messageReplyArgumentDescriptions):

2021-08-27  Simon Fraser  <simon.fraser@apple.com>

        Address post-landing feedback on r281728.

        Move a line inside the #ifdef.

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

2021-08-27  Simon Fraser  <simon.fraser@apple.com>

        Define ENABLE_CONTENT_CHANGE_OBSERVER for IOS_FAMILY and use it to wrap content observation code
        https://bugs.webkit.org/show_bug.cgi?id=229624

        Reviewed by Alan Bujtas.
        
        Deploy ENABLE(CONTENT_CHANGE_OBSERVER).

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

2021-08-27  Alex Christensen  <achristensen@webkit.org>

        Add UIEventAttribution SPI that uses PrivateClickMeasurementAttributionEphemeral::Yes
        https://bugs.webkit.org/show_bug.cgi?id=229623

        Reviewed by John Wilander.

        This will be used by rdar://80806283.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setEphemeralUIEventAttribution:]):
        (-[WKWebView _ephemeralUIEventAttribution]):

2021-08-27  Alex Christensen  <achristensen@webkit.org>

        Separate PrivateClickMeasurement database from ResourceLoadStatistics database and add SPI to set its location
        https://bugs.webkit.org/show_bug.cgi?id=229527

        Reviewed by Kate Cheney.

        This will be used by rdar://80806283

        In order to do this, I moved common code to DatabaseUtilities and moved the PCM logic from ResourceLoadStatisticsDatabaseStore
        to a new class.  It puts the data in a different file in the same directory unless SPI tells it to put it in a different directory.

        The biggest functional change I needed to do was to make a PCMObservedDomains table in the new DB instead of an ObservedDomains table,
        which contained more information than I needed.  I need just an index and a list of domains.

        Another slight implementation change is that instead of checking isEphemeral in WebResourceLoadStatisticsStore, I just pass an empty
        String to the Store if it's ephemeral, which causes no DB to be created, which causes equivalent behavior.

        I also moved the debug message broadcasting to PrivateClickMeasurementManager::attribute in order to make the Database object not
        need to know about the NetworkProcess and not need to keep state of whether debug mode is enabled.  Database::attributePrivateClickMeasurement
        now returns a DebugInfo object and PrivateClickMeasurementManager::attribute checks whether debug mode is enabled and broadcasts the messages.

        I added a few calls to PrivateClickMeasurement::isolatedCopy when moving an PrivateClickMeasurement object to another thread.

        I added a CompletionHandler to clearPrivateClickMeasurement and clearPrivateClickMeasurementForRegistrableDomain
        so that clearing website data doesn't say it's done until it's done.

        An even smaller change is I added a "ForTesting" suffix on some function names of functions that are only used in tests.

        The rest of this patch just moves code from one location to another.

        I still need to implement migrating data from the old DB to the new DB.  I'll do that in another patch soon.

        * CMakeLists.txt:
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::expectedTableAndIndexQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::needsUpdatedSchema):
        (WebKit::insertDistinctValuesInTableStatement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::interruptAllDatabases):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::destroyStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearDatabaseContents):
        (WebKit::expectedUnattributedColumns): Deleted.
        (WebKit::expectedAttributedColumns): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::close): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::enableForeignKeys): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::needsUpdatedPrivateClickMeasurementSchema): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsIfNecessary): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnInTable): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnsIfNecessary): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::scopedStatement const): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::interrupt): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::buildPrivateClickMeasurementFromDatabase): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::findPrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeUnattributed): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributePrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::allAttributedPrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearExpiredPrivateClickMeasurement): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributionToString): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::earliestTimesToSend): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::markReportAsSentToSource): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::markReportAsSentToDestination): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting): Deleted.
        (WebKit::ResourceLoadStatisticsDatabaseStore::beginTransactionIfNecessary): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::pcmStoreDirectory):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::create):
        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
        (WebKit::WebResourceLoadStatisticsStore::suspend):
        (WebKit::WebResourceLoadStatisticsStore::insertPrivateClickMeasurement): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::attributePrivateClickMeasurement): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::allAttributedPrivateClickMeasurement): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::clearPrivateClickMeasurement): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::clearPrivateClickMeasurementForRegistrableDomain): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::clearExpiredPrivateClickMeasurement): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::privateClickMeasurementToString): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::clearSentAttribution): Deleted.
        (WebKit::WebResourceLoadStatisticsStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/DatabaseUtilities.cpp: Added.
        (WebKit::DatabaseUtilities::DatabaseUtilities):
        (WebKit::DatabaseUtilities::~DatabaseUtilities):
        (WebKit::DatabaseUtilities::scopedStatement const):
        (WebKit::DatabaseUtilities::beginTransactionIfNecessary):
        (WebKit::DatabaseUtilities::openDatabaseAndCreateSchemaIfNecessary):
        (WebKit::DatabaseUtilities::enableForeignKeys):
        (WebKit::DatabaseUtilities::close):
        (WebKit::DatabaseUtilities::interrupt):
        * NetworkProcess/DatabaseUtilities.h: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolver.h.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::clearPrivateClickMeasurement):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
        (WebKit::NetworkSession::recreateResourceLoadStatisticStore):
        (WebKit::NetworkSession::dumpPrivateClickMeasurement):
        (WebKit::NetworkSession::clearPrivateClickMeasurement):
        (WebKit::NetworkSession::clearPrivateClickMeasurementForRegistrableDomain):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp: Added.
        (WebKit::PCM::Database::Database):
        (WebKit::PCM::Database::~Database):
        (WebKit::PCM::Database::interruptAllDatabases):
        (WebKit::PCM::Database::createSchema):
        (WebKit::PCM::Database::insertPrivateClickMeasurement):
        (WebKit::PCM::Database::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
        (WebKit::PCM::Database::findPrivateClickMeasurement):
        (WebKit::PCM::Database::attributePrivateClickMeasurement):
        (WebKit::PCM::Database::buildPrivateClickMeasurementFromDatabase):
        (WebKit::PCM::Database::removeUnattributed):
        (WebKit::PCM::Database::allAttributedPrivateClickMeasurement):
        (WebKit::PCM::Database::privateClickMeasurementToStringForTesting):
        (WebKit::PCM::Database::attributionToStringForTesting):
        (WebKit::PCM::Database::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::PCM::Database::clearPrivateClickMeasurement):
        (WebKit::PCM::Database::clearExpiredPrivateClickMeasurement):
        (WebKit::PCM::Database::clearSentAttribution):
        (WebKit::PCM::Database::markReportAsSentToDestination):
        (WebKit::PCM::Database::markReportAsSentToSource):
        (WebKit::PCM::Database::earliestTimesToSend):
        (WebKit::PCM::Database::domainID):
        (WebKit::PCM::Database::getDomainStringFromDomainID):
        (WebKit::PCM::Database::ensureDomainID):
        (WebKit::PCM::Database::destroyStatements):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h: Added.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDebugInfo.cpp: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolver.h.
        (WebKit::PCM::DebugInfo::isolatedCopy const):
        (WebKit::PCM::DebugInfo::Message::isolatedCopy const):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDebugInfo.h: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolver.h.
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp: Added.
        (WebKit::PCM::sharedWorkQueue):
        (WebKit::PCM::Store::prepareForProcessToSuspend):
        (WebKit::PCM::Store::processDidResume):
        (WebKit::PCM::Store::Store):
        (WebKit::PCM::Store::postTask):
        (WebKit::PCM::Store::postTaskReply):
        (WebKit::PCM::Store::insertPrivateClickMeasurement):
        (WebKit::PCM::Store::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
        (WebKit::PCM::Store::attributePrivateClickMeasurement):
        (WebKit::PCM::Store::privateClickMeasurementToStringForTesting):
        (WebKit::PCM::Store::allAttributedPrivateClickMeasurement):
        (WebKit::PCM::Store::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::PCM::Store::clearPrivateClickMeasurement):
        (WebKit::PCM::Store::clearPrivateClickMeasurementForRegistrableDomain):
        (WebKit::PCM::Store::clearExpiredPrivateClickMeasurement):
        (WebKit::PCM::Store::clearSentAttribution):
        (WebKit::PCM::Store::close):
        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h: Added.
        (WebKit::PCM::Store::create):
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::clearSentAttribution):
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        (WebKit::PrivateClickMeasurementManager::clear):
        (WebKit::PrivateClickMeasurementManager::clearForRegistrableDomain):
        (WebKit::PrivateClickMeasurementManager::clearExpired):
        (WebKit::PrivateClickMeasurementManager::toStringForTesting const):
        (WebKit::PrivateClickMeasurementManager::markAllUnattributedAsExpiredForTesting):
        (WebKit::PrivateClickMeasurementManager::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::PrivateClickMeasurementManager::toString const): Deleted.
        * NetworkProcess/PrivateClickMeasurementManager.h:
        * NetworkProcess/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PrivateClickMeasurementNetworkLoader::~PrivateClickMeasurementNetworkLoader):
        (WebKit::PrivateClickMeasurementNetworkLoader::cancel):
        (WebKit::PrivateClickMeasurementNetworkLoader::willSendRedirectedRequest):
        * NetworkProcess/PrivateClickMeasurementNetworkLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        * NetworkProcess/webrtc/NetworkRTCResolver.h:
        * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp:
        (WebKit::resolvedName):
        * Shared/ResourceLoadStatisticsParameters.h:
        (WebKit::ResourceLoadStatisticsParameters::encode const):
        (WebKit::ResourceLoadStatisticsParameters::decode):
        * Sources.txt:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _setNetworkProcessSuspensionAllowedForTesting:]):
        (+[WKWebsiteDataStore _preventNetworkProcessSuspensionForTesting]): Deleted.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration privateClickMeasurementStorageDirectory]):
        (-[_WKWebsiteDataStoreConfiguration setPrivateClickMeasurementStorageDirectory:]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setSuspensionAllowedForTesting):
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        (WebKit::NetworkProcessProxy::preventSuspensionForTesting): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::privateClickMeasurementStorageDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setPrivateClickMeasurementStorageDirectory):
        * WebKit.xcodeproj/project.pbxproj:

2021-08-27  Chris Dumez  <cdumez@apple.com>

        [WK2] Reuse the same network load when process-swapping on resource response due to COOP
        https://bugs.webkit.org/show_bug.cgi?id=229465
        <rdar://problem/82307611>

        Reviewed by Alex Christensen.

        r281516 added support for process-swapping based on Cross-Origin-Opener-Policy header
        in HTTP responses. However, on process-swap, we would abort the existing network load
        that was started by the original WebProcess and start a fresh network load in the new
        WebProcess. This was suboptimal and could lead to issues with resources that provide
        one-time behaviors. This patch addresses the issue by transferring the network load
        in the network process from the old WebProcess to the new WebProcess when process
        swapping.

        When the UIProcess decides to process-swap on response policy decision, it first
        sends IPC to the network process to ask it to prepare the NetworkResourceLoader
        for ownership transfer. The network process takes the NetworkResourceLoader
        from its NetworkConnectionToWebProcess and stores it in a temporary cache, then
        responds to the UIProcess with the NetworkResourceLoadIdentifier of the loader.
        Upon receiving the response, the UIProcess proceeds with the process-swap, it
        rejects response processing in the old process and does a loadRequest in a new
        WebProcess. When starting sending the LoadRequest IPC to the new WebProcess, it
        passes along the NetworkResourceLoadIdentifier of the cached loader in the network
        process. When the WebProcess ends up scheduling the load with the network process,
        it passes again the NetworkResourceLoadIdentifier. Upon receiving the load request,
        the network process checks if a NetworkResourceLoadIdentifier is provided for
        continuing a load. If none is provided, we use the regular code path and actually
        construct a new NetworkResourceLoader. However, if a NetworkResourceLoadIdentifier
        is provided, we take the corresponding NetworkResourceLoader from the cache,
        transfer it to the new NetworkConnectionToWebProcess and have it send the
        DidReceiveResponse IPC to the WebProcess to continue the load with the new
        WebProcess.

        Test: http/wpt/cross-origin-opener-policy/single-request-to-server.html

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):
        (WebKit::NetworkConnectionToWebProcess::transferKeptAliveLoad):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::takeNetworkResourceLoader):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::CachedNetworkResourceLoader::CachedNetworkResourceLoader):
        (WebKit::NetworkProcess::CachedNetworkResourceLoader::takeLoader):
        (WebKit::NetworkProcess::CachedNetworkResourceLoader::expirationTimerFired):
        (WebKit::NetworkProcess::takeLoaderAwaitingWebProcessTransfer):
        (WebKit::NetworkProcess::prepareLoadForWebProcessTransfer):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::transferToNewWebProcess):
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForXFrameOptions):
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions):
        (WebKit::NetworkResourceLoader::shouldInterruptNavigationForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::shouldInterruptWorkerLoadForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::logCookieInformation const):
        (WebKit::NetworkResourceLoader::addConsoleMessage):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::sendToClient):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::prepareLoadForWebProcessTransfer):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        * WebProcess/WebPage/WebPage.h:

2021-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix a typo in `ArgumentCoder<Ref<Font>>::decode()`
        https://bugs.webkit.org/show_bug.cgi?id=229596

        Reviewed by Tim Horton.

        Change `renderingRersouceIdentifier` to `renderingResourceIdentifier`.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Ref<Font>>::decode):

2021-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add type-safe transaction identifiers for EditorState and FocusedElementInformation
        https://bugs.webkit.org/show_bug.cgi?id=229571

        Reviewed by Tim Horton.

        Make `transactionID` a monotonic object identifier instead of a generic `TransactionID`, and replace
        `FocusedElementIdentifier` (which is currently type-defined to `uint64_t`) with its own monotonic object
        identifier type.

        In a future patch, I plan to implement a mechanism to synchronize `EditorState` and `FocusedElementInformation`
        updates, which would require one or both of these objects to hold both types of transactional identifiers; in
        order to do this, we need to ensure that these two identifiers are distinct types, so that they can't be easily
        mixed up.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:
        * Shared/IdentifierTypes.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateEditorState):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView updateCurrentFocusedElementInformation:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::elementDidFocus):
        * WebProcess/WebPage/WebPage.h:

        Additionally rename `m_currentFocusedElementIdentifier` to `m_lastFocusedElementInformationIdentifier`, for
        consistency with `m_lastEditorStateIdentifier`.

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

2021-08-26  Cameron McCormack  <heycam@apple.com>

        Manually release SharedBitmap if CGBitmapContextCreateWithData fails and doesn't do it
        https://bugs.webkit.org/show_bug.cgi?id=229428
        <rdar://problem/82264138>

        Reviewed by Darin Adler.

        * Shared/ShareableBitmap.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::releaseBitmapContextData):

2021-08-26  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Photo picker appears at incorrect locations when opened using a trackpad
        https://bugs.webkit.org/show_bug.cgi?id=229568
        rdar://80268735

        Reviewed by Wenson Hsieh.

        On iOS, file inputs that accept photos give the user the option to
        select from a photo picker rather than a standard document picker.
        The photo picker is presented as a popover, and uses the content
        view's `lastInteractionLocation` to determine the source rect.
        However, `lastInteractionLocation` is not updated when mouse events
        are recognized, leading to the popover being presented at the location
        of the most recent tap / long press / touch event.

        To fix, ensure `lastInteractionLocation` is updated when a mouse down
        event is recognized.

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

2021-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up logging #includes
        https://bugs.webkit.org/show_bug.cgi?id=229547

        Reviewed by Eric Carlson.

        It's actually harmful to include the wrong framework's Logging.h file,
        because they conflict with each other. You'll end up with errors like
        Unknown symbol "WebCore::WebKit2LogLayout".

        No new tests because there is no behavior change.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::logChannel const):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::logChannel):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::logChannel const):
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        (WebKit::MediaTrackReader::logChannel const):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::logChannel const):
        * UIProcess/MediaKeySystemPermissionRequestManagerProxy.cpp:
        (WebKit::logChannel):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::logChannel const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::logChannel const):
        * WebProcess/GPU/media/MediaSourcePrivateRemote.cpp:
        (WebKit::MediaSourcePrivateRemote::logChannel const):
        * WebProcess/GPU/media/RemoteAudioSourceProvider.cpp:
        (WebKit::RemoteAudioSourceProvider::logChannel const):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::logChannel const):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::logChannel const):

2021-08-26  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteGraphicsContextGL refers to GraphicsContextGLOpenGL::SimulatedEventForTesting
        https://bugs.webkit.org/show_bug.cgi?id=229405

        Reviewed by Kenneth Russell.

        Instead, refer via the defining base class, i.e. use
        GraphicsContextGL::SimulatedEventForTesting.
        Fixes problems if we try to move ANGLE implementation out of
        GraphicsContextGLOpenGL.

        No new tests, refactor.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::simulateEventForTesting):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:

2021-08-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] REGRESSION(r281158): fetch('http://localhost/') from about:blank doesn't emit the console error message
        https://bugs.webkit.org/show_bug.cgi?id=229515

        Unreviewed, reverting r281158.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::invokeDidReceiveResponse):

2021-08-25  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Unable to select files when the accept attribute is set to "*/*"
        https://bugs.webkit.org/show_bug.cgi?id=229456
        rdar://82346315

        Reviewed by Chris Dumez.

        "*/*" is a valid MIME type string representing all media types. However,
        the UniformTypeIdentifiers framework (as well as the now deprecated
        CoreServices type identifiers API) does not map wildcard MIME types.

        In order to restrict `UIDocumentPickerViewController` to the types of
        files specified in the accept attribute, all MIME type strings are
        converted into `UTType`s. However, when attempting to retrieve a UTType
        for "*/*", the system dynamically generates a type, since the string is
        unregistered. Then, since no files conform to the dynamic type, all
        files in the document picker are greyed out, and the user is unable
        to access the "Photo Library" and "Take Photo or Video" items.

        To fix, return an empty set of type identifiers whenever "*/*" is
        present in the list of MIME types, ensuring there are no restrictions
        on the types of files that can be selected.

        Note that the same issue does not occur on macOS, since all MIME types
        are mapped to a set of file extensions, rather than UTTypes. Furthermore,
        on macOS, the embedding app, not WebKit, is responsible for displaying
        the file picker.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some iOS-specific compile-time guards that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=229500

        Reviewed by Tim Horton.

        Remove two compile-time flags that were no longer necessary after WebKit's minimum supported iOS version became
        iOS 14: `USE(UIKIT_KEYBOARD_ADDITIONS)` and `HAVE(NONDESTRUCTIVE_IMAGE_PASTE_SUPPORT_QUERY)`.

        `HAVE(NONDESTRUCTIVE_IMAGE_PASTE_SUPPORT_QUERY)` was only needed for a workaround in our test infrastructure,
        while `USE(UIKIT_KEYBOARD_ADDITIONS)` was only introduced to maintain basic hardware keyboard functionality in
        iOS 12, while supporting improvements to hardware keyboard support in iOS 13.

        The latter now only guards `PLATFORM(IOS) || PLATFORM(MACCATALYST)`. However, there's no reason the codepaths
        for hardware keyboard support can't exist on watchOS as well (especially since most of hardware keyboard
        support is already implemented there -- just unreachable because it's not possible to attach a hardware keyboard
        to an Apple watch). We can remove this feature flag, and simply delete code that was formerly guarded by
        `!USE(UIKIT_KEYBOARD_ADDITIONS)`.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode const):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/WebKeyboardEvent.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView _disableAutomaticKeyboardUI]):
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView _setMarkedText:highlights:selectedRange:]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView _handleKeyUIEvent:]):
        (-[WKContentView handleKeyWebEvent:withCompletionHandler:]):
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]):
        (-[WKContentView _elementDidBlur]):
        (-[WKContentView _hardwareKeyboardAvailabilityChanged]):
        (-[WKContentView _selectionChanged]):
        (-[WKContentView keyCommands]): Deleted.
        (-[WKContentView handleKeyEvent:]): Deleted.
        * UIProcess/ios/WKSyntheticFlagsChangedWebEvent.h:
        * UIProcess/ios/WKSyntheticFlagsChangedWebEvent.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):
        (-[WKSelectTableViewController hasText]): Deleted.
        (-[WKSelectTableViewController insertText:]): Deleted.
        (-[WKSelectTableViewController deleteBackward]): Deleted.
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleInputMethodKeydown):

2021-08-25  Simon Fraser  <simon.fraser@apple.com>

        Replace the uint64_t used to identify form submits with a strongly typed identifier
        https://bugs.webkit.org/show_bug.cgi?id=229513

        Reviewed by Alex Christensen.

        Introduce FormSubmitListenerIdentifier and use it in place of a uint64_t.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/IdentifierTypes.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willSubmitForm):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::setUpWillSubmitFormListener):
        (WebKit::WebFrame::continueWillSubmitForm):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::continueWillSubmitForm):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Visual Look Up animates from the wrong rect when the web view is scaled
        https://bugs.webkit.org/show_bug.cgi?id=229518
        rdar://82147473

        Reviewed by Darin Adler.

        When adopting QLPreviewControllerDelegate's animated transition methods for rdar://76020349, I mistakenly
        thought that the `outContentRect` passed into `-previewController:transitionImageForPreviewItem:contentRect:`
        would be in source view (WKContentView) coordinates; instead, QuickLook expects this `contentRect` to be in
        window coordinates.

        Fix this by first converting `_visualSearchPreviewImageBounds` to window coordinates.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewController:transitionImageForPreviewItem:contentRect:]):

2021-08-25  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] RemoteAudioSession doesn't implement begin/endInterruption
        https://bugs.webkit.org/show_bug.cgi?id=229514
        rdar://80896732

        Reviewed by Jer Noble.

        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::setIsPlayingToBluetoothOverride): Remove 
        ENABLE_ROUTING_ARBITRATION guard because it isn't used in the base class.
        * WebProcess/GPU/media/RemoteAudioSession.h: Change the order virtual methods are declared
        so they match the base class, to make it easier to spot differences.

2021-08-25  Per Arne Vollan  <pvollan@apple.com>

        Build error preprocessing sandbox
        https://bugs.webkit.org/show_bug.cgi?id=229418

        Reviewed by Alexey Proskuryakov.

        Build fix after https://commits.webkit.org/240941@main.

        * Scripts/generate-derived-sources.sh:

2021-08-25  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Crash when tapping <select> element and calling window.open()
        https://bugs.webkit.org/show_bug.cgi?id=229468
        rdar://82122972

        Reviewed by Wenson Hsieh.

        UIKit throws an exception when attempting to present a context menu
        for a view that is not in a window.

        One instance where this can occur in Safari is when a call to
        window.open() is made in response to a touch on a select element.
        In this scenario, the call to window.open() opens a new tab, unparenting
        the current webview. However, the touch also focuses the element, and
        WebKit attempts to present a context menu in an unparented view.

        To fix, guard against the case where the view is not parented, and do
        not attempt to present a context menu.

        Test: fast/forms/ios/show-select-menu-in-unparented-view-crash.html

        * UIProcess/ios/WKActionSheetAssistant.mm:

        Note that the helper method used in other classes is not used in
        WKActionSheetAssistant, since the hosting view is not always a
        WKContentView.

        (-[WKActionSheetAssistant showDataDetectorsUIForPositionInformation:]):
        (-[WKActionSheetAssistant showMediaControlsContextMenu:items:completionHandler:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView presentContextMenu:atLocation:]):

        Added a helper method to ensure the view is parented prior to presenting
        a context menu.

        (-[WKContentView imageAnalysisGestureDidTimeOut:]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsDropdown _showSuggestions]):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker showDateTimePicker]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel showDocumentPickerMenu]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker showSelectPicker]):

2021-08-25  Per Arne Vollan  <pvollan@apple.com>

        Build error preprocessing sandbox
        https://bugs.webkit.org/show_bug.cgi?id=229418

        Reviewed by Alexey Proskuryakov.

        Skip unneeded commands when preprocessing sandbox on iOS.

        * Scripts/generate-derived-sources.sh:

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] editing/input/cocoa/autocorrect-on.html times out when run after editing/input/cocoa/autocorrect-off.html
        https://bugs.webkit.org/show_bug.cgi?id=229486
        rdar://82191308

        Reviewed by Tim Horton.

        See changes in Tools for more details.

        * Platform/spi/ios/TextInputSPI.h:
        * Platform/spi/ios/UIKitSPI.h:

2021-08-25  Peng Liu  <peng.liu6@apple.com>

        [Monterey] LayoutTest media/element-containing-pip-video-going-into-fullscreen.html is flaky timeout/crash
        https://bugs.webkit.org/show_bug.cgi?id=229453
        <rdar://80346428>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        When the mock video presentation mode is enabled, the UI process still needs to
        notify the Web process that the mode change has been done.

        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::VideoFullscreenManager::didCleanupFullscreen):
        Return immediately if the element is not in fullscreen to avoid
        an assertion later in `enterVideoFullscreenForVideoElement()`.

2021-08-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Implement process-swapping based on Cross-Origin-Opener-Policy HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=229203
        <rdar://problem/82047686>

        Reviewed by Alex Christensen.

        We recently added support for the Cross-Origin-Opener-Policy (COOP) HTTP header. However,
        when switching browsing context group on HTTP response, we would keep using the same 
        WebProcess. This patch makes it so that we now swap WebProcess when switching browsing
        context group on network response as this will be required to securely re-enable Web APIs
        such as SharedArrayBuffer.

        For process-swapping, we reuse most of the same logic as process-swap on navigation (PSON).
        A few differences are that:
        - We swap on response policy decision instead of navigation policy decision
        - We used to have a ShouldTreatAsContinuingLoad Yes/No enum. It is now tri-state: No,
          YesAfterNavigationPolicyDecision, YesAfterResponsePolicyDecision. We need this new state
          to avoid duplicate response policy delegate calls after process-swapping and to avoid
          sending duplicate didStartProvisionalLoad IPCs after proces-swapping.
        - After process-swapping on navigation response, we close the previous page instead of trying
          to put it into the back/forward cache. Per the specification, in a case of a browsing context
          group switch, the previous browsing context needs to be discarded (which is Web-observable).

        One important thing to note is that we currently send the HTTP request to the server AGAIN after
        a process-swap. This is because the on-going load currently gets cancelled upon receiving the
        network response and deciding to process-swap and a new fresh load gets issued by the new
        WebProcess after swapping. I will address this in a follow-up to decrease patch size and
        complexity. We will need to transition the load in the network process from the old WebProcess
        to the new one in case of process-swap.

        * Shared/LoadParameters.h:
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::decidePolicyForResponse):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::shouldClosePreviousPageAfterCommit const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseShared):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::optionalRegistrableDomain const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-24  Chris Dumez  <cdumez@apple.com>

        Crash in [RBSTarget targetWithPid:] during WebProcessProxy::shutDown
        https://bugs.webkit.org/show_bug.cgi?id=229444

        Reviewed by Alex Christensen.

        It appears xpc_connection_get_pid() may be able to return a PID that is less than 0
        (likely when the process has just exited) and this causes RunningBoard to throw an
        exception because the PID is invalid. Tweak the WebKit PID validation to use '>= 0'
        instead of simply '!= 0', so that our validation is identical to the one used by
        RunningBoard.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):

2021-08-24  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late August 2021
        https://bugs.webkit.org/show_bug.cgi?id=229440

        Unreviewed non-unified build fixes.

        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: Add missing
        wtf/SuspendableWorkQueue.h header.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp: Ditto.

2021-08-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Show TLS protocol version and ciphersuite name in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=229400

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::tlsProtocolVersionToString):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):

2021-08-23  John Wilander  <wilander@apple.com>

        PCM: Support ephemeral measurement with non-persistent WebCore::PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=228984
        <rdar://problem/81778213>

        Reviewed by Kate Cheney.

        This patch adds support for ephemeral measurement with non-persistent
        WebCore::PrivateClickMeasurement for direct response advertising.
        Such advertising means there is only one pending click, held in memory,
        and only stored right before the triggering event causes attribution
        reports to be scheduled.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::attributePrivateClickMeasurement):
            Now takes an optional ephemeral PrivateClickMeasurement parameter
            and stores it right before moving on with attribution.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setPrivateClickMeasurementEphemeralMeasurementForTesting):
            Test infrastructure.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setPrivateClickMeasurementEphemeralMeasurementForTesting):
            Test infrastructure.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
            New convenience function. Only stores in memory if the
            PrivateClickMeasurement parameter is marked as ephemeral.
        (WebKit::PrivateClickMeasurementManager::attribute):
            Checks that the triggering event matches the ephemeral measurement if
            it exists, and if so, forwards it.
        (WebKit::PrivateClickMeasurementManager::clear):
            Now clears the ephemeral state too.
        * NetworkProcess/PrivateClickMeasurementManager.h:
        (WebKit::PrivateClickMeasurementManager::setEphemeralMeasurementForTesting):
            Test infrastructure.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPrivateClickMeasurementEphemeralMeasurementForTesting):
            Test infrastructure.
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setPrivateClickMeasurementEphemeralMeasurementForTesting):
            Test infrastructure.
        * UIProcess/WebPageProxy.h:

2021-08-23  Cameron McCormack  <heycam@apple.com>

        Preserve color space when getting current color in DisplayList::DrawGlyphsRecorder
        https://bugs.webkit.org/show_bug.cgi?id=229024
        <rdar://problem/81828477>

        Reviewed by Sam Weinig.

        Change existing CGColor -> WebCore::Color conversions to be explicit
        about lossily converting to sRGB.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setUnderPageBackgroundColor:]):
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest initWithCoder:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformUnderPageBackgroundColor const):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):

2021-08-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r271146): editing/selection/ios/scrolling-to-focused-element-inside-iframe.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=229376
        rdar://80384683

        Reviewed by Megan Gardner.

        This iOS-specific test verifies that tapping on an element that makes itself contenteditable inside of a click
        event handler both (1) brings up the software keyboard, and (2) scrolls to reveal the focused, newly editable
        element such that it is not obscured by the software keyboard. This test began failing after the changes in
        r271146 -- specifically, the fact that the call to `Element::setFocus()` moved to before the focus event is
        dispatched, rather than afterwards.

        The following timeline of events (annotated with web and UI processes) illustrates why this happens:

        (WEB)   1.  The click event on the element inside the subframe is handled; the element is made contentEditable,
                    and we make it focused, by first calling `Element::setFocus` and then `Element::dispatchFocusEvent`.
                    Right before dispatching the "focus" event, we call out to the client layer, via
                    `WebPage::elementDidFocus`, and compute a FocusedElementInformation struct to encode and send to the
                    UI process in the WebPageProxy::ElementDidFocus IPC message.

                2.  In the process of populating this struct in `WebPage::focusedElementInformation`, we observe that
                    layout is dirty, and immediately compute and send an EditorState underneath
                    `WebPage::sendEditorStateUpdate()`.

                3.  We then proceed to construct and send FocusedElementInformation to the UI process via
                    `Messages::WebPageProxy::ElementDidFocus`.

        (UI)    4.  We receive the EditorState that was computed and sent in step (2), which contains the up-to-date
                    state corresponding to the newly focused contentEditable `div`.

                5.  We then receive the FocusedElementInformation computed and sent in step (3), which makes us begin
                    waiting for the next post-layout EditorState update before zooming to reveal the focused element, by
                    setting WebPageProxy's `m_waitingForPostLayoutEditorStateUpdateAfterFocusingElement` flag. However,
                    this post-layout EditorState after focusing the `div` never arrives, since we've already computed it
                    and sent it in step (2).

                6.  The software keyboard finishes animating in, causing us to resolve the UIScriptController promise
                    that we began to await after calling `UIHelper.activateAndWaitForInputSessionAt` in the test.

        (WEB)   7.  The test finishes, calls `testRunner.notifyDone()`, and we destroy the focused subframe and clear
                    the editable selection as well. This selection change causes us to compute another post-layout
                    editor state and send it to the UI process.

        (UI)    8.  The UI process *finally* receives the post-layout EditorState computed in (7). However, it's too
                    late, since (a) the test has already finished, and (b) the post-layout EditorState is computed after
                    the editable selection has already been cleared, so it's missing selection rect information anyways.

        Prior to r271146, the call to `Element::setFocus` came *after* step (3), and caused us to compute and send
        another EditorState to the UI process, which ensured that an up-to-date post layout EditorState would arrive in
        the UI process shortly after step (5).

        To fix this, we should avoid immediately computing and sending an EditorState to the UI process in the middle of
        `WebPage::focusedElementInformation`, and instead simply schedule an EditorState during the next rendering
        update. This ensures that the editor state triggered during element focus will always arrive after
        `WebPageProxy::ElementDidFocus` in the UI process, rather than before, which allows us to scroll to the correct
        selection rect in the UI process when focusing an editable element.

        This also has the additional benefit of avoiding redundant EditorState computation and updates in the case where
        focus is programmatically thrashed between elements during the same rendering update, since all of the editor
        state updates are effectively batched together and dispatched at the end of the current rendering update.

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

2021-08-23  Chris Dumez  <cdumez@apple.com>

        WebKit2 can only have one active navigation policy check for a given frame
        https://bugs.webkit.org/show_bug.cgi?id=229012

        Reviewed by Youenn Fablet.

        WebKit2 could only have one active navigation policy check for a given frame
        and there was a FIXME comment about this in the code. This was causing some
        WPT tests to timeout in WebKit2 only because those tests would trigger
        several navigations (e.g. in new windows) and only the last one would proceed
        (earlier ones would get cancelled).

        This patch updates the policy checking logic in WebFrame so that we can support
        several concurrent policy checks.

        No new tests, unskipped / rebaselined existing tests.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::cancelPolicyCheck):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::~WebFrame):
        (WebKit::WebFrame::setUpPolicyListener):
        (WebKit::WebFrame::setUpWillSubmitFormListener):
        (WebKit::WebFrame::continueWillSubmitForm):
        (WebKit::WebFrame::invalidatePolicyListeners):
        (WebKit::WebFrame::didReceivePolicyDecision):
        * WebProcess/WebPage/WebFrame.h:

2021-08-22  Kate Cheney  <katherine_cheney@apple.com>

        Report correct blocked URI in CSP violation report
        https://bugs.webkit.org/show_bug.cgi?id=226316
        <rdar://problem/78552912>

        Reviewed by Alex Christensen.

        Currently for a blocked redirection we report the blocked URI as the
        target URL. This is not up to spec and we should actually report the
        requested URL.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::check):
        (WebKit::NetworkLoadChecker::checkRedirection):
        (WebKit::NetworkLoadChecker::checkRequest):
        (WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy):
        * NetworkProcess/NetworkLoadChecker.h:

2021-08-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Fix and reenable several layout tests to account for the changes in rdar://80384564
        https://bugs.webkit.org/show_bug.cgi?id=229316

        Reviewed by Tim Horton.

        After rdar://80384564, UIKit's non-editable text tap recognizer will no longer cause us to clear the active text
        selection range when tapping outside of currently selected text in the page. Instead, WebKit's synthetic click
        gesture recognizer should now manages clearing the selection (unless the page has prevented the "mousedown"
        event).

        With just the UIKit-side change, this already mostly works as expected since `commitPotentialTapFailed()` clears
        out non-editable selections. However, there is one scenario in which we do want to clear out the selection when
        tapping that isn't covered by the synthetic click gesture: when tapping on an element that does not handle or
        prevent "mousedown"; this behavior is exercised by the existing layout test
        `editing/selection/ios/hide-selection-after-tap-on-prevent-default-element.html`. To preserve this behavior, we
        add a call to `clearSelectionAfterTapIfNeeded()` when completing a synthetic click, in the case where the
        "mousedown" event was not swallowed.

        These 3 tests should pass after the changes in rdar://80384564:
        - editing/selection/ios/change-selection-by-tapping-with-existing-selection.html
        - editing/selection/preserve-selection-when-clicking-button.html
        - editing/selection/ios/persist-selection-after-tapping-on-element-with-mousedown-handler.html

        And these WebKit-side changes are needed to keep these 2 tests passing:
        - editing/selection/ios/hide-selection-after-tap-on-prevent-default-element.html
        - fast/images/text-recognition/ios/reselect-word-in-image-overlay.html

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

2021-08-22  Simon Fraser  <simon.fraser@apple.com>

        Use the strongly typed PageGroupIdentifier in place of uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=229356

        Reviewed by Alex Christensen.

        Replace uses of uint64_t for page group identifiers with PageGroupIdentifier.

        There are two places where we convert between StorageNamespaceIdentifier and
        PageGroupIdentifier because, as the comments state, those are equivalent.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/IdentifierTypes.h:
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::get):
        (WebKit::pageGroupData):
        (WebKit::generatePageGroupID): Deleted.
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::pageGroupID const):
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::getOrCreate):
        (WebKit::WebDatabaseProvider::WebDatabaseProvider):
        * WebProcess/Databases/WebDatabaseProvider.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::WebSWContextManagerConnection):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::pageGroupID const):
        (WebKit::WebPageGroupProxy::localStorageNamespaceIdentifier const):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webPageGroup):
        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::pageGroupID const):
        * WebProcess/WebStorage/StorageNamespaceImpl.h:

2021-08-21  Simon Fraser  <simon.fraser@apple.com>

        Use MediaKeySystemRequestIdentifier, rather than mysterious uint64_t values, in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=229310

        Reviewed by Youenn Fablet.

        WebCore already had an ObjectIdentifer<> type for media system key requests, MediaKeySystemRequestIdentifier.
        Use it in the WebKit layer.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * UIProcess/MediaKeySystemPermissionRequestManagerProxy.cpp:
        (WebKit::MediaKeySystemPermissionRequestManagerProxy::denyRequest):
        (WebKit::MediaKeySystemPermissionRequestManagerProxy::grantRequest):
        (WebKit::MediaKeySystemPermissionRequestManagerProxy::createRequestForFrame):
        * UIProcess/MediaKeySystemPermissionRequestManagerProxy.h:
        * UIProcess/MediaKeySystemPermissionRequestProxy.cpp:
        (WebKit::MediaKeySystemPermissionRequestProxy::MediaKeySystemPermissionRequestProxy):
        * UIProcess/MediaKeySystemPermissionRequestProxy.h:
        (WebKit::MediaKeySystemPermissionRequestProxy::create):
        (WebKit::MediaKeySystemPermissionRequestProxy::mediaKeySystemID const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestMediaKeySystemPermissionForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.cpp:
        (WebKit::MediaKeySystemPermissionRequestManager::sendMediaKeySystemRequest):
        (WebKit::MediaKeySystemPermissionRequestManager::mediaKeySystemWasGranted):
        (WebKit::MediaKeySystemPermissionRequestManager::mediaKeySystemWasDenied):
        * WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mediaKeySystemWasGranted):
        (WebKit::WebPage::mediaKeySystemWasDenied):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-20  Simon Fraser  <simon.fraser@apple.com>

        Remove AsyncRequest, which is unused
        https://bugs.webkit.org/show_bug.cgi?id=229358

        Reviewed by Alex Christensen.

        * Shared/AsyncRequest.cpp: Removed.
        * Shared/AsyncRequest.h: Removed.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-08-20  Simon Fraser  <simon.fraser@apple.com>

        Use UserMediaRequestIdentifier in WebKit rather than a mysterious uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=229308

        Reviewed by Youenn Fablet.

        Use the existing WebCore::UserMediaRequestIdentifier in WebKit code. We need to pull
        it out of the ENABLE(MEDIA_STREAM) #ifdef.
        
        In UserMediaPermissionRequestManagerProxy use a new identifier type, MediaDevicePermissionRequestIdentifier,
        which is used to identify pending permission requests (but never send to the web process).

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared): Sort
        (headers_for_type):
        * UIProcess/MediaKeySystemPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::denyRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::grantRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionInvalidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::processUserMediaPermissionValidRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
        (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
        (WebKit::generateRequestID): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::userMediaID const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj: Some files that were in Sources.txt were missing from the project.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasGranted):
        (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasDenied):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userMediaAccessWasGranted):
        (WebKit::WebPage::userMediaAccessWasDenied):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-20  Aditya Keerthi  <akeerthi@apple.com>

        [macCatalyst] Crash when clicking a phone number link
        https://bugs.webkit.org/show_bug.cgi?id=229344
        rdar://81804638

        Reviewed by Tim Horton.

        Clicking on a phone number link should present data detection UI.
        However, `-[WKActionSheetAssistant _elementActionForDDAction:]` always
        returns nil on Catalyst, resulting in crash when attempting to add the
        returned action to an NSArray.

        Given that the methods used in `_elementActionForDDAction:` are available
        on Catalyst, fix the crash by ensuring the method does not return nil, and
        only making the method available on platforms where ENABLE(DATA_DETECTION)
        is defined.

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

2021-08-20  Alex Christensen  <achristensen@webkit.org>

        Make UIEventAttribution tests less platform dependent
        https://bugs.webkit.org/show_bug.cgi?id=229323

        Reviewed by John Wilander.

        This allows me to run the UIEventAttribution tests on macOS.
        It also makes them not time out, which they were doing since r277447.
        To accomplish this, I added more test SPI to prevent the network process
        suspension message, which was causing the test to time out on the iOS simulator.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _preventNetworkProcessSuspensionForTesting]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _setUIEventAttributionForTesting:withNonce:]): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preventSuspensionForTesting):
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        * UIProcess/Network/NetworkProcessProxy.h:

2021-08-20  Simon Fraser  <simon.fraser@apple.com>

        Change the mysterious uint64_t argument to detectDataInAllFrames() to OptionSet<WebCore::DataDetectorType>
        https://bugs.webkit.org/show_bug.cgi?id=229304

        Reviewed by Tim Horton.

        We can encode a OptionSet<WebCore::DataDetectorType> in IPC messages now, so do so for DetectDataInAllFrames().
        Also use OptionSet<WebCore::DataDetectorType> in some cases where WebCore::DataDetectorType was being used
        to hold a bit set.

        * Shared/API/Cocoa/WKDataDetectorTypesInternal.h:
        (fromWKDataDetectorTypes):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::detectDataInAllFrames):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::detectDataInAllFrames):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Use an ObjectIdentifier<> for text checker requests
        https://bugs.webkit.org/show_bug.cgi?id=229302

        Reviewed by Wenson Hsieh.

        Introduce TextCheckerRequestID and use it to identify text checker requests in a type-safe
        way.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/IdentifierTypes.h:
        * UIProcess/TextCheckerCompletion.cpp:
        (WebKit::TextCheckerCompletion::create):
        (WebKit::TextCheckerCompletion::TextCheckerCompletion):
        * UIProcess/TextCheckerCompletion.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestCheckingOfString):
        (WebKit::WebPageProxy::didFinishCheckingText):
        (WebKit::WebPageProxy::didCancelCheckingText):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString):
        (WebKit::generateTextCheckingRequestID): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addTextCheckingRequest):
        (WebKit::WebPage::didFinishCheckingText):
        (WebKit::WebPage::didCancelCheckingText):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-08-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the apple internal build after r281277
        https://bugs.webkit.org/show_bug.cgi?id=229100
        <rdar://problem/82145920>

        Reviewed by Myles C. Maxfield.

        Update code guarded by `USE(APPLE_INTERNAL_SDK)`, such that it works with a `Vector<SandboxExtension::Handle>`.
        Preserve the existing behavior of appending `handles` and `ids` in reverse order, but leave a FIXME questioning
        the need for this.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):

2021-08-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove support for the meaningful tap heuristic
        https://bugs.webkit.org/show_bug.cgi?id=229298
        rdar://82130066

        Reviewed by Tim Horton.

        Remove all support for the meaningful tap heuristic, which was used to allow users to toggle tab pill visibility
        in earlier versions of the Safari redesign. As of the latest iOS 15 beta, this heuristic is no longer necessary,
        so we don't need this SPI support anymore.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didNotHandleTapAsClick):
        (API::UIClient::didTapAtPoint): Deleted.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _didTapAtPoint:withResult:]): Deleted.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didTapAtPoint): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didTapAtPoint): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didTapAtPoint): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didHandleOrPreventMouseDownOrMouseUpEvent): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isPlayingMediaDidChange):
        * WebProcess/WebPage/WebPage.h:

        Drive-by fix: initialize `m_appHighlightsVisible` using the correct type.

        (WebKit::WebPage::platformNeedsLayoutForEditorState const):
        (WebKit::WebPage::prepareToRunModalJavaScriptDialog):
        (WebKit::WebPage::didHandleOrPreventMouseDownOrMouseUpEvent): Deleted.
        (WebKit::WebPage::platformIsPlayingMediaDidChange): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::attemptSyntheticClick):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTapFailed):
        (WebKit::WebPage::clearSelectionAfterTapIfNeeded):
        (WebKit::isProbablyMeaningfulClick): Deleted.
        (WebKit::WebPage::didHandleOrPreventMouseDownOrMouseUpEvent): Deleted.
        (WebKit::WebPage::platformIsPlayingMediaDidChange): Deleted.

2021-08-19  Aditya Keerthi  <akeerthi@apple.com>

        Remove __has_include guard for _UIDatePickerOverlayPresentation
        https://bugs.webkit.org/show_bug.cgi?id=227298
        rdar://79970171

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker showDateTimePicker]):

2021-08-19  Alex Christensen  <achristensen@webkit.org>

        Use Vector<SandboxExtension::Handle> instead of SandboxExtension::HandleArray
        https://bugs.webkit.org/show_bug.cgi?id=229100

        Reviewed by Chris Dumez.

        No change in behavior.  Just more modern code.

        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        (IPC::FormDataReference::decode):
        * Shared/Cocoa/LoadParametersCocoa.mm:
        (WebKit::LoadParameters::platformDecode):
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::createHandlesForResources):
        (WebKit::SandboxExtension::createReadOnlyHandlesForFiles):
        (WebKit::SandboxExtension::createHandlesForMachLookup):
        (WebKit::SandboxExtension::createHandlesForIOKitClassExtensions):
        (WebKit::SandboxExtension::consumePermanently):
        (WebKit::SandboxExtension::HandleArray::HandleArray): Deleted.
        (WebKit::SandboxExtension::HandleArray::~HandleArray): Deleted.
        (WebKit::SandboxExtension::HandleArray::allocate): Deleted.
        (WebKit::SandboxExtension::HandleArray::append): Deleted.
        (WebKit::SandboxExtension::HandleArray::operator[]): Deleted.
        (WebKit::SandboxExtension::HandleArray::operator[] const): Deleted.
        (WebKit::SandboxExtension::HandleArray::size const): Deleted.
        (WebKit::SandboxExtension::HandleArray::encode const): Deleted.
        (WebKit::SandboxExtension::HandleArray::decode): Deleted.
        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        (WebKit::WebIDBResult::encode const):
        (WebKit::WebIDBResult::decode):
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        (WebKit::WebIDBResult::WebIDBResult):
        (WebKit::WebIDBResult::handles const):
        * Shared/LoadParameters.h:
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::Handle::decode):
        (WebKit::SandboxExtension::createReadOnlyHandlesForFiles):
        (WebKit::SandboxExtension::consumePermanently):
        (WebKit::SandboxExtension::HandleArray::at): Deleted.
        (WebKit::SandboxExtension::HandleArray::HandleArray): Deleted.
        (WebKit::SandboxExtension::HandleArray::~HandleArray): Deleted.
        (WebKit::SandboxExtension::HandleArray::allocate): Deleted.
        (WebKit::SandboxExtension::HandleArray::append): Deleted.
        (WebKit::SandboxExtension::HandleArray::size const): Deleted.
        (WebKit::SandboxExtension::HandleArray::operator[] const): Deleted.
        (WebKit::SandboxExtension::HandleArray::operator[]): Deleted.
        (WebKit::SandboxExtension::HandleArray::begin): Deleted.
        (WebKit::SandboxExtension::HandleArray::end): Deleted.
        (WebKit::SandboxExtension::HandleArray::begin const): Deleted.
        (WebKit::SandboxExtension::HandleArray::end const): Deleted.
        (WebKit::SandboxExtension::HandleArray::encode const): Deleted.
        (WebKit::SandboxExtension::HandleArray::decode): Deleted.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded):
        (WebKit::WebPageProxy::createNetworkExtensionsSandboxExtensions):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::performDragOperation):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragOperation):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::processNextQueuedMouseEvent):
        (WebKit::WebPageProxy::createNetworkExtensionsSandboxExtensions):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dropInteraction:performDrop:]):
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.cpp:
        (WebKit::MediaDeviceSandboxExtensions::MediaDeviceSandboxExtensions):
        (WebKit::MediaDeviceSandboxExtensions::encode const):
        (WebKit::MediaDeviceSandboxExtensions::decode):
        * WebProcess/MediaStream/MediaDeviceSandboxExtensions.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPathnamesForType):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::consumeNetworkExtensionSandboxExtensions):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::extendSandboxForFilesFromOpenPanel):
        (WebKit::WebPage::consumeSandboxExtensions):
        (WebKit::WebPage::consumeNetworkExtensionSandboxExtensions):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::unblockPreferenceService):
        (WebKit::WebProcess::unblockServicesRequiredByAccessibility):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Replace the uint64_t used to identify taps with an ObjectIdentifier<> type
        https://bugs.webkit.org/show_bug.cgi?id=229278

        Reviewed by Wenson Hsieh.

        Interaction code used "uint64_t requestID" to identify taps, but there are other
        things that used "uint64_t requestID", which may result in bugs.

        Fix by using a strongly typed ObjectIdentifier<TapIdentifierType> to identify taps.
        This is defined in IdentifierTypes.h since I expect to add more of them.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/IdentifierTypes.h: Added.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::disableDoubleTapGesturesDuringTapIfNecessary):
        (WebKit::PageClientImpl::handleSmartMagnificationInformationForPotentialTap):
        (WebKit::PageClientImpl::didGetTapHighlightGeometries):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]):
        (-[WKContentView _disableDoubleTapGesturesDuringTapIfNecessary:]):
        (-[WKContentView _handleSmartMagnificationInformationForPotentialTap:renderRect:fitEntireRect:viewportMinimumScale:viewportMaximumScale:nodeIsRootLevel:]):
        (-[WKContentView nextTapIdentifier]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _singleTapIdentified:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::tapHighlightAtPosition):
        (WebKit::WebPageProxy::didGetTapHighlightGeometries):
        (WebKit::WebPageProxy::disableDoubleTapGesturesDuringTapIfNecessary):
        (WebKit::WebPageProxy::handleSmartMagnificationInformationForPotentialTap):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::potentialTapAtPosition):
        (WebKit::WebPage::tapHighlightAtPosition):

2021-08-19  Alex Christensen  <achristensen@webkit.org>

        Remove more non-inclusive language from Source
        https://bugs.webkit.org/show_bug.cgi?id=229230

        Reviewed by Myles C. Maxfield.

        * mac/WebKit2.order:

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Rename Element::clientRect() which does not return a value in web-exposed "client" coordinates
        https://bugs.webkit.org/show_bug.cgi?id=229243

        Reviewed by Wenson Hsieh.

        The result of Element::clientRect() is in the coordinate space of the root view,
        not in the space of the Element's Frame, so does not match the other functions on Element
        with "client" in the name.

        Rename to Element::boundingBoxInRootViewCoordinates() for clarity.

        * WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
        (WebKit::WebValidationMessageClient::showValidationMessage):
        (WebKit::WebValidationMessageClient::updateValidationBubbleStateIfNeeded):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::contextForElement const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isObscuredElement):
        (WebKit::WebPage::textInputContextsInRect):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Fix the typo in horiontalRubberbandAmountInContentCoordinates
        https://bugs.webkit.org/show_bug.cgi?id=229255

        Reviewed by Tim Horton.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _contentBoundsExtendedForRubberbandingWithScale:]):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Rename WebPageProxy::headerHeight() and related to make it clear they are for printing
        https://bugs.webkit.org/show_bug.cgi?id=229242

        Reviewed by Tim Horton.

        Disambiguate WebPageProxy::headerHeight(), used for printing, from FrameView::headerHeight()
        which is not.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::headerHeightForPrinting):
        (WebKit::WebPageProxy::footerHeightForPrinting):
        (WebKit::WebPageProxy::drawHeaderForPrinting):
        (WebKit::WebPageProxy::drawFooterForPrinting):
        (WebKit::WebPageProxy::headerHeight): Deleted.
        (WebKit::WebPageProxy::footerHeight): Deleted.
        (WebKit::WebPageProxy::drawHeader): Deleted.
        (WebKit::WebPageProxy::drawFooter): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]):
        (-[WKPrintingView drawPageBorderWithSize:]):

2021-08-19  Simon Fraser  <simon.fraser@apple.com>

        Use a Ref<> argument to keep WebPage alive in TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition()
        https://bugs.webkit.org/show_bug.cgi?id=229239

        Reviewed by Tim Horton.

        Replace a manual ref()/deref() with a makeRef() argument to the function.

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

2021-08-19  Kate Cheney  <katherine_cheney@apple.com>

        Unable to load downloaded HTML files in Safari
        https://bugs.webkit.org/show_bug.cgi?id=229254
        <rdar://problem/82051114>

        Reviewed by Brent Fulgham.

        Check quarantine bits for webarchive files only.

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

2021-08-19  Kate Cheney  <katherine_cheney@apple.com>

        [App Privacy Report] Some HTTP Redirects from non app initiated requests are marked app initiated
        https://bugs.webkit.org/show_bug.cgi?id=229202
        <rdar://problem/79467871>

        Reviewed by Brent Fulgham.

        Tests: http/tests/app-privacy-report/app-attribution-media-redirect.html
               http/tests/app-privacy-report/user-attribution-media-redirect.html

        The request returned in the completion handler of
        NetworkDataTaskCocoa::willPerformHTTPRedirection does not always have
        the attribution property of the original request. We should pass it
        along and set it.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):

2021-08-19  Zan Dobersek  <zdobersek@igalia.com>

        Adjust fallback SandboxExtension std::optional<Handle> construction
        https://bugs.webkit.org/show_bug.cgi?id=229233

        Reviewed by Carlos Garcia Campos.

        In r240512, std::optional<> was adopted as the return type for handle
        creation methods in the SandboxExtension class. For no-op methods,
        the construction of these return values was done using empty initializer
        lists.

        The changes here should match pre-r240512 behavior by creating empty
        Handle objects and using those to implicitly construct the returning
        std::optional<> object. In addition, this avoids compilation breakage
        with GCC 8 where ambiguity between possible std::optional<> constructors
        is detected.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandle):
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        (WebKit::SandboxExtension::createHandleForGenericExtension):

2021-08-19  Youenn Fablet  <youenn@apple.com>

        Rename MediaPlayer::setVisible to MediaPlayer::setPageIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=228837
        <rdar://problem/81857023>

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setPageIsVisible):
        (WebKit::RemoteMediaPlayerProxy::setVisible): Deleted.
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::setPageIsVisible):
        (WebKit::MediaPlayerPrivateRemote::setVisible): Deleted.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2021-08-18  David Kilzer  <ddkilzer@apple.com>

        Bug 229265: run-webkit-tests --leaks should check for leaks in the GPU process
        <https://webkit.org/b/229265>
        <rdar://problem/82101453>

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetGPUProcessIdentifier): Add.
        * UIProcess/API/C/WKPagePrivate.h:
        (WKPageGetGPUProcessIdentifier): Add.
        - Add function to return the PID for the GPU process.

2021-08-18  Megan Gardner  <megan_gardner@apple.com>

        Remove unneeded UIKitSPI declarations
        https://bugs.webkit.org/show_bug.cgi?id=210075

        Reviewed by Wenson Hsieh.

        No code changes, just using the now fully public API.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _doubleTapRecognizedForDoubleClick:]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (gestureRecognizerModifierFlags): Deleted.

2021-08-18  Youenn Fablet  <youenn@apple.com>

        [MacOS] Use com.apple.webkit.microphone extension to gate microphone access in GPUProcess sandbox
        https://bugs.webkit.org/show_bug.cgi?id=229238

        Reviewed by Eric Carlson.

        Manually tested.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        Align to iOS and only allow microphone access in sandbox if com.apple.webkit.microphone is sent to GPUProcess.
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        Do audio capture in UIProcess for non Safari applications until rdar://problem/29448368 is fixed.

2021-08-18  Sihui Liu  <sihui_liu@apple.com>

        Do not terminate relaunched network process when getting network process connection
        https://bugs.webkit.org/show_bug.cgi?id=229236

        Reviewed by Chris Dumez.

        When UI process fails to get network process connection for the first time, it will retry on next runloop 
        iteration. On the retry, it terminates existing network process and relaunch a network process, because the 
        failure may indicate something is wrong in the network process. If existing network process is different from 
        the one on first try, the existing process can be functional and we should not terminate it.

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

2021-08-18  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r280382): [GTK] 2.33.3 does not build with gtk-doc enabled, installs broken pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=229152

        Reviewed by Philippe Normand.

        CMake is expanding templates in the pkg-config files that are not supposed to be expanded.
        Oops! Let's switch back to using @SVN_REVISION@ instead of ${SVN_REVISION} as the template
        for inserting the SVN revision into the pkg-config file, so we can tell CMake to leave the
        ${} variables alone.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * Shared/glib/BuildRevision.h.in:
        * gtk/webkit2gtk-web-extension.pc.in:
        * gtk/webkit2gtk.pc.in:

2021-08-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (iOS 15): DoubleDown Casino app won't load past launch page
        https://bugs.webkit.org/show_bug.cgi?id=229200
        rdar://81636256

        Reviewed by Myles C. Maxfield.

        The changes in https://webkit.org/b/228216 to fix rdar://80473805 introduced a mechanism to keep track of uses
        of cached fonts and images in display list items in the web and GPU processes, via a `useCount` counter variable
        that's incremented in the web process whenever the font or image is used in a display list item and decremented
        in the GPU process whenever the item is processed.

        However, the code to increment `useCount` in the web process currently only triggers at most once per rendering
        update — this means that if there are multiple canvas drawing commands that use fonts in the same rendering
        update, the web process' notion of `useCount` will fall out of sync with the GPU process' notion of `useCount`.

        In most cases, this causes the cached font to remain for longer in the GPU process than necessary; however, in
        this specific scenario, it's possible for the web process to tell the GPU process to release the cached font too
        early, which causes the GPU process to prematurely purge the font from the cache, and subsequently wait for the
        cached font to arrive (which will never arrive, since the web process has already released the font).

        In other words, the timeline of events between the web and GPU processes looks like this (where `f` is a cached
        web font, `A_f` is a drawing command that uses `f`, and `B_f` is another drawing command that uses `f`).

        WEB                                             GPU
        ==============================================================
        1. Cache `f`
        2. Append `A_f`
                                                        3. Cache `f`
                                                        4. Play back `A_f`
        5. Append `B_f`
        6. Release `f` (use count was 1 here)
                                                        7. Release `f` (use count dropped from 1 to 0)
                                                        8. Play back `B_f`
                                                        ...and then display list playback stops due to `f` not being in
                                                        the cache.

        To address this, we simply move the `useCount` increment in the web process out of the rendering update check.
        The original intent of the fix for bug #228216 was to allow for `useCount` to increment as many times as needed
        per rendering update, so this limitation was unintentional.

        Unfortunately, I have not been able to come up with a layout test that reliably reproduces this scenario (yet).

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::recordFontUse):

2021-08-17  Sihui Liu  <sihui_liu@apple.com>

        Fix crash in TestWebKitAPI.NetworkProcess.CrashWhenNotAssociatedWithDataStore
        https://bugs.webkit.org/show_bug.cgi?id=229209
        rdar://82040197

        Reviewed by Geoffrey Garen.

        When getting network process connection fails, we don't need to retry or crash UI process if web process is
        already gone.

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

2021-08-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Kept alive NetworkResourceLoaders should be cancelled by NetworkLoad::didCompleteWithError on PolicyAction::Ignore of didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=228095
        <rdar://problem/81393898>

        Reviewed by Don Olmstead.

        If a page dispatches a keepalive fetch and the page is navigated
        away, the alive NetworkResourceLoader is transferred to the
        NetworkSession by NetworkConnectionToWebProcess::transferKeptAliveLoad.
        After the NetworkResourceLoader receives a response, it is canceled
        by PolicyAction::Ignore.

        However, NetworkDataTaskCurl didn't properly cancel the kept alive
        NetworkResourceLoader. They remained in m_keptAliveLoads of
        NetworkSession even after the requests were canceled.

        Test: http/tests/fetch/keepalive-fetch-2.html

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        (WebKit::NetworkDataTaskCurl::invokeDidReceiveResponse): Call didCompleteWithError on PolicyAction::Ignore.

2021-08-17  Jer Noble  <jer.noble@apple.com>

        De-duplicate the Cocoa-specific MediaPlayerPrivateRemote constructor
        https://bugs.webkit.org/show_bug.cgi?id=229193

        Reviewed by Eric Carlson.

        Rather than have two, separate implementations of the MediaPlayerPrivateRemote constructor (one for Cocoa),
        just wrap the initializer for the Cocoa-specific ivar in PLATFORM(COCOA) guards.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): Deleted.

2021-08-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Demote the release assertion in `RemoteResourceCache::ensureResourceUseCounter`
        https://bugs.webkit.org/show_bug.cgi?id=229164
        rdar://81999835

        Reviewed by Simon Fraser.

        Replace the `RELEASE_ASSERT` with a regular debug assertion. See bug description for more information.

        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::ensureResourceUseCounter):

2021-08-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][GraphicsLayerTextureMapper] DrawingAreaProxyCoordinatedGraphics doesn't enter accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=228100

        Reviewed by Don Olmstead.

        Even if DrawingAreaCoordinatedGraphics entered AC mode in web
        process side, DrawingAreaProxyCoordinatedGraphics didn't enter AC
        mode in UI process side. They should sync.

        There were two problems.

        LayerTreeHost::layerTreeContext() always returned an empty
        LayerTreeContext that means non-AC mode.
        LayerTreeHost::m_layerTreeContext.contextID should be initialized.

        DrawingAreaCoordinatedGraphics::layerHostDidFlushLayers should be
        called after setShouldNotifyAfterNextScheduledLayerFlush(true) to
        submit the current AC mode state.

        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        (WebKit::LayerTreeHost::LayerTreeHost):
        (WebKit::LayerTreeHost::setShouldNotifyAfterNextScheduledLayerFlush):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.h:
        * WebProcess/WebPage/DrawingArea.h:

2021-08-16  Sihui Liu  <sihui_liu@apple.com>

        Add logging for failure in getting network process connection
        https://bugs.webkit.org/show_bug.cgi?id=229102

        Reviewed by Geoffrey Garen.

        UI process knows more about why network connection cannot be created compared to web process, so let's add 
        logging in UI process to help debug rdar://80760179.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::stateString const):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::getNetworkProcessConnection):

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        "make analyze" should run clang static analyzer in deep mode
        <https://webkit.org/b/229127>
        <rdar://problem/81960587>

        Reviewed by Alexey Proskuryakov.

        * Scripts/generate-derived-sources.sh:
        * WebKit.xcodeproj/project.pbxproj:
        - Treat "analyze" the same as "build" for "ACTION" environment
          variable.

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [GLib] Enable mediastream setting if it's enabled at build-time
        https://bugs.webkit.org/show_bug.cgi?id=229134

        Reviewed by Adrian Perez de Castro.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webKitSettingsConstructed):

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [GTK] MiniBrowser crashes when closed while capturing desktop
        https://bugs.webkit.org/show_bug.cgi?id=228232
        <rdar://problem/81093648>

        Reviewed by Adrian Perez de Castro.

        Remove explicit detach call from the UIClient. Resetting the page state in the proxy *after*
        the clients have been cleared is a better fix for this crash.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (attachUIClientToView):
        (detachUIClientFromView): Deleted.
        * UIProcess/API/glib/WebKitUIClient.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewDispose):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):

2021-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.33.3 release

        * gtk/NEWS: Add release notes for 2.33.3.

2021-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck build

        * webkitglib-symbols.map: Remove symbols that are not in the library anymore.

2021-08-15  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Add API to pass WebKitMemoryPressureHandler parameters to the network processes
        https://bugs.webkit.org/show_bug.cgi?id=228227

        Reviewed by Carlos Garcia Campos.

        Added webkit_website_data_manager_set_memory_pressure_settings() API function to pass a
        WebKitMemoryPressureSettings instance as the settings to use by all the network processes.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * UIProcess/API/glib/WebKitMemoryPressureSettings.cpp:
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_set_memory_pressure_settings):
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didExceedMemoryLimit):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebProcessPool.h:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::memoryPressureMonitorDisabled):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2021-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] editing/selection/ios/select-all-in-readonly-input-does-not-overflow.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=229126
        rdar://80384801

        Reviewed by Tim Horton.

        Remove the (now-unused) testing SPI `-[WKWebView _doAfterResettingSingleTapGesture:]`. See Tools/ChangeLog for
        more information.

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

2021-08-15  David Kilzer  <ddkilzer@apple.com>

        Bug 229112: ThreadSanitizer: data races of WTF::String in WebResourceLoadStatisticsStore
        <https://webkit.org/b/229112>
        <rdar://problem/81940951>

        Reviewed by Kate Cheney.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::attributePrivateClickMeasurement):
        - Make isolated copies of sourceSite and destinationSite to fix
          data races.
        (WebKit::WebResourceLoadStatisticsStore::privateClickMeasurementToString):
        - Make isolated copy of WTF::String to fix data race.

2021-08-14  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION: WebContent often crashes when opening a Google spreadsheet with charts
        https://bugs.webkit.org/show_bug.cgi?id=229106
        <rdar://81806877>

        Reviewed by Wenson Hsieh.

        Don't resume processing the DisplayList of an ImageBuffer until its 
        backend is created.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::didAppendData):

2021-08-13  Kate Cheney  <katherine_cheney@apple.com>

        Check quarantine bits before rendering local files
        https://bugs.webkit.org/show_bug.cgi?id=229073
        <rdar://problem/81430251>

        Reviewed by Brent Fulgham.

        We shouldn't load files unless they have no quarantine flags or
        have been marked user approved.

        * Platform/spi/mac/QuarantineSPI.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::isQuarantinedAndNotUserApproved):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebPageProxy.h:

2021-08-13  Chris Dumez  <cdumez@apple.com>

        Add Cross-Origin-Embedder-Policy support for Blob URLs
        https://bugs.webkit.org/show_bug.cgi?id=229041

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse):
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2021-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] fast/events/touch/ios/long-press-on-link.html is a constant crash
        https://bugs.webkit.org/show_bug.cgi?id=229095
        rdar://80386326

        Reviewed by Tim Horton.

        This test crashes when run immediately after another test that attempts to present the context menu and ends
        with the context menu still showing (in this case, fast/events/touch/ios/long-press-on-image.html). Running
        these tests back to back causes us to immediately dismiss the context menu interaction while transitioning to
        the second test, which triggers the context menu interaction's dismissal animation.

        This animation ends in the middle of the next test (long-press-on-link.html), after the long press has begun and
        the context menu interaction has already requested a targeted hint preview, but (importantly) before the context
        menu peek animation actually begins (i.e. `-contextMenuInteraction:willDisplayMenuForConfiguration:animator:`).
        As a result, we tear down the hint container too early (with the hint view still in the view hierarchy), and
        subsequently crash with an exception when UIKit tries to perform coordinate space conversions with the now-
        unparented view.

        To fix this, we make two small adjustments:
        1.      Avoid unparenting the context menu hint container if it still has subviews.
        2.      Add plumbing to ensure that the context menu hint container is unparented once all of its subviews have
                been removed (and the container isn't being used for anything else).

        * Platform/spi/ios/UIKitSPI.h:

        Add an SPI declaration for the `-_didRemoveSubview:` subclassing hook.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKTargetedPreviewContainer initWithContentView:]):
        (-[WKTargetedPreviewContainer _didRemoveSubview:]):

        Add a new subclass for WKTargetedPreviewContainer that notifies WKContentView when its last subview has been
        removed, such that WKContentView can tear down the container view if needed.

        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView removeContextMenuViewIfPossibleForActionSheetAssistant:]):
        (-[WKContentView _targetedPreviewContainerDidRemoveLastSubview:]):
        (-[WKContentView _createPreviewContainerWithLayerName:]):
        (-[WKContentView _removeContextMenuHintContainerIfPossible]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):
        (-[WKContentView _removeContextMenuViewIfPossible]): Deleted.

        Additionally rename `-_removeContextMenuViewIfPossible` to `-_removeContextMenuHintContainerIfPossible`, to make
        it clear that this method is about removing the container view for context menu hints (and not the hints
        themselves).

        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsDropdown _removeContextMenuInteraction]):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker removeContextMenuInteraction]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel removeContextMenuInteraction]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker removeContextMenuInteraction]):

2021-08-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] RemoteMediaPlayerProxy does not receive acceleratedRenderingStateChanged() when video element switches sources
        https://bugs.webkit.org/show_bug.cgi?id=229092
        <rdar://81902163>

        Reviewed by Eric Carlson.

        Follow up to r280723; in that patch, a call to acceleratedRenderingStateChanged() was added to
        the MediaPlayerPrivateRemote, but only for non-Cocoa ports. Add the same method to the constructor
        for the Cocoa version as well.

        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):

2021-08-13  Alex Christensen  <achristensen@webkit.org>

        SandboxExtension::Handle creation should return std::optional instead of bool
        https://bugs.webkit.org/show_bug.cgi?id=228875

        Reviewed by Youenn Fablet.

        This modernizes the code somewhat.
        This makes it easier to write code that realizes that handle creation can fail.
        This is a step towards removing the unnecessary abstraction HandleArray.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode const):
        * Platform/IPC/FormDataReference.h:
        (IPC::FormDataReference::encode const):
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        (WebKit::SandboxExtension::createHandle):
        (WebKit::createHandlesForResources):
        (WebKit::SandboxExtension::createReadOnlyHandlesForFiles):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        (WebKit::SandboxExtension::createHandleForTemporaryFile):
        (WebKit::SandboxExtension::createHandleForGenericExtension):
        (WebKit::SandboxExtension::createHandleForMachLookup):
        (WebKit::SandboxExtension::createHandlesForMachLookup):
        (WebKit::SandboxExtension::createHandleForReadByAuditToken):
        (WebKit::SandboxExtension::createHandleForIOKitClassExtension):
        (WebKit::SandboxExtension::createHandlesForIOKitClassExtensions):
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandle):
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        (WebKit::SandboxExtension::createHandleForTemporaryFile):
        (WebKit::SandboxExtension::createHandleForGenericExtension):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::addPlatformLoadParameters):
        (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Deleted.
        (WebKit::WebPageProxy::scrollingUpdatesDisabledForTesting): Deleted.
        (WebKit::WebPageProxy::startDrag): Deleted.
        (WebKit::WebPageProxy::setPromisedDataForImage): Deleted.
        (WebKit::WebPageProxy::setDragCaretRect): Deleted.
        (WebKit::WebPageProxy::platformRegisterAttachment): Deleted.
        (WebKit::WebPageProxy::platformCloneAttachment): Deleted.
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted.
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted.
        (WebKit::WebPageProxy::insertDictatedTextAsync): Deleted.
        (WebKit::WebPageProxy::platformDictationAlternatives): Deleted.
        (WebKit::WebPageProxy::errorForUnpermittedAppBoundDomainNavigation): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorConnection): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorBoundInterfaceIdentifier): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver): Deleted.
        (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver): Deleted.
        (WebKit::WebPageProxy::didStartSpeaking): Deleted.
        (WebKit::WebPageProxy::didFinishSpeaking): Deleted.
        (WebKit::WebPageProxy::didPauseSpeaking): Deleted.
        (WebKit::WebPageProxy::didResumeSpeaking): Deleted.
        (WebKit::WebPageProxy::speakingErrorOccurred): Deleted.
        (WebKit::WebPageProxy::boundaryEventOccurred): Deleted.
        (WebKit::WebPageProxy::voicesDidChange): Deleted.
        (WebKit::WebPageProxy::didCreateContextInWebProcessForVisibilityPropagation): Deleted.
        (WebKit::WebPageProxy::didCreateContextInGPUProcessForVisibilityPropagation): Deleted.
        (WebKit::WebPageProxy::grantAccessToPreferenceService): Deleted.
        (WebKit::WebPageProxy::mediaUsageManager): Deleted.
        (WebKit::WebPageProxy::addMediaUsageManagerSession): Deleted.
        (WebKit::WebPageProxy::updateMediaUsageManagerSessionState): Deleted.
        (WebKit::WebPageProxy::removeMediaUsageManagerSession): Deleted.
        (WebKit::convertPlatformImageToBitmap): Deleted.
        (WebKit::WebPageProxy::requestThumbnailWithOperation): Deleted.
        (WebKit::WebPageProxy::requestThumbnailWithFileWrapper): Deleted.
        (WebKit::WebPageProxy::requestThumbnailWithPath): Deleted.
        (WebKit::WebPageProxy::scheduleActivityStateUpdate): Deleted.
        (WebKit::WebPageProxy::addActivityStateUpdateCompletionHandler): Deleted.
        (WebKit::WebPageProxy::createAppHighlightInSelectedRange): Deleted.
        (WebKit::WebPageProxy::restoreAppHighlightsAndScrollToIndex): Deleted.
        (WebKit::WebPageProxy::setAppHighlightsVisibility): Deleted.
        (WebKit::WebPageProxy::appHighlightsVisibility): Deleted.
        (WebKit::WebPageProxy::appHighlightsOverlayRect): Deleted.
        (WebKit::WebPageProxy::setUpHighlightsObserver): Deleted.
        (WebKit::WebPageProxy::createNetworkExtensionsSandboxExtensions): Deleted.
        (WebKit::WebPageProxy::canHandleContextMenuTranslation const): Deleted.
        (WebKit::WebPageProxy::handleContextMenuTranslation): Deleted.
        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo): Deleted.
        (WebKit::WebPageProxy::setLastNavigationWasAppInitiated): Deleted.
        (WebKit::WebPageProxy::lastNavigationWasAppInitiated): Deleted.
        (WebKit::WebPageProxy::grantAccessToAssetServices): Deleted.
        (WebKit::WebPageProxy::revokeAccessToAssetServices): Deleted.
        (WebKit::WebPageProxy::switchFromStaticFontRegistryToUserFontRegistry): Deleted.
        (WebKit::WebPageProxy::fontdMachExtensionHandle): Deleted.
        (WebKit::WebPageProxy::contentsOfUserInterfaceItem): Deleted.
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess): Deleted.
        (WebKit::WebProcessPool::platformInvalidateContext): Deleted.
        (WebKit::WebProcessPool::parentBundleDirectory): Deleted.
        (WebKit::WebProcessPool::networkingCachesDirectory): Deleted.
        (WebKit::WebProcessPool::webContentCachesDirectory): Deleted.
        (WebKit::WebProcessPool::containerTemporaryDirectory): Deleted.
        (WebKit::WebProcessPool::setJavaScriptConfigurationFileEnabledFromDefaults): Deleted.
        (WebKit::WebProcessPool::omitPDFSupport): Deleted.
        (WebKit::WebProcessPool::processSuppressionEnabled const): Deleted.
        (WebKit::WebProcessPool::displayBrightness): Deleted.
        (WebKit::WebProcessPool::backlightLevelDidChangeCallback): Deleted.
        (WebKit::WebProcessPool::accessibilityPreferencesChangedCallback): Deleted.
        (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback): Deleted.
        (WebKit::WebProcessPool::colorPreferencesDidChangeCallback): Deleted.
        (WebKit::WebProcessPool::remoteWebInspectorEnabledCallback): Deleted.
        (WebKit::WebProcessPool::startObservingPreferenceChanges): Deleted.
        (WebKit::WebProcessPool::registerNotificationObservers): Deleted.
        (WebKit::WebProcessPool::unregisterNotificationObservers): Deleted.
        (WebKit::WebProcessPool::isURLKnownHSTSHost const): Deleted.
        (WebKit::WebProcessPool::nominalFramesPerSecondForDisplay): Deleted.
        (WebKit::WebProcessPool::startDisplayLink): Deleted.
        (WebKit::WebProcessPool::stopDisplayLink): Deleted.
        (WebKit::WebProcessPool::stopDisplayLinks): Deleted.
        (WebKit::WebProcessPool::setDisplayLinkPreferredFramesPerSecond): Deleted.
        (WebKit::WebProcessPool::setDisplayLinkForDisplayWantsFullSpeedUpdates): Deleted.
        (WebKit::WebProcessPool::setCookieStoragePartitioningEnabled): Deleted.
        (WebKit::WebProcessPool::clearPermanentCredentialsForProtectionSpace): Deleted.
        (WebKit::networkProcessLatencyQOS): Deleted.
        (WebKit::networkProcessThroughputQOS): Deleted.
        (WebKit::webProcessLatencyQOS): Deleted.
        (WebKit::webProcessThroughputQOS): Deleted.
        (WebKit::WebProcessPool::applicationIsAboutToSuspend): Deleted.
        (WebKit::WebProcessPool::notifyProcessPoolsApplicationIsAboutToSuspend): Deleted.
        (WebKit::WebProcessPool::initializeClassesForParameterCoding): Deleted.
        (WebKit::WebProcessPool::allowedClassesForParameterCoding const): Deleted.
        (WebKit::WebProcessPool::notifyPreferencesChanged): Deleted.
        (WebKit::webProcessPoolHighDynamicRangeDidChangeCallback): Deleted.
        (WebKit::WebProcessPool::registerHighDynamicRangeChangeCallback): Deleted.
        (WebKit::WebProcessPool::systemWillSleep): Deleted.
        (WebKit::WebProcessPool::systemDidWake): Deleted.
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::publishProgress):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::addCameraSandboxExtensions):
        (WebKit::addMicrophoneSandboxExtension):
        (WebKit::addTCCDSandboxExtension):
        (WebKit::gpuProcessSessionParameters):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
        (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp:
        (WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::addSource):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::willCreateMediaStream):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::startMemorySampler):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::load):

2021-08-13  Youenn Fablet  <youenn@apple.com>

        Overly verbose catchable fetch error messages lead to cross-origin leaks
        https://bugs.webkit.org/show_bug.cgi?id=228861

        Reviewed by Brent Fulgham.

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

2021-08-12  Peng Liu  <peng.liu6@apple.com>

        REGRESSION (r280951): [ Big Sur ] TestWebKitAPI.AudioRoutingArbitration.Close is failing
        https://bugs.webkit.org/show_bug.cgi?id=229040

        Reviewed by Eric Carlson.

        Function `AudioSessionRoutingArbitratorProxy::processDidTerminate()` should
        be called only in the case that the corresponding WebContent process exits,
        whereas `GPUProcessConnection::didClose()` (in WebContent process) deals with
        the case that the GPU process crashes.

        No new tests. Fix an API test failure.

        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::gpuProcessExited):

2021-08-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [ iOS Debug] 3 editing/pasteboard/smart-paste-paragraph tests are flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=228285
        rdar://81118724

        Reviewed by Tim Horton and Aditya Keerthi.

        Add SPI declarations. See Tools/ChangeLog for more details.

        * Platform/spi/ios/TextInputSPI.h:
        * Platform/spi/ios/UIKitSPI.h:

2021-08-12  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION: WebContent often crashes when using iCloud photos
        https://bugs.webkit.org/show_bug.cgi?id=228969
        <rdar://81761078>

        Reviewed by Simon Fraser.

        Terminating the GPUProcess is very stressful situation which has to be
        handled carefully. The side effect of each function which is called through
        gpuProcessConnectionDidClose() has to be understood to get the right
        sequence of calls. There are problems in releasing all kinds of resources.

        - Releasing NativeImage: Calling clearNativeImageMap() after clearing the
        backend of the ImageBuffers was causing a problem. When clearing the
        backend of an ImageBuffer, it will clear its DisplayList which may have
        the last reference to a NativeImage. The destructor of NativeImage calls
        releaseRemoteResource() before it is removed from the the NativeImageMap.
        This will send a message to the relaunched GPUP to release a NativeImage
        which is not in its cache.

        - Releasing Font: clearFontMap() was always calling releaseRemoteResource()
        even if it is called form  remoteResourceCacheWasDestroyed(). This should
        not happen because the connection with GPUProcess has been closed.

        - Releasing ImageBuffer: This happen when a DisplayList of an ImageBuffer
        'A' holds the last reference to another ImageBuffer 'B' and we call
        clearBackend() for 'A'. clearBackend() will clear the DisplayList of 'A'
        and causes the deletion of 'B'. In this case we should not call 
        releaseImageBuffer() for 'B' because the GPUPProcess is closed.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy):
        If the ImageBuffer is being released because of the clean-up we do when
        the GPUProcess is terminated, we should not release the corresponding 
        RemoteImageBuffer since it is already gone.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        (WebKit::RemoteRenderingBackendProxy::isGPUProcessConnectionClosed const):
        This will return true if we are deleting a RemoteImageBufferProxy through
        RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed().

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::releaseAllRemoteFonts):
        This function will be used to release the remote fonts. It should be called
        from RemoteResourceCacheProxy::releaseMemory() where we sure the GPUP is
        alive and all the fonts are cached there.

        (WebKit::RemoteResourceCacheProxy::clearFontMap):
        The part of releasing the remote fonts was moved from this function to 
        releaseAllRemoteFonts().

        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        1. Clearing the NativeImages and the Fonts has to come before clearing
        the backends of the ImageBuffers. The reason is clearBackend() clears the 
        DisplayList which may release the last reference of a NativeImage or Font.
        We want to detach the NativeImages and the Fonts from the cache before then.
        2. We should have two different loops: one for clearing the backends of
        the ImageBuffers and another one for recreating these backends. The reason
        for this is clearBackend() clears the DisplayList which may release the
        last reference of a another source RemoteImageBufferProxy used by a 
        DrawImageBuffer item for example.

        (WebKit::RemoteResourceCacheProxy::releaseMemory):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-08-12  Sam Weinig  <weinig@apple.com>

        Allow testing of the final UIView tree on iOS platforms
        https://bugs.webkit.org/show_bug.cgi?id=229016

        Reviewed by Tim Horton.

        Test: remote-layer-tree/ios/uiview-tree-basic.html

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (allowListedClassToString):
        (dumpUIView):
        (-[WKWebView _uiViewTreeAsText]):
        Add partner SPI called _uiViewTreeAsText that dumps the WKWebView's
        UIView tree as constructed via remote layer creation. It currently
        dumps some basic properties of each view and uses an allow list of
        class names so changes to implementation details in frameworks below
        us, like UIKit, don't cause tests to fail.

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

        [macOS] Enter fullscreen animation interferes with auto-hiding menu bar
        https://bugs.webkit.org/show_bug.cgi?id=229039
        <rdar://79150656>

        Reviewed by Eric Carlson.

        When entering fullscreen, if a user has unchecked the "auto-hide menu bar in fullscreen"
        setting, the fullscreen animation will enter to the full screen frame, then snap down once
        the animation completes to reveal the menu bar. Instead, use a WebCore utility method to
        calculate the screen's frame taking that menu bar into account, and use it for the initial
        enter fullscreen animation.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):

2021-08-12  Devin Rousso  <drousso@apple.com>

        Fix some `NSAttributedString` inconsistencies between WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=229013
        <rdar://problem/81215696>

        Reviewed by Timothy Hatcher.

        `NSAttributedString` now uses WK2, which has caused us to discover some inconsistencies (and bugs).

        * UIProcess/API/Cocoa/NSAttributedString.mm:
        (+[_WKAttributedStringWebViewCache configuration]):
        Change the default font size to 12 to match WK1.

2021-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Critical warnings on children-changed::add signal emission
        https://bugs.webkit.org/show_bug.cgi?id=229030

        Reviewed by Michael Catanzaro.

        Implement AtkObjectClass::ref_state_set.

        * WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp:
        (webkitWebPageAccessibilityObjectRefStateSet): Return our child state set.
        (webkit_web_page_accessibility_object_class_init): Add an implementation for AtkObjectClass::ref_state_set.

2021-08-11  Peng Liu  <peng.liu6@apple.com>

        Function _os_feature_enabled_impl() expects compile-time static strings as arguments
        https://bugs.webkit.org/show_bug.cgi?id=229017
        <rdar://81813732>

        Reviewed by Tim Horton.

        There are multiple issues in the current implementation of `isFeatureFlagEnabled()`.
        1. `_os_feature_enabled_impl()` expects compile-time static strings as arguments.
        So we should not use `String` here.
        2. As Simon Fraser pointed out, `String::characters8()` is not null terminated.

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
        (WebKit::isFeatureFlagEnabled):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::isFeatureFlagEnabled):
        * Shared/WebPreferencesDefaultValues.h:

2021-08-11  Jean-Yves Avenard  <jya@apple.com>

        [Monterey] WebContent process immediately crash when GPU Process is disabled
        https://bugs.webkit.org/show_bug.cgi?id=228944
        rdar://81727094

        Reviewed by Brent Fulgham.

        * WebProcess/com.apple.WebProcess.sb.in: Allow SYS_getpriority syscall.

2021-08-11  Chris Dumez  <cdumez@apple.com>

        Add initial support for Cross-Origin-Embedder-Policy (COEP)
        https://bugs.webkit.org/show_bug.cgi?id=228754

        Reviewed by Alex Christensen.

        As mentioned in the WebCore changelog, we do all the COEP checks in the network process
        instead of WebCore for added security. As a result, we need to pass more information
        to the network process when doing loads in order to do those checks. The checks are done
        in NetworkResourceLoader for navigations & worker script loads (similarly to CSP,
        X-FrameOptions) and in NetworkLoadChecker for CORP checks of subresource loads (similarly
        to CORS checks).

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::NetworkLoadChecker):
        (WebKit::NetworkLoadChecker::validateResponse):
        * NetworkProcess/NetworkLoadChecker.h:
        (WebKit::NetworkLoadChecker::setParentCrossOriginEmbedderPolicy):
        (WebKit::NetworkLoadChecker::setCrossOriginEmbedderPolicy):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::parentOrigin const):
        (WebKit::NetworkResourceLoadParameters::encode const):
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions):
        (WebKit::NetworkResourceLoader::shouldInterruptNavigationForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::shouldInterruptWorkerLoadForCrossOriginEmbedderPolicy):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::initialize):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::processResponse):
        (WebKit::ServiceWorkerSoftUpdateLoader::didFinishLoading):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::retrieveRecords):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::addParametersShared):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):

2021-08-11  Darin Adler  <darin@apple.com>

        Add deduction guide to RetainPtr, use constexpr a bit more, and streamline the implementation
        https://bugs.webkit.org/show_bug.cgi?id=228852

        Reviewed by Sam Weinig.

        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        Test the deduction guide by writing RetainPtr instead of RetainPtr<NSProgress>.

2021-08-11  Peng Liu  <peng.liu6@apple.com>

        [ BigSur Debug ] TestWebKitAPI.GPUProcess.CrashWhilePlayingAudioViaCreateMediaElementSource is flaky, hitting ASSERTION FAILED: !isInRoutingArbitrationForToken(token)
        https://bugs.webkit.org/show_bug.cgi?id=227728
        <rdar://problem/80237464>

        Reviewed by Jer Noble.

        After the GPU process crashes, the UI process will clean up the
        `SharedRoutingArbitrator`, while a WebContent process might be resuming
        the media playback and setup `AudioSessionRoutingArbitrator`.
        There is a race condition here. If the WebContent process runs faster,
        `SharedRoutingArbitrator` in the UI process will try to begin a duplicated
        routing arbitration and lead to an assertion failure.

        No new tests. Fixed following two API test failures:
        - TestWebKitAPI.WebKit2.CrashGPUProcessWhileCapturing
        - TestWebKitAPI.GPUProcess.CrashWhilePlayingAudioViaCreateMediaElementSource

        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::didClose):

2021-08-11  Peng Liu  <peng.liu6@apple.com>

        [BigSur] TestWebKitAPI.AudioRoutingArbitration.Updating fails after r280726
        https://bugs.webkit.org/show_bug.cgi?id=228966

        Reviewed by Eric Carlson.

        Add an IPC message `RemoteAudioSessionProxy::SetIsPlayingToBluetoothOverride`
        for testing purpose, so that the test `AudioRoutingArbitration.Updating` will
        work as expected when "Media in GPU Process" is enabled.

        No new tests. Fix an API test failure.

        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::setCategory):
        (WebKit::RemoteAudioSessionProxy::setIsPlayingToBluetoothOverride):
        * GPUProcess/media/RemoteAudioSessionProxy.h:
        * GPUProcess/media/RemoteAudioSessionProxy.messages.in:
        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::setCategory):
        (WebKit::RemoteAudioSession::setIsPlayingToBluetoothOverride):
        * WebProcess/GPU/media/RemoteAudioSession.h:

2021-08-11  David Kilzer  <ddkilzer@apple.com>

        ThreadSanitizer: data race in WTF::StringImpl::deref() under WebKit::NetworkCache::IOChannel::~IOChannel()
        <https://webkit.org/b/229003>
        <rdar://problem/81795626>

        Reviewed by Chris Dumez.

        Covered by 3245 layout tests running with TSan including:
            http/wpt/service-workers/file-upload.html

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        (WebKit::NetworkCache::IOChannel::open):
        - Update to use #pragma once.
        - Make an isolatedCopy() for m_path.
        (WebKit::NetworkCache::IOChannel::IOChannel):
        - Switch to using an rvalue reference.
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel): Ditto.
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel): Ditto.
        * NetworkProcess/cache/NetworkCacheIOChannelGLib.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel): Ditto.
        - Switch to use m_path instead of filePath to prevent
          use-after-move.

2021-08-11  Sihui Liu  <sihui_liu@apple.com>

        Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner
        https://bugs.webkit.org/show_bug.cgi?id=228748
        <rdar://problem/81626714>

        Reviewed by Chris Dumez.

        When suspending ResourceLoadStatistics and LocalStorage, we dispatched a suspend task, which waits on a 
        condition, to their WorkQueue. That means the queue will be suspended after completing all tasks scheduled 
        before the suspend task. These tasks may take a long time to complete and assertion may be timed out.

        When network process receives PrepareToSuspend message, we want the queues to suspend as soon as possible. To 
        achieve that, now we check if the queue needs to be suspended before each task, which ensures the queue 
        execute as most one task after suspend().

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        (WebKit::ResourceLoadStatisticsStore::workQueue):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::sharedStatisticsQueue):
        (WebKit::WebResourceLoadStatisticsStore::suspend):
        (WebKit::WebResourceLoadStatisticsStore::resume):
        (WebKit::WTF_GUARDED_BY_LOCK): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
        (WebKit::SessionStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/SessionStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        * NetworkProcess/WebStorage/StorageArea.h:
        * NetworkProcess/WebStorage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageArea):
        (WebKit::StorageManager::createTransientLocalStorageArea):
        (WebKit::StorageManager::createSessionStorageArea):
        * NetworkProcess/WebStorage/StorageManager.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::StorageManagerSet):
        (WebKit::StorageManagerSet::suspend):
        (WebKit::StorageManagerSet::resume):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        (WebKit::StorageManagerSet::WTF_GUARDED_BY_LOCK): Deleted.
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
        (WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
        * NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:

2021-08-11  Dana Estra  <destra@apple.com>

        Start smooth keyboard scrolling animation when pageUp or pageDown key is pressed.
        https://bugs.webkit.org/show_bug.cgi?id=228156

        Reviewed by Tim Horton.
        
        UIProcess now no longer handles scrollPageUp and scrollPageDown events. They return
        to eventHandler as unhandled and the keyboard scroll animation is started.

        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView scrollPageDown:]):
        (-[WKWebView scrollPageUp:]):

2021-08-11  Alex Christensen  <achristensen@webkit.org>

        Fix iOS debug build after r280875
        https://bugs.webkit.org/show_bug.cgi?id=228683

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

2021-08-11  Alex Christensen  <achristensen@webkit.org>

        Fix iOS debug build after r280875
       ​https://bugs.webkit.org/show_bug.cgi?id=228683

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

2021-08-11  Per Arne  <pvollan@apple.com>

        [macOS] Disable menu bar related code in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=229002
        <rdar://problem/80408291>

        Reviewed by Brent Fulgham.

        Disable some menu bar related code running in the WebContent process on macOS, since it only makes sense to execute it in the UI process.

        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentService/Info-OSX.plist:

2021-08-10  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix after r280875

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel documentPicker:didPickDocumentsAtURLs:]):

2021-08-10  Chris Dumez  <cdumez@apple.com>

        Add Cross-Origin-Opener-Policy support for Blob URLs
        https://bugs.webkit.org/show_bug.cgi?id=228924

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse):
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2021-08-10  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (stringForTLSProtocolVersion):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Ignore some slightly less unconventional deprecation warnings.

2021-08-10  Alex Christensen  <achristensen@webkit.org>

        WebKitBlobResource error 1 exactly after 60 seconds when trying to read file input
        https://bugs.webkit.org/show_bug.cgi?id=228683
        <rdar://78448610>

        Reviewed by Tim Horton.

        To prevent UIKit from deleting our files to upload after 60 seconds, copy them to a temporary directory,
        then delete the files when cleaning up the WKContentView.

        I manually verified this makes the files able to upload after more than 60 seconds, then deletes them when you close the tab.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView dealloc]):
        (-[WKContentView _removeTemporaryFilesIfNecessary]):
        (-[WKContentView _removeTemporaryFilesWhenDeallocated:]):
        * UIProcess/ios/WKContentViewInteraction.h.orig: Added.
        * UIProcess/ios/WKContentViewInteraction.mm.orig: Added.
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel documentPicker:didPickDocumentsAtURLs:]):

2021-08-10  Andres Gonzalez  <andresg_22@apple.com>

        Notify accessibility that WebProcess is suspended when in process cache.
        https://bugs.webkit.org/show_bug.cgi?id=228936
        rdar://80911502

        Reviewed by Chris Dumez.

        Need to notify accessibility clients that a WebProcess in the process
        cache is suspended. Otherwise accessibility clients may continue making
        requests to the cached Webprocess and be waiting indefinitely for a
        suspended process.
        Deleted WebProcess::accessibilityProcessSuspendedNotification and
        instead use IPC::AccessibilityProcessSuspendedNotification

        * Platform/IPC/Connection.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::AccessibilityProcessSuspendedNotification):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setIsInProcessCache):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::processDidResume):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityProcessSuspendedNotification): Deleted.

2021-08-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        Scripts/generate-derived-sources.sh: line 19: [: binary operator expected while building Source/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=228908

        Reviewed by Per Arne Vollan.

        Change variable references in the sh script to quoted "$VAR".
        [ -z $VAR ] with VAR="a b" would mean
        [ -z a b ].
         -z is unary operator, so the expression b would be in position
        where test would expect an operator.
        The correct form is [ -z "a b" ].

        In general, sh scripts usually refer to variables using quotes.

        * Scripts/generate-derived-sources.sh:
        Fix a bug where multiple space separated paths in
        WEBKITADDITIONS_HEADER_SEARCH_PATHS would cause
        test expression to receive arguments after the -z arg.

        Quote the use of CC so future copy-paste does not make the same mistake
        as this bug.

2021-08-10  Peng Liu  <peng.liu6@apple.com>

        RemoteImageDecoderAVF::clearFrameBufferCache() uses a weak pointer without checking its validity
        https://bugs.webkit.org/show_bug.cgi?id=228925

        Reviewed by Eric Carlson.

        Only use `m_gpuProcessConnection` when it is a valid pointer.

        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::clearFrameBufferCache):

2021-08-10  Megan Gardner  <megan_gardner@apple.com>

        Don't instantiate a SYNotesActivationObserver to just say that it's not active or visible. 
        https://bugs.webkit.org/show_bug.cgi?id=228929
        rdar://81634182

        Reviewed by Wenson Hsieh.

        If we do not have an SYNotesActivationObserver then we do not need to make one to say that it is not visible
        or that it's not occuding the screen. This is a performance optimization for all WebViews that are not 
        in Safari as well as all pages that do not have highlights to restore.

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

2021-08-10  David Kilzer  <ddkilzer@apple.com>

        ThreadSanitizer: data race in WTF::StringImpl::deref() under WebKit::WebProcessPool::setMediaAccessibilityPreferences()
        <https://webkit.org/b/228932>

        Reviewed by Chris Dumez.

        Covered by numerous layout tests running with TSan including:
            crypto/crypto-random-values-types.html

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::setMediaAccessibilityPreferences):
        - Make an isolatedCopy() of Vector<String> object before passing
          it to the main thread.

2021-08-09  Chris Dumez  <cdumez@apple.com>

        Blob URL changes after loading it
        https://bugs.webkit.org/show_bug.cgi?id=228923

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLHandle):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURLHandle):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLHandle):
        (WebKit::BlobRegistryProxy::unregisterBlobURLHandle):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2021-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Create a Language log channel
        https://bugs.webkit.org/show_bug.cgi?id=228764

        Reviewed by Simon Fraser.

        * Platform/Logging.h:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::setAppleLanguagesPreference):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setOverrideLanguages):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::userPreferredLanguagesChanged const):

2021-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Support WTF logging channels
        https://bugs.webkit.org/show_bug.cgi?id=228768

        Reviewed by Fujii Hironori.

        No new tests because there is no behavior change.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/WebProcessPool.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-08-09  Said Abou-Hallawa  <said@apple.com>

        Ease sandboxing restrictions for Mail to allow HEIF image decoding
        https://bugs.webkit.org/show_bug.cgi?id=228812
        <rdar://80967782>

        Reviewed by Per Arne Vollan.

        If the running application is Mail, add a sandbox extension to allow HEIF
        image decoding. There is no plan right now to enable HEIF in WebKit. So 
        do not try to support decoding it outside Mail.

        * 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):
        (WebKit::WebProcess::initializeSandbox):
        (WebKit::restrictImageAndVideoDecoders): Deleted.

2021-08-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa|GPU] platformLayer() not always added to remotedly hosted context; black video while playing
        https://bugs.webkit.org/show_bug.cgi?id=228873
        <rdar://81271107>

        Reviewed by Eric Carlson.

        Currently, the RemoteMediaPlayerProxy will insert its MediaPlayer's platformLayer() into the
        remotely hosted context when it receives a "firstVideoFrameAvailable()" notification.
        However this is problematic for two reasons: AVPlayerLayer may not become "ready for
        playback" when it is not in an active CALayer heirarchy, and for
        MediaPlayerPrivateAVFoundation, firstVideoFrameAvailable() is only fired during
        updateStates(), which is not guaranteed to occur unless another state change occurs.

        Instead, reparent the MediaPlayer's platformLayer() when we receive a
        mediaPlayerRenderingModeChanged() notification, which notifies the client whenever a
        platformLayer() is created or destroyed.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerFirstVideoFrameAvailable):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRenderingModeChanged):

2021-08-09  Imanol Fernandez  <ifernandez@igalia.com>

        Implement fullscreen in WPEView
        https://bugs.webkit.org/show_bug.cgi?id=227951

        Reviewed by Adrian Perez de Castro.

        Notify DOM fullscreen enter request to libwpe and handle exit fullscreen from libwpe.

        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):
        (WKWPE::View::setFullScreen):
        * UIProcess/API/wpe/WPEView.h:

2021-08-09  Imanol Fernandez  <ifernandez@igalia.com>

        Allow custom IPC::Attachment messaging in ConnectionUnix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=227740

        Reviewed by Žan Doberšek.

        In order to share AHardwareBuffer handles via IPC we need to use the AHardwareBuffer_sendHandleToUnixSocket()
        and AHardwareBuffer_recvHandleFromUnixSocket() functions. This is not currently compatible with the Attachment
        API used in UnixConnection, as those functions use custom messaging into the socked fd.

        This patch adds a CustomWriterType Attachment that allows custom messaging going into the socket fd.

        * Platform/IPC/unix/ConnectionUnix.cpp:

2021-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        caret-color does not work on first click in ios
        https://bugs.webkit.org/show_bug.cgi?id=228859
        rdar://81674787

        Reviewed by Tim Horton.

        Addresses a couple of issues that cause the `caret-color` CSS property to not be applied when focusing editable
        content on iOS. See below for more details.

        Test: editing/caret/ios/caret-color-after-refocusing-input.html

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _serializedSelectionCaretBackgroundColorForTesting]):

        Add support for a new test-only helper method. See Tools/ChangeLog for more information.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::WKSelectionDrawingInfo::WKSelectionDrawingInfo):
        (WebKit::operator==):
        (WebKit::operator<<):

        Make a minor adjustment to ensure that changes to `caretColor` in `EditorState` are propagated to UIKit's
        selection views. To achieve this, we add `caretColor` to `WKSelectionDrawingInfo`, and force the text selection
        view to update the caret background color when the caret color changes (alongside other selection UI geometry
        changes, which are applied underneath the call to `-selectionChanged`).

        (-[WKContentView _updateChangedSelection:]):
        (-[WKContentView textInteractionAssistant]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):

        Address an existing FIXME which (mostly) fixes this bug. Currently, the caret color is only computed when
        `WebPage::m_focusedElement` is set. However, when resigning first responder, we clear out `WebPage`'s
        `m_focusedElement`) right before updating the DOM selection, which creates a brief window during which we
        compute an `EditorState` with a `caretColor` of transparent black.

        To avoid this inconsistency, we instead compute the caret color from the selection container; this has the
        additional benefit of allowing the caret color to change when changing selection within a single editable host
        with multiple caret colors (instead of always just using the focused element's caret color).

        Note that while this adjustment to `WebPage::getPlatformEditorState` is sufficient to ensure that the value of
        `-[WKContentView insertionPointColor]` (which is based on `EditorState`) is always up-to-date, this doesn't
        guarantee that the actual color of UIKit's caret view reflects the updated `-insertionPointColor`, which results
        in situations where the caret color appears out-of-date after hiding the keyboard and refocusing an input field.
        To fix this, we need the other adjustment in WKContentView (see above).

2021-08-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Web process crashes when detaching Document with uncommitted marked text
        https://bugs.webkit.org/show_bug.cgi?id=228841
        rdar://79960890

        Reviewed by Ryosuke Niwa.

        Deploy a similar fix on iOS, to avoid any attempts to compute editor state due to discarding uncommitted marked
        text during Document teardown. This is required in order to avoid the same security assertion when running the
        new layout test on iOS.

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

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * Platform/LogInitialization.cpp: Copied from Source/WebKit/Shared/WebKit2Initialize.cpp.
        (WebKit::logChannels):
        (WebKit::getLogChannel):
        * Platform/LogInitialization.h:
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary): Deleted.
        (WebKit::getLogChannel): Deleted.
        * Platform/Logging.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * Sources.txt:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-08-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280756.
        https://bugs.webkit.org/show_bug.cgi?id=228897

        Broke gtk build

        Reverted changeset:

        "Deduplicate logging channel algorithms"
        https://bugs.webkit.org/show_bug.cgi?id=228809
        https://commits.webkit.org/r280756

2021-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Deduplicate logging channel algorithms
        https://bugs.webkit.org/show_bug.cgi?id=228809

        Reviewed by Fujii Hironori.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * Platform/LogInitialization.cpp: Copied from Source/WebKit/Shared/WebKit2Initialize.cpp.
        (WebKit::logChannels):
        (WebKit::getLogChannel):
        * Platform/LogInitialization.h:
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary): Deleted.
        (WebKit::getLogChannel): Deleted.
        * Platform/Logging.h:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * Sources.txt:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-08-06  Simon Fraser  <simon.fraser@apple.com>

        Clarify some identifier naming in RemoteRenderingBackend
        https://bugs.webkit.org/show_bug.cgi?id=228886

        Reviewed by Said Abou-Hallawa.

        Rename some "identifier" variables to differentiate between resource identifiers and
        item buffer identifiers.

        No behavior change.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):
        (WebKit::RemoteRenderingBackend::cacheNativeImage):
        (WebKit::RemoteRenderingBackend::cacheFont):
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandle):

2021-08-06  Simon Fraser  <simon.fraser@apple.com>

        Page on mhlw.go.jp triggers WebContent termination by GPU process
        https://bugs.webkit.org/show_bug.cgi?id=228885
        <rdar://81603231>

        Reviewed by Wenson Hsieh.

        https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000164708_00001.html triggered an issue
        where RemoteRenderingBackend::finalizeRenderingUpdate() would be called when the
        GPU process had just processed a "switching to next item buffer" meta command,
        but had not yet received the new item buffer. This triggered the 
        MESSAGE_CHECK(initialHandle, "Missing initial shared display list handle");
        in RemoteRenderingBackend::wakeUpAndApplyDisplayList().

        Protect against this by having finalizeRenderingUpdate() check that 
        arguments.itemBufferIdentifier had been received, which is similar to what happens
        inside the loop in wakeUpAndApplyDisplayList() already.

        Not easily testable.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):

2021-08-06  Tim Horton  <timothy_horton@apple.com>

        Disable WKHoverPlatter for now
        https://bugs.webkit.org/show_bug.cgi?id=228880

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKHoverPlatterParameters.mm:
        (-[WKHoverPlatterParameters setDefaultValues]):
        Flip the switch.

2021-08-06  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r185111): Links to App Store doesn't work when opening a PDF in Safari on iOS and iPadOS
        https://bugs.webkit.org/show_bug.cgi?id=228881
        rdar://81294035

        Reviewed by Andy Estes.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick):
        Clicking a link in PDF should absolutely be allowed to launch an external app.
        Humorously, r185111 applied the correct value to PDFPlugin (macOS), but the
        wrong value to WKPDFView (iOS). Bring them into alignment.

2021-08-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        ASSERTION FAILED: !m_networkLoad in NetworkResourceLoader::~NetworkResourceLoader()
        https://bugs.webkit.org/show_bug.cgi?id=228853

        Reviewed by Alex Christensen.

        ~NetworkResourceLoader() had the assertion ensuring m_networkLoad
        was empty. But, this could fail in the following scenario. If a
        'keepalive' fetch request is not finished and the page is
        navigated away, its NetworkResourceLoader is transferred to the
        NetworkSession by NetworkConnectionToWebProcess::transferKeptAliveLoad.
        And, before the request is finished, if the NetworkSession is
        destroyed, the kept alive NetworkResourceLoader is destroyed.

        Test: http/tests/fetch/keepalive-fetch.html

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::~NetworkSession): Abort m_keptAliveLoads.

2021-08-06  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] 3 second IPC deadlocks involving WebPageProxy::acceptsFirstMouse
        https://bugs.webkit.org/show_bug.cgi?id=228834
        rdar://75390908

        Reviewed by Wenson Hsieh and Tim Horton.

        Reports show 3 second hangs in WebPageProxy::acceptsFirstMouse, which is
        the timeout for the sync IPC sent by the method. While this method has
        always sent a sync IPC, logs show the WebProcess is also blocked on sync
        IPC, under WebProcess::ensureGPUProcessConnection.

        If a Web<->GPU process connection has not been established,
        WebProcess::ensureGPUProcessConnection sends a sync IPC from the
        WebProcess to the UIProcess to establish get the connection. However, to
        get the connection, the UIProcess then sends an async IPC with a reply
        block to the GPUProcess (see GPUProcessProxy::getGPUProcessConnection).
        The WebProcess remains blocked until the UIProcess receives the reply
        from the GPUProcess, and then sends a reply to the WebProcess.

        Now, if a call to acceptsFirstMouse occurs in between the time the async
        UIProcess -> GPUProcess IPC is sent, and the reply is received, we will
        experience deadlock. The UIProcess will be blocked waiting on the
        WebProcess' reply to acceptsFirstMouse, and the reply from the GPUProcess
        will not be dispatched. Since the reply from the GPUProcess will not be
        dispatched until the UIProcess is unblocked, the WebProcess will be
        waiting under WebProcess:ensureGPUProcessConnection, and unable to reply
        to acceptsFirstMouse.

        A simple fix for the described scenario would be to introduce a
        replySendOptions parameter to sendWithAsyncReply, so that the UIProcess
        could be re-entered to dispatch the GPUProcess reply, even when waiting
        for acceptsFirstMouse. However, this will not work in cases where the
        GPUProcess is being launched, due to being blocked on the reply from
        xpc_connection_send_message_with_reply in ProcessLauncherMac, which is
        before the IPC::Connection has been established.

        Since re-entering the UIProcess is not possible in this scenario, given
        the existing architecture, the next simplest solution is to re-enter
        the WebProcess on acceptsFirstMouse instead. Consequently, one part of
        the fix involves sending the acceptsFirstMouse IPC with
        IPC::SendOption::DispatchMessageEvenWhenWaitingForUnboundedSyncReply and
        tagging WebProcess::getGPUProcessConnection as unbounded sync IPC.

        Then, we must also consider the fact that, in the WebProcess,
        acceptsFirstMouse performs hit-testing. Hit-testing triggers layout and
        could cause script to run. Script could result in a GPUProcess connection
        being established, eventually leading us down the path towards the
        aforementioned deadlock. To avoid deadlock in this scenario, we need to
        interrupt acceptsFirstMouse if a message to get the GPUProcess connection
        is received. This is achieved by using waitForAndDispatchImmediately with
        the InterruptWaitingIfSyncMessageArrives option, and splitting up
        acceptsFirstMouse into two separate IPCs.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:

        Implementation not required for iOS.

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

        Send an async IPC with IPC::SendOption::DispatchMessageEvenWhenWaitingForUnboundedSyncReply
        so that the WebProcess can be re-entered to resolve deadlock if
        necessary. Then, use waitForAndDispatchImmediately to wait for the reply
        (essentially making it a sync IPC), so that the wait can be interrupted
        if another sync message, such as getGPUProcessConnection, is received.

        (WebKit::WebPageProxy::handleAcceptsFirstMouse):

        Store the result of the reply from the WebProcess.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Split the sync IPC into two async IPCs, in order to support the use of
        waitForAndDispatchImmediately.

        * WebProcess/WebPage/ios/WebPageIOS.mm:

        Implementation not required for iOS.

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

        Exit early if re-entering the WebProcess, to avoid running script on
        re-entry.

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

        Tag as unbounded sync IPC, so the WebProcess can be re-entered to
        resolve deadlock.

2021-08-06  Youenn Fablet  <youenn@apple.com>

        WebKit::SampleBufferDisplayLayer needs to handle GPUProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=228824
        <rdar://problem/81564477>

        Reviewed by Eric Carlson.

        Make WebKit::SampleBufferDisplayLayer listen to GPUProcess connection being closed.
        When that happens, notify its client that it failed.

        * WebProcess/GPU/GPUProcessConnection.cpp:
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::create):
        (WebKit::SampleBufferDisplayLayer::SampleBufferDisplayLayer):
        (WebKit::SampleBufferDisplayLayer::~SampleBufferDisplayLayer):
        (WebKit::SampleBufferDisplayLayer::setDidFail):
        (WebKit::SampleBufferDisplayLayer::gpuProcessConnectionDidClose):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp:
        (WebKit::SampleBufferDisplayLayerManager::createLayer):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.h:

2021-08-06  Peng Liu  <peng.liu6@apple.com>

        [macOS] Clean up Feature Flags related code
        https://bugs.webkit.org/show_bug.cgi?id=228803
        <rdar://problem/81142982>

        Reviewed by Tim Horton.

        On macOS, Safari Technology Preview or a local build WebKit/Safari will always
        get the default preference values through the "Feature Flags" SPI. Unfortunately,
        this approach won't work if the OS does not provide correct default preference values.

        With this patch, we only get default preference values with the SPI for system
        WebKit on macOS. For all other cases, we use hardcoded values. So that
        WebKit will always get the correct default preference values.

        This patch also fixes a few mistakes in two preferences: "webm_webaudio" and "vp8_decoder".

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
        (WebKit::isFeatureFlagEnabled):
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::isFeatureFlagEnabled):
        (WebKit::defaultAsyncFrameAndOverflowScrollingEnabled):
        (WebKit::defaultUseGPUProcessForCanvasRenderingEnabled):
        (WebKit::defaultUseGPUProcessForDOMRenderingEnabled):
        (WebKit::defaultUseGPUProcessForMediaEnabled):
        (WebKit::defaultUseGPUProcessForWebGLEnabled):
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):
        (WebKit::defaultIncrementalPDFEnabled):
        (WebKit::defaultWebMFormatReaderEnabled):
        (WebKit::defaultVP8DecoderEnabled):
        (WebKit::defaultVP9DecoderEnabled):
        (WebKit::defaultVP9SWDecoderEnabledOnBattery):
        (WebKit::defaultWebMParserEnabled):
        (WebKit::defaultWebMWebAudioEnabled):
        (WebKit::defaultInAppBrowserPrivacy): Deleted.
        * Shared/WebPreferencesDefaultValues.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Fix a typo.

2021-08-06  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Remove support for AVAssetImageGenerator
        https://bugs.webkit.org/show_bug.cgi?id=228560
        <rdar://problem/81336280>

        Reviewed by Eric Carlson.

        Drive-by fix: we're passing the wrong value into acceleratedRenderingStateChanged(), and
        we're not setting the correct initial value on MediaPlayerPrivateRemote creation.

        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):

2021-08-06  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION: ASSERTION FAILED: !DeprecatedGlobalSettings::shouldManageAudioSessionCategory() || AudioSession::sharedSession().category() == AudioSession::CategoryType::PlayAndRecord
        https://bugs.webkit.org/show_bug.cgi?id=228847
        <rdar://problem/81587101>

        Reviewed by Jer Noble.

        No new tests, fixes a crashing test.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::audioUnitWillStart): Restore.

2021-08-05  Kate Cheney  <katherine_cheney@apple.com>

        LoadWebArchive.FailNavigation1 test is a false positive
        https://bugs.webkit.org/show_bug.cgi?id=228848
        <rdar://problem/81587448>

        Reviewed by Brent Fulgham.

        Drive by logging fix.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):

2021-08-05  Eric Carlson  <eric.carlson@apple.com>

        [iOS] getUserMedia sometimes doesn't capture from specified microphone
        https://bugs.webkit.org/show_bug.cgi?id=228753
        rdar://79704226

        Reviewed by Youenn Fablet.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Re
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::audioUnitWillStart): Delete,
        we don't need it now that the web process configures the audio session before
        capture begins.

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

        GPUProcessProxy should send tccd mach lookup sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=228827

        Reviewed by Per Arne Vollan.

        In https://bugs.webkit.org/show_bug.cgi?id=225319, I mistakenly moved from mach lookup extension to generic extension.
        Reverting that change.

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

2021-08-05  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] RemoteAudioSessionProxyManager should use the shared audio session
        https://bugs.webkit.org/show_bug.cgi?id=228795
        <rdar://problem/81530450>

        Reviewed by Jer Noble.

        RemoteAudioSessionProxyManager creates and uses a private AudioSession, which means
        that any code that moves from the WebProcess to the GPUProcess and uses
        `AudioSession::sharedSession` will be using a separate platform audio session wrapper
        object. RemoteAudioSessionProxyManager doesn't need a private AudioSession, so 
        change it to use `AudioSession::sharedSession`.

        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::RemoteAudioSessionProxyManager): Don't
        create a new AudioSession.
        (WebKit::RemoteAudioSessionProxyManager::~RemoteAudioSessionProxyManager): Use
        AudioSession::sharedSession().
        (WebKit::RemoteAudioSessionProxyManager::updateCategory): Ditto.
        (WebKit::RemoteAudioSessionProxyManager::setPreferredBufferSizeForProcess): Ditto.
        (WebKit::RemoteAudioSessionProxyManager::tryToSetActiveForProcess): Ditto.

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

        [macOS Monterey] Translate popover becomes detached from webpage after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=228807
        rdar://81540115

        Reviewed by Sam Weinig.

        Close the context menu translation popover in `WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly`
        (along with all other content-relative UI) to prevent the popover from being detached from its translated text
        upon scrolling or zooming.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly):
        (WebKit::WebViewImpl::handleContextMenuTranslation):

        Save a weak pointer to the current translation popover when we're about to present it, and use it to force the
        popover to `-close` when dismissing content-relative child windows. Also take this opportunity to remove some
        staging declarations on LTUITranslationViewController that have long since landed in the macOS 12 SDK.

2021-08-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        GCC 11 builds should use -Wno-array-bounds, -Wno-nonnull
        https://bugs.webkit.org/show_bug.cgi?id=228601

        Reviewed by Carlos Garcia Campos.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::~Stream):

2021-08-05  Imanol Fernandez  <ifernandez@igalia.com>

        Fix XR related clang warnings in WPE
        https://bugs.webkit.org/show_bug.cgi?id=228779

        Reviewed by Sam Weinig.

        Fix a few compiler warnings.

        * Shared/XR/XRDeviceProxy.cpp:
        (WebKit::XRDeviceProxy::views const):

2021-08-04  Tim Horton  <timothy_horton@apple.com>

        Bifurcated RemoteLayerBackingStore zooms in every time it repaints
        https://bugs.webkit.org/show_bug.cgi?id=228798

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        If applying the scale/flip workaround manually, we need to save the
        GraphicsContext state, or it leaks between paints.

2021-08-04  Jean-Yves Avenard  <jya@apple.com>

        Use Observer in place of VideoFullscreenManagerProxyClient
        https://bugs.webkit.org/show_bug.cgi?id=228761
        rdar://problem/81489026

        Reviewed by Jer Noble.

        Use an Observer member rather than creating a child class that would be used
        when the PiP state change. This prevents having to deal with lifetime and
        potentially setting it up multiple times.
        No change in observable behaviour, covered with existing tests.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h: Remove VideoFullscreenManagerProxyClient
        class. Use WeakHashSet to store observers.
        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::addVideoInPictureInPictureDidChangeObserver):
        Method added, replace older setClient
        (WebKit::VideoFullscreenManagerProxy::hasVideoInPictureInPictureDidChange):
        Iterate over all observers and call accordingly.
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController initWithWebView:]): Remove no longer necessary
        code.
        (-[WKFullScreenWindowController dealloc]): Remove no longer necessary
        code.
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
        set PiP change observer if none already exists.
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]): Remove no longer necessary
        code.
        (-[WKFullScreenWindowController dealloc]): Remove no longer necessary
        code.
        (-[WKFullScreenWindowController clearVideoFullscreenManagerObserver]):
        (-[WKFullScreenWindowController setVideoFullscreenManagerObserver]):
        (-[WKFullScreenWindowController didExitPictureInPicture]):
        (-[WKFullScreenWindowController windowDidEnterFullScreen:]):
        (-[WKFullScreenWindowController windowDidFailToExitFullScreen:]):
        (-[WKFullScreenWindowController windowDidExitFullScreen:]):

2021-08-04  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerBackingStore: Adopt a new bifurcated layer switch
        https://bugs.webkit.org/show_bug.cgi?id=228800
        <rdar://problem/81534641>

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        Let CA know that we're going to hand it both a display list and
        backing store ahead of time by setting a new bit.

2021-08-04  Peng Liu  <peng.liu6@apple.com>

        [Catalina][GPUP] Some API tests fail after GPU Process features are enabled
        https://bugs.webkit.org/show_bug.cgi?id=228589

        Reviewed by Jer Noble.

        When an audio session's configuration changes, let `RemoteAudioSessionProxy`
        in the GPU process send the latest audio session configuration to `RemoteAudioSession`
        in the WebContent process through an IPC message (`RemoteAudioSession::ConfigurationChanged`).

        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::configurationChanged):
        * GPUProcess/media/RemoteAudioSessionProxy.h:

        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::RemoteAudioSessionProxyManager):
        (WebKit::RemoteAudioSessionProxyManager::~RemoteAudioSessionProxyManager):
        (WebKit::RemoteAudioSessionProxyManager::beginAudioSessionInterruption):
        (WebKit::RemoteAudioSessionProxyManager::endAudioSessionInterruption):
        (WebKit::RemoteAudioSessionProxyManager::hardwareMutedStateDidChange):
        (WebKit::RemoteAudioSessionProxyManager::bufferSizeDidChange):
        (WebKit::RemoteAudioSessionProxyManager::sampleRateDidChange):
        (WebKit::RemoteAudioSessionProxyManager::configurationDidChange):

        * GPUProcess/media/RemoteAudioSessionProxyManager.h:
        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::addConfigurationChangeObserver):
        (WebKit::RemoteAudioSession::removeConfigurationChangeObserver):
        (WebKit::RemoteAudioSession::configurationChanged):
        * WebProcess/GPU/media/RemoteAudioSession.h:
        * WebProcess/GPU/media/RemoteAudioSession.messages.in:

2021-08-04  Simon Fraser  <simon.fraser@apple.com>

        Crash in DisplayLink::notifyObserversDisplayWasRefreshed() on macOS
        https://bugs.webkit.org/show_bug.cgi?id=228790
        <rdar://81338621>

        Reviewed by Tim Horton.

        Defend against DisplayLink::nominalFramesPerSecondFromDisplayLink() returning zero,
        which can result in a later divide by zero in m_currentUpdate.nextUpdate().

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::nominalFramesPerSecondFromDisplayLink):

2021-08-04  Said Abou-Hallawa  <said@apple.com>

        [GPUProcess] REGRESSION: A noticeable slow down when browsing Live Photos album on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=228673
        <rdar://81353138>

        Reviewed by Wenson Hsieh.

        RemoteImageBufferProxy::flushDrawingContext() assumes a FlushContext item
        is always appended to its DisplayList when it calls flushDrawingContextAsync()
        and this is why it waits up to 3 seconds for the DidFlush message. But this
        does not happen if the DisplayList of RemoteImageBufferProxy is empty.

        In addition to checking whether the DisplayList is empty, we can check also
        whether we do not have pending a FlushContext item before appending a new
        one.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-08-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] "Look Up" action is sometimes missing after force pressing images
        https://bugs.webkit.org/show_bug.cgi?id=228774
        rdar://78040734

        Reviewed by Devin Rousso.

        On iOS devices that support both 3D Touch and Visual Look Up (i.e., iPhone XS and iPhone XS Max), it's currently
        possible to skip the image analysis preflight gesture entirely when showing the context menu over images in the
        case where the user triggers the interaction by exceeding the force press threshold in under 100 ms (the current
        delay of the image analysis long press gesture).

        Mitigate this by teaching WKImageAnalysisGestureRecognizer to trigger image analysis preflight slightly ahead of
        the context menu interaction when performing a force press by transitioning to Began state early under
        `-touchesBegan:withEvent:` and `-touchesMoved:withEvent:`, if the touch's force exceeds a certain (relatively
        low) threshold.

        * UIProcess/ios/WKImageAnalysisGestureRecognizer.mm:
        (-[WKImageAnalysisGestureRecognizer touchesBegan:withEvent:]):
        (-[WKImageAnalysisGestureRecognizer touchesMoved:withEvent:]):
        (-[WKImageAnalysisGestureRecognizer beginAfterExceedingForceThresholdIfNeeded:]):

2021-08-04  Per Arne  <pvollan@apple.com>

        [macOS] Update message filters
        https://bugs.webkit.org/show_bug.cgi?id=228773
        <rdar://problem/81514311>

        Reviewed by Brent Fulgham.

        Update message filters with enforcement on macOS based on telemetry.

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

2021-08-04  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION: iCloud Photos Web app may crash WebProcess once the GPUProcess is relaunched
        https://bugs.webkit.org/show_bug.cgi?id=228665

        Reviewed by Simon Fraser.

        When the GPUProcess is relaunched, ensure NativeImage is detached from
        the RemoteResourceCacheProxy once it is removed from its m_nativeImages.

        Otherwise the NativeImage later will ask RemoteResourceCacheProxy to 
        release its corresponding NativeImage from RemoteResourceCache even
        though it was destroyed when the GPUProcess was relaunched.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::~RemoteResourceCacheProxy):
        (WebKit::RemoteResourceCacheProxy::clearNativeImageMap):
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-08-03  Jean-Yves Avenard  <jya@apple.com>

        REGRESSION (r280568): ASSERTION FAILED: videoFullscreenManager->client() == &_videoFullscreenManagerProxyClient
        https://bugs.webkit.org/show_bug.cgi?id=228740
        rdar://problem/81464301

        Reviewed by Jer Noble.

        Fix assertion to reflect that the code can be code in two ways.
        This will all go away following bug 228761.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController setVideoFullscreenManagerClient:]):

2021-08-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r280531 and r280589.

        caused

        Reverted changesets:

        "[Cocoa] Remove support for AVAssetImageGenerator"
        https://bugs.webkit.org/show_bug.cgi?id=228560
        https://commits.webkit.org/r280531

        "REGRESSION (r280531): multiple modern-media-controls tests
        have become flaky timeouts"
        https://bugs.webkit.org/show_bug.cgi?id=228714
        https://commits.webkit.org/r280589

2021-08-03  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Allow check for nvram "emu" state on internal OS builds
        https://bugs.webkit.org/show_bug.cgi?id=228745
        <rdar://problem/78363040>

        Reviewed by Per Arne Vollan.

        Allow access to the 'emu' nvram variable when running on an Apple Internal OS build. This
        reduces spurious sandbox violation reports, and improves the performance of test systems.

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

2021-08-03  Tim Horton  <timothy_horton@apple.com>

        Remove unused processDidTransitionTo{Foreground,Background} IPC
        https://bugs.webkit.org/show_bug.cgi?id=228328

        Reviewed by Wenson Hsieh.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::processDidTransitionToForeground): Deleted.
        (WebKit::GPUProcess::processDidTransitionToBackground): Deleted.
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processDidTransitionToForeground): Deleted.
        (WebKit::NetworkProcess::processDidTransitionToBackground): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground): Deleted.
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground): Deleted.
        * NetworkProcess/curl/NetworkProcessCurl.cpp:
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground): Deleted.
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground): Deleted.
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformProcessDidTransitionToForeground): Deleted.
        (WebKit::NetworkProcess::platformProcessDidTransitionToBackground): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::updateProcessAssertion):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::updateProcessAssertion):
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::updateProcessAssertion):
        * WebAuthnProcess/WebAuthnProcess.cpp:
        (WebKit::WebAuthnProcess::processDidTransitionToForeground): Deleted.
        (WebKit::WebAuthnProcess::processDidTransitionToBackground): Deleted.
        * WebAuthnProcess/WebAuthnProcess.h:
        * WebAuthnProcess/WebAuthnProcess.messages.in:
        These messages do nothing.

2021-08-03  Per Arne  <pvollan@apple.com>

        [iOS] Fix sandbox violation in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=228743
        <rdar://problem/81334849>

        Reviewed by Brent Fulgham.

        Allow reading "hw.product" in the GPU process' sandbox.

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

2021-08-03  Devin Rousso  <drousso@apple.com>

        [Live Text] [iOS] Provide a presenting `UIViewController` for machine readable code actions so that they are related to the same view
        https://bugs.webkit.org/show_bug.cgi?id=228722

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateContextMenuForMachineReadableCodeForImageAnalysis:]): Added.
        (-[WKContentView imageAnalysisGestureDidBegin:]):
        (-[WKContentView imageAnalysisGestureDidTimeOut:]):

2021-08-02  Peng Liu  <peng.liu6@apple.com>

        [GPUP] RemoteAudioSession::setPreferredBufferSize() does not change its preferredBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=228720

        Reviewed by Jer Noble.

        `RemoteAudioSession` should update its `preferredBufferSize` in
        `setPreferredBufferSize()`. Otherwise, the `preferredBufferSize`
        will become inconsistent with the value in the GPU process.

        No new tests. Fix API test failures.

        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::setPreferredBufferSize):

2021-08-02  Kate Cheney  <katherine_cheney@apple.com>

        [App Privacy Report] Domains are deleted for ephemeral website data stores
        https://bugs.webkit.org/show_bug.cgi?id=228708
        <rdar://problem/81282432>

        Reviewed by Alex Christensen.

        No new tests. Since this data is not stored in WebKit, we have no
        way to test when it gets deleted or not. I tested manually and requested
        an automated test at the correct networking layer.

        Only clear Privacy Report data if the website data store is
        persistent. Safari calls the SPI to remove website data for ephemeral
        data stores in some cases that are unrelated to a user clearing
        website data or history and thus should not clear App Privacy Report
        data. Additionally, it is unexpected that clearing an ephemeral data
        store would clear disk data, as website data is only stored in memory
        in this case.

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

2021-08-02  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio] Add webm/vorbis container support
        https://bugs.webkit.org/show_bug.cgi?id=228139
        rdar://80883073

        Reviewed by Jer Noble.

        Access to the com.apple.audio.AudioComponentRegistrar is denied by the sandbox which
        prevents registering the Vorbis Audio Component. So we instantiate the decoder right before
        setting up the sandbox.
        This is a workaround for rdar://81137953.
        Test: webaudio/decode-audio-data-webm-vorbis.html

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

2021-08-02  Jean-Yves Avenard  <jya@apple.com>

        Crash in -[WKFullScreenWindowController windowDidExitFullScreen:]
        https://bugs.webkit.org/show_bug.cgi?id=228694
        rdar://79569881

        Reviewed by Jer Noble.

        It appears that [WKFullScreenWindowController finishedEnterFullScreenAnimation] can
        cause the retain count to be decreased (this is the only explanation that makes any
        sense considering the crash and when the regression started following bug 227243).
        No test, can't reproduce.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController setVideoFullscreenManagerClient:]): Add utility method
        to remove duplicated code.
        (-[WKFullScreenWindowController didExitPictureInPicture]):
        (-[WKFullScreenWindowController windowDidEnterFullScreen:]):
        (-[WKFullScreenWindowController windowDidFailToExitFullScreen:]):
        (-[WKFullScreenWindowController windowDidExitFullScreen:]):
        (-[WKFullScreenWindowController _manager]): fly-by make style consistent with other
        similar methods.

2021-08-02  Alex Christensen  <achristensen@webkit.org>

        Add log when experimental network loader is used
        https://bugs.webkit.org/show_bug.cgi?id=227932

        Reviewed by Chris Dumez.

        We are seeing some reports of serious loading issues in bugs related to rdar://80330028
        and we think they are because of problems related to the experimental network loader, which can be
        enabled in experimental features but is not ready for use on the internet yet.
        Add a log so we can determine for sure that is what is going on in those cases.

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

2021-08-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] ASSERTION FAILED: evt->type() == eventNames().keydownEvent || evt->type() == eventNames().keypressEvent in WebView::interpretKeyEvent since r280492
        https://bugs.webkit.org/show_bug.cgi?id=228690

        Reviewed by Brent Fulgham.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::handleEditingKeyboardEvent): Return early unless the event is keydown or keypress.

2021-08-02  Alex Christensen  <achristensen@webkit.org>

        Don't change invalid baseURLs from loadData or loadHTMLString to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=228717
        <rdar://79909343>

        Reviewed by Chris Dumez.

        r278737 fixed a compatibility bug from r272469 but introduced a crash when the base URL does not successfully parse.
        r279450 fixed that crash but introduced a new behavior change that changes the URL to about:blank.  This didn't seem
        to change anything because window.location is about:blank with and without the change, but WKWebView.URL did change,
        which broke at least one app.  This undoes the functionality change from r279450 and keeps the crash fix, which are
        both covered by API tests.  I also manually verified this fixes the app in the radar.

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

2021-08-02  Devin Rousso  <drousso@apple.com>

        [Live Text] SPI for machine readable codes is only available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=228711

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _setUpImageAnalysis]):
        (-[WKContentView _tearDownImageAnalysis]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):
        (-[WKContentView imageAnalysisGestureDidTimeOut:]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):

2021-08-02  Youenn Fablet  <youenn@apple.com>

        Attribute nw connections to the page bundle identifier
        https://bugs.webkit.org/show_bug.cgi?id=228649

        Reviewed by Eric Carlson.

        Send page identifier from WebProcess to NetworkProcess when creating a WebRTC socket.
        Use page identifier to get the attributed bundle identifier.
        For that purpose, we need to hop to main thread to get it, then go back to rtc thread to create it.
        We do so by using callOnMainRunLoopAndWait when NetworkRTCProvider does not have the information for the provided page identifier.
        We then make use of nw_parameters_set_source_application_by_bundle_id to set the bundle identifier on TCP and UDP connections.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::attributedBundleIdentifierFromPageIdentifier const):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::addWebPageNetworkParameters):
        (WebKit::NetworkSessionCocoa::removeWebPageNetworkParameters):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::attributedBundleIdentifierFromPageIdentifier):
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket):
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::create):
        (WebKit::NetworkRTCUDPSocketCocoa::createUDPSocket):
        (WebKit::NetworkRTCUDPSocketCocoa::NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
        * Platform/spi/Cocoa/NWParametersSPI.h:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::RTCSocketFactory):
        (WebKit::RTCSocketFactory::CreateUdpSocket):
        (WebKit::RTCSocketFactory::CreateClientTcpSocket):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

2021-08-02  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/webmessaging/broadcastchannel/blobs.html is a flaky failure since implementing BlobChannel
        https://bugs.webkit.org/show_bug.cgi?id=228168
        <rdar://problem/80922502>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkBroadcastChannelRegistry.cpp:
        (WebKit::NetworkBroadcastChannelRegistry::postMessage):
        * NetworkProcess/NetworkBroadcastChannelRegistry.h:
        * NetworkProcess/NetworkBroadcastChannelRegistry.messages.in:

        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessageAsyncWantsConnection):
        handleMessageAsyncWantsConnection() had gotten out of sync with handleMessageAsync(). This was causing IPC decoding
        failures when using both "Async" and "WantsConnection" for the IPC message.

        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.cpp:
        (WebKit::WebBroadcastChannelRegistry::postMessage):
        (WebKit::WebBroadcastChannelRegistry::postMessageToRemote):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.h:
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.messages.in:

2021-08-02  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Remove unneeded sandbox extension member
        https://bugs.webkit.org/show_bug.cgi?id=228584

        Reviewed by Darin Adler.

        Remove unneeded sandbox extension handle member, since this extension is never revoked.

        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::switchFromStaticFontRegistryToUserFontRegistry):

2021-08-02  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Remove support for AVAssetImageGenerator
        https://bugs.webkit.org/show_bug.cgi?id=228560
        <rdar://problem/81336280>

        Reviewed by Eric Carlson.

        Drive-by fix: Passing the wrong value down to the GPU process when the acceleratedRenderingStateChanged().
        We should be passing the results of MediaPlayer::renderingCanBeAccelerated() which comes down from HTMLMediaElement,
        not MediaPlayer::supportsAcceleratedRendering(), which comes up from the GPU process.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):

2021-08-02  Martin Robinson  <mrobinson@igalia.com>

        [css-scroll-snap] Consider all snap areas at a given snap offset when snapping
        https://bugs.webkit.org/show_bug.cgi?id=228141

        Reviewed by Frédéric Wang.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<SnapOffset<float>>::encode): Serialize new members.
        (ArgumentCoder<SnapOffset<float>>::decode): Deserialize new members.

2021-08-01  Youenn Fablet  <youenn@apple.com>

        Introduce an experimental feature to toggle WebRTC socket proxying
        https://bugs.webkit.org/show_bug.cgi?id=228681

        Reviewed by Eric Carlson.

        Decide whether to disable proxying based on experimental feature in WebProcess.
        Send the disable relay value from WebProcess to NetworkProcess for TCP sockets.
        Manually tested.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket):
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::CreateClientTcpSocket):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

2021-07-31  Youenn Fablet  <youenn@apple.com>

        Improve LocalSampleBufferDisplayLayer logging
        https://bugs.webkit.org/show_bug.cgi?id=228582

        Reviewed by Eric Carlson.

        Send through IPC the log identifier to the GPU display layer.

        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
        (WebKit::RemoteSampleBufferDisplayLayer::setLogIdentifier):
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.h:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.messages.in:
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::setLogIdentifier):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:

2021-07-31  Youenn Fablet  <youenn@apple.com>

        RemoteAudioMediaStreamTrackRendererInternalUnit should handle changes of requested sampleCount
        https://bugs.webkit.org/show_bug.cgi?id=228631
        <rdar://80690191>

        Reviewed by Eric Carlson.

        The requested number of samples might change in case the output device changes.
        When changing device, we might have a generated buffer of 4096 while 1024 samples are requested.
        For each 1024 sample chunk, we will request a buffer of 4096, which cannot be provided by WebProcess.
        To prevent this case, we keep track of a requested sample count overshoot so that next time the render callback is called,
        we might not request to generate another chunk.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::start):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::render):

2021-07-30  Jean-Yves Avenard  <jya@apple.com>

        REGRESSION (r274460?): Infinite recursion on fullscreen/full-screen-remove-ancestor.html in WTR::InjectedBundlePage::closeFullScreen
        https://bugs.webkit.org/show_bug.cgi?id=224085
        rdar://75576840

        Reviewed by Eric Carlson.

        WebFullScreenManager::close() is used to cleanup a transient error when exiting or
        attempting to exit fullscreen; it then calls InjectedBundleXXX::closeFullScreen().
        It is possible for the injected bundle's closeFullScreen() to attempt to exit full
        screen mode again.
        Rather than making the bundle responsible for doing the right thing, we add a
        workaround in the fullscreen manager to ensure no recursion is happening.

        Covered by existing test.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::close):
        * WebProcess/FullScreen/WebFullScreenManager.h: Make close() method private

2021-07-30  Tim Horton  <timothy_horton@apple.com>

        Accessibility code logs to stderr in many layout test runs
        https://bugs.webkit.org/show_bug.cgi?id=228653

        Reviewed by Wenson Hsieh.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityPreferencesDidChange):
        r279342 accidentally landed a WTFLogAlways in a common codepath. Remove it.

2021-07-30  Youenn Fablet  <youenn@apple.com>

        softlink nw_parameters_allow_sharing_port_with_listener
        https://bugs.webkit.org/show_bug.cgi?id=228636

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::createNWConnection):
        This helps compiling/running WebKit on older OSes.
        Also make use of nw_endpoint_create_host_with_numeric_port to remove the need for string to int conversion.
        * Platform/spi/Cocoa/NWParametersSPI.h:

2021-07-30  Youenn Fablet  <youenn@apple.com>

        Attribute nw connections to the source application
        https://bugs.webkit.org/show_bug.cgi?id=228641
        <rdar://81039713>

        Reviewed by Alex Christensen.

        Add source application token for every nw connection/listener, like done for WebSocket or NSURLSession tasks.
        This will allow the nw layer to do custom processing based on the application doing the loads.
        Introduce an audit_token_t getter on NetworkProcess.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::sourceApplicationAuditData const):
        (WebKit::NetworkProcess::sourceApplicationAuditToken const):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::sourceApplicationAuditToken const):
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
        * Platform/spi/Cocoa/NWParametersSPI.h:

2021-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop building WebGPU and the WHLSL compiler to decrease binary size
        https://bugs.webkit.org/show_bug.cgi?id=228179

        Reviewed by Dean Jackson, Robin Morisset, and Devin Rousso.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebGPUEnabled): Deleted.
        * Shared/WebPreferencesDefaultValues.h:

2021-07-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][GTK] build broken with python2 after r280382
        https://bugs.webkit.org/show_bug.cgi?id=228629

        Reviewed by Philippe Normand.

        Call {PYTHON_EXECUTABLE} instead of python3. Our build currently
        supports both versions of python (2 and 3). If the user wants
        to force a specific version it can do that via the CMake argument
        -DPYTHON_EXECUTABLE=/path/to/python/interpreter

        No new tests, is a build fix.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2021-07-29  Jer Noble  <jer.noble@apple.com>

        [macOS|AS] VTImageRotationSession returns a kVTImageRotationNotSupportedErr, breaks painting rotated videos
        https://bugs.webkit.org/show_bug.cgi?id=228620

        Reviewed by Per Arne Vollan.

        Error is thrown from ImageRotationSessionVT, forcing WebKit to go down software rotation path.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-07-29  Devin Rousso  <drousso@apple.com>

        [Payment Request] `additionalShippingMethods` are not used if a `paymentMethodType` is provided
        https://bugs.webkit.org/show_bug.cgi?id=228599
        <rdar://problem/81190366>

        Reviewed by Andy Estes.

        r275169 made it so that `paymentMethodType` is no longer `required` so that `additionalShippingMethods`
        can be specified without having to limit it to a specific payment method type. While this
        works in theory, WebKit doesn't know about the user's selected payment method type until the
        user actually selects a payment method, meaning that until then the `additionalShippingMethods`
        are not used. Unfortunately (until now) `PKPaymentRequestPaymentMethodUpdate` did not
        support providing a `NSArray<PKShippingMethod *> *`, so there was no way to update the list
        of shipping methods when the user changed their selected payment method, meaning that WebKit
        would have to wait/rely on the user to change their shipping address _after_ selecting a
        payment method in order for `additionalShippingMethods` to take effect.

        This also fixes an issue with WebKit's implementation of the W3C Payment Request API by
        allowing any generic (i.e. things not specific to Apple Pay) `shippingOptions` provided in
        `PaymentDetailsUpdate` to actually be used and update the Apple Pay sheet accordingly.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::PaymentAuthorizationPresenter::completePaymentMethodSelection):
        (WebKit::PaymentAuthorizationPresenter::completeShippingMethodSelection):
        Also convert and set the `shippingMethods` on the update.

2021-07-29  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r278877) [Cocoa] WebAuthn stopped working for non-Safari browsers 
        https://bugs.webkit.org/show_bug.cgi?id=228116
        <rdar://problem/80693607>

        Patch by Brent Fulgham.

        Reviewed by Per Arne Vollan.

        We should not be using the PAC key to confirm a valid WebContent process is the source of
        WebAuthn-related messages. Instead, we should confirm the message source is an Apple-signed
        executable, and that the signining identity is for the WebContent process.

        * Shared/Cocoa/CodeSigning.h: Renamed from Source/WebKit/Shared/mac/CodeSigning.h.
        * Shared/Cocoa/CodeSigning.mm: Renamed from Source/WebKit/Shared/mac/CodeSigning.mm.
        (WebKit::codeSigningIdentifier):
        (WebKit::codeSigningIdentifierForCurrentProcess):
        (WebKit::currentProcessIsPlatformBinary):
        (WebKit::codeSigningIdentifierAndPlatformBinaryStatus):
        * Shared/Cocoa/XPCEndpoint.mm:
        (WebKit::XPCEndpoint::XPCEndpoint):
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::messageSourceIsValidWebContentProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getWebAuthnProcessConnection):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebKit.xcodeproj/project.pbxproj:

2021-07-29  Peng Liu  <peng.liu6@apple.com>

        The bundle path of downlevel Safari is wrong
        https://bugs.webkit.org/show_bug.cgi?id=228339

        Reviewed by Tim Horton.

        Use the same approach as `isSystemWebKit` to check whether the WebKit bundle
        is from the staged framework.

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
        (WebKit::isFeatureFlagEnabled):

2021-07-29  Kate Cheney  <katherine_cheney@apple.com>

        CORS preflight checks not attributed to the correct application
        https://bugs.webkit.org/show_bug.cgi?id=228585
        <rdar://problem/81220151>

        Reviewed by Alex Christensen.

        We use _attributedBundleIdentifier to attribute loads to the correct
        application. This parameter is set on each NSURLSession in the per-page
        session sets. This patch sets the webPageProxyID for CORS preflight check
        in the load parameters so the network data task knows to use the per-page
        session set, so the loads get attributed to the right application.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):

2021-07-29  Peng Liu  <peng.liu6@apple.com>

        [macOS Catalina] Some feature preferences have wrong default values
        https://bugs.webkit.org/show_bug.cgi?id=228564

        Reviewed by Tim Horton.

        When `HAVE(SYSTEM_FEATURE_FLAGS)` is false, we still need to enable
        some features by default.

        This patch makes sure the following features are enabled by default
        on macOS (consistent with the properties in WebKit-macos.plist):
        - async_frame_and_overflow_scrolling
        - gpu_process_canvas_rendering
        - gpu_process_media
        - gpu_process_webrtc
        - incremental_pdf
        - vp9_decoder
        - webm_format_reader
        - webm_parser

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultUseGPUProcessForCanvasRenderingEnabled):
        (WebKit::defaultUseGPUProcessForDOMRenderingEnabled):
        (WebKit::defaultUseGPUProcessForMediaEnabled):
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):
        (WebKit::defaultIncrementalPDFEnabled):
        (WebKit::defaultWebMFormatReaderEnabled):

2021-07-29  Youenn Fablet  <youenn@apple.com>

        NetworkRTCUDPSocketCocoaConnections nw_listener_set_state_changed_handler callback should hold a reference to its listener
        https://bugs.webkit.org/show_bug.cgi?id=228551
        <rdar://81137047>

        Reviewed by Alex Christensen.

        nw_listener is not guaranteed to stay valid when calling the state change callback.
        We need to hold a reference to the listener in the callback.
        To prevent memory leaks, the callback will clear its listener reference when entering cancelled state.
        The cancelled state is guaranteed to happen when calling cancel in the listener, which happens when closing the socket.
        Covered by existing tests.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):

2021-07-29  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late July 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=228579

        Unreviewed non-unified build fixes.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp: Add missing "Logging.h" header.
        * NetworkProcess/NetworkBroadcastChannelRegistry.cpp: Add missing
        <WebCore/MessageWithMessagePorts.h> header.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp: Add missing
        "NetworkBroadcastChannelRegistry.h" header.
        * UIProcess/gtk/WebDateTimePickerGtk.cpp:
        (WebKit::timeToString): Add missing WebCore:: namespace prefix to usages of constants of the
        WebCore::SecondFormat enum.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp: Add missing
        <WebCore/FrameView.h> header.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp: Add missing
        <WebCore/RenderView.h> header.
        * WebProcess/gtk/GtkSettingsManagerProxy.cpp: Add missing "WebCore.h" header.

2021-07-28  Jean-Yves Avenard  <jya@apple.com>

        [WebAudio] Add webm/opus container support
        https://bugs.webkit.org/show_bug.cgi?id=227110
        <rdar://problem/79437067>

        Reviewed by Jer Noble.

        Add default value for webm_webaudio feature flag for the different platforms.
        Disabled by default on all platforms.
        Fly-by fix: don't make webm parser dependent on VP9 support.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebMWebAudioEnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):

2021-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Start tracking resource uses for ImageBuffers
        https://bugs.webkit.org/show_bug.cgi?id=228225

        Reviewed by Said Abou-Hallawa.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::cacheImageBuffer):
        (WebKit::RemoteResourceCacheProxy::cachedImageBuffer):
        (WebKit::RemoteResourceCacheProxy::releaseImageBuffer):
        (WebKit::RemoteResourceCacheProxy::recordImageBufferUse):
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-07-28  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] <select> picker value committed to incorrect element after programmatic focus change
        https://bugs.webkit.org/show_bug.cgi?id=228556
        rdar://81222952

        Reviewed by Wenson Hsieh.

        The old <select> picker is a UIPickerView that only commits any value
        changes to the WebProcess once the user dismisses the picker, or focus
        is lost programmatically. Currently, the value change is committed by
        sending a message to the WebProcess, telling it to update the value of
        the currently focused element. However, when focus is changed
        programmatically, the focused element in the WebProcess is updated
        before the commit, and the incorrect element's value can be changed.

        To fix, update all methods which commit value changes to the focused
        element to take an ElementContext parameter representing the element
        that needs its value modified. Then, in the WebProcess, rather than
        commit the value change to the currently focused element, retrieve the
        element from the ElementContext, ensuring the correct element is
        updated.

        Note that this bug only surfaces in the old <select> picker, on apps
        linked before iOS 13, since the new picker commits value changes
        immediately and dismisses itself.

        Test: fast/forms/ios/select-picker-change-and-focus-another-select-programmatically.html

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryClear]):
        (-[WKContentView updateFocusedElementValueAsNumber:]):
        (-[WKContentView updateFocusedElementValue:]):
        (-[WKContentView updateFocusedElementValueAsColor:]):
        (-[WKContentView updateFocusedElementSelectedIndex:allowsMultipleSelection:]):
        (-[WKContentView insertTextSuggestion:]):
        (-[WKContentView selectMenu:didSelectItemAtIndex:]):
        (-[WKContentView selectMenu:didCheckItemAtIndex:checked:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setFocusedElementValue):
        (WebKit::WebPageProxy::setFocusedElementValueAsNumber):
        (WebKit::WebPageProxy::setFocusedElementSelectedIndex):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker reset:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker controlEndEditing]):
        (-[WKSelectPicker didSelectOptionIndex:]):
        (-[WKSelectPickerTableViewController tableView:didSelectRowAtIndexPath:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setFocusedElementValue):
        (WebKit::WebPage::setFocusedElementValueAsNumber):
        (WebKit::WebPage::setFocusedElementSelectedIndex):

2021-07-28  Tim Horton  <timothy_horton@apple.com>

        iOS Simulator doesn't have any WebKit system feature flags
        https://bugs.webkit.org/show_bug.cgi?id=228557
        rdar://80991854

        Reviewed by Darin Adler.

        * Scripts/generate-feature-flags-plist.sh:
        Install iOS feature flags for the simulator (and watchOS and tvOS for their respective simulators).
        This was causing on-by-default features like GPUP to be disabled in the simulator.

2021-07-28  Alex Christensen  <achristensen@webkit.org>

        WebSocket: Safari on iOS 15 beta 3 is sending invalid close frame
        https://bugs.webkit.org/show_bug.cgi?id=228329

        Reviewed by Youenn Fablet.

        Our NSURLSession WebSocket implementation had two bugs:
        1. It was sending 1005 as the close code if none was specified.
           It now sends no close code, which matches Chrome and Firefox.
        2. It was not sending a close code before the close reason when a WebSocket is closed due to navigation.
           It now sends the close code in 2 bytes before the reason, which matches Chrome and Firefox.
           Side note: our CFReadStream/CFWriteStream implementation sent neither the code nor the reason
           in this case, which matches no other browser.

        Covered by an API test.

        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::close):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::fail):
        (WebKit::WebSocketChannel::disconnect):

2021-07-28  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] SVN_REVISION drifting away if bots don't re-run cmake
        https://bugs.webkit.org/show_bug.cgi?id=228290

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake: Expand ${BUILD_REVISION} with apply-build-revision-to-files.py for
        non-tarball builds, or let CMake do it for tarball builds.
        * PlatformWPE.cmake: Ditto.
        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU): Use generated BuildRevision.h header
        * gtk/webkit2gtk-web-extension.pc.in: Switch revision var to ${} format, so that we can choose to
        either let CMake expand it or do it ourselves.
        * gtk/webkit2gtk.pc.in: Ditto.

2021-07-27  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] [macOS] Overflow button still shows as `on` even after contextmenu is dismissed
        https://bugs.webkit.org/show_bug.cgi?id=228310
        <rdar://problem/81124786>

        Reviewed by Wenson Hsieh.

        Pipe along the `-[NSMenuDelegate menuDidClose:]` signal to the WebProcess so the `WebCore::ContextMenuProvider`
        can handle it if needed.

        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::useContextMenuItems):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuDelegate menuWillOpen:]):
        (-[WKMenuDelegate menuDidClose:]):

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::didShowContextMenu):
        (WebKit::WebPageProxy::didDismissContextMenu): Added.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):

        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::startWaitingForContextMenuToShow): Added.
        (WebKit::WebPage::contextMenuShowing): Deleted.
        (WebKit::WebPage::contextMenuHidden): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didShowContextMenu): Added.
        (WebKit::WebPage::didDismissContextMenu): Added.
        (WebKit::WebPage::mouseEvent):
        Drive-by: Rename `m_contextMenuShowing` to `m_waitingForContextMenuToShow` for clarity.

2021-07-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Code cleanup after r280356
        https://bugs.webkit.org/show_bug.cgi?id=228495

        Reviewed by Wenson Hsieh.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::putPixelBuffer):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::recordNativeImageUse):
        (WebKit::RemoteResourceCacheProxy::recordFontUse):
        (WebKit::RemoteResourceCacheProxy::cacheNativeImage): Deleted.
        (WebKit::RemoteResourceCacheProxy::cacheFont): Deleted.
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-07-27  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] REGRESSION: Tapping a <select> element does not show a menu on many websites
        https://bugs.webkit.org/show_bug.cgi?id=228340
        rdar://77137768

        Reviewed by Wenson Hsieh.

        Many sites add a touchend event listener to their select elements, that
        is responsible for focusing the element. With the introduction of
        asynchronous touch events, the single tap gesture recognizer can be
        deferred to the point it occurs after the UIProcess is notified that an
        element has been focused. This is problematic, since the UIProcess
        creates and displays inputs peripherals in response to element focus,
        but the gesture recognizer can dismiss presented peripherals via
        `-[WKFormPeripheral endEditing]`. Consequently, many sites immediately
        display and dismiss the input peripheral.

        To fix, only call `-[WKFormPeripheral endEditing]` if the peripheral
        was already being displayed once the tap gesture began. This ensures we
        do not immediately display and dismiss peripherals.

        Note that with the redesigned form controls, the call to `endEditing` is
        unnecessary, as the presented views handle their own dismissal. However,
        the logic is still needed for the old select control (using a keyboard
        input view), to commit value changes. The old control is displayed on
        apps linked against iOS 13 or earlier. This behavior is tested in
        fast/forms/ios/select-picker-change-and-focus-another-select.html.

        Test: fast/forms/ios/form-control-refresh/select/focus-select-in-touchend.html

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapIdentified:]):
        (-[WKContentView _singleTapRecognized:]):
        * UIProcess/ios/forms/WKFormPeripheral.h:
        * UIProcess/ios/forms/WKFormPeripheralBase.h:

2021-07-27  Peng Liu  <peng.liu6@apple.com>

        Safari hangs when entering PiP from (element) fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=228332

        Reviewed by Eric Carlson.

        When a video element's ancestor element is in fullscreen and the video element
        is entering picture-in-picture, `WKFullScreenWindowController` in the UI process
        will notify the WebContent process that the ancestor element needs to exit fullscreen.
        However, some sites call `document.webkitExitFullscreen()` to request the ancestor
        element to exit fullscreen proactively. Both WebContent process and UI process will
        try to do the same thing and may lead to a race condition.

        That was not an issue before r274460 because `WebFullScreenManager::requestExitFullScreen()`
        will ignore the request from the UI process if the WebContent process has already
        started the steps to exit fullscreen.

        This patch stops the UI process sending the exit fullscreen request if a WebContent
        process has started the steps to exit fullscreen.

        Manually tested.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController didEnterPictureInPicture]):

2021-07-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Start tracking resource uses for NativeImages and Fonts
        https://bugs.webkit.org/show_bug.cgi?id=228224

        Reviewed by Said Abou-Hallawa.

        This patch extends the existing resource tracking HashMaps used in RemoteResourceCacheProxy to continue
        to record what they were recording before, but also include this new resource use count information.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::~RemoteResourceCacheProxy):
        (WebKit::RemoteResourceCacheProxy::cacheNativeImage):
        (WebKit::RemoteResourceCacheProxy::cacheFont):
        (WebKit::RemoteResourceCacheProxy::releaseNativeImage):
        (WebKit::RemoteResourceCacheProxy::clearFontMap):
        (WebKit::RemoteResourceCacheProxy::finalizeRenderingUpdateForFonts):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-07-27  Peng Liu  <peng.liu6@apple.com>

        The bundle path of downlevel Safari is wrong
        https://bugs.webkit.org/show_bug.cgi?id=228339

        Reviewed by Jer Noble.

        Fix the bundle path. The correct path is "/Library/Apple/System/Library/StagedFrameworks/Safari".

        * Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
        (WebKit::isFeatureFlagEnabled):

2021-07-27  Saagar Jha  <saagar@saagarjha.com>

        Fix WebProcess sandbox profile when ENABLE_SANDBOX_MESSAGE_FILTER is disabled
        https://bugs.webkit.org/show_bug.cgi?id=228220

        Reviewed by Per Arne Vollan.

        A couple of new filters turn into empty lists when ENABLE_SANDBOX_MESSAGE_FILTER is NO;
        we shouldn't be evaluating them at all, so we need to move the check out.

        * WebProcess/com.apple.WebProcess.sb.in: Factor the conditional check out of the filters.

2021-07-26  Said Abou-Hallawa  <said@apple.com>

        Regulate the WebPage RenderingUpdates from the WebProcess to the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=227791
        <rdar://78430639>

        Reviewed by Simon Fraser.

        This is the workflow to regulate the WebPage RenderingUpdates:

        -- WebPage::finalizeRenderingUpdate() calls RemoteRenderingBackendProxy::
           finalizeRenderingUpdate().

        -- RemoteRenderingBackendProxy::finalizeRenderingUpdate() sends its
           renderingUpdateID to GPUPProcess and asks it to process all the
           pending DisplayList items.

        -- RemoteRenderingBackend::finalizeRenderingUpdate) processes all the
           pending items and sends the received renderingUpdateID back to the
           WebProcess.

        -- RemoteRenderingBackendProxy::didFinalizeRenderingUpdate() stores the 
           received didRenderingUpdateID.

        -- RemoteRenderingBackendProxy::delayedRenderingUpdateCount() returns
           'renderingUpdateID - didRenderingUpdateID' which is the number of
           un-processed finalizeRenderingUpdate by GPUP.

        -- WebPage::canTriggerRenderingUpdate() uses delayedRenderingUpdateCount()
           to decides whether the current RenderingUpdate can be triggered or
           should be rescheduled.

        -- RenderingUpdateScheduler::displayRefreshFired() calls 
           WebPage::canTriggerRenderingUpdate() through the page chrome client.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::submit):
        (WebKit::RemoteRenderingBackend::finalizeRenderingUpdate):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Shared/MonotonicObjectIdentifier.h: Copied from Source/WebKit/Shared/TransactionID.h.
        (WebKit::MonotonicObjectIdentifier::MonotonicObjectIdentifier):
        (WebKit::MonotonicObjectIdentifier::isHashTableDeletedValue const):
        (WebKit::MonotonicObjectIdentifier::encode const):
        (WebKit::MonotonicObjectIdentifier::decode):
        (WebKit::MonotonicObjectIdentifier::operator== const):
        (WebKit::MonotonicObjectIdentifier::operator> const):
        (WebKit::MonotonicObjectIdentifier::operator>= const):
        (WebKit::MonotonicObjectIdentifier::operator< const):
        (WebKit::MonotonicObjectIdentifier::operator<= const):
        (WebKit::MonotonicObjectIdentifier::operator!= const):
        (WebKit::MonotonicObjectIdentifier::increment):
        (WebKit::MonotonicObjectIdentifier::next const):
        (WebKit::MonotonicObjectIdentifier::toUInt64 const):
        (WebKit::MonotonicObjectIdentifier::operator bool const):
        (WebKit::MonotonicObjectIdentifier::loggingString const):
        (WebKit::MonotonicObjectIdentifier::hashTableDeletedValue):
        (WebKit::MonotonicObjectIdentifier::isValidIdentifier):
        (WebKit::operator<<):
        * Shared/RenderingUpdateID.h: Added.
        * Shared/TransactionID.h:
        (WebKit::MonotonicObjectIdentifier::MonotonicObjectIdentifier): Deleted.
        (WebKit::MonotonicObjectIdentifier::isHashTableDeletedValue const): Deleted.
        (WebKit::MonotonicObjectIdentifier::encode const): Deleted.
        (WebKit::MonotonicObjectIdentifier::decode): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator== const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator> const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator>= const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator< const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator<= const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator!= const): Deleted.
        (WebKit::MonotonicObjectIdentifier::increment): Deleted.
        (WebKit::MonotonicObjectIdentifier::next const): Deleted.
        (WebKit::MonotonicObjectIdentifier::toUInt64 const): Deleted.
        (WebKit::MonotonicObjectIdentifier::operator bool const): Deleted.
        (WebKit::MonotonicObjectIdentifier::loggingString const): Deleted.
        (WebKit::MonotonicObjectIdentifier::hashTableDeletedValue): Deleted.
        (WebKit::MonotonicObjectIdentifier::isValidIdentifier): Deleted.
        (WebKit::operator<<): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
        (WebKit::RemoteRenderingBackendProxy::finalizeRenderingUpdate):
        (WebKit::RemoteRenderingBackendProxy::didFinalizeRenderingUpdate):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        (WebKit::RemoteRenderingBackendProxy::renderingUpdateID const):
        (WebKit::RemoteRenderingBackendProxy::delayedRenderingUpdateCount const):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::cacheFont):
        (WebKit::RemoteResourceCacheProxy::prepareForNextRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::clearFontMap):
        (WebKit::RemoteResourceCacheProxy::finalizeRenderingUpdateForFonts):
        (WebKit::RemoteResourceCacheProxy::finalizeRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::didFinalizeRenderingUpdate): Deleted.
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::canTriggerRenderingUpdate const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canTriggerRenderingUpdate const):
        (WebKit::WebPage::finalizeRenderingUpdate):
        * WebProcess/WebPage/WebPage.h:

2021-07-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS Monterey] Pressing Fn+E should present the emoji picker when editing
        https://bugs.webkit.org/show_bug.cgi?id=228300
        rdar://77558672

        Reviewed by Tim Horton.

        In macOS Monterey, the system-wide Fn+E key command presents the Emoji & Symbols UI as a popover. However, this
        new key command currently does not work in editable contexts in both WebKit1 and WebKit2 views on macOS, where
        we end up just inserting the character "e".

        This is because, on both ports, we attempt to interpret NSEvents by calling back into AppKit to handle the
        event, recording the selectors that *would've* been performed, and then using this information to build up a
        list of WebCore::KeyCommand for the event (which are later converted into editing commands). In WebKit2, we
        call into `-[NSTextInputContext handleEventByKeyboardLayout:]` to handle the event, and capture the resulting
        calls back into `WKWebView` by storing entries in `m_collectedKeypressCommands` (something similar happens in
        WebKit1). In the case of these new Fn commands, they are handled by the system before entering
        NSTextInputContext, so NSTextInputContext ends up handling them as regular text insertion.

        As an aside, the reason the meta (⌘) key doesn't encounter this problem is because meta, option, control and
        shift are considered valid key bindings in NSKeyBindingManager, whereas the function key mask is specifically
        excluded from this list for compability reasons. NSTextInputContext consults NSKeyBindingManager in order to
        check whether the given NSEvent is a known key binding in `-handleEventByKeyboardLayout:`, so it fails to
        acknowledge Fn+E as a key binding.

        To work around this, we adopt new AppKit SPI added in rdar://81123724 to determine whether an NSEvent maps to
        any main menu items and avoid handling "Fn-*" key events as text insertion if they already map to items in the
        main menu.

        Test: KeyboardEventTests.FunctionKeyCommand

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

2021-07-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Add resource use counter infrastructure to RemoteResourceCache
        https://bugs.webkit.org/show_bug.cgi?id=228222

        Reviewed by Said Abou-Hallawa.

        This patch adds the infrastructure for associating a counter with each resource in the RemoteResourceCache.
        As the web process uses a resource during display list recording, it increments a counter, and as the GPU
        process uses a resource, it increments a counter in the RemoteResourceCache. When the web process is done
        with a resource, it sends a release message to the GPU process which crucially includes the web process's
        counter. The GPU process has to then wait to actually delete the resource until its own use counter matches
        the one it received from the web process. This patch implements this deferred deletion infrastructure
        in the GPU process.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::recordResourceUse):
        (WebKit::RemoteRenderingBackend::releaseRemoteResource): Pass the use count to the RemoteResourceCache.
        * GPUProcess/graphics/RemoteRenderingBackend.h: Add the use count field.
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in: Ditto.
        * GPUProcess/graphics/RemoteResourceCache.cpp:
        (WebKit::RemoteResourceCache::cacheImageBuffer): It's actually okay if there's already an resource cached.
        That just means that the web process started using a resource again before the GPU process consumed all
        commands that used it the first time. All we need to do is increment the open count.
        (WebKit::RemoteResourceCache::cacheNativeImage): Ditto.
        (WebKit::RemoteResourceCache::cacheFont): Ditto.
        (WebKit::RemoteResourceCache::ensureResourceUseCounter):
        (WebKit::RemoteResourceCache::maybeRemoveResource): This is called whenever it's possible for us to be in
        situation where we should be removing a resource (aka whenever the use count increments). It checks to see
        if we can remove the resource, and if it can, does so.
        (WebKit::RemoteResourceCache::recordResourceUse): The callback that runs for each resource use during
        replaying. It can't actually delete any resources, so instead it just records which resources had their
        use counts incremented, and waits for prune() to actually call maybeRemoveResource().
        (WebKit::RemoteResourceCache::prune): After the replay is complete, call maybeRemoveResource() on all the
        resources which had their use counters touched.
        (WebKit::RemoteResourceCache::releaseRemoteResource): Put the relevant resource into the state where we
        are waiting for the use counters to match before we can delete the resource. Also, call maybeRemoveResource()
        so it can be deleted immediately if the counters already match.
        * GPUProcess/graphics/RemoteResourceCache.h: Add a new data structure to hold the use counters. There's
        a big comment in here that describes what these fields mean.
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::~RemoteImageBufferProxy): Send a dummy use count for now. This will be
        implemented in a follow-up patch.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::releaseRemoteResource): Add the useCount parameter.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h: Ditto.
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::releaseNativeImage): Send a dummy use count for now. This will be
        implemented in a follow-up patch.
        (WebKit::RemoteResourceCacheProxy::clearFontMap): Ditto.
        (WebKit::RemoteResourceCacheProxy::finalizeRenderingUpdateForFonts): Ditto.

2021-07-26  Jer Noble  <jer.noble@apple.com>

        REGRESSION: [iOS] ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener()
        https://bugs.webkit.org/show_bug.cgi?id=228038
        <rdar://problem/80705471>

        Reviewed by Chris Dumez.

        Remove RemoteAudioHardwareListener from the GPUProcessConnection messageMap when the connection closes.

        * WebProcess/GPU/media/RemoteAudioHardwareListener.cpp:
        (WebKit::RemoteAudioHardwareListener::gpuProcessConnectionDidClose):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [Cocoa] WebKit is making GroupActivities API calls for all WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=228299
        <rdar://80802982>

        Reviewed by Eric Carlson.

        Tie registering for GroupActivities notifications to the MediaSessionCoordinatorEnabled
        WebPreference, and make the default value for that preference depend on having the 
        "com.apple.developer.group-session.urlactivity" entitlement. All WebKit clients with
        that entitlement will have the preference enabled by default; all other clients will
        have that preference disabled by default.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultMediaSessionCoordinatorEnabled):
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::didCommitLoadForFrame):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        REGRESSION: [iOS] ASSERTION FAILED: !m_useCount in WebKit::SandboxExtension::~SandboxExtension()
        https://bugs.webkit.org/show_bug.cgi?id=228171
        <rdar://problem/80926509>

        Reviewed by Eric Carlson.

        SandboxExtension expects to be revoked before it is destroyed, something that is done by
        RemoteMediaPlayerProxy::invalidate(). However, invalidate() won't be called if the 
        RemoteMediaPlayerManagerProxy is destroyed before all its proxies are invalidated.

        Ensure every RemoteMediaPlayerProxy contained by the RemoteMediaPlayerManagerProxy is
        invalidated in RemoteMediaPlayerManagerProxy's destructor.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::~RemoteMediaPlayerManagerProxy):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:

2021-07-26  Alex Christensen  <achristensen@webkit.org>

        WKUserContentController.removeAllScriptMessageHandlers() doesn't release the message handlers
        https://bugs.webkit.org/show_bug.cgi?id=228271

        Reviewed by Sihui Liu.

        Covered by an API test.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):

2021-07-26  Per Arne  <pvollan@apple.com>

        The layout test fast/images/heic-as-background-image.html is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=228195
        <rdar://80334724>

        Reviewed by Said Abou-Hallawa.

        Call correct system function for required initialization.

        No new tests, covered by existing test.

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

2021-07-26  Kate Cheney  <katherine_cheney@apple.com>

        Attribution context causes some performance regressions
        https://bugs.webkit.org/show_bug.cgi?id=228294

        Unreviewed followup to address Darin's comment regarding unnecessary
        semi-colons.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (processPCMRequest):
        (overrideAttributionContext):

2021-07-26  Kate Cheney  <katherine_cheney@apple.com>

        Attribution context causes some performance regressions
        https://bugs.webkit.org/show_bug.cgi?id=228294
        <rdar://problem/76663528>

        Reviewed by Per Arne Vollan.

        Attribution context is used by the networking stack for a variety of
        purposes, but is not always needed and can negatively affect
        performance. For these reasons, we should override it in some cases.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (overrideAttributionContext):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Playback stalls on bilibili.com
        https://bugs.webkit.org/show_bug.cgi?id=228239
        <rdar://80419477>

        Reviewed by Eric Carlson.

        Replace rate() -> effectiveRate().

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRateChanged):

2021-07-26  Chris Dumez  <cdumez@apple.com>

        Make sure the ProcessAssertion gets destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=228281
        <rdar://81048308>

        Reviewed by Geoffrey Garen.

        Follow-up to r279877 to make sure that the ProcessAssertion gets destroyed on the main thread in
        ProcessAssertion::acquireAsync(), even if the completionHandler is null.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::acquireAsync):

2021-07-26  Jer Noble  <jer.noble@apple.com>

        [iOS] All home screen web apps resume when any home screen web app is foregrounded
        https://bugs.webkit.org/show_bug.cgi?id=228246
        <rdar://72949281>

        Reviewed by Eric Carlson.

        Add a private WKPreference for setting the new WebPreference.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _requiresPageVisibilityToPlayAudio]):
        (-[WKPreferences _setRequiresPageVisibilityToPlayAudio:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2021-07-26  Philippe Normand  <pnormand@igalia.com>

        [GTK] MiniBrowser crashes when closed while capturing desktop
        https://bugs.webkit.org/show_bug.cgi?id=228232

        Reviewed by Adrian Perez de Castro.

        Disconnect the WebView from the WebPageProxy just before the final GObject dispose call, in
        order to avoid UIClient notifications on the being-disposed WebView.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        (detachUIClientFromView):
        * UIProcess/API/glib/WebKitUIClient.h:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewDispose):

2021-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unified field is unselected after focusing URL bar if text was selected in a fixed position container
        https://bugs.webkit.org/show_bug.cgi?id=228269
        rdar://80556392

        Reviewed by Tim Horton.

        In Safari on iOS 15, if the selection (either ranged or caret) is inside a fixed position container when the
        user taps on the unified field, we'll immediately clear the text selection inside the unified field upon
        bringing up the keyboard. This happens because the tab pill in iOS 15 is lowered as the URL bar is focused,
        which causes the web view to scroll slightly. This, in turn, induces a brief unstable scrolling tree state,
        which then causes us to temporarily hide and show selection views while scrolling in unstable state (see
        r209931) by calling `-deactivateSelection` and then `-activateSelection` on the text interaction assistant.
        Calling `-[UIWKTextInteractionAssistant activateSelection]` then causes UIKit to dispatch a
        UITextSelectionViewActivatedNotification; In the unified field, which is a UITextField subclass, UIKit code then
        listens for this notification and responds to it by clearing the selection if the newly activated selection's
        host view (WKContentView) is different than itself, thereby causing the bug.

        To fix this, we simply make two (minor) adjustments to the logic for temporarily hiding and showing the
        selection while performing an unstable scroll. See below for more details.

        Test: editing/selection/ios/scrolling-with-fixed-selection-does-not-unselect-native-text-field.html

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

        Only hide and (later) restore the selection in non-editable text if the selection is ranged. This is because
        caret selections in non-editable content are not user-visible anyways, so there's no need to temporarily
        suppress the selection.

        (-[WKContentView _updateChangedSelection:]):

        Only attempt to show the selection views again if doing so doesn't cause us to steal first responder status away
        from the existing first responder; otherwise, we'll wait until we `-becomeFirstResponder` to `-activateSelection`.

        (-[WKContentView selectionInteractionAssistant]): Deleted.

2021-07-24  Devin Rousso  <drousso@apple.com>

        [Apple Pay] Do not add coupon code `ApplePayErrorCode` values for systems that do not support it
        https://bugs.webkit.org/show_bug.cgi?id=228243

        Reviewed by Wenson Hsieh.

        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::toPKPaymentErrorCode):

2021-07-24  Devin Rousso  <drousso@apple.com>

        [iOS] REGRESSION(r277505): `-[WKWebView underPageBackgroundColor]` also changes the scroll bar color
        https://bugs.webkit.org/show_bug.cgi?id=228259
        <rdar://problem/80116822>

        Reviewed by Tim Horton.

        If an application overrides the `-underPageBackgroundColor` with a dark color on a page that
        has a light background color, the scroll bar will appear light to match the overridden value
        of `-underPageBackgroundColor` instead of dark to match the page's background color.

        Test: WKWebViewUnderPageBackgroundColor.MatchesScrollView

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (baseScrollViewBackgroundColor):
        (scrollViewBackgroundColor):
        (-[WKWebView _updateScrollViewBackground]):
        Add a flag to indicate whether the `underPageBackgroundColor` (which can be overridden by
        API) or `pageExtendedBackgroundColor` should be used when calculating the value provided to
        `-[UIScrollView setBackgroundColor:]` and `-[UIScrollView setIndicatorStyle:]`. The former
        uses the `underPageBackgroundColor` since that is why that API exists and the latter uses
        the ``pageExtendedBackgroundColor` since it is based on what is shown in the page, which is
        what the scroll bar is drawn on top of.

2021-07-23  Alex Christensen  <achristensen@webkit.org>

        Make WKContentRuleListStore respond to same selectors as _WKUserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=228253
        <rdar://81038849>

        Reviewed by Brian Weinstein.

        We have an unfortunate situation where an old framework is calling code in a new framework that is giving it a WKContentRuleListStore
        where it expects a _WKUserContentExtensionStore.  As one of several mitigations for this problem, make the selectors able to be called.
        Luckily it doesn't do much with the results.  It just checks if they're null or not, and it passes any errors along.  I added tests that do this.

        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (-[WKContentRuleListStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[WKContentRuleListStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[WKContentRuleListStore removeContentExtensionForIdentifier:completionHandler:]):

2021-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r279751): WebContent process often crashes when hovering over content on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=228247
        rdar://81010093

        Reviewed by Tim Horton.

        After r279751, the snapshot fallback codepath I added in `createShareableBitmap` to handle the edge case of
        fully transparent images causes us to now take snapshots when hovering over fully transparent video elements,
        and attempt to recognize text in them. This is because RenderVideo is a RenderImage subclass without a cached
        image, so we'll end up going down the transparent renderer codepath instead of bailing with a null bitmap.

        However, since CachedImages are null for video elements, before we even get to VisionKit, we end up crashing
        with a nullptr-deref inside `WebPage::requestTextRecognition`, which assumes that `RenderImage::cachedImage()`
        is non-null.

        To address this, we make two minor adjustments (see below).

        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):

        Limit the snapshotting fallback to non-media images (i.e. non-RenderMedia).

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

        Make this robust in the case where CachedImage is null, to avoid the possibility for similar crashes in the
        future.

2021-07-23  Robert Jenner  <Jenner@apple.com>

        Unreviewed, reverting r280205.

        Broke multiple WebAuthn tests.

        Reverted changeset:

        "REGRESSION (r278877) [Cocoa] WebAuthn stopped working for
        non-Safari browsers"
        https://bugs.webkit.org/show_bug.cgi?id=228116
        https://commits.webkit.org/r280205

2021-07-23  Per Arne  <pvollan@apple.com>

        [macOS] Reduce sandbox logging
        https://bugs.webkit.org/show_bug.cgi?id=228236

        Reviewed by Tim Horton.

        To improve performance, remove some sandbox logging in the WebContent process' sandbox.

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

2021-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] It should be possible to select contact AutoFill text suggestions in email and username fields
        https://bugs.webkit.org/show_bug.cgi?id=228237
        rdar://77299680

        Reviewed by Tim Horton.

        After the changes in r278957, WKTextInputListViewController now presents modern Quickboard text input UI, as
        well as contact AutoFill suggestions provided by Safari. For email and username fields (for which we currently
        use PUICQuickboardController), this means that there's no longer any reason to prefer showing
        PUICQuickboardController over WKTextInputListViewController, since both use modern text input UI (with support
        for keychain AutoFill suggestions), but only the latter additionally supports contact AutoFill suggestions.

        As such, we should change these to use WKTextInputListViewController instead of PUICQuickboardController. Note
        that because contact AutoFill suggestions do not encompass passwords, it still makes more sense to pop directly
        into PUICQuickboardController for password fields.

        * Platform/spi/watchos/PepperUICoreSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView createQuickboardTextInputContext]):

        Drive-by fix: additionally populate the placeholder of the text field in WKTextInputListViewController with
        the input label text of the focused element (i.e., either placeholder text, the ARIA label, title, or text
        content of an associated label).

        (canUseQuickboardControllerFor):

2021-07-23  Richard Houle  <rhoule@apple.com>

        WebSocket traffic should be correctly assigned to either Developer or User.
        https://bugs.webkit.org/show_bug.cgi?id=227564
        <rdar://problem/79307301>

        Reviewed by Kate Cheney.

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

2021-07-23  Sihui Liu  <sihui_liu@apple.com>

        Generate simulated crash when UI process fails to get network process connection
        https://bugs.webkit.org/show_bug.cgi?id=228203

        Reviewed by Geoffrey Garen.

        To help diagnose the issue that web process sometimes fails to get connection to the network process 
        (rdar://80760179), as UI process should have more information about it than web process.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):

2021-07-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Migrate the DisplayList::Replayer::Delegate from RemoteImageBuffer to RemoteRenderingBackend
        https://bugs.webkit.org/show_bug.cgi?id=228219

        Reviewed by Wenson Hsieh.

        This is part 1 of https://bugs.webkit.org/show_bug.cgi?id=228216.

        For this task, we need to count resource uses:
        1. As the recorder in the web process records DisplayList items which reference resources, those uses need to increment a counter.
        2. As the replayer in the GPU process replays DisplayList items which reference resources, those uses need to increment a parallel counter.

        The most natural place for the counters to live is in RemoteResourceCacheProxy and RemoteResourceCache, respectively. These two classes
        are accessible from the RemoteRenderingBackendProxy and RemoteRenderingBackend, respectively. The most natural interface between the
        DisplayList classes like DisplayList::Recorder and DisplayList::Replayer and the higher level WebKit classes is to use their delegate
        interfaces.

        For 1 above, RemoteImageBufferProxy has access to the RemoteRenderingBackendProxy and is already a DisplayList::Recorder::Delegate, so
        there's no problem there. However, for 2, messages are delivered first to the RemoteRenderingBackend, which is the place that has access to
        the RemoteResourceCache. Making the RemoteRenderingBackend have the DisplayList::Replayer::Delegate would be a natural place to either
        A) call the necessary function in the RemoteImageBuffer, or B) interact with the RemoteResourceCache to increment the necessary counter.

        Indeed, this makes a lot of sense because, for 2 of the 3 delegate methods, RemoteImageBuffer just immediately turns around and forwards
        the call to the RemoteRenderingBackend anyway. So, migrating this interface to RemoteRenderingBackend actually ends up making it a bit
        simpler.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::apply):
        (): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::ReplayerDelegate):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::apply):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::didCreateMaskImageBuffer):
        (WebKit::RemoteRenderingBackend::ReplayerDelegate::didResetMaskImageBuffer):
        (WebKit::RemoteRenderingBackend::submit):
        * GPUProcess/graphics/RemoteRenderingBackend.h:

2021-07-22  Devin Rousso  <drousso@apple.com>

        [Live Text] [iOS] Analysis should also search for any App Clip codes
        https://bugs.webkit.org/show_bug.cgi?id=228207

        Reviewed by Wenson Hsieh.

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

2021-07-22  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Unable to open arxiv links on Chrome
        https://bugs.webkit.org/show_bug.cgi?id=228205
        rdar://78225849

        Reviewed by Tim Horton.

        -[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:] currently
        expects the width to be specified in pixels. However, the PDFKit SPI
        used to snapshot a PDF expects a width in points. This led to WebKit
        requesting extremely large snapshots, resulting in a crash in PDFKit.

        To fix, use points instead of pixels in the PDF snapshotting path.
        Also, ensure the scale factor of the returned image matches the
        the scale used by PDFKit (the screen scale), as opposed to WebKit's
        own "page" device scale factor, which can be overridden.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * UIProcess/API/ios/WKWebViewIOS.mm:

2021-07-22  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r278877) [Cocoa] WebAuthn stopped working for non-Safari browsers 
        https://bugs.webkit.org/show_bug.cgi?id=228116
        <rdar://problem/80693607>

        Reviewed by Per Arne Vollan.

        We should not be using the PAC key to confirm a valid WebContent process is the source of
        WebAuthn-related messages. Instead, we should confirm the message source is an Apple-signed
        executable, and that the signining identity is for the WebContent process.

        * Shared/Cocoa/CodeSigning.h: Renamed from Source/WebKit/Shared/mac/CodeSigning.h.
        * Shared/Cocoa/CodeSigning.mm: Renamed from Source/WebKit/Shared/mac/CodeSigning.mm.
        (WebKit::codeSigningIdentifier):
        (WebKit::codeSigningIdentifierForCurrentProcess):
        (WebKit::codeSigningIdentifierAndPlatformBinaryStatus): Added.
        * Shared/Cocoa/XPCEndpoint.mm:
        (WebKit::XPCEndpoint::XPCEndpoint): Update to use new method.
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::messageSourceIsValidWebContentProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit:WebProcessProxy::getWebAuthnProcessConnection): Update for new message check name.
        * UIProcess/WebProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-07-22  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r277873, r280105): [macOS] Correct two sandbox typos (228201)
        https://bugs.webkit.org/show_bug.cgi?id=228201
        <rdar://problem/80983916>

        Reviewed by Per Arne Vollan.

        Correct two typos in the macOS Sandbox (WebContent process).

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

2021-07-22  Brady Eidson  <beidson@apple.com>

        Revert part of r279089 that was done a little bit too early.
        <rdar://80663503> and https://bugs.webkit.org/show_bug.cgi?id=228174

        Reviewed by Chris Dumez.

        * Configurations/WebKit.xcconfig:

2021-07-22  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r279992): Crashes under RemoteLayerBackingStore::applyBackingStoreToLayer() in macCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=228181
        rdar://80923581

        Reviewed by Dan Bates.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        r279992 reorganized this code to determine the contents object and then
        set it on the layer, instead of setting it directly; this means that the
        lifetime of the contents object must be extended.

        Interestingly, the common case (the CAMachPort case), as well as the
        case I was actually adding in r279992 both were safe, because of the use
        of autorelease. (macCatalyst uses IOSurface as layer contents directly,
        without CAMachPort, so uses the one path that r279992 broke).

        It is unnecessary to use autorelease; instead just store the contents
        object in a RetainPtr until it is set.

2021-07-22  Megan Gardner  <megan_gardner@apple.com>

        Avoid Quick Note overlay when scrolling to show a highlight
        https://bugs.webkit.org/show_bug.cgi?id=228172

        Reviewed by Wenson Hsieh and Tim Horton.

        When scrolling to show the selected highlight after clicking on one in the QuickNote overlay,
        make sure to avoid the Quick Note overlay, so that the user can actually see the highlight. 
        This required calculating more information about the selection rect for iOS, and also piping through
        information to have the selection rect be the entire rect, rather that just the caret and the end of selection.

        * Platform/spi/Cocoa/SynapseSPI.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView adjustScrollRect:]):
        (-[WKWebView _scrollToRect:origin:minimumScrollDistance:]):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::appHighlightsNoteOverlayRect):
        * UIProcess/WebPageProxy.h:

2021-07-22  Philippe Normand  <pnormand@igalia.com>

        [GLib] Expose API to access/modify capture devices states
        https://bugs.webkit.org/show_bug.cgi?id=227902

        Reviewed by Carlos Garcia Campos.

        Introduce new GLib API (and corresponding GObject properties):

        webkit_web_view_get_camera_capture_state
        webkit_web_view_get_microphone_capture_state
        webkit_web_view_set_camera_capture_state
        webkit_web_view_set_microphone_capture_state
        webkit_web_view_get_display_capture_state
        webkit_web_view_set_display_capture_state
        webkit_user_media_permission_is_for_display_device

        This can be useful in Web browsers willing to indicate the status of the capture devices
        currently in use by the WebView.

        Covered by API tests.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/glib/WebKitUserMediaPermissionRequest.cpp:
        (webkit_user_media_permission_is_for_display_device):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewMediaCaptureStateDidChange):
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkitWebViewConfigureMediaCapture):
        (webkit_web_view_get_camera_capture_state):
        (webkit_web_view_set_camera_capture_state):
        (webkit_web_view_get_microphone_capture_state):
        (webkit_web_view_set_microphone_capture_state):
        (webkit_web_view_get_display_capture_state):
        (webkit_web_view_set_display_capture_state):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitUserMediaPermissionRequest.h:
        * UIProcess/API/wpe/WebKitWebView.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2021-07-22  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Pass the full target point when selecting a snap offset
        https://bugs.webkit.org/show_bug.cgi?id=228023

        Reviewed by Frédéric Wang.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping):
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):

2021-07-21  Chris Dumez  <cdumez@apple.com>

        RunningBoard kills the network process if it is still holding the "holding locked file" assertion upon suspension
        https://bugs.webkit.org/show_bug.cgi?id=228148

        Reviewed by Sihui Liu.

        RunningBoard kills the network process if it is still holding the "holding locked file" assertion upon suspension
        because our assertion type is "uninterruptible" and we don't release it when it gets invalidated. To address the
        issue, we now use an "interruptible" assertion instead when holding locked files.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::setIsHoldingLockedFiles):
        * UIProcess/ProcessAssertion.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::assertionName const):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionType):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::runningBoardNameForAssertionType):
        (WebKit::runningBoardDomainForAssertionType):

2021-07-21  Alex Christensen  <achristensen@webkit.org>

        Add linkedOnOrAfter check for r269162
        https://bugs.webkit.org/show_bug.cgi?id=228154

        Reviewed by Geoffrey Garen.

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

2021-07-21  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r278916): Hitting ASSERT(!m_db.m_transactionInProgress) in SQLiteTransaction::begin()
        https://bugs.webkit.org/show_bug.cgi?id=228151
        <rdar://80231894>

        Reviewed by Geoffrey Garen.

        Because it is hard to keep track of whether or not a transaction has already been started in
        ResourceLoadStatisticsDatabaseStore code and because passing a transaction as parameter adds
        a lot of function overloads, I decided to switch to another approach. I added a
        beginTransactionIfNecessary() member function that begins a transaction if there isn't one
        already going on. This way, we can safely ask to begin a transaction within the scope of
        a function (if we're about to do several write statements), without having to worry about
        whether or not our caller already started a transaction.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships):
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::merge):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setGrandfathered):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setIsScheduledForAllButCookieDataRemoval):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubframeUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setVeryPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::beginTransactionIfNecessary):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

2021-07-21  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Allow the user to configure the MemoryPressureHandler inside the web process
        https://bugs.webkit.org/show_bug.cgi?id=222738

        Reviewed by Carlos Garcia Campos.

        Add a new API type WebKitMemoryPressureSettings that can be used to configure the behavior
        of the MemoryPressureHandler. Add a property to WebKitWebContext that can be used to pass
        new settings to it, and store them inside its API::ProcessPoolConfiguration. Those settings
        will be set to new web processes during the platform initialization stage.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/glib/WebKitMemoryPressureSettings.cpp: Added.
        (webkit_memory_pressure_settings_new):
        (webkit_memory_pressure_settings_copy):
        (webkit_memory_pressure_settings_free):
        (webkit_memory_pressure_settings_set_memory_limit):
        (webkit_memory_pressure_settings_get_memory_limit):
        (webkit_memory_pressure_settings_set_conservative_threshold):
        (webkit_memory_pressure_settings_get_conservative_threshold):
        (webkit_memory_pressure_settings_set_strict_threshold):
        (webkit_memory_pressure_settings_get_strict_threshold):
        (webkit_memory_pressure_settings_set_kill_threshold):
        (webkit_memory_pressure_settings_get_kill_threshold):
        (webkit_memory_pressure_settings_set_poll_interval):
        (webkit_memory_pressure_settings_get_poll_interval):
        (webkitMemoryPressureSettingsGetMemoryPressureHandlerConfiguration):
        * UIProcess/API/glib/WebKitMemoryPressureSettingsPrivate.h: Added.
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextSetProperty):
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):
        * UIProcess/API/gtk/WebKitAutocleanups.h:
        * UIProcess/API/gtk/WebKitMemoryPressureSettings.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/API/wpe/WebKitAutocleanups.h:
        * UIProcess/API/wpe/WebKitMemoryPressureSettings.h: Added.
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
        * UIProcess/API/wpe/webkit.h:
        * UIProcess/glib/WebProcessPoolGLib.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/glib/WebProcessGLib.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-07-21  Aditya Keerthi  <akeerthi@apple.com>

        Crash in -[WKWebView takeSnapshotWithConfiguration:completionHandler:] when taking empty snapshots
        https://bugs.webkit.org/show_bug.cgi?id=228134
        rdar://80146087

        Reviewed by Chris Dumez.

        r279006 made it so that taking empty snapshots would no longer crash due
        to division by zero, or assertions on the size of the returned image.

        However, the change introduced a new crash, as a result of a deallocated
        completionHandler. r279006 move-captured the completion handler. However,
        since completionHandler is an Objective-C block, and WebKit is built
        without ARC, the move does not retain the block. Consequently, the
        method can call a deallocated completion handler.

        To fix, capture the local handler variable already available in the
        method, which retains the completion handler using makeBlockPtr.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):

2021-07-21  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Theme scrollbar css is no longer respected
        https://bugs.webkit.org/show_bug.cgi?id=228145

        Reviewed by Michael Catanzaro.

        Fix a fontName -> themeName typo.

        * WebProcess/gtk/GtkSettingsManagerProxy.cpp:
        (WebKit::GtkSettingsManagerProxy::applySettings):

2021-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r267763): [SOUP] After network process crash, all cookies are lost until browser is restarted
        https://bugs.webkit.org/show_bug.cgi?id=228128

        Reviewed by Adrian Perez de Castro.

        Cookies configuration is no longer stored to be sent again to the new network process after a crash.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const): Encode cookieAcceptPolicy.
        (WebKit::NetworkSessionCreationParameters::decode): Decode cookieAcceptPolicy.
        * NetworkProcess/NetworkSessionCreationParameters.h: Add cookieAcceptPolicy.
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookie accept policy on NetworkStorageSession.
        * UIProcess/API/glib/WebKitCookieManager.cpp:
        (webkit_cookie_manager_set_persistent_storage): Use WebsiteDataStore API to cache the given values.
        (webkit_cookie_manager_set_accept_policy): Ditto.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters): Set cached cookie settings to network session parameters.
        (WebKit::WebsiteDataStore::setCookiePersistentStorage): Cache the given value and notify the cookie manager.
        (WebKit::WebsiteDataStore::setHTTPCookieAcceptPolicy): Ditto.
        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
        (WebKit::WebCookieManagerProxy::getCookiePersistentStorage const): Deleted.

2021-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add SPI for internal clients to consult whether or not viewport quirks should be enabled
        https://bugs.webkit.org/show_bug.cgi?id=228123
        rdar://80397679

        Reviewed by Dan Bernstein.

        Rename the SPI added in r280119 from `-_needsSiteSpecificQuirks` to `-_needsSiteSpecificViewportQuirks`, to
        clarify its intent (and importantly, to differentiate it from the existing WKPreferences SPI of the same name).

        This distinction is important because this readonly property acts as a hint for WebKit clients to augment
        certain viewport behaviors, whereas the readwrite WKPreferences property is a way for clients to indicate that
        WebKit should opt in or out of site-specific quirks (unless overridden by Web Inspector).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _needsSiteSpecificViewportQuirks]):
        (-[WKWebView _needsSiteSpecificQuirks]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessTermination):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:

2021-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add SPI for internal clients to consult whether or not viewport quirks should be enabled
        https://bugs.webkit.org/show_bug.cgi?id=228123
        rdar://80397679

        Reviewed by Tim Horton.

        Add support for an SPI property on WKWebView that indicates whether site-specific quirks should be enabled.
        For now, this flag is only updated whenever we commit a mainframe load, which is sufficient for the purposes of
        Safari to determine whether or not to use quirked viewport behaviors for tab pill behavior.

        If needed in the future, this property should probably:
        1. Support KVO, and...
        2. Change eagerly when the option is toggled via Web Inspector.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _needsSiteSpecificQuirks]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessTermination):

        Maintain a corresponding flag on the WebPageProxy in the UI process, which starts out as `true` and is reset
        if the web process terminates.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:

        Add plumbing to propagate changes in the boolean flag to the UI process.

        (WebKit::WebPage::didCommitLoad):

        Update the flag on WebPage.

        * WebProcess/WebPage/WebPage.h:

2021-07-20  Kyle Piddington  <kpiddington@apple.com>

        REGRESSION(ANGLE+METAL): WebGL2 content low frame rate
        https://bugs.webkit.org/show_bug.cgi?id=228012

        Reviewed by Dean Jackson.
        
        Add Additional rules, allowing shared events to work in Webkit

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

2021-07-20  Sihui Liu  <sihui_liu@apple.com>

        Completion handler of NetworkProcess::prepareToSuspend may not be invoked promptly
        https://bugs.webkit.org/show_bug.cgi?id=228119

        Reviewed by Chris Dumez.

        WebResourceLoadStatisticsStore and StorageManagerSet dispatch task to suspend background thread on suspension.
        When the task is finished on background thread, it dispatches a reply task to main thread. When all replies are
        received, network process replies prepareToSuspend message. With our current implementation, if network process
        receives messages in order { PrepareToSuspend, ProcessDidResume, PrepareToSuspend }, 
        WebResourceLoadStatisticsStore and StorageManagerSet may dispatch two suspend tasks to background thread and
        get suspended in the first task. In this case, the second PrepareToSuspend message will not be replied, and
        UI process will be waiting on reply for the latest PrepareToSuspend message to release assertion. To solve this,
        background thread should only execute latest suspend task by checking task identifier.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WTF_GUARDED_BY_LOCK):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::suspend):
        (WebKit::WebResourceLoadStatisticsStore::resume):
        (): Deleted.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::suspendIDBServers):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::suspend):
        (WebKit::StorageManagerSet::resume):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        (WebKit::StorageManagerSet::WTF_GUARDED_BY_LOCK):
        (): Deleted.

2021-07-20  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Silence telemetry on MSC_mach_wait_until
        https://bugs.webkit.org/show_bug.cgi?id=228112
        <rdar://problem/78965631>

        Reviewed by Per Arne Vollan.

        We are processing a lot of telemetry for MSC_mach_wait_until in cases where a block with failure is the correct behavior.
        Silencing the warning to reduce CPU and network traffic related to generating and de-duping telemetry on this call.

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

2021-07-20  Kate Cheney  <katherine_cheney@apple.com>

        IBeam cursor is horizontal in Mail compose window
        https://bugs.webkit.org/show_bug.cgi?id=228107
        <rdar://problem/80636912>

        Reviewed by Wenson Hsieh.

        Recently we added support for vertical writing mode for the IBeam
        cursor in WebKit. This added a new parameter isHorizontalWritingMode
        which defaults to false. This causes the IBeam to appear horizontal in
        cases where WebPage::populateCaretContext is not called, regressing expected
        behavior. 

        This patch changes isHorizontalWritingMode to isVerticalWritingMode
        to fix this, while still allowing support for vertical writing mode.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointerInteraction:styleForRegion:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::populateCaretContext):

2021-07-20  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Propagate GtkSettings to web process
        https://bugs.webkit.org/show_bug.cgi?id=227854

        Reviewed by Carlos Garcia Campos.

        There's a number of properties in GtkSettings that web process uses:

        - gtk-cursor-blink
        - gtk-cursor-blink-time
        - gtk-font-name
        - gtk-primary-button-warps-slider
        - gtk-theme-name
        - gtk-xft-antialias
        - gtk-xft-dpi
        - gtk-xft-hinting
        - gtk-xft-hintstyle
        - gtk-xft-rgba

        While we do propagate gtk-theme-name, we don't do it for any of the other settings.
        This means that they can only be fetched from XSettings/GSettings/settings portal
        by GTK itself, but if the app changes them or if they are changed from inspector,
        web processes won't see that.

        Introduce GtkSettingsManager as a specific place that listens to preferences
        changes and notifies the web process, where GtkSettingsManagerProxy updates
        GtkSettings on that side. Keep the dark mode preference separate since there's
        existing cross-platform infrastructure for it.

        Apply settings after reinitializing as well, it was only done after initialization
        so failed with PSON.

        * PlatformGTK.cmake:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/gtk/GtkSettingsState.cpp: Added.
        (WebKit::GtkSettingsState::encode const):
        (WebKit::GtkSettingsState::decode):
        * Shared/gtk/GtkSettingsState.h: Added.
        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        * SourcesGTK.txt:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetToplevelOnScreenWindow):
        (webkitWebViewBaseRoot):
        (webkitWebViewBaseUnroot):
        (webkitWebViewBaseConstructed):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/GtkSettingsManager.cpp: Added.
        (WebKit::GtkSettingsManager::singleton):
        (WebKit::GtkSettingsManager::themeName const):
        (WebKit::GtkSettingsManager::fontName const):
        (WebKit::GtkSettingsManager::xftAntialias const):
        (WebKit::GtkSettingsManager::xftHinting const):
        (WebKit::GtkSettingsManager::xftHintStyle const):
        (WebKit::GtkSettingsManager::xftRGBA const):
        (WebKit::GtkSettingsManager::xftDPI const):
        (WebKit::GtkSettingsManager::cursorBlink const):
        (WebKit::GtkSettingsManager::cursorBlinkTime const):
        (WebKit::GtkSettingsManager::primaryButtonWarpsSlider const):
        (WebKit::GtkSettingsManager::settingsDidChange):
        (WebKit::GtkSettingsManager::GtkSettingsManager):
        * UIProcess/gtk/GtkSettingsManager.h: Added.
        (WebKit::GtkSettingsManager::settingsState const):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        (WebKit::WebPage::reinitializeWebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/gtk/GtkSettingsManagerProxy.cpp: Added.
        (WebKit::GtkSettingsManagerProxy::singleton):
        (WebKit::GtkSettingsManagerProxy::GtkSettingsManagerProxy):
        (WebKit::GtkSettingsManagerProxy::settingsDidChange):
        (WebKit::GtkSettingsManagerProxy::applySettings):
        * WebProcess/gtk/GtkSettingsManagerProxy.h: Added.
        * WebProcess/gtk/GtkSettingsManagerProxy.messages.in: Added.

2021-07-20  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK][WPE] Fix compilation when ATK is not used
        https://bugs.webkit.org/show_bug.cgi?id=228077

        Reviewed by Carlos Garcia Campos.

        Guard ATK only inside implementations, so the code is more readable.

        Also changed guard from ATK to GTK platform showEmojiPicker().

        No new tests needed.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/wpe/WebPageProxyWPE.cpp:
        (WebKit::WebPageProxy::bindAccessibilityTree):

2021-07-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Tapping images on twitter.com should not toggle tab bar visibility
        https://bugs.webkit.org/show_bug.cgi?id=228086
        rdar://79667219

        Reviewed by Geoffrey Garen.

        Treat taps over elements that are explicitly marked draggable and also respond to click events as "meaningful"
        with respect to the private UIDelegate method `-_webView:didTapAtPoint:withResult:`. In doing this, we use the
        combination of responding to drags and clicks as a proxy for content that probably results in some meaningful
        interaction when tapped.

        Test: fast/events/ios/meaningful-click-when-tapping-draggable-content.html

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

2021-07-19  Sihui Liu  <sihui_liu@apple.com>

        Implement IDBTransaction.commit()
        https://bugs.webkit.org/show_bug.cgi?id=227815
        <rdar://problem/80651270>

        Reviewed by Brady Eidson.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::commitTransaction):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::commitTransaction):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2021-07-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Revert a debug assertion that was added in r280019
        https://bugs.webkit.org/show_bug.cgi?id=228051

        Reviewed by Tim Horton.

        Several existing (non-accessibility-related) editing tests appear to hit this debug assertion that was added in
        r280019, which indicates that it's currently possible to call `-selectionDidChange:` without a balanced call to
        `-selectionWillChange:`, even before the changes in r280019.

        For the time being, replace this assertion with a FIXME referencing a followup bug to investigate why this is
        the case: https://webkit.org/b/228083. Thankfully, since the decrementing of `_selectionChangeNestingLevel` is
        idempotent once the level reaches 0, no other changes are needed to ensure that we don't end up with underflow
        in `_selectionChangeNestingLevel`.

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

2021-07-19  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Inspector: Service workers can't be inspected in Safari Technology Preview
        https://bugs.webkit.org/show_bug.cgi?id=228001

        Reviewed by Per Arne Vollan.

        For inspecting targets in the WebProcess, like Service Workers, we read the `ShowDevelopMenu` default on Cocoa
        platforms to determine if remote inspection should be allowed, but the sandbox broker bundle identifier used to
        read that preference is different for Safari Technology Preview. We need to read the preference with the
        appropriate sandbox broker bundle identifier when the host application is Safari Technology Preview.

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

2021-07-19  Patrick Angle  <pangle@apple.com>

        [Cocoa] Web Inspector: REGRESSION(r271294) Service workers on iOS can't be inspected
        https://bugs.webkit.org/show_bug.cgi?id=227971

        Reviewed by Per Arne Vollan.

        r271294 fixed inspecting Service Workers on macOS, but in the process broke inspecting Service Workers on iOS.
        For iOS, previously a flag was set to mark RemoteInspector as needing to wait for a Sandbox Extension handle,
        but after r271294 this flag will no longer be cleared properly, as the handle is acquired and consumed prior to
        the point in initialization that iOS was special cased to wait for the handle. To resolve this, we now set the
        flag once based on whether we were able to acquire a handle, which due to the changes in r270326 will already
        have been done by the time we are initializing a WebProcess.

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

2021-07-19  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::nameForBackingStoreType):

2021-07-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [AX] Keyboard text candidates don't update when changing selection using Switch Control
        https://bugs.webkit.org/show_bug.cgi?id=228051
        rdar://79944295

        Reviewed by Tim Horton.

        Add support for updating text candidates by calling into UIKeyboardImpl when changing the selection via
        accessibility UI (e.g. when using Switch Control). To achieve this, we add a new EditorState flag that indicates
        whether or not the EditorState change was triggered by accessibility; in WKContentView, we then consult this
        flag and call `-beginSelectionChange/-endSelectionChange` in the case where the updated editor state change was
        triggered by accessibility and we're also not already in the scope of another selection change or gesture-based
        selection change.

        Note that the latter part of the check is critical in order to avoid deadlocks in UIKeyboardTaskQueue; see
        r246013, r246425 and r246665, which introduced and later reverted a similar mechanism for updating
        UIKeyboardImpl, but after every selection change.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        (WebKit::operator<<):
        * Shared/EditorState.h:

        Add the new boolean flag, `triggeredByAccessibilitySelectionChange`.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView beginSelectionChange]):
        (-[WKContentView endSelectionChange]):

        Add a new `unsigned` flag, `_selectionChangeNestingLevel`, that lets us know if we're expecting an eventual call
        to `-endSelectionChange`. See `-_selectionChanged` below for more details. Note that we don't need to reset
        `_selectionChangeNestingLevel` to 0 when cleaning up the interaction after web process termination, because
        the completion handlers that contain all the balanced calls to `-endSelectionChange` should be invoked after
        such an event anyways.

        (-[WKContentView _selectionChanged]):

        If the `triggeredByAccessibilitySelectionChange` bit is set on the incoming (post layout data) EditorState and:
        (1) UIKit isn't in the middle of handling a gesture that modifies the selection, and...
        (2) We aren't expecting a call to `-endSelectionChange`.

        ...then we force UIKeyboardImpl to reload its UI (text suggestions, B/I/U state, etc.) using the incoming
        EditorState. This allows accessibility-driven selection changes using Switch Control to behave like gesture-
        based selection changes.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::willChangeSelectionForAccessibility):
        (WebKit::WebEditorClient::didChangeSelectionForAccessibility):

        Implement a couple of client hooks in WebKit2 so that we set a boolean flag on WebPage,
        `m_isChangingSelectionForAccessibility`, to `true` over the scope of an AX-driven selection change. See related
        AX changes in WebCore for more details.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasPendingEditorStateUpdate const):

        Add a helper method so that we can conveniently check whether we have a pending editor state update to flush,
        since the previous boolean flag is now a tri-state enum (`m_pendingEditorStateUpdateStatus`).

        (WebKit::WebPage::editorState const):
        (WebKit::WebPage::willCommitLayerTree):
        (WebKit::WebPage::sendEditorStateUpdate):
        (WebKit::WebPage::scheduleFullEditorStateUpdate):

        If we're in the scope of an accessibility selection change, transition `m_pendingEditorStateUpdateStatus` to
        `ScheduledDuringAccessibilitySelectionChange`; otherwise, just use `Scheduled`.

        (WebKit::WebPage::flushPendingEditorStateUpdate):

        Refactor `m_hasPendingEditorStateUpdate` so that it now captures three states:
        (1) We haven't scheduled an editor state update yet.
        (2) We've scheduled an editor state update that was not triggered by accessibility.
        (3) We've scheduled an editor state update that was triggered by accessibility.

        The distinction between (2) and (3) allows us to populate EditorState's new
        `triggeredByAccessibilitySelectionChange` flag.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::willChangeSelectionForAccessibility):
        (WebKit::WebPage::didChangeSelectionForAccessibility):

2021-07-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebView javascript injection doesn't work if app includes WKAppBoundDomains
        https://bugs.webkit.org/show_bug.cgi?id=227589
        <rdar://problem/80327452>

        Reviewed by Brent Fulgham.

        Apps should not have to specify localhost in their Info.plist in order
        to load local content in app-bound mode. This patch adds a check for
        localhost or a loopback IP address and forces an app into app-bound
        mode in this case.

        Since all layout tests use localhost and 127.0.0.1 as test domains,
        this patch also adds a check for enableInAppBrowserPrivacyForTesting()
        which determines if we are running layout tests and does not trigger
        this check in that case so we can test other behavior.

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

2021-07-16  Alex Christensen  <achristensen@webkit.org>

        Prevent HSTS tracking mitigation for top level navigation requests
        https://bugs.webkit.org/show_bug.cgi?id=227936

        Reviewed by Brady Eidson.

        Use NSURLRequest.URL as the first party for cookies for HSTS purposes during redirects instead of NSURLRequest.mainDocumentURL,
        which hasn't been updated because CFNetwork doesn't know that this is the main document request and when redirected, the main document URL also changes.

        Covered by API tests, which will start covering this case once rdar://80550123 is integrated.

        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration allowsHSTSWithUntrustedRootCertificate]):
        (-[_WKWebsiteDataStoreConfiguration setAllowsHSTSWithUntrustedRootCertificate:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::allowsHSTSWithUntrustedRootCertificate const):
        (WebKit::WebsiteDataStoreConfiguration::setAllowsHSTSWithUntrustedRootCertificate):

2021-07-16  Alex Christensen  <achristensen@webkit.org>

        Network access prevention SPI should prevent preconnecting, and it should first allow injected bundle to change request
        https://bugs.webkit.org/show_bug.cgi?id=228044
        <rdar://72995136>

        Reviewed by Tim Horton.

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

2021-07-16  John Wilander  <wilander@apple.com>

        PCM: Add early return when unlinkable token is used and add more happy path Web Inspector logging
        https://bugs.webkit.org/show_bug.cgi?id=228039
        <rdar://problem/80705989>

        Reviewed by Kate Cheney.

        There's a missing return after an accepted unlinkable token transaction. The
        attribution object is therefore moved and stored twice.

        This patch also adds more Web Inspector logging to the happy path for better
        developer feedback.

        No new tests.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
            Add the missing return.
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
            Add Web Inspector logging.
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
            Add Web Inspector logging.
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
            Add Web Inspector logging.

2021-07-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r277820): Can't scroll up and down using trackpad in Mail message viewer when in Slide Over
        https://bugs.webkit.org/show_bug.cgi?id=228033
        rdar://80663917

        Reviewed by Tim Horton.

        This started happening after the changes in r277820, since UIHoverGestureRecognizer contained several internal
        facilities in UIKit for avoiding failure dependencies to other (non-hover) gestures. After removing the
        subclass, various UIKit gestures now attempt to add failure requirements to WKMouseGestureRecognizer, thereby
        linking WKMouseGestureRecognizer to other gestures in the gesture dependency graph.

        This means that all gestures connected to the same subgraph as WKMouseGestureRecognizer are unable to be reset
        until WKMouseGestureRecognizer transitions to either Ended or Failed state; however, since this only happens
        once the trackpad goes into idle state, these subgraph-connected gestures can effectively only recognize once
        per trackpad interaction (resetting only after the trackpad goes idle). Since scroll view pan gesture
        recognizers are indirectly connected to WKMouseGestureRecognizer in Slide Over mode, this manifests in scrolling
        being unresponsive after an initial scroll gesture has ended.

        To address this, we subclass UIHoverGestureRecognizer once again, and (unfortunately) also restore the IPI
        override for `-_shouldReceiveTouch:forEvent:recognizerView:`, to ensure that we're still able to detect and
        dispatch `mousedown` and `mousemove` events.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):
        (-[WKContentView gestureRecognizer:shouldReceivePress:]):

        Remove a couple of delegate overridees here, which are now unnecessary since WKMouseGestureRecognizer is a
        UIHoverGestureRecognizer once again.

        * UIProcess/ios/WKMouseGestureRecognizer.h:
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer _shouldReceiveTouch:forEvent:recognizerView:]):

2021-07-16  Kate Cheney  <katherine_cheney@apple.com>

        macOS Safari network sessions not being marked as being from a browser
        https://bugs.webkit.org/show_bug.cgi?id=228028
        <rdar://problem/80648664>

        Reviewed by Brent Fulgham.

        Move WebKitAdditions to open source to communicate full web browser
        status to the networking stack. In the macOS case, we don't have
        a full browser entitlement, so we should check for Safari.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::SessionWrapper::initialize):
        The name com.apple.WebKit.InAppBrowser is not the most accurate name,
        but changing it would require syncing with other parts of the network
        stack. We should do this in a separate bug.

2021-07-16  Tim Horton  <timothy_horton@apple.com>

        Adopt BifurcatedGraphicsContext for backing store + display list RemoteLayerBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=226425
        <rdar://77929299>

        Reviewed by Sam Weinig.

        Instead of "display list backed RemoteLayerBackingStore" being its own
        backing store type, we make "includes a display list" a separate bit.
        This way, we can paint both a bitmap (IOSurface or CG bitmap, all
        exactly as it normally is), and also carry a sidecar display list.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::encode const):
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::supportsPartialRepaint):
        We can't partially repaint the display list, and require its rendering
        to match the painted backing store, so disable partial repaint entirely
        if display lists are being used.

        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::drawInContext):
        Adopt BifurcatedGraphicsContext in order to paint into the aforementioned
        bitmap and display list simultaneously.
        A future patch may abstract this into a new ImageBuffer type
        instead of polluting RemoteLayerBackingStore with it.

        Leave a temporary workaround for a CoreAnimation bug, which can be
        disabled via `defaults write`, but is enabled by default.

        (WebKit::layerContentsForBufferHandle):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        (WebKit::RemoteLayerBackingStore::Buffer::discard):
        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h:
        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm:
        (-[WKCompositingLayer _setWKContents:withDisplayList:]):
        (-[WKCompositingLayer _setWKContentsDisplayList:]): Deleted.
        (-[WKCompositingLayer _wkContentsDisplayList]): Deleted.
        Pass the display list data to CoreAnimation alongside the bitmap.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateBackingStore):

2021-07-16  Megan Gardner  <megan_gardner@apple.com>

        Pipe App Highlight scrolling through UI Process in preparation for Note Overlay avoidance.
        https://bugs.webkit.org/show_bug.cgi?id=227914

        Reviewed by Tim Horton.

        In order to correctly avoid the note overlay that can potentially obscure the web view,
        we need to pipe the scrolling through the UI process. This patch does that work
        and will be followed up shortly by one that does the actual work of overlay avoidance.
        For iOS, this just uses the main frame UI Scrolling that we already use, but for 
        mac, we need to do the last scroll in the web process after adjusting it with the overlay 
        information. 

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScrollToRect):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::requestScrollToRect):
        (WebKit::WebPageProxy::scrollToRect):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::scrollToRect):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestScrollToRect):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestScrollToRect):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scrollMainFrameToRevealRect const):
        (WebKit::WebChromeClient::scrollRectIntoView const): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::scrollToRect):

2021-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] PSON: accessibility doesn't work after a cross site navigation
        https://bugs.webkit.org/show_bug.cgi?id=228021

        Reviewed by Adrian Perez de Castro.

        The provisional page is not handling the BindAccessibilityTree message and we never embed the new web process
        plug into the UI process socket.

        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::bindAccessibilityTree): Save the a11y plug ID.
        (WebKit::ProvisionalPageProxy::didReceiveMessage): Handle BindAccessibilityTree message.
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::accessibilityPlugID): Returns the a11y plug ID.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage): If the provisional page has a plug ID, bind the a11y tree.

2021-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKMouseGestureRecognizer should not have failure requirements on WKDeferringGestureRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=228013
        rdar://80342462

        Reviewed by Tim Horton.

        Avoid adding a gesture failure requirement between any WKDeferringGestureRecognizers and
        WKMouseGestureRecognizer; It doesn't make sense to claim that WKMouseGestureRecognizer should only recognize
        once active touch events have been handled by the web page. Under normal circumstances, this gesture failure
        requirement is actually completely benign, since touch events should never be received by
        WKMouseGestureRecognizer in the first place, and when using a trackpad, deferring gesture recognizers are not
        triggered.

        However, if an app were to (hypothetically) swizzle out `-gestureRecognizer:shouldReceiveTouch:` to force
        WKMouseGestureRecognizer to receive normal (non-trackpad) touch events, this could cause nearly all gesture
        recognizers in the window to become unresponsive, since WKMouseGestureRecognizer would be stuck in Changed state
        long after other gestures in the same subgraph have transitioned to Ended or Failed state, thereby preventing
        all of these gestures from being reset to Possible state.

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

2021-07-15  Jean-Yves Avenard  <jya@apple.com>

        [Wk1] media/media-source/media-webm-opus-partial.html is a consistent failure (Enable VP8/VP9/Vorbis/Opus in WebKitLegacy)
        https://bugs.webkit.org/show_bug.cgi?id=228005
        rdar://80346720

        Reviewed by Jer Noble.

        * Shared/WebPreferencesDefaultValues.cpp:
        * Shared/WebPreferencesDefaultValues.h: Don't make webm parser conditional on VP9
        being enabled; it's used with other codecs too and is codec-agnostic to start with.

2021-07-15  Jean-Yves Avenard  <jya@apple.com>

        [MSE] sequence mode is broken if GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=227864
        <rdar://problem/80445041>

        Reviewed by Jer Noble.

         When the source buffer's mode is set to sequence, the timestampOffset attribute
        should be updated after each appendBuffer operation. However, when the GPU process
        is enabled, the timestampOffset calculations are all done in the GPU process and
        its result wasn't communicated back to the WebContent process leading its value
        to always be 0 on read.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendComplete): Add value of
        the potentially updated timestamp offset back to the content process.
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateAppendComplete):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in: Add extra timestampOffset
        parameter.

2021-07-15  Chris Dumez  <cdumez@apple.com>

        Add initial support for BroadcastChannel behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227924

        Reviewed by Sam Weinig.

        Add initial support for BroadcastChannel behind a runtime flag, off by default:
        - https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts

        Both Firefox and Blink have been supporting BroadcastChannel for a long time.

        The implementation is complete and spec-compliant. It works both in Window and Worker environments,
        in WebKit1 and WebKit2. However, the feature is off-by-default because of privacy concerns that have
        not been addresssed yet:
        - https://github.com/whatwg/html/issues/5803

        We should be able to add partioning to address the privacy concerns and ship this later on. In the mean
        time though, having a working BroadcastChannel implementation in the context of layout tests is already
        very useful because a lot of Web-Platform-Tests are relying on it to test other Web features. This means
        better test coverage for WebKit.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        * NetworkProcess/NetworkBroadcastChannelRegistry.cpp: Added.
        (WebKit::NetworkBroadcastChannelRegistry::registerChannel):
        (WebKit::NetworkBroadcastChannelRegistry::unregisterChannel):
        (WebKit::NetworkBroadcastChannelRegistry::postMessage):
        (WebKit::NetworkBroadcastChannelRegistry::removeConnection):
        * NetworkProcess/NetworkBroadcastChannelRegistry.h: Added.
        (WebKit::NetworkBroadcastChannelRegistry::GlobalBroadcastChannelIdentifier::operator== const):
        * NetworkProcess/NetworkBroadcastChannelRegistry.messages.in: Added.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::broadcastChannelRegistry):
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.cpp: Added.
        (WebKit::networkProcessConnection):
        (WebKit::WebBroadcastChannelRegistry::registerChannel):
        (WebKit::WebBroadcastChannelRegistry::unregisterChannel):
        (WebKit::WebBroadcastChannelRegistry::postMessage):
        (WebKit::WebBroadcastChannelRegistry::postMessageToRemote):
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.h: Added.
        * WebProcess/WebCoreSupport/WebBroadcastChannelRegistry.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::broadcastChannelRegistry):

2021-07-15  Sihui Liu  <sihui_liu@apple.com>

        Do not abort ongoing IDB transaction synchronously on non-imminent PrepareToSuspend message
        https://bugs.webkit.org/show_bug.cgi?id=227778
        <rdar://problem/80602557>

        Reviewed by Chris Dumez.

        Currently we abort IDB transactions and suspend IDB thread synchronously in NetworkProcess::prepareToSuspend.
        As UI process does not know the file locking state in network process now (because network process tracks
        the state and takes the assertion by itself), UI process may send non-imminent PrepareToSuspend more often,
        and we may abort transaction too aggressively (e.g. UI process may send the message as soon as app is in 
        background). To fix the possible regression of data loss, we will schedule a task with 5s delay to abort
        transactions after prepareToSuspend. In this case, transactions finished in 5s can have a chance to finish.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::suspendIDBServers):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::createWebIDBServer):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::setIsHoldingLockedFiles):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::setPrepareForInvalidationHandler):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKRBSAssertionDelegate dealloc]):
        (-[WKRBSAssertionDelegate assertionWillInvalidate:]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAssertion::processAssertionWillBeInvalidated):

2021-07-15  Megan Gardner  <megan_gardner@apple.com>

        Rename scrollRectIntoView to scrollContainingScrollViewsToRevealRect for clarity.
        https://bugs.webkit.org/show_bug.cgi?id=227995

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scrollContainingScrollViewsToRevealRect const):
        (WebKit::WebChromeClient::scrollRectIntoView const): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-07-15  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Expand GPU sandbox to support multi-target AirPlay
        https://bugs.webkit.org/show_bug.cgi?id=227972
        <rdar://problem/76029596>

        Reviewed by Eric Carlson.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-07-15  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Can't click links with touchscreen
        https://bugs.webkit.org/show_bug.cgi?id=226679

        Reviewed by Michael Catanzaro.

        Currently, when we emulate mouse events for touch, we send events with touch
        pointer type, however the way we do it doesn't really match how touch type
        events are supposed to behave: for example, we won't send a press event until
        a finger release, and will then send both together. And touch pointer type
        events are also supposed to support multitouch (or at least they do in iOS),
        while with this scheme they really can't.

        Not only all of this produces weird results for pointer events, but the actual
        mouse emulation doesn't really work as intended. For example, when tapping
        empty space on the page, and then a link, the latter won't do anything.
        Meanwhile, it's possible to accidentally open a link while pinch zooming.

        Switch back to emulating mouse pointer type events for now, as it was before
        the rewrite to avoid this. Touch pointer type events don't work properly
        anyway.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchRelease):
        (webkitWebViewBaseTouchDragUpdate):
        (webkitWebViewBaseTouchDragEnd):

2021-07-15  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid-July 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227981

        Unreviewed non-unified build fixes.

        * UIProcess/ProcessAssertion.cpp: Add missing wtf/RunLoop.h header.

2021-07-14  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r279912 (239661@main); Adopt HAVE(SYSTEM_STATUS) macro.

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
        (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
        * Platform/spi/ios/SystemStatusSPI.h:

2021-07-14  Michael Saboff  <msaboff@apple.com>

        [macOS] Add new entitlement to limit process to a single JIT region
        https://bugs.webkit.org/show_bug.cgi?id=227956

        Reviewed by Mark Lam.

        This macOS entitlement limits a process to a single JIT region.
        This matches the behavior on iOS.

        * Scripts/process-entitlements.sh:

2021-07-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Dump basic RemoteRenderingBackend state when taking system diagnostics
        https://bugs.webkit.org/show_bug.cgi?id=227917

        Reviewed by Tim Horton.

        Make it possible to diagnose issues where the GPU Process is stuck (e.g. failing to acknowledge context flushes
        from the web process) by dumping information about the states of all RemoteRenderingBackends in the GPU process.
        See comments below for more detail.

        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::remoteRenderingBackendMap const):

        Expose this const getter, so that GPUProcess can iterate over remote rendering backends when collecting
        diagnostic information in `additionalStateForDiagnosticReport()`.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/cocoa/GPUProcessCocoa.mm: Added.
        (WebKit::GPUProcess::additionalStateForDiagnosticReport const):

        Override this method and return a dictionary containing information about each RemoteRenderingBackend for all
        GPUConnectionToWebProcesses. This is an example of a state dictionary:

        ```
        {
            "RemoteRenderingBackend states" =     {
                <WP ID> =         {
                    <RRB ID> = FinishedReplayingDisplayList;
                };
            };
        }
        ```

        Importantly, this reveals RemoteRenderingBackends that are stuck waiting for newly created display list item
        buffers, missing cached resources, or destination image buffers (essentially a special case of "missing cached
        resources"), and also cases where display list playback infinitely loops or otherwise hangs.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):
        (WebKit::RemoteRenderingBackend::setNextItemBufferToRead):
        (WebKit::RemoteRenderingBackend::lastKnownState const):
        (WebKit::RemoteRenderingBackend::updateLastKnownState):

        Add a state flag to RemoteRenderingBackend, so that it can remember its last known state. This state is updated
        when entering or exiting the main display list processing loop (`wakeUpAndApplyDisplayList`); if we're about to
        go to sleep with pending wakeup arguments, then we'll set the last known state to one of the `WaitingFor_______`
        states.

        This state is wrapped in an Atomic, since it's only updated from the rendering backend's background queue, but
        it's only read from within the OS state handler block on the main queue.

        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackendState.h: Added.

        Add a new 8-bit enum representing the state of a RemoteRenderingBackend. See above for more details.

        (WebKit::name):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::waitForDidFlushWithTimeout):

        Add fault logging in the case where we've reached the maximum number of timeouts while waiting for a display
        list context flush. Importantly, we include the remote rendering backend's identifier here to make it easier to
        correlate with information from GPU Process state dumping above.

2021-07-14  Devin Rousso  <drousso@apple.com>

        [iOS] REGRESSION(r279720): changing Subtitles to Off doesn't hide them or do anything
        https://bugs.webkit.org/show_bug.cgi?id=227937
        <rdar://problem/79069662>

        Reviewed by Eric Carlson.

        r279720 made it so that `CaptionUserPreferencesMediaAF::setCaptionDisplayMode` no longer
        directly modifies `kMACaptionAppearanceDomainUser` in the WebProcess, using a cached value
        as a way of preventing the WebProcess from trying to read back that value after it's set,
        instead having the UIProcess send `Messages::WebProcess::SetMediaAccessibilityPreferences`
        whenever this changes to update that cached value. Unfortunately, because the WebProcess
        needs to read this value immediately after changing it, this IPC round trip causes the
        WebProcess to read the old value, which results in no observable changes. In order to fix
        this, notify `CaptionUserPreferences` that `captionPreferencesChanged` when the above IPC
        message is received (which will also handle cases when the value changes outside WebKit).

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::setMediaAccessibilityPreferences):
        Make sure to also update every `CaptionUserPreferences` once the cached preference values
        are saved so that any active media can update accordingly.

2021-07-14  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Dynamically set capture attribution
        https://bugs.webkit.org/show_bug.cgi?id=227871
        rdar://70241665

        Reviewed by Jer Noble.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess): Initialize m_captureOrigin.
        (WebKit::GPUConnectionToWebProcess::updateCaptureOrigin): Update.
        (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString const): Non-Cocoa stub.
        * GPUProcess/GPUConnectionToWebProcess.h:

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::updateCaptureOrigin): Call same method in WebProcessConnection,
        if it exists.
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:

        * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm: Added.
        (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString): Set the attribution
        string to "[domain] in [application]".

        * Platform/spi/ios/SystemStatusSPI.h: Added.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb: Allow "com.apple.systemstatus.activityattribution"
        to be looked up.

        * Scripts/process-entitlements.sh: Add the entitlements required to use the 
        SystemStatus SPI.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::startProducingData): Fail capture
        if setCaptureAttributionString returns false.
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        (WebKit::UserMediaCaptureManagerProxy::ConnectionProxy::setCaptureAttributionString):

        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::updateCaptureOrigin): Call gpuProcess.updateCaptureOrigin
        so the capture origin is correct when capture begins.
        * UIProcess/GPU/GPUProcessProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeMainDocument): Update the capture origin.
        (WebKit::WebPageProxy::willStartCapture): Ditto.
        (WebKit::WebPageProxy::gpuProcessExited): Drive-by - update local variable names
        to make their purpose clearer.
        * WebKit.xcodeproj/project.pbxproj:

2021-07-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Push OS state dumping logic down from WebProcess to AuxiliaryProcess
        https://bugs.webkit.org/show_bug.cgi?id=227916

        Reviewed by Tim Horton.

        Refactor state dumping registration code in preparation for supporting state dumping in the GPU process on Cocoa
        platforms when triggering system diagnostics. The logic that currently lives in
        `WebProcess::registerWithStateDumper` is comprised of two parts: (1) code that calls `os_state_add_handler` with
        a `os_state_data_t` provider, and (2) code that builds a dictionary containing diagnostic information specific
        to the web process.

        Since GPUProcess will require only the former, we hoist logic for (1) into the superclass (AuxiliaryProcess) so
        that both GPUProcess and WebProcess can invoke it, and refactor (2) to be a virtual method that may be
        overridden by subclasses to provide process-specific information.

        * Shared/AuxiliaryProcess.h:
        (WebKit::AuxiliaryProcess::additionalStateForDiagnosticReport const):
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::AuxiliaryProcess::registerWithStateDumper):

        Additionally make this take the title string that will be used to label the state data, to avoid the need for a
        second subclassing method to provide the title.

        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::additionalStateForDiagnosticReport const):

        Pull logic for collecting diagnostic information in the web process out into a separate helper method.

        (WebKit::WebProcess::platformInitializeProcess):
        (WebKit::WebProcess::registerWithStateDumper): Deleted.

2021-07-13  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r279069): http/tests/websocket/tests/hybi/too-long-payload.html is a constant timeout when using NSURLSESSION_WEBSOCKET
        https://bugs.webkit.org/show_bug.cgi?id=227923
        <rdar://80343436>

        Reviewed by Chris Dumez.

        We need to add a large maximum frame size that was first introduced to WebKit in r91243
        Covered by existing tests.

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

2021-07-13  Peng Liu  <peng.liu6@apple.com>

        [GPUP] RemoteMediaPlayerProxy may not send the latest "naturalSize" to MediaPlayerPrivateRemote
        https://bugs.webkit.org/show_bug.cgi?id=227894

        Reviewed by Jer Noble.

        When a `MediaPlayerPrivateMediaSourceAVFObjC` in the GPU process changes its `naturalSize`,
        the new value will be sent to the WebContent process in the IPC message
        `MediaPlayerPrivateRemote::SizeChanged`. However, `RemoteMediaPlayerProxy` won't update
        `m_cachedState.naturalSize`. So the next `MediaPlayerPrivateRemote::UpdateCachedState`
        message will use the old `naturalSize` and the WebContent process will drop the correct value
        after receiving the message.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerSizeChanged):

2021-07-13  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r279647.
        <rdar://80519938>

        Introduced a crash

        Reverted changeset:

        "XPC services should release their os transaction when given a
        SIGTERM signal"
        https://bugs.webkit.org/show_bug.cgi?id=227747
        https://commits.webkit.org/r279647

2021-07-13  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed iOS/tvOS/watchOS build fix.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:

2021-07-13  Chris Dumez  <cdumez@apple.com>

        Regression(r279601) ProcessAssertion may get destroyed on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=227875
        <rdar://76972252>

        Reviewed by Geoffrey Garen.

        r279601 added an internal WorkQueue to ProcessAssertion, so that we could acquire the RunningBoard assertion
        asynchronously on the background queue. When dispatching to the background queue, we capture |protectedThis|,
        which means that ProcessAssertion may now get destroyed on the background queue. To address the isuse, we
        now make sure to dispatch |protectedThis| back to the main thread in acquireAsync().

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::acquireAsync):

2021-07-13  Kate Cheney  <katherine_cheney@apple.com>

        Allow layout tests to specify app initiated loads or not
        https://bugs.webkit.org/show_bug.cgi?id=227825
        <rdar://problem/80355582>

        Reviewed by Brent Fulgham.

        Tests: http/tests/app-privacy-report/app-attribution-load-url.html
               http/tests/app-privacy-report/app-attribution-ping-load.html
               http/tests/app-privacy-report/app-attribution-post-request.html
               http/tests/app-privacy-report/app-attribution-preflight-async.html
               http/tests/app-privacy-report/app-attribution-preflight-sync.html
               http/tests/app-privacy-report/app-attribution-speculative-revalidation.html
               http/tests/app-privacy-report/user-attribution-load-url.html
               http/tests/app-privacy-report/user-attribution-ping-load.html
               http/tests/app-privacy-report/user-attribution-post-request.html
               http/tests/app-privacy-report/user-attribution-preflight-async.html
               http/tests/app-privacy-report/user-attribution-preflight-sync.html
               http/tests/app-privacy-report/user-attribution-speculative-revalidation.html

        Add a parameter to the WebView configuration that allows a test to
        override the default NSURLRequest attribution value. We don't need
        this to be dynamic per-test, so we can store it in the configuration.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::appInitiatedOverrideValueForTesting const):
        (API::PageConfiguration::setAppInitiatedOverrideValueForTesting):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (toWKAttributionOverrideTesting):
        (toAttributionOverrideTesting):
        (-[WKWebViewConfiguration _setAppInitiatedOverrideValueForTesting:]):
        (-[WKWebViewConfiguration _appInitiatedOverrideValueForTesting]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setLastNavigationWasAppInitiated):

2021-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Expose support for client certificate auth
        https://bugs.webkit.org/show_bug.cgi?id=200805

        Reviewed by Michael Catanzaro.

        Add new API to handle certificate and pin certificate authentication requests.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::completeAuthentication):
        (WebKit::NetworkDataTaskSoup::cancelAuthentication):
        (WebKit::NetworkDataTaskSoup::authenticate):
        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
        (WebKit::NetworkDataTaskSoup::requestCertificateCallback):
        (WebKit::NetworkDataTaskSoup::requestCertificatePasswordCallback):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AuthenticationChallenge>::encode):
        (IPC::ArgumentCoder<AuthenticationChallenge>::decode):
        * Shared/glib/ArgumentCodersGLib.cpp:
        (IPC::ArgumentCoder<GRefPtr<GTlsCertificate>>::encode):
        (IPC::ArgumentCoder<GRefPtr<GTlsCertificate>>::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<Credential>::encodePlatformData):
        (IPC::ArgumentCoder<Credential>::decodePlatformData):
        * UIProcess/API/glib/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_get_certificate_pin_flags):
        * UIProcess/API/glib/WebKitCredential.cpp:
        (webkit_credential_new_for_certificate_pin):
        (webkit_credential_new_for_certificate):
        (webkit_credential_get_certificate):
        * UIProcess/API/gtk/WebKitAuthenticationRequest.h:
        * UIProcess/API/gtk/WebKitCredential.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (webkitWebViewAuthenticate):
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/wpe/WebKitAuthenticationRequest.h:
        * UIProcess/API/wpe/WebKitCredential.h:
        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:

2021-07-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Apple Internal iOS build

        Unreviewed.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2021-07-12  Tim Horton  <timothy_horton@apple.com>

        Make WebKit's UserInterfaceIdiom operate in terms of the exceptions, not the rule
        https://bugs.webkit.org/show_bug.cgi?id=227885
        <rdar://problem/79987158>

        Reviewed by Wenson Hsieh.

        No new tests, no change in behavior.

        In general, we consider the macOS/iPad behavior the "normal" WebKit behavior,
        and exceptions to that for iPhone or Watch are just that: exceptions.

        To bring the code in line with this understanding, make places that
        we make decisions based on UIUserInterfaceIdiom take macOS/iPad behavior
        as the default, and make iPhone/Watch the special cases.

        * Shared/UserInterfaceIdiom.h:
        * Shared/UserInterfaceIdiom.mm:
        (WebKit::currentUserInterfaceIdiomIsPhoneOrWatch):
        (WebKit::setCurrentUserInterfaceIdiomIsPhoneOrWatch):
        Also, lump iPod Touch in with iPhone when checking based on device class.

        (WebKit::updateCurrentUserInterfaceIdiom):
        (WebKit::currentUserInterfaceIdiomIsPadOrMac): Deleted.
        (WebKit::setCurrentUserInterfaceIdiomIsPadOrMac): Deleted.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/ios/WebPreferencesDefaultValuesIOS.mm:
        (WebKit::defaultTextAutosizingUsesIdempotentMode):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]):
        (-[WKContentView endEditingAndUpdateFocusAppearanceWithReason:]):
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]):
        (-[WKContentView _zoomToRevealFocusedElement]):
        (-[WKContentView _elementTypeRequiresAccessoryView:]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView _shouldUseLegacySelectPopoverDismissalBehavior]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (WebKit::WebDataListSuggestionsDropdownIOS::show):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::desktopClassBrowsingSupported):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker show:fromRect:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]):
        (-[WKFileUploadPanel _presentMenuOptionForCurrentInterfaceIdiom:]):
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectMultiplePicker configurePresentation]):
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::userInterfaceIdiomDidChange):

2021-07-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Turn on `USE(OS_STATE)` when building with a non-Apple-internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=227884

        Reviewed by Tim Horton.

        Instead of directly importing <os/state_private.h>, introduce a new SPI header (OSStateSPI.h) that simply
        includes <os/state_private.h> on internal builds, and falls back to function declarations when using the non-
        internal SDK.

        * Platform/spi/Cocoa/OSStateSPI.h: Added.
        * WebKit.xcodeproj/project.pbxproj:

        Drive-by fix: additionally restore the minimum `objectVersion` to 52 rather than 54. This was unintentionally
        bumped in r279133.

        * WebProcess/cocoa/WebProcessCocoa.mm:

2021-07-12  Garrett Davidson  <garrett_davidson@apple.com>

        _WKWebAuthenticationPanel escapes slashes in origin
        https://bugs.webkit.org/show_bug.cgi?id=227724
        rdar://80232742

        Reviewed by Kate Cheney.

        Tell NSJSONSerialization not to try to escapes slashes, like those in the scheme of an origin.

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (produceClientDataJson):

2021-07-12  Chris Fleizach  <cfleizach@apple.com>

        AX: Make WebKit observe spatial audio accessibility settings
        https://bugs.webkit.org/show_bug.cgi?id=227848

        Reviewed by Sam Weinig.

        Allow mac and iOS to read from accessibility domains.
        Allow mac sandbox to read from com.apple.Accessibility.

        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * UIProcess/Cocoa/PreferenceObserver.mm:
        (-[WKPreferenceObserver init]):

2021-07-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r279835.

        Newly added assertions are wrong

        Reverted changeset:

        "Regression(r279601) ProcessAssertion may get destroyed on a
        background thread"
        https://bugs.webkit.org/show_bug.cgi?id=227875
        https://commits.webkit.org/r279835

2021-07-12  Chris Dumez  <cdumez@apple.com>

        Regression(r279601) ProcessAssertion may get destroyed on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=227875
        <rdar://76972252>

        Reviewed by Geoffrey Garen.

        r279601 added an internal WorkQueue to ProcessAssertion, so that we could acquire the RunningBoard assertion
        asynchronously on the background queue. When dispatching to the background queue, we capture |protectedThis|,
        which means that ProcessAssertion may now get destroyed on the background queue. ProcessAssertion is a main
        thread object and destroying it on a non-main thread can lead to crashes.

        * UIProcess/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):

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

        [Cocoa] Incorrect deprecation declaration for -[WKWebView closeAllMediaPresentations:]
        https://bugs.webkit.org/show_bug.cgi?id=227860
        <rdar://80376777>

        Reviewed by Sam Weinig.

        In r277645, we added a deprecation declaration for -closeAllMediaPresentations:completion, but
        that API was never shipped in a release. The actual shipped API, -closeAllMediaPresentations,
        was removed entirely, leading to bincompat crashes when binaries built against older SDKs are
        run against newer OSs.

        Correct the deprecated API declaration, and re-add support for -closeAllMediaPresentations.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView closeAllMediaPresentations]):

2021-07-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Make a few additional adjustments to support system minimum layout margins
        https://bugs.webkit.org/show_bug.cgi?id=227859
        rdar://80113612

        Reviewed by Tim Horton.

        Make a couple of minor adjustments to deal with the fact that `-contentInset` includes system content insets
        (specifically, `-_contentScrollInset`) on watchOS, due to method swizzling that happens in PepperUICore. See
        changes below for more detail.

        Test: fast/viewport/watchos/viewport-with-system-minimum-layout-margins.html

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _computedContentInset]):

        Only apply `-safeAreaInsets` on top of `-contentInset` when computing the total scroll view content inset on
        watchOS (as opposed to applying both `-safeAreaInsets` and `-_contentScrollInset`); this is because
        `-contentInset` on watchOS is actually equivalent to `-_effectiveContentInset` on other iOS-family platforms, so
        additionally adding `-_contentScrollInset` here would result in the scroll content inset being double-counted.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setContentInset:]):
        (-[WKScrollView _setContentScrollInsetInternal:]):
        (-[WKScrollView _updateContentScrollInset]):

        In the case where the WebKit client explicitly sets the scroll view's content insets using `-[WKScrollView
        setContentInset:]`, set a flag (`_contentInsetWasExternallyOverridden`) and immediately revert any internally
        specified `-_contentScrollInset` on WKScrollView. Due to the swizzled implementation of `-[UIScrollView
        contentInset]` described above, it's practically impossible for any client to use `-setContentInset:` correctly
        when there is a nonzero `-_contentScrollInset` on watchOS, so preferable to simply get out of the way of the
        client in this scenario.

        In the context of _SFNanoBrowserViewController, this ensures that scroll view content inset adjustment logic in
        Safari doesn't inadvertently cause horizontal content insets to increase by `-_contentScrollInset` every time
        `-[WKScrollView setContentInset:]` is invoked by the client.

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Touch navigation gesture triggers kinetic scrolling when cancelling
        https://bugs.webkit.org/show_bug.cgi?id=227701

        Reviewed by Michael Catanzaro.

        Make sure an event that has finished a navigation swipe gesture isn't propagated
        to the page triggering kinetic scrolling.

        Move the navigation swipe ending from drag-end to swipe signal handler, since
        that's where kinetic scrolling is handled and we can stop it.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchDragEnd):
        (webkitWebViewBaseTouchSwipe):
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):

2021-07-12  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK][WPE] Support drawing scrollbar corner
        https://bugs.webkit.org/show_bug.cgi?id=227868

        Reviewed by Michael Catanzaro.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext):
        Update the paintScrollCorner() call.

2021-07-12  Imanol Fernandez  <ifernandez@igalia.com>

        Cross platform compilation of PlatformXRSystem and PlatformXRSystemProxy
        https://bugs.webkit.org/show_bug.cgi?id=226919

        Reviewed by Dean Jackson.

        PlatformXRSystem and PlatformXRSystemProxy are only compiled in Cocoa platform while WPE uses OpenXR,
        which only has code in WebCore. In order to run WebKit based WebXR on non-cocoa VR Standalone devices
        we also need to split the code and IPC messages between UIProcess/WebProcess.

        The existing PlatformXRSystem/PlatformXRSystemProxy pattern fits very well to the VR standalone scenario.
        This patch ensures that the existing code can be used in more platforms other than Cocoa.

        Tested by WebXR WPT.

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * Shared/XR/XRDeviceIdentifier.h: Renamed from Source/WebKit/Shared/Cocoa/XRDeviceIdentifier.h.
        * Shared/XR/XRDeviceInfo.cpp: Renamed from Source/WebKit/Shared/Cocoa/XRDeviceInfo.mm.
        * Shared/XR/XRDeviceInfo.h: Renamed from Source/WebKit/Shared/Cocoa/XRDeviceInfo.h.
        * Shared/XR/XRDeviceProxy.cpp: Renamed from Source/WebKit/Shared/Cocoa/XRDeviceProxy.mm.
        * Shared/XR/XRDeviceProxy.h: Renamed from Source/WebKit/Shared/Cocoa/XRDeviceProxy.h.
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp: Add include to fix compilation error
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/PlatformXRCoordinator.mm: Copied from Source/WebKit/WebProcess/cocoa/PlatformXRSystemProxy.messages.in.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/XR/PlatformXRCoordinator.h: Renamed from Source/WebKit/UIProcess/Cocoa/PlatformXRCoordinator.h.
        * UIProcess/XR/PlatformXRSystem.cpp: Renamed from Source/WebKit/UIProcess/Cocoa/PlatformXRSystem.mm.
        * UIProcess/XR/PlatformXRSystem.h: Renamed from Source/WebKit/UIProcess/Cocoa/PlatformXRSystem.h.
        * UIProcess/XR/PlatformXRSystem.messages.in: Renamed from Source/WebKit/UIProcess/Cocoa/PlatformXRSystem.messages.in.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::xrSystemProxy):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/XR/PlatformXRSystemProxy.cpp: Renamed from Source/WebKit/WebProcess/cocoa/PlatformXRSystemProxy.mm.
        * WebProcess/XR/PlatformXRSystemProxy.h: Renamed from Source/WebKit/WebProcess/cocoa/PlatformXRSystemProxy.h.
        * WebProcess/XR/PlatformXRSystemProxy.messages.in: Renamed from Source/WebKit/WebProcess/cocoa/PlatformXRSystemProxy.messages.in.

2021-07-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an unused deprecated private UI delegate method
        https://bugs.webkit.org/show_bug.cgi?id=227861

        Reviewed by Tim Horton.

        `-_webView:didNotHandleTapAsMeaningfulClickAtPoint:` is replaced with `-_webView:didTapAtPoint:withResult:`;
        the old SPI is no longer required for either binary or source compatibility after rdar://79700201.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didTapAtPoint):

2021-07-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Canvas drawing never releases any fonts
        https://bugs.webkit.org/show_bug.cgi?id=227376
        <rdar://problem/79741186>

        Reviewed by Said Abou-Hallawa.

        We have a frame counter which makes sure that fonts which haven't been used in n frames get released.
        However, we currently only update the frame counter when we release fonts.
        This means that the frame counter stays 0 forever. And we never release any fonts.

        The fix is just to increment the frame counter even if we don't release any fonts.

        No new tests because there is no architectural behavior change.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::prepareForNextRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::clearFontMap):
        (WebKit::RemoteResourceCacheProxy::didFinalizeRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        (WebKit::RemoteResourceCacheProxy::releaseMemory):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-07-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r279802 to address review feedback from Sam Weinig.

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

2021-07-09  Chris Dumez  <cdumez@apple.com>

        [ITP] Improve ResourceLoadStatisticsDatabaseStore's buildList() and use it in more places
        https://bugs.webkit.org/show_bug.cgi?id=227843

        Reviewed by Sam Weinig.

        Improve ResourceLoadStatisticsDatabaseStore's buildList() and use it in more places.

        buildList() now works with String types (RegistrableDomain in this particular case) and
        can take any container type in parameter.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::buildList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):

2021-07-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Allow the UIProcess to set logging parameters in the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=227822

        Reviewed by Eric Carlson.

        For release builds, logLevelString() will return an empty string. Instead, do the same thing
        for GPUProcessProxy as we do for WebProcessPool: have a platform-specific initialization
        function that, for Cocoa ports, reads log strings from NSUserDefaults.

        Drive-by fix: Include <optional> in WKContentPicker.h to work around a unified build error.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/GPUProcessProxyCocoa.mm: Added.
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/Cocoa/WKContactPicker.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
        * UIProcess/GPU/GPUProcessProxy.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-07-09  Chris Dumez  <cdumez@apple.com>

        Validate keys in ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources() before using them with HashMap
        https://bugs.webkit.org/show_bug.cgi?id=227842

        Reviewed by Kate Cheney.

        Validate keys in ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources() before using them with HashMap,
        to avoid potential crashes. We do not support storing (or looking up) a key with value 0 in a HashMap whose key type
        is 'unsigned'.

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

2021-07-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make Coordinator playback commands more precise
        https://bugs.webkit.org/show_bug.cgi?id=227756

        Reviewed by Eric Carlson.

        Pass through new {play,pause}AtHostTime() and supports{Play,Pause}AtHostTime() methods
        to and from the GPU process.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::getConfiguration):
        (WebKit::RemoteMediaPlayerProxy::playAtHostTime):
        (WebKit::RemoteMediaPlayerProxy::pauseAtHostTime):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::playAtHostTime):
        (WebKit::MediaPlayerPrivateRemote::pauseAtHostTime):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h:
        (WebKit::RemoteMediaPlayerConfiguration::encode const):
        (WebKit::RemoteMediaPlayerConfiguration::decode):

2021-07-09  Youenn Fablet  <youenn@apple.com>

        Use nw_parameters_allow_sharing_port_with_listener if available
        https://bugs.webkit.org/show_bug.cgi?id=227835
        <rdar://80312536>

        Reviewed by Eric Carlson.

        Use nw_parameters_allow_sharing_port_with_listener to allow running local loop connections.
        Covered by existing tests running on platforms supporting nw_parameters_allow_sharing_port_with_listener.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::createNWConnection):
        * Platform/spi/Cocoa/NWParametersSPI.h:

2021-07-09  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Touchscreen navigation swipe doesn't work when the page scrolls horizontally
        https://bugs.webkit.org/show_bug.cgi?id=227691

        Reviewed by Michael Catanzaro.

        When the page scrolls horizontally, we have a separate code path for events that
        WebCore didn't handle and which are considered safe to use to start a swipe
        gesture. Unfortunately, that code relies on the NativeWebWheelEvents containing a
        GdkEvent, which is only the case for actual scroll events, but not synthesized
        scroll events on touchscreen, and the needed info (input source type and a proper
        timestamp instead of the truncated one wallTimeForEventTime() produces) is not
        stored in NativeWebWheelEvent.

        While we don't have GdkEvents for every situation we synthesize wheel events in,
        we do have them for touchscreen gestures. They aren't GdkScrollEvents, but that
        isn't a problem - the only things we use that are specific to GdkScrollEvent are
        scroll deltas and whether it's a scroll stop event, and that's also stored in
        NativeWebWheelEvent, and we only need GdkEvent for the time and input source type,
        where the event type doesn't really matter.

        Since touch GdkEvents are controlled via event sequences rather than stop/propagate
        return values, don't try and propagate them if web process has returned them: we've
        already claimed their sequence before sending them to web process, so they will be
        of no use to other widgets.

        * Shared/NativeWebWheelEvent.h:
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        Add a GdkEvent parameter to the remaining constructor.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseZoomBegin):
        (webkitWebViewBaseTouchDragBegin):
        (webkitWebViewBaseTouchDragUpdate):
        (webkitWebViewBaseTouchSwipe):
        (webkitWebViewBaseSynthesizeWheelEvent):
        Split into versions with and without a GdkEvent parameter.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2021-07-08  Adam Mazander  <mazander@apple.com>

        WebContent: Silence report of AppSupport denial
        https://bugs.webkit.org/show_bug.cgi?id=227375

        Reviewed by Brent Fulgham.

        Manual testing confirms AppSupport does not need access to WebContent.          Simplified. 

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

2021-07-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Tapping "Done" in Scribble when focusing an editable element should dismiss Quickboard
        https://bugs.webkit.org/show_bug.cgi?id=227817
        rdar://79931134

        Reviewed by Tim Horton and Devin Rousso.

        After using PUICQuickboardMessageViewController's PUICTextInput-based mode for presenting Scribble UI, we fail
        to dismiss PUICQuickboardMessageViewController underneath `-dismissAllInputViewControllers:`, since Quickboard
        is not the top-most view controller (instead, it ends up being PUICQuickboardRemoteViewController). As a result,
        the call to `-dismissViewControllerAnimated:completion:` on the fullscreen input view controller ends up being
        dropped on the floor.

        Prior to adopting PUICQuickboardMessageViewController and remote text input on watchOS, this worked because the
        delegate method `-quickboard:textEntered:` would only be invoked after the front-most view controller was done
        dismissing, such that calling `-dismissViewControllerAnimated:completion:` on the fullscreen input view
        controller would (correctly) dismiss it.

        We can address this by checking whether the fullscreen input view controller itself has a presented view
        controller in `-dismissAllInputViewControllers:`, and dismissing that first if necessary.

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

2021-07-08  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Expose SPI to opt out of Extensible SSO authentication
        https://bugs.webkit.org/show_bug.cgi?id=227729
        <rdar://problem/75647892>

        Reviewed by Tim Horton.

        WKWebView clients should be able to disable Extensible SSO authentication flows, so exposing the internal
        mechanism as SPI. This is especially important for use cases where a WKWebView will be used to load content
        without being attached to a Window, since a Window is required to present the Extensible SSO authentication
        UI. Without a Window, WebKit will wait for a Window to be attached causing loads to timeout. By adopting this
        API, developers can opt out of Extensible SSO, allowing loads to fail quickly rather than waiting for a timeout.

        Tested by a new TestWebKitAPI test case: SOAuthorizationRedirect.DisableSSO

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _extensibleSSOEnabled]): Add getter for new preference.
        (-[WKPreferences _setExtensibleSSOEnabled:]): Add setter.
        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm:
        (WebKit::NavigationSOAuthorizationSession::shouldStartInternal): Add new logging so developers can see when a WKWebView
        without a Window is attempting to participate in Extensible SSO flows.
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        (WebKit::PopUpSOAuthorizationSession::initSecretWebView): Switch from SPI to API.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Ditto.
        * UIProcess/WebPageProxy.h:

2021-07-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Selection is misaligned on some images on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=227775
        rdar://77142364

        Reviewed by Tim Horton.

        See WebCore ChangeLog for more details.

        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):
        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.h:
        (WebKit::createShareableBitmap):

        Add an option to handle the scenario where the image renderer is fully transparent by falling back to a frame-
        level snapshot, using the bounds of the image renderer.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestTextRecognition):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::imagePositionInformation):
        (WebKit::elementPositionInformation):

2021-07-08  Kate Cheney  <katherine_cheney@apple.com>

        Clean up App Privacy Report code
        https://bugs.webkit.org/show_bug.cgi?id=227326
        <rdar://problem/79696849>

        Reviewed by Brent Fulgham.

        Rename App Privacy Report code to better align with the code's purpose
        of attributing loads to the app or not. The default value should
        be app initiated based on the documentation, so this patch also adjusts
        the default value as needed.

        This also adopts the new NSURLRequest attribution API and removes
        the deprecated _isNonAppInitiated SPI.

        Covered by existing layout and API tests.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        (WebKit::NetworkProcess::appPrivacyReportTestingData):
        (WebKit::NetworkProcess::clearAppPrivacyReportTestingData):
        (WebKit::NetworkProcess::appBoundNavigationData): Deleted.
        (WebKit::NetworkProcess::clearAppBoundNavigationData): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::isAppBound):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::appPrivacyReportTestingData):
        (WebKit::NetworkSession::appBoundNavigationTestingData): Deleted.
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::softUpdateIfNeeded):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::loadFromNetwork):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::controlClient):
        (WebKit::WebSWServerConnection::createFetchTask):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::updateAppInitiatedValue):
        (WebKit::WebSWServerToContextConnection::updateAppBoundValue): Deleted.
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::isAppInitiated const):
        (WebKit::NetworkCache::SubresourceInfo::setIsAppInitiated):
        (WebKit::NetworkCache::SubresourceInfo::isAppBound const): Deleted.
        (WebKit::NetworkCache::SubresourceInfo::setIsAppBound): Deleted.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/AppPrivacyReport.h:
        (WebKit::AppPrivacyReportTestingData::setDidPerformSoftUpdate):
        (WebKit::AppPrivacyReportTestingData::clearAppPrivacyReportTestingData):
        (WebKit::AppPrivacyReportTestingData::didLoadAppInitiatedRequest):
        (WebKit::AppPrivacyReportTestingData::encode const):
        (WebKit::AppPrivacyReportTestingData::decode):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::decodePlatformData):
        * Shared/NavigatingToAppBoundDomain.h:
        (WebKit::AppBoundNavigationTestingData::setDidPerformSoftUpdate): Deleted.
        (WebKit::AppBoundNavigationTestingData::clearAppBoundNavigationDataTesting): Deleted.
        (WebKit::AppBoundNavigationTestingData::updateAppBoundNavigationTestingData): Deleted.
        (WebKit::AppBoundNavigationTestingData::encode const): Deleted.
        (WebKit::AppBoundNavigationTestingData::decode): Deleted.
        (): Deleted.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didLoadAppInitiatedRequest:]):
        (-[WKWebView _didLoadNonAppInitiatedRequest:]):
        (-[WKWebView _appBoundNavigationDataForDomain:completionHandler:]): Deleted.
        Removed now that we no longer need to test attribution context, that
        is all it was used for.

        (-[WKWebView _didLoadAppBoundRequest:]): Deleted.
        (-[WKWebView _didLoadNonAppBoundRequest:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _lastNavigationWasAppInitiated:]):
        (-[WKWebView _appPrivacyReportTestingData:]):
        (-[WKWebView _clearAppPrivacyReportTestingData:]):
        (-[WKWebView _lastNavigationWasAppBound:]): Deleted.
        (-[WKWebView _appBoundNavigationData:]): Deleted.
        (-[WKWebView _clearAppBoundNavigationData:]): Deleted.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setLastNavigationWasAppInitiated):
        (WebKit::WebPageProxy::lastNavigationWasAppInitiated):
        (WebKit::WebPageProxy::setLastNavigationWasAppBound): Deleted.
        (WebKit::WebPageProxy::lastNavigationWasAppBound): Deleted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::preconnectTo):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::preconnectTo):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::appPrivacyReportTestingData):
        (WebKit::WebPageProxy::clearAppPrivacyReportTestingData):
        (WebKit::WebPageProxy::appBoundNavigationData): Deleted.
        (WebKit::WebPageProxy::clearAppBoundNavigationData): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::preconnectTo):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updateAppInitiatedValue):
        (WebKit::WebSWContextManagerConnection::startFetch):
        (WebKit::WebSWContextManagerConnection::updateAppBoundValue): Deleted.
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::createDocumentLoader):
        (WebKit::WebPage::lastNavigationWasAppInitiated):
        (WebKit::WebPage::lastNavigationWasAppBound): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setLastNavigationWasAppInitiated):
        (WebKit::WebPage::setLastNavigationWasAppBound): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:

2021-07-08  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Too easy to trigger navigation swipe on touchscreen
        https://bugs.webkit.org/show_bug.cgi?id=226745

        Reviewed by Michael Catanzaro.

        ViewGestureController uses both x and y deltas to figure out whether to proceed
        with a swipe, in the cross-platform part of the code. However, that was optimized
        out during the touch handling rewrite, bring it back.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseHandleWheelEvent):
        (webkitWebViewBaseScroll):
        (webkitWebViewBaseTouchDragUpdate):
        (webkitWebViewBaseTouchDragEnd):
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting):

2021-07-08  Garrett Davidson  <garrett_davidson@apple.com>

        _WKWebAuthenticationPanel is returning the wrong operation type in clientDataJSON
        https://bugs.webkit.org/show_bug.cgi?id=227726
        rdar://80073404

        Reviewed by Kate Cheney.

        The -getAssertion:... method was passing the wrong _WKWebAuthenticationType to produceClientDataJSON().

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]):

2021-07-08  Per Arne  <pvollan@apple.com>

        Set Caption preferences in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=227742
        <rdar://79040526>

        Reviewed by Eric Carlson.

        Subclass the Caption user preferences delegate, which will send messages to the UI process, requesting to set the preferences.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::setCaptionDisplayMode):
        (WebKit::WebProcessProxy::setCaptionLanguage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebCaptionPreferencesDelegate.cpp: Added.
        (WebKit::WebCaptionPreferencesDelegate::setDisplayMode):
        (WebKit::WebCaptionPreferencesDelegate::setPreferredLanguage):
        * WebProcess/WebCoreSupport/WebCaptionPreferencesDelegate.h: Added.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2021-07-07  Tim Horton  <timothy_horton@apple.com>

        Add WKHoverPlatter and some knobs to tweak its appearance
        https://bugs.webkit.org/show_bug.cgi?id=227735
        <rdar://problem/79198262>

        Reviewed by Sam Weinig.

        * Configurations/WebKit.xcconfig:
        * Platform/spi/ios/PrototypeToolsSPI.h: Added.
        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView rootContentView]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView cleanUpInteraction]):
        Install and uninstall the platter alongside the gestures that drive it.

        (-[WKContentView mouseGestureRecognizerChanged:]):
        (-[WKContentView hoverGestureRecognizerChanged:]):
        When the gesture recognizers fire, also update the hover point.

        (-[WKContentView positionInformationForHoverPlatter:withRequest:completionHandler:]):
        * UIProcess/ios/WKHoverPlatter.h: Added.
        * UIProcess/ios/WKHoverPlatter.mm: Added.
        (createBaseAnimation):
        (addAnimation):
        (setAdditionalPlatterLayerProperties):
        (addAdditionalIncomingAnimations):
        (addAdditionalDismissalAnimations):
        (-[WKHoverPlatter initWithView:delegate:]):
        (-[WKHoverPlatter invalidate]):
        (-[WKHoverPlatter hoverPoint]):
        (-[WKHoverPlatter setHoverPoint:]):
        (-[WKHoverPlatter requestPositionInformationForCurrentHoverPoint]):
        (-[WKHoverPlatter didReceivePositionInformation:]):
        (-[WKHoverPlatter dismissPlatterWithAnimation:]):
        (-[WKHoverPlatter didFinishAnimationForShadow:]):
        (-[WKHoverPlatter clearLayers]):
        Animate the platter in and out, and optionally between states, as the hover point moves.
        Use the TextIndicator's geometry information, but not its snapshot; we use a
        CAPortalLayer for the platter instead. A future patch will avoid taking the snapshot
        entirely, since we call setHoverPoint (and thus generate a TextIndicator) a *lot*
        when moving the mouse around, and all those snapshots add up.

        * UIProcess/ios/WKHoverPlatterParameters.h: Added.
        * UIProcess/ios/WKHoverPlatterParameters.mm: Added.
        (-[PTSliderRow integerMinValue:maxValue:]):
        (-[WKHoverPlatterParameters setDefaultValues]):
        (+[WKHoverPlatterParameters settingsControllerModule]):
        (+[WKHoverPlatterDomain rootSettings]):
        (+[WKHoverPlatterDomain domainGroupName]):
        (+[WKHoverPlatterDomain domainName]):
        (+[WKHoverPlatterDomain rootSettingsClass]):
        Add some knobs, with reasonable defaults, for experimentation.

        * WebKit.xcodeproj/project.pbxproj:

2021-07-07  John Wilander  <wilander@apple.com>

        PCM: Add error logging for CryptoKit operations
        https://bugs.webkit.org/show_bug.cgi?id=227731
        <rdar://80221057>

        Reviewed by Brent Fulgham.

        Resolves three FIXMEs for error logging in PCM's CryptoKit operations.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):

2021-07-07  Devin Rousso  <drousso@apple.com>

        Extremely jumpy window resizing in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=167529
        <rdar://problem/77568931>

        Reviewed by Tim Horton.

        Instead of computing the `m_pendingTopContentInset` inside `updateContentInsetsIfAutomatic`,
        wait to do it until we're actually dispatching the value to the WebProcess, as it's possible
        for the former to happen while still inside a layout, which could result in the wrong value.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateContentInsetsIfAutomatic):
        (WebKit::WebViewImpl::topContentInset const):
        (WebKit::WebViewImpl::setTopContentInset):
        (WebKit::WebViewImpl::scheduleSetTopContentInsetDispatch): Added.
        (WebKit::WebViewImpl::dispatchSetTopContentInset):
        Still keep `m_pendingTopContentInset` so that manual calls to `setTopContentInset` can also
        be batched with `updateContentInsetsIfAutomatic`, each taking precedence over the other if
        called later.

2021-07-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed follow-up to r279601 to address some assertions on the bots.

        Because we call makeWeakPtr() on a ProcessAssertion from a background queue, we have to
        make sure the ProcessAssertion's WeakPtrFactory gets initialized eagerly on the main
        thread, to avoid races and assertions in debug.

        * UIProcess/ProcessAssertion.h:

2021-07-07  Chris Dumez  <cdumez@apple.com>

        [ITP] Potential assertion hit in ResourceLoadStatisticsDatabaseStore::clearUserInteraction()
        https://bugs.webkit.org/show_bug.cgi?id=227763
        <rdar://80231894>

        Reviewed by Darin Adler.

        ResourceLoadStatisticsDatabaseStore::clearUserInteraction() was starting a SQLite transaction
        but one of its callers already starts one, causing us to hit this assertion (recursive
        transactions are not supported).

        To address the issue, add an overload that takes in an SQLiteTransaction, when the call
        site already started a transaction.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:

2021-07-07  Christopher Reid  <chris.reid@sony.com>

        [PlayStation] Don't assume 4KB block size when estimating Network Cache disk usage
        https://bugs.webkit.org/show_bug.cgi?id=227502

        Reviewed by Chris Dumez.

        Network Cache disk usage can underestimate the real disk usage on platforms 
        with file blocks larger than 4 KB.
        Adding call to FileSystem::getVolumeFileBlockSize to use the FileSystem's
        block size in the estimation.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.h:

2021-07-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] Merge PlatformContextCairo into GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=227721

        Reviewed by Don Olmstead.

        * Shared/API/c/cairo/WKImageCairo.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        XPC services should release their os transaction when given a SIGTERM signal
        https://bugs.webkit.org/show_bug.cgi?id=227747
        <rdar://72430454>

        Reviewed by Geoff Garen.

        Apparently when you shut down your computer, processes are given a SIGTERM signal and expected to release their os_transaction_t
        to indicate that they can now be terminated "cleanly".

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):

2021-07-07  Alex Christensen  <achristensen@webkit.org>

        Use more Span
        https://bugs.webkit.org/show_bug.cgi?id=227606

        Reviewed by Darin Adler.

        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::decodeRecordHeader):
        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::readOrigin):
        (WebKit::CacheStorage::decodeCachesNames):
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):
        (WebKit::NetworkCache::computeSHA1):
        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::Data::span const):
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::apply const):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::apply const):
        * NetworkProcess/cache/NetworkCacheDataGLib.cpp:
        (WebKit::NetworkCache::Data::apply const):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::getData):
        (API::decodeContentRuleListMetaData):
        (API::writeDataToFile):

2021-07-07  Chris Dumez  <cdumez@apple.com>

        [macOS] Suspend WebProcesses that are in the process cache
        https://bugs.webkit.org/show_bug.cgi?id=227269
        <rdar://problem/79639863>

        Reviewed by Geoffrey Garen.

        Suspend WebProcesses that are in the process cache on macOS to make sure they use no CPU.
        The suspension happens 30 seconds after the process enters the cache, giving the WebProcess
        time to finish whatever clean up it needs to do before suspending.

        * UIProcess/WebProcessCache.cpp:
        (WebKit::WebProcessCache::CachedProcess::CachedProcess):
        (WebKit::WebProcessCache::CachedProcess::~CachedProcess):
        (WebKit::WebProcessCache::CachedProcess::takeProcess):
        (WebKit::WebProcessCache::suspensionTimerFired):
        * UIProcess/WebProcessCache.h:
        (WebKit::WebProcessCache::CachedProcess::isSuspended const):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformSuspendProcess):
        (WebKit::WebProcessProxy::platformResumeProcess):

2021-07-06  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in EventHandler and UserInputBridge
        https://bugs.webkit.org/show_bug.cgi?id=227481
        <rdar://problem/79906757>

        Reviewed by Wenson Hsieh and Chris Dumez.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::contextMenuAtPointInWindow):
        (WebKit::handleContextMenuEvent):

2021-07-06  Devin Rousso  <drousso@apple.com>

        Provide SPI for clients to override just the contextmenu preview instead of the entire `UIContextMenuConfiguration`
        https://bugs.webkit.org/show_bug.cgi?id=227603
        <rdar://problem/78832586>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView continueContextMenuInteraction:]):
        This allows Safari to remove some custom contextmenu code and use WebKit's default actions.

2021-07-06  Sihui Liu  <sihui_liu@apple.com>

        WebIDBServer created after NetworkProcess::prepareToSuspend is not suspended correctly
        https://bugs.webkit.org/show_bug.cgi?id=227650

        Reviewed by Chris Dumez.

        We created WebIDBServer on receiving AddIDBConnection message from web process, to make sure WebIDBServer's 
        thread is launched only when it is needed. Now WebIDBServer uses WorkQueue, which uses thread from thread pool,
        we can go back to ensure WebIDBServer at when connection to web process is needed. By doing this, it's less 
        likely WebIDBServer is created after NetworkProcess::prepareToSuspend. To make it more safe, this patch also 
        sets m_shouldSuspendIDBServer on NetworkProcess::prepareToSuspend. If the value is true, WebIDBServer is 
        suspended after creation.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::addIDBConnection): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::createWebIDBServer):
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):

2021-07-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Extraneous spaces when copying or translating Chinese and Japanese text in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=227674
        rdar://79669807

        Reviewed by Tim Horton.

        When injecting Live Text into images, we currently assume that all pieces of recognized text from VisionKit are
        separated by spaces. Upon selecting Japanese or Chinese text, this causes text selections to include extraneous
        spaces between words.

        To fix this, we add a bit for each TextRecognitionWordData, to indicate whether that word should be followed by
        whitespace in the image overlay. When converting VKWKTextInfo into TextRecognitionWordData, we then set this bit
        to `true` only if the word is the first on a line of text that is preceded by another line, or there exists
        whitespace between the word and the previous word on the same line.

        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::makeTextRecognitionResult):

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        Make Caches::writeRecord and Caches::readRecord more robust
        https://bugs.webkit.org/show_bug.cgi?id=221620

        Reviewed by Youenn Fablet.

        I saw null dereferenced in EWS, and everywhere else we check m_storage for null.
        Some events happen during teardown.  No reason to crash.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::readRecord):

2021-07-06  Chris Dumez  <cdumez@apple.com>

        [iOS] Have ProcessAssertion take the RunningBoard assertion asynchronously by default
        https://bugs.webkit.org/show_bug.cgi?id=225324
        <rdar://76972252>

        Reviewed by Geoffrey Garen.

        Have ProcessAssertion take the RunningBoard assertion asynchronously (on a background thread) by
        default as we have evidence that doing so on the main thread is bad for performance and may
        negatively impact launch time.

        When constructing a ProcessAssertion, the caller can now indicate if it wants the assertion to be
        taken asynchronously (default) or not. Bug 227552 is an example of a case where we still want to
        take the assertion synchronously (because we're not on the main thread and we need to make sure
        we have the assertion before proceeding).

        The caller can also provide a completion handler that will get called once the RunningBoard is
        taken. Note that the RunningBoard async API ([RBSAssertion acquireWithInvalidationHandler]) does
        not provide a way for us to know when the assertion is taken. For this reason, ProcessAssertion
        keeps using the RunningBoard sync API ([RBSAssertion acquireWithError:]) but calls in on a
        background queue.

        For the UIProcess's background task though, we don't need to know when the assertion is taken
        so we can use the RunningBoard async API.

        Note that the previous iteration of this patch had a bug where the ProcessThrottler would release
        its previous assertion before the new one is taken (asynchronously) when changing the assertion
        type (e.g. foreground to background). This is addressed in this patch. ProcessThrottler now passes
        an acquisition handler when constructing the ProcessAssertion and only releases its previous
        assertion once the acquisition handler for the new one is taken.

        * NetworkProcess/Downloads/DownloadMap.cpp:
        (WebKit::DownloadMap::add):
        * NetworkProcess/Downloads/DownloadMap.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setWebProcessHasUploads):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::create):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::setAssertionType):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::updateAudibleMediaAssertions):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateAudibleMediaAssertions):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (assertionsWorkQueue):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager assertion:didInvalidateWithError:]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::acquireAsync):
        (WebKit::ProcessAssertion::acquireSync):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAssertion::processAssertionWasInvalidated):
        (WebKit::ProcessAssertion::isValid const):

2021-07-06  Sihui Liu  <sihui_liu@apple.com>

        Don't interrupt database for WebResourceLoadStatisticsStore if it will not be suspended
        https://bugs.webkit.org/show_bug.cgi?id=227708

        Reviewed by Geoffrey Garen.

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

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r279597.

        Broke build

        Reverted changeset:

        "Make Caches::writeRecord and Caches::readRecord more robust"
        https://bugs.webkit.org/show_bug.cgi?id=221620
        https://commits.webkit.org/r279597

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        Make Caches::writeRecord and Caches::readRecord more robust
        https://bugs.webkit.org/show_bug.cgi?id=221620

        Reviewed by Youenn Fablet.

        I saw null dereferenced in EWS, and everywhere else we check m_storage for null.
        Some events happen during teardown.  No reason to crash.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::writeRecord):
        (WebKit::CacheStorage::Caches::readRecord):

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        loadSimulatedRequest: should do same delegate callbacks as loadHTMLString and loadData
        https://bugs.webkit.org/show_bug.cgi?id=227599

        Reviewed by Chris Dumez.

        Share more code with loadData and loadHTMLString to prevent such errors.

        Before this change we set SubstituteData.failingURL, which in FrameLoader::PolicyChecker::checkNavigationPolicy
        makes it behave more like _loadAlternateHTMLString which doesn't call decidePolicyForNavigationAction and does
        add a back/forward entry. We want it to behave more like loadHTMLString, which does call decidePolicyForNavigationAction
        and doesn't add a back/forward entry. Except we do want it to add a back/forward entry. This patch is to accomplish that.

        In order to continue making a back/forward list item with loadSimulatedRequest, we need to use
        WebCore::SubstituteData::SessionHistoryVisibility::Visible for its calls and also API::SubstituteData
        needs to remember that we initially used that for when we go back to a back/forward list item from
        that data.  In order to keep binary compatibility with existing apps, loadData and loadHTMLString
        need to continue using WebCore::SubstituteData::SessionHistoryVisibility::Hidden.

        Covered by existing and new API tests.

        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode const):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h:
        * UIProcess/API/APINavigation.cpp:
        (API::SubstituteData::SubstituteData):
        * UIProcess/API/APINavigation.h:
        (API::SubstituteData::SubstituteData):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::loadData):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        (WebKit::WebPage::loadSimulatedRequestAndResponse):
        * WebProcess/WebPage/WebPage.h:

2021-07-06  Per Arne  <pvollan@apple.com>

        Collect Accessibility preferences on a background queue
        https://bugs.webkit.org/show_bug.cgi?id=227617
        <rdar://80055168>

        Reviewed by Brent Fulgham.

        To avoid blocking the main thread of the UI process, collect Media Accessibility preferences on a background thread,
        and send them to the WebContent process(es).

        * Shared/AccessibilityPreferences.cpp:
        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::encode):
        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::decode):
        * Shared/AccessibilityPreferences.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::accessibilityPreferences):
        (WebKit::WebProcessPool::setMediaAccessibilityPreferences):
        (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityPreferencesDidChange):
        (WebKit::WebProcess::setMediaAccessibilityPreferences):

2021-07-06  Youenn Fablet  <youenn@apple.com>

        REGRESSION: [iOS] ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::RemoteRemoteCommandListener::~RemoteRemoteCommandListener()
        https://bugs.webkit.org/show_bug.cgi?id=226248
        <rdar://problem/78481758>

        Reviewed by Eric Carlson.

        Make sure to remove message receiver on the same gpu process connection it was added.
        Also make sure to recreate remote command listener every time we use a new connection.
        Do the same thing for RemoteAudioHardwareListener.
        Also make sure to remove message receiver in RemoteRenderingBackendProxy::gpuProcessConnectionDidClose

        Covered by existing tests.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
        * WebProcess/GPU/media/RemoteAudioHardwareListener.cpp:
        (WebKit::RemoteAudioHardwareListener::RemoteAudioHardwareListener):
        (WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener):
        * WebProcess/GPU/media/RemoteAudioHardwareListener.h:
        * WebProcess/GPU/media/RemoteRemoteCommandListener.cpp:
        (WebKit::RemoteRemoteCommandListener::RemoteRemoteCommandListener):
        (WebKit::RemoteRemoteCommandListener::~RemoteRemoteCommandListener):
        (WebKit::RemoteRemoteCommandListener::ensureGPUProcessConnection):
        (WebKit::RemoteRemoteCommandListener::gpuProcessConnectionDidClose):
        (WebKit::RemoteRemoteCommandListener::updateSupportedCommands):
        * WebProcess/GPU/media/RemoteRemoteCommandListener.h:

2021-07-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r279495.

        Seems to have caused a ~2% PLT5 regression

        Reverted changeset:

        "[macOS] Suspend WebProcesses that are in the process cache"
        https://bugs.webkit.org/show_bug.cgi?id=227269
        https://commits.webkit.org/r279495

2021-07-06  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Navigation swipe doesn't work when the page scrolls horizontally
        https://bugs.webkit.org/show_bug.cgi?id=226173

        Reviewed by Michael Catanzaro.

        There was a chunk of code that was never ported to GTK4. Port it.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):

2021-07-06  Youenn Fablet  <youenn@apple.com>

        NetworkRTCUDPSocketCocoa should update the port of its m_address field
        https://bugs.webkit.org/show_bug.cgi?id=227622

        Reviewed by Eric Carlson.

        Make sure we set the port to m_address field as this is used for setting up nw_connections.
        Then notify WebProcess to proceed. This will ensure that we create a nw_connection with the right listening port.
        Also fix the value given to nw_parameters_set_is_third_party_web_content.

        Set local address reuse to true with nw_parameters_set_reuse_local_address so that listeners and connections can share the same address and port.
        This does not always work so, we temporarily resort to use a 0 port instead of m_address.port() when setting up nw_connections.

        Manually tested.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::doSocketTaskOnRTCNetworkThread):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoa::setListeningPort):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::setListeningPort):

2021-07-06  Youenn Fablet  <youenn@apple.com>

        UserMediaCaptureManagerProxy::SourceProxy destructor should remove itself as observer before invalidating its ring buffer storage
        https://bugs.webkit.org/show_bug.cgi?id=227683

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy):
        Previously, we were invalidating the ring buffer storage before removing the source proxy as audio observer.
        This created the risk for the ring buffer to be recreated before the end of SourceProxy destructor.
        To fix this, we invalidate the storage just after stopping observing.

2021-07-05  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Navigation swipe gesture can be triggered with mouse
        https://bugs.webkit.org/show_bug.cgi?id=227678

        Reviewed by Carlos Garcia Campos.

        Originally, the navigation swipe gesture had a few checks to only make it possible to
        trigger it with a touchpad or touchscreen, with an exception for simulated swipes
        where we couldn't set the source easily.

        During the rewrite in https://bugs.webkit.org/show_bug.cgi?id=212324, the check got
        dropped, but it has a good reason to be there: not all devices are capable of
        performing a gesture. Touchpads and touchscreens should be fine, trackpoints are
        finicky, though can still technically work, but mouse are a no-go. While they can
        start a swipe, they will never end it and the gesture will get stuck.

        So, add the check back. Don't bother with the scroll direction this time though, while
        that check made sense when it got added, at some point since then all scroll events
        had GDK_SCROLL_SMOOTH direction and just set their deltas to (1, 0), (-1, 0), (0, 1)
        or (0, -1), so that check stopped working, and the source type check should filter
        mouse events anyway.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseHandleWheelEvent):
        (webkitWebViewBaseScroll):
        (webkitWebViewBaseTouchDragUpdate):
        (webkitWebViewBaseTouchDragEnd):
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::isTouchEvent):
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting):

2021-07-05  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Kinetic scrolling interferes with gestures
        https://bugs.webkit.org/show_bug.cgi?id=226680

        Reviewed by Michael Catanzaro.

        Simulate scroll events that would stop scrolling when we're starting any touch
        gesture. Since we don't have a way to do that on touchpad yet, just stop it when
        starting a zoom or a navigation swipe gesture instead.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseZoomBegin):
        (webkitWebViewBaseTouchDragBegin):
        (webkitWebViewBaseConstructed):

2021-07-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Augment -_webView:didNotHandleTapAsMeaningfulClickAtPoint: to include meaningful taps
        https://bugs.webkit.org/show_bug.cgi?id=227666
        rdar://80094962

        Reviewed by Tim Horton.

        The private UI delegate method `-_webView:didNotHandleTapAsMeaningfulClickAtPoint:` is currently only invoked
        when a tap was not handled as a "meaningful" synthetic click (where the notion of "meaningful" is heuristically
        determined). However, in order to support revised tab pill minimization behaviors, Safari requires knowledge of
        taps that were handled as meaningful clicks as well.

        To support this, replace what is currently `-_webView:didNotHandleTapAsMeaningfulClickAtPoint:` with another
        delegate method, `-_webView:didTapAtPoint:withResult:`, that is always invoked when a tap gesture is recognized
        in the web view. The `result` parameter, a new `_WKTapHandlingResult` enum, then indicates to the client how the
        tap was handled; this currently includes 3 values: one to indicate that the tap gesture did not result in a
        synthetic click being dispatched, and two more to indicate whether the synthetic click that was dispatched as a
        result of the tap was "meaningfully" handled.

        To facilitate the transition from `-_webView:didNotHandleTapAsMeaningfulClickAtPoint:` to the new SPI, we still
        call the old SPI as long as the tap handling result type is not equal to TapHandlingResult::MeaningfulClick;
        however, mark the old SPI as deprecated with `-_webView:didTapAtPoint:withResult:` as the replacement.

        Tests:  fast/events/ios/did-not-handle-meaningful-click.html
                fast/events/ios/meaningful-click-when-focusing-body.html
                fast/events/ios/meaningful-click-when-playing-media.html
                fast/events/ios/non-meaningful-click-when-tapping-document.html

        * Shared/ios/TapHandlingResult.h: Added.

        Add a new C++ enum type to represent the tap handling result type (see description above).

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didTapAtPoint):
        (API::UIClient::didNotHandleTapAsMeaningfulClickAtPoint): Deleted.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKTapHandlingResult.h: Added.
        * UIProcess/API/ios/WKWebViewIOS.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (wkTapHandlingResult):

        Add a helper method to convert from the WebKit::TapHandlingResult enum to the SPI-exposed _WKTapHandlingResult.

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _didTapAtPoint:withResult:]):
        (-[WKWebView _didNotHandleTapAsMeaningfulClickAtPoint:]): Deleted.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didTapAtPoint):

        Note that we still invoke the old UI delegate SPI here to ensure that these changes don't break Safari before
        they have a chance to adopt the new SPI.

        (WebKit::UIDelegate::UIClient::didNotHandleTapAsMeaningfulClickAtPoint): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Replace the `DidNotHandleTapAsMeaningfulClickAtPoint` message with `DidTapAtPoint`, which takes both a location
        and a flag indicating how the tap was handled by web content.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didTapAtPoint):
        (WebKit::PageClientImpl::didNotHandleTapAsMeaningfulClickAtPoint): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didTapAtPoint):
        (WebKit::WebPageProxy::didNotHandleTapAsMeaningfulClickAtPoint): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::completeSyntheticClick):

        The meaningful tap heuristic no longer determines whether we send an IPC message or not, but rather the type of
        TapHandlingResult to send (namely, whether to send NonMeaningfulClick or MeaningfulClick).

        (WebKit::WebPage::attemptSyntheticClick):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTapFailed):

2021-07-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Mac Catalyst build.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):

2021-07-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed Mac Catalyst build fix after r279514.

        * NetworkProcess/ios/NetworkProcessIOS.mm:

2021-07-02  Chris Dumez  <cdumez@apple.com>

        Take a process assertion in the network process when holding locked files
        https://bugs.webkit.org/show_bug.cgi?id=227552

        Reviewed by Sihui Liu.

        Take a process assertion in the network process when holding locked files. Previously, we'd
        send an IPC to the UIProcess and the UIProcess would take the assertion on behalf of the
        network process. However, our previous approach was racy and could cause the network process
        to still get suspended while still holding locked files (which would get it killed).

        We have evidence that the network process is getting killed a lot for this reason
        (rdar://79787123).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        Call setIsHoldingLockedFiles() when the "isHoldingLockedFiles" state changes instead of sending
        an IPC to the UIProcess. setIsHoldingLockedFiles() takes care of taking or releasing a
        RunningBoard assertion.

        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        Stop calling setSuspended() on the WebSQLiteDatabaseTracker. The purpose was to avoid sending
        the SetIsHoldingLockedFiles IPC to the UIProcess after receiving the PrepareToSuspend IPC.
        However, it is now acceptable to take a process assertion after PrepareToSuspend IPC has been
        received.

        * NetworkProcess/NetworkProcess.h:

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::setIsHoldingLockedFiles):
        When setIsHoldingLockedFiles(true) gets called, we take a runningboard assertion to prevent
        suspension. Note that setIsHoldingLockedFiles(true) gets on the storage thread (which started
        the SQLite transaction) so we take the assertion synchronously to make sure we cannot get
        suspended during a SQLite transaction.
        When setIsHoldingLockedFiles(false) gets called, we release the runningboard assertion.

        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker):
        (WebKit::WebSQLiteDatabaseTracker::setIsSuspended):
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction):
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        (WebKit::WebSQLiteDatabaseTracker::setIsHoldingLockedFiles):
        * Shared/WebSQLiteDatabaseTracker.h:
        Update WebSQLiteDatabaseTracker so that it called its isHoldingLockedFilesHandler lambda
        directly on the storage thread when the first transaction starts, instead of dispatching
        to the main thread. Dispatching to the main thread would be racy as it would mean taking
        the process assertion asynchronously (on the main thread), after the SQLite transaction
        has begun on the storage thread.
        As a result, of this change, I am not using the HysterisActivity class anymore and using
        my own thread-safe hysteresis activity using RunLoop::dispatchAfter() with an integer
        and a lock.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
        (WebKit::NetworkProcessProxy::sendProcessDidResume):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        Drop the SetIsHoldingLockedFiles IPC and its handling on UIProcess side since the network
        process now takes the assertion by itself.

2021-07-02  Chris Dumez  <cdumez@apple.com>

        Regression(r278786) LocalStorageDatabase's transaction may be remain active when process gets suspended
        https://bugs.webkit.org/show_bug.cgi?id=227632

        Reviewed by Geoffrey Garen.

        After r278786, LocalStorageDatabase has a SQL transaction that gets committed with a 500ms delay on the
        storage thread. When the network process would receive the PrepareToSuspend IPC, it would suspend / hang
        the storage thread, which would prevent the SQL transaction from getting committed and we would suspend
        with a locked file and get killed. We now make sure to flush local storage to disk (i.e. commit that
        transaction) before we suspend / hang the storage thread.

        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::waitUntilSyncingLocalStorageFinished):
        (WebKit::StorageManagerSet::flushLocalStorage):
        (WebKit::StorageManagerSet::suspend):
        * NetworkProcess/WebStorage/StorageManagerSet.h:

2021-07-02  Brady Eidson  <beidson@apple.com>

        WebPageProxy::setAppHighlightsVisibility might send message from a background thread, ASSERTing
        <rdar://80056481> and https://bugs.webkit.org/show_bug.cgi?id=227607

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setAppHighlightsVisibility):
        (WebKit::WebPageProxy::setUpHighlightsObserver): The callback we get here is often on a background thread.
          So bounce it to main.

2021-07-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] Add new revision variable in pkgconfig file
        https://bugs.webkit.org/show_bug.cgi?id=227629

        Reviewed by Michael Catanzaro.

        Include SVN_REVISION as revision variable, useful for apps to know on which upstream SVN
        revision their WebKitGTK-based app is built on.

        * gtk/webkit2gtk-web-extension.pc.in:
        * gtk/webkit2gtk.pc.in:

2021-07-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279494.
        https://bugs.webkit.org/show_bug.cgi?id=227628

        Broke api test
        TestWebKitAPI.WKWebView.LoadSimulatedRequestUpdatesBackForwardList

        Reverted changeset:

        "loadSimulatedRequest: should do same delegate callbacks as
        loadHTMLString and loadData"
        https://bugs.webkit.org/show_bug.cgi?id=227599
        https://commits.webkit.org/r279494

2021-07-02  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r279477): WebKit_iosmac failed to build in : ModelElementControllerCocoa.mm:58:24: member reference type 'WebKit::WebPageProxy' is not a pointer; did you mean to use '.'?
        https://bugs.webkit.org/show_bug.cgi?id=227612
        <rdar://problem/80054936>

        Reviewed by Alan Bujtas.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::takeModelElementFullscreen):

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

        [macOS] Suspend WebProcesses that are in the process cache
        https://bugs.webkit.org/show_bug.cgi?id=227269

        Reviewed by Geoffrey Garen.

        Suspend WebProcesses that are in the process cache on macOS to make sure they use no CPU.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::platformSuspendProcess):
        (WebKit::WebProcessProxy::platformResumeProcess):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformSuspendProcess):
        (WebKit::WebProcessProxy::platformResumeProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setIsInProcessCache):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-07-01  Alex Christensen  <achristensen@webkit.org>

        loadSimulatedRequest: should do same delegate callbacks as loadHTMLString and loadData
        https://bugs.webkit.org/show_bug.cgi?id=227599

        Reviewed by Chris Dumez.

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

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

        Disable relay for UDP sockets when not needed
        https://bugs.webkit.org/show_bug.cgi?id=227253

        Reviewed by Eric Carlson.

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createUDPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h:
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
        (WebKit::NetworkRTCUDPSocketCocoaConnections::create):
        (WebKit::NetworkRTCUDPSocketCocoa::createUDPSocket):
        (WebKit::NetworkRTCUDPSocketCocoa::NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::createNWConnection):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::RTCSocketFactory::RTCSocketFactory):
        (WebKit::RTCSocketFactory::CreateUdpSocket):
        (WebKit::LibWebRTCProvider::createSocketFactory):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::createUdpSocket):
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:

2021-07-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Selecting or dragging images that contain recognizable text is difficult in Mail compose
        https://bugs.webkit.org/show_bug.cgi?id=227544

        Reviewed by Devin Rousso.

        Long pressing images in editable content on iOS initiates dragging, and a tap-and-half gesture over the image
        selects the entire image. Both of these are common interactions for image attachments in Mail compose that
        take precedence over new Live Text interactions, so there's no advantage to triggering image analysis on images
        in editable content.

        Avoid doing this extra work by adjusting `-imageAnalysisGestureDidBegin:` to bail early if the image is inside
        editable content.

        Tests:  ImageAnalysisTests.DoNotAnalyzeImagesInEditableContent
                ImageAnalysisTests.HandleImageAnalyzerError

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add an `isContentEditable` flag.

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

        Add a testing hook to return the gesture recognizer used to trigger image analysis.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView imageAnalysisGestureRecognizer]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):

        Pull logic for avoiding image analysis out into a separate lambda, and add a check for `isContentEditable`.

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

        Populate the `isContentEditable` flag based on whether or not the node found by the position information request
        is editable.

2021-07-01  Antoine Quint  <graouts@webkit.org>

        [Model] Restrict IPC calls to ARKit SPI availability and runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=227581

        Reviewed by Tim Horton.

        Guard all IPC calls related to <model> by the most appropriate platform-specific flag
        and also ensure that those calls don't do anything unless the runtime flag is also
        enabled.

        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::takeModelElementFullscreen):
        (WebKit::ModelElementController::modelElementDidCreatePreview):
        * UIProcess/ModelElementController.cpp:
        * UIProcess/ModelElementController.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::takeModelElementFullscreen):
        (WebKit::WebPageProxy::modelElementDidCreatePreview):
        (WebKit::WebPageProxy::modelElementPreviewDidObtainContextId):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::modelElementDidCreatePreview const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::modelElementPreviewDidObtainContextId):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

2021-07-01  Per Arne  <pvollan@apple.com>

        [macOS] Fix sandbox violations related to IOKit filtering
        https://bugs.webkit.org/show_bug.cgi?id=227572
        <rdar://78354215>

        Reviewed by Brent Fulgham.

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

2021-07-01  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] <select> menus should scroll to the selected option
        https://bugs.webkit.org/show_bug.cgi?id=227562
        <rdar://problem/77887668>

        Reviewed by Wenson Hsieh.

        Before iOS 15, <select> pickers were implemented using UIPickerView on
        iPhone and UITableView on iPad. Both these views gave WebKit the ability
        to scroll the view to the currently selected option.

        In iOS 15, <select> options are displayed in a context menu. WebKit does
        not have access to the menu's view hierarchy, and must rely on UIKit to
        perform the scrolling behavior.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker createMenu]):

        Adopt UIMenuOptionsSingleSelection to obtain UIKit behaviors for popup menus.

2021-07-01  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt async GroupActivity.sessions() iterable instead of GroupSessionObserver
        https://bugs.webkit.org/show_bug.cgi?id=227548
        <rdar://78240035>

        Reviewed by Sam Weinig.

        Rather than adopting GroupSessionObserver, which requires Combine, GroupActivity.sessions()
        uses AsyncSequence, a new Swift 5.5 feature, to allow clients to be notified that new
        sessions are avaliable.

        * UIProcess/Cocoa/GroupActivities/WKGroupSession.swift:
        (WKGroupSessionObserver.incomingSessionsTask):
        (WKGroupSessionObserver.receivedSession(_:)):
        (WKGroupSessionObserver.cancellables): Deleted.
        (WKGroupSessionObserver.recievedSession(_:)): Deleted.

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

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210
        <rdar://problem/79859045>

        Unreviewed, post commit fix.

        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h:
        (WTF::HashTraits<rtc::SocketAddress>::constructDeletedValue):
        (WTF::HashTraits<rtc::SocketAddress>::isDeletedValue):
        No need to set all deleted value slots, instead just rely on scope id being equal to numeric_limits<int>::min.
        Also ensure we do not add an empty/deleted address to the map.

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

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Migrate UDP socket handling from WebRTC physical socket server to nw API for Cocoa ports.

        For each UDP socket opened, we open a nw_listener that will listen to inbound connections.
        On inbound connection, we receive a nw_connection that we store in a address -> connection map.

        Whenever sending a packet, we look at the remote address.
        If needed, we create a nw_connection to that particular remote address and store it in the address -> connection map.
        We then use the pre-existing or newly created nw_connection to send the packet.

        Make sure to cancel NW connection in case of failure before releasing the socket.

        Covered by existing tests

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::setPlatformTCPSocketsEnabled):
        (WebKit::NetworkRTCProvider::setPlatformUDPSocketsEnabled):
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCSocketCocoa.h.
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm: Renamed from Source/WebKit/NetworkProcess/webrtc/NetworkRTCSocketCocoa.mm.
        (WebKit::tcpSocketQueue):
        (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket):
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        (WebKit::NetworkRTCTCPSocketCocoa::close):
        (WebKit::NetworkRTCTCPSocketCocoa::setOption):
        (WebKit::NetworkRTCTCPSocketCocoa::createMessageBuffer):
        (WebKit::NetworkRTCTCPSocketCocoa::sendTo):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h: Added.
        (WTF::DefaultHash<rtc::SocketAddress>::hash):
        (WTF::DefaultHash<rtc::SocketAddress>::equal):
        (WTF::HashTraits<rtc::SocketAddress>::emptyValue):
        (WTF::HashTraits<rtc::SocketAddress>::constructDeletedValue):
        (WTF::HashTraits<rtc::SocketAddress>::isDeletedValue):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm: Added.
        (WebKit::NetworkRTCUDPSocketCocoaConnections::create):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::WTF_GUARDED_BY_LOCK):
        (WebKit::udpSocketQueue):
        (WebKit::NetworkRTCUDPSocketCocoa::createUDPSocket):
        (WebKit::NetworkRTCUDPSocketCocoa::NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoa::~NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoa::close):
        (WebKit::NetworkRTCUDPSocketCocoa::setOption):
        (WebKit::NetworkRTCUDPSocketCocoa::sendTo):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::close):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::setOption):
        (WebKit::processUDPData):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::createNWConnection):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::setupNWConnection):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::sendTo):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::setConnection):

2021-07-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Simplify GraphicsContextCairo creation
        https://bugs.webkit.org/show_bug.cgi?id=227575

        Reviewed by Žan Doberšek.

        Use the new GraphicsContextCairo constructors.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):

2021-07-01  Jer Noble  <jer.noble@apple.com>

        [Mac] (Re-)enable GroupActivities after upstreaming
        https://bugs.webkit.org/show_bug.cgi?id=227546

        Reviewed by Eric Carlson.

        Fix some build errors exposed by enabling GroupActivities.

        * UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm:

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

        [Model] [macOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227530
        <rdar://problem/79968206>

        Reviewed by Dean Jackson.

        On macOS, ASVInlinePreview requires an instance in both the WebProcess and the UIProcess to exist with a matching UUID.

        On the WebKit side, in the UIProcess, we receive a message from the WebProcess when the ASVInlinePreview in that process
        was created with its generated UUID. We provide this to the ModelElementController, set the remote connection up and load
        the file. When those tasks complete successfully we message back the WebProcess with the UUID and the provided ElementContext
        to talk back to the HTMLModelElement instance that initiated the message to the UIProcess in the first place.

        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
        (WebKit::ModelElementController::modelElementDidCreatePreview):
        * UIProcess/ModelElementController.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::modelElementDidCreatePreview):
        (WebKit::WebPageProxy::modelElementPreviewDidObtainContextId):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::modelElementDidCreatePreview const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::modelElementDidCreatePreview):
        (WebKit::WebPage::modelElementPreviewDidObtainContextId):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-06-30  Chris Dumez  <cdumez@apple.com>

        Regression(r278737): WebContent crash when calling [WKWebView loadHTMLString:] with an invalid URL
        https://bugs.webkit.org/show_bug.cgi?id=227560
        <rdar://79815425>

        Reviewed by Alex Christensen.

        Make sure the parsed URL is valid in WebPage::loadData() before getting its protocol and calling
        LegacySchemeRegistry::registerURLSchemeAsHandledBySchemeHandler() with it. Passing a null String
        to LegacySchemeRegistry::registerURLSchemeAsHandledBySchemeHandler() causes crashes.

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

2021-06-30  Megan Gardner  <megan_gardner@apple.com>

        Add ID and versioning support for AppHighlights
        https://bugs.webkit.org/show_bug.cgi?id=227279

        Reviewed by Tim Horton.

        Reformat the storage of Highlight Data to allow for accurate deletion of active
        highlights, as well as making them more robust and future-proof.

        Also found an issue with creating SharedBuffers from the memory map, in that the ipcHandle size
        should be used instead of the sharedMemory->size(). 

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

2021-06-30  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279405.

        Casued 50+ webrtc crashes on Big Sur Debug

        Reverted changeset:

        "[Cocoa] Migrate WebRTC UDP socket handling to NW API"
        https://bugs.webkit.org/show_bug.cgi?id=227210
        https://commits.webkit.org/r279405

2021-06-30  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/ios/ProcessAssertionIOS.mm:

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

        [iOS] [Live Text] "Text from Camera" should not be shown in callout bar when selecting text
        https://bugs.webkit.org/show_bug.cgi?id=227535
        rdar://79936981

        Reviewed by Devin Rousso.

        Match new system behavior in rdar://79758142 by not showing the "Text from Camera" item in the callout bar when
        the selection is a (non-collapsed) range.

        Test: WebKit.CaptureTextFromCamera

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

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

        [Model] [iOS] Add support for displaying <model> in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=227443
        <rdar://problem/79859937>

        Reviewed by Sam Weinig.

        Displaying a model element in fullscreen requires making some calls on the ASVInlinePreview object
        created by a WKModelView. We send the content layer ID we receive through an IPC call from the
        WebProcess to the new ModelElementController. We then look at the remote layer tree for a node
        matching that ID and find its related UIView. If we find a WKModelView, as expected, we can carry 
        on and call -[ASVInlinePreview createFullscreenInstanceWithInitialFrame:previewOptions:completionHandler:]
        to enter fullscreen using the presentingViewController provided by the UI client, and then observe
        when we exit fullscreen using -[ASVInlinePreview observeDismissFullscreenWithCompletionHandler:]
        to make sure the presenting view controller is removed.

        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/ModelElementControllerCocoa.mm: Added.
        (WebKit::ModelElementController::takeModelElementFullscreen):
        * UIProcess/ModelElementController.cpp: Added.
        (WebKit::ModelElementController::ModelElementController):
        * UIProcess/ModelElementController.h: Added.
        (WebKit::ModelElementController::page):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::takeModelElementFullscreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::takeModelElementFullscreen const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeModelElementFullscreen):
        * WebProcess/WebPage/WebPage.h:

2021-06-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r276969.

        Causes previous assertion to get released before the new one
        is taken (asynchronously)

        Reverted changeset:

        "[iOS] Use async API to take RunningBoard assertions"
        https://bugs.webkit.org/show_bug.cgi?id=225324
        https://commits.webkit.org/r276969

2021-06-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r279155.

        Caused a PLT5 regression

        Reverted changeset:

        "[macOS] Suspend WebProcesses that are in the process cache"
        https://bugs.webkit.org/show_bug.cgi?id=227269
        https://commits.webkit.org/r279155

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

        [Cocoa] Migrate WebRTC UDP socket handling to NW API
        https://bugs.webkit.org/show_bug.cgi?id=227210

        Reviewed by Eric Carlson.

        Migrate UDP socket handling from WebRTC physical socket server to nw API for Cocoa ports.

        For each UDP socket opened, we open a nw_listener that will listen to inbound connections.
        On inbound connection, we receive a nw_connection that we store in a address -> connection map.

        Whenever sending a packet, we look at the remote address.
        If needed, we create a nw_connection to that particular remote address and store it in the address -> connection map.
        We then use the pre-existing or newly created nw_connection to send the packet.

        Make sure to cancel NW connection in case of failure before releasing the socket.

        Covered by existing tests

        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::createUDPSocket):
        (WebKit::NetworkRTCProvider::createClientTCPSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:
        (WebKit::NetworkRTCProvider::setPlatformTCPSocketsEnabled):
        (WebKit::NetworkRTCProvider::setPlatformUDPSocketsEnabled):
        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCSocketCocoa.h.
        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm: Renamed from Source/WebKit/NetworkProcess/webrtc/NetworkRTCSocketCocoa.mm.
        (WebKit::tcpSocketQueue):
        (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket):
        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
        (WebKit::NetworkRTCTCPSocketCocoa::close):
        (WebKit::NetworkRTCTCPSocketCocoa::setOption):
        (WebKit::NetworkRTCTCPSocketCocoa::createMessageBuffer):
        (WebKit::NetworkRTCTCPSocketCocoa::sendTo):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.h: Added.
        (WTF::DefaultHash<rtc::SocketAddress>::hash):
        (WTF::DefaultHash<rtc::SocketAddress>::equal):
        (WTF::HashTraits<rtc::SocketAddress>::emptyValue):
        (WTF::HashTraits<rtc::SocketAddress>::constructDeletedValue):
        (WTF::HashTraits<rtc::SocketAddress>::isDeletedValue):
        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm: Added.
        (WebKit::NetworkRTCUDPSocketCocoaConnections::create):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::WTF_GUARDED_BY_LOCK):
        (WebKit::udpSocketQueue):
        (WebKit::NetworkRTCUDPSocketCocoa::createUDPSocket):
        (WebKit::NetworkRTCUDPSocketCocoa::NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoa::~NetworkRTCUDPSocketCocoa):
        (WebKit::NetworkRTCUDPSocketCocoa::close):
        (WebKit::NetworkRTCUDPSocketCocoa::setOption):
        (WebKit::NetworkRTCUDPSocketCocoa::sendTo):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::close):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::setOption):
        (WebKit::processUDPData):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::createNWConnection):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::setupNWConnection):
        (WebKit::NetworkRTCUDPSocketCocoaConnections::sendTo):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
        (WebKit::LibWebRTCSocketFactory::setConnection):

2021-06-28  Antoine Quint  <graouts@webkit.org>

        [Model] [iOS] Add support for manipulating <model> inline
        https://bugs.webkit.org/show_bug.cgi?id=227448
        <rdar://problem/79863579>

        Reviewed by Tim Horton.

        ASVInlinePreview instances allow for UITouch and UIEvent objects to be forwarded in order to manipulate
        the object inline. We create a UIGestureRecognizer subclass that is attached to WKModelView and forwards
        touchesBegan: and similar UIResponder messages over to the ASVInlinePreview managed by the WKModelView.
        This allows multiple <model> elements to be manipulated at once.

        We will add support for disallowing such interaction with an attribute and/or a call to preventDefault()
        at a later time.

        * SourcesCocoa.txt:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (WebKit::collectDescendantViewsAtPoint):
        (-[UIView _web_findDescendantViewAtPoint:withEvent:]):
        * UIProcess/ios/WKModelInteractionGestureRecognizer.h: Added.
        * UIProcess/ios/WKModelInteractionGestureRecognizer.mm: Added.
        (-[WKModelInteractionGestureRecognizer touchesBegan:withEvent:]):
        (-[WKModelInteractionGestureRecognizer touchesMoved:withEvent:]):
        (-[WKModelInteractionGestureRecognizer touchesEnded:withEvent:]):
        (-[WKModelInteractionGestureRecognizer touchesCancelled:withEvent:]):
        * UIProcess/ios/WKModelView.h:
        * UIProcess/ios/WKModelView.mm:
        (-[WKModelView initWithModel:]):
        * WebKit.xcodeproj/project.pbxproj:

2021-06-29  Cameron McCormack  <heycam@apple.com>

        Don't null check destination in the RemoteRenderingBackend::nextDestinationImageBufferAfterApply main loop
        https://bugs.webkit.org/show_bug.cgi?id=227475

        Reviewed by Wenson Hsieh.

        We already null check it and return early as part of the
        MESSAGE_CHECK_WITH_RETURN_VALUE call just above.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):

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

        Loading WebM hangs if server sends only small amount of data
        https://bugs.webkit.org/show_bug.cgi?id=226217
        <rdar://problem/78709010>

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-webm-stall.html

        Adopt FigThread{Un,}RegisterAbortAction() when blocking against track parsing.

        CoreMedia will attempt to abort reads during AVPlayer teardown, but because the parsing
        thread is blocked on a Condition variable in WebKit code, the abort request has no effect.
        Adopt methods from CoreMedia to run code during an abort request, and wrap these calls in a
        stack-based object. The new AbortAction object takes a Condition variable to notify during
        an abort, and its aborted() state can be queried by the Condition's predicate.

        Drive-by Fix: enable running an unsigned MTFormatReaderPlugin in the GPU process for 
        engineering builds.

        * Configurations/BaseTarget.xcconfig:
        * GPUProcess/mac/GPUProcessMac.mm:
        (WebKit::GPUProcess::initializeProcess):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::AbortAction::AbortAction):
        (WebKit::AbortAction::~AbortAction):
        (WebKit::AbortAction::aborted const):
        (WebKit::AbortAction::action):
        (WebKit::MediaFormatReader::copyProperty):
        (WebKit::MediaFormatReader::copyTrackArray):

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

        [GTK][WPE] Check GApplication has a valid ID before trying to create the flatpack info
        https://bugs.webkit.org/show_bug.cgi?id=227344

        Reviewed by Michael Catanzaro.

        Show a warning if GApplication is used but app ID is nullptr.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::createFlatpakInfo):

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

        [GTK][WPE] Bubblewrap: allow to set DBus proxy logging per proxy
        https://bugs.webkit.org/show_bug.cgi?id=227447

        Reviewed by Michael Catanzaro.

        It's currently global using env var WEBKIT_ENABLE_DBUS_PROXY_LOGGING. Add WEBKIT_ENABLE_A11Y_DBUS_PROXY_LOGGING
        to enable logging only on a11y bus.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::XDGDBusProxyLauncher::launch):
        (WebKit::bindA11y):
        (WebKit::bubblewrapSpawn):

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

        Remove RemoteAudioMediaStreamTrackRenderer and RemoteAudioMediaStreamTrackRendererManager
        https://bugs.webkit.org/show_bug.cgi?id=227438

        Reviewed by Eric Carlson.

        Remove code no longer enabled.
        This code was obsoleted by RemoteAudioMediaStreamTrackRendererInternalUnitManager and friends.
        Update GPUProcess to not exit if RemoteAudioMediaStreamTrackRendererInternalUnitManager has some units,
        like was done by RemoteAudioMediaStreamTrackRendererManager.

        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::~GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::allowsExitUnderMemoryPressure const):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::audioMediaStreamTrackRendererQueue): Deleted.
        * GPUProcess/GPUProcess.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp: Removed.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h: Removed.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in: Removed.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
        (WebKit::renderCallback):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::Unit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::start):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h:
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::hasUnits):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp: Removed.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h: Removed.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.messages.in: Removed.
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp: Removed.
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h: Removed.
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererIdentifier.h: Removed.

2021-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r279310): Occasional crash when focusing login fields on iPad with a software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=227472
        rdar://79876040

        Reviewed by Tim Horton.

        I added a mechanism in r279310 to defer calling `-[WKContentView _setSuppressSoftwareKeyboard:NO]` until we've
        gotten a response from the web process containing an up-to-date autocorrection context. However, in the case
        where the WKWebView client sets `_suppressSoftwareKeyboard` to `YES` and then immediately to `NO` underneath the
        scope of a call to `-_webView:willStartInputSession:`, we'll end up calling into `-_setSuppressSoftwareKeyboard:`
        inside the scope of `-requestAutocorrectionContextWithCompletionHandler:`, when we've received an
        autocorrection context while sync-waiting. This is problematic because it breaks UIKeyboardTaskQueue's state,
        since the call to `-_setSuppressSoftwareKeyboard:` will attempt to enqueue a new task after the previous task's
        context has already returned execution to the parent.

        To fix this, we instead invoke `self._suppressSoftwareKeyboard = NO;` *before* calling the completion block in
        `-_handleAutocorrectionContext:`. This allows the request for an autocorrection context underneath
        `-_setSuppressSoftwareKeyboard:` to be handled (and completed) as a child task of the previous task, which keeps
        UIKeyboardTaskQueue in a valid state.

        Test: fast/forms/ios/suppress-software-keyboard-while-focusing-input.html

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

2021-06-28  Dana Estra  <destra@apple.com>

        Refactor MacOS keyboard scrolling and use KeyboardScroll struct
        https://bugs.webkit.org/show_bug.cgi?id=226986

        Reviewed by Tim Horton.
        
        In addition to notes underneath, changed usage of WebKit::KeyboardScroll, WebKit::ScrollingIncrement, and WebKit::ScrollingDirection to
        WebCore::KeyboardScroll, WebCore::ScrollGranularity, and WebCore::ScrollDirection, respectively.

        * UIProcess/ios/WKKeyboardScrollingAnimator.h:
        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
        (-[WKKeyboardScrollingAnimator parameters]):
        
        Deleted. Now lives in WebCore/KeyboardScroll.h.
        
        (unitVector):
        
        Deleted. Now lives in WebCore/KeyboardScroll.h.
        
        (perpendicularAbsoluteUnitVector):
        (boxSide):
        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
        (-[WKKeyboardScrollingAnimator beginWithEvent:]):
        (farthestPointInDirection):
        (-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::performNonEditingBehaviorForSelector):
        
        Added switch that removes selectors that are now handled by
        EventHandler when EventHandlerDrivenSmoothKeyboardScrolling
        is enabled.

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

        NetworkProcessProxy::networkProcessDidTerminate() should copy process pools before iterating over them
        https://bugs.webkit.org/show_bug.cgi?id=227468

        Reviewed by Alex Christensen.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):

2021-06-28  Sihui Liu  <sihui_liu@apple.com>

        Nullptr crash in ResourceLoadStatisticsDatabaseStore::allAttributedPrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=227462
        rdar://50772934

        Reviewed by Chris Dumez.

        Return early if statement cannot be created.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::allAttributedPrivateClickMeasurement):

2021-06-28  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r279305) [Mac DEBUG] 4 SOAuthorizationRedirect Tests are Crashing with Assert: !m_sheetWindow
        https://bugs.webkit.org/show_bug.cgi?id=227454
        <rdar://problem/79871423>

        Reviewed by Kate Cheney.

        The new assertion is wrong in the case that the app is hidden. When minimized (or hidden) we need to remember
        to dismiss the sheet once Cocoa restores the app to visible state. So the m_sheetWindow may still exist after
        returning from 'dismissViewController'. We should assert that either m_sheetWindow is nullptr, or that both
        m_sheetWindow and m_sheetWindowWillCloseObserver exist. 

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

2021-06-28  Kate Cheney  <katherine_cheney@apple.com>

        I-beam pointer is vertical for vertical text
        https://bugs.webkit.org/show_bug.cgi?id=227414
        <rdar://problem/77564647>

        Reviewed by Tim Horton.

        Pass the orientation from the renderer to the WKContentView. Rename
        caretHeight to caretLength now that we use it to calculate the I-beam
        size for vertical text.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointerInteraction:styleForRegion:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::populateCaretContext):

2021-06-28  Per Arne  <pvollan@apple.com>

        Pass correct value of AX per app settings to the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=227441
        <rdar://problem/79857797>

        Reviewed by Brent Fulgham.

        Pass value of type AXValueState instead of a boolean value for per app AX settings.

        * Shared/AccessibilityPreferences.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::accessibilityPreferences):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityPreferencesDidChange):

2021-06-28  Alex Christensen  <achristensen@webkit.org>

        RELEASE_ASSERT hit in NetworkSessionCocoa::removeWebSocketTask when using WKWebViewConfiguration._attributedBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=227420
        <rdar://79609212>

        Reviewed by Brady Eidson.

        WKWebViewConfiguration._attributedBundleIdentifier makes us use a SessionSet per WKWebView.
        When the WKWebView is destroyed with an open WebSocket, there's a race condition between the
        NetworkSessionCocoa::removeWebPageNetworkParameters message coming from the UI process and the
        NetworkConnectionToWebProcess::didClose message coming from the closing of the web process, which
        calls NetworkSessionCocoa::removeWebSocketTask which currently expects the WebSocketTask to still
        be there.  Instead, keep a WeakPtr<SessionSet> and don't remove it if the SessionSet's map is gone.

        I wrote an API test that hits this condition sometimes when HAVE_NSURLSESSION_WEBSOCKET is true.

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::removeWebSocketTask):
        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::~NetworkSocketChannel):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        (WebKit::SessionSet::create):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::sessionSetForPage):
        (WebKit::NetworkSessionCocoa::sessionSetForPage const):
        (WebKit::SessionSet::initializeEphemeralStatelessSessionIfNeeded):
        (WebKit::SessionSet::isolatedSession):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        (WebKit::NetworkSessionCocoa::addWebSocketTask):
        (WebKit::NetworkSessionCocoa::removeWebSocketTask):
        (WebKit::NetworkSessionCocoa::SessionSet::initializeEphemeralStatelessSessionIfNeeded): Deleted.
        (WebKit::NetworkSessionCocoa::SessionSet::isolatedSession): Deleted.
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        (WebKit::WebSocketTask::sessionSet):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::WebSocketTask):

2021-06-28  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):
        * Shared/mac/MediaFormatReader/CoreMediaWrapped.cpp:
        (WebKit::createWrapper):
        (WebKit::wrapperStorage):
        (WebKit::wrapperVTable):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::copyProperty):
        * Shared/mac/MediaFormatReader/MediaSampleByteRange.cpp:
        (WebKit::MediaSampleByteRange::MediaSampleByteRange):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        * WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2021-06-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        Possible build breakage after r279221 in some unified build configurations
        https://bugs.webkit.org/show_bug.cgi?id=227440

        Unreviewed build fix.

        Add missing #import <wtf/MachSendRight.h> since
        the code use MachSendRight. The code happens to work on default configuration
        due to unified build.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:

2021-06-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279322.
        https://bugs.webkit.org/show_bug.cgi?id=227434


        Reverted changeset:

        "Not all uses of AudioToolbox framework use soft linking"
        https://bugs.webkit.org/show_bug.cgi?id=227250
        https://commits.webkit.org/r279322

2021-06-27  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):
        * Shared/mac/MediaFormatReader/CoreMediaWrapped.cpp:
        (WebKit::createWrapper):
        (WebKit::wrapperStorage):
        (WebKit::wrapperVTable):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::copyProperty):
        * Shared/mac/MediaFormatReader/MediaSampleByteRange.cpp:
        (WebKit::MediaSampleByteRange::MediaSampleByteRange):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        * WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2021-06-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS build after rdar://76781873

        Remove support for `-[UIResponder _insertTextFromCamera:]` in WebKit2, now that UIKit only supports the public
        API version (`-[UIResponder captureTextFromCamera:]`).

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView _insertTextFromCameraForWebView:]): Deleted.

2021-06-27  Antoine Quint  <graouts@webkit.org>

        [Model] [iOS] Add support for rendering model resources
        https://bugs.webkit.org/show_bug.cgi?id=227392
        <rdar://problem/79770136>

        Reviewed by Tim Horton.

        Add a new WKModelView class which manages an ASVInlinePreview and displays its layer.
        The current incarnation of the ASVInlinePreview SPI requires a URL to a file to specify
        the resource, so we write a file to the temporary directory added in 279267 with the data
        wrapped in the Model object passed through the remote layer tree. Ultimately we will be
        able to use an SPI that does not require a file and instead will allow data to be passed
        directly, this is purely for a temporary experimentation.

        * Platform/Logging.h:
        * SourcesCocoa.txt:
        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::makeNode):
        * UIProcess/ios/WKModelView.h: Added.
        * UIProcess/ios/WKModelView.mm: Added.
        (-[WKModelView preview]):
        (-[WKModelView initWithFrame:]):
        (-[WKModelView initWithCoder:]):
        (-[WKModelView initWithModel:]):
        (-[WKModelView createFileForModel:]):
        (-[WKModelView layoutSubviews]):
        (-[WKModelView updateBounds]):
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Safari sometimes hangs under sync IPC in `-[WKWebView _setSuppressSoftwareKeyboard:]`
        https://bugs.webkit.org/show_bug.cgi?id=227424
        rdar://79745385

        Reviewed by Tim Horton.

        When activating streamlined AutoFill, Safari calls UIKit SPI (`-_setSuppressSoftwareKeyboard:`) on WKWebView to
        ensure that the normal software keyboard doesn't briefly appear instead of the AutoFill input view; after
        requesting AutoFill credentials, Safari then stops suppressing the software keyboard by setting the SPI property
        back to NO. In WebKit, we override `-[WKWebView _setSuppressSoftwareKeyboard:]`, such that WKContentView's
        keyboard suppression state follows the web view's state (this is necessary, since WKContentView is the actual
        `-firstResponder` when editing focused text inputs). However, when changing software keyboard suppression from
        YES to NO, UIKit reloads input views and (in the process) calls into
        `-requestAutocorrectionContextWithCompletionHandler:`, which then makes a sync IPC call into the web process.

        To avoid this sync IPC call, we refactor the implementation of `-[WKWebView _setSuppressSoftwareKeyboard:]`,
        such that we don't immediately attempt to unsuppress the software keyboard by calling into WKContentView.
        Instead, we asynchronously request an autocorrection context from the web process, and then call
        `-[WKContentView _setSuppressSoftwareKeyboard:NO]` after the autocorrection context request completes (using
        the last known autocorrection context data in the UI process rather than making a sync IPC call).

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setSuppressSoftwareKeyboard:]):

        Call into `-updateSoftwareKeyboardSuppressionStateFromWebView` below.

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

        Invoke `-unsuppressSoftwareKeyboardUsingLastAutocorrectionContextIfNeeded` to ensure that we stop software
        keyboard suppression if the web process terminates while we're waiting for autocorrection context data to
        arrive.

        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView _handleAutocorrectionContext:]):
        (-[WKContentView updateSoftwareKeyboardSuppressionStateFromWebView]):

        Add a new helper that keeps WKContentView's software keyboard suppression state in sync with the WKWebView's
        software keyboard suppression state. In the case where we're supressing the software keyboard, we can simply
        call into `-[WKContentView _setSuppressSoftwareKeyboard:]` right away, since UIKit won't try to request an
        autocorrection context.

        However, in the case where we're unsuppressing the software keyboard, set a new flag, don't immediately forward
        the call to WKContentView. Instead, set the `_unsuppressSoftwareKeyboardAfterNextAutocorrectionContextUpdate`
        flag to YES and call into WebPageProxy to request an updated autocorrection context. Upon receiving the response
        in `-[WKContentView _handleAutocorrectionContext:]`, we then unset the flag and unsuppress the software keyboard
        (crucially, using `_lastAutocorrectionContext` instead of making a synchronous call back to the web content
        process).

        (-[WKContentView unsuppressSoftwareKeyboardUsingLastAutocorrectionContextIfNeeded]):

2021-06-25  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Add logging and clean up AppSSO flows 
        https://bugs.webkit.org/show_bug.cgi?id=227379

        Reviewed by Kate Cheney.

        This patch adds detailed logging to understand the flows through the AppSSO authentication code,
        and adds clean-up code in more places to ensure that the modal sheet used by AppSSO is dismissed
        in cases where the authentication has completed (or failed).

        * UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm:
        (WebKit::NavigationSOAuthorizationSession::shouldStartInternal): Adds new logging.
        (WebKit::NavigationSOAuthorizationSession::webViewDidMoveToWindow): Ditto.
        (WebKit::NavigationSOAuthorizationSession::pageActiveURLDidChangeDuringWaiting const): Ditto.
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        (WebKit::PopUpSOAuthorizationSession::shouldStartInternal): Adds new logging.
        (WebKit::PopUpSOAuthorizationSession::fallBackToWebPathInternal): Ditto.
        (WebKit::PopUpSOAuthorizationSession::abortInternal): Ditto.
        (WebKit::PopUpSOAuthorizationSession::completeInternal): Ditto.
        (WebKit::PopUpSOAuthorizationSession::close): Ditto.
        (WebKit::PopUpSOAuthorizationSession::initSecretWebView): Ditto.
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:
        (WebKit::RedirectSOAuthorizationSession::fallBackToWebPathInternal): Adds new logging.
        (WebKit::RedirectSOAuthorizationSession::abortInternal): Ditto.
        (WebKit::RedirectSOAuthorizationSession::completeInternal): Ditto.
        (WebKit::RedirectSOAuthorizationSession::beforeStart): Ditto.
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.mm:
        (WebKit::SOAuthorizationCoordinator::tryAuthorize): Adds new logging.
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::stateString const): Added.
        (WebKit::SOAuthorizationSession::~SOAuthorizationSession): Add new logging, and ensure modal sheet is dismissed.
        (WebKit::SOAuthorizationSession::becomeCompleted): Added new logging.
        (WebKit::SOAuthorizationSession::shouldStart): Ditto.
        (WebKit::SOAuthorizationSession::start): Ditto.
        (WebKit::SOAuthorizationSession::continueStartAfterGetAuthorizationHints): Ditto.
        (WebKit::SOAuthorizationSession::continueStartAfterDecidePolicy): Ditto.
        (WebKit::SOAuthorizationSession::fallBackToWebPath): Add new logging, and ensure modal sheet is dismissed.
        (WebKit::SOAuthorizationSession::abort): Ditto.
        (WebKit::SOAuthorizationSession::complete): Ditto.
        (WebKit::SOAuthorizationSession::presentViewController): Added new logging, and dismiss modal if an existing
        view is in place.
        (WebKit::SOAuthorizationSession::dismissModalSheetIfNecessary): Added.
        (WebKit::SOAuthorizationSession::dismissViewController): Use new helper function.
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::SubFrameSOAuthorizationSession::fallBackToWebPathInternal): Adds new logging.
        (WebKit::SubFrameSOAuthorizationSession::abortInternal): Ditto.
        (WebKit::SubFrameSOAuthorizationSession::completeInternal): Ditto.
        (WebKit::SubFrameSOAuthorizationSession::beforeStart): Ditto.
        (WebKit::SubFrameSOAuthorizationSession::didFinishLoad): Ditto.
        (WebKit::SubFrameSOAuthorizationSession::loadRequestToFrame): Ditto.
        * UIProcess/Cocoa/SOAuthorization/WKSOAuthorizationDelegate.mm:
        (-[WKSOAuthorizationDelegate authorization:presentViewController:withCompletion:]): Adds new logging.
        (-[WKSOAuthorizationDelegate authorizationDidNotHandle:]): Ditto.
        (-[WKSOAuthorizationDelegate authorizationDidCancel:]): Ditto.
        (-[WKSOAuthorizationDelegate authorizationDidComplete:]): Ditto.
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithHTTPAuthorizationHeaders:]): Ditto.
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithHTTPResponse:httpBody:]): Ditto.
        (-[WKSOAuthorizationDelegate authorization:didCompleteWithError:]): Ditto.
        (-[WKSOAuthorizationDelegate setSession:]): Ditto.

2021-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web process sometimes crashes under findDataDetectionResultElementInImageOverlay
        https://bugs.webkit.org/show_bug.cgi?id=227412
        rdar://79588091

        Reviewed by Devin Rousso.

        Speculatively fix the crash by ensuring that the hit-tested text node inside an image overlay is inside the
        shadow root of the element responding to click events, and that the element responding to click events contains
        an image overlay.

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

2021-06-25  Per Arne  <pvollan@apple.com>

        [macOS] Add missing methods to IOKit filter
        https://bugs.webkit.org/show_bug.cgi?id=227398
        <rdar://79487528>

        Reviewed by Brent Fulgham.

        Add missing methods to the IOAccelerator IOKit filter on macOS.

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

2021-06-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r279208.
        https://bugs.webkit.org/show_bug.cgi?id=227381

        Broke the Apple Windows build.

        Reverted changeset:

        "Not all uses of AudioToolbox framework use soft linking"
        https://bugs.webkit.org/show_bug.cgi?id=227250
        https://trac.webkit.org/changeset/279208

2021-06-25  Peng Liu  <peng.liu6@apple.com>

        Explicitly invalidate WKFullScreenViewController after a video exits fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=227372

        Reviewed by Eric Carlson.

        Since `WKFullScreenWindowController` owns `WKFullScreenViewController`,
        we had better let `WKFullScreenWindowController` manage the life cycle
        of `WKFullScreenViewController`.

        * UIProcess/ios/fullscreen/WKFullScreenViewController.h:
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        (-[WKFullScreenViewController initWithWebView:]):
        (-[WKFullScreenViewController invalidate]):
        (-[WKFullScreenViewController dealloc]):
        (-[WKFullScreenViewController showUI]):
        (-[WKFullScreenViewController hideUI]):
        (-[WKFullScreenViewController videoControlsManagerDidChange]):
        (-[WKFullScreenViewController setAnimatingViewAlpha:]):
        (-[WKFullScreenViewController setPrefersStatusBarHidden:]):
        (-[WKFullScreenViewController setPrefersHomeIndicatorAutoHidden:]):
        (-[WKFullScreenViewController setPlaying:]):
        (-[WKFullScreenViewController setPictureInPictureActive:]):
        (-[WKFullScreenViewController setAnimating:]):
        (-[WKFullScreenViewController _manager]):
        (-[WKFullScreenViewController _effectiveFullscreenInsets]):
        (-[WKFullScreenViewController _cancelAction:]):
        (-[WKFullScreenViewController _togglePiPAction:]):
        (-[WKFullScreenViewController _touchDetected:]):
        (-[WKFullScreenViewController _statusBarFrameDidChange:]):
        (-[WKFullScreenViewController _updateWebViewFullscreenInsets]):
        (-[WKFullScreenViewController _showPhishingAlert]):
        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
        (-[WKFullScreenWindowController _completedExitFullScreen]):

2021-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279266.
        https://bugs.webkit.org/show_bug.cgi?id=227402

        Causes crash loop

        Reverted changeset:

        "Remove references to order files"
        https://bugs.webkit.org/show_bug.cgi?id=227377
        https://trac.webkit.org/changeset/279266

2021-06-25  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Guard Cairo inclusions in shared GLib API implementation files
        https://bugs.webkit.org/show_bug.cgi?id=227370

        Reviewed by Philippe Normand.

        For cross-port GLib API implementation, different Cairo inclusions are
        moved into appropriate build guards tha match the build guards where
        Cairo is then used.

        * UIProcess/API/glib/WebKitFaviconDatabase.cpp:
        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU):
        * UIProcess/API/glib/WebKitWebView.cpp:

2021-06-24  Antoine Quint  <graouts@webkit.org>

        [Model] Create a sandbox extension for a temporary directory to store model resources
        https://bugs.webkit.org/show_bug.cgi?id=227359

        Reviewed by Tim Horton.

        The SPIs we will use to render <model> resources expect a file URL to load and render the model.
        Before we adopt these SPIs, we extend the sandbox to allow writing to a temporary directory where
        we will store these resources.

        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::defaultModelElementCacheDirectory):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resolvedModelElementCacheDirectory const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::modelElementCacheDirectory const):
        (WebKit::WebsiteDataStoreConfiguration::setModelElementCacheDirectory):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

2021-06-24  Sihui Liu  <sihui_liu@apple.com>

        Remove references to order files
        https://bugs.webkit.org/show_bug.cgi?id=227377
        rdar://76070556

        Reviewed by Mark Lam.

        * Configurations/WebKit.xcconfig:

2021-06-24  Chris Dumez  <cdumez@apple.com>

        REGRESSION: (r279244) [ Mac ] http/tests/workers/service/postmessage-after-terminate.https.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=227380
        <rdar://problem/79748648>

        Unreviewed, drop protector added in r279244 inside establishServiceWorkerContext() as it is what caused this test
        to time out. I am not sure why this is happening yet but I am doing this partial revert to get us back in a good
        state.

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

2021-06-24  Venky Dass  <yaranamavenkataramana@apple.com>

        Crash in WebFrameLoaderClient::dispatchDidStartProvisionalLoad after provisionalLoader is gone. 
        https://bugs.webkit.org/show_bug.cgi?id=226979

        Reviewed by Ryosuke Niwa.

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

2021-06-24  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] RELEASE_ASSERT in RemoteResourceCacheProxy::didFinalizeRenderingUpdate() may fire if GPUP is relaunched
        https://bugs.webkit.org/show_bug.cgi?id=227229
        <rdar://79147947>

        Reviewed by Myles C. Maxfield.

        When the GPUP is relaunched remoteResourceCacheWasDestroyed() clears
        m_fontIdentifierToLastRenderingUpdateVersionMap but it does not reset
        m_numberOfFontsUsedInCurrentRenderingUpdate. This will make it always
        greater than m_fontIdentifierToLastRenderingUpdateVersionMap.size().
        And this is why the assertion fires.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):

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

        Fix WKDownloadDelegate header doc
        https://bugs.webkit.org/show_bug.cgi?id=227378

        Reviewed by Brady Eidson.

        This removes the following sentence:
        "If this is a download of a blob URL, response will be null."
        This was correct in an earlier iteration of the implementation of this API, but is now incorrect
        and verified by the WKDownload.BlobResponse API test.

        * UIProcess/API/Cocoa/WKDownloadDelegate.h:

2021-06-24  Kate Cheney  <katherine_cheney@apple.com>

        WKWebView loadSimulatedRequest does not set attribution value for url requests within html content
        https://bugs.webkit.org/show_bug.cgi?id=227266
        <rdar://problem/79316911>

        Reviewed by Brent Fulgham.

        We currently pass the attribution value from the main NSURLRequest
        passed into WebPageProxy::loadRequest by setting a value on the WebPage
        document loader that gets passed to all requests initiated by that main
        navigation. This patch adds the same functionality for
        WebPageProxy::loadSimulatedRequest, which could initiate URL requests
        from HTML content.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadSimulatedRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadSimulatedRequestAndResponse):

2021-06-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Automatically apply system minimum layout margins as scroll view content insets
        https://bugs.webkit.org/show_bug.cgi?id=227178
        rdar://76784095

        Reviewed by Tim Horton.

        Respect `-[UIViewController systemMinimumLayoutMargins]` on watchOS by treating them in a similar way as safe
        area insets, such that we avoid laying out parts of the web page within these margins unless the page's meta
        viewport specifies `viewport-fit=cover`. On watch, avoiding these layout margins is crucial.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _computedObscuredInsetForSafeBrowsingWarning]):
        (-[WKWebView _contentInsetsFromSystemMinimumLayoutMargins]):

        Add a helper method to compute the amount of additional content inset we need to apply to the scroll view in
        order for content to fit within WKWebView's view controller's `-systemMinimumLayoutMargins`. Note that this
        accounts for cases where the web view's frame is already inset relative to the view controller's content view.

        (-[WKWebView _computedObscuredInset]):
        (-[WKWebView _computedContentInset]):

        Unconditionalize a few codepaths that apply obscured and content insets by consulting
        `-_scrollViewSystemContentInset`.

        (-[WKWebView _computedUnobscuredSafeAreaInset]):

        On watchOS, we augment safe area insets, such that they include `_contentInsetsFromSystemMinimumLayoutMargins`
        as well.

        (-[WKWebView activeViewLayoutSize:]):
        (-[WKWebView _updateScrollViewContentInsetsIfNecessary]):

        Add a helper method that (on watchOS only) updates WKScrollView's content scroll insets such that the web page
        fits inside `-systemMinimumLayoutMargins`. See WKScrollView changes below for more details.

        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _setAvoidsUnsafeArea:]):

        Update scroll view content insets on watchOS if the `viewport-fit` state changes. Additionally make sure that we
        also update the active layout size if the insets actually change (without this tweak, when dynamically adding
        `viewport-fit=cover`, we'll end up in a state where the content size is still narrow to account for the old
        content scroll insets, but the new content scroll insets are set, so the web page apears misaligned relative to
        the scroll view).

        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _setContentScrollInset:]):
        (-[WKScrollView _setContentScrollInsetInternal:]):

        Add an internal method for setting `-[UIScrollView _contentScrollInset]` that defers to the embedding client.
        This means WKWebView clients that use `webView.scrollView.contentScrollInset = myInset;` will override the above
        behavior in `-_updateScrollViewContentInsetsIfNecessary`, but otherwise, the content scroll insets will be
        automatically computed and set in order to avoid minimum layout margins if needed.

        Note that this also returns a `BOOL` indicating whether the inset was updated.

        (-[WKScrollView _updateContentScrollInset]):

2021-06-24  Chris Dumez  <cdumez@apple.com>

        Improve release logging in WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=227374

        Reviewed by Geoffrey Garen.

        Improve release logging in WebProcessProxy:
        - Add more logging
        - Use more consistent logging format to faciliate grep'ing
        - Always include pointer and PID in the logging

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::enableProcessTermination):
        (WebKit::WebProcessPool::disableProcessTermination):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::setWebsiteDataStore):
        (WebKit::WebProcessProxy::addProvisionalPageProxy):
        (WebKit::WebProcessProxy::removeProvisionalPageProxy):
        (WebKit::WebProcessProxy::processWillShutDown):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::markIsNoLongerInPrewarmedPool):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::gpuProcessExited):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didBecomeResponsive):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::sendPrepareToSuspend):
        (WebKit::WebProcessProxy::sendProcessDidResume):
        (WebKit::WebProcessProxy::didSetAssertionType):
        (WebKit::WebProcessProxy::updateAudibleMediaAssertions):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
        (WebKit::WebProcessProxy::processTerminated):
        (WebKit::WebProcessProxy::didExceedActiveMemoryLimit):
        (WebKit::WebProcessProxy::didExceedInactiveMemoryLimit):
        (WebKit::WebProcessProxy::didExceedCPULimit):
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):
        (WebKit::WebProcessProxy::incrementSuspendedPageCount):
        (WebKit::WebProcessProxy::decrementSuspendedPageCount):
        (WebKit::WebProcessProxy::processPoolIfExists const):
        (WebKit::WebProcessProxy::startBackgroundActivityForFullscreenInput):
        (WebKit::WebProcessProxy::endBackgroundActivityForFullscreenInput):
        (WebKit::WebProcessProxy::establishServiceWorkerContext):
        (WebKit::WebProcessProxy::updateServiceWorkerProcessAssertion):
        (WebKit::WebProcessProxy::registerServiceWorkerClientProcess):
        (WebKit::WebProcessProxy::unregisterServiceWorkerClientProcess):
        (WebKit::WebProcessProxy::disableServiceWorkers):
        (WebKit::WebProcessProxy::enableServiceWorkers):

2021-06-24  Chris Dumez  <cdumez@apple.com>

        Add release logging in the WebPage constructor / destructor
        https://bugs.webkit.org/show_bug.cgi?id=227361

        Reviewed by Geoffrey Garen.

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

2021-06-24  Per Arne  <pvollan@apple.com>

        [macOS] Fix incorrect version check in the WebContent process' sandbox
        https://bugs.webkit.org/show_bug.cgi?id=227346
        <rdar://79589961>

        Reviewed by Alexey Proskuryakov.

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

2021-06-24  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Allow network-outbound logging for internal builds
        https://bugs.webkit.org/show_bug.cgi?id=227332
        <rdar://problem/79669627>

        Reviewed by Per Arne Vollan.

        We allow network-outbound for /private/var/run/syslog in the WebContent process for debugging
        purposes on internal OS images. We should do the same for our other processes to avoid noisy logging.

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

2021-06-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        Using a video as a source for a WebGL texture is slow and hangs on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=227081

        Reviewed by Eric Carlson.

        In current form, media is decoded in GPU process and WebGL is processed
        in Web process.

        Video frame transfer from GPU process to Web process would fail when
        WebGL tried to copy the video frame to a texture. The failure was
        artificial, due to use of WebCore::IOSurface as a unneeeded helper
        to convert CVPixelBufferRef to a cross-process object.

        The failure would occur when AVPlayerItemVideoOutput
        would generate a CVPixelBufferRef without color space information. Creating
        WebCore::IOSurface out of this would fail. WebCore::IOSurface
        has always a color space. The failure is not significant, as WebCore::IOSurface
        was only used as a convenience.

        This would cause performance regression when WebGL would
        fall back to software conversion fallback. This callback did work
        as it obtains the image through "get last frame as native image"
        API.

        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        Use the correct type of object in the IPC messages:
        Function `PixelBufferForCurrentTime` returns `CVPixelBufferRef`
        so use that type instead of `MachPort`. It is an implementation
        detail of `CVPixelBufferRef` encode/decode how the object
        transfer is implemented.

        The type of transfer must be RetainPtr<CVPixelBufferRef> as that
        is how the IPC system operates wrt input, output and "storage"
        types. This is the same as with IPC support for RefPtr<> types.

        No tests as Sources/WebKit is not unit-testable ATM.

        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::pixelBufferForCurrentTime):
        Change the receive side according to the message type change.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (class_template_headers):
        Add support for RetainPtr in the IPC message language.

        * Scripts/webkit/messages_unittest.py:
        * Scripts/webkit/tests/Makefile:
        * Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
        (IPC::jsValueForArguments):
        (IPC::messageArgumentDescriptions):
        * Scripts/webkit/tests/MessageNames.cpp:
        (IPC::description):
        (IPC::receiverName):
        (IPC::isValidMessageName):
        * Scripts/webkit/tests/MessageNames.h:
        * Scripts/webkit/tests/TestWithCVPixelBuffer.messages.in: Added.
        * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp: Added.
        (WebKit::TestWithCVPixelBuffer::didReceiveMessage):
        (WebKit::TestWithCVPixelBuffer::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithCVPixelBufferMessages.h: Copied from Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessagesReplies.h.
        (Messages::TestWithCVPixelBuffer::messageReceiverName):
        (Messages::TestWithCVPixelBuffer::SendCVPixelBuffer::name):
        (Messages::TestWithCVPixelBuffer::SendCVPixelBuffer::SendCVPixelBuffer):
        (Messages::TestWithCVPixelBuffer::SendCVPixelBuffer::arguments const):
        (Messages::TestWithCVPixelBuffer::ReceiveCVPixelBuffer::name):
        (Messages::TestWithCVPixelBuffer::ReceiveCVPixelBuffer::arguments const):
        * Scripts/webkit/tests/TestWithCVPixelBufferMessagesReplies.h: Copied from Source/WebKit/Scripts/webkit/tests/TestWithSuperclassMessagesReplies.h.
        * Scripts/webkit/tests/TestWithSuperclassMessagesReplies.h:
        Add code generation examples for IPC implemetation regarding transferring
        RetainPtr<CVPixelBufferRef>.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<RetainPtr<CVPixelBufferRef>>::encode):
        (IPC::ArgumentCoder<RetainPtr<CVPixelBufferRef>>::decode):
        * Shared/WebCoreArgumentCoders.h:
        Move the CVPixelBufferRef transfer code from IOSurface
        to the IPC layer.
        The encode function must be of type RetainPtr<CVPixelBufferRef> instead of
        CVPixelBufferRef, in contrast to existing RetainPtr<CF*> types.
        The existing RetainPtr<CF*> types are not used as IPC message inputs,
        only as subobjects. The IPC message language does not have concept of
        encode type differing from decode type.

        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime):
        Change the send side according to the message type change.

2021-06-24  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Remove ENABLE_SCROLL_SNAP compile-time option
        https://bugs.webkit.org/show_bug.cgi?id=227067

        Reviewed by Simon Fraser.

        Remove compile-time ENABLE_SCROLL_SNAP configuration option.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (WebKit::dump):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView scrollViewWillBeginDragging:]):
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::resetStateAfterProcessExited):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.h:

2021-06-24  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r272882): [WPE][GTK] xdg-dbus-proxy may not be mounted in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=227294

        Reviewed by Adrian Perez de Castro.

        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):

2021-06-23  Said Abou-Hallawa  <said@apple.com>

        REGRESSION(r278970): A CATransaction commitHandler should not execute a client callback
        https://bugs.webkit.org/show_bug.cgi?id=227318
        <rdar://79625962>

        Reviewed by Tim Horton.

        In takeSnapshotWithConfiguration() we call callSnapshotRect() inside the
        callback of [CATransaction addCommitHandler].

        callSnapshotRect() calls the client callback which may call directly or
        indirectly addCommitHandler. But it is prohibited by CA to add a commit
        handler while processing a registered commit handler.

        The fix is to postpone calling callSnapshotRect() till CATransaction
        processes all its commit handler callbacks.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):

2021-06-23  Jean-Yves Avenard  <jya@apple.com>

        Not all uses of AudioToolbox framework use soft linking
        https://bugs.webkit.org/show_bug.cgi?id=227250
        <rdar://problem/79606090>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):
        * Shared/mac/MediaFormatReader/CoreMediaWrapped.cpp:
        (WebKit::createWrapper):
        (WebKit::wrapperStorage):
        (WebKit::wrapperVTable):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::copyProperty):
        * Shared/mac/MediaFormatReader/MediaSampleByteRange.cpp:
        (WebKit::MediaSampleByteRange::MediaSampleByteRange):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm:
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        * WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

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

        Add a delegate SPI to allow arbitrary gestures to ignore preventDefault() with active touch events
        https://bugs.webkit.org/show_bug.cgi?id=227311
        rdar://79624236

        Reviewed by Tim Horton.

        Add a UI delegate hook to allow internal clients to (easily) introduce gesture recognizers on WKWebView that are
        capable of recognizing even if active touch events are prevented by the page. This allows Safari to stop
        overriding an internal method on WKWebView, `-_isNavigationSwipeGestureRecognizer:`.

        Testing this requires the ability to simulate touch events (through HID event dispatch) in API tests.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _touchEventsMustRequireGestureRecognizerToFail:]):

        Note that we only consult the delegate here for gestures that are added directly to WKWebView. This is because
        we already avoid deferring gestures that are added *above* WKWebView, and it's unnecessary to allow clients to
        avoid deferring gestures that are internal to WebKit (i.e. added on WKContentView).

        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):

2021-06-23  Martin Robinson  <mrobinson@igalia.com>

        [iOS 15 Regression]: scroll position resets when using scroll snap
        https://bugs.webkit.org/show_bug.cgi?id=226816
        <rdar://problem/79081301>

        Reviewed by Simon Fraser.

        To improve scrolling fluidity on iOS, have any sort of momentum scroll trigger directional
        scroll snapping. This means that any momentum scroll will move to the next or previous scroll
        position and not snap back. This improves behavior on tesla.com and also on the scroll
        snapping demo on the WebKit page.

        Tests: fast/scrolling/ios/scroll-snap-with-momentum-scroll-in-main-frame.html
               fast/scrolling/ios/scroll-snap-with-momentum-scroll-in-overflow-scroll-area.html

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Pass the current scroll offset to
        the RemoteScrollingCoordinatorProxy. Passing a value for this offset is the trigger for directional scroll
        snapping.
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h: Update method definitions.
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping): Pass the current offset.
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling const): Ditto.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Enable
        directional scroll snapping for RenderLayers.

2021-06-23  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make the hostTime parameter to playSession a Monotonic time
        https://bugs.webkit.org/show_bug.cgi?id=226515

        Reviewed by Youenn Fablet.

        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]):
        (-[WKMediaSessionCoordinatorHelper playSessionWithCompletion:]):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::playSession):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::playSession):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:

2021-06-23  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (processPCMRequest):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (contextString): Deleted.
        This patch deletes the contextString function because it is no longer
        needed now that CFNetwork sets the attribution context based on the
        main document URL, and it seemed silly to migrate code from
        WebKitAdditions just to delete it immediately. This also moves the
        processPCMRequest function declaration from WebKitAdditions so we can
        remove NETWORK_DATA_TASK_COCOA_ADDITIONS.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::isActingOnBehalfOfAFullWebBrowser):
        (WebKit::NetworkSessionCocoa::removeNetworkWebsiteData):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setLastNavigationWasAppBound):

2021-06-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Adopt new date picker presentation SPI
        https://bugs.webkit.org/show_bug.cgi?id=227221
        <rdar://problem/77930086>

        Reviewed by Wenson Hsieh.

        In native applications, tapping on a compact UIDatePicker presents an
        inline picker using _UIDatePickerOverlayPresentation. To avoid
        maintaining our own presentation logic, and to better match the native
        presentation, use _UIDatePickerOverlayPresentation when tapping on a
        date/time input in WebKit.

        Covered by existing tests.

        * Platform/spi/ios/UIKitSPI.h:

        Declare the SPI rather than importing the header directly, as the
        _UIDatePickerOverlayAnchor enum is not available in all SDKs with
        the header.

        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePickerViewController initWithDatePicker:]):
        (-[WKDateTimePickerViewController setDelegate:]):
        (-[WKDateTimePicker initWithView:datePickerMode:]):

        Create the UIDatePicker here so it can be shared by the old context menu
        presentation and the new overlay presentation.

        (-[WKDateTimePicker handleDatePickerPresentationDismissal]):
        (-[WKDateTimePicker removeDatePickerPresentation]):

        `accessoryDone` eventually removes the presentation. If the date picker
        is already being dismissed, do not dismiss it without an animation.

        For programmatic dismissal (using blur()) this method is called prior to
        `accessoryDone`, in which case we force dismissal without animation.

        (-[WKDateTimePicker dateTimePickerViewControllerDidPressResetButton:]):
        (-[WKDateTimePicker dateTimePickerViewControllerDidPressDoneButton:]):
        (-[WKDateTimePicker showDateTimePicker]):
        (-[WKDateTimePicker datePickerChanged:]):
        (-[WKDateTimePicker reset:]):
        (-[WKDateTimePicker done:]):
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker _timeZoneOffsetFromGMT:]):
        (-[WKDateTimePicker dateFormatterForPicker]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker setDateTimePickerToInitialValue]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker controlEndEditing]):
        (-[WKDateTimePicker calendarType]):
        (-[WKDateTimePicker hour]):
        (-[WKDateTimePicker minute]):
        (-[WKDateTimePicker setHour:minute:]):

2021-06-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279104.
        https://bugs.webkit.org/show_bug.cgi?id=227292

        Made various layout tests very flaky

        Reverted changeset:

        "[GPU Process] RELEASE_ASSERT in
        RemoteResourceCacheProxy::didFinalizeRenderingUpdate() may
        fire if GPUP is relaunched"
        https://bugs.webkit.org/show_bug.cgi?id=227229
        https://trac.webkit.org/changeset/279104

2021-06-22  Megan Gardner  <megan_gardner@apple.com>

        Message dropped when restoring webpages.
        https://bugs.webkit.org/show_bug.cgi?id=227278

        Reviewed by Tim Horton.

        The message to initialize the state of highlightVisibility is dropped sometimes, but
        fortunately, there is no need to pass the current state when initializing the
        HighlightObserver, as WebPageProxy::creationParameters will obtain the correct
        highlight state on initialization after r279078.

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

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

        [Live Text] [macOS] Add an internal option to disable inline text selection in images
        https://bugs.webkit.org/show_bug.cgi?id=227265
        rdar://79460142

        Reviewed by Tim Horton.

        Refactor Live Text and Visual Look Up logic, such that the ability to select text inside of images is behind an
        internal feature flag that can be toggled at runtime. When Live Text is disabled, we'll unconditionally show the
        "Look Up" context menu action using the more generic title "Quick Look". This "Quick Look" action is then
        retitled to either "Look Up in Quick Look" or "Select Text in Quick Look" once image analysis completes.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):

        Rename ContextMenuItemTagLookUpImage to ContextMenuItemTagQuickLookImage.

        * UIProcess/Cocoa/QuickLookPreviewActivity.h: Copied from Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h.

        Move this enum out of WKQuickLookPreviewController.h, such that we can use and import it in non-Cocoa headers
        and implementation files.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::computeHasImageAnalysisResults):

        Rename `computeHasVisualSearchResults` to `computeHasImageAnalysisResults`, and allow it to take a flag to
        indicate whether or not it should request text recognition results or visual search results. We use this for the
        "Quick Look" context menu action when inline text selection is disabled, in order to retitle the item to "Select
        Text in Quick Look".

        (WebKit::WebViewImpl::computeHasVisualSearchResults): Deleted.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::computeHasImageAnalysisResults):
        (WebKit::PageClient::computeHasVisualSearchResults): Deleted.
        * UIProcess/WebContextMenuProxy.h:
        (WebKit::WebContextMenuProxy::quickLookPreviewActivity const):

        Add a flag to WebContextMenuProxy to determine what initial activity to use when presenting the QuickLook
        preview panel after selecting the ContextMenuItemTagQuickLookImage item.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        (WebKit::WebPageProxy::computeHasImageAnalysisResults):
        (WebKit::WebPageProxy::computeHasVisualSearchResults): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::computeHasImageAnalysisResults):
        (WebKit::PageClientImpl::computeHasVisualSearchResults): Deleted.
        * UIProcess/mac/WKQuickLookPreviewController.h:
        * UIProcess/mac/WKQuickLookPreviewController.mm:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):

        Add logic to either remove and reinsert the "Look Up" context menu action (if inline text selection in images is
        enabled), or to promote the "Quick Look" context menu action to either "Select Text in Quick Look" or "Look Up
        in Quick Look" in the case where inline text selection in images is disabled.

        Note that when inline text selection in images is disabled, we'll first check for visual search results before
        checking for text. This is because visual search results will take precedence over text selection (i.e., we'll
        show "Look Up in Quick Look" even if both visual search results and text is present), so we can avoid performing
        text analysis in the case where we already found visual search results.

        (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem):
        (WebKit::WebContextMenuProxyMac::updateQuickLookContextMenuItemTitle):

        Add a helper method to find and update the title of the NSMenuItem corresponding to
        ContextMenuItemTagQuickLookImage. See `getContextMenuFromItems` above for more details.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::handleContextMenuQuickLookImage):
        (WebKit::WebPageProxy::handleContextMenuLookUpImage): Deleted.

        Rename this to `handleContextMenuQuickLookImage`, and have it take an argument to indicate whether the QuickLook
        panel should start out in Visual Look Up mode.

        * WebKit.xcodeproj/project.pbxproj:

2021-06-22  Chris Dumez  <cdumez@apple.com>

        [macOS] Suspend WebProcesses that are in the process cache
        https://bugs.webkit.org/show_bug.cgi?id=227269

        Reviewed by Geoffrey Garen.

        Suspend WebProcesses that are in the process cache on macOS to make sure they use no CPU.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsInProcessCache):
        (WebKit::WebProcessProxy::platformSuspendProcess):
        (WebKit::WebProcessProxy::platformResumeProcess):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformSuspendProcess):
        (WebKit::WebProcessProxy::platformResumeProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setIsInProcessCache):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-06-22  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix after r279133: remove even more things.

        * UIProcess/WebPageProxy.cpp:

2021-06-22  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r279133: remove unnecessary includes and defines after upstreaming.

        * UIProcess/WebPageProxy.cpp:

2021-06-22  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Deny mach-lookup to the service 'com.apple.print.normalizerd'
        https://bugs.webkit.org/show_bug.cgi?id=227248
        <rdar://problem/79600557>

        Reviewed by Brent Fulgham.

        Deny mach-lookup to the service 'com.apple.print.normalizerd' in the WebKit processes on macOS.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::gpuMachServices):
        * WebProcess/com.apple.WebProcess.sb.in:

2021-06-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GLib] Rewrite NetworkCache::Data::adoptMap without FileSystem::MappedFileData::leakHandle and munmap
        https://bugs.webkit.org/show_bug.cgi?id=227017

        Reviewed by Carlos Garcia Campos.

        FileSystem::MappedFileData class wraps file mapping APIs like mmap
        and munmap in cross-platform manner. NetworkCache::Data::adoptMap
        shouldn't use FileSystem::MappedFileData::leakHandle and munmap.

        * NetworkProcess/cache/NetworkCacheDataGLib.cpp:
        (WebKit::NetworkCache::MapWrapper::~MapWrapper):
        (WebKit::NetworkCache::Data::adoptMap):

2021-06-07  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Upstream GroupActivitiesCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=226757

        Reviewed by Eric Carlson.

        Upstream the backing objects for a GroupActivities-based MediaSessionCoordinator.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.h: Added.
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm: Added.
        (-[WKGroupActivitiesCoordinatorDelegate initWithParent:]):
        (-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePlayCommand:completionHandler:]):
        (-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePauseCommand:completionHandler:]):
        (-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueSeekCommand:completionHandler:]):
        (-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueBufferingCommand:completionHandler:]):
        (-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePrepareTransitionCommand:]):
        (WebKit::GroupActivitiesCoordinator::create):
        (WebKit::GroupActivitiesCoordinator::GroupActivitiesCoordinator):
        (WebKit::GroupActivitiesCoordinator::~GroupActivitiesCoordinator):
        (WebKit::GroupActivitiesCoordinator::sessionStateChanged):
        (WebKit::GroupActivitiesCoordinator::identifier const):
        (WebKit::GroupActivitiesCoordinator::join):
        (WebKit::GroupActivitiesCoordinator::leave):
        (WebKit::GroupActivitiesCoordinator::seekTo):
        (WebKit::GroupActivitiesCoordinator::play):
        (WebKit::GroupActivitiesCoordinator::pause):
        (WebKit::GroupActivitiesCoordinator::setTrack):
        (WebKit::GroupActivitiesCoordinator::positionStateChanged):
        (WebKit::GroupActivitiesCoordinator::readyStateChanged):
        (WebKit::GroupActivitiesCoordinator::playbackStateChanged):
        (WebKit::GroupActivitiesCoordinator::trackIdentifierChanged):
        (WebKit::GroupActivitiesCoordinator::issuePlayCommand):
        (WebKit::GroupActivitiesCoordinator::issuePauseCommand):
        (WebKit::GroupActivitiesCoordinator::issueSeekCommand):
        (WebKit::GroupActivitiesCoordinator::issueBufferingCommand):
        (WebKit::GroupActivitiesCoordinator::issuePrepareTransitionCommand):
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.h: Added.
        (WebKit::GroupActivitiesSession::groupSession):
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.mm: Added.
        (WebKit::GroupActivitiesSession::create):
        (WebKit::GroupActivitiesSession::GroupActivitiesSession):
        (WebKit::GroupActivitiesSession::~GroupActivitiesSession):
        (WebKit::GroupActivitiesSession::join):
        (WebKit::GroupActivitiesSession::leave):
        (WebKit::GroupActivitiesSession::state const):
        (WebKit::GroupActivitiesSession::uuid const):
        (WebKit::GroupActivitiesSession::fallbackURL const):
        (WebKit::GroupActivitiesSession::addStateChangeObserver):
        (WebKit::GroupActivitiesSession::addFallbackURLObserver):
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.h: Added.
        * UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm: Added.
        (WebKitSwiftLibrary):
        (WebKit::GroupActivitiesSessionNotifier::sharedNotifier):
        (WebKit::GroupActivitiesSessionNotifier::GroupActivitiesSessionNotifier):
        (WebKit::GroupActivitiesSessionNotifier::sessionStateChanged):
        (WebKit::GroupActivitiesSessionNotifier::addWebPage):
        (WebKit::GroupActivitiesSessionNotifier::removeWebPage):
        (WebKit::GroupActivitiesSessionNotifier::webPageURLChanged):
        (WebKit::GroupActivitiesSessionNotifier::hasSessionForURL):
        (WebKit::GroupActivitiesSessionNotifier::takeSessionForURL):
        * UIProcess/Cocoa/GroupActivities/WKGroupSession.h: Added.
        * UIProcess/Cocoa/GroupActivities/WKGroupSession.swift: Added.
        (WKURLActivityWrapper.urlActivity):
        (WKURLActivityWrapper.fallbackURL):
        (WKGroupSessionWrapper.groupSession):
        (WKGroupSessionWrapper.cancellables):
        (WKGroupSessionWrapper.activity):
        (WKGroupSessionWrapper.uuid):
        (WKGroupSessionWrapper.wrapperSessionState(_:)):
        (WKGroupSessionWrapper.state):
        (WKGroupSessionWrapper.newActivityCallback):
        (WKGroupSessionWrapper.stateChangedCallback):
        (WKGroupSessionWrapper.join):
        (WKGroupSessionWrapper.leave):
        (WKGroupSessionWrapper.coordinate(_:)):
        (WKGroupSessionWrapper.activityChanged(_:)):
        (WKGroupSessionWrapper.stateChanged(_:)):
        (WKGroupSessionObserver.newSessionCallback):
        (WKGroupSessionObserver.cancellables):
        (WKGroupSessionObserver.recievedSession(_:)):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * WebKit.xcodeproj/project.pbxproj:

2021-06-22  Peng Liu  <peng.liu6@apple.com>

        ASSERTION FAILED: videoFullscreenManager->client() == nullptr in WKFullScreenWindowController.mm
        https://bugs.webkit.org/show_bug.cgi?id=227243

        Reviewed by Eric Carlson.

        `-[WKFullScreenWindowController windowDidExitFullScreen:]` needs to clear
        its client like `-[WKFullScreenWindowController didExitPictureInPicture]` does.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController windowDidExitFullScreen:]):

2021-06-22  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279083.

        Broke Mac Builds

        Reverted changeset:

        "Migrate App Privacy Report code from WebKitAdditions"
        https://bugs.webkit.org/show_bug.cgi?id=227045
        https://commits.webkit.org/r279083

2021-06-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        Functions dispatched to WorkQueue are sometimes destroyed in the calling thread due to block refcounting
        https://bugs.webkit.org/show_bug.cgi?id=227160

        Reviewed by Antti Koivisto.

        As an example, remove one workaround mutability of dispatched function
        and nullptr assignment that was needed for working around
        WorkQueue::dispatch bug where the dispatched function was not always
        destroyed in the queue.

        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        (WebKit::MediaTrackReader::finalize):

2021-06-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Force a copy of font data when receiving it from the untrusted web process
        https://bugs.webkit.org/show_bug.cgi?id=227247
        <rdar://problem/70825675>

        Reviewed by Maciej Stachowiak.

        Sending a SharedBuffer across IPC is implemented by having the receiver map a shmem into its address space. On
        the sender's side, the shmem still exists, and a compromised web process could scribble data into it after
        sending it. So, when the GPU process receives the font data, we need to make a copy of it locally to make sure
        the data can't change out from under us.

        No new tests because there is no behavior change.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::decodePlatformData):

2021-06-21  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] RELEASE_ASSERT in RemoteResourceCacheProxy::didFinalizeRenderingUpdate() may fire if GPUP is relaunched
        https://bugs.webkit.org/show_bug.cgi?id=227229
        <rdar://79147947>

        Reviewed by Myles C. Maxfield.

        1) Remove maximumUnusedFontCountToSkipRemoval because 
           'unusedFontCount < maximumUnusedFontCountToSkipRemoval' can't be true
           since both unusedFontCount and maximumUnusedFontCountToSkipRemoval are
           unsigned and maximumUnusedFontCountToSkipRemoval is equal to zero.
           So they can only be equal and we can replace this by '!unusedFontCount'.

        2) RemoteResourceCacheProxy::cacheFont() assumes if the font is cached in
           m_fontIdentifierToLastRenderingUpdateVersionMap then it is also cached
           in GPUP. We have to keep this assumption correct by removing the 
           corresponding entries from m_fontIdentifierToLastRenderingUpdateVersionMap.

        3) RemoteResourceCacheProxy::didFinalizeRenderingUpdate() needs to reset
           m_numberOfFontsUsedInCurrentRenderingUpdate and to increment 
           m_currentRenderingUpdateVersion in all its code branches.

        4) If the GPUP is relaunched, we need to set 
           m_numberOfFontsUsedInCurrentRenderingUpdate to zero after we clear
           m_fontIdentifierToLastRenderingUpdateVersionMap. Otherwise the
           RELEASE_ASSERT in RemoteResourceCacheProxy::didFinalizeRenderingUpdate()
           will fire.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::prepareForNextRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::clearFontMap):
        (WebKit::RemoteResourceCacheProxy::didFinalizeRenderingUpdate):
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        (WebKit::RemoteResourceCacheProxy::releaseMemory):
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:

2021-06-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WebKitLegacy] Non-actionable "Look Up" action appears when right clicking images
        https://bugs.webkit.org/show_bug.cgi?id=227240

        Reviewed by Devin Rousso.

        Override the new client hook and return true.

        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2021-06-21  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes late June 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227241

        Unreviewed non-unified build fixes.

        * GPUProcess/GPUProcess.cpp:
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        * WebProcess/GPU/media/WebMediaStrategy.cpp:
        (WebKit::WebMediaStrategy::createNowPlayingManager const):

2021-06-21  Don Olmstead  <don.olmstead@sony.com>

        Update signature of createVideoLayerRemote for PlayStation and GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=227242

        Reviewed by Eric Carlson.

        Followup on r278740 which changed the signature of createVideoLayerRemote. Updating the PlayStation and
        GStreamer accordingly.

        * WebProcess/GPU/media/gstreamer/VideoLayerRemoteGStreamer.cpp:
        (WebKit::createVideoLayerRemote):
        * WebProcess/GPU/media/playstation/VideoLayerRemotePlayStation.cpp:
        (WebKit::createVideoLayerRemote):

2021-06-21  Chris Dumez  <cdumez@apple.com>

        Update TBA macros for iOS 15 / macOS 13
        https://bugs.webkit.org/show_bug.cgi?id=227228
        <rdar://78581134>

        Reviewed by Alex Christensen.

        * Configurations/WebKit.xcconfig:
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * UIProcess/API/Cocoa/WKContentRuleListPrivate.h:
        * UIProcess/API/Cocoa/WKDownload.h:
        * UIProcess/API/Cocoa/WKDownloadDelegate.h:
        * UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKAppHighlight.h:
        * UIProcess/API/Cocoa/_WKAppHighlightDelegate.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.h:
        * UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorAttachment.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorResponse.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:
        * UIProcess/API/Cocoa/_WKAutomationDelegate.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKInspector.h:
        * UIProcess/API/Cocoa/_WKInspectorConfiguration.h:
        * UIProcess/API/Cocoa/_WKInspectorExtension.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
        * UIProcess/API/Cocoa/_WKTextManipulationToken.h:
        * UIProcess/API/Cocoa/_WKUserVerificationRequirement.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2021-06-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix Apple internal build

        Rubber-stamped by Megan Gardner.

        * UIProcess/WebPageProxy.cpp:

2021-06-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Turn ENABLE_SHAREABLE_RESOURCE on
        https://bugs.webkit.org/show_bug.cgi?id=227011

        Reviewed by Don Olmstead.

        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::tryCreateSharedMemory const): Added.

2021-06-21  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        No new tests, covered by existing tests.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (contextString): Deleted.
        This patch deletes the contextString function because it is no longer
        needed now that CFNetwork sets the attribution context, and it seemed
        silly to migrate code from WebKitAdditions just to delete it
        immediately. This also moves the processPCMRequest function
        declaration from WebKitAdditions so we can remove
        NETWORK_DATA_TASK_COCOA_ADDITIONS.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::isActingOnBehalfOfAFullWebBrowser):
        (WebKit::NetworkSessionCocoa::removeNetworkWebsiteData):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setLastNavigationWasAppBound):

2021-06-21  Chris Dumez  <cdumez@apple.com>

        [WK2] Don't process-swap on navigations within the same non-HTTP(s) protocol
        https://bugs.webkit.org/show_bug.cgi?id=227220

        Reviewed by Tim Horton.

        Don't process-swap on navigations within the same non-HTTP(s) protocol. Trying to extract registrable domains
        from non-HTTP(s) URLs does not make much sense and leads to unexpected process swaps.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setProcessSwapsOnNavigationWithinSameNonHTTPFamilyProtocol:]):
        (-[_WKProcessPoolConfiguration processSwapsOnNavigationWithinSameNonHTTPFamilyProtocol]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processForNavigationInternal):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):

2021-06-21  Megan Gardner  <megan_gardner@apple.com>

        AppHighlights disappear on page reload
        https://bugs.webkit.org/show_bug.cgi?id=227141
        rdar://78190331

        Reviewed by Devin Rousso.

        When a page is reloaded, a new set of highlights is loaded, but the state of visibility of
        the highlights is not preserved.
        We need to preserve the state of highlights so they are correctly shown on reload.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode const):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::appHighlightsVisiblility const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_appHighlightsVisible):
        (WebKit::WebPage::setAppHighlightsVisibility):
        (WebKit::m_lastNavigationWasAppBound): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::appHighlightsVisiblility const):

2021-06-21  Alex Christensen  <achristensen@webkit.org>

        Break ref cycle between API::HTTPCookieStore and WebKit::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=226992

        Reviewed by Chris Dumez.

        Covered by an API test.

        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::HTTPCookieStore):
        (API::HTTPCookieStore::filterAppBoundCookies):
        (API::HTTPCookieStore::cookies):
        (API::HTTPCookieStore::cookiesForURL):
        (API::HTTPCookieStore::setCookies):
        (API::HTTPCookieStore::deleteCookie):
        (API::HTTPCookieStore::deleteAllCookies):
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
        (API::HTTPCookieStore::flushCookies):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::unregisterObserver):
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::complete):

2021-06-21  James Savage  <james.savage@apple.com>

        Upstream async support to Swift overlay.
        https://bugs.webkit.org/show_bug.cgi?id=227006.

        Reviewed by Alex Christensen.

        * SwiftOverlay/Tests/JavaScriptToSwiftTypeConversions.swift:
        (JavaScriptToSwiftConversions.testUsingSwiftAsync): Adds a simple test
        for the Swift async interface.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/project.pbxproj: Removed
        use of WebKitAdditions, which is needed both to prevent redefinition
        errors and because they are no longer necessary.
        * UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
        (WKWebView.callAsyncJavaScript(_:arguments:in:contentWorld:)):
        (WKWebView.pdf(_:)):
        (WKWebView.evaluateJavaScript(_:in:contentWorld:)):
        (WKWebView.find(_:configuration:)):

2021-06-21  Alex Christensen  <achristensen@webkit.org>

        Add log when creating NSURLSession that will not accept cookies
        https://bugs.webkit.org/show_bug.cgi?id=226511
        <rdar://77637158>

        Reviewed by Chris Dumez.

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

2021-06-21  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r275496): WebSocket Message too long when message is larger than 1mb
        https://bugs.webkit.org/show_bug.cgi?id=227030
        <rdar://problem/79370994>

        Reviewed by Youenn Fablet.

        NSURLSession's WebSocket implementation currently has maximumMessageSize's default value at 1MB.
        Our CFReadStream-based WebSocket implementation had no message size limitation, so set it to 0 to remove the limit.

        Writing a test for this was tricky because our WebSocket LayoutTests use the deflate extension.  I wrote an API test
        that implements a simple WebSocket exchange and verifies each byte is what we expect.
        The test used to fail using our NSURLSession-based WebSocket implementation but now passes everywhere.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        Set maximumMessageSize to 0, which, as documented in ws_options.h but unfortunately not yet in NSURLSession.h:
        "means there is no receive limit."
        This matches our behavior with the CFReadStream-based WebSocket implementation.

2021-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
        https://bugs.webkit.org/show_bug.cgi?id=227193

        Reviewed by Sam Weinig.

        Rename WKVisualSearchPreviewController to WKQuickLookPreviewController, with the intention of using this logic
        to implement a new context menu action for opening images in a QuickLook preview panel. See below for more
        details.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleContextMenuLookUpImage): Deleted.

        Move this into WebPageProxyMac.mm, since this is (1) only relevant to macOS, and (2) this logic now requires
        WKQuickLookPreviewController.h, which WebPageProxyMac.mm already imports.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::acceptsPreviewPanelControl):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKQuickLookPreviewController.h: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h.
        * UIProcess/mac/WKQuickLookPreviewController.mm: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm.
        (-[WKQuickLookPreviewController initWithPage:imageData:title:imageURL:activity:]):

        Add QuickLookPreviewActivity, a flag to indicate whether or not WKQuickLookPreviewController should
        start with QLPreviewActivityVisualSearch or QLPreviewActivityNone. For the time being, we only use this helper
        object for visual search, so we only pass in QuickLookPreviewActivity::VisualSearch.

        (-[WKQuickLookPreviewController beginControl:]):
        (-[WKQuickLookPreviewController endControl:]):
        (-[WKQuickLookPreviewController closePanelIfNecessary]):
        (-[WKQuickLookPreviewController isControlling:]):
        (-[WKQuickLookPreviewController provideDataForItem:]):
        (-[WKQuickLookPreviewController numberOfPreviewItemsInPreviewPanel:]):
        (-[WKQuickLookPreviewController previewPanel:previewItemAtIndex:]):
        (-[WKQuickLookPreviewController previewPanel:initialActivityForItem:]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::beginPreviewPanelControl):
        (WebKit::WebPageProxy::endPreviewPanelControl):
        (WebKit::WebPageProxy::closeSharedPreviewPanelIfNecessary):
        (WebKit::WebPageProxy::handleContextMenuLookUpImage):
        (WebKit::WebPageProxy::showImageInQuickLookPreviewPanel):
        (WebKit::WebPageProxy::showImageInVisualSearchPreviewPanel): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

2021-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Live Text] Mouse events should only trigger text recognition if the cursor is moving
        https://bugs.webkit.org/show_bug.cgi?id=227181
        rdar://79469827

        Reviewed by Tim Horton.

        Populate the `deltaX` and `deltaY` members of the platform mouse event on iOS, when using a trackpad. This
        allows the adjusted logic in EventHandler to apply to iPadOS when using a trackpad as well (see WebCore
        ChangeLog for more information).

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer createMouseEventWithType:wasCancelled:]):

2021-06-18  Brent Fulgham  <bfulgham@apple.com>

        Clear state after process crash so that we know to re-issue sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=227103
        <rdar://problem/77588760>

        Reviewed by Tim Horton.

        Follow-up patch that corrects a problem when switching between processes (for example, when
        a provisional load moves to a committed load.) The parameters for the new process would fail
        to pass the necessary sandbox extensions for the <attachment> element if they had been vended
        to the provisional load. Instead, we should be checking if the new process has been given
        the necessary extensions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Use the new process, not the process state we are
        copying from when deciding whether we need to extend sandbox powers to the new process.

2021-06-18  Peng Liu  <peng.liu6@apple.com>

        [iOS] Fullscreen video playback gets stuck after interacting with the playback controls
        https://bugs.webkit.org/show_bug.cgi?id=227047

        Reviewed by Eric Carlson.

        When we scrub a playing video, the video element may enter a temporarily stalled
        state - the player is still playing, but it does not have enough data. In WebKit,
        the `rate` of the player will be 0. But we cannot set the rate of `WebAVPlayerController`
        to 0 in this case, because AVKit will believe the video playback is paused when
        its rate is 0. In r261587, we defined a magic rate (0.00000001f) for this case.

        Unfortunately, with the changes in r275956, `WebAVPlayerController` will
        align its `defaultPlaybackRate` with `rate` when `rate` is not 0. Under stress
        tests, e.g., keep scrubbing a video, a video element will eventually enter a state
        in which both `defaultPlaybackRate` and `rate` are the magic rate. And the video
        appears to be stuck for users.

        To fix the issue, this patch removes the magic rate and defines a new state: `stalled`.
        A video will be in the stalled state when it is playing but does not have enough data.
        WebKit will only change the rate of `WebAVPlayerController` when the video
        is not stalled.

        To avoid potential problems due to the conversions between "float" and "double"
        back and forth, this patch updates the types of `playbackRate` and `defaultPlaybackRate`.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::setDefaultPlaybackRate):
        (WebKit::PlaybackSessionModelContext::setPlaybackRate):
        (WebKit::PlaybackSessionModelContext::rateChanged):
        (WebKit::PlaybackSessionManagerProxy::rateChanged):
        (WebKit::PlaybackSessionManagerProxy::setDefaultPlaybackRate):
        (WebKit::PlaybackSessionManagerProxy::setPlaybackRate):
        * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionInterfaceContext::rateChanged):
        (WebKit::PlaybackSessionManager::rateChanged):

2021-06-18  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Rework touch-based gesture controller
        https://bugs.webkit.org/show_bug.cgi?id=226456

        Reviewed by Alejandro G. Castro.

        Rename WPE's ScrollGestureController to TouchGestureController since now
        it also handles production of touch-based click events.

        TouchGestureController now internally manages all the related state,
        tracking the touch interaction and determining whether it progresses
        into a scrolling gesture or whether, upon finishing, it should be
        translated into a simple click event.

        In PageClientImpl, any unhandled event is pushed into
        TouchGestureController and a variant of different outcomes is returned.
        No-event result is ignored, and click or axis events are dispatched as
        appropriate.

        In WPEView, where the touch events arrive into the engine, we keep the
        shortcut where touch events are piped directly into the controller if
        said controller is already gesturing scrolling behavior. In that case
        the touch events are not dispatched into the engine, with the exception
        of touch-up events which are, to provide matching closure for the
        touch-down events.

        * SourcesWPE.txt:
        * UIProcess/API/wpe/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/wpe/TouchGestureController.cpp: Renamed from Source/WebKit/UIProcess/API/wpe/ScrollGestureController.cpp.
        (WebKit::TouchGestureController::handleEvent):
        * UIProcess/API/wpe/TouchGestureController.h: Renamed from Source/WebKit/UIProcess/API/wpe/ScrollGestureController.h.
        (WebKit::TouchGestureController::gesturedEvent const):
        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::View::View):
        (WKWPE::m_backend):
        * UIProcess/API/wpe/WPEView.h:
        (WKWPE::View::touchGestureController const):
        (WKWPE::View::scrollGestureController const): Deleted.

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

        [SOUP] Add Timing-Allow-Origin checks to NetworkDataTaskSoup
        https://bugs.webkit.org/show_bug.cgi?id=227008
        <rdar://problem/79384792>

        Reviewed by Adrian Perez de Castro.

        Add missing TAO checks to Soup backend.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2021-06-17  Said Abou-Hallawa  <said@apple.com>

        [Cocoa] Disable hardware decoding in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=226869
        <rdar://77548905>

        Reviewed by Per Arne Vollan and Simon Fraser.

        Restrict video decoders and disable hardware image decoders.

        A temp extension is created for the service "com.apple.trustd.agent" to
        allow temporarily calling FigPhotoSupportsHEVCHWDecode(). This function
        needs access this service but we have recently closed access to it.

        FigPhotoSupportsHEVCHWDecode() sets a local static variable by using the 
        service "com.apple.trustd.agent" when it is called for the first time.
        Our purpose of calling it in this context is to initialize the static
        variable only. And this is why we do not use its return value.

        This solution is fragile. If MediaToolbox is changed such that it needs
        'com.apple.trustd.agent' while decoding an image, the decoding will fail.

        * 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):
        (WebKit::restrictImageAndVideoDecoders):
        (WebKit::WebProcess::initializeSandbox):

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

        Enable some more release logging in for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=227142

        Reviewed by Eric Carlson.

        Enable some more release logging in for ephemeral sessions, to faciliate debugging.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::isAlwaysOnLoggingAllowed const): Deleted.
        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::sessionID const):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::logger):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logFrameNavigation):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logCrossSiteLoadWithLinkDecoration):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::logUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setGrandfathered):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setIsScheduledForAllButCookieDataRemoval):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getMostRecentlyUpdatedTimestamp const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubframeUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setSubresourceUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectTo):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setTopFrameUniqueRedirectFrom):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeDataForDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setVeryPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateDataRecordsRemoved):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectSubStatisticsCount):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getDomainStringFromDomainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainIDExistsInDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateOperatingDatesParameters):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeUnattributed):
        (WebKit::ResourceLoadStatisticsDatabaseStore::allAttributedPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearExpiredPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::startLoading):
        (WebKit::WebURLSchemeTaskProxy::stopLoading):
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection):
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse):
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):
        (WebKit::WebURLSchemeTaskProxy::didComplete):

2021-06-17  Brent Fulgham  <bfulgham@apple.com>

        Clear state after process crash so that we know to re-issue sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=227103
        <rdar://problem/77588760>

        Reviewed by Per Arne Vollan.

        We dynamically extend access to certain mach services when the ATTACHMENT_ELEMENT feature
        is enabled. If a process with this feature activated crashes and WebKit relaunches it, we
        don't grant the new process the same extensions because we believe they were already
        previously sent.

        This patch clears the state after a process crash so that it properly handles the restart case.

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

2021-06-17  Ben Nham  <nham@apple.com>

        Remove Mac-specific CPUTime functions
        https://bugs.webkit.org/show_bug.cgi?id=227109

        Reviewed by Yusuke Suzuki.

        Permit calling thread_selfusage, since it is used by clock_gettime(CLOCK_THREAD_CPUTIME_ID, tp).

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

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

        Trying to take empty snapshots of the view should not cause crashes
        https://bugs.webkit.org/show_bug.cgi?id=227133

        Reviewed by Tim Horton.

        Trying to take empty snapshots of the view should not cause crashes. We would previously
        see crashes because:
        1. We would end up doing divisions by zero
        2. We would hit the ASSERT(size) in SharedMemory::allocate().

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):

2021-06-17  Kate Cheney  <katherine_cheney@apple.com>

        Storage Access quirks should prompt up to twice if a user does not allow storage access
        https://bugs.webkit.org/show_bug.cgi?id=227099
        <rdar://problem/79409843>

        Reviewed by John Wilander.

        We should allow storage access prompts twice per document for quirks
        just like for non-quirk cases. Previously we were only presenting
        the quirk prompt once per web content process if the user denied. This
        patch removes this code and utilizes maxNumberOfTimesExplicitlyDeniedStorageAccess 
        instead.

        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::hasDeniedCrossPageStorageAccess const): Deleted.
        (WebKit::WebResourceLoadObserver::setHasDeniedCrossPageStorageAccess): Deleted.
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:

2021-06-17  Tim Horton  <timothy_horton@apple.com>

        Adopt WKHoverGestureRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=227116
        <rdar://79442027>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):
        (-[WKContentView gestureRecognizer:shouldReceivePress:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView setUpHoverGestureRecognizer]):
        (-[WKContentView hoverGestureRecognizerChanged:]):
        Plumb mouse events from WKHoverGestureRecognizer to the page.

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

        Fix crashes in ContentRuleListStore::lookupContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=227100
        <rdar://78816611>

        Reviewed by Chris Dumez.

        To be extra careful, instead of just assuming that moveFile will always succeed,
        when moveFile fails, try to delete the legacy path (which has a ContentExtension- instead of ContentRuleList- prefix)
        and fail the lookup.  This will only happen in Safari, which was the only client of _WKUserContentExtensionStore.
        The legacy file is not useful to us because in r275078 I incremented CurrentContentRuleListFileVersion so the bytes on disk
        need to be recompiled anyways.  Safari already has logic to recompile it.  This was just an attempt to use what we have and
        not leave anything behind.

        Also, to be extra careful, try deleting a file before moving a file on top of it.

        * UIProcess/API/APIContentRuleListStore.cpp:
        compiledToFile:
        (API::ContentRuleListStore::lookupContentRuleList):

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

        WKScriptMessageHandlerWithReply should raise an exception if replyHandler is called twice
        https://bugs.webkit.org/show_bug.cgi?id=226863

        Reviewed by Chris Dumez.

        We currently dereference null inside CompletionHandlerWithFinalizer.
        This makes it more obvious what is going on.
        Related to rdar://78865409 but not solving it.

        * UIProcess/API/Cocoa/WKUserContentController.mm:

2021-06-17  Per Arne  <pvollan@apple.com>

        [macOS] Close open connections
        https://bugs.webkit.org/show_bug.cgi?id=227068

        Reviewed by Brent Fulgham.

        On macOS, close open connections in initializeSandboxParameters.

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

2021-06-16  Garrett Davidson  <garrett_davidson@apple.com>

        Passkeys don't work in Simulator
        https://bugs.webkit.org/show_bug.cgi?id=227076
        <rdar://79366832>

        Reviewed by Brent Fulgham.

        Simulator does not support LAAccessControlOperationUseKeySign, so
        -evaluateAccessControl:... returns an error. However, this check isn't actually necessary in
        the simulator when using passkeys, so just skip it.

        Tested registration and assertion in an app in Simulator.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):

2021-06-16  Said Abou-Hallawa  <said@apple.com>

        takeSnapshotWithConfiguration() should wait for the next flush before it does callSnapshotRect()
        https://bugs.webkit.org/show_bug.cgi?id=226257
        <rdar://76411685>

        Reviewed by Simon Fraser and Tim Horton.

        This will ensure the latest IOSurfaces are pushed to backboardd before
        taking the snapshot. Also we need create an implicit transaction to ensure
        a commit will happen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):

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

        Adopt com.apple.security.cs.jit-write-allowlist on internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=222148
        rdar://74284026

        Reviewed by Per Arne Vollan.

        * Scripts/process-entitlements.sh:

2021-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Reenable modern text input UI for non-numeric text input types
        https://bugs.webkit.org/show_bug.cgi?id=226988
        rdar://78102953

        Reviewed by Tim Horton.

        Refactor text input logic on watchOS such that we're able to present the new ("modern") UI for scribble text
        input on watchOS 8, rather than legacy (in-process) scribble UI. Overall, this patch removes
        WKQuickboardListViewController altogether. This had two subclasses: WKSelectMenuListViewController (used for
        focused single and multiple select elements) and WKTextInputListViewController (used for text input types).
        WKSelectMenuListViewController now inherits directly from PUICQuickboardListViewController, and
        WKTextInputListViewController now inherits from PUICQuickboardMessageViewController; this inheritance from
        PUICQuickboardMessageViewController instead of PUICQuickboardListViewController allows the
        WKTextInputListViewController to show text suggestions using `-setMessages:` on
        PUICQuickboardMessageViewController, instead of relying on custom WebKit code to insert text suggestions.

        This means that we move the following pieces of functionality out of WKQuickboardListViewController, and into
        either WKSelectMenuListViewController or WKTextInputListViewController:

        1. Support for inserting and updating context views (i.e. the domain name header view in Quickboard) =>
        WKTextInputListViewController.

        2. Logic for determining whether or not we should show language selection UI => WKTextInputListViewController.

        3. Support for laying out custom collection view cells in Quickboard => WKSelectMenuListViewController.

        * Platform/spi/watchos/PepperUICoreSPI.h:
        * SourcesCocoa.txt:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView createQuickboardTextInputContext]):
        (-[WKContentView _createQuickboardController:]):

        Refactor logic to create a PUICTextInputContext from the current focused element information out into a separate
        helper method, `-createQuickboardTextInputContext`, and use it when both directly launching into
        PUICQuickboardController and WKTextInputListViewController.

        (canUseQuickboardControllerFor):

        Remove a comment, now that we intend to continue using WKTextInputListViewController for non-keychain-AutoFill-
        compatible text fields moving forward.

        (-[WKContentView focusedFormControllerDidUpdateSuggestions:]):
        (-[WKContentView allowsLanguageSelectionForListViewController:]):
        (-[WKContentView textInputContextForListViewController:]):
        (-[WKContentView textContentTypeForTesting]):
        (-[WKContentView viewController:inputContextViewHeightForSize:]): Deleted.

        Remove this delegate method, which was (effectively) unused since we just ask for
        `-inputContextViewForViewController:` from the input delegate anyways.

        (-[WKContentView allowsLanguageSelectionMenuForListViewController:]): Deleted.

        Rename this to `-allowsLanguageSelectionForListViewController:`.

        (-[WKContentView textContentTypeForListViewController:]): Deleted.

        Replace this with `-textInputContextForListViewController:`, which returns a whole PUICTextInputContext instead
        of just a text content type.

        (-[WKContentView textSuggestionsForListViewController:]): Deleted.
        (-[WKContentView listViewController:didSelectTextSuggestion:]): Deleted.

        Remove several delegate methods that are no longer needed.

        * UIProcess/ios/forms/WKDatePickerViewController.h:
        * UIProcess/ios/forms/WKDatePickerViewController.mm:
        (-[WKDatePickerViewController viewWillAppear:]):

        Remove some (defunct) logic for overriding the status bar when showing Quickboard input view controllers. This
        status bar mechanism (which was previously used to show label text for form controls) hasn't worked since
        watchOS 6, and we need to implement this in a way that doesn't use PUICStatusBarGlobalContextViewAssertion.

        * UIProcess/ios/forms/WKQuickboardListViewController.mm: Removed.
        * UIProcess/ios/forms/WKQuickboardViewControllerDelegate.h: Renamed from Source/WebKit/UIProcess/ios/forms/WKQuickboardListViewController.h.
        * UIProcess/ios/forms/WKSelectMenuListViewController.h:
        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        (-[WKSelectMenuItemCell topToLabelBaselineSpecValue]):
        (-[WKSelectMenuItemCell baselineToBottomSpecValue]):
        (-[WKSelectMenuCollectionViewItemCell topToLabelBaselineSpecValue]):
        (-[WKSelectMenuCollectionViewItemCell baselineToBottomSpecValue]):
        (-[WKSelectMenuListViewController initWithDelegate:]):

        See above comment for more details.

        * UIProcess/ios/forms/WKTextInputListViewController.h:
        * UIProcess/ios/forms/WKTextInputListViewController.mm:
        (-[WKTextInputListViewController initWithDelegate:]):
        (-[WKTextInputListViewController reloadContextView]):
        (-[WKTextInputListViewController updateContextViewIfNeeded]):

        Move logic for showing and updating the context view out of WKQuickboardListViewController, and into
        WKTextInputListViewController. See comments above.

        (-[WKTextInputListViewController requiresNumericInput]):
        (-[WKTextInputListViewController additionalTrayButtons]):
        (-[WKTextInputListViewController updateTextSuggestions:]):
        (-[WKTextInputListViewController headerContentViewHeight]):
        (-[WKTextInputListViewController headerContentView]):
        (-[WKTextInputListViewController shouldShowLanguageButton]):
        (-[WKTextInputListViewController supportsDictationInput]):
        (-[WKTextInputListViewController shouldShowTrayView]):
        (-[WKTextInputListViewController shouldShowTextField]):

        Override this and return YES for text input types that don't require an additional numeric input tray button.
        This allows PUICQuickboardMessageViewController to show a native text field containing the input text inside
        quickboard, which (when tapped) presents modern text input UI.

        Since showing the text field is apparently mutually exclusive to showing a tray view, we additionally override
        `-shouldShowTrayView` and return NO for non-numeric text inputs.

        (-[WKTextInputListViewController supportsArouetInput]):
        (-[WKTextInputListViewController viewDidLoad]): Deleted.
        (-[WKTextInputListViewController willPresentArouetViewController:]): Deleted.

        There's no need to override this delegate method anymore, since the PUICTextInputContext's `-initialText` is
        sufficient to ensure that the scribble text input UI is prepopulated with the focused text field's initial text
        content.

        (-[WKTextInputListViewController reloadTextSuggestions]): Deleted.

        Rename this to `-updateTextSuggestions:`, and make it take a list of UITextSuggestions. This makes the code a
        bit easier to follow and allows us to remove the `-textSuggestionsForListViewController:` delegate method.

        (-[WKTextInputListViewController didSelectListItemAtIndexPath:]): Deleted.
        (-[WKTextInputListViewController didSelectListItem:]): Deleted.
        (-[WKTextInputListViewController _didSelectListItem:]): Deleted.
        (-[WKTextInputListViewController numberOfListItems]): Deleted.
        (-[WKTextInputListViewController heightForListItem:width:]): Deleted.
        (-[WKTextInputListViewController cellForListItem:]): Deleted.
        (-[WKTextInputListViewController listItemCellReuseIdentifier]): Deleted.
        (-[WKTextInputListViewController listItemCellClass]): Deleted.
        (-[WKTextInputListViewController itemCellForListItem:forIndexPath:]): Deleted.

        Remove all this code for showing text suggestions in Quickboard UI. Since WKTextInputListViewController is now a
        subclass of PUICQuickboardMessageViewController, we can now simply use the `-messages` property of to populate
        quickboard with text suggestions.

        * UIProcess/ios/forms/WKTimePickerViewController.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        Enable release logging in the network process for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=227087

        Reviewed by Geoffrey Garen.

        Enable release logging in the network process for ephemeral sessions, to facilitate debugging. No domains
        or other sensitive information is logged by WebKit.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::cancel):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadMonitor.cpp:
        (WebKit::DownloadMonitor::applicationWillEnterForeground):
        (WebKit::DownloadMonitor::applicationDidEnterBackground):
        (WebKit::DownloadMonitor::timerFired):
        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::startPreflight):
        (WebKit::NetworkCORSPreflightChecker::willPerformHTTPRedirection):
        (WebKit::NetworkCORSPreflightChecker::didReceiveChallenge):
        (WebKit::NetworkCORSPreflightChecker::didReceiveResponse):
        (WebKit::NetworkCORSPreflightChecker::didReceiveData):
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        (WebKit::NetworkCORSPreflightChecker::wasBlocked):
        (WebKit::NetworkCORSPreflightChecker::cannotShowURL):
        (WebKit::NetworkCORSPreflightChecker::wasBlockedByRestrictions):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::hasUploadStateChanged):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::resolveBlobReferences):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        (WebKit::NetworkConnectionToWebProcess::preconnectTo):
        (WebKit::NetworkConnectionToWebProcess::serverToContextConnectionNoLongerNeeded):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::continueCheckingRequest):
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::convertToDownload):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
        (WebKit::NetworkResourceLoader::restartNetworkLoad):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::didReceiveMainResourceResponse):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::sendResultForCacheEntry):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        (WebKit::NetworkResourceLoader::logSlowCacheRetrieveIfNeeded):
        (WebKit::NetworkResourceLoader::startWithServiceWorker):
        (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.cpp:
        (WebKit::PingLoad::loadRequest):
        (WebKit::PingLoad::didReceiveChallenge):
        (WebKit::PingLoad::didReceiveResponse):
        (WebKit::PingLoad::didReceiveData):
        (WebKit::PingLoad::didCompleteWithError):
        (WebKit::PingLoad::wasBlocked):
        (WebKit::PingLoad::cannotShowURL):
        (WebKit::PingLoad::wasBlockedByRestrictions):
        (WebKit::PingLoad::timeoutTimerFired):
        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::~ServiceWorkerFetchTask):
        (WebKit::ServiceWorkerFetchTask::start):
        (WebKit::ServiceWorkerFetchTask::contextClosed):
        (WebKit::ServiceWorkerFetchTask::startFetch):
        (WebKit::ServiceWorkerFetchTask::didReceiveRedirectResponse):
        (WebKit::ServiceWorkerFetchTask::didReceiveResponse):
        (WebKit::ServiceWorkerFetchTask::didFinish):
        (WebKit::ServiceWorkerFetchTask::didFail):
        (WebKit::ServiceWorkerFetchTask::didNotHandle):
        (WebKit::ServiceWorkerFetchTask::cannotHandle):
        (WebKit::ServiceWorkerFetchTask::cancelFromClient):
        (WebKit::ServiceWorkerFetchTask::continueDidReceiveFetchResponse):
        (WebKit::ServiceWorkerFetchTask::continueFetchTaskWith):
        (WebKit::ServiceWorkerFetchTask::timeoutTimerFired):
        (WebKit::ServiceWorkerFetchTask::softUpdateIfNeeded):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):
        (WebKit::WebSWServerConnection::startFetch):
        (WebKit::WebSWServerConnection::scheduleJobInServer):
        (WebKit::WebSWServerConnection::scheduleUnregisterJobInServer):
        * NetworkProcess/cache/CacheStorageEngineConnection.cpp:
        (WebKit::CacheStorageEngineConnection::open):
        (WebKit::CacheStorageEngineConnection::remove):
        (WebKit::CacheStorageEngineConnection::caches):
        (WebKit::CacheStorageEngineConnection::retrieveRecords):
        (WebKit::CacheStorageEngineConnection::deleteMatchingRecords):
        (WebKit::CacheStorageEngineConnection::putRecords):
        (WebKit::CacheStorageEngineConnection::reference):
        (WebKit::CacheStorageEngineConnection::dereference):
        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::registerMDNSNameCallback):
        (WebKit::NetworkMDNSRegister::registerMDNSName):
        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
        (WebKit::NetworkRTCMonitor::stopUpdating):
        (WebKit::NetworkRTCMonitor::onNetworksChanged):
        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
        (WebKit::NetworkRTCProvider::close):
        (WebKit::NetworkRTCProvider::createSocket):
        * NetworkProcess/webrtc/NetworkRTCProvider.h:

2021-06-16  Brent Fulgham  <bfulgham@apple.com>

        Sandbox profiles need to allow loading from /usr/appleinternal/lib on internal builds
        https://bugs.webkit.org/show_bug.cgi?id=227079
        <rdar://problem/79390957>

        Reviewed by Per Arne Vollan.

        We allow the specific directory "/usr/appleinternal/lib/sanitizers", but we actually need
        access to "/usr/appleinternal/lib" in certain development environments.        

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Clean up WebCookieManagerProxy
        https://bugs.webkit.org/show_bug.cgi?id=227074

        Reviewed by Brady Eidson.

        Remove dead code.  WKCookieManagerSetClient is deprecated and doesn't do anything, so we don't need a client here.
        Use smart pointers instead of raw pointers to be on the safe side.

        * Shared/API/APIObject.h:
        * Sources.txt:
        * SourcesCocoa.txt:
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/APIInspectorExtension.cpp:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::registerObserver):
        (WebKit::WebCookieManagerProxy::unregisterObserver):
        (WebKit::WebCookieManagerProxy::cookiesDidChange):
        (WebKit::WebCookieManagerProxy::initializeClient): Deleted.
        (WebKit::WebCookieManagerProxy::setCookieObserverCallback): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        (WebKit::WebCookieManagerProxy::create): Deleted.
        * UIProcess/WebCookieManagerProxy.messages.in:
        * UIProcess/WebCookieManagerProxyClient.cpp: Removed.
        * UIProcess/WebCookieManagerProxyClient.h: Removed.
        * UIProcess/mac/WebCookieManagerProxyMac.mm: Removed.
        * WebKit.xcodeproj/project.pbxproj:

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

        Clean up API::HTTPCookieStore
        https://bugs.webkit.org/show_bug.cgi?id=227058

        Reviewed by Anders Carlsson.

        This removes code that has been unused since r267763.
        I also use smart pointers instead of raw pointers just to be on the safe side.

        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::~HTTPCookieStore):
        (API::HTTPCookieStore::registerObserver):
        (API::HTTPCookieStore::unregisterObserver):
        (API::HTTPCookieStore::cookiesDidChange):
        (API::HTTPCookieStore::cookieManagerDestroyed): Deleted.
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::generateListenerIdentifier): Deleted.
        (WebKit::processPoolCreationListenerFunctionMap): Deleted.
        (WebKit::WebProcessPool::registerProcessPoolCreationListener): Deleted.
        (WebKit::WebProcessPool::unregisterProcessPoolCreationListener): Deleted.
        (WebKit::WebProcessPool::notifyThisWebProcessPoolWasCreated): Deleted.
        * UIProcess/WebProcessPool.h:

2021-06-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal gl sync objects do not work in case of listener being needed
        https://bugs.webkit.org/show_bug.cgi?id=227024

        Reviewed by Per Arne Vollan.

        Make MTLSharedEventListener instantiatable by adding IOKit messages
        39 and 40 to IOSurfaceRootUserClientMessageFilter.

        The MTLSharedEventListener init would fail, and ANGLE would fail to
        make the shared event signal the event listener. This would cause
        all glClientWaitSync calls to wait the full timeout time.

        No new tests, WebGL2 sync object implementation does not support
        non-zero timeout values that would be needed to detect the failure.
        Standalone test-cases would need the test runner being sandboxed,
        which is not implemented currently.

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

2021-06-16  Per Arne  <pvollan@apple.com>

        Update Media Accessibility preferences in the WebContent process from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=227031
        <rdar://78614882>

        Reviewed by Eric Carlson.

        Due to stricter sandboxing in the WebContent process, Media Accessibility preferences should be updated from the UI process.
        The preferences for caption display mode and preferred caption languages will be sent to the WebContent process on process
        startup and when the preference has been changed.

        * Shared/AccessibilityPreferences.cpp:
        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::encode):
        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::decode):
        * Shared/AccessibilityPreferences.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::accessibilityPreferences):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityPreferencesDidChange):

2021-06-16  Martin Robinson  <mrobinson@webkit.org>

        Replace invalidSnapOffsetIndex with std::optional<unsigned>
        https://bugs.webkit.org/show_bug.cgi?id=226654

        Reviewed by Simon Fraser.

        Use std::optional<unsigned> in order to represent the situation
        where we do not have a snap point selected rather than UINT_MAX.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::currentSnapPointIndicesDidChange):
        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::currentSnapPointIndicesDidChange):
        * UIProcess/RemoteLayerTree/RemoteScrollingTree.h:
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping):
        (WebKit::RemoteScrollingCoordinatorProxy::shouldSnapForMainFrameScrolling const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::currentSnapPointIndicesDidChange const):
        * WebProcess/WebPage/RemoteLayerTree/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::currentSnapPointIndicesChangedForNode):

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

        Remove unused code on API::HTTPCookieStore
        https://bugs.webkit.org/show_bug.cgi?id=227056

        Reviewed by Brady Eidson.

        The dust has settled a bit since r267763.
        Let's clean up!

        * SourcesCocoa.txt:
        * UIProcess/API/APIHTTPCookieStore.cpp:
        (API::HTTPCookieStore::unregisterObserver):
        (API::HTTPCookieStore::cookieManagerDestroyed):
        (API::HTTPCookieStore::flushDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::getAllDefaultUIProcessCookieStoreCookies): Deleted.
        (API::HTTPCookieStore::setCookieInDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::deleteCookieFromDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::startObservingChangesToDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::stopObservingChangesToDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::deleteCookiesInDefaultUIProcessCookieStore): Deleted.
        (API::HTTPCookieStore::setHTTPCookieAcceptPolicyInDefaultUIProcessCookieStore): Deleted.
        * UIProcess/API/APIHTTPCookieStore.h:
        * UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm: Removed.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        * UIProcess/API/Cocoa/WKDownloadInternal.h:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleClickForDataDetectionResult):
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-06-15  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] ConcreteImageBuffer::baseTransform() returns incorrect transform for unaccelerated ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=227044
        <rdar://78642742>

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

2021-06-15  Jean-Yves Avenard  <jya@apple.com>

        REGRESSION: MSE: Netflix playback sometimes fails when going to "next episode" in series
        https://bugs.webkit.org/show_bug.cgi?id=226952
        rdar://77583769

        Reviewed by Eric Carlson.

        Following bug #225396, the remote/proxy MediaPlayer readyState became decoupled
        from the currentTime. In the scenario where a time update was pushed from the
        GPU to the WebContent process, followed by a change of readyState status; should
        the HTMLMediaElement query the MediaPlayer's time in-between those two IPC calls,
        it would be possible for the time to be incorrectly estimated as it assumed it
        had progressed since it received the update.
        Additionally, it was assumed that the only case where the time won't progress
        was if the media element was explicitly paused. This was incorrect it could
        have stalled due to the lack of data such as commonly happen with MSE.
        We add in the time update IPC message a boolean indicating if the GPU's
        MediaPlayer is either stalled or paused and that the time shouldn't advance.
        While this new boolean appears redundant with the values of the cached
        readyState/paused it differs in that timeIsProgressing is accurate at the
        moment the time update is sent and received.

        Test: media/media-source/media-source-seek-unbuffered.html

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPausedOrStalled const): Add utility method.
        (WebKit::RemoteMediaPlayerProxy::currentTimeChanged):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::seek): Set the cached media time to the seek
        value so that reading it back the time will provide accurate data.
        (WebKit::MediaPlayerPrivateRemote::seekWithTolerance): same as with seek method.
        (WebKit::MediaPlayerPrivateRemote::currentTimeChanged): Check if timeIsProgressing
        is true and only estimate the time if we are certain playback has continued.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in: add timeIsProgressing
        to method.

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

        Use more SQL transactions in ResourceLoadStatisticsDatabaseStore
        https://bugs.webkit.org/show_bug.cgi?id=227034

        Reviewed by Kate Cheney.

        Use more SQL transactions in ResourceLoadStatisticsDatabaseStore, for performance.

        I updated the code so that we start a SQL transaction whenever we do more than one
        consecutive "write" statement.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):

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

        Reloading the view should be able to recover if the GPUProcess or NetworkProcess are hung
        https://bugs.webkit.org/show_bug.cgi?id=227051

        Reviewed by Geoffrey Garen.

        Reloading the view should be able to get us out of bad state if the GPUProcess or NetworkProcess are hung.
        This is useful as the first instinct of the user may be to reload the page if the page appears hung.

        Before the change, if the page is in a bad state due to a hung GPUProcess or NetworkProcess and you'd
        reload, the reload would hang indefinitely. After the change, we'll make sure that both processes
        are still responsive when triggering the reload. If they are unresponsive, we kill them and the reload
        is able to proceed.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::didReceiveMessage):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::mainThreadPing):
        * Shared/AuxiliaryProcess.h:
        * Shared/AuxiliaryProcess.messages.in:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::checkForResponsiveness):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/GPU/GPUProcessProxy.messages.in:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::isResponsive):
        (WebKit::WebProcessProxy::isResponsiveWithLazyStop):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-06-15  Jonathan Bedard  <jbedard@apple.com>

        [watchOS 8] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=227050
        <rdar://problem/79365320>

        Reviewed by Tim Horton.

        Covered by existing tests.

        * Platform/spi/watchos/PepperUICoreSPI.h: Add QuickboardController SPI.

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

        Add basic detection of unresponsive Network / GPU Processes
        https://bugs.webkit.org/show_bug.cgi?id=226994

        Reviewed by Geoffrey Garen.

        If a WebProcess A attempts to connect to the GPUProcess / NetworkProcess B and process B
        fails to respond within 3 seconds, we consider process B as unresponsive and terminate
        it. As a result, it will re-attempt to launch process B and connect to it again.

        This helps in the following scenario:
        1. User is in a tab and something looks broken due to the GPUProcess or NetworkProcess
           becoming unresponsive
        2. The user tries to reload the page in a new tab

        Before this patch, the tab would be similarly broken / hung because the GPUProcess or
        NetworkProcess would be unresponsive. After this patch, we would detect the process is
        hung and kill it. As a result, the page would load correctly in a new tab (with a delay).

        In a follow-up, I think we should consider doing the same thing when the user requests
        a reload, so that we don't require opening a new tab to recover. However, this keeps
        the patch small and is a decent first step.

        * Shared/ProcessTerminationReason.h:
        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::AuxiliaryProcessProxy):
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        (WebKit::AuxiliaryProcessProxy::shutDownProcess):
        (WebKit::AuxiliaryProcessProxy::platformIsBeingDebugged const):
        (WebKit::AuxiliaryProcessProxy::stopResponsivenessTimer):
        (WebKit::AuxiliaryProcessProxy::startResponsivenessTimer):
        (WebKit::AuxiliaryProcessProxy::mayBecomeUnresponsive):
        (WebKit::AuxiliaryProcessProxy::didBecomeUnresponsive):
        * UIProcess/AuxiliaryProcessProxy.h:
        (WebKit::AuxiliaryProcessProxy::responsivenessTimer):
        (WebKit::AuxiliaryProcessProxy::responsivenessTimer const):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformIsBeingDebugged const): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        (WebKit::GPUProcessProxy::gpuProcessExited):
        (WebKit::GPUProcessProxy::didBecomeUnresponsive):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didBecomeUnresponsive):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::mayBecomeUnresponsive const):
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gpuProcessExited):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::isResponsive const):
        (WebKit::WebProcessProxy::processTerminated):
        (WebKit::WebProcessProxy::platformIsBeingDebugged const): Deleted.
        (WebKit::WebProcessProxy::mayBecomeUnresponsive): Deleted.
        (WebKit::WebProcessProxy::stopResponsivenessTimer): Deleted.
        (WebKit::WebProcessProxy::startResponsivenessTimer): Deleted.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::responsivenessTimer): Deleted.

2021-06-15  Jonathan Bedard  <jbedard@apple.com>

        [Monterey] Support building WebKit (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Unreviewed follow-up fix.

        Covered by exisiting tests.

        * WebKit.xcodeproj/project.pbxproj: Reset objectVersion.

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

        [iOS] Permit access to 'platform-name' 
        https://bugs.webkit.org/show_bug.cgi?id=227032
        <rdar://problem/79334360>

        Reviewed by Per Arne Vollan.

        Telemetry shows that some media code needs access to 'platform-name'. We allow this in the
        WebContent process, but didn't include it in the GPU Process.

        Make the WebContent and GPU Process consistent in this access. Also adopt the standard rule
        for this used in the system sandbox, which restricts the access to the IOKit class family that
        has this property.

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

2021-06-15  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Support transient zoom
        https://bugs.webkit.org/show_bug.cgi?id=197002

        Reviewed by Michael Catanzaro.

        Speed up pinch zoom for AC mode. Reuse the same infrastructure as the
        macOS implementation. Move the shared code to ViewGestureController.cpp
        where possible.

        Slightly adjust the shared code to support changing the gesture origin
        during the gesture since we support it on both touchscreen and touchpad.

        There's not much we can do for non-AC mode so just keep the current
        behavior there, wrapping real-time zoom into transient zoom API so that
        it's confined to the web process.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseZoomChanged):
        (webkitWebViewBaseZoomEnd):
        (webkitWebViewBaseConstructed):
        (webkitWebViewBaseZoomBegin): Deleted.
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaProxyCoordinatedGraphics::adjustTransientZoom):
        (WebKit::DrawingAreaProxyCoordinatedGraphics::commitTransientZoom):
        * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::scaledMagnificationOrigin):

        Support changing origin during the gesture, cache the page scale factor
        to accommodate non-AC mode doing real-time zooming instead of transient
        zooming.

        (WebKit::ViewGestureController::didCollectGeometryForMagnificationGesture):
        (WebKit::ViewGestureController::prepareMagnificationGesture):
        (WebKit::ViewGestureController::applyMagnification):
        (WebKit::ViewGestureController::endMagnificationGesture):
        (WebKit::ViewGestureController::magnification const):

        Moved from ViewGestureControllerMac.mm.

        * UIProcess/ViewGestureController.h:
        * UIProcess/ViewGestureController.messages.in:
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::setMagnification):
        (WebKit::ViewGestureController::endMagnification):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getCenterForZoomGesture): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::resistanceForDelta):

        Make it a static private method instead of a function so that we can
        keep using minMagnification and maxMagnification in it.

        (WebKit::ViewGestureController::handleMagnificationGestureEvent):
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):

        Set the initial scale and origin before calling scaledMagnificationOrigin().

        (WebKit::resistanceForDelta): Deleted.
        (WebKit::ViewGestureController::scaledMagnificationOrigin):
        (WebKit::ViewGestureController::didCollectGeometryForMagnificationGesture):
        (WebKit::ViewGestureController::endMagnificationGesture):
        (WebKit::ViewGestureController::magnification const):

        Moved to ViewGestureController.cpp.

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

        We only need to set the ApplyScrollingTreeLayerPositions flag when not
        zooming, so add a parameter to do that.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::adjustTransientZoom):
        (WebKit::DrawingAreaCoordinatedGraphics::commitTransientZoom):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::layerFlushTimerFired):
        (WebKit::LayerTreeHost::forceRepaint):
        Don't pass ApplyScrollingTreeLayerPositions when transient zoom is active.

        (WebKit::LayerTreeHost::constrainTransientZoomOrigin const):
        (WebKit::LayerTreeHost::layerForTransientZoom const):
        (WebKit::LayerTreeHost::applyTransientZoomToLayers):
        (WebKit::LayerTreeHost::adjustTransientZoom):
        (WebKit::LayerTreeHost::commitTransientZoom):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::addTransactionCallbackID):
        (WebKit::DrawingArea::commitTransientZoom):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForMagnificationGesture):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:

        Build CollectGeometryForMagnificationGesture for GTK as well.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::getCenterForZoomGesture): Deleted.

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

        [Cocoa] Harden WebAuthn process by restricting to browser-entitled processes
        https://bugs.webkit.org/show_bug.cgi?id=226772
        <rdar://problem/74721877>

        Reviewed by Darin Adler.

        We should ensure that any process attempting to launch the WebAuthn XPC service is entitled as a full web browser. We
        should also ensure that the process requesting WebAuthn operations over WebKit CoreIPC is the WebContent process.

        Tested by existing WebAuthn tests.

        * Platform/Logging.h: Add WebAuthn category.
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::isInWebKitChildProcess): Recognize 'com.apple.WebKit.WebAuthn' as a WebKit sub-process.
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::hasCorrectPACEntitlement): Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getWebAuthnProcessConnection): Add a new MESSAGE_CHECK that the process requesting a WebAuthn
        process connection is a WebContent process.
        * UIProcess/WebProcessProxy.h:
        * WebAuthnProcess/WebAuthnProcess.cpp:
        (WebKit::WebAuthnProcess::platformInitializeWebAuthnProcess): Add some logging.
        * WebAuthnProcess/WebAuthnProcess.h:
        * WebAuthnProcess/ios/WebAuthnProcessIOS.mm:
        (WebKit::WebAuthnProcess::platformInitializeWebAuthnProcess): Ensure that the application invoking the WebAuthn XPC service
        is entitled as a default web browser.
        * WebAuthnProcess/mac/WebAuthnProcessMac.mm:
        (WebKit::WebAuthnProcess::platformInitializeWebAuthnProcess): Stub.
        * WebProcess/WebProcess.cpp:
        (WebKit::getWebAuthnProcessConnection):
        (WebKit::WebProcess::ensureWebAuthnProcessConnection):

2021-06-15  Youenn Fablet  <youenn@apple.com>

        Caches::removeCacheEntry should check for m_storage
        https://bugs.webkit.org/show_bug.cgi?id=227022
        <rdar://79225216>

        Reviewed by Antti Koivisto.

        removeCacheEntry can be called asynchronoulsy in Cache::open for badly formatted content.
        In that case, given this is done asynchronously, m_storage might be nullified.
        Add a nullptr check to cope with this.

        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
        (WebKit::CacheStorage::Caches::removeCacheEntry):

2021-06-15  Jonathan Bedard  <jbedard@apple.com>

        [iOS 15] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=227002
        <rdar://problem/79316598>

        Reviewed by Tim Horton.

        Covered by existing tests.

        * Platform/spi/ios/UIKitSPI.h: Add _insertTextFromCamera.

2021-06-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] CoreMedia WrapperClass does not need alignment fixup
        https://bugs.webkit.org/show_bug.cgi?id=226978
        rdar://78864290

        Reviewed by Geoffrey Garen and Dan Bernstein.

        * Shared/mac/MediaFormatReader/CoreMediaWrapped.h:
        (WebKit::CoreMediaWrapped<Wrapped>::vTable): Don't add padding to WrapperClass,
        it isn't necessary. static_assert CMBaseClass and WrapperClass alignment and
        .version sizes.

2021-06-15  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] New snap containers always snap to the first scroll position
        https://bugs.webkit.org/show_bug.cgi?id=226630

        Reviewed by Simon Fraser.

        * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h: Use invalidSnapOffsetIndex
        instead of 0 to initialize the snap position.

2021-06-14  Alex Christensen  <achristensen@webkit.org>

        Pass PAL::SessionID by value instead of reference
        https://bugs.webkit.org/show_bug.cgi?id=226983

        Reviewed by Geoffrey Garen.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::newTestingSession):
        (WebKit::NetworkProcess::ensureSession):
        (WebKit::NetworkProcess::storageSession const):
        (WebKit::NetworkProcess::findCacheEngine):
        (WebKit::NetworkProcess::ensureCacheEngine):
        (WebKit::NetworkProcess::removeCacheEngine):
        (WebKit::NetworkProcess::flushCookies):
        (WebKit::NetworkProcess::platformFlushCookies):
        (WebKit::NetworkProcess::addWebPageNetworkParameters):
        (WebKit::NetworkProcess::removeWebPageNetworkParameters):
        (WebKit::NetworkProcess::countNonDefaultSessionSets):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldLogCookieInformation):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkStorageSessionProvider.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::Cache::sessionID const):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::flushCookies):
        (WebKit::NetworkProcess::platformFlushCookies):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForSessionID):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::flushCookies):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.h:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Databases/WebDatabaseProvider.h:

2021-06-14  Youenn Fablet  <youenn@apple.com>

        Accessing navigator.mediaDevices.enumerateDevices after granting permission
        https://bugs.webkit.org/show_bug.cgi?id=226969
        <rdar://problem/79286449>

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::checkUsageDescriptionStringForType):
        Check for NSCameraUsageDescription instead of NSMicrophoneUsageDescription for camera.

2021-06-14  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Tighten the WebAuthn Sandbox
        https://bugs.webkit.org/show_bug.cgi?id=226944
        <rdar://problem/74721792>

        Reviewed by Per Arne Vollan.

        Revise the WebAuthn process sandbox to remove the many things originally copied from
        the WebContent sandbox that are not needed.

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

2021-06-14  Per Arne  <pvollan@apple.com>

        [iOS] Sync Accessibility preferences
        https://bugs.webkit.org/show_bug.cgi?id=226738
        <rdar://77922839>

        Reviewed by Brent Fulgham.

        Only attempt to modify Accessibility preferences if they have changed.

        * Shared/AccessibilityPreferences.cpp: Replaced.
        * Shared/AccessibilityPreferences.h: Replaced.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::accessibilityPreferencesDidChange):

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

        [watchOS] Quickboard UI for focused select elements should not allow the user to change the input language
        https://bugs.webkit.org/show_bug.cgi?id=226958

        Reviewed by Tim Horton.

        Fix a couple of bugs around focused select element UI that were introduced in watchOS 7, due to changes in
        PepperUICore. See below for details.

        * UIProcess/ios/forms/WKQuickboardListViewController.mm:
        (-[WKQuickboardListViewController initWithDelegate:]):

        Drive-by fix: remove a `USE(APPLE_INTERNAL_SDK)` guard that was (seemingly) unintentionally added in r262854.

        (-[WKQuickboardListViewController viewDidLoad]): Deleted.

        Avoid hiding the list view controller's `-headerView` when focusing select elements. In watchOS 7, the accept
        and cancel buttons are positioned inside the `-headerView`, so having this logic in the base class
        (WKQuickboardListViewController) means that the Done button in select menus does not show up. In turn, this
        means that currently, users who focus select elements must know to use the crown button to dismiss the select
        menu.

        For now, we move logic to the only other subclass of WKQuickboardListViewController,
        WKTextInputListViewController. However, note that this too is going away in an upcoming patch that refactors
        WKTextInputListViewController so that it directly subclasses PUICQuickboardMessageViewController
        instead of PUICQuickboardListViewController.

        * Platform/spi/watchos/PepperUICoreSPI.h:

        Move a declaration of `-initWithDelegate:dictationMode:` from PUICDictationViewController to
        PUICQuickboardListViewController (see the change in `-[WKQuickboardListViewController initWithDelegate:]` above).

        * UIProcess/ios/forms/WKSelectMenuListViewController.mm:
        (-[WKSelectMenuListViewController shouldShowLanguageButton]):

        Since watchOS 7, the language button is now always shown by default in PUICQuickboardListViewController, with a
        new subclassing hook to avoid showing it. It doesn't make sense to allow the user to change input languages when
        choosing options in a select menu, so we implement this and always return `NO` here.

        * UIProcess/ios/forms/WKTextInputListViewController.mm:
        (-[WKTextInputListViewController viewDidLoad]):

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

        Number pad button is missing its image when tapping on <input type=tel> in watchOS 8
        https://bugs.webkit.org/show_bug.cgi?id=226955

        Reviewed by Darin Adler.

        After some recent PepperUICore changes, the Quickboard button for presenting the number pad when focusing a
        telephone input on watchOS 8 is missing its icon image. To fix this, stop using deprecated SPI for creating
        the list tray button, and instead use `+[PUICQuickboardListTrayButton buttonWithType:]` and `-setAction:` to
        create and set up the button.

        * Platform/spi/watchos/PepperUICoreSPI.h:
        * UIProcess/ios/forms/WKTextInputListViewController.mm:
        (-[WKTextInputListViewController additionalTrayButtons]):

2021-06-12  Peng Liu  <peng.liu6@apple.com>

        REGRESSION (r278374): [Big Sur] ASSERTION FAILED: !isInRoutingArbitrationForToken(token) in WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken()
        https://bugs.webkit.org/show_bug.cgi?id=226787

        Reviewed by Eric Carlson.

        A WebContent process will resume a video element playback after the GPU process crashes
        and restarts. During that process, the WebContent process will set category of the audio
        session, and the UI process will be asked to begin routing arbitration with the new
        category. However, the `SharedRoutingArbitrator` at the UI process will have stale
        routing arbitrator tokens, which lead to the assertion failure.

        To fix this issue, this patch cleans up the `SharedRoutingArbitrator` when the GPU
        process crashes.

        No new tests. Fix an API test:
        - TestWebKitAPI.GPUProcess.CrashWhilePlayingVideo

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

2021-06-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r278754.

        Caused 5 TestWebKitAPI.WKWebView.SnapshotImage* tests to time
        out on iOS

        Reverted changeset:

        "takeSnapshotWithConfiguration() should wait for the next
        flush before it does callSnapshotRect()"
        https://bugs.webkit.org/show_bug.cgi?id=226257
        https://commits.webkit.org/r278754

2021-06-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Clean up some VisionKitCore soft linking code in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226941

        Reviewed by Tim Horton.

        Remove softlinking macros from several files in WebKit; instead, import and use the new PAL soft-linking helper
        functions. Additionally, move a couple of staging forward declarations into the non-internal SDK section of the
        VisionKitCore SPI header.

        * Platform/cocoa/TextRecognitionUtilities.h:
        * Platform/cocoa/TextRecognitionUtilities.mm:
        (WebKit::isLiveTextEnabled):
        (WebKit::isLiveTextAvailableAndEnabled):

        Additionally replace `isLiveTextEnabled` with `isLiveTextAvailableAndEnabled`, and have it check for the
        presence of the VisionKitCore framework in addition to whether the system feature flag is enabled (at least,
        when building with the internal SDK).

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::ensureImageAnalyzer):
        (WebKit::createImageAnalysisRequest):
        (WebKit::WebViewImpl::requestTextRecognition):
        (WebKit::WebViewImpl::computeHasVisualSearchResults):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView actionSheetAssistant:shouldIncludeShowTextActionForElement:]):
        (-[WKContentView actionSheetAssistant:shouldIncludeLookUpImageActionForElement:]):
        (-[WKContentView imageAnalyzer]):
        (-[WKContentView _setUpImageAnalysis]):
        (-[WKContentView _tearDownImageAnalysis]):
        (-[WKContentView createImageAnalysisRequest:image:imageURL:]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):

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

        Partition CrossOriginPreflightResultCache by SessionID
        https://bugs.webkit.org/show_bug.cgi?id=226910

        Reviewed by Youenn Fablet.

        * NetworkProcess/NetworkCORSPreflightChecker.cpp:
        (WebKit::NetworkCORSPreflightChecker::didCompleteWithError):
        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight):

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Enable more release logging in UIProcess/WebProcess for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226945

        Reviewed by Geoffrey Garen.

        Enable more release logging in UIProcess/WebProcess for ephemeral sessions, to facilitate
        debugging.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::requestTermination):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::tryLoadingUsingURLSchemeHandler):
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        (WebKit::WebLoaderStrategy::loadDataURLSynchronously):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::StartUpdating):
        (WebKit::WebRTCMonitor::StopUpdating):
        (WebKit::WebRTCMonitor::networksChanged):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:

2021-06-11  Chris Dumez  <cdumez@apple.com>

        [WK2] Batch local storage database writes using transactions
        https://bugs.webkit.org/show_bug.cgi?id=226938

        Reviewed by Geoff Garen.

        Batch local storage writes using transactions, to improve performance
        and reduce disk writes. In this patch, we use a simple time-based
        approach where we batch transactions happening in the same 500ms
        period.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::startTransactionIfNecessary):
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::setItem):
        (WebKit::LocalStorageDatabase::clear):
        (WebKit::LocalStorageDatabase::close):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::ensureDatabase const):

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

        Don't include certificate info in WebURLSchemeTask::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=226939
        <rdar://79178335>

        Reviewed by Chris Dumez.

        This call was introduced in r215384 but is unused since WKURLSchemeTask isn't used for HTTPS.
        It is causing hangs sometimes, so let's drop it.

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didReceiveResponse):

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

        [Monterey] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Reviewed by Tim Horton.

        * Platform/cocoa/TextRecognitionUtilities.mm: Import VisionKitSPI.h.
        * Platform/spi/Cocoa/VisionKitSPI.h: Added.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (setUpPageLoaderClient): Allow deprecated declarations.
        (setUpPagePolicyClient): Ditto.
        * UIProcess/API/Cocoa/WKConnection.mm:
        (setUpClient): Allow deprecated declarations.
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (setUpConnectionClient): Allow deprecated declarations.
        (setUpInjectedBundleClient): Ditto.
        (setUpHistoryClient): Ditto.
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]): Explicitly define second arugment
        to avoid 'missing field' compilation error.
        * UIProcess/Cocoa/WebViewImpl.mm: Import VisionKitSPI.h.
        * UIProcess/ios/WKContentViewInteraction.mm: Ditto.
        * WebKit.xcodeproj/project.pbxproj: Ditto.

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Enable release logging in ephemeral sessions for parts of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=226929

        Reviewed by Eric Carlson.

        Enable release logging in ephemeral sessions for parts of WebCore, to facilitate debugging.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::serviceWorkerDidNotHandle):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didBlockAuthenticationChallenge):
        (WebKit::WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Regression(r276653) We're going to disk more often for local storage operations
        https://bugs.webkit.org/show_bug.cgi?id=226832

        Reviewed by Darin Adler.

        We're going to disk more often for local storage operations since r276653 because we no
        longer keep items in memory. This results in a slightly increased power usage on one of
        our benchmarks. As a first step to improve this, I am reintroducing a cache of the items
        in memory, as long as the values are not too large (1Kb limit). We still go to disk to
        look up values that are larger than 1Kb to avoid regressing memory usage.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::items const):
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::item const):
        (WebKit::LocalStorageDatabase::itemBypassingCache const):
        (WebKit::LocalStorageDatabase::setItem):
        (WebKit::LocalStorageDatabase::clear):
        (WebKit::LocalStorageDatabase::close):
        (WebKit::LocalStorageDatabase::databaseIsEmpty const):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

2021-06-11  Chris Dumez  <cdumez@apple.com>

        Enable WebProcess' release logging in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226927

        Reviewed by Geoffrey Garen.

        Enable WebProcess' release logging in ephemeral sessions, to faciliate debugging.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::cancelMarkAllLayersVolatile):
        (WebKit::WebProcess::freezeAllLayerTrees):
        (WebKit::WebProcess::unfreezeAllLayerTrees):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::grantUserMediaDeviceSandboxExtensions):
        (WebKit::WebProcess::revokeUserMediaDeviceSandboxExtensions):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::isAlwaysOnLoggingAllowed): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateProcessName):
        (WebKit::WebProcess::updateActivePages):
        (WebKit::WebProcess::updateCPUMonitorState):
        (WebKit::WebProcess::destroyRenderingResources):
        (WebKit::WebProcess::updateFreezerStatus):
        (WebKit::WebProcess::consumeAudioComponentRegistrations):

2021-06-11  Megan Gardner  <megan_gardner@apple.com>

        Rename AppHighlight group to QuickNote to correctly reflect feature.
        https://bugs.webkit.org/show_bug.cgi?id=226888

        Reviewed by Tim Horton.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/API/c/WKContextMenuItemTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/Cocoa/WKMenuItemIdentifiers.mm:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _storeAppHighlight:]):
        (-[WKWebView _addAppHighlightInNewGroup:originatedInApp:]):
        (-[WKWebView _addAppHighlightInNewQuickNote:originatedInApp:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKAppHighlightDelegate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::createAppHighlightInSelectedRange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView targetForAction:withSender:]):
        (-[WKContentView setUpAppHighlightMenusIfNeeded]):
        (-[WKContentView createHighlightForCurrentQuickNoteWithRange:]):
        (-[WKContentView createHighlightForNewQuickNoteWithRange:]):
        (-[WKContentView createHighlightInCurrentGroupWithRange:]): Deleted.
        (-[WKContentView createHighlightInNewGroupWithRange:]): Deleted.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::storeAppHighlight const):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createAppHighlightInSelectedRange):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::highlightIsNewQuickNote const):
        (WebKit::WebPage::highlightIsNewGroup const): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:

2021-06-11  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Crash when dragging an account node above WebView
        https://bugs.webkit.org/show_bug.cgi?id=226811

        Reviewed by Adrian Perez de Castro.

        When we receive empty drag data, this is indicated by length -1, not by 0.

        * UIProcess/API/gtk/DropTargetGtk3.cpp:
        (WebKit::DropTarget::dataReceived):

2021-06-11  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.33.2 release

        * wpe/NEWS: Add release notes for 2.33.2.

2021-06-10  Said Abou-Hallawa  <said@apple.com>

        takeSnapshotWithConfiguration() should wait for the next flush before it does callSnapshotRect()
        https://bugs.webkit.org/show_bug.cgi?id=226257
        <rdar://76411685>

        Reviewed by Simon Fraser.

        This will ensure the latest IOSurfaces are pushed to backboardd before
        taking the snapshot.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed macOS build fix.

        Add some missing header includes.

        * Shared/mac/MediaFormatReader/CoreMediaWrapped.h:
        * Shared/mac/MediaFormatReader/MediaSampleByteRange.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:
        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:

2021-06-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Can't open WebInspector UI since r277787
        https://bugs.webkit.org/show_bug.cgi?id=226908

        Reviewed by Don Olmstead.

        r277787 (Bug 226001) changed the return type of
        WebURLSchemeTask::request() from const WebCore::ResourceRequest&
        to WebCore::ResourceRequest.

        InspectorResourceURLSchemeHandler::platformStartTask shouldn't
        hold the reference of the temporary object.

        * UIProcess/Inspector/win/InspectorResourceURLSchemeHandler.cpp:
        (WebKit::InspectorResourceURLSchemeHandler::platformStartTask):
        Changed the type of requestURL from auto& to auto to copy the URL.

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

        [Live Text] Add a mechanism to regenerate text in an image element when it changes dimensions
        https://bugs.webkit.org/show_bug.cgi?id=226858
        rdar://77522786

        Reviewed by Devin Rousso.

        Push `m_elementsWithTextRecognitionResults` from `WebKit::WebPage` down to `WebCore::Page`. See WebCore
        ChangeLog for more details.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::requestTextRecognition):
        (WebKit::WebPage::updateWithTextRecognitionResult):
        * WebProcess/WebPage/WebPage.h:

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

        [iOS] Sync Accessibility preferences
        https://bugs.webkit.org/show_bug.cgi?id=226738
        <rdar://77922839>

        Reviewed by Brent Fulgham.

        Implement Per-App Accessibility preferences on iOS. The Per-App Accessibility preferences in the WebContent process
        should reflect the values in the UI process. This is addressed by syncing the values between the two processes on
        startup of the WebContent process, and when the values change.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::accessibilityPreferencesChangedCallback):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::accessibilityPreferencesDidChange):

2021-06-10  Sihui Liu  <sihui_liu@apple.com>

        Regression(r278449): add null check for completionHandler in WebIDBServer::close
        https://bugs.webkit.org/show_bug.cgi?id=226900
        rdar://79160392

        Reviewed by Chris Dumez.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::close):

2021-06-10  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Remote video layer should respect video gravity when resizing
        https://bugs.webkit.org/show_bug.cgi?id=226784

        Reviewed by Jer Noble.

        Tested manually.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback): Pass specify video gravity
        when creating remote layer.
        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity): Remember gravity.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

        * WebProcess/GPU/media/VideoLayerRemote.h:
        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.h:
        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
        (-[WKVideoLayerRemote videoGravity]):
        (-[WKVideoLayerRemote setVideoGravity:]):
        (-[WKVideoLayerRemote resizePreservingGravity]): Return true when in PiP, fullscreen,
        or when video gravity is not "resize".
        (-[WKVideoLayerRemote layoutSublayers]): Preserve aspect ration when appropriate.
        (WebKit::createVideoLayerRemote):

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

        Move Timing-Allow-Origin checks to the network process
        https://bugs.webkit.org/show_bug.cgi?id=226678
        <rdar://problem/45227788>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::sendReplyToSynchronousRequest):
        Pass complete metrics with sync xhr responses.  Many of the tests use sync xhr.
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):

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

        Origin is null in http requests when baseURL has custom scheme on iOS 15.0
        https://bugs.webkit.org/show_bug.cgi?id=226760

        Reviewed by Chris Dumez.

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

2021-06-10  Chris Fleizach  <cfleizach@apple.com>

        AX: TestWebKitAPI.WebKit.AccessibilityReduceMotion failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=226758
        <rdar://problem/78984253>

        Reviewed by Alex Christensen.

        For releases that don't have the accessibility update method, the direct setters need to be called
        in order to update the cache.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::increaseContrastPreferenceKey):
        (WebKit::setPreferenceValue):

2021-06-10  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] VinylWall app crashes when tapping on 'format' dropdown menu in 'Add Record' menu
        https://bugs.webkit.org/show_bug.cgi?id=226886
        <rdar://problem/77207322>

        Reviewed by Tim Horton.

        The VinylWall app contains a WKWebView, and uses <select> to let users
        choose options. With the new form controls on iOS, tapping on a <select>
        presents a UIContextMenuInteraction, rather than a picker wheel or
        popover. However, UIContextMenuInteraction is not supported on apps
        linked against an SDK older than iOS 14, resulting in this crash.

        To fix, perform a linked-on-or-after check before showing the new UI
        for <select> and <input type=text> with a <datalist>. If the check
        fails, fallback to the old UI. We already have this check in place for
        other context menus in `-[WKContentView _shouldUseContextMenus]`, so we
        reuse that method.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _shouldShowAutomaticKeyboardUIIgnoringInputMode]):
        (-[WKContentView _elementTypeRequiresAccessoryView:]):
        (-[WKContentView _shouldUseContextMenusForFormControls]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (WebKit::WebDataListSuggestionsDropdownIOS::show):
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl initWithView:]):

2021-06-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r277820): Trackpad interaction in Web Content is not working on iOS or macCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=226892
        <rdar://79080057>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKMouseGestureRecognizer.h:
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        Stop inheriting from UIHoverGestureRecognizer; since r277820
        removed our override of _shouldReceiveTouch, and the default implementation
        always says NO, r277820 broke trackpad-origiating mouse events (but
        left hover working, since that is not a touch).

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Do some hardening in XPCServiceEventHandler()
        https://bugs.webkit.org/show_bug.cgi?id=226860
        <rdar://66837596>

        Reviewed by Geoffrey Garen.

        Do some hardening in XPCServiceEventHandler() to deal with unexpected values and add
        some more logging as well.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        * WebProcess/cocoa/HandleXPCEndpointMessages.h:
        * WebProcess/cocoa/HandleXPCEndpointMessages.mm:
        (WebKit::handleXPCEndpointMessages):

2021-06-10  Chris Dumez  <cdumez@apple.com>

        Enable WebPage's release logging in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226510

        Reviewed by Eric Carlson.

        Enable WebPage's release logging in ephemeral sessions. Our release logging doesn't contain
        anything sensitive and not having this logging makes it hard to debug issues in apps using
        ephemeral sessions.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):
        (WebKit::WebPage::close):
        (WebKit::WebPage::freezeLayerTree):
        (WebKit::WebPage::unfreezeLayerTree):
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        (WebKit::WebPage::touchEventSync):
        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::setIsTakingSnapshotsForApplicationSuspension):
        (WebKit::WebPage::suspend):
        (WebKit::WebPage::resume):
        (WebKit::WebPage::runJavaScript):
        (WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::registerURLSchemeHandler):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2021-06-10  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226763

        Unreviewed non-unified build fixes.

        * Shared/WebPageNetworkParameters.cpp: Add missing inclusion of the ArgumentCoders.h header.

2021-06-09  Megan Gardner  <megan_gardner@apple.com>

        Create SPI file for Synapse so external builds will work.
        https://bugs.webkit.org/show_bug.cgi?id=226844

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/SynapseSPI.h: Added.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        * WebKit.xcodeproj/project.pbxproj:

2021-06-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Duplicate WebKitWebView::show-option-menu confuses introspection, should use --warn-error when building gir
        https://bugs.webkit.org/show_bug.cgi?id=222985

        Reviewed by Adrian Perez de Castro.

        WebKitWebView::show-option-menu has different parameters for GTK than it does for WPE. It
        seems g-ir-scanner is taking the WPE documentation and merging it with the GTK parameters.
        We can fix this by moving the introspection comment into platform-specific files.

        Additionally, let's use --warn-error to turn warnings into errors to prevent this from ever
        happening again, as we already do when generating introspection for JavaScriptCore.

        * PlatformGTK.cmake:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
        (createShowOptionMenuSignal):
        * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
        (createShowOptionMenuSignal):

2021-06-09  Peng Liu  <peng.liu6@apple.com>

        [iOS] UIDelegate::UIClient::fullscreenMayReturnToInline() is not called when a video exits fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=226785

        Reviewed by Eric Carlson.

        On iOS, `UIDelegate::UIClient::fullscreenMayReturnToInline()` is called when
        a video exits picture-in-picture, but not when a video exits fullscreen.
        This patch fixes that.

        We cannot add a regression test for this patch before fixing webkit.org/b/212654.

        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
        (WebKit::VideoFullscreenManagerProxy::exitFullscreen):

2021-06-09  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Do not depend on resources provided by the GNOME icon theme
        https://bugs.webkit.org/show_bug.cgi?id=186767

        Reviewed by Adrian Perez de Castro.

        Covered by existing tests.

        * PlatformGTK.cmake:

2021-06-09  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Add support for navigation gestures
        https://bugs.webkit.org/show_bug.cgi?id=212327

        Reviewed by Michael Catanzaro.

        Make ViewSnapshotStore store GdkTexture instead of Cairo surfaces
        for GTK4. Split ViewSnapshotStoreGtk.cpp into GTK3 and GTK4 versions
        since they don't have much in common.

        When taking a view snapshot, render the web view into a texture.

        When starting a navigation gesture, create a render node from
        either the texture, or a fallback color, then render that instead
        of using Cairo.

        Implement the same dimming+shadow as in GTK3. This time don't bother
        with CSS, the approach we used in GTK3 doesn't work anymore, and since
        elements like scrollbars aren't themeable anyway it's not very important
        to preserve that.

        * SourcesGTK.txt:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTakeViewSnapshot):
        * UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp:
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        * UIProcess/ViewGestureController.h:
        * UIProcess/ViewSnapshotStore.cpp:
        (WebKit::ViewSnapshotStore::didAddImageToSnapshot):
        (WebKit::ViewSnapshotStore::willRemoveImageFromSnapshot):
        * UIProcess/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::estimatedImageSizeInBytes const):
        (WebKit::ViewSnapshot::texture const):
        (WebKit::ViewSnapshot::imageSizeInBytes const): Renamed to estimatedImageSizeInBytes().
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::snapshot):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/gtk/ViewSnapshotStoreGtk3.cpp: Copied from Source/WebKit/UIProcess/gtk/ViewSnapshotStoreGtk.cpp.
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::hasImage const):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::estimatedImageSizeInBytes const):
        (WebKit::ViewSnapshot::size const):
        * UIProcess/gtk/ViewSnapshotStoreGtk4.cpp: Renamed from Source/WebKit/UIProcess/gtk/ViewSnapshotStoreGtk.cpp.
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::hasImage const):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::estimatedImageSizeInBytes const):
        (WebKit::ViewSnapshot::size const):

2021-06-09  Chris Dumez  <cdumez@apple.com>

        Rely on SQLiteDatabase::setMaximumSize() for quota management in LocalStorageDatabase
        https://bugs.webkit.org/show_bug.cgi?id=226788

        Reviewed by Sihui Liu.

        Rely on SQLiteDatabase::setMaximumSize() for quota management in LocalStorageDatabase.
        It simplifies the code a bit.

        No new test, covered by storage/domstorage/quota.html that is still passing.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::setItem):
        (WebKit::LocalStorageDatabase::clear):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

2021-06-08  Alex Christensen  <achristensen@webkit.org>

        Move PrivacyStance code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=226774

        Reviewed by Jer Noble.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toPrivacyStance):
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

2021-06-08  Sam Weinig  <weinig@apple.com>

        Adopt WTF::Span in SQLiteStatement
        https://bugs.webkit.org/show_bug.cgi?id=226773

        Reviewed by Alex Christensen.

        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::addIcon):
        Adopt new bindBlob() signature.

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        MediaPlayerPrivateRemote::didLoadingProgress should not send synchronous message to GPU process
        https://bugs.webkit.org/show_bug.cgi?id=226761
        rdar://78834312

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::didLoadingProgress): Forward call to the actual
        proxied MediaPlayer.
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in: Make message async.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::didLoadingProgress const): This method should no
        longer ever be called, but is required as it's pure-virtual.
        (WebKit::MediaPlayerPrivateRemote::didLoadingProgressAsync const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: Add new didLoadingProgressAsync method.

2021-06-08  Megan Gardner  <megan_gardner@apple.com>

        Upstream AppHighlight Observer code
        https://bugs.webkit.org/show_bug.cgi?id=226794

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::appHighlightsVisibility):
        (WebKit::WebPageProxy::setUpHighlightsObserver):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpAppHighlightMenusIfNeeded]):

2021-06-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Safari tab pill should toggle visibility when tapping on article text on adventure.com
        https://bugs.webkit.org/show_bug.cgi?id=226775
        rdar://78826820

        Reviewed by Tim Horton and Devin Rousso.

        Adjust the meaningful click heuristic to account for click event listeners added to the document node. See below
        for more details.

        Test: fast/events/ios/non-meaningful-click-when-tapping-document.html

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPlatformEditorState const):
        (WebKit::isProbablyMeaningfulClick):

        Remove a check for whether or not the clicked node is an Element; this existed because the call to
        `rootViewBoundsForElement` below takes an Element rather than just a Node; however, this method doesn't do
        anything that requires an Element instead of a Node, so we can just remove the check and refactor these static
        methods to accept Nodes. This allows us to bail early if the clicked node is *either* the body or the document
        node, instead of just the body.

        (WebKit::WebPage::insertDroppedImagePlaceholders):
        (WebKit::elementBoundsInFrame):
        (WebKit::WebPage::rootViewBounds):
        (WebKit::WebPage::absoluteInteractionBounds):
        (WebKit::WebPage::rootViewInteractionBounds):

        Drive-by refactoring: drop the `-ForElement` suffixes on these helper methods, and additionally make them accept
        a Node instead of requiring an Element. This allows us to remove the `is<Element>()` check from the meaningful
        click heuristic above.

        Also deploy RefPtr in a few more places.

        (WebKit::WebPage::dispatchSyntheticMouseEventsForSelectionGesture):
        (WebKit::WebPage::focusedElementInformation):
        (WebKit::WebPage::rootViewBoundsForElement): Deleted.
        (WebKit::WebPage::absoluteInteractionBoundsForElement): Deleted.
        (WebKit::WebPage::rootViewInteractionBoundsForElement): Deleted.

2021-06-08  Devin Rousso  <drousso@apple.com>

        [Payment Request] upstream new features
        https://bugs.webkit.org/show_bug.cgi?id=226740
        <rdar://problem/78963132>

        Reviewed by Andy Estes.

         - recurring line items (`HAVE_PASSKIT_RECURRING_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_RECURRING_LINE_ITEM`)
         - deferred line items (`HAVE_PASSKIT_DEFERRED_SUMMARY_ITEM` and `ENABLE_APPLE_PAY_DEFERRED_LINE_ITEM`)
         - estimated shipping dates (`HAVE_PASSKIT_SHIPPING_METHOD_DATE_COMPONENTS_RANGE` and `ENABLE_APPLE_PAY_SHIPPING_METHOD_DATE_COMPONENTS_RANGE`)
         - coupon code entry (`HAVE_PASSKIT_COUPON_CODE` and `ENABLE_APPLE_PAY_COUPON_CODE`)
         - shipped vs in-store pickup (`HAVE_PASSKIT_SHIPPING_CONTACT_EDITING_MODE` and `ENABLE_APPLE_PAY_SHIPPING_CONTACT_EDITING_MODE`)

         * Platform/cocoa/PaymentAuthorizationViewController.mm:
         (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewController:didChangeCouponCode:handler:]): Added.
         * Platform/ios/PaymentAuthorizationController.mm:
         (-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didChangeCouponCode:handler:]): Added.
        * Platform/cocoa/PaymentAuthorizationPresenter.h:
        * Platform/cocoa/PaymentAuthorizationPresenter.mm:
        (WebKit::toPKPaymentErrorCode):
        (WebKit::PaymentAuthorizationPresenter::completeCouponCodeChange): Renamed from `WebKit::PaymentAuthorizationPresenter::completePaymentMethodModeChange`.
        * Platform/cocoa/WKPaymentAuthorizationDelegate.h:
        * Platform/cocoa/WKPaymentAuthorizationDelegate.mm:
        (-[WKPaymentAuthorizationDelegate completeCouponCodeChange:]): Added.
        (toDateComponents): Added.
        (toDateComponentsRange): Added.
        (toShippingMethod):
        (-[WKPaymentAuthorizationDelegate _didChangeCouponCode:completion:]): Added.
        Add plumbing from/to PassKit for coupon code changes.

        * Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.h:
        * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::completeCouponCodeChange): Renamed from `WebKit::WebPaymentCoordinatorProxy::completePaymentMethodModeChange`.
        (WebKit::WebPaymentCoordinatorProxy::presenterDidChangeCouponCode): Renamed from `WebKit::WebPaymentCoordinatorProxy::presenterDidChangePaymentMethodMode`.
        (WebKit::WebPaymentCoordinatorProxy::canBegin const):
        (WebKit::WebPaymentCoordinatorProxy::canCancel const):
        (WebKit::WebPaymentCoordinatorProxy::canCompletePayment const):
        (WebKit::WebPaymentCoordinatorProxy::canAbort const):
        * Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toNSDateComponents): Added.
        (WebKit::toPKDateComponentsRange): Added.
        (WebKit::toPKShippingMethod):
        (WebKit::toPKShippingContactEditingMode): Added.
        (WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest):
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteCouponCodeChange): Renamed from `WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentMethodModeChange`.
        Convert PassKit objects to/from WebCore objects.

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

        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::completeCouponCodeChange): Renamed from `WebKit::WebPaymentCoordinator::completePaymentMethodModeChange`.
        (WebKit::WebPaymentCoordinator::didChangeCouponCode): Renamed from `WebKit::WebPaymentCoordinator::didChangePaymentMethodMode`.
        Plumbing into/from WebCore.

2021-06-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r278609.

        Broke builds with a linker error.

        Reverted changeset:

        "Update libwebrtc to M92"
        https://bugs.webkit.org/show_bug.cgi?id=226494
        https://commits.webkit.org/r278609

2021-06-08  Chris Dumez  <cdumez@apple.com>

        Reduce use of reinterpret_cast<> in the codebase
        https://bugs.webkit.org/show_bug.cgi?id=226743

        Reviewed by Darin Adler.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerInitializationDataEncountered):
        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::addDataCue):
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        (WebKit::RemoteMediaRecorder::fetchData):
        * NetworkProcess/cache/NetworkCacheDataCurl.cpp:
        (WebKit::NetworkCache::Data::apply const):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::hashString):
        * NetworkProcess/soup/WebKitDirectoryInputStream.cpp:
        (webkitDirectoryInputStreamRead):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<CString>::encode):
        (IPC::ArgumentCoder<String>::encode):
        * Shared/API/c/cf/WKStringCF.mm:
        (WKStringCopyCFString):
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCopyCFURL):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::wrapInSharedBuffer):
        * Shared/SharedDisplayListHandle.h:
        (WebKit::SharedDisplayListHandle::data const):
        * Shared/WebCompiledContentRuleList.cpp:
        (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
        * UIProcess/API/APIWebAuthenticationAssertionResponse.cpp:
        (API::WebAuthenticationAssertionResponse::userHandle const):
        * UIProcess/API/C/WKPage.cpp:
        (dataFrom):
        * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:
        (WebKit::RedirectSOAuthorizationSession::completeInternal):
        * UIProcess/Inspector/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::sendWebInspectorEvent):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::createMessageQueue):
        (WebKit::WebSocketChannel::didReceiveText):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::sendData):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didReceiveStringData):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::sendJavaScriptStream):

2021-06-08  Devin Rousso  <drousso@apple.com>

        Require that callsites of `SnapshotOptions` specify a `PixelFormat` and `DestinationColorSpace`
        https://bugs.webkit.org/show_bug.cgi?id=226756

        Reviewed by Sam Weinig.

        Don't wrap `PixelFormat` or `DestinationColorSpace` with `std::optional` as we want each
        callsite to explicity configure them. This makes it easier to find where values for each
        are used as there's no implicit behavior.

        No behavior change. Followup after r278565.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot const):

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        [MSE] Rework handling of SourceBuffer's buffer full.
        https://bugs.webkit.org/show_bug.cgi?id=226711
        <rdar://problem/78937909>

        Reviewed by Jer Noble.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::evictCodedFrames):
        (WebKit::RemoteSourceBufferProxy::reenqueueMediaIfNeeded):
        * GPUProcess/media/RemoteSourceBufferProxy.h:
        * GPUProcess/media/RemoteSourceBufferProxy.messages.in: Remove capacity and
        buffer full references from all methods; relying on the totalTrackBufferSizeInBytes
        instead.
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::evictCodedFrames):
        (WebKit::SourceBufferPrivateRemote::reenqueueMediaIfNeeded):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:

2021-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.33.2 release

        * gtk/NEWS: Add release notes for 2.33.2.

2021-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Several timing tests failing since r278477
        https://bugs.webkit.org/show_bug.cgi?id=226728

        Reviewed by Michael Catanzaro.

        responseBodyBytesReceived and responseBodyDecodedSize are expected to be always filled, and not only when
        shouldCaptureExtraNetworkLoadMetrics() returns true.

        Fixes: imported/w3c/web-platform-tests/navigation-timing/test_document_onload.html
               imported/w3c/web-platform-tests/navigation-timing/nav2_test_attributes_values.html
               imported/w3c/web-platform-tests/resource-timing/cors-preflight.any.worker.html

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::createRequest):

2021-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r278391): [SOUP] Test fast/dom/webtiming.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=226726

        Reviewed by Michael Catanzaro.

        We need to set network metrics on response even for non HTTP loads now.

        Fixes fast/dom/webtiming.html

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::resume):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):

2021-06-07  Alex Christensen  <achristensen@webkit.org>

        Adopt SecTrustGetCertificateAtIndex replacement where available
        https://bugs.webkit.org/show_bug.cgi?id=225893

        Reviewed by Chris Dumez.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::encodeNSError):
        * UIProcess/Authentication/mac/WebCredentialMac.mm:
        (WebKit::leafCertificate):
        (WebKit::chain):
        (WebKit::WebCredential::WebCredential):

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Unreviewed, reland r276592 with a fix for put() override in prototype chain of a JSProxy
        https://bugs.webkit.org/show_bug.cgi?id=226185

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2021-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Upstream WebKit support for Live Text
        https://bugs.webkit.org/show_bug.cgi?id=226706
        <rdar://problem/78933684>

        Reviewed by Tim Horton.

        See WebCore/ChangeLog for more details.

        * Platform/cocoa/ImageExtractionUtilities.mm: Removed.
        * Platform/cocoa/TextRecognitionUtilities.h: Renamed from Source/WebKit/Platform/cocoa/ImageExtractionUtilities.h.
        * Platform/cocoa/TextRecognitionUtilities.mm: Added.

        Rename ImageExtractionUtilities to TextRecognitionUtilities.

        (WebKit::floatQuad):
        (WebKit::floatQuads):
        (WebKit::makeTextRecognitionResult):
        (WebKit::isLiveTextEnabled):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::TextRecognitionDataDetector>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::TextRecognitionDataDetector>::decodePlatformData):
        (IPC::ArgumentCoder<WebCore::ImageExtractionDataDetectorInfo>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<WebCore::ImageExtractionDataDetectorInfo>::decodePlatformData): Deleted.
        * Shared/TextRecognitionUpdateResult.h: Renamed from Source/WebKit/Shared/ImageExtractionUpdateResult.h.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextRecognitionDataDetector>::encode):
        (IPC::ArgumentCoder<TextRecognitionDataDetector>::decode):
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::encode): Deleted.
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):
        (+[_WKElementAction imageForElementActionType:]):

        Note that we need to keep the _WKElementActionTypeRevealImage SPI symbol, to avoid breaking MobileMail.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleContextMenuLookUpImage):
        (WebKit::WebPageProxy::handleContextMenuRevealImage): Deleted.

        Rename `handleContextMenuRevealImage` to `handleContextMenuLookUpImage`.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::ensureImageAnalyzer):
        (WebKit::createImageAnalysisRequest):
        (WebKit::WebViewImpl::requestTextRecognition):
        (WebKit::WebViewImpl::computeHasVisualSearchResults):

        Rename `computeCanRevealImage` to `computeHasVisualSearchResults`.

        (WebKit::WebViewImpl::acceptsPreviewPanelControl):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::requestTextRecognition):
        (WebKit::PageClient::computeHasVisualSearchResults):
        (WebKit::PageClient::requestImageExtraction): Deleted.
        (WebKit::PageClient::computeCanRevealImage): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        (WebKit::WebPageProxy::requestTextRecognition):
        (WebKit::WebPageProxy::computeHasVisualSearchResults):
        (WebKit::WebPageProxy::updateWithTextRecognitionResult):
        (WebKit::WebPageProxy::requestImageExtraction): Deleted.
        (WebKit::WebPageProxy::computeCanRevealImage): Deleted.
        (WebKit::WebPageProxy::updateWithImageExtractionResult): Deleted.

        Rename `updateWithImageExtractionResult` to `updateWithTextRecognitionResult`.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestTextRecognition):
        (WebKit::PageClientImpl::requestImageExtraction): Deleted.

        Rename `requestImageExtraction` to `requestTextRecognition`.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpInteraction]):
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView deferringGestures]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):
        (-[WKContentView canPerformActionForWebView:withSender:]):
        (-[WKContentView targetForAction:withSender:]):
        (-[WKContentView _didStartProvisionalLoadForMainFrame]):
        (-[WKContentView shouldDeferGestureDueToImageAnalysis:]):
        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView _endImageAnalysisGestureDeferral:]):
        (-[WKContentView _doAfterPendingImageAnalysis:]):
        (-[WKContentView _invokeAllActionsToPerformAfterPendingImageAnalysis:]):
        (-[WKContentView presentVisualSearchPreviewControllerForImage:imageURL:title:imageBounds:appearanceActions:]):
        (-[WKContentView previewController:frameForPreviewItem:inSourceView:]):
        (-[WKContentView previewController:transitionImageForPreviewItem:contentRect:]):
        (-[WKContentView previewControllerDidDismiss:]):
        (-[WKContentView numberOfPreviewItemsInPreviewController:]):
        (-[WKContentView previewController:previewItemAtIndex:]):
        (-[WKContentView provideDataForItem:]):
        (-[WKContentView actionSheetAssistant:shouldIncludeShowTextActionForElement:]):
        (-[WKContentView actionSheetAssistant:showTextForImage:imageURL:title:imageBounds:]):
        (-[WKContentView actionSheetAssistant:shouldIncludeLookUpImageActionForElement:]):
        (-[WKContentView actionSheetAssistant:lookUpImage:imageURL:title:imageBounds:]):
        (-[WKContentView imageAnalyzer]):
        (-[WKContentView hasPendingImageAnalysisRequest]):
        (-[WKContentView _setUpImageAnalysis]):
        (-[WKContentView _tearDownImageAnalysis]):
        (-[WKContentView _cancelImageAnalysis]):
        (-[WKContentView createImageAnalysisRequest:image:imageURL:]):
        (-[WKContentView createImageAnalysisRequest:image:]):
        (-[WKContentView validateImageAnalysisRequestIdentifier:]):
        (-[WKContentView requestTextRecognition:imageData:completionHandler:]):
        (-[WKContentView imageAnalysisGestureDidBegin:]):
        (-[WKContentView imageAnalysisGestureDidFail:]):
        (-[WKContentView imageAnalysisGestureDidTimeOut:]):
        (-[WKContentView _insertTextFromCameraForWebView:]):
        (-[WKContentView captureTextFromCameraForWebView:]):
        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):
        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView contextMenuInteraction:willEndForConfiguration:animator:]):
        (-[WKContentView shouldDeferGestureDueToImageExtraction:]): Deleted.
        (-[WKContentView _endImageExtractionGestureDeferral:]): Deleted.
        (-[WKContentView _doAfterPendingImageExtraction:]): Deleted.
        (-[WKContentView _invokeAllActionsToPerformAfterPendingImageExtraction:]): Deleted.
        * UIProcess/ios/WKImageAnalysisGestureRecognizer.h: Renamed from Source/WebKit/UIProcess/ios/WKImageExtractionGestureRecognizer.h.
        * UIProcess/ios/WKImageAnalysisGestureRecognizer.mm: Renamed from Source/WebKit/UIProcess/ios/WKImageExtractionGestureRecognizer.mm.
        (-[WKImageAnalysisGestureRecognizer initWithImageAnalysisGestureDelegate:]):
        (-[WKImageAnalysisGestureRecognizer setState:]):

        Rename WKImageExtractionGestureRecognizer to WKImageAnalysisGestureRecognizer (along with all adjacent classes).

        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::requestTextRecognition):
        (WebKit::PageClientImpl::computeHasVisualSearchResults):
        (WebKit::PageClientImpl::requestImageExtraction): Deleted.
        (WebKit::PageClientImpl::computeCanRevealImage): Deleted.
        * UIProcess/mac/WKVisualSearchPreviewController.h: Renamed from Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.h.
        * UIProcess/mac/WKVisualSearchPreviewController.mm: Renamed from Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.mm.
        (-[WKVisualSearchPreviewController initWithPage:imageData:title:imageURL:]):
        (-[WKVisualSearchPreviewController beginControl:]):
        (-[WKVisualSearchPreviewController endControl:]):
        (-[WKVisualSearchPreviewController closePanelIfNecessary]):
        (-[WKVisualSearchPreviewController isControlling:]):
        (-[WKVisualSearchPreviewController provideDataForItem:]):
        (-[WKVisualSearchPreviewController numberOfPreviewItemsInPreviewPanel:]):
        (-[WKVisualSearchPreviewController previewPanel:previewItemAtIndex:]):
        (-[WKVisualSearchPreviewController previewPanel:initialActivityForItem:]):

        Rename `WKImageExtractionPreviewController` to `WKVisualSearchPreviewController`.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::beginPreviewPanelControl):
        (WebKit::WebPageProxy::endPreviewPanelControl):
        (WebKit::WebPageProxy::closeSharedPreviewPanelIfNecessary):
        (WebKit::WebPageProxy::showImageInVisualSearchPreviewPanel):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestTextRecognition):
        (WebKit::WebChromeClient::requestImageExtraction): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::requestTextRecognition):
        (WebKit::WebPage::updateWithTextRecognitionResult):
        (WebKit::WebPage::requestImageExtraction): Deleted.
        (WebKit::WebPage::updateWithImageExtractionResult): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-06-07  Devin Rousso  <drousso@apple.com>

        Convert WebCore::SnapshotOptions into an enum class
        https://bugs.webkit.org/show_bug.cgi?id=226730

        Reviewed by Wenson Hsieh.

        Convert `SnapshotOptions` into an `enum class SnapshotFlags` and create a container `struct
        SnapshotOptions` that also allows for changing the `DestinationColorSpace` (defaults to sRGB)
        and `PixelFormat` (defaults to BGRA8).

        No behavior change.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot const):

2021-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Find-in-page should match text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226704

        Reviewed by Tim Horton.

        Add the `PaintAllContent` and `PaintBackgrounds` text indicator options when generating a TextIndicator for
        selected content inside an image overlay. See WebCore/ChangeLog for more details.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::findTextIndicatorOptions):
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        (WebKit::FindController::updateFindIndicator):

2021-06-07  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Unexpected scrolling when switching focus from a text input to a select element
        https://bugs.webkit.org/show_bug.cgi?id=226657
        <rdar://problem/78290515>

        Reviewed by Tim Horton.

        When switching focus from a text input to a select element, UIKit makes
        deferred calls to `-[WKWebView inputView]` after the keyboard dismissal.
        This method calls `-[WKContentView inputViewForWebView]`, which calls
        `-[WKContentView _zoomToRevealFocusedElement]`. Consequently, these
        methods can get invoked while the context menu (dropdown) is displayed
        for a focused select element.

        In this instance, the call should be idempotent, since the focused element
        is fully visible in the viewport. However, since the context menu is visible
        and overlaps the element, our logic incorrectly determines that the element
        is obscured, leading to unexpected zooming/scrolling. To fix, we need to
        correct the logic that determines the visible portion of the view.

        Test: fast/forms/ios/form-control-refresh/select/focus-select-after-textfield.html

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

        Always use the window to determine the portion of the webview that is
        visible, rather than relying on the root view controller's top-most
        full-screen view controller's view.

        The old logic worked fine in most cases, since the root view controller
        and the top-most full-screen view controller are almost always the same.
        Furthermore, the root view controller's view usually takes up the entire
        window.

        However, when the context menu is on screen, the top-most full-screen
        view controller is an internal UIKit view controller
        (_UIContextMenuActionsOnlyViewController), and the associated view
        is the context menu view. This exposed a flaw in the existing logic, as
        visibility detection could be performed by intersecting with an
        incorrect view. In general, the top-most full-screen view is not a
        reliable way to determine the visible portion of the webview.

2021-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Signal "window-object-cleared" not emitted unless frame js context is get before
        https://bugs.webkit.org/show_bug.cgi?id=221771

        Reviewed by Michael Catanzaro.

        This is because when FrameLoader::dispatchDidClearWindowObjectInWorld() is called, the JSWindowProxy for the
        world hasn't been created yet, so it returns early. But we want to dispatch it always for worlds created by the
        API, to ensure that WebKitScriptWorld::window-object-cleared is emmitted.

        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: Implement globalObjectIsAvailableForFrame() to force the
        creation of the JavaScript context for existing WebKitScriptWorlds.

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

        Unreviewed, reverting r277464.
        https://bugs.webkit.org/show_bug.cgi?id=226709

        No longer necessary

        Reverted changeset:

        "Work around WebCore failing to build due to NDEBUG getting
        undefined in release"
        https://bugs.webkit.org/show_bug.cgi?id=225782
        https://trac.webkit.org/changeset/277464

2021-06-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Turn TextIteratorBehaviorFlag into an enum class and wrap it in OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=226691

        Reviewed by Darin Adler.

        See WebCore/ChangeLog for more information.

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::computeTextLegibilityScales):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::plainTextForDisplay):
        (WebKit::rangeNearPositionMatchesText):

2021-06-06  Jean-Yves Avenard  <jya@apple.com>

        [GPUP][MSE] QuotaExceededError Exception not thrown even if the sum of totalTrackBufferSize and appendBuffer size exceeds maximumBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=226034
        rdar://78579904

        Reviewed by Eric Carlson.

        Cache the size of the remote source buffer's track size. We pass an extra
        totalTrackBufferSizeInBytes argument to each method that could impact
        a source buffer size.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendComplete):
        (WebKit::RemoteSourceBufferProxy::removeCodedFrames):
        (WebKit::RemoteSourceBufferProxy::evictCodedFrames):
        * GPUProcess/media/RemoteSourceBufferProxy.h:
        * GPUProcess/media/RemoteSourceBufferProxy.messages.in:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::abort): Add comment explaining on why
        getting an up to date totalTrackBufferSizeInBytes isn't necessary at this point.
        (WebKit::SourceBufferPrivateRemote::removeCodedFrames):
        (WebKit::SourceBufferPrivateRemote::evictCodedFrames):
        (WebKit::SourceBufferPrivateRemote::clearTrackBuffers):
        (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateAppendComplete):
        (WebKit::SourceBufferPrivateRemote::totalTrackBufferSizeInBytes const):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in:

2021-06-06  David Kilzer  <ddkilzer@apple.com>

        Weak external symbols found in WebKit.framework with Release+Coverage configuration
        <https://webkit.org/b/226668>
        <rdar://problem/78890081>

        Reviewed by Darin Adler.

        * Configurations/WebKit.xcconfig:
        (UNEXPORTED_SYMBOL_LDFLAGS):
        - Remove std::function<> symbols as those were replaced
          by WTF::Function<> a while ago.

        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::determineITPStateInternal):
        (WebKit::doesParentProcessHaveITPEnabled):
        - Switch to use TCCSoftLink.h.

        * Shared/Cocoa/TCCSoftLink.h: Add.
        * Shared/Cocoa/TCCSoftLink.mm: Add.
        - Implement a single place for soft-linking to
          TCC.framework.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getProcessIdentifier):
        - Change ProcessIdentifier to WebCore::ProcessIdentifier
          to fix the build since this source file no longer gets
          `using namespace WebCore;` from another source file
          after changes to SourcesCocoa.txt.

        * SourcesCocoa.txt:
        - Add DefaultWebBrowserChecks.mm since it no longer
          contains any SOFT_LINK macros.
        - Add new TCCSoftLink.mm file.

        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::checkUsageDescriptionStringForType):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::isAXAuthenticated):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        - Switch to use TCCSoftLink.h.

        * WebKit.xcodeproj/project.pbxproj:
        - Add TCCSoftLink.{h,mm} to the project.
        - Remove DefaultWebBrowserChecks.mm from the
          WebKit.framework target after adding it to
          SourcesCocoa.txt.

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

        Use `const uint8_t*` type more consistently to store bytes in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226688

        Reviewed by Darin Adler.

        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::parseWebVTTCueData):
        * GPUProcess/media/RemoteTextTrackProxy.h:
        * WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
        (WebKit::TextTrackPrivateRemote::parseWebVTTCueData):

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

        [macOS] Dictionary lookup highlights in image overlays should include background content
        https://bugs.webkit.org/show_bug.cgi?id=226686

        Reviewed by Tim Horton.

        Make a few minor adjustments to text indicator options on macOS when triggering Look Up.

        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

        Add both `PaintAllContent` and `PaintBackgrounds` options when creating text indicators, in the case where the
        indicated range is inside an image overlay.

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

        [macOS] Move DataDetectors softlinking in DataDetectorsSPI.h out into a separate PAL header
        https://bugs.webkit.org/show_bug.cgi?id=226669

        Reviewed by Sam Weinig.

        Adopt the new PAL softlinking header in a few places. See WebCore/ChangeLog for more details. Additionally, move
        several softlinking header imports so that they're the last imported headers in a few sources.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::actionForMenuItem):
        (WebKit::menuItemForTelephoneNumber):
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::decode):
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformDecode):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Optimize a few call sites creating SharedBuffer objects
        https://bugs.webkit.org/show_bug.cgi?id=226674

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataInFrame):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTML):
        (WebKit::WebPage::loadSimulatedRequestAndResponse):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        FileSystem::readFromFile() should return data as `void*`
        https://bugs.webkit.org/show_bug.cgi?id=226671

        Reviewed by Darin Adler.

        FileSystem::readFromFile() should return data as `void*` instead of `char*`. This is more flexible and
        consistent with FileSystem::writeToFile().

        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        * Shared/PersistencyUtils.cpp:
        (WebKit::createForFile):

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r275765) When ignoring HSTS, sometimes loads fail
        https://bugs.webkit.org/show_bug.cgi?id=226670
        <rdar://problem/78066692>

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (setIgnoreHSTS):
        Use the value passed in to the function instead of always false.

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=226623

        Reviewed by Darin Adler.

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer. Also have SharedBuffer::data()
        return a `const uint8_t*` instead of `const char*`. This is our preferred type to store bytes.

        * Platform/IPC/SharedBufferCopy.h:
        (IPC::SharedBufferCopy::data const):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::streamDidReceiveData):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveData):
        * Shared/PersistencyUtils.cpp:
        (WebKit::writeToDisk):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::tryConvertToShareableResourceHandle):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::createMessageQueue):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
        (WebKit::RTCDataChannelRemoteManager::sendData):
        (WebKit::RTCDataChannelRemoteManager::receiveData):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didReceiveRawData):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamDidReceiveData):
        (WebKit::NetscapePlugin::manualStreamDidReceiveData):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didReceiveData):
        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        (WebKit::NetscapePluginStream::deliverData):
        (WebKit::NetscapePluginStream::deliverDataToFile):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData):
        (WebKit::PDFPlugin::streamDidReceiveData):
        (WebKit::PDFPlugin::manualStreamDidReceiveData):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::streamDidReceiveData):
        (WebKit::PluginProxy::manualStreamDidReceiveData):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didReceiveData):
        (WebKit::PluginView::manualLoadDidReceiveData):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::committedLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):

2021-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Meaningful click heuristic should account for media state changes
        https://bugs.webkit.org/show_bug.cgi?id=226655
        rdar://78330664

        Reviewed by Tim Horton and Devin Rousso.

        Teach the "meaningful click" heuristic about changes to media element state flags. See comments below for more
        details.

        Test: fast/events/ios/meaningful-click-when-playing-media.html

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isPlayingMediaDidChange):

        Refactor some logic here so that the WebChromeClient calls into WebPage, which then sends an IPC message to the
        UI process and additionally calls into a private method for platform-specific logic (see WebPageIOS.mm).

        * WebProcess/WebPage/WebPage.h:

        Replace `m_didHandleOrPreventMouseDownOrMouseUpEventDuringSyntheticClick` with another flag,
        `m_currentSyntheticClickMayNotBeMeaningful`, that is initially set to `true` at the beginning of
        `WebPage::completeSyntheticClick`, and consulted after the events have been dispatched to see if anything has
        set it to `false` (currently, this includes only playing media state changes and handled click events by the
        page). If the flag is set to `false`, we then consider the click to have been "meaningful", with respect to the
        `-_webView:didNotHandleTapAsMeaningfulClickAtPoint:` UI delegate method.

        (WebKit::WebPage::platformIsPlayingMediaDidChange):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::didHandleOrPreventMouseDownOrMouseUpEvent):
        (WebKit::WebPage::platformIsPlayingMediaDidChange):

        Make these set `m_currentSyntheticClickMayNotBeMeaningful` to `false`.

2021-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Store MediaPlayer using WeakPtr in MediaPlayerPrivateRemote
        https://bugs.webkit.org/show_bug.cgi?id=224421

        Unreviewed. Address Darin's post commit commnet.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::networkStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setReadyState):
        (WebKit::MediaPlayerPrivateRemote::readyStateChanged):
        (WebKit::MediaPlayerPrivateRemote::volumeChanged):
        (WebKit::MediaPlayerPrivateRemote::muteChanged):
        (WebKit::MediaPlayerPrivateRemote::timeChanged):
        (WebKit::MediaPlayerPrivateRemote::durationChanged):
        (WebKit::MediaPlayerPrivateRemote::rateChanged):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::engineFailedToLoad):
        (WebKit::MediaPlayerPrivateRemote::characteristicChanged):
        (WebKit::MediaPlayerPrivateRemote::sizeChanged):
        (WebKit::MediaPlayerPrivateRemote::firstVideoFrameAvailable):
        (WebKit::MediaPlayerPrivateRemote::renderingModeChanged):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::currentPlaybackTargetIsWirelessChanged):
        (WebKit::MediaPlayerPrivateRemote::mediaPlayerKeyNeeded):
        (WebKit::MediaPlayerPrivateRemote::waitingForKeyChanged):
        (WebKit::MediaPlayerPrivateRemote::initializationDataEncountered):
        (WebKit::MediaPlayerPrivateRemote::resourceNotSupported):
        (WebKit::MediaPlayerPrivateRemote::activeSourceBuffersChanged):
        (WebKit::MediaPlayerPrivateRemote::getRawCookies const):

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Flaky crash under UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy() on the bots
        https://bugs.webkit.org/show_bug.cgi?id=226653

        Reviewed by Eric Carlson.

        The SourceProxy destructor was taking care of calling invalidate() on the SharedRingBufferStorage
        before destroying the CARingBuffer on the main thread, to avoid having SourceProxy::storageChanged()
        called in the middle of destruction. However, the background thread may still be running at this
        point and may reconstruct the RingBuffer right after the invalidate call, causing us to crash
        because storageChanged() still gets called in the middle on destruction.

        To address the issue, we now make sure to stop the rendering thread before we proceed with the
        destruction and invalidate the SharedRingBufferStorage's storage change handler.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy):

2021-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Store MediaPlayer using WeakPtr in MediaPlayerPrivateRemote
        https://bugs.webkit.org/show_bug.cgi?id=224421

        Reviewed by Eric Carlson.

        Made MediaPlayerPrivateRemote::m_player a WeakPtr.

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::load):
        (WebKit::MediaPlayerPrivateRemote::networkStateChanged):
        (WebKit::MediaPlayerPrivateRemote::setReadyState):
        (WebKit::MediaPlayerPrivateRemote::readyStateChanged):
        (WebKit::MediaPlayerPrivateRemote::volumeChanged):
        (WebKit::MediaPlayerPrivateRemote::muteChanged):
        (WebKit::MediaPlayerPrivateRemote::timeChanged):
        (WebKit::MediaPlayerPrivateRemote::durationChanged):
        (WebKit::MediaPlayerPrivateRemote::rateChanged):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::engineFailedToLoad):
        (WebKit::MediaPlayerPrivateRemote::characteristicChanged):
        (WebKit::MediaPlayerPrivateRemote::sizeChanged):
        (WebKit::MediaPlayerPrivateRemote::firstVideoFrameAvailable):
        (WebKit::MediaPlayerPrivateRemote::renderingModeChanged):
        (WebKit::MediaPlayerPrivateRemote::acceleratedRenderingStateChanged):
        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteTextTrack):
        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
        (WebKit::MediaPlayerPrivateRemote::currentPlaybackTargetIsWirelessChanged):
        (WebKit::MediaPlayerPrivateRemote::mediaPlayerKeyNeeded):
        (WebKit::MediaPlayerPrivateRemote::waitingForKeyChanged):
        (WebKit::MediaPlayerPrivateRemote::initializationDataEncountered):
        (WebKit::MediaPlayerPrivateRemote::resourceNotSupported):
        (WebKit::MediaPlayerPrivateRemote::activeSourceBuffersChanged):
        (WebKit::MediaPlayerPrivateRemote::getRawCookies const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):

2021-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the unused `sourceElementID` argument in `Document::updateIsPlayingMedia` and related code
        https://bugs.webkit.org/show_bug.cgi?id=226650

        Reviewed by Chris Dumez.

        Remove more unused code. See WebCore/ChangeLog for more details.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        Implement off-by-default experimental feature for PerformanceResourceTiming.transferSize, encodedBodySize, and decodedBodySize
        https://bugs.webkit.org/show_bug.cgi?id=226629

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        Make attributedBundleIdendifier a property for WKWebViewConfiguration instead of _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=226548
        <rdar://78737547>

        Reviewed by Brady Eidson.

        We have been putting properties to go into the NSURLSessionConfiguration on the _WKWebsiteDataStoreConfiguration.
        This has been ok so far, but now we have an application that needs to run networking attributed to different applications
        but sharing the data storage in the same process.  We now do what we should've done long ago: put these non-storage-related
        properties on the WKWebViewConfiguration.

        I introduce WebPageNetworkParameters which currently has only one member, but will soon have more.

        I made it so that if multiple WKWebViews with the same data store have the same attributedBundleIdendifier, they share an NSURLSession.
        Otherwise, they get their own NSURLSession in a different SessionSet.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::addWebPageNetworkParameters):
        (WebKit::NetworkProcess::removeWebPageNetworkParameters):
        (WebKit::NetworkProcess::countNonDefaultSessionSets):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::addWebPageNetworkParameters):
        (WebKit::NetworkSession::removeWebPageNetworkParameters):
        (WebKit::NetworkSession::countNonDefaultSessionSets const):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::initializeNSURLSessionsInSet):
        (WebKit::NetworkSessionCocoa::SessionSet::initializeEphemeralStatelessSessionIfNeeded):
        (WebKit::NetworkSessionCocoa::addWebPageNetworkParameters):
        (WebKit::NetworkSessionCocoa::removeWebPageNetworkParameters):
        (WebKit::NetworkSessionCocoa::countNonDefaultSessionSets const):
        (WebKit::NetworkSessionCocoa::attributedBundleIdentifier const): Deleted.
        (WebKit::NetworkSessionCocoa::initializeStandardSessionsInSet): Deleted.
        * Shared/WebPageNetworkParameters.cpp: Added.
        (WebKit::WebPageNetworkParameters::encode const):
        (WebKit::WebPageNetworkParameters::decode):
        * Shared/WebPageNetworkParameters.h: Added.
        (WebKit::WebPageNetworkParameters::WebPageNetworkParameters):
        (WebKit::WebPageNetworkParameters::isHashTableDeletedValue const):
        (WebKit::WebPageNetworkParameters::hash const):
        (WebKit::WebPageNetworkParameters::operator== const):
        (WebKit::WebPageNetworkParameters::attributedBundleIdentifier const):
        (WTF::DefaultHash<WebKit::WebPageNetworkParameters>::hash):
        (WTF::DefaultHash<WebKit::WebPageNetworkParameters>::equal):
        * Sources.txt:
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy const):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::setAttributedBundleIdentifier):
        (API::PageConfiguration::attributedBundleIdentifier const):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setAttributedBundleIdentifier:]):
        (-[WKWebViewConfiguration _attributedBundleIdentifier]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _countNonDefaultSessionSets:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
        (-[_WKWebsiteDataStoreConfiguration setAttributedBundleIdentifier:]): Deleted.
        (-[_WKWebsiteDataStoreConfiguration attributedBundleIdentifier]): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::countNonDefaultSessionSets):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
        (WebKit::WebsiteDataStoreConfiguration::copy const):
        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
        (WebKit::WebsiteDataStoreConfiguration::setSourceApplicationSecondaryIdentifier):
        (WebKit::WebsiteDataStoreConfiguration::attributedBundleIdentifier const): Deleted.
        (WebKit::WebsiteDataStoreConfiguration::setAttributedBundleIdentifier): Deleted.
        * WebKit.xcodeproj/project.pbxproj:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        Avoid wasteful large allocation in SpeechRecognitionRemoteRealtimeMediaSource::setStorage()
        https://bugs.webkit.org/show_bug.cgi?id=226644

        Reviewed by Eric Carlson.

        Avoid wasteful large allocation in SpeechRecognitionRemoteRealtimeMediaSource::setStorage().
        setStorage() was setting m_buffer's size to the same size as the RingBuffer (2*sampleRate),
        only to resize it to the size of the rendering quantum (512) later in
        SpeechRecognitionRemoteRealtimeMediaSource::remoteAudioSamplesAvailable().

        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp:
        (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage):

2021-06-04  Alex Christensen  <achristensen@webkit.org>

        Pass NetworkLoadParameters to NetworkDataTaskCocoa constructor
        https://bugs.webkit.org/show_bug.cgi?id=226628

        Reviewed by Sam Weinig.

        No change in behavior.  Just pass a parameters object instead of splitting them into separate parameters.

        * NetworkProcess/NetworkActivityTracker.h:
        (WebKit::NetworkActivityTracker::getPlatformObject const):
        (WebKit::NetworkActivityTracker::getPlatformObject): Deleted.
        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        (WebKit::NetworkDataTaskCocoa::didReceiveResponse):

2021-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Long pressing images on 9gag.com fails to present context menus
        https://bugs.webkit.org/show_bug.cgi?id=226625
        rdar://78136095

        Reviewed by Megan Gardner.

        Make some small adjustments to context menu logic to allow the context menu to appear when long pressing images
        that are inside links (anchor elements) with JavaScript URLs. See below for more details.

        Test: fast/events/touch/ios/long-press-on-image-in-javascript-link.html

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (isJavaScriptURL):

        Pull logic that checks for "javascript" URL schemes into a separate helper function, and use it below.

        (-[WKActionSheetAssistant _createSheetWithElementActions:defaultTitle:showLinkTitle:]):
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):

        Add `_WKElementActionTypeCopy` for image sheets, even when the target URL is a JavaScript URL; even if the image
        is inside a JavaScript URL, we should be capable of triggering the "Copy" action by copying the image data and
        the image URL, rather than the JavaScript URL. The change in `WebPage::performActionOnElement` below ensures
        that we don't end up copying the JavaScript URL.

        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):

        Make another minor adjustment to share the imageURL instead of the target URL in the case where the target is a
        JavaScript URL.

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

        Avoid bailing early with `continueWithContextMenuConfiguration(nil);` in the case where we're long pressing an
        image inside a JavaScript link.

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

        Push the JavaScript URL check in `defaultActionsForImageSheet` down into `WebPage::performActionOnElement`, when
        copying an image. This tweak allows us to still show the Copy action for images in JavaScript URLs, but just
        copy the image and image URL instead of the JavaScript URL.

2021-06-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix more GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=226193

        Reviewed by Adrian Perez de Castro.

        Remove redundant WTFMove that's triggering GCC's -Wredundant-move.

        * Platform/IPC/ArgumentCoder.h:
        (IPC::ArgumentCoder::decode):

2021-06-04  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK][WPE] Expose setCORSDisablingPatterns
        https://bugs.webkit.org/show_bug.cgi?id=219995

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_set_cors_allowlist):
        * 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:

2021-06-03  Sihui Liu  <sihui_liu@apple.com>

        Make WebIDBServer use WorkQueue instead of Thread
        https://bugs.webkit.org/show_bug.cgi?id=226589

        Reviewed by Chris Dumez.

        This matches other storage manager classes and makes management of thread lifetime much easier. We used to
        destroy WebIDBServer aggressively (when there is no connection or task left) to ensure thread of WebIDBServer 
        does not stay around idly, and that led us to create new WebIDBServer for new task right after destroying 
        WebIDBServer and before databases are properly closed in some cases, which can caused issues like database is 
        locked during new task. With WorkQueue, we don't need to manage the threads, and we can close WebIDBServer
        when session is destroyed.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::WebIDBServer::~WebIDBServer):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::postTask):
        (WebKit::WebIDBServer::postTaskReply):
        (WebKit::WebIDBServer::close):
        (WebKit::m_closeCallback): Deleted.
        (WebKit::WebIDBServer::dispatchToThread): Deleted.
        (WebKit::WebIDBServer::tryClose): Deleted.
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::createWebIDBServer):

2021-06-03  Chris Dumez  <cdumez@apple.com>

        stopMakingViewBlankDueToLackOfRenderingUpdate logging shows even if we never made the view blank
        https://bugs.webkit.org/show_bug.cgi?id=226616

        Reviewed by Tim Horton.

        stopMakingViewBlankDueToLackOfRenderingUpdate logging was showing even if we never made the view blank.
        This was confusing so this fix makes the logging conditional.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
        (WebKit::WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate):
        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
        * UIProcess/WebPageProxy.h:

2021-06-03  Chris Dumez  <cdumez@apple.com>

        Fix thread safety issues in [WKShareSheet presentWithParameters]
        https://bugs.webkit.org/show_bug.cgi?id=226611
        <rdar://77736001>

        Reviewed by Ryosuke Niwa.

        The code in [WKShareSheet presentWithParameters] was passing WebCore::RawFile objects to another thread.
        This wasn't safe since WebCore::RawFile contains a WTF::String and a SharedBuffer, both of which are not
        thread safe. Fix this by creating an isolated copy of the fileName String and converting the SharedBuffer
        to a NSData before passing them to the background thread.

        Also rewrite the code from ObjC to C++ because I felt it was clearer and less error-prone.

        * UIProcess/Cocoa/WKShareSheet.mm:
        (appendFilesAsShareableURLs):
        (-[WKShareSheet presentWithParameters:inRect:completionHandler:]):

2021-06-03  Matt Mokary  <mmokary@apple.com>

        Add a way to specify origin and destination of app highlight
        https://bugs.webkit.org/show_bug.cgi?id=226607

        Reviewed by Megan Gardner.

        Expose a method for adding app highlights which allows the caller to specify origin and destination of the new
        highlight. Update the existing method, which specifies originatedInApp: true, newGroup: false, to use this new
        method.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _addAppHighlight]):
        (-[WKWebView _addAppHighlightInNewGroup:originatedInApp:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2021-06-03  Jean-Yves Avenard  <jya@apple.com>

        Add MediaSessionCoordinator test to ensure that disconnection on the private side is properly handled.
        https://bugs.webkit.org/show_bug.cgi?id=226568
        rdar://problem/78801408

        Reviewed by Eric Carlson.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]): Carry on required
        change as coordinatorStateChanged is now pure virtual.
        (-[WKMediaSessionCoordinatorHelper coordinatorStateChanged:]):

2021-06-03  Chris Dumez  <cdumez@apple.com>

        [Hardening] Stop storing raw pointers inside WebIDBServer::m_connections
        https://bugs.webkit.org/show_bug.cgi?id=226595

        Reviewed by Ryosuke Niwa.

        Stop storing raw pointers inside WebIDBServer::m_connections and use a WeakHashSet instead.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::close):
        (WebKit::WebIDBServer::tryClose):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * Platform/IPC/Connection.h:

2021-06-03  Chris Dumez  <cdumez@apple.com>

        Move protector earlier in NetworkProcessProxy::networkProcessDidTerminate()
        https://bugs.webkit.org/show_bug.cgi?id=226594

        Reviewed by Geoffrey Garen.

        Move protector earlier in NetworkProcessProxy::networkProcessDidTerminate() as it seems unsafe
        to do some of the earlier operations before protected |this|.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):

2021-06-03  Chris Dumez  <cdumez@apple.com>

        Stop storing Ref<IPC::Connection> in RTCDataChannelRemoteManagerProxy::m_webProcessConnections
        https://bugs.webkit.org/show_bug.cgi?id=226596

        Reviewed by Eric Carlson.

        Stop storing Ref<IPC::Connection> in RTCDataChannelRemoteManagerProxy::m_webProcessConnections.
        Keeping the IPC::Connection alive always carries the chance of leaking if we fail to properly
        clear the HashMap. We can simply store an IPC::Connection::UniqueID and use that ID to send the
        IPC on the background thread.

        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.cpp:
        (WebKit::RTCDataChannelRemoteManagerProxy::registerConnectionToWebProcess):
        (WebKit::RTCDataChannelRemoteManagerProxy::sendData):
        (WebKit::RTCDataChannelRemoteManagerProxy::close):
        (WebKit::RTCDataChannelRemoteManagerProxy::changeReadyState):
        (WebKit::RTCDataChannelRemoteManagerProxy::receiveData):
        (WebKit::RTCDataChannelRemoteManagerProxy::detectError):
        (WebKit::RTCDataChannelRemoteManagerProxy::bufferedAmountIsDecreasing):
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.h:

2021-06-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Image extraction preview panel should automatically close when the web view is unparented
        https://bugs.webkit.org/show_bug.cgi?id=226588
        rdar://77062762

        Reviewed by Tim Horton.

        Refactor some logic for presenting the preview panel. See below for more details.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleProcessSwapOrExit):
        (WebKit::WebViewImpl::viewDidMoveToWindow):

        When the web view is removed from the view hierarchy (i.e. when the view is moved to a `nil` window), call into
        `closeSharedPreviewPanelIfNecessary` to dismiss the shared preview panel if we're currently controlling its
        presentation for the purposes of image extraction.

        (WebKit::WebViewImpl::beginPreviewPanelControl):
        (WebKit::WebViewImpl::endPreviewPanelControl):

        Add more plumbing into WebPageProxy to begin and end preview panel control; this allows us to avoid having to
        expose a separate method to reset WebPageProxy's `m_imageExtractionPreviewController` and call it from
        WebViewImpl.

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

        Additionally call into `closeSharedPreviewPanelIfNecessary` when committing main frame navigation. We also
        refactor a bit of logic here so that we fold several pieces of similar "reset" logic into a single if statement.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKImageExtractionPreviewController.h:
        * UIProcess/mac/WKImageExtractionPreviewController.mm:
        (-[WKImageExtractionPreviewController beginControl:]):
        (-[WKImageExtractionPreviewController endControl:]):
        (-[WKImageExtractionPreviewController closePanelIfNecessary]):
        (-[WKImageExtractionPreviewController isControlling:]):

        Move logic for assigning, removing, and checking the QLPreviewPanel's `-delegate` and `-dataSource` into helper
        methods on WKImageExtractionPreviewController. Doing this allows us to consolidate more of the QuickLookUI-
        specific logic inside WKImageExtractionPreviewController and WebPageProxy, but also (and more importantly)
        prevents us from having to `#import <pal/spi/mac/QuickLookMacSPI.h>` inside `WebPageProxyMac.mm`, which results
        in nullability errors when calling into `-[NSApplication stopSpeaking:]`.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::beginPreviewPanelControl):
        (WebKit::WebPageProxy::endPreviewPanelControl):
        (WebKit::WebPageProxy::closeSharedPreviewPanelIfNecessary):

2021-06-03  Chris Fleizach  <cfleizach@apple.com>

        AX: macOS WebContent can't read prefs from com.apple.Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=226528

        Reviewed by Per Arne Vollan.

        Some accessibility preferences on macOS use libAccessibility. 
        WebContent should process these on iOS & macOS.

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

2021-06-03  Chris Dumez  <cdumez@apple.com>

        StorageArea should be able to send its IPC directly from the background thread
        https://bugs.webkit.org/show_bug.cgi?id=226583

        Reviewed by Alex Christensen.

        Update StorageArea so that it does its IPC sending straight from the storage thread, instead of
        hopping to the main thread to do so.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::dispatchEvents const):

2021-06-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html is failing since r277493
        https://bugs.webkit.org/show_bug.cgi?id=225904

        Reviewed by Michael Catanzaro.

        Set secureConnectionStart to WebCore::reusedTLSConnectionSentinel in case of reused TLS connection.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didStartRequest):

2021-06-02  Rob Buis  <rbuis@igalia.com>

        Split FillInlinePath/StrokeInlinePath
        https://bugs.webkit.org/show_bug.cgi?id=225687

        Reviewed by Wenson Hsieh.

        Adjust to new display list item types.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::decodeItem):

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Stop using a RefPtr<IPC::Connection> as HashMap key in DisplayLink
        https://bugs.webkit.org/show_bug.cgi?id=226561

        Reviewed by Simon Fraser.

        Stop using a RefPtr<IPC::Connection> as HashMap key in DisplayLink. Using a RefPtr as key is suboptimal
        and could leak to memory leaks. The reason this needed a RefPtr<IPC::Connection> was because we needed
        to send IPC from a background thread. To support this, I have added a static IPC::Connection::send()
        function that takes an IPC::Connection::UniqueID and that is thread safe. The function looks up the
        IPC::Connection from its UniqueID and sends the IPC while still holding the lock.

        As a result, DisplayLink can use IPC::Connection::UniqueID as key instead.

        Note that I am planning to use the new static IPC::Connection::send() in other cases where we could
        send IPC directly from a background thread instead of having to hop to the main thread to look up
        the IPC::Connection from its UniqueID. StorageArea::dispatchEvents() is an example of where this will
        be useful.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::~Connection):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        (WebKit::DisplayLink::removeObservers):
        (WebKit::DisplayLink::removeInfoForConnectionIfPossible):
        (WebKit::DisplayLink::incrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::decrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::setPreferredFramesPerSecond):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * UIProcess/mac/DisplayLink.h:

2021-06-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Show data detector context menu on long press inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226559
        <rdar://problem/78789078>

        Reviewed by Tim Horton.

        Add additional support for data detectors that appear inside image overlays on iOS.

        * Shared/ImageExtractionUpdateResult.h: Added.

        Turn the `bool` propagated back to the UI process when calling `updateWithImageExtractionResult` into a separate
        three-state enum instead; see changes below for more details.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Make some minor adjustments to `InteractionInformationAtPosition`:

        -   Add `dataDetectorBounds`, which determines the bounds in root view coordinates of the data detector result
            corresponding to the hit-tested element.

        -   Encode and decode `dataDetectorResults`, even if `isDataDetectorLink` is `false`. Unless the data detector
            is inside an image overlay, this (effectively) has no impact, since `dataDetectorResults` was previously
            only set if `isDataDetectorLink` was true.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateWithImageExtractionResult):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dataDetectionContextForPositionInformation:]):

        Let `dataDetectorResults` take precedence over regular `bounds` when returning the context for the data
        detector menu configuration.

        (-[WKContentView positionInformationHasImageOverlayDataDetector]):

        Add a helper method that returns `YES` in the case where the currently cached position information object
        contains a text data detection result inside an image overlay.

        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]):

        Use `dataDetectorBounds` instead of `bounds` when creating a fallback targeted preview for a data detection
        result in an image overlay.

        (-[WKContentView continueContextMenuInteraction:]):
        (-[WKContentView continueContextMenuInteractionWithDataDetectors:]):

        Adjust these codepaths so that we'll continue through to the data detector case instead of bailing early in the
        case where both `isImageOverlayText` is set, and `dataDetectionResults` exist.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findDataDetectionResultElementInImageOverlay):

        Add a static helper to locate a data detector element underneath the given point, inside the given element's
        image overlay in the user agent shadow root. Note that we check each of the element's bounds instead of using
        a hit-test because we normally just hit-test to the text containers instead of the data detector containers.

        (WebKit::WebPage::updateWithImageExtractionResult):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::dataDetectorLinkPositionInformation):
        (WebKit::dataDetectorImageOverlayPositionInformation):

        Add a static helper function to populate the given `InteractionInformationAtPosition`, if it's over a data
        detection result inside an image overlay.

        (WebKit::elementPositionInformation): Call the above helper function.

2021-06-02  Alex Christensen  <achristensen@webkit.org>

        Fix WPT test resource-timing/cross-origin-redirects.html
        https://bugs.webkit.org/show_bug.cgi?id=190523
        <rdar://45227788>

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::clearRequest):
        (WebKit::NetworkDataTaskSoup::resume):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidCompleteWithError):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::didRestart):

2021-06-02  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Clean up notification_center message filters
        https://bugs.webkit.org/show_bug.cgi?id=226555
        <rdar://problem/77164076>

        Reviewed by Per Arne Vollan.

        We initially had two groups of mach-message-send filter rules for 'com.apple.system.notification_center' so we could
        collect telemetry on a group of messages. Now that we have removed all the messages we do not need, there is no reason
        to maintain two separate sets.

        This patch just combines the two sets into a single list so we can easily conditionalize it for different OS releases
        if needed.

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

2021-06-02  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r276993): 5 TestWebKitAPI.AudioRoutingArbitration (api-tests) are constant failures
        https://bugs.webkit.org/show_bug.cgi?id=226104
        <rdar://77998049>

        Reviewed by Eric Carlson.

        In r276993, AudioSessionRoutingArbitration was moved from being initiated in the WebContent process
        and dispatched to the UIProcess, to being dispatched to the GPU process. However two problems occurred:

        1) The UIProcess no longer knows about routing arbitration, which is reasonable for the feature, but
           breaks an API test that queries arbitration status in the UIProcess.

        2) A sandbox violation causes routing arbitration to fail in the GPU process regardless.

        We could open up the sandbox to allow routing arbitration to succeed (and come up with a way to push
        state changes up to the UIProcess for testing purposes), but it's not technically necessary for
        arbitration to occur there. Instead, just revert to the status-quo-ante behavior of having arbitration
        take place in the UIProcess, and just add a new set of messages from the GPUConnoctionToWebProcess to
        the GPUProcessConnection to facilitate arbitration.

        Drive-by fix: AudioSessionRoutingArbitrator is a supplement to WebProcess, and as such it's created
        at WebProcess creation time. However, it also causes an AudioSession to be created by attempting to
        add itself as a client. This is bad on iOS, where it could cause hangs due to AVAudioSession calls.
        So, add a mechanism to be notified when an AudioSession eventually does get created, and add the
        arbitrator as a client then.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        * GPUProcess/mac/LocalAudioSessionRoutingArbitrator.cpp:
        (WebKit::LocalAudioSessionRoutingArbitrator::create):
        (WebKit::LocalAudioSessionRoutingArbitrator::LocalAudioSessionRoutingArbitrator):
        (WebKit::LocalAudioSessionRoutingArbitrator::processDidTerminate):
        (WebKit::LocalAudioSessionRoutingArbitrator::beginRoutingArbitrationWithCategory):
        (WebKit::LocalAudioSessionRoutingArbitrator::leaveRoutingAbritration):
        * GPUProcess/mac/LocalAudioSessionRoutingArbitrator.h:
        * GPUProcess/media/RemoteAudioSessionProxyManager.h:
        (WebKit::RemoteAudioSessionProxyManager::session):
        * UIProcess/GPU/GPUProcessProxy.h:
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::beginRoutingArbitrationWithCategory):
        (WebKit::GPUProcessConnection::endRoutingArbitration):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/GPUProcessConnection.messages.in:
        * WebProcess/cocoa/AudioSessionRoutingArbitrator.cpp:
        (WebKit::AudioSessionRoutingArbitrator::AudioSessionRoutingArbitrator):
        * WebProcess/cocoa/AudioSessionRoutingArbitrator.h:

2021-06-02  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r277217?): ASSERTION FAILED: Unhandled message RemoteLegacyCDMSession_SendError to 10 assertionFailureDueToUnreachableCode
        https://bugs.webkit.org/show_bug.cgi?id=226545
        <rdar://78001450>

        Reviewed by Eric Carlson.

        Add message handlers for RemoteLegacyCDMProxy and RemoteLegacyCDMSessionProxy.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::dispatchMessage):
        (WebKit::GPUConnectionToWebProcess::dispatchSyncMessage):

2021-06-02  Per Arne  <pvollan@apple.com>

        [iOS] Fix IOKit sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=226546
        <rdar://78523469>

        Reviewed by Tim Horton.

        Fix IOKit sandbox violations in the WebContent process on iOS.

        * Configurations/SandboxProfiles.xcconfig:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in:
        * WebKit.xcodeproj/project.pbxproj:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Drop Checked::safeGet()
        https://bugs.webkit.org/show_bug.cgi?id=226537

        Reviewed by Geoffrey Garen.

        Drop Checked::safeGet() and replace with uses of Checked::operator T() or Checked::value().
        safeGet() is a bit akward, having both a return value and an out-parameter.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):

2021-06-02  Garrett Davidson  <garrett_davidson@apple.com>

        [Cocoa] _WKAuthenticatorAssertionResponse should specify the attachment type used
        https://bugs.webkit.org/show_bug.cgi?id=225519
        <rdar://problem/76554090>

        Reviewed by Brent Fulgham.

        Have WebAuthn authenticators start passing back their attachment type, and plumb
        it up through to the calling process.

        * UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.mm:
        (-[_WKAuthenticatorAssertionResponse initWithClientDataJSON:rawId:extensions:authenticatorData:signature:userHandle:attachment:]):
        (-[_WKAuthenticatorAssertionResponse initWithClientDataJSON:rawId:extensions:authenticatorData:signature:userHandle:]): Deleted.
        * UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponseInternal.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.mm:
        (-[_WKAuthenticatorAttestationResponse initWithClientDataJSON:rawId:extensions:attestationObject:attachment:]):
        (-[_WKAuthenticatorAttestationResponse initWithClientDataJSON:rawId:extensions:attestationObject:]): Deleted.
        * UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponseInternal.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorResponse.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorResponse.mm:
        (-[_WKAuthenticatorResponse initWithClientDataJSON:rawId:extensions:attachment:]):
        (-[_WKAuthenticatorResponse initWithClientDataJSON:rawId:extensions:]): Deleted.
        * UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (authenticatorAttachmentToWKAuthenticatorAttachment):
        (wkAuthenticatorAttestationResponse):
        (-[_WKWebAuthenticationPanel makeCredentialWithChallenge:origin:options:completionHandler:]):
        (wkAuthenticatorAssertionResponse):
        (-[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::getExistingCredentials):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp:
        (WebKit::WebAuthenticatorCoordinatorProxy::handleRequest):
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.h:
        * UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.messages.in:
        * UIProcess/WebAuthentication/fido/CtapAuthenticator.cpp:
        (WebKit::CtapAuthenticator::continueMakeCredentialAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetAssertionAfterResponseReceived):
        (WebKit::CtapAuthenticator::continueGetNextAssertionAfterResponseReceived):
        * UIProcess/WebAuthentication/fido/U2fAuthenticator.cpp:
        (WebKit::U2fAuthenticator::continueRegisterCommandAfterResponseReceived):
        (WebKit::U2fAuthenticator::continueSignCommandAfterResponseReceived):
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.cpp:
        (WebKit::WebAuthnConnectionToWebProcess::handleRequest):
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.h:
        * WebAuthnProcess/WebAuthnConnectionToWebProcess.messages.in:

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Use Checked aliases instead of Checked<T, RecordOverflow>
        https://bugs.webkit.org/show_bug.cgi?id=226535

        Reviewed by Keith Miller.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::numBytesForSize):
        * Shared/ShareableBitmap.h:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::calculateBytesPerRow):
        (WebKit::ShareableBitmap::calculateBytesPerPixel):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::calculateBytesPerRow):
        (WebKit::ShareableBitmap::calculateBytesPerPixel):
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::calculateBytesPerRow):
        (WebKit::ShareableBitmap::calculateBytesPerPixel):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::calculateSafeBackendSize):

2021-06-01  Darin Adler  <darin@apple.com>

        Remove <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=226437

        Reviewed by Chris Dumez.

        * <many files>: Removed include of <wtf/Optional.h>.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Rename Checked::unsafeGet() to Checked::value()
        https://bugs.webkit.org/show_bug.cgi?id=226514

        Reviewed by Darin Adler.

        Rename Checked::unsafeGet() to Checked::value(). The "unsafeGet" naming is confusing as this
        function isn't really unsafe since it will crash if the value has overflowed. Also add an
        `operator T()` to implicitly convert a Checked to its underlying type without needing to
        call value().

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::setItem):
        * NetworkProcess/cache/CacheStorageEngineCache.cpp:
        (WebKit::CacheStorage::Cache::put):
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::Connection::sendOutgoingMessage):
        (IPC::createMessageDecoder):
        * Platform/IPC/cocoa/MachMessage.cpp:
        (IPC::MachMessage::create):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode const):
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::bytesPerRow const):
        (WebKit::ShareableBitmap::sizeInBytes const):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::create):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::calculateBytesPerRow):
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::createCGImage const):
        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::copyTrackArray):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::copySampleLocation const):
        * WebProcess/GPU/graphics/DisplayListWriterHandle.cpp:
        (WebKit::DisplayListWriterHandle::advance):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::calculateBytesPerRow):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::frameBytesAtIndex const):
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::increaseBufferedAmount):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestEvasionRectsAboveSelection):
        (WebKit::WebPage::updateSelectionWithDelta):

2021-06-01  Dana Estra  <destra@apple.com>

        Adopt Reveal for phone numbers
        https://bugs.webkit.org/show_bug.cgi?id=226383
        rdar://78482517

        Reviewed by Tim Horton.

        Manually tested by selecting text containing phone numbers in Safari and viewing dropdown menu.
        
        Switch to Reveal framework to show a dropdown menu for telephone numbers with more options.

        * Platform/mac/MenuUtilities.mm:
        (-[WKEmptyPresenterHighlightDelegate revealContext:rectsForItem:]):
        (WebKit::menuForTelephoneNumber):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r278253.

        Revert changes to WebKitTests.swift as this is Swift's Optional<> not WTF's.

        * SwiftOverlay/Tests/WebKitTests.swift:
        (WebKitTests.testWKPDFConfigurationRect):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r278253.

        Revert changes to ObjectiveCBlockConversions.swift and this is Swift's Optional<> not WTF's.

        * SwiftOverlay/SwiftOverlay/ObjectiveCBlockConversions.swift:
        (ObjCBlockConversion.boxingNilAsAnyForCompatibility(_:Error:Error:)):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION (iOS 14.5): Can't go back and render previous page properly after "location.href"
        https://bugs.webkit.org/show_bug.cgi?id=226323
        <rdar://problem/78623536>

        Reviewed by Alex Christensen.

        A while back, we did an optimization to allow several WebPage objects associated with the
        same WebPageProxy to live in the same WebProcess. This allowed us to reuse a process from
        a SuspendedPageProxy for a forward navigation, without destroying the SuspendedPageProxy.
        However, this added quite a bit of complexity and this broke some same-process back/forward
        navigations like in this bug. In particular, it is really hard to get do our history
        management right (with the current model) if there is more than more WebPage in a process
        for the same WebPageProxy.

        To address issues, we go back to the older model with one WebPage per WebProcess for a
        given WebPageProxy. To achieve this, we make sure to destroy of SuspendedPageProxy objects
        for the current page and destination process before we process-swap (like we used to do).

        * UIProcess/WebBackForwardCache.cpp:
        (WebKit::WebBackForwardCache::removeEntriesForPageAndProcess):
        * UIProcess/WebBackForwardCache.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):

2021-06-01  Sihui Liu  <sihui_liu@apple.com>

        Resume WebIDBServer when it is about to be closed
        https://bugs.webkit.org/show_bug.cgi?id=226502
        rdar://78691498

        Reviewed by Chris Dumez.

        We started to acquire m_serverLock in WebIDBServer::close() in r278179 to stop database activities on the main
        thread. However, m_serverLock may already be held for suspension, and WebIDBServer::close() may be called 
        before resume(). We need to resume WebIDBServer so m_serverLock can be acquired for stopping database activities.
        This also makes sure background thread is resumed before WebIDBServer is removed from NetworkProcess.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::~WebIDBServer):
        (WebKit::WebIDBServer::close):

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Enable WebPageProxy's release logging in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=226342

        Reviewed by Geoff Garen.

        Enable WebPageProxy's release logging in ephemeral sessions. Our release logging doesn't
        contain anything sensitive and not having this logging makes it hard to debug issues in
        apps using ephemeral sessions.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::shouldStart):
        (WebKit::SOAuthorizationSession::start):
        (WebKit::SOAuthorizationSession::continueStartAfterGetAuthorizationHints):
        (WebKit::SOAuthorizationSession::continueStartAfterDecidePolicy):
        (WebKit::SOAuthorizationSession::fallBackToWebPath):
        (WebKit::SOAuthorizationSession::abort):
        (WebKit::SOAuthorizationSession::complete):
        (WebKit::SOAuthorizationSession::presentViewController):
        (WebKit::SOAuthorizationSession::dismissViewController):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::processDidTerminate):
        (WebKit::ProvisionalPageProxy::cancel):
        (WebKit::ProvisionalPageProxy::loadData):
        (WebKit::ProvisionalPageProxy::loadRequest):
        (WebKit::ProvisionalPageProxy::goToBackForwardItem):
        (WebKit::ProvisionalPageProxy::didCreateMainFrame):
        (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCommitLoadForFrame):
        (WebKit::ProvisionalPageProxy::didCreateContextInWebProcessForVisibilityPropagation):
        (WebKit::ProvisionalPageProxy::didCreateContextInGPUProcessForVisibilityPropagation):
        * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::isAlwaysOnLoggingAllowed const):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::launchProcess):
        (WebKit::WebPageProxy::suspendCurrentPageIfPossible):
        (WebKit::WebPageProxy::swapToProvisionalPage):
        (WebKit::WebPageProxy::launchProcessForReload):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::tryCloseTimedOut):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadDataWithNavigationShared):
        (WebKit::WebPageProxy::loadSimulatedRequest):
        (WebKit::WebPageProxy::loadAlternateHTML):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::updateThrottleState):
        (WebKit::WebPageProxy::clearAudibleActivity):
        (WebKit::WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate):
        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
        (WebKit::WebPageProxy::receivedNavigationPolicyDecision):
        (WebKit::WebPageProxy::commitProvisionalPage):
        (WebKit::WebPageProxy::continueNavigationInNewProcess):
        (WebKit::WebPageProxy::suspend):
        (WebKit::WebPageProxy::resume):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didExplicitOpenForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::willPerformClientRedirectForFrame):
        (WebKit::WebPageProxy::didCancelClientRedirectForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::didNavigateWithNavigationDataShared):
        (WebKit::WebPageProxy::didPerformClientRedirectShared):
        (WebKit::WebPageProxy::didPerformServerRedirectShared):
        (WebKit::WebPageProxy::closePage):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::resetStateAfterProcessTermination):
        (WebKit::WebPageProxy::dispatchProcessDidTerminate):
        (WebKit::WebPageProxy::tryReloadAfterProcessTermination):
        (WebKit::WebPageProxy::requestStorageSpace):
        (WebKit::WebPageProxy::updateReportedMediaCaptureState):
        (WebKit::WebPageProxy::didExceedInactiveMemoryLimitWhileActive):
        (WebKit::WebPageProxy::didExceedBackgroundCPULimitWhileInForeground):
        (WebKit::WebPageProxy::logger):
        * UIProcess/WebPageProxy.h:

2021-06-01  Per Arne  <pvollan@apple.com>

        [iOS] Preprocess the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=226301
        <rdar://problem/78575178>

        Reviewed by Geoffrey Garen.

        Run the WebContent sandbox through the preprocessor on iOS.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Removed.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in: Copied from Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.
        * WebKit.xcodeproj/project.pbxproj:

2021-06-01  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Try harder to find initial WebKitWebView size
        https://bugs.webkit.org/show_bug.cgi?id=226320

        Reviewed by Michael Catanzaro.

        Currently we base the viewport size on the drawing area size. The
        drawing area is created with an initial size based on the viewport
        size, which will be (0, 0) because the drawing area is still null
        by that point.

        Then, later, during the widget allocation, the drawing area receives
        its proper size.

        There are 2 issues here. First, this approach guarantees that the
        initial viewport size will always be (0, 0), and then there's no
        guarantee the widget will be allocated any time soon - for example,
        while GtkNotebook in GTK3 does allocate children that aren't currently
        visible, GtkStack doesn't (and that means that GtkNotebook in GTK4 and
        HdyTabView don't either). This leads to a situation where a page opened
        in background will load with 0, 0 size and if a page depends on that,
        it won't load correctly.

        The first issue can be fixed by basing the viewport size on the view
        allocation as well, and then if the widget isn't allocated, we instead
        try to use the size of a parent as an estimation, so that the initial
        size is at least not 0 even if not fully accurate.

        See https://gitlab.gnome.org/GNOME/epiphany/-/issues/1532

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewSize):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseGetViewSize):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2021-05-30  Dean Jackson  <dino@apple.com>

        [WebXR] Send recommendedResolution using DeviceProxy
        https://bugs.webkit.org/show_bug.cgi?id=226402
        <rdar://problem/78635475>

        Reviewed by Tim Horton.

        Add a recommendedResolution field to DeviceInfo and send
        it across processes using the XRDeviceProxy.

        * Shared/Cocoa/XRDeviceInfo.h:
        * Shared/Cocoa/XRDeviceInfo.mm:
        (WebKit::XRDeviceInfo::encode const):
        (WebKit::XRDeviceInfo::decode):
        * Shared/Cocoa/XRDeviceProxy.h:
        * Shared/Cocoa/XRDeviceProxy.mm:
        (WebKit::XRDeviceProxy::XRDeviceProxy):

2021-05-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] UI process crashes when deallocating WKWebView in a script message handler during an active touch event
        https://bugs.webkit.org/show_bug.cgi?id=226426
        rdar://75425319

        Reviewed by Darin Adler.

        It's possible for the UI process to crash upon being notified that asynchronous, active touch events have been
        handled in the web process via the async IPC replay block in `WebPageProxy::handlePreventableTouchEvent()`. This
        happens if the client posts a message from the web process to UI process while handling an active touch event
        and deallocates the WKWebView currently handling the touch event in the script message handler.

        This is because the async replay block inside `WebPageProxy::handlePreventableTouchEvent()` strongly captures a
        reference to the `WebPageProxy`, thus keeping it alive; however, the `WebPageProxy`'s weak pointer to the page
        client is nulled out, which causes `WebPageProxy::pageClient()` to crash with a null dereference.

        To fix this, we weakly capture `WebPageProxy` instead and return early if it has already been destroyed by the
        time we process the completion handler, and also add a null check for `m_pageClient` before attempting to call
        into it. Note that it's unnecessary to call into `doneDeferringTouch(Start|End)` to unblock any deferred
        gestures here, because the process of destroying the content view will call `-cleanUpInteraction` and remove all
        deferring gestures from the view, regardless of whether they're still in Possible state.

        Test: TouchEventTests.DestroyWebViewWhileHandlingTouchEnd

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

2021-05-30  Darin Adler  <darin@apple.com>

        Remove WTF::Optional synonym for std::optional, using that class template directly instead
        https://bugs.webkit.org/show_bug.cgi?id=226433

        Reviewed by Chris Dumez.

        * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>.

        * Scripts/webkit/tests: Regenerated expected results, by running the command "python
        Scripts/webkit/messages_unittest.py -r". (How am I supposed to know to do that?)

2021-05-28  Darin Adler  <darin@apple.com>

        Clients of optional should use has_value instead of relying on hasValue macro
        https://bugs.webkit.org/show_bug.cgi?id=226395

        Reviewed by Chris Dumez.

        * Platform/IPC/ArgumentCoders.h: Use std::optional; there was no hasValue
        in here and I edited it by mistake, but we want to do this eventually.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm: Removed using namespace WebCore.
        (IPC::ArgumentCoder<Ref<WebCore::Font>>::decodePlatformData): Use has_value.
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getClientSDKVersion): Ditto.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::decodeImage): Changed idiom to not call hasValue.
        (IPC::ArgumentCoder<Ref<Font>>::decode): Ditto.

        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::finishParsing): Use has_value.
        (WebKit::MediaFormatReader::copyProperty): Ditto.
        (WebKit::MediaFormatReader::copyTrackArray): Ditto.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (IPC::ArgumentCoder<Ref<Font>>::decodePlatformData): Do not call hasValue.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration encodeWithCoder:]): Changed idiom to not use hasValue.

        * UIProcess/API/glib/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::setState): Use has_value.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::AutomationCommandError::toProtocolString): Changed idiom to not use hasValue.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::determineDataOwner const): Use has_value.

        * UIProcess/Inspector/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::sendWebInspectorEvent): Changed idiom to not use hasValue.
        * UIProcess/glib/UserMediaPermissionRequestManagerProxyGLib.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::platformValidateUserMediaRequestConstraints): Ditto.

        * WebProcess/GPU/media/MediaSourcePrivateRemote.cpp:
        (WebKit::MediaSourcePrivateRemote::addSourceBuffer): Use has_value.
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::platformDidReceiveLoadParameters): Ditto.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::notifyPreferencesChanged): Changed idiom to not
        call hasValue.

2021-05-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process terminates when attempting to log in on bankid.no
        https://bugs.webkit.org/show_bug.cgi?id=226411
        rdar://77419432

        Reviewed by Chris Dumez.

        See WebCore ChangeLog for more details.

        * GPUProcess/graphics/RemoteImageBuffer.h:

        Implement the new display list replayer delegate hooks and plumb the calls over to the RemoteRenderingBackend.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::submit):

        Keep track of `m_currentMaskImageBuffer` by implementing the methods below, and use this when initializing our
        DisplayList::Replayer if needed.

        (WebKit::RemoteRenderingBackend::didCreateMaskImageBuffer):
        (WebKit::RemoteRenderingBackend::didResetMaskImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:

2021-05-28  Don Olmstead  <don.olmstead@sony.com>

        [Cocoa] HDR variants in HLS playlists not selected when screen is HDR
        https://bugs.webkit.org/show_bug.cgi?id=226349
        <rdar://76963977>

        Unreviewed build fix after r278204.

        Update the method signature of RemoteMediaPlayerProxy::prepareForPlayback for non-Cocoa
        platforms.

        * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp:
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        * GPUProcess/media/playstation/RemoteMediaPlayerProxyPlayStation.cpp:
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        * GPUProcess/media/win/RemoteMediaPlayerProxyWin.cpp:
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):

2021-05-28  Sihui Liu  <sihui_liu@apple.com>

        Regression(r278179): m_serverLock is still held after WebIDBServer is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=226389

        Reviewed by Chris Dumez.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::close):

2021-05-28  Matt Gilligan  <matthew_gilligan@apple.com>

        Prevent resetting scroll position in unnecessary cases during page load
        https://bugs.webkit.org/show_bug.cgi?id=226338
        rdar://75334651

        Reviewed by Simon Fraser.

        When WKWebView's scroll view has a refresh control and is rubber banding along the top
        edge, don't cancel scrolling animations or reset contentOffset within valid range due to
        the page load. This can cause flickering during dragging and can prevent the bounce
        animation from finishing.

        Test: ScrollViewInsetTests.PreserveContentOffsetForRefreshControl

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _didCommitLoadForMainFrame]):
        Avoid calling -_stopScrollingAndZoomingAnimations when rubber banding for a refresh control
        to prevent cancelling a bounce animation.

        (-[WKWebView _restoreScrollAndZoomStateForTransaction:]):
        (-[WKWebView _didCommitLayerTree:]):
        Don't adjust content offset to be within valid range when rubber banding for a refresh
        control, or the scroll position will be reset while dragging or bouncing.

        (-[WKWebView _scrollViewIsRubberBandingForRefreshControl]):
        Return whether _scrollView has a refresh control and is rubber banding along the top edge.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _setContentSizePreservingContentOffsetDuringRubberband:]):
        When the refresh control is dismissing, the scroll view will be rubber banding but not
        dragging or bouncing. Treat a non-nil refreshControl as a hint that the scroll view might
        be rubber banding.

2021-05-28  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Hang in WebM format reader when loading content from https://powerrangers.fandom.com/
        https://bugs.webkit.org/show_bug.cgi?id=226128
        <rdar://77645877>

        Reviewed by Eric Carlson.

        When creating a format reader, MediaToolbox will query for various properties including ones about
        MetadataFormat and MetadataKeySpace. We don't support those properties, but we still block until
        tracks are loaded before answering that we don't support them. Instead, just return early unless
        the query is for the one property which we do support, Duration.

        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::copyProperty):

2021-05-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Adjust logic when determining whether to enable image extraction actions in the callout bar
        https://bugs.webkit.org/show_bug.cgi?id=226387
        rdar://76781788

        Reviewed by Tim Horton and Devin Rousso.

        Call into the superclass (which contains additional restrictions beyond our `isContentEditable` check on the
        editor state), and additionally refactor this helper function to take a selector and return whether or not it is
        one of the image extraction action selectors (as opposed to returning the selector itself).

        See Radar for more details.

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

2021-05-28  Sam Weinig  <weinig@apple.com>

        Add stub implementation of CA separated portal bits for GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=226343

        Reviewed by Simon Fraser.

        Plumbs isSeparatedPortal and isDescendentOfSeparatedPortal bits through GraphicsLayer.
        Renames setSeparated to setIsSeparated for consistency.

        Currently unused, but getting the bits in is big enough that its helpful
        to land on its own.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode const):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::RemoteLayerTreeTransaction): Deleted.
        (WebKit::RemoteLayerTreeTransaction::~RemoteLayerTreeTransaction): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setIsSeparated):
        (WebKit::PlatformCALayerRemote::isSeparatedPortal const):
        (WebKit::PlatformCALayerRemote::setIsSeparatedPortal):
        (WebKit::PlatformCALayerRemote::isDescendentOfSeparatedPortal const):
        (WebKit::PlatformCALayerRemote::setIsDescendentOfSeparatedPortal):
        (WebKit::PlatformCALayerRemote::setSeparated): Deleted.
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:

2021-05-28  Jer Noble  <jer.noble@apple.com>

        [Cocoa] HDR variants in HLS playlists not selected when screen is HDR
        https://bugs.webkit.org/show_bug.cgi?id=226349
        <rdar://76963977>

        Reviewed by Eric Carlson.

        An existing test, http/tests/media/hls/hls-hdr-switch.html, should have caught this regression,
        but is not currently functional as it depends on PHP, which has been removed.

        The preferredDynamicRangeMode needs to be piped over from WebContent -> GPU process.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setPreferredDynamicRangeMode):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
        (WebKit::MediaPlayerPrivateRemote::setPreferredDynamicRangeMode):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2021-05-28  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Correctly compute wheel event phase for 2D axis events
        https://bugs.webkit.org/show_bug.cgi?id=226370

        Reviewed by Adrian Perez de Castro.

        2D-capable wpe_input_axis_event objects don't have usable axis and delta
        values set on the base struct, but keep all that information on the more
        detailed wpe_input_axis_2d_event struct.

        For such events, the correct phase then has to be special-cased,
        otherwise the default determination marks both axes as inactive and only
        PhaseEnded events are dispatched into the engine.

        * UIProcess/API/wpe/WPEView.cpp:
        (WKWPE::m_backend):

2021-05-28  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] [Video/Audio/Text]TrackPrivateRemote.h should use startTimeVariance
        https://bugs.webkit.org/show_bug.cgi?id=226355
        rdar://77326202

        Reviewed by Jer Noble.

        Test: http/tests/media/hls/hls-webvtt-seek-backwards.html

        * WebProcess/GPU/media/AudioTrackPrivateRemote.h: Use configuration.startTimeVariance.
        * WebProcess/GPU/media/TextTrackPrivateRemote.h: Ditto.
        * WebProcess/GPU/media/VideoTrackPrivateRemote.h: Ditto.

2021-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement NetworkDataTask::setPriority
        https://bugs.webkit.org/show_bug.cgi?id=226371

        Reviewed by Adrian Perez de Castro.

        To update the soup message priority. In HTTP/2 soup can send a priority frame to prioritize the associated
        stream.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::setPriority):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Add debug logging around some shared display list codepaths
        https://bugs.webkit.org/show_bug.cgi?id=226356

        Reviewed by Simon Fraser.

        Add logging around the shared display list processing logic between the web and GPU processes. This is the basic
        set of log messages I've used in the past to triage crashes and hangs while optimizing MotionMark performance,
        and should be sufficient for some basic debugging around display list code around RemoteRenderingBackend(Proxy).

        * GPUProcess/graphics/RemoteImageBuffer.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::wakeUpAndApplyDisplayList):

        Log when wakeup messages are sent by the web process and received by the GPU process.

        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * Platform/Logging.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::waitForDidFlushWithTimeout):

        Log when synchronous flushes are performed, as well as whether they time out.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::sendWakeupMessage):
        (WebKit::RemoteRenderingBackendProxy::createItemBuffer):

        Log whenever new display list shared memory is created, and also when display lists are reused (additionally
        logging the remaining capacity on reused display lists).

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Show context menu when clicking on data detection results in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226274
        rdar://75504956

        Reviewed by Tim Horton and Aditya Keerthi.

        Implement a WebKit2 client hook to handle a click over a data detection result by using the Reveal framework to
        collect and present a context menu. See below for more details.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<DataDetectorElementInfo>::encode):
        (IPC::ArgumentCoder<DataDetectorElementInfo>::decode):
        * Shared/WebCoreArgumentCoders.h:

        Add encoding and decoding support for DataDetectorElementInfo.

        * SourcesCocoa.txt:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleClickForDataDetectionResult):
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::view const):

        Add a helper method to grab the view (either a WKView or WKWebView) from a WebViewImpl.

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

        Create and present a new WKRevealItemPresenter using the DDScannerResult.

        (WebKit::WebViewImpl::didFinishPresentation):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::handleClickForDataDetectionResult):

        Add more plumbing through the UI process to handle clicking on a data detection result.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::handleClickForDataDetectionResult):
        * UIProcess/mac/WKRevealItemPresenter.h: Added.
        * UIProcess/mac/WKRevealItemPresenter.mm: Added.

        Add a helper class that takes an RVItem and is capable of presenting a context menu for the item, on behalf of
        WebViewImpl. For the time being, this is only used on macOS (and thus, directly holds a WeakPtr to a
        WebViewImpl). However, we may want to use this in the future for Mac Catalyst as well, in which case we should
        make this work via a generic WKRevealItemPresenterDelegate protocol instead.

        (-[WKRevealItemPresenter initWithWebViewImpl:item:frame:menuLocation:]):
        (-[WKRevealItemPresenter showContextMenu]):
        (-[WKRevealItemPresenter _callDidFinishPresentationIfNeeded]):

        Call out to the WebViewImpl to reset its current reveal item presenter after we've finished presentation. This
        happens either after we've dismissed the context menu (if no item is highlighted), or after we've finished
        highlighting the item.

        (-[WKRevealItemPresenter revealContext:rectsForItem:]):
        (-[WKRevealItemPresenter revealContext:shouldUseDefaultHighlightForItem:]):
        (-[WKRevealItemPresenter revealContext:startHighlightingItem:]):
        (-[WKRevealItemPresenter revealContext:stopHighlightingItem:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleClickForDataDetectionResult):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::handleClickForDataDetectionResult):
        * WebProcess/WebPage/WebPage.h:

2021-05-27  Darin Adler  <darin@apple.com>

        Next step toward using std::optional directly instead of through WTF::Optional typedef
        https://bugs.webkit.org/show_bug.cgi?id=226280

        Reviewed by Chris Dumez.

        * <many files>: Accept the renaming done by do-webcore-rename.

2021-05-27  Devin Rousso  <drousso@apple.com>

        [iOS] contextmenu hints don't follow scrolling inside `<iframe>`
        https://bugs.webkit.org/show_bug.cgi?id=226055

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didScroll]):
        (-[WKContentView _removeContainerForContextMenuHintPreviews]):
        (-[WKContentView _updateFrameOfContainerForContextMenuHintPreviewsIfNeeded]): Added.
        (-[WKContentView _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:]): Added.
        (-[WKContentView _createTargetedContextMenuHintPreviewForFocusedElement]): Added.
        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]): Added.
        (-[WKContentView overridePositionTrackingViewForTargetedPreviewIfNecessary:containerScrollingNodeID:]): Deleted.
        Save the `UIScrollView` containing the target of the contextmenu.  Whenever any view is
        scrolled, adjust the `frame` of the `_contextMenuHintContainerView` so that the contextmenu
        hint moves by the amount of scrolling that's happened since the contextmenu hint was shown.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollViewForScrollingNodeID const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::scrollView const): Added.
        `ScrollingTreeFrameScrollingNodeRemoteIOS` also has a corresponding `UIScrollView`.

        * Platform/spi/ios/UIKitSPI.h:
        Remove declaration for no-longer-used SPI.

2021-05-27  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Silence reports about 'com.apple.runningboard'
        https://bugs.webkit.org/show_bug.cgi?id=226357
        <rdar://problem/76144219>

        Reviewed by Per Arne Vollan.

        We blocked access to 'com.apple.runningboard' from the WebContent process in Bug 209933 (about a year ago). Since
        then, the only telemetry we have received has been for a benign Accessibility call that fails closed in way that
        does not impact the features of the Accessibility Framework used inside the WebContent process.

        We should silence this report to avoid spending time symbolicating and generating traces.

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

2021-05-27  Sihui Liu  <sihui_liu@apple.com>

        Abandon pending tasks on background thread when WebIDBServer is closed
        https://bugs.webkit.org/show_bug.cgi?id=226295

        Reviewed by Chris Dumez.

        When WebIDBServer is closed, it means there is no open connection to client, so we don't need to handle pending
        tasks. We can ditch them by killing the CrossThreadQueue. For ongoing task, it can be blocked on quota check, so
        let's just stop database activities on the main thread to make sure database lock is released.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::close):
        * NetworkProcess/IndexedDB/WebIDBServer.h:

2021-05-27  Alex Christensen  <achristensen@webkit.org>

        Revert r277344
        https://bugs.webkit.org/show_bug.cgi?id=225602
        <rdar://78411776>

        It caused more sandbox issues.  We are going to see if we can just remove the connection killing, but first we revert the cause of problems.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::terminateWithReason):

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor some data detector code in WebCore::Frame
        https://bugs.webkit.org/show_bug.cgi?id=226267

        Reviewed by Andy Estes and Devin Rousso.

        See WebCore/ChangeLog for more details.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::removeDataDetectedLinks):
        (WebKit::WebPage::detectDataInAllFrames):

        Use DataDetectionResultsStorage instead of setting the array of scanner results directly on Frame.

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

2021-05-27  Tim Horton  <timothy_horton@apple.com>

        Introduce BifurcatedGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226318

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::create):

2021-05-27  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.33.1 release

        * wpe/NEWS: Add release notes for 2.33.1

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

        Calling -[WKWebView _closeAllMediaPresentations] crashes
        https://bugs.webkit.org/show_bug.cgi?id=226305

        Reviewed by Chris Dumez.

        Provide an empty completion handler to fix a crash.

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

2021-05-27  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK4] Navigation swipe snapshot always times out
        https://bugs.webkit.org/show_bug.cgi?id=226332

        Reviewed by Michael Catanzaro.

        Enable ViewGestureGeometryCollector for GTK4 as well.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:

2021-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Add validation when reading DisplayListSharedMemoryHeader::waitingStatus in DisplayListReaderHandle
        https://bugs.webkit.org/show_bug.cgi?id=226306
        rdar://78118900

        Reviewed by Chris Dumez.

        Store this waiting status (an enum class with three valid states) as a raw `uint8_t` in shared memory, rather
        than an `enum class`. This allows us to verify that this value indicates a valid waiting status (using
        `isValidEnum`) upon reading this flag in the GPU process, and perform a `MESSAGE_CHECK` in the case where it is
        invalid.

        * GPUProcess/graphics/DisplayListReaderHandle.h:
        (WebKit::DisplayListReaderHandle::startWaiting):
        (WebKit::DisplayListReaderHandle::stopWaiting):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        * Shared/SessionState.cpp:
        (WebKit::PageState::decode):
        * Shared/SessionState.h:

        Drive-by fix: remove a non-templated declaration of `isValidEnum()`. This is necessary in order to use
        `WTF::isValidEnum` without the explicit WTF namespace prefix inside `DisplayListReaderHandle`, since WTF's
        declaration of `isValidEnum` clashes with this declaration.

        Instead of using this separate method for validating the enum, simply encode and decode the
        `shouldOpenExternalURLsPolicy` enum using << and >> operators, respectively; this ensures that the decoded value
        of `shouldOpenExternalURLsPolicy` is either valid, or the result will be WTF::nullopt if decoding fails or
        results in an invalid enum.

        * Shared/SharedDisplayListHandle.h:
        * WebProcess/GPU/graphics/DisplayListWriterHandle.h:
        (WebKit::DisplayListWriterHandle::tryToResume):

2021-05-27  Alexander Mikhaylenko  <alexm@gnome.org>

        Transient quarter display with a HiDPI /4k screen and a 200% scaling
        https://bugs.webkit.org/show_bug.cgi?id=219202

        Reviewed by Adrian Perez de Castro.

        Set the root layer transformation before syncing animations and not after.
        This way we avoid having the first frame use the wrong scale on hidpi.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Leverage the new Vector(const T*, size_t) constructor
        https://bugs.webkit.org/show_bug.cgi?id=226304

        Reviewed by Darin Adler.

        Leverage the new Vector(const T*, size_t) constructor in existing code.

        * Platform/IPC/ArrayReference.h:
        (IPC::ArrayReference::vector const):
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (vectorFromNSData):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::setIconForPageURL):
        * UIProcess/Cocoa/SOAuthorization/SubFrameSOAuthorizationSession.mm:
        (WebKit::WebCore::convertBytesToVector):
        * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
        (WebKit::WebInspectorUIExtensionControllerProxy::evaluateScriptForExtension):
        * UIProcess/WebAuthentication/Cocoa/HidConnection.mm:
        (WebKit::reportReceived):
        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::toVector):
        (WebKit::LocalAuthenticatorInternal::aaguidVector):
        * UIProcess/WebAuthentication/Cocoa/NfcConnection.mm:
        (WebKit::NfcConnection::transact const):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didReceiveData):

2021-05-26  Tim Horton  <timothy_horton@apple.com>

        Fix the ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER) build

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::create):
        Missed one GraphicsContext!

2021-05-26  Jean-Yves Avenard  <jya@apple.com>

        Make MediaSession readystate enums all lowercase
        https://bugs.webkit.org/show_bug.cgi?id=226213
        <rdar://problem/78437011>

        Reviewed by Eric Carlson.

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

2021-05-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Support USE_ANGLE_EGL on additional platforms
        https://bugs.webkit.org/show_bug.cgi?id=224888
        <rdar://problem/77280211>

        Reviewed by Ken Russell.

        Use the ANGLE library targets when applicable.

        * CMakeLists.txt:

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Add release logging in WebPage::runJavaScriptInFrameInScriptWorld()
        https://bugs.webkit.org/show_bug.cgi?id=226286

        Reviewed by Geoffrey Garen.

        Add release logging in WebPage::runJavaScriptInFrameInScriptWorld(). We have logging on UIProcess side but not on
        WebProcess side. It makes it hard to determine if the WebProcess processed the request to run JS or not.

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

2021-05-25  Lauro Moura  <lmoura@igalia.com>

        Unreviewed, another GCC8 build fix after r278035
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Missed from previous patch.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::SerializedPlatformDataCueValue>::decode):

2021-05-25  Lauro Moura  <lmoura@igalia.com>

        Unreviewed, fix GCC8 build after r278035

        Avoid "...from initializer list would use explicit constructor ..." errors
        in GCC8 when initializing std::optional.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::HandleArray::decode):

2021-05-25  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        _WKRemoteObjectRegistry should not call completion handlers if block signatures don't match or can't be found
        https://bugs.webkit.org/show_bug.cgi?id=226189

        Reviewed by Chris Dumez.

        _WKRemoteObjectRegistry already enforces completion handlers to not be nil,
        so complete that enforcement by dropping invocations where block signatures aren't available
        or don't match. This has not reproduced but completes our hardening efforts.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]):

2021-05-25  Tim Horton  <timothy_horton@apple.com>

        Virtualize GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226170

        Reviewed by Simon Fraser.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * Shared/win/ShareableBitmapDirect2D.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/win/BackingStoreDirect2D.cpp:
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::paint):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::pdfSnapshotAtSize):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawPagesToPDFImpl):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::renderPage):

2021-05-25  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Update usage of libWPE API
        https://bugs.webkit.org/show_bug.cgi?id=226231

        Reviewed by Ross Kirsling.

        Update to use 1.6.0+ API version.

        * UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:
        (WKPageHandleWheelEvent):

2021-05-24  Darin Adler  <darin@apple.com>

        Switch from WTF::Optional to std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Reviewed by Chris Dumez.

        * Platform/IPC/ArgumentCoder.h:
        (IPC::ArgumentCoder::decode): Add a WTFMove. Turns out this was not needed
        to get compiling with std::optional, but it's a good idea for performance.
        This is one of those cases where it looks like the return value optimization
        would work, but it doesn't because the return value doesn't exactly match
        the local variable's type.

        * Shared/TouchBarMenuData.h: Remove some overzealous use of explicit that
        was preventing some files from compiling with the stricter std::optional
        constructor rules, while it did not prevent compiling with WTF::Optional.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::switchToBrowsingContext): Removed an unused
        lambda capture and local variable. Not clear how this is related to
        std::optional, but showed up as a compiler warning.

2021-05-25  Matt Mokary  <mmokary@apple.com>

        Ensure app highlight visibility observer is initialized before adding a new highlight
        https://bugs.webkit.org/show_bug.cgi?id=226214
        rdar://78173370

        Reviewed by Wenson Hsieh.

        The app highlight visibility observer is initialized before restoring highlights, but was not initialized
        before adding a new one. It must be initialized before adding a highlight so a change in visibility resulting
        from a new highlight is handled correct.

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

2021-05-25  Simon Fraser  <simon.fraser@apple.com>

        Initialize WebCore and WebKit logging channels in the GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=226210

        Reviewed by Andy Estes.
        
        Send the strings representing the enabled WebCore and WebKit logging channels to the
        GPU Process, and use them to initialize log channels there, as we do for the WebContent
        process.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):

2021-05-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Handle null native surface handle for surfaceless rendering
        https://bugs.webkit.org/show_bug.cgi?id=226165

        Reviewed by Philippe Normand.

        During ThreadedCompositor initialization, a null native surface handle
        would represent a surfaceless rendering target. Assuming corresponding
        driver support for this behavior, the GL context creation would still
        succeed and composition could be performed.

        To support this behavior, the GL context is now spawned first, and if
        successful, the scene is set as active. But in case of a null native
        surface (i.e. surfaceless rendering), the painting has to be mirrored
        by default because of the OpenGL coordinate system being the immediate
        coordinate system inside which we end up working.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::createGLContext):

2021-05-24  Chris Dumez  <cdumez@apple.com>

        [GLIB] Stop using UncheckedLock in IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=226190

        Reviewed by Sam Weinig.

        Stop using UncheckedLock in IconDatabase to benefit from Clang thread-safety analysis.

        * UIProcess/API/glib/IconDatabase.h:

2021-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Adjust meaningful click heuristic to detect focus changes and editable content
        https://bugs.webkit.org/show_bug.cgi?id=226199
        rdar://78368624

        Reviewed by Tim Horton.

        Fine tune the "meaningful click" heuristic by not dispatching a non-meaningful click message to the UI process
        in the cases where the tap:

        - Causes the focused element to change.
        - Is over a form control or editable element.

        Test: fast/events/ios/meaningful-click-when-focusing-body.html

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

2021-05-24  Devin Rousso  <drousso@apple.com>

        [iOS DnD] [WK2] don't cancel the long-press gesture until we know we have `UIDragItem`
        https://bugs.webkit.org/show_bug.cgi?id=226188
        <rdar://problem/77448503>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dragInteraction:prepareForSession:completion:]):
        (-[WKContentView dragInteraction:itemsForBeginningSession:]):
        Instead of `_cancelLongPressGestureRecognizer` when first asked to get `UIDragItem`, only
        call it once we actually have `UIDragItem`. This shouldn't change the behavior of r218812
        as we're still `_cancelLongPressGestureRecognizer` before generating `UITargetedDragPreview`
        or animating them (i.e. before the drag starts). This allows a synthetic click from a
        long-press gesture to be dispatched in the case that drag gesture has no items.

2021-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Fix build failure for WK API WTF::String usage
        https://bugs.webkit.org/show_bug.cgi?id=226204

        Reviewed by Tim Horton.

        Build fix for WTF string usage.

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

2021-05-24  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        - Update ImageBuffer subclass signatures to use "const DestinationColorSpace&" to
          conform to the base class.
        - Replace ColorSpaceData with Optional<DestinationColorSpace>. No reason to have two
          types that are the same.
        - Give all ports a color space configuration for ShareableBitmap now that there is
          a common class for representing color space.
        - Update DisplayList decoding to account for BeginClipToDrawingCommands and GetPixelBuffer
          no longer being inlineable due to now having non-trivial destructors due to 
          DestinationColorSpace member.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::create):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::createFrameImageAtIndex):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.messages.in:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Configuration::encode const):
        (WebKit::ShareableBitmap::Configuration::decode):
        * Shared/ShareableBitmap.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::colorSpace):
        * Shared/mac/ColorSpaceData.h: Removed.
        * Shared/mac/ColorSpaceData.mm: Removed.
        * SourcesCocoa.txt:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::colorSpace):
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::recursivelyMapIOSurfaceBackingStore):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::colorSpace):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::colorSpace):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::configuration):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::create):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::create):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::createFrameImageAtIndex):
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::nativeImageForCurrentTime):
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createImageBuffer const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertDragImageToBitmap):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setColorSpace):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::snapshotOptionsToBitmapConfiguration):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setColorSpace):

2021-05-24  Dana Estra  <destra@apple.com>

        Remove deprecated API usage in PageClientImplMac
        https://bugs.webkit.org/show_bug.cgi?id=226184

        Reviewed by Devin Rousso.

        Covered by existing tests.

        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):

2021-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
        https://bugs.webkit.org/show_bug.cgi?id=225909

        Reviewed by Per Arne Vollan.

        Tests: accessibility/mac/media-query-values-change.html

        1) WebContent blocks access to distributed notification center, so we can't rely on that to re-post notifications
        2) AppKit caches the values of these AX settings, so we need to invalidate that cache directly

        * Platform/spi/mac/AppKitSPI.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityTestingInjectPreference):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::invertColorsPreferenceKey):
        (WebKit::dispatchSimulatedNotificationsForPreferenceChange):
        (WebKit::setPreferenceValue):
        (WebKit::reduceMotionPreferenceKey): Deleted.

2021-05-24  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendLiteral
        https://bugs.webkit.org/show_bug.cgi?id=226137

        Reviewed by Chris Dumez.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList): Use append
        instead of appendLiteral.
        (WebKit::domainsToString): Ditto.
        (WebKit::buildList): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics): Ditto.
        (WebKit::appendBoolean): Ditto.
        (WebKit::appendNextEntry): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributionToString): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString): Ditto.
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
        (WebKit::ResourceLoadStatisticsMemoryStore::dumpResourceLoadStatistics): Ditto.
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp: Ditto.
        (WebKit::domainsToString): Ditto.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::create): Moved this here from the header.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyDataForSpecificFirstParty::toString const): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyDataForSpecificFirstParty::encode const): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyDataForSpecificFirstParty::decode): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyDataForSpecificFirstParty::operator== const): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyData::toString const): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyData::encode const): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyData::decode): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::ThirdPartyData::operator< const): Ditto.
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: Moved member
        functions of the nested structures into the implementation file and fixed
        the indentation of the structures to indicate the nesting.

        * NetworkProcess/NetworkLoadChecker.cpp:
        (WebKit::NetworkLoadChecker::continueCheckingRequest): Do not use a local
        variable for the reuslt of makeString.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::newTestingSession): Ditto.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile): Use append instead of appendLiteral
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON const): Ditto.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeVersionedDirectoryPath): Do not use a local variable for
        the result of makeString.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::buildAcceptLanguages): Use append instead of appendLiteral.
        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
        (WebKit::WebSocketTask::acceptedExtensions const): Ditto.

        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
        (WebKit::NetworkMDNSRegister::registerMDNSName): Use auto for the result of makeString.
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::writeHeaders): Ditto.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::initializeSandboxParameters): Do not use a local variable for the result of
        makeString. Also, take advantage of the support for concatenating an NSString instead
        of converting it to a WTF::String.

        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit const): Use ASCIILiteral and remove explicit
        conversion to String.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptCallback): Use append instead of appendLiteral.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::fileCanBeAcceptedForUpload): Use auto for result of makeString.

        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: Use makeString instead of
        StringBuilder.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::requestStorageSpace): Use auto for result of makeString.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString): Use append instead of appendLiteral.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching): Use auto for result of makeString.
        (WebKit::WebProcessPool::startMemorySampler): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::dumpHistoryItem): Use append instead of appendLiteral.
        (WebKit::WebPage::getContentsAsString): Ditto.

2021-05-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277940.
        https://bugs.webkit.org/show_bug.cgi?id=226182

        Caused Safari crash under IPC::typeFromCFTypeRef

        Reverted changeset:

        "Convert DestinationColorSpace from an enum to class wrapping
        a platform color space (CGColorSpaceRef for CG ports, etc.)"
        https://bugs.webkit.org/show_bug.cgi?id=226143
        https://trac.webkit.org/changeset/277940

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Drop CheckedLock / CheckedCondition aliases
        https://bugs.webkit.org/show_bug.cgi?id=226176

        Reviewed by Kate Cheney.

        Drop CheckedLock / CheckedCondition aliases now that they are the default.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cocoa/LaunchServicesDatabaseObserver.h:
        * NetworkProcess/glib/DNSCache.h:
        * Platform/IPC/Connection.cpp:
        * Platform/IPC/Connection.h:
        * Platform/IPC/StreamConnectionWorkQueue.h:
        * Platform/IPC/StreamServerConnection.h:
        * Shared/BlockingResponseMap.h:
        * Shared/Cocoa/XPCEndpointClient.h:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/mac/MediaFormatReader/MediaFormatReader.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:
        * Shared/mac/MediaFormatReader/MediaTrackReader.h:
        * UIProcess/API/glib/IconDatabase.h:
        * UIProcess/WebURLSchemeTask.h:
        * UIProcess/mac/DisplayLink.h:
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView knowsPageRange:]):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        * WebProcess/Network/WebSocketStream.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Make CheckedLock the default Lock
        https://bugs.webkit.org/show_bug.cgi?id=226157

        Reviewed by Darin Adler.

        Make CheckedLock the default Lock so that we get more benefits from Clang
        Thread Safety Analysis. Note that CheckedLock 100% relies on the existing
        Lock implementation and merely adds the clang anotations for thread 
        safety.

        That this patch does is:
        1. Rename the Lock class to UncheckedLock
        2. Rename the CheckedLock class to Lock
        3. Rename the Condition class to UncheckedCondition
        4. Rename the CheckedCondition class to Condition
        5. Update the types of certain variables from Lock / Condition to
           UncheckedLock / UncheckedCondition if I got a build failure. Build 
           failures are usually caused by the following facts:
           - Locker<CheckedLock> doesn't subclass AbstractLocker which a lot of
             JSC code passes as argument
           - Locker<CheckedLock> has no move constructor
           - Locker<CheckedLock> cannot be constructed from a lock pointer, only
             a reference

        For now, CheckedLock and CheckedCondition remain as aliases to Lock and 
        Condition, in their respective CheckedLock.h / CheckedCondition.h headers.
        I will drop them in a follow-up to reduce patch size.

        I will also follow-up to try and get rid of as much usage of UncheckedLock
        and UncheckedCondition as possible. I did not try very hard in this patch
        to reduce patch size. 

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        * UIProcess/API/glib/IconDatabase.h:
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView knowsPageRange:]):

2021-05-23  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        - Update ImageBuffer subclass signatures to use "const DestinationColorSpace&" to
          conform to the base class.
        - Replace ColorSpaceData with Optional<DestinationColorSpace>. No reason to have two
          types that are the same.
        - Give all ports a color space configuration for ShareableBitmap now that there is
          a common class for representing color space.
        - Update DisplayList decoding to account for BeginClipToDrawingCommands and GetPixelBuffer
          no longer being inlineable due to now having non-trivial destructors due to 
          DestinationColorSpace member.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        (WebKit::RemoteImageBuffer::create):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::createFrameImageAtIndex):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.messages.in:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Configuration::encode const):
        (WebKit::ShareableBitmap::Configuration::decode):
        * Shared/ShareableBitmap.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::colorSpace):
        * Shared/mac/ColorSpaceData.h: Removed.
        * Shared/mac/ColorSpaceData.mm: Removed.
        * SourcesCocoa.txt:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::colorSpace):
        * UIProcess/PageClient.h:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
        (WebKit::recursivelyMapIOSurfaceBackingStore):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::colorSpace):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::colorSpace):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::configuration):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::prepareForDisplay):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::create):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::create):
        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::createFrameImageAtIndex):
        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
        (WebKit::MediaPlayerPrivateRemote::nativeImageForCurrentTime):
        (WebKit::MediaPlayerPrivateRemote::pixelBufferForCurrentTime):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createImageBuffer const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertDragImageToBitmap):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setColorSpace):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::snapshotOptionsToBitmapConfiguration):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setColorSpace):

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock in even more places
        https://bugs.webkit.org/show_bug.cgi?id=226152

        Reviewed by Darin Adler.

        Use CheckedLock in even more places to benefit from Clang Thread Safety Analysis.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        * NetworkProcess/glib/DNSCache.h:
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::locateIterator const):
        (WebKit::MediaSampleCursor::locateMediaSample const):
        (WebKit::MediaSampleCursor::locateTiming const):
        (WebKit::MediaSampleCursor::stepInOrderedMap):
        (WebKit::MediaSampleCursor::stepInPresentationTime):
        (WebKit::MediaSampleCursor::getMediaSample const):
        (WebKit::MediaSampleCursor::getTiming const):
        (WebKit::MediaSampleCursor::getPlayableHorizon const):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:

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

        [iOS] Implement page client hook for requesting image extraction results
        https://bugs.webkit.org/show_bug.cgi?id=226144
        rdar://78355604

        Reviewed by Tim Horton.

        Add a method stub for `PageClientImpl::requestImageExtraction`, which currently just invokes the completion
        handler with empty results. See bug for more details.

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

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

        Adopt CheckedLock in more places
        https://bugs.webkit.org/show_bug.cgi?id=226138

        Reviewed by Darin Adler.

        Adopt CheckedLock in more places to benefit from Clang Thread Safety Analysis.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::enqueueMatchingMessages):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection):

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

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::m_closeCallback):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::openDatabase):
        (WebKit::WebIDBServer::deleteDatabase):
        (WebKit::WebIDBServer::abortTransaction):
        (WebKit::WebIDBServer::commitTransaction):
        (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBServer::createObjectStore):
        (WebKit::WebIDBServer::deleteObjectStore):
        (WebKit::WebIDBServer::renameObjectStore):
        (WebKit::WebIDBServer::clearObjectStore):
        (WebKit::WebIDBServer::createIndex):
        (WebKit::WebIDBServer::deleteIndex):
        (WebKit::WebIDBServer::renameIndex):
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::getRecord):
        (WebKit::WebIDBServer::getAllRecords):
        (WebKit::WebIDBServer::getCount):
        (WebKit::WebIDBServer::deleteRecord):
        (WebKit::WebIDBServer::openCursor):
        (WebKit::WebIDBServer::iterateCursor):
        (WebKit::WebIDBServer::establishTransaction):
        (WebKit::WebIDBServer::databaseConnectionPendingClose):
        (WebKit::WebIDBServer::databaseConnectionClosed):
        (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        (WebKit::WebIDBServer::openDBRequestCancelled):
        (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::close):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        (WebKit::CacheStorage::Engine::deleteNonEmptyDirectoryOnBackgroundThread):
        * NetworkProcess/glib/DNSCache.cpp:
        (WebKit::DNSCache::lookup):
        (WebKit::DNSCache::update):
        (WebKit::DNSCache::removeExpiredResponsesFired):
        (WebKit::DNSCache::clear):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::suspend):
        (WebKit::CompositingRunLoop::resume):
        (WebKit::CompositingRunLoop::scheduleUpdate):
        (WebKit::CompositingRunLoop::stopUpdates):
        (WebKit::CompositingRunLoop::updateTimerFired):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::setScaleFactor):
        (WebKit::ThreadedCompositor::setScrollPosition):
        (WebKit::ThreadedCompositor::setViewportSize):
        (WebKit::ThreadedCompositor::renderLayerTree):
        (WebKit::ThreadedCompositor::sceneUpdateFinished):
        (WebKit::ThreadedCompositor::updateSceneState):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::clearLoadedIconsTimerFired):
        (WebKit::IconDatabase::checkIconURLAndSetPageURLIfNeeded):
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::iconURLForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):
        (WebKit::IconDatabase::clear):

2021-05-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277913.
        https://bugs.webkit.org/show_bug.cgi?id=226140

        Caused multiple layout-test crash on mac debug queues

        Reverted changeset:

        "Replace LockHolder with Locker in local variables"
        https://bugs.webkit.org/show_bug.cgi?id=226133
        https://trac.webkit.org/changeset/277913

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

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::m_closeCallback):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::openDatabase):
        (WebKit::WebIDBServer::deleteDatabase):
        (WebKit::WebIDBServer::abortTransaction):
        (WebKit::WebIDBServer::commitTransaction):
        (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBServer::createObjectStore):
        (WebKit::WebIDBServer::deleteObjectStore):
        (WebKit::WebIDBServer::renameObjectStore):
        (WebKit::WebIDBServer::clearObjectStore):
        (WebKit::WebIDBServer::createIndex):
        (WebKit::WebIDBServer::deleteIndex):
        (WebKit::WebIDBServer::renameIndex):
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::getRecord):
        (WebKit::WebIDBServer::getAllRecords):
        (WebKit::WebIDBServer::getCount):
        (WebKit::WebIDBServer::deleteRecord):
        (WebKit::WebIDBServer::openCursor):
        (WebKit::WebIDBServer::iterateCursor):
        (WebKit::WebIDBServer::establishTransaction):
        (WebKit::WebIDBServer::databaseConnectionPendingClose):
        (WebKit::WebIDBServer::databaseConnectionClosed):
        (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        (WebKit::WebIDBServer::openDBRequestCancelled):
        (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::close):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeSizeFile):
        (WebKit::CacheStorage::Engine::readSizeFile):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        (WebKit::CacheStorage::Engine::deleteNonEmptyDirectoryOnBackgroundThread):
        * NetworkProcess/glib/DNSCache.cpp:
        (WebKit::DNSCache::lookup):
        (WebKit::DNSCache::update):
        (WebKit::DNSCache::removeExpiredResponsesFired):
        (WebKit::DNSCache::clear):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::suspend):
        (WebKit::CompositingRunLoop::resume):
        (WebKit::CompositingRunLoop::scheduleUpdate):
        (WebKit::CompositingRunLoop::stopUpdates):
        (WebKit::CompositingRunLoop::updateTimerFired):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::m_displayRefreshMonitor):
        (WebKit::ThreadedCompositor::setScaleFactor):
        (WebKit::ThreadedCompositor::setScrollPosition):
        (WebKit::ThreadedCompositor::setViewportSize):
        (WebKit::ThreadedCompositor::renderLayerTree):
        (WebKit::ThreadedCompositor::sceneUpdateFinished):
        (WebKit::ThreadedCompositor::updateSceneState):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::clearLoadedIconsTimerFired):
        (WebKit::IconDatabase::checkIconURLAndSetPageURLIfNeeded):
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::iconURLForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):
        (WebKit::IconDatabase::clear):

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

        Stop using holdLock() in WebKit/WebKitLegacy/Tools as it is not compatible with Clang thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=226127

        Reviewed by Alex Christensen.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::close):
        (WebKit::LibWebRTCCodecsProxy::createH264Decoder):
        (WebKit::LibWebRTCCodecsProxy::createH265Decoder):
        (WebKit::LibWebRTCCodecsProxy::createVP9Decoder):
        (WebKit::LibWebRTCCodecsProxy::releaseDecoder):
        (WebKit::LibWebRTCCodecsProxy::createEncoder):
        (WebKit::LibWebRTCCodecsProxy::releaseEncoder):
        (WebKit::LibWebRTCCodecsProxy::allowsExitUnderMemoryPressure const):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::enqueueMatchingMessages):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::requestRefreshCallback):
        (WebKit::ThreadedDisplayRefreshMonitor::requiresDisplayRefreshCallback):
        (WebKit::ThreadedDisplayRefreshMonitor::invalidate):
        (WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.cpp:
        (WebKit::MediaSampleCursor::copy):
        (WebKit::MediaSampleCursor::getSampleMap const):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (prepareDataForPrintingOnSecondaryThread):

2021-05-21  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Expand sandbox with missing sysctl-read handles for core CPU and cache features
        https://bugs.webkit.org/show_bug.cgi?id=226126
        <rdar://problem/78218756>

        Reviewed by Per Arne Vollan.

        Update our sandbox profiles to permit read access to a set of CPU and cache features that have been requested by
        our sandbox and system framework teams. These have been judged to be safe to expose to our processes, and will
        allow frameworks to make optimal use of the system WebKit is running on.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Make CGColorSpaceRef argument coding match other CF objects and use CGColorSpaceCreateWithPropertyList for fallback
        https://bugs.webkit.org/show_bug.cgi?id=226112

        Reviewed by Darin Adler.

        This is a precursor to some color space type unification. This change:
        
        - Modernizes CF arugment coders to use ArgumentCoder specialization. It also means
          we now support encoding CF types both as plain types and RetainPtr<> types, with
          decoding being kept only supporing RetainPtr<>s, as decoding into non-smart pointer
          is not very useful.
        - Move CGColorSpaceRef coding to ArgumentCodersCF and use CGColorSpaceCopyPropertyList
          and CGColorSpaceCreateWithPropertyList as the fallback coding (if there is no name),
          matching what other libraries on macOS and iOS do.
        - Switch ColorSpaceData to be a struct wrapping an Optional<RetainPtr<CGColorSpaceRef>>
          and use the new shared coding. This will be replaced entirely in subsequent changes
          so I didn't want to change this too much now.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkSessionCreationParameters.cpp:
        (WebKit::NetworkSessionCreationParameters::encode const):
        (WebKit::NetworkSessionCreationParameters::decode):
        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::encodeDataInternal):
        (IPC::decodeDataInternal):
        (IPC::encodeDateInternal):
        (IPC::decodeDateInternal):
        (IPC::encodeNumberInternal):
        (IPC::decodeNumberInternal):
        (IPC::encodeSecureCodingInternal):
        (IPC::decodeSecureCodingInternal):
        (IPC::encodeStringInternal):
        (IPC::decodeStringInternal):
        (IPC::encodeURLInternal):
        (IPC::decodeURLInternal):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<Ref<Font>>::encodePlatformData):
        (IPC::ArgumentCoder<Ref<Font>>::decodePlatformData):
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode const):
        (WebKit::FontInfo::decode):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode const):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef):
        (IPC::ArgumentCoder<CFTypeRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFTypeRef>>::decode):
        (IPC::ArgumentCoder<CFArrayRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFArrayRef>>::decode):
        (IPC::ArgumentCoder<CFBooleanRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFBooleanRef>>::decode):
        (IPC::ArgumentCoder<CFDataRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFDataRef>>::decode):
        (IPC::ArgumentCoder<CFDateRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFDateRef>>::decode):
        (IPC::ArgumentCoder<CFDictionaryRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFDictionaryRef>>::decode):
        (IPC::ArgumentCoder<CFNumberRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFNumberRef>>::decode):
        (IPC::ArgumentCoder<CFStringRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFStringRef>>::decode):
        (IPC::ArgumentCoder<CFURLRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CFURLRef>>::decode):
        (IPC::ArgumentCoder<CGColorSpaceRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<CGColorSpaceRef>>::decode):
        (IPC::ArgumentCoder<SecCertificateRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<SecCertificateRef>>::decode):
        (IPC::ArgumentCoder<SecKeychainItemRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<SecKeychainItemRef>>::decode):
        (IPC::ArgumentCoder<SecAccessControlRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<SecAccessControlRef>>::decode):
        (IPC::ArgumentCoder<SecTrustRef>::encode):
        (IPC::ArgumentCoder<RetainPtr<SecTrustRef>>::decode):
        (IPC::encode): Deleted.
        (IPC::decode): Deleted.
        * Shared/cf/ArgumentCodersCF.h:
        (IPC::CFRetainPtrArgumentCoder::encode):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode const):
        (WebKit::ColorSpaceData::decode):
        (): Deleted.
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode const):
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode const):
        (WebKit::SecItemResponseData::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::encode):
        (IPC::ArgumentCoder<WebCore::CertificateInfo>::decode):
        (IPC::encodeNSError):
        (IPC::decodeNSError):
        (IPC::ArgumentCoder<WebCore::ContentFilterUnblockHandler>::encode):
        (IPC::ArgumentCoder<WebCore::ContentFilterUnblockHandler>::decode):

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

        [macOS] Adopt QLItem in WKImageExtractionPreviewController
        https://bugs.webkit.org/show_bug.cgi?id=226114
        rdar://76657718

        Reviewed by Tim Horton.

        Adopt `QLItem` in `WKImageExtractionPreviewController`, and use it in place of `WKImageExtractionPreviewItem`.
        This allows us to vend image previews based solely on image data, rather than a file on disk.

        * UIProcess/mac/WKImageExtractionPreviewController.h:
        * UIProcess/mac/WKImageExtractionPreviewController.mm:
        (-[WKImageExtractionPreviewController initWithPage:imageData:title:imageURL:]):
        (-[WKImageExtractionPreviewController provideDataForItem:]):
        (-[WKImageExtractionPreviewController previewPanel:previewItemAtIndex:]):
        (-[WKImageExtractionPreviewItem initWithFileURL:title:imageURL:pageURL:]): Deleted.
        (-[WKImageExtractionPreviewItem dealloc]): Deleted.
        (-[WKImageExtractionPreviewItem previewItemURL]): Deleted.
        (-[WKImageExtractionPreviewItem previewItemTitle]): Deleted.
        (-[WKImageExtractionPreviewItem previewOptions]): Deleted.
        (-[WKImageExtractionPreviewController initWithPage:fileURL:title:imageURL:]): Deleted.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):

        Adopt the new QuickLookUI softlinking header in PAL.

2021-05-21  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Expand IOKit method filters to cover items encountered during testing
        https://bugs.webkit.org/show_bug.cgi?id=226106
        <rdar://problem/78327511>

        Reviewed by Per Arne Vollan.

        Allow additional IOKit methods based on testing results and the method values we hit during normal operations.

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

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

        Adopt CheckedLock in RemoteImageBufferProxy
        https://bugs.webkit.org/show_bug.cgi?id=226098

        Reviewed by Tim Horton.

        Adopt CheckedLock in RemoteImageBufferProxy to benefit from Clang Thread Safety Analysis.
        I had to use WTF_IGNORES_THREAD_SAFETY_ANALYSIS on one of the getter where we weren't
        locking. My understanding is that the code is currently safe without the lock in this
        case and I added a comment and assertions to clarify that.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::waitForDidFlushOnSecondaryThread):

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

        Adopt CheckedLock in NetworkCache::Storage::TraverseOperation
        https://bugs.webkit.org/show_bug.cgi?id=226101

        Reviewed by Darin Adler.

        Adopt CheckedLock in NetworkCache::Storage::TraverseOperation to benefit from Clang
        Thread Safety Analysis.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::TraverseOperation::WTF_GUARDED_BY_LOCK):
        (WebKit::NetworkCache::Storage::traverse):

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

        Adopt CheckedLock in MediaFormatReader and fix threading bug
        https://bugs.webkit.org/show_bug.cgi?id=226100

        Reviewed by Darin Adler.

        Adopt CheckedLock in MediaFormatReader and fix threading bug found by Clang Thread Safety
        Analysis. In particular, parseByteSource() was failing to grab the lock before updating
        m_parseTracksStatus in one of its branches.

        * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
        (WebKit::MediaFormatReader::parseByteSource):
        (WebKit::MediaFormatReader::didParseTracks):
        (WebKit::MediaFormatReader::didProvideMediaData):
        (WebKit::MediaFormatReader::finishParsing):
        (WebKit::MediaFormatReader::copyProperty):
        (WebKit::MediaFormatReader::copyTrackArray):
        * Shared/mac/MediaFormatReader/MediaFormatReader.h:

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

        [Cocoa] Unable to upload files that are stored in the cloud (without a local copy)
        https://bugs.webkit.org/show_bug.cgi?id=226090
        <rdar://77775887>

        Reviewed by Darin Adler.

        Allow the network process to load / read dataless files stored in the cloud by allowing
        the process to materialize such files. I initially only allowed the AsyncFileStream
        thread to materialize the dataless files and this was enough to make the file upload
        use cases work. However, I noticed that drag and dropping such file in the Safari URL
        bar would fail loading, which I think is bad user experience. As a result, I have
        decided to allow the materializing at network process level.

        I have verified manually that I can now upload such dataless files via either file
        picker or drag and drop (used https://blueimp.github.io/jQuery-File-Upload/). I have
        also verified that drag and dropping such a file in the Safari URL bar successfuly
        loads that file.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):

2021-05-21  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] GPU Process should recognize that pathForProcessContainer() might fail and handle it gracefully
        https://bugs.webkit.org/show_bug.cgi?id=226086
        <rdar://problem/78288016>

        Reviewed by Tim Horton.

        The GPU Process implementation of gpuProcessCachesDirectory does not recognize that WebKit often runs without
        a container (e.g., as part of a daemon process). In such cases, the GPU process will attempt to create a
        cache directory someplace outside of its sandbox and fail, preventing caching from happening.

        We need to use the same logic we use in the WebContent process to address this use case.

        To avoid making this mistake again, let's consolidate the logic in one method, and use it in the multiple places
        that have this same code.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::cacheDirectoryInContainerOrHomeDirectory): Added.
        (WebKit::WebProcessPool::cookieStorageDirectory): Use the new 'cacheDirectoryInContainerOrHomeDirectory' method.
        (WebKit::WebProcessPool::networkingCachesDirectory): Ditto.
        (WebKit::WebProcessPool::webContentCachesDirectory): Ditto.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::gpuProcessCachesDirectory): Ditto.
        * UIProcess/WebProcessPool.h:

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

        Replace more static Locks with CheckedLocks in WebKit / WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=226093

        Reviewed by Darin Adler.

        Replace more static Locks with CheckedLocks so that we can benefit from Clang Thread Safety Analysis.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::suspend):
        (WebKit::WebResourceLoadStatisticsStore::resume):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * Platform/IPC/Connection.cpp:
        (IPC::WTF_REQUIRES_LOCK):
        (IPC::addAsyncReplyHandler):
        (IPC::clearAsyncReplyHandlers):
        (IPC::CompletionHandler<void):
        * WebProcess/Network/WebSocketStream.cpp:
        (WebKit::WebSocketStream::streamWithIdentifier):
        (WebKit::WebSocketStream::networkProcessCrashed):
        (WebKit::WebSocketStream::WebSocketStream):
        (WebKit::WebSocketStream::~WebSocketStream):

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

        Use CheckedLock more in cases where we try-lock
        https://bugs.webkit.org/show_bug.cgi?id=226056

        Reviewed by Alex Christensen.

        Use CheckedLock more in cases where we try-lock to benefit from Clang
        Thread Safety Analysis.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::releaseDecoder):
        (WebKit::LibWebRTCCodecs::registerDecodeFrameCallback):
        (WebKit::LibWebRTCCodecs::completedDecoding):
        (WebKit::LibWebRTCCodecs::releaseEncoder):
        (WebKit::LibWebRTCCodecs::registerEncodeFrameCallback):
        (WebKit::LibWebRTCCodecs::completedEncoding):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        (WebKit::LibWebRTCCodecs::Decoder::WTF_GUARDED_BY_LOCK):
        (WebKit::LibWebRTCCodecs::Encoder::WTF_GUARDED_BY_LOCK):

2021-05-21  Per Arne  <pvollan@apple.com>

        Accessibility caption styles does not always reflect the selection
        https://bugs.webkit.org/show_bug.cgi?id=226084
        <rdar://75426845>

        Reviewed by Chris Fleizach.

        This is caused by a race between pushing the caption preference value to the WebContent process and receiving the notification in that process.
        This patch addresses this by reposting the notification after having set the preference value in the WebContent process.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::captionProfilePreferenceKey):
        (WebKit::dispatchSimulatedNotificationsForPreferenceChange):

2021-05-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION(Sandbox): Font smoothing within Safari doesn't seem to respect AppleFontSmoothing
        https://bugs.webkit.org/show_bug.cgi?id=226066
        <rdar://problem/72795817>

        Reviewed by Per Arne Vollan.

        We accidentally blocked access to the relevant defaults database.

        It turns out this is untestable. I can't use the actual functionality without actually setting the preference
        for the whole user (and all their apps). And, I can't use sandbox_check() to make sure the file is readable
        because it's in the user's home directory, so the path to check will be different for every user.

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

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

        [iOS] Plumb element bounds when presenting QLPreviewController for image extraction
        https://bugs.webkit.org/show_bug.cgi?id=226085
        rdar://76020349

        Reviewed by Tim Horton.

        Include the previewed element's bounding rect when presenting QuickLook for image extraction. See the bug for
        more details.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):

2021-05-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=225990

        Unreviewed non-unified build fixes.

        * NetworkProcess/PreconnectTask.h: Add missing forward declaration for NetworkSession.
        * NetworkProcess/WebStorage/LocalStorageDatabase.h: Add missing wtf/HashMap.h header,
        remove unneeded wtf/RefCounted.h header.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode): Add missing WebCore:: namespace prefix to
        usage of WebCore::MediaProducer::MutedStateFlags.

2021-05-21  Youenn Fablet  <youenn@apple.com>

        Implement a remote Internal Unit in GPUProcess for audio MediaStreamTrack rendering
        https://bugs.webkit.org/show_bug.cgi?id=225603

        Reviewed by Eric Carlson.

        Implement an InternalUnit by creating a ring buffer that gets written on WebProcess and read on GPUProcess by an audio unit.
        In the previous implementation, each audio track was sent to GPUProcess that was doing the mixing.
        Sending was done by sending IPC message for each audio sample, which was also processing inefficient.

        We are now creating an Audio Unit in GPUProcess and similarly to WebAudio asking WebProcess to render audio in a buffer that will be actually rendered by the audio unit.
        The mixing happens in WebProcess so only one buffer is shared between GPUProcess and WebProcess, and no IPC message is sent for each chunk.

        The potential downside is that the mixing is done with fixed chunk size instead of chunk size requested by the audio unit.
        This might trigger some latency or some overhead if the fixed chunk size is too far from what the audio unit is asking.

        In case of GPUProcess crash, we keep the same format description but we delay recreation of the unit if the unit is stopped.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::audioMediaStreamTrackRendererInternalUnitManager):
        (WebKit::GPUConnectionToWebProcess::dispatchMessage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRenderer::start):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp: Added.
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::RemoteAudioMediaStreamTrackRendererInternalUnitManager):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::~RemoteAudioMediaStreamTrackRendererInternalUnitManager):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::createUnit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::deleteUnit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::startUnit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::stopUnit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::setAudioOutputDevice):
        (WebKit::renderCallback):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::Unit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::~Unit):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::start):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::stop):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::setAudioOutputDevice):
        (WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit::render):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h: Added.
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.messages.in: Added.
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        (WebKit::AudioMediaStreamTrackRenderer::start):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitIdentifier.h: Added.
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp: Added.
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::add):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::remove):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::createRemoteInternalUnit):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::gpuProcessConnectionClosed):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::Proxy):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::~Proxy):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::createRemoteUnit):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::initialize):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::start):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::storageChanged):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::stop):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::setAudioOutputDevice):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::retrieveFormatDescription):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::stopThread):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::startThread):
        (WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::restartIfNeeded):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.h: Added.
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::audioMediaStreamTrackRendererInternalUnitManager):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
        (WebKit::UserMediaCaptureManager::setupCaptureProcesses):

2021-05-20  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        WKRemoteObjectRegistry  _invokeMethod needs to check for nil completionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=225941

        Reviewed by Ryosuke Niwa.

        _invokeMethod's argument-checking loop needs to be run
        even if replyInfo is nil, as otherwise we can perform an invocation
        if a method signature specifies a completion handler even though
        none is provided.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]):

2021-05-20  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] <select> options are unnecessarily truncated
        https://bugs.webkit.org/show_bug.cgi?id=226048
        <rdar://problem/76008154>

        Reviewed by Tim Horton.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker createMenu]):

        UIMenu's currently limit action titles to two lines. Use SPI to remove
        the limit and avoid unnecessary truncation.

2021-05-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r277606.
        rdar://78283324

        Need to wait for more projects to migrate to new API.

        Reverted changeset:

        "[Cocoa] Remove prototype loadSimulatedRequest methods"
        https://bugs.webkit.org/show_bug.cgi?id=223658
        https://commits.webkit.org/r277606

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

        Mark ServiceWorkerThreadProxy with a default app-bound value
        https://bugs.webkit.org/show_bug.cgi?id=223201
        <rdar://problem/77664416>

        Reviewed by Youenn Fablet.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::controlClient):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::updateAppBoundValue):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::updateAppBoundValue):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:

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

        Allow GPU process log channels to be configured
        https://bugs.webkit.org/show_bug.cgi?id=226036
        <rdar://problem/78271211>

        Reviewed by Jer Noble.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::configureLoggingChannel): Configure WebCore and
        WebKit logging channels because classes used in the GPU process use both.
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::configureLoggingChannel): Send configureLoggingChannel
        message to the GPU process.
        * WebProcess/GPU/GPUProcessConnection.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::configureLoggingChannel): Send configureLoggingChannel to the 
        GPU process connection, if there is one.

2021-05-20  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Adopt "com.apple.QuartzCore.webkit-limited-types" entitlement
        https://bugs.webkit.org/show_bug.cgi?id=226044
        <rdar://problem/60549120>

        Reviewed by Per Arne Vollan.

        WebKit should adopt the "com.apple.QuartzCore.webkit-limited-types" entitlement as a further hardening measure to help
        QuartzCore limit the features accessible from the WebContent and GPU Process. WebKit only needs a subset of the
        features of QuartzCore, and this entitlement allows the framework to block certain code paths.

        Tested by existing rendering test cases.

        * Scripts/process-entitlements.sh:

2021-05-20  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Remove [ImplicitThis] and [CustomProxyToJSObject] extended attributes
        https://bugs.webkit.org/show_bug.cgi?id=223758

        Reviewed by Sam Weinig.

        Use inherits<T> instead of toJSDOMWindow() if the value is never a JSProxy.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):

2021-05-20  Devin Rousso  <drousso@apple.com>

        REGRESSION(r277505): Crash under WTF::Detail::CallableWrapper<WebKit::WebPageProxy::setUnderPageBackgroundColorOverride(WebCore::Color&&)::$_10, void>::call
        https://bugs.webkit.org/show_bug.cgi?id=225979
        <rdar://problem/78130098>

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setUnderPageBackgroundColorOverride):
        Semi-speculative fix by checking the weakly-held `PageClient` before attempting to use it.
        Dissasembly suggests this as the cause as the invalid access occurs early in the lambda.

2021-05-20  Dean Jackson  <dino@apple.com>

        Configure fullscreen view after it has transitioned
        https://bugs.webkit.org/show_bug.cgi?id=226031
        <rdar://problem/78277029>

        Reviewed by Tim Horton.

        Call an internal configuration method after the fullscreen transition.

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

2021-05-20  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Allow access to the 'DiskImageURL' IOKit property
        https://bugs.webkit.org/show_bug.cgi?id=226033
        <rdar://problem/78199855>

        Reviewed by Per Arne Vollan.

        Access to certain disk image types is affected by the ability to read the DiskImageURL IOKit property. Since file
        URLs may reference such locations (and indeed, telemetry shows that this is happening) we should grant this property
        access to avoid users encountering file access errors when attempting to load content backed by relevant disk images.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Move off UIKit IPI in WKMouseGestureRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=226030
        rdar://78266173

        Reviewed by Devin Rousso and Wenson Hsieh.

        Use UIGestureRecognizerDelegate instead of IPI.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizer:shouldReceiveTouch:]):
        (-[WKContentView gestureRecognizer:shouldReceivePress:]):
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer _shouldReceiveTouch:forEvent:recognizerView:]): Deleted.
        (-[WKMouseGestureRecognizer _shouldReceivePress:]): Deleted.

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

        Use CheckedLock more in IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=226021

        Reviewed by Darin Adler.

        Use CheckedLock more in IPC::Connection. This is heavily multithreaded code and
        it would benefit significantly from Clang Thread Safety Analysis.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::enqueueMatchingMessagesToMessageReceiveQueue):
        (IPC::Connection::addMessageReceiveQueue):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::addThreadMessageReceiver):
        (IPC::Connection::removeMessageReceiveQueue):
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::pushPendingSyncRequestID):
        (IPC::Connection::popPendingSyncRequestID):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::installIncomingSyncMessageCallback):
        (IPC::Connection::uninstallIncomingSyncMessageCallback):
        (IPC::Connection::hasIncomingSyncMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendOutgoingMessages):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchOneIncomingMessage):
        (IPC::Connection::dispatchIncomingMessages):
        * Platform/IPC/Connection.h:
        (IPC::Connection::WTF_GUARDED_BY_LOCK):

2021-05-20  Geoffrey Garen  <ggaren@apple.com>

        GraphicsLayer::setName() causes heap fragmentation
        https://bugs.webkit.org/show_bug.cgi?id=225838

        Reviewed by Simon Fraser.

        Profiling for heap fragmentation shows that GraphicsLayer::setName() is
        a top contributor. Worth about 5MB maximum on GMail.

        Use MAKE_STATIC_STRING_IMPL for our constant layer names so we end up
        with only one copy and no heap allocation in the many cases that are
        compile-time constants.

        * WebProcess/Inspector/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::CompositingCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
        (WebKit::LayerTreeHost::LayerTreeHost):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

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

        [iOS] Add missing method in sandbox IOKit filter
        https://bugs.webkit.org/show_bug.cgi?id=225975
        <rdar://78212330>

        Reviewed by Brent Fulgham.

        Add missing method in IOSurfaceRootUserClient filter on iOS.

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

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

        Use CheckedLock more in WebKit2 code
        https://bugs.webkit.org/show_bug.cgi?id=226001

        Reviewed by Alex Christensen.

        Use CheckedLock more in WebKit2 code to benefit from Clang Thread Safety Analysis.

        * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm:
        (LegacyCustomProtocolManager::networkProcessCreated):
        (WebKit::LegacyCustomProtocolManager::registerScheme):
        (WebKit::LegacyCustomProtocolManager::unregisterScheme):
        (WebKit::LegacyCustomProtocolManager::supportsScheme):
        (WebKit::LegacyCustomProtocolManager::protocolForID):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp:
        (WebKit::LegacyCustomProtocolManager::addCustomProtocol):
        (WebKit::LegacyCustomProtocolManager::removeCustomProtocol):
        * NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::addSessionStorageQuotaManager):
        (WebKit::NetworkProcess::removeSessionStorageQuotaManager):
        (WebKit::NetworkProcess::setSessionStorageQuotaManagerIDBRootPath):
        (WebKit::NetworkProcess::resetQuota):
        (WebKit::NetworkProcess::storageQuotaManager):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::suspend):
        (WebKit::StorageManagerSet::resume):
        * NetworkProcess/WebStorage/StorageManagerSet.h:
        * NetworkProcess/cocoa/LaunchServicesDatabaseObserver.h:
        * NetworkProcess/cocoa/LaunchServicesDatabaseObserver.mm:
        (WebKit::LaunchServicesDatabaseObserver::LaunchServicesDatabaseObserver):
        (WebKit::LaunchServicesDatabaseObserver::startObserving):
        (WebKit::LaunchServicesDatabaseObserver::handleEvent):
        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap::waitForResponse):
        (BlockingResponseMap::didReceiveResponse):
        * Shared/Cocoa/XPCEndpointClient.h:
        * Shared/Cocoa/XPCEndpointClient.mm:
        (WebKit::XPCEndpointClient::setEndpoint):
        (WebKit::XPCEndpointClient::connection):
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::request const):
        (WebKit::WebURLSchemeTask::willPerformRedirection):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::pageDestroyed):
        (WebKit::WebURLSchemeTask::stop):
        (WebKit::WebURLSchemeTask::nsRequest const):
        * UIProcess/WebURLSchemeTask.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        (WebKit::DisplayLink::removeObservers):
        (WebKit::DisplayLink::incrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::decrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::setPreferredFramesPerSecond):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * UIProcess/mac/DisplayLink.h:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionOnMainThread):
        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionAndDispatchToThread):
        (WebKit::LibWebRTCCodecs::createDecoder):
        (WebKit::LibWebRTCCodecs::decodeFrame):
        (WebKit::LibWebRTCCodecs::createEncoder):
        (WebKit::LibWebRTCCodecs::encodeFrame):
        (WebKit::LibWebRTCCodecs::setEncodeRates):
        (WebKit::LibWebRTCCodecs::gpuProcessConnectionDidClose):
        (WebKit::LibWebRTCCodecs::setLoggingLevel):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::addScrollingTreeForPage):
        (WebKit::EventDispatcher::removeScrollingTreeForPage):
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::takeQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::touchEvent):
        (WebKit::EventDispatcher::dispatchTouchEvents):
        (WebKit::EventDispatcher::notifyScrollingTreesDisplayWasRefreshed):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

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

        The test fast/images/eps-as-image.html is a constant crash
        https://bugs.webkit.org/show_bug.cgi?id=225989
        <rdar://77354349>

        Reviewed by Maciej Stachowiak.

        This is caused by an incorrect sandbox rule. A related service is referred to as an XPC service, but it should be a global name.

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

2021-05-19  Tomoki Imai  <Tomoki.Imai@sony.com>

        Scrolling must be done after the layout when doing full page zoom
        https://bugs.webkit.org/show_bug.cgi?id=225730

        Reviewed by Simon Fraser.

        Add check to disallow negative or zero zoom value.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageZoomFactor):

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

        [GPUProcess] It is not safe to call GraphicsContext::paintFrameForMedia() off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=225996

        Reviewed by Simon Fraser.

        It is not safe to call GraphicsContext::paintFrameForMedia() off the main thread because it
        relies on the MediaPlayer / MediaPlayerPrivate objects, which are main-thread object. Making
        this function thread-safe would be a significant amount of work. As a result, I am simply
        calling callOnMainThreadAndWait() in RemoteRenderingBackend::applyMediaItem(). Note that this
        code path is only used when painting a video to a canvas.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::applyMediaItem):
        Make sure we call paintFrameForMedia() on the main thread.

        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::deleteMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::mediaPlayer):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        Drop lock that is no longer needed now that mediaPlayer() is always called on the main thread.

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

        Add support for Navigation Timing Level 2
        https://bugs.webkit.org/show_bug.cgi?id=184363

        Reviewed by Ryosuke Niwa.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):
        Mark reused TLS connections in complete metrics like I did in incomplete metrics in r277493.

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

        Remove ImageBuffer::toBGRA() and replace its uses with the more general ImageBuffer::getPixelBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=225976

        Reviewed by Said Abou-Hallawa.

        Remove ImageBuffer::toBGRA().

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::getBGRADataForImageBuffer): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::toBGRAData const): Deleted.
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::toBGRAData const): Deleted.
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::getBGRADataForImageBuffer): Deleted.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::toBGRAData const): Deleted.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

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

        Simplify and make InjectedBundle::initialize() more robust
        https://bugs.webkit.org/show_bug.cgi?id=225980

        Reviewed by Geoffrey Garen.

        Simplify and make InjectedBundle::initialize() more robust as we are seeing some flaky
        crashes in this area (rdar://33894266).

        In particular, the following changes were made:
        - Call dlopen_preflight() before dlopen() for extra robustness as we see some crashes under dlopen().
        - Call [NSBundle preflightAndReturnError:] before [NSBundle loadAndReturnError:] for extra robustness
          as we see some crashes under [NSBundle loadAndReturnError:].
        - Call [NSBundle loadAndReturnError:] instead of [NSBundle load] so that we get a useful NSError for
          logging.
        - Call [NSBundle initWithPath:] instead of [NSBundle initWithURL:] since we have a path and since
          [NSBundle initWithURL:] ends up calling [NSBundle initWithPath:] anyway. This avoids us having to
          construct a NSURL from our path.
        - Use NSBundle.executablePath instead of CFBundleCopyExecutableURL() since it is nicer and we have
          a NSBundle.
        - Use [NSString fileSystemRepresentation] to gets a file system representation of NSBundle.executablePath.
          Previously, we were relying on CFURLGetFileSystemRepresentation().

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize):

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

        Drop "get" prefix from SQLiteStatement member functions as well as out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=225971

        Reviewed by Darin Adler.

        Update code base due to SQLiteStatement API changes.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::missingUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::merge):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getThirdPartyDataForSpecificFirstPartyDomains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::aggregatedThirdPartyData const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::dumpResourceLoadStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getMostRecentlyUpdatedTimestamp const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::allDomains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockAndDeleteCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockButKeepCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsWithUserInteractionAsFirstParty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsWithStorageAccess const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectSubStatisticsCount):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getDomainStringFromDomainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainIDExistsInDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateOperatingDatesParameters):
        (WebKit::ResourceLoadStatisticsDatabaseStore::buildPrivateClickMeasurementFromDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributionToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::earliestTimesToSend):
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::items const):
        (WebKit::LocalStorageDatabase::item const):
        (WebKit::LocalStorageDatabase::databaseIsEmpty const):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::IconDatabase):
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::iconIDForIconURL):
        (WebKit::IconDatabase::iconData):
        (WebKit::IconDatabase::loadIconForPageURL):
        * UIProcess/API/glib/IconDatabase.h:

2021-05-18  Darin Adler  <darin@apple.com>

        Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF
        https://bugs.webkit.org/show_bug.cgi?id=225839

        Reviewed by Sam Weinig.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters): Use makeString instead
        of StringBuilder.

2021-05-19  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] <select multiple> picker should collapse sections when tapping anywhere on a group header
        https://bugs.webkit.org/show_bug.cgi?id=225974
        <rdar://problem/77930033>

        Reviewed by Wenson Hsieh.

        Currently, the <select multiple> picker only collapses a section when
        tapping on the disclosure button on the side of the group header. Instead,
        a tap anywhere on the group header should collapse/expand the corresponding
        section.

        The new behavior is achieved by introducing WKSelectPickerGroupHeaderView,
        a view that encapsulates the header label and disclosure icon. A tap
        gesture recognizer is added to animate the icon, and notify the its
        owner (WKSelectPickerTableViewController) when the view is tapped.

        This patch also corrects the icon animation in RTL layouts, and corrects
        the spacing between the header label and icon.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPickerGroupHeaderView initWithGroupName:section:]):
        (-[WKSelectPickerGroupHeaderView setCollapsed:animated:]):
        (-[WKSelectPickerGroupHeaderView setDelegate:]):
        (-[WKSelectPickerGroupHeaderView didTapHeader:]):
        (+[WKSelectPickerGroupHeaderView preferredFont]):
        (+[WKSelectPickerGroupHeaderView preferredMargin]):
        (+[WKSelectPickerGroupHeaderView preferredHeight]):
        (-[WKSelectPickerTableViewController tableView:heightForHeaderInSection:]):
        (-[WKSelectPickerTableViewController tableView:viewForHeaderInSection:]):
        (-[WKSelectPickerTableViewController didTapSelectPickerGroupHeaderView:]):

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

        Update Base64 encoding/decoding to match more modern WebKit conventions
        https://bugs.webkit.org/show_bug.cgi?id=225920

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::loadSynchronously):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
        Update to use uint8_t* data buffers more consistently for synchronous loads.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::sendReplyToSynchronousRequest):
        Update to use uint8_t* data buffers more consistently for synchronous loads.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
        Update to use new base64URLDecode / base64URLEncodeToString().

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::applyBasicAuthorizationHeader):
        Use new serializationForBasicAuthorizationHeader() helper.

        * Shared/API/APIData.h:
        (API::Data::create):
        (API::Data::fastFreeBytes): Deleted.
        Add new create function that takes ownership of a Vector's buffer rather
        than copying it. Replace use of static functions with inline lambdas for
        free-functions.

        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::sandboxFilePath):
        Use makeString and new base64URLEncoded().

        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (produceClientDataJson):
        Use new base64URLEncodeToString().

        * UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp:
        (WebKit::base64EncodedPNGData):
        Use new base64EncodeToString().

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webCryptoMasterKey):
        Use new defaultWebCryptoMasterKey() and new adopting API::Data::create function.

        * UIProcess/Inspector/glib/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::setBackendCommands):
        Use new base64EncodeToString().

        * UIProcess/Inspector/gtk/RemoteWebInspectorUIProxyGtk.cpp:
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        Use new base64Decode().

        * UIProcess/Inspector/gtk/WebInspectorUIProxyGtk.cpp:
        (WebKit::WebInspectorUIProxy::platformSave):
        Use new base64Decode().

        * UIProcess/Inspector/mac/RemoteWebInspectorUIProxyMac.mm:
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        Use new base64Decode().

        * UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:
        (WebKit::WebInspectorUIProxy::platformSave):
        Use new base64Decode().

        * UIProcess/Inspector/socket/RemoteInspectorClient.cpp:
        (WebKit::RemoteInspectorClient::setBackendCommands):
        Use new base64EncodeToString().

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticatorInternal::produceHashSet):
        (WebKit::LocalAuthenticator::makeCredential):
        (WebKit::LocalAuthenticator::getAssertion):
        Use new base64EncodeToString().

        * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp:
        (WebKit::MockHidConnection::feedReports):
        Use new base64Decode().

        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::filterResponses const):
        Use new base64EncodeToString().

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

        Improve logging in ProcessThrottler::invalidateAllActivities()
        https://bugs.webkit.org/show_bug.cgi?id=225766

        Reviewed by Geoffrey Garen.

        Improve logging in ProcessThrottler::invalidateAllActivities(). We now log the number
        of foreground and background activities. Normally each activity logs when getting
        invalidated so we know this number. However, some activities are "quiet" and do not
        log when invalidated (e.g. activities taken for IPC).

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::invalidateAllActivities):

2021-05-19  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] <select multiple> picker checkmarks should use large symbol scale
        https://bugs.webkit.org/show_bug.cgi?id=225936
        <rdar://problem/77942151>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPickerTableViewController tableView:cellForRowAtIndexPath:]):

        Set the cell's image view's preferredSymbolConfiguration to use a
        UIImageSymbolScaleLarge scale, and a UIFontTextStyleBody text style
        to support Dynamic Type sizes.

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

        [Hardening] CARingBuffer should validate the storage size before adopting it
        https://bugs.webkit.org/show_bug.cgi?id=225928
        <rdar://73575595>

        Reviewed by Jer Noble.

        We use a lot of SharedMemory-backed CARingBuffers. The pattern is that a process creates the
        SharedMemory then sends a SharedMemory::Handle to another process, who adopts it as storage
        for its CARingBuffer. Because the process that sends us the SharedMemory::Handle may not be
        trusted, we need to validate that the size of the storage is sufficient based on the
        CARingBuffer's format & frameCount.

        * GPUProcess/media/RemoteAudioDestinationManager.cpp:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged):
        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
        (WebKit::RemoteMediaRecorder::audioSamplesStorageChanged):
        * Shared/Cocoa/SharedRingBufferStorage.cpp:
        (WebKit::ReadOnlySharedRingBufferStorage::size const):
        (WebKit::ReadOnlySharedRingBufferStorage::allocate):
        (WebKit::SharedRingBufferStorage::allocate):
        * Shared/Cocoa/SharedRingBufferStorage.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp:
        (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage):
        * WebProcess/GPU/media/RemoteAudioSourceProviderManager.cpp:
        (WebKit::RemoteAudioSourceProviderManager::RemoteAudio::setStorage):
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::setStorage):

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

        allowsContentJavaScript API not applied from defaultWebpagePreferences
        https://bugs.webkit.org/show_bug.cgi?id=225957

        Reviewed by Wenson Hsieh.

        New API test: WebKit.AllowsContentJavaScriptFromDefaultPreferences

        * UIProcess/API/APIWebsitePolicies.cpp:
        (API::WebsitePolicies::copy const):
        allowsContentJavaScript works fine on the per-navigation-level WKWebpagePreferences,
        but is ignored if applied on the WKWebViewConfiguration's defaultWebpagePreferences,
        because it is not copied in copy(). Copy it!

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

        REGRESSION (r277683): WebContent process crashing in unit tests
        https://bugs.webkit.org/show_bug.cgi?id=225955
        rdar://78184041

        Unreviewed partial revert.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        Revert the CRASH() part of r277683 because it is causing mysterious unit testing failures.

2021-05-18  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Titlebar separator doesn't show when WKWebView is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=220633
        <rdar://problem/71094055>

        Reviewed by Darin Adler.

        Starting in Big Sur, NSWindows with a titlebar display a separator if
        there is a scrolled NSScrollView adjacent to the titlebar. Since
        WKWebViews are scrollable views, but not backed by NSScrollView, we
        need to adopt SPI to support this functionality.

        This patch updates WKWebView to conform to the NSScrollViewSeparatorTrackingAdapter
        protocol, ensuring the titlebar separator is displayed when
        necessary. Note that since WKWebViews are not actually NSScrollView's we
        don't already have the scroll position of the view in the UIProcess. To
        determine whether or not the view is scrolled, this patch adds plumbing
        so that the WebProcess can tell the UIProcess the new scroll position
        when a page is scrolled.

        Tests: WKWebViewTitlebarSeparatorTests.BackForwardCache
               WKWebViewTitlebarSeparatorTests.ChangeTitlebarAdjacency
               WKWebViewTitlebarSeparatorTests.ChangeViewVisibility
               WKWebViewTitlebarSeparatorTests.NavigationResetsTitlebarAppearance
               WKWebViewTitlebarSeparatorTests.ParentWhileScrolled
               WKWebViewTitlebarSeparatorTests.ScrollWithTitlebarAdjacency
               WKWebViewTitlebarSeparatorTests.ScrollWithoutTitlebarAdjacency

        * Platform/spi/mac/AppKitSPI.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView scrollViewFrame]):
        (-[WKView hasScrolledContentsUnderTitlebar]):
        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView scrollViewFrame]):
        (-[WKWebView hasScrolledContentsUnderTitlebar]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateWindowAndViewFrames):

        If the WKWebView's frame changes, update the titlebar adjacency
        state and notify observers of the change.

        (WebKit::WebViewImpl::viewWillMoveToWindowImpl):

        Unregister the WKWebView as an NSScrollViewSeparatorTrackingAdapter if
        it is removed from the window.

        (WebKit::WebViewImpl::viewDidHide):

        Hidden views are not adjacent to the titlebar.

        (WebKit::WebViewImpl::viewDidUnhide):

        An unhidden view may be adjacent to the titlebar.

        (WebKit::WebViewImpl::pageDidScroll):

        Use the scroll position of the page to determine whether or not the
        WKWebView is scrolled.

        (WebKit::WebViewImpl::scrollViewFrame):

        Needed to conform to NSScrollViewSeparatorTrackingAdapter.

        (WebKit::WebViewImpl::hasScrolledContentsUnderTitlebar):

        Needed to conform to NSScrollViewSeparatorTrackingAdapter. Returns true
        if the view is registered as an NSScrollViewSeparatorTrackingAdapter
        and is scrolled.

        (WebKit::WebViewImpl::updateTitlebarAdjacencyState):

        The WKWebView needs to be registered as an NSScrollViewSeparatorTrackingAdapter
        if it's adjacent to the titlebar and unregistered otherwise.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::pageDidScroll):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):

        Reset the scroll position upon navigation, as pageDidScroll does not get
        called when navigating.

        (WebKit::PageClientImpl::pageDidScroll):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidScroll):

        Pass the current scroll position when the page is scrolled, so that the
        UIProcess knows whether or not the page has a non-zero scroll position.

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

        REGRESSION (r275013): Trying to navigate in a WKWebView from a command line tool crashes the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=225938
        <rdar://problem/78029118>

        Reviewed by Alex Christensen.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        Some kinds of processes do not have a bundle identifier, so requiring one
        is simply not going to work.

        Also, make the other exit()s in this function use CRASH() instead, so
        that they make traditional crash logs instead of just exiting with a
        non-zero error code (which is much quieter).

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

        Allow SafariForWebKitDevelopment to launch successfully
        https://bugs.webkit.org/show_bug.cgi?id=223551

        Suggested by BJ Burg. Reviewed by Tim Horton.

        * UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm:

2021-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        Enabling IPC testing API should prevent WebContent process from getting terminated in more cases
        https://bugs.webkit.org/show_bug.cgi?id=225906
        <rdar://problem/78138794>

        Rebaselined the tests.

        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        (WebKit::TestWithImageData::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        (WebKit::TestWithLegacyReceiver::didReceiveSyncTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        (WebKit::TestWithSemaphore::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp:
        (WebKit::TestWithStream::didReceiveStreamMessage):
        * Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:
        (WebKit::TestWithSuperclass::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        (WebKit::TestWithoutAttributes::didReceiveSyncMessage):

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

        Unreviewed, reverting r277614.
        <rdar://78167889>

        Broke Mail

        Reverted changeset:

        "Remove API::Object::Type::BundlePageGroup"
        https://bugs.webkit.org/show_bug.cgi?id=225611
        https://commits.webkit.org/r277614

2021-05-18  Said Abou-Hallawa  <said@apple.com>

        Allow logging minimal info about uploading media files
        https://bugs.webkit.org/show_bug.cgi?id=225636
        <rdar://problem/76639138>

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::addParametersShared):
        Centralize logging uploading the images and media files.

2021-05-18  Keith Miller  <keith_miller@apple.com>

        Temporarily revert r276592 as it breaks some native apps
        https://bugs.webkit.org/show_bug.cgi?id=225917

        Unreviewed, revert.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2021-05-18  Garrett Davidson  <garrett_davidson@apple.com>

        Add nil checks for LAContexts before inserting them in the dictionaries.
        https://bugs.webkit.org/show_bug.cgi?id=225897

        Reviewed by Tim Horton.

        In 225218 we stopped dropping requests that didn't have LAContexts. However, that let us
        proceed only until we tried to put the (nil) LAContext in an NSDictionary to make a Sec*
        call, which throws an exception. This patch adds proper nil checking before inserting the
        contexts into the dictionaries.

        Manually tested registration and assertion on macOS with and without LAContexts.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserVerification):
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::createCredentialPrivateKey const):

2021-05-18  Chris Dumez  <cdumez@apple.com>

        ReadOnlySharedRingBufferStorage::updateFrameBounds() should validate boundsBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=225918

        Reviewed by Youenn Fablet.

        ReadOnlySharedRingBufferStorage::updateFrameBounds() should validate boundsBufferSize since the
        process writing the buffer size on the other end may not be trusted.

        * Shared/Cocoa/SharedRingBufferStorage.cpp:
        (WebKit::ReadOnlySharedRingBufferStorage::updateFrameBounds):

2021-05-18  Youenn Fablet  <youenn@apple.com>

        Resurrect WKWebView media controls API removed in https://bugs.webkit.org/show_bug.cgi?id=221929
        https://bugs.webkit.org/show_bug.cgi?id=225696
        <rdar://77863194>

        Reviewed by Alex Christensen.

        Revert closeAllMediaPresentations, pauseAllMediaPlayback, resumeAllMediaPlayback, suspendAllMediaPlayback and requestMediaPlaybackState.
        Mark them as deprecated in favor of the latest API versions and implement them based on the latest API versions.
        No change of behavior.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView closeAllMediaPresentations:]):
        (-[WKWebView pauseAllMediaPlayback:]):
        (-[WKWebView resumeAllMediaPlayback:]):
        (-[WKWebView suspendAllMediaPlayback:]):
        (-[WKWebView requestMediaPlaybackState:]):

2021-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Enabling IPC testing API should prevent WebContent process from getting terminated in more cases
        https://bugs.webkit.org/show_bug.cgi?id=225906

        Reviewed by Wenson Hsieh.

        Avoid hitting debug assertions in WebContent process when a dispatched message isn't processed
        in a message receivers and don't kill WebContent process in GPU processs when RemoteRenderingBackend
        receives a bad IPC message.

        Also fixed a typo in encodeSharedMemory where we were exiting early when the protection was ReadWrite
        instead of when it was not ReadWrite or ReadOnly.

        These fixes are needed to land tests for recent GPU process fixes.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        * Scripts/webkit/messages.py:
        (generate_message_handler):
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::encodeSharedMemory):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureGPUProcessConnection):

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Object identifiers with the deleted value should cause MESSAGE_CHECKs
        https://bugs.webkit.org/show_bug.cgi?id=225886
        rdar://78114708

        Reviewed by Chris Dumez.

        See WebCore/ChangeLog for more details. Use `ObjectIdentifier::isValid()` instead of just checking for the empty
        value, when determining whether an object identifier should trigger a message check to the web process.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):

2021-05-17  Kate Cheney  <katherine_cheney@apple.com>

        WebFrameLoaderClient::dispatchWillSendRequest sometimes resets app-bound value
        https://bugs.webkit.org/show_bug.cgi?id=225829
        <rdar://problem/78034595>

        Reviewed by Alex Christensen.

        webPage->injectedBundleResourceLoadClient().willSendRequestForFrame
        can sometimes return a completely new request. We should make sure the
        app-bound value is kept when this happens.

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

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r277605.

        Broke iOS tests

        Reverted changeset:

        "Remove _WKUserContentFilter and _WKUserContentExtensionStore"
        https://bugs.webkit.org/show_bug.cgi?id=224391
        https://commits.webkit.org/r277605

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal macOS build

        Add a missing `WebCore::` namespace before `TranslationContextMenuInfo`.
        This error was likely masked by a `using namespace WebCore;` present in an earlier unified source.

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

2021-05-17  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] promote submenus items if there is only one
        https://bugs.webkit.org/show_bug.cgi?id=225883

        Reviewed by Eric Carlson.

        As an example, if a `<video>` only has subtitles and not any other languages, the "Subtitles"
        submenu should really be top-level (i.e. have "Subtitles" be the title of the entire
        contextmenu instead of being a submenu of a title-less contextmenu) in the contextmenu shown
        when tapping the tracks button.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showMediaControlsContextMenu:items:completionHandler:]):

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Remove API::Object::Type::BundlePageGroup
        https://bugs.webkit.org/show_bug.cgi?id=225611

        Reviewed by Brady Eidson.

        Its last use was removed in rdar://77775952

        * Shared/API/APIObject.h:
        * Shared/API/APIPageGroupHandle.cpp: Removed.
        * Shared/API/APIPageGroupHandle.h: Removed.
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Cocoa/SharedRingBufferStorage.cpp:
        (WebKit::SharedRingBufferStorage::setStorage):
        (WebKit::SharedRingBufferStorage::allocate):
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/mac/MediaFormatReader/MediaSampleCursor.h:
        * Sources.txt:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
        (-[WKWebProcessPlugInPageGroup identifier]): Deleted.
        (-[WKWebProcessPlugInPageGroup dealloc]): Deleted.
        (-[WKWebProcessPlugInPageGroup _apiObject]): Deleted.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroupInternal.h: Removed.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController pageGroup]): Deleted.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        [Cocoa] Remove prototype loadSimulatedRequest methods
        https://bugs.webkit.org/show_bug.cgi?id=223658

        Reviewed by Geoffrey Garen.

        Now that rdar://75892301 is fixed we can remove the original API.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadSimulatedRequest:withResponse:responseData:]): Deleted.
        (-[WKWebView loadSimulatedRequest:withResponseHTMLString:]): Deleted.

2021-05-17  Alex Christensen  <achristensen@webkit.org>

        Remove _WKUserContentFilter and _WKUserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=224391

        Reviewed by Darin Adler.

        I removed their use in rdar://75889414
        They were replaced by WKContentRuleList and WKContentRuleListStore.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addUserContentFilter:]):
        (-[WKUserContentController _removeAllUserContentFilters]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (+[_WKUserContentExtensionStore defaultStore]):
        (+[_WKUserContentExtensionStore storeWithURL:]):
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (toUserContentRuleListStoreError): Deleted.
        (-[_WKUserContentExtensionStore _apiObject]): Deleted.
        (-[_WKUserContentExtensionStore _removeAllContentExtensions]): Deleted.
        (-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]): Deleted.
        (-[_WKUserContentExtensionStore _initWithWKContentRuleListStore:]): Deleted.
        (-[_WKUserContentExtensionStore _contentRuleListStore]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStoreInternal.h: Removed.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h: Removed.
        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter _initWithWKContentRuleList:]):
        (-[_WKUserContentFilter _apiObject]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentFilterInternal.h: Removed.
        * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h: Removed.
        * UIProcess/WebProcessPool.h:
        * WebKit.xcodeproj/project.pbxproj:

2021-05-17  Chris Dumez  <cdumez@apple.com>

        Avoid more String creations when preparing SQLite statements
        https://bugs.webkit.org/show_bug.cgi?id=225855

        Reviewed by Alex Christensen.

        Avoid more String creations when preparing SQLite statements by using ASCIILiteral. Also rename the
        SQLiteDatabase::prepareStatement() / SQLiteDatabase::executeCommand() overloads that take in a 
        String to make sure they are not called by mistake.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries):
        (WebKit::insertDistinctValuesInTableStatement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnInTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::joinSubStatisticsForSorting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::aggregatedThirdPartyData const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getSubStatisticStatement const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::migrateItemTableIfNeeded):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::createTablesIfNeeded):
        (WebKit::IconDatabase::populatePageURLToIconURLMap):

2021-05-14  Simon Fraser  <simon.fraser@apple.com>

        Allow wheel events to be coalesced during scroll deceleration
        https://bugs.webkit.org/show_bug.cgi?id=225834
        <rdar://70402512>

        Reviewed by Tim Horton.

        When scrolling slows down towards the tail end of a momentum scroll, we can reduce our
        commit frequency to save power, but we only want to do this on displays whose refresh rate
        is higher than the default "update rendering" frequency.

        We do this by leveraging the existing WebWheelEventCoalescer, which coalesces events
        in the UI process. It tracks time since previous event, and coalesces when the
        instantaneous velocity is less than 320 points per second (matching other frameworks
        on the system).

        WebWheelEventCoalescer needs to know when to enable coalescing, which it computes
        on creation, and when the window is moved to a different screen with potentially
        a different refresh rate.

        * Shared/WebWheelEventCoalescer.cpp:
        (WebKit::WebWheelEventCoalescer::isInMomentumPhase):
        (WebKit::WebWheelEventCoalescer::shouldDispatchEvent):
        * Shared/WebWheelEventCoalescer.h:
        (WebKit::WebWheelEventCoalescer::shouldCoalesceEventsDuringDeceleration const):
        (WebKit::WebWheelEventCoalescer::setShouldCoalesceEventsDuringDeceleration):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wheelEventCoalescer):
        (WebKit::WebPageProxy::shouldCoalesceWheelEventsDuringDeceleration const):
        (WebKit::WebPageProxy::windowScreenDidChange):
        * UIProcess/WebPageProxy.h:

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

        [GPUP] WebContent process should not pull audio session category from the GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=225826

        Reviewed by Darin Adler.

        Remove `category` and `routeSharingPolicy` from `RemoteAudioSessionConfiguration`
        because we should not pull these properties from the GPU process.

        Remove IPC message `RemoteAudioSession::ConfigurationChanged` because it is not used.

        * GPUProcess/mac/LocalAudioSessionRoutingArbitrator.h:
        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::configuration):
        * GPUProcess/media/RemoteAudioSessionProxy.h:

        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::categoryCanMixWithOthers):
        (WebKit::RemoteAudioSessionProxyManager::updateCategory):

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:

        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.h:

        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::setCategory):
        (WebKit::RemoteAudioSession::category const):
        (WebKit::RemoteAudioSession::configurationChanged): Deleted.
        * WebProcess/GPU/media/RemoteAudioSession.h:
        * WebProcess/GPU/media/RemoteAudioSession.messages.in:

        * WebProcess/GPU/media/RemoteAudioSessionConfiguration.h:
        (WebKit::RemoteAudioSessionConfiguration::encode const):
        (WebKit::RemoteAudioSessionConfiguration::decode):

        * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp:

2021-05-14  Jer Noble  <jer.noble@apple.com>

        MediaSessionCoordinator survives page reload/navigation
        https://bugs.webkit.org/show_bug.cgi?id=225822

        Reviewed by Eric Carlson.

        Update the classes affected by virtual function changes in MediaSessionCoordinator. Update
        the creation mechanism inside WebPage/Proxy.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]):
        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::trackIdentifierChanged):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatorStateChanged):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createMediaSessionCoordinator):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::trackIdentifierChanged):
        (WebKit::RemoteMediaSessionCoordinator::coordinatorStateChanged):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createMediaSessionCoordinator):
        (WebKit::WebPage::invalidateMediaSessionCoordinator):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-05-16  Chris Dumez  <cdumez@apple.com>

        Modernize / Optimize SQLiteStatement creation and preparation
        https://bugs.webkit.org/show_bug.cgi?id=225791

        Reviewed by Sam Weinig.

        Update code base now that the SQLiteDatabase & SQLiteStatement API has changed.
        Also use more ASCIILiterals.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::enableForeignKeys):
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::missingUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnInTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::scopedStatement const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::aggregatedThirdPartyData const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasUserGrantedStorageAccessThroughPrompt):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockAndDeleteCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsToBlockButKeepCookiesFor const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsWithUserInteractionAsFirstParty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainsWithStorageAccess const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domains const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectSubStatisticsCount):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateOperatingDatesParameters):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::migrateItemTableIfNeeded):
        (WebKit::LocalStorageDatabase::databaseIsEmpty const):
        (WebKit::LocalStorageDatabase::scopedStatement const):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::IconDatabase):
        (WebKit::IconDatabase::populatePageURLToIconURLMap):
        (WebKit::IconDatabase::pruneTimerFired):
        (WebKit::IconDatabase::iconIDForIconURL):
        (WebKit::IconDatabase::setIconIDForPageURL):
        (WebKit::IconDatabase::iconData):
        (WebKit::IconDatabase::addIcon):
        (WebKit::IconDatabase::updateIconTimestamp):
        (WebKit::IconDatabase::deleteIcon):

2021-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Delete WebSQL code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=225739

        Reviewed by Sihui Liu.

        Deleted WebSQL code. We keep some code for website data store since it's possible
        for user's device to still have WebSQL data, and we should be able to delete them.

        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
        * Shared/WebProcessDataStoreParameters.h:
        (WebKit::WebProcessDataStoreParameters::encode const):
        (WebKit::WebProcessDataStoreParameters::decode):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebSQLDisabled):
        (WKPreferencesGetWebSQLDisabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setWebsiteDataStoreParameters):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

2021-05-15  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Ensure RemoteRenderingBackendProxy is restored to its original state when GPUP connection is closed
        https://bugs.webkit.org/show_bug.cgi?id=225781
        <rdar://76678163>

        Reviewed by Darin Adler.

        GPUProcess may exit in different scenarios: a crash, under memory pressure
        or when it is not being used; see r276148. In all cases, the state of 
        RemoteRenderingBackendProxy has to be restored to its original state when
        it was created. gpuProcessConnectionDidClose() is supposed to do that.
        But some members are not cleared in this function.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
        Make sure the resource cache and the getImageData memory and semaphore
        are cleared.

        (WebKit::RemoteRenderingBackendProxy::createRemoteImageBuffer):
        Add this helper method to be called when a RemoteImageBufferProxy is first
        created or when its backend is cleared.

        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
        (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
        Add this new function to restore RemoteResourceCacheProxy to its original
        state.

        * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
        (WebKit::RemoteResourceCacheProxy::imageBuffers const): Deleted.

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

        Remove _WKWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=224293

        Reviewed by Darin Adler.

        Its last use was removed in rdar://problem/58064847 and we've released a Safari version since then.
        It was replaced by WKWebpagePreferences

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateWebsitePolicies:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: Removed.
        * UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h: Removed.
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::draggingExited):
        (WebKit::WebViewImpl::performDragOperation):
        (WebKit::WebViewImpl::setPromisedDataForImage):
        * WebKit.xcodeproj/project.pbxproj:

2021-05-15  Ian Gilbert  <iang@apple.com>

        Replace PlatformCAAnimationRemote::KeyframeValue with Variant
        https://bugs.webkit.org/show_bug.cgi?id=225474

        Reviewed by Ryosuke Niwa.

        KeyframeValue was effectively a Variant. Replaced the existing class with a WTF::Variant.

        No test as this does not change code behavior.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<RefPtr<WebCore::FilterOperation>>::encode):
        (IPC::ArgumentCoder<RefPtr<WebCore::FilterOperation>>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::animationValueFromKeyframeValue):
        (WebKit::operator<<):
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::encode const): Deleted.
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::decode): Deleted.

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

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks()
        https://bugs.webkit.org/show_bug.cgi?id=225820

        Reviewed by Darin Adler.

        Update our code base because of the FileSystem API changes.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::getDirectories):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::traverseDirectory):
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::ensureSandboxCacheDirectory):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::isInternalInstall):

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

        Javascript can't access a SameSite=Strict cookie after page is loaded after a redirect from a third party site
        https://bugs.webkit.org/show_bug.cgi?id=208049
        <rdar://problem/59701889>

        Reviewed by Chris Dumez.

        The HTTP WG has decided that SameSite=strict cookies should be returned in document.cookie
        even in cases where they are not sent in the HTTP request for the page. Chromium and Gecko
        now work according to those rules and the spec is being updated.

        See:
        - https://github.com/httpwg/http-extensions/issues/769
        - https://github.com/httpwg/http-extensions/pull/1428/files.

        Here's an excerpt from the spec change:
            'If a user agent does return cookies for a given call to a "non-HTTP" API with
            an associated Document, then the user agent MUST compute the cookie-string
            following the algorithm defined in {{retrieval-algorithm}}, indicating that the
            retrieval is from a "non-HTTP" API. The retrieval-uri is the associated
            Document's cookie URL {{COOKIE-URL}}, and the retrieval is same-site if the
            Document's "site for cookies" is same-site with the top-level origin as defined
            in {{document-requests}}.'

        Existing layout tests changed and rebased.

        * WebProcess/WebPage/WebCookieJar.cpp:
        (WebKit::WebCookieJar::cookies const):
            Now sends WebCore::IsCookieAccessForDOM::Yes to WebCore::CookieJar::sameSiteInfo().
        (WebKit::WebCookieJar::setCookies):
            Now sends WebCore::IsCookieAccessForDOM::Yes to WebCore::CookieJar::sameSiteInfo().

2021-05-14  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r269824): Random tile corruption when scrolling/zooming in macCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=225837
        <rdar://problem/75053997>

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        Mark the newly front buffer non-volatile before painting into it.
        This was lost in r269824. Oddly, this caused less trouble than
        one might expect, except on some particular hardware.

2021-05-14  Jonathan Bedard  <jbedard@apple.com>

        Fix iOS 14.5 embedded build
        https://bugs.webkit.org/show_bug.cgi?id=225835
        <rdar://problem/78039315>

        Reviewed by Dewei Zhu.

        No new tests, build fix.

        * WebProcess/cocoa/WebProcessCocoa.mm: Import mach.h.

2021-05-14  Sam Weinig  <weinig@apple.com>

        Use PixelBufferFormat to specify ImageBuffer::getPixelBuffer destination format allowing for more control over data conversion
        https://bugs.webkit.org/show_bug.cgi?id=225813

        Reviewed by Darin Adler.

        Update calls/implementations of getPixelBuffer/putPixelBuffer to adjust
        to new signature. 

        * GPUProcess/graphics/RemoteImageBuffer.h:
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::getPixelBuffer const):
        (WebKit::CGDisplayListImageBufferBackend::putPixelBuffer):
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::getPixelBuffer const):
        (WebKit::ImageBufferShareableBitmapBackend::putPixelBuffer):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::putPixelBuffer):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::getPixelBuffer const):
        (WebKit::ImageBufferShareableIOSurfaceBackend::putPixelBuffer):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

2021-05-14  Patrick Angle  <pangle@apple.com>

        Web Inspector: `_WKInspector` leaks `WebInspectorUIProxy`
        https://bugs.webkit.org/show_bug.cgi?id=225815

        Reviewed by Tim Horton.

        Add a missing call in `_WKInspector`'s destructor to destruct the `WebInspectorUIProxy` in API object storage.

        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector dealloc]):

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

        Drop "get" prefix from WTF::FileSystem's getFileModificationTime() / getFileCreationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225812

        Reviewed by Darin Adler.

        Update code base due to WTF API change.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::fileTimes):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeMediaKeys):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::removeAllMediaKeyStorageForOriginPath):

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

        Rename FileSystem::getVolumeFreeSpace() to FileSystem::volumeFreeSpace()
        https://bugs.webkit.org/show_bug.cgi?id=225811

        Reviewed by Darin Adler.

        Update code base due to API change.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::computeCapacity):

2021-05-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace -[WKContentView _hasPendingImageExtraction] with a monotonically increasing ID
        https://bugs.webkit.org/show_bug.cgi?id=225823
        rdar://77519437

        Reviewed by Tim Horton.

        Refactor some image extraction code by turning this boolean flag into a monotonically increasing
        `ObjectIdentifier` instead; see the bug for more details.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _doAfterPendingImageExtraction:]):
        (-[WKContentView _invokeAllActionsToPerformAfterPendingImageExtraction:]):

2021-05-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _pageExtendedBackgroundColor]` SPI to `-[WKWebView underPageBackgroundColor]` API
        https://bugs.webkit.org/show_bug.cgi?id=225615
        <rdar://problem/76568094>

        Reviewed by Wenson Hsieh.

        `underPageBackgroundColor` is a `null_resettable` property that will return (in order of validity)
         - the most recent non-null value provided
         - the CSS `background-color` of the `<body>` and/or `<html>` (this is the current value of `_pageExtendedBackgroundColor`)
         - the underlying platform view's background color
        Modifications to this property will not have any effect until control is returned to the runloop.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView underPageBackgroundColor]): Added.
        (-[WKWebView setUnderPageBackgroundColor:]): Added.
        (+[WKWebView automaticallyNotifiesObserversOfUnderPageBackgroundColor]): Added.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (baseScrollViewBackgroundColor):
        (scrollViewBackgroundColor):
        Remove the experimental settings `UseSampledPageTopColorForScrollAreaBackgroundColor` and
        `UseThemeColorForScrollAreaBackgroundColor` now that clients can override the default
        overscroll area background color using `-[WKWebView setUnderPageBackgroundColor:]`.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::underPageBackgroundColor const): Added.
        (WebKit::WebPageProxy::setUnderPageBackgroundColorOverride): Added.
        (WebKit::WebPageProxy::pageExtendedBackgroundColorDidChange):
        (WebKit::WebPageProxy::platformUnderPageBackgroundColor const): Added.
        (WebKit::WebPageProxy::scrollAreaBackgroundColor const): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::platformUnderPageBackgroundColor const): Added.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformUnderPageBackgroundColor const): Added.
        Store the client-overriden value for `underPageBackgroundColor` and manage state changes.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::underPageBackgroundColorWillChange): Added.
        (WebKit::PageClient::underPageBackgroundColorDidChange): Added.
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::underPageBackgroundColorWillChange): Added.
        (WebKit::PageClientImplCocoa::underPageBackgroundColorDidChange): Added.
        Add ObjC KVO support for `-[WKWebView underPageBackgroundColor]`.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::contentViewBackgroundColor): Added.
        Provide a way to get the `backgroundColor` of the `WKContentView`. This is needed on iOS
        because `scrollViewBackgroundColor` (now `WebPageProxy::platformUnderPageBackgroundColor`)
        would use this value before falling back to the underlying platform view's background color.

        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUnderPageBackgroundColorOverride): Added.
        Pass the client-overriden value for `underPageBackgroundColor` to the WebProcess so that it
        can be used when drawing the overscroll layer.

        * UIProcess/ViewSnapshotStore.cpp:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Go back to using the `pageExtendedBackgroundColor` (before r273083).

2021-05-14  Devin Rousso  <drousso@apple.com>

        [iOS] contextmenu hints can be clipped by the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=224204
        <rdar://problem/77089174>

        Reviewed by Wenson Hsieh.

        r275562 tried to fix this by moving the interaction previews to a separate `UIWindow`, but
        this had the unfortunate consequence of placing those previews on top of everything in the
        current `UIWindow` (e.g. above the share sheet). As such, WebKit can't use a `UIWindow` for
        this as the `WKWebView` has no idea what the view hierarchy above it looks like.

        Test: ContextMenu.HintPreviewContainer

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        Add new SPI `-[WKUIDelegate _contextMenuHintPreviewContainerViewForWebView:]` that's used as
        the container for the `UIPreviewTarget` created for the contextmenu hint preview.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView cleanUpInteractionPreviewContainers]): Added.
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView _createPreviewContainerWithLayerName:]):
        (-[WKContentView containerForDropPreviews]):
        (-[WKContentView _removeContainerForDropPreviews]): Added.
        (-[WKContentView containerForDragPreviews]):
        (-[WKContentView _removeContainerForDragPreviews]): Added.
        (-[WKContentView containerForContextMenuHintPreviews]):
        (-[WKContentView _removeContainerForContextMenuHintPreviews]): Added.
        (-[WKContentView cleanUpDragSourceSessionState]):
        (-[WKContentView _removeContextMenuViewIfPossible]):
        (-[WKContentView dropInteraction:concludeDrop:]):
        (-[WKContentView _hideTargetedPreviewContainerViews]): Deleted.
        Clean up and centralize logic around creating and removing interaction preview containers.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
        If the `WKWebView` is removed from it's parent, make sure to remove the contextmenu hint
        preview as well as it could be outside the view hierarchy of the `WKWebView` from the SPI.

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

        Introduce FileSystem::updateFileModificationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225810

        Reviewed by Darin Adler.

        Call the new FileSystem::updateFileModificationTime() API to modify the
        file modification time instead of having low-level platform-specific
        file system code at the WebKit2 layer.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):

2021-05-14  Alex Christensen  <achristensen@webkit.org>

        Resource Timing: secureConnectionStart == 0 when a connection is re-used
        https://bugs.webkit.org/show_bug.cgi?id=225733

        Reviewed by Chris Dumez.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):

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

        Rename FileSystem::getFileSize() to FileSystem::fileSize()
        https://bugs.webkit.org/show_bug.cgi?id=225798

        Reviewed by Alex Christensen.

        Update code path to due to the API change.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::setItem):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::readSizeFile):
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::synchronize):
        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::mapFile):
        * NetworkProcess/cache/NetworkCacheIOChannelCurl.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        * Shared/PersistencyUtils.cpp:
        (WebKit::createForFile):
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk):

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

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName()
        https://bugs.webkit.org/show_bug.cgi?id=225806

        Reviewed by Alex Christensen.

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName(), as we avoid "get" prefixes in WebKit.

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::origins const):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):

2021-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.33.1 release

        * gtk/NEWS: Add release notes for 2.33.1.

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

        [Cocoa] Plumb data detector results through some platform objects
        https://bugs.webkit.org/show_bug.cgi?id=225775
        Work towards rdar://75504956

        Reviewed by Tim Horton and Devin Rousso.

        Add IPC encoding and decoding support for the new struct.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::encodePlatformData):
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::decodePlatformData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::encode):
        (IPC::ArgumentCoder<ImageExtractionDataDetectorInfo>::decode):
        * Shared/WebCoreArgumentCoders.h:

2021-05-13  Dean Jackson  <dino@apple.com>

        [WebXR] Allow WebXR to be tested on PLATFORM(COCOA)
        https://bugs.webkit.org/show_bug.cgi?id=225578

        Reviewed by Sam Weinig.

        Remove checking for a WebXR feature flag.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebXREnabled):

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

        Work around WebCore failing to build due to NDEBUG getting undefined in release
        https://bugs.webkit.org/show_bug.cgi?id=225782
        <rdar://problem/77982432>

        Reviewed by Simon Fraser.

        * Platform/spi/ios/UIKitSPI.h:
        Apply a temporary workaround to preserve NDEBUG through these includes.
        There are a few ways to get to CoreGraphicsPrivate.h, so we fix all of them.

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

        Add textIndicator bounce for AppHighlights on scroll.
        https://bugs.webkit.org/show_bug.cgi?id=225727

        Reviewed by Tim Horton.

        Use factored out textIndicator code to add a bounce to an appHighlight
        when it is scrolled to.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver _dictionaryLookupPopoverWillClose:]):
        (WebKit::WebViewImpl::setTextIndicator):
        (WebKit::WebViewImpl::clearTextIndicatorWithAnimation):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsWithAnimationFromViewOnly):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTextIndicator):
        (WebKit::WebPageProxy::clearTextIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        (WebKit::PageClientImpl::setTextIndicatorAnimationProgress):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpTextIndicator:]):
        (-[WKContentView clearTextIndicator:]):
        (-[WKContentView setTextIndicatorAnimationProgress:]):
        (-[WKContentView teardownTextIndicatorLayer]):
        (-[WKContentView startFadeOut]):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForText]):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setTextIndicator const):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):

2021-05-13  Sam Weinig  <weinig@apple.com>

        Split pixel buffer format data out into a new PixelBufferFormat struct
        https://bugs.webkit.org/show_bug.cgi?id=225707

        Reviewed by Darin Adler.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        Adopt PixelBufferFormat.

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

        Rename FileSystem::directoryName() to FileSystem::parentPath()
        https://bugs.webkit.org/show_bug.cgi?id=225768

        Reviewed by Darin Adler.

        Rename FileSystem::directoryName() to FileSystem::parentPath() for clarity and
        consistency with std::filesystem::parent_path() which is used internally.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::writeFile):
        * Shared/glib/ProcessExecutablePathGLib.cpp:
        (WebKit::getExecutablePath):
        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::IconDatabase):
        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
        (webkit_website_data_manager_get_disk_cache_directory):
        * UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
        (WebKit::bubblewrapSpawn):
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):

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

        Rename FileSystem::fileIsDirectory(path, followSymlinks) to isDirectory(path) / isDirectoryFollowingSymlinks(path)
        https://bugs.webkit.org/show_bug.cgi?id=225772

        Reviewed by Darin Adler.

        Update code base due to API naming change.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::getDirectories):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::traverseDirectory):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::isInternalInstall):

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

        Process suspension may be delayed by up to 5 seconds after there is no longer any database activity
        https://bugs.webkit.org/show_bug.cgi?id=225774

        Reviewed by Geoffrey Garen.

        Use a 1 second HysteresisActivity in WebSQLiteDatabaseTracker instead of a 5 seconds one.
        I frequently see our processes' suspension getting delayed by 5 seconds when homing out of
        MobileSafari due to database activity. This change should help with that.

        * Shared/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):

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

        Introduce FileSystem::hardLinkCount()
        https://bugs.webkit.org/show_bug.cgi?id=225767

        Reviewed by Darin Adler.

        Leverage the FileSystem API instead of having platform-specific code.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::synchronize):
        (WebKit::NetworkCache::BlobStorage::shareCount):

2021-05-13  Sam Weinig  <weinig@apple.com>

        CGDisplayList debug configuration fails to build
        https://bugs.webkit.org/show_bug.cgi?id=225729

        Reviewed by Darin Adler.

        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::nameForBackingStoreType):
        Add missing case for RemoteLayerBackingStore::Type::CGDisplayList.

2021-05-13  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732

        Reviewed by Sam Weinig.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::buildList): Use append instead of appendNumber.
        (WebKit::ResourceLoadStatisticsDatabaseStore::findNotVeryPrevalentResources): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributionToString): Ditto.
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString): Ditto.
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile): Ditto.
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptCallback): Ditto.
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::loggingString): Ditto.

        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (PageResourceLoadClient::didReceiveResponseForResource): Use makeString instead
        of StringBuilder.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders): Use append instead of appendNumber.

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

        Subtitles in Safari fail to appear after switching language
        https://bugs.webkit.org/show_bug.cgi?id=225738

        Reviewed by Jer Noble.

        `TextTrackPrivateRemote::setMode()` calls `InbandTextTrackPrivate::setMode()`, but
        it does not set the value of `TextTrackPrivateRemote::mode` properly. Therefore,
        `TextTrackPrivateRemote::mode` will always be `Disabled`. When we switch text track
        in the WebContent process side, we will only send the IPC message `TextTrackSetMode`
        to `RemoteMediaPlayerProxy` in the GPU process to change the mode from `Disabled`
        to `Showing`, but cannot change its value back to `Disabled`. When a user keeps
        switching text track, all text tracks in the GPU process will become `Showing`,
        and `MediaPlayerPrivateAVFoundation` cannot deal with that. As a result,
        the WebContent process won't get the correct subtitles from the GPU process.
        `cueFormat()` has the similar issue, it does not impact the functionality though.

        Actually, `TextTrackPrivateRemote` can simply use the implementations of its
        base class `InbandTextTrackPrivate` regarding mode and cue format.

        In addition, `TextTrackPrivateRemote` does not need to get the "mode" value from
        `RemoteTextTrackProxy` in the GPU process. So this patch removes the `mode` attribute
        of `TextTrackPrivateRemoteConfiguration`.

        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::configuration):
        * GPUProcess/media/TextTrackPrivateRemoteConfiguration.h:
        (WebKit::TextTrackPrivateRemoteConfiguration::encode const):
        (WebKit::TextTrackPrivateRemoteConfiguration::decode):
        * WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
        (WebKit::TextTrackPrivateRemote::setMode):
        (WebKit::TextTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/TextTrackPrivateRemote.h:

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

        REGRESSION(r277262): test imported/w3c/web-platform-tests/css/selectors/focus-visible-002.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=225659

        Reviewed by Adrian Perez de Castro.

        Do not try to grab focus on WebView widget for synthesized mouse press and release events if the widget has
        already the focus or is not the current toplevel focus widget.

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

2021-05-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277258.
        https://bugs.webkit.org/show_bug.cgi?id=225740

        Caused layout test failures

        Reverted changeset:

        "[GTK] Use always async scrolling in accelerated compositing
        mode"
        https://bugs.webkit.org/show_bug.cgi?id=225512
        https://trac.webkit.org/changeset/277258

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

        [GTK][WPE] Add ArgumentCoder for GTlsCertificate
        https://bugs.webkit.org/show_bug.cgi?id=225509

        Reviewed by Adrian Perez de Castro.

        Move the GTlsCertificate serialization from CertificateInfo ArgumentCoder to its own.

        * Shared/glib/ArgumentCodersGLib.cpp:
        (IPC::ArgumentCoder<GRefPtr<GVariant>>::encode):
        (IPC::ArgumentCoder<GRefPtr<GVariant>>::decode):
        (IPC::ArgumentCoder<GRefPtr<GTlsCertificate>>::encode):
        (IPC::ArgumentCoder<GRefPtr<GTlsCertificate>>::decode):
        (IPC::encode): Deleted.
        (IPC::decode): Deleted.
        * Shared/glib/ArgumentCodersGLib.h:
        * Shared/glib/UserMessage.cpp:
        (WebKit::UserMessage::encode const):
        (WebKit::UserMessage::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::ArgumentCoder<CertificateInfo>::decode):

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

        Notification.requestPermission() should return a Promise
        https://bugs.webkit.org/show_bug.cgi?id=225712

        Reviewed by Darin Adler.

        Update code now that WebCore passes a CompletionHandler instead of a
        NotificationPermissionCallback.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::~NotificationPermissionRequestManager):
        (WebKit::NotificationPermissionRequestManager::startRequest):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::requestPermission):
        * WebProcess/WebCoreSupport/WebNotificationClient.h:

2021-05-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Failed to open WebInspector UI since r277231
        https://bugs.webkit.org/show_bug.cgi?id=225715

        Reviewed by Don Olmstead.

        Windows WebKit2 failed to open WebInspector UI after r277231
        changed Filesystem::pathByAppendingComponent.
        "inspector-resource:///Main.html" was wrongly mapped to
        "C:\\Main.html".

        requestURL.fileSystemPath() returns "\Main.html". The preceding
        "\" should be removed before concatenating it with the bundle path
        by using FileSystem::pathByAppendingComponent.

        * UIProcess/Inspector/win/InspectorResourceURLSchemeHandler.cpp:
        (WebKit::InspectorResourceURLSchemeHandler::platformStartTask): Removed the preceding "\".

2021-05-12  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Permit sysctl-read operations needed by Metal and other system frameworks
        https://bugs.webkit.org/show_bug.cgi?id=225720
        <rdar://problem/77438105>

        Reviewed by Per Arne Vollan.

        Further testing of iOS and macOS have revealed a handful of sysctl-read operations we should allow to improve
        performance and correctness of OpenGL/Metal and other high-performance math routines.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

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

        Simplify / Modernize Notification permission implementation
        https://bugs.webkit.org/show_bug.cgi?id=225711

        Reviewed by Alex Christensen.

        Simplify / Modernize Notification permission implementation. The main change was
        adopting sendWithAsyncReply() for the IPC instead of using 2 separate IPC messages
        for the request and the decision. As a result, we don't have to deal with request
        identifiers.

        No new tests, no behavior change and covered by existing API tests.

        * Sources.txt:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::decidePolicyForNotificationPermissionRequest):
        * UIProcess/API/C/WKNotificationPermissionRequest.cpp:
        (WKNotificationPermissionRequestAllow):
        (WKNotificationPermissionRequestDeny):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/glib/WebKitNotificationPermissionRequest.cpp:
        (webkitNotificationPermissionRequestAllow):
        (webkitNotificationPermissionRequestDeny):
        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest):
        * UIProcess/Notifications/NotificationPermissionRequest.h:
        (WebKit::NotificationPermissionRequest::create):
        (WebKit::NotificationPermissionRequest::~NotificationPermissionRequest):
        (WebKit::NotificationPermissionRequest::didReceiveDecision):
        (WebKit::NotificationPermissionRequest::NotificationPermissionRequest):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp: Removed.
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::requestNotificationPermission):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-05-12  Ada Chan  <ada.chan@apple.com>

        [WebXR] Implement XRDeviceProxy::submitFrame
        https://bugs.webkit.org/show_bug.cgi?id=225718

        Reviewed by Sam Weinig.

        * Shared/Cocoa/XRDeviceProxy.h:
        * Shared/Cocoa/XRDeviceProxy.mm:
        (WebKit::XRDeviceProxy::submitFrame):
        * UIProcess/Cocoa/PlatformXRCoordinator.h:
        (WebKit::PlatformXRCoordinator::submitFrame):
        * UIProcess/Cocoa/PlatformXRSystem.h:
        * UIProcess/Cocoa/PlatformXRSystem.messages.in:
        * UIProcess/Cocoa/PlatformXRSystem.mm:
        (WebKit::PlatformXRSystem::submitFrame):
        * WebProcess/cocoa/PlatformXRSystemProxy.h:
        * WebProcess/cocoa/PlatformXRSystemProxy.mm:
        (WebKit::PlatformXRSystemProxy::submitFrame):

2021-05-12  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Silence uninteresting sandbox reports
        https://bugs.webkit.org/show_bug.cgi?id=225713
        <rdar://problem/77483132>

        Reviewed by Per Arne Vollan.

        Telemetry from the recently released iOS and macOS updates show a set of uninteresting sandbox violations. Most of
        these are harmless, but all of them involve some runtime cost and may prevent code from making the best use of
        available hardware and should be permitted.

        These changes also bring the various sandboxes into better alignment, as many of these items had previously been
        added to one of the other sandboxes.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-05-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Plumb some more metadata to QuickLook when revealing images
        https://bugs.webkit.org/show_bug.cgi?id=225709
        rdar://77864866

        Reviewed by Devin Rousso.

        Add plumbing to supply QuickLook with some additional information about the image URL and current page URL when
        revealing images.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleContextMenuRevealImage):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):
        * UIProcess/mac/WKImageExtractionPreviewController.h:
        * UIProcess/mac/WKImageExtractionPreviewController.mm:
        (-[WKImageExtractionPreviewItem initWithFileURL:title:imageURL:pageURL:]):
        (-[WKImageExtractionPreviewItem dealloc]):
        (-[WKImageExtractionPreviewItem previewItemURL]):
        (-[WKImageExtractionPreviewItem previewOptions]):
        (-[WKImageExtractionPreviewController initWithPage:fileURL:title:imageURL:]):

        Rename the `URL` argument to `fileURL`, to avoid confusion with the new `imageURL` that's passed in. Note that
        this is temporary, since we'll adopt new QuickLook SPI on macOS once the fix for rdar://74299451 is available.

        (-[WKImageExtractionPreviewItem initWithURL:title:]): Deleted.
        (-[WKImageExtractionPreviewController initWithPage:url:title:]): Deleted.

2021-05-12  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r275297): Unexpected autofocus when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=225710
        <rdar://problem/77542939>

        Reviewed by Wenson Hsieh.

        r275297 introduced logic to handle a focus environment change by
        advancing to the next or previous focusable element, depending on the
        focus context's heading direction. This logic enables a tab or a
        shift+tab to change the focus from browser chrome directly to an
        element on a web page.

        However, the focus environment can change through mechanisms other than
        tab / shift+tab. One example of this is when a user switches tabs. In
        these cases, the UIFocusHeading supplied by the focus context is
        UIFocusHeadingNone. Nevertheless, we unconditionally call
        `-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]`
        when the focus context changes. Consequently, an element on the web page
        is always focused when the WKContentView gains focus.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateFocusInContext:withAnimationCoordinator:]):

        To fix, ensure we only focus an element on the page if the focus heading
        is UIFocusHeadingNext or UIFocusHeadingPrevious. UIFocusHeadingNext will
        focus the first focusable element, while UIFocusHeadingPrevious will focus
        the last focusable element.

        Note that a call to `-[WKContentView becomeFirstResponder]` is not made
        if the focus heading is UIFocusHeadingNone. From my testing, I observed
        that the view already was the first responder in that case.

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

        Unreviewed follow-up to r277376.

        Fix bad early return in NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision().

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):

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

        Queue notification permission requests for the same origin on WebKit side
        https://bugs.webkit.org/show_bug.cgi?id=225701
        <rdar://76804977>

        Reviewed by Geoffrey Garen.

        If there are parallel notification permission requests for the same origin, we now queue them on WebKit
        side and only ask the client once for the origin. Once we've received the permission from the client,
        we respond to all JS requests at this point.

        This patch also removes some dead code to facilitate refactoring the code to support this.
        In a follow-up I am planning to use sendWithAsyncReply() and refactor this code further.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):
        (WebKit::NotificationPermissionRequestManager::permissionLevel):
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin const):
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::requestPermission):
        (WebKit::WebNotificationClient::checkPermission):
        * WebProcess/WebCoreSupport/WebNotificationClient.h:

2021-05-12  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in WebPageProxy::endColorPicker()
        https://bugs.webkit.org/show_bug.cgi?id=225679

        Reviewed by Ryosuke Niwa.

        Make sure that endColorPicker() and didEndColorPicker()
        do not both attempt to null-out m_colorPicker.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::endColorPicker):
        (WebKit::WebPageProxy::didEndColorPicker):

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

        Implement TextTrackPrivateRemote::inBandMetadataTrackDispatchType()
        https://bugs.webkit.org/show_bug.cgi?id=225674

        Reviewed by Eric Carlson.

        This patch ensures that `InbandTextTrack::inBandMetadataTrackDispatchType()`
        behaviors the same no matter "Media in GPU Process" is enabled or not.

        * GPUProcess/media/RemoteTextTrackProxy.cpp:
        (WebKit::RemoteTextTrackProxy::configuration):
        * WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
        (WebKit::TextTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/TextTrackPrivateRemote.h:

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

        Introduce an internal unit to render audio MediaStreamTrack(s)
        https://bugs.webkit.org/show_bug.cgi?id=225601

        Reviewed by Eric Carlson.

        Update according new WebCore API.

        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRenderer::start):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        (WebKit::AudioMediaStreamTrackRenderer::start):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.h:

2021-05-12  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(r277083): Proximity scroll snap is broken on iOS
        https://bugs.webkit.org/show_bug.cgi?id=225649

        Reviewed by Simon Fraser.

        No new tests. iOS does not have great support for the event sending test
        infrastructure used to test scroll snap.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::encode): Include the snap type when encoding ScrollSnapOffsetsInfo.
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::decode): Include the snap type when decoding ScrollSnapOffsetsInfo.
        * Shared/WebCoreArgumentCoders.h: Added EnumTraits for ScrollSnapStrictness.

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

        Port WTF::FileSystem::listDirectory to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225633

        Reviewed by Darin Adler.

        Update FileSystem::listDirectory() call sites to deal with the fact that:
        - The function now returns file names instead of full file paths
        - The callers now have to do filtering by themselves if they need it

        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::origins const):
        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::getDirectorySize):
        (WebKit::CacheStorage::Engine::getDirectories):
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        (WebKit::NetworkCache::traverseDirectory):
        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::getAvailableContentRuleListIdentifiers):
        (API::ContentRuleListStore::synchronousRemoveAllContentRuleLists):
        * UIProcess/DeviceIdHashSaltStorage.cpp:
        (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::mediaKeyOrigins):
        (WebKit::WebsiteDataStore::removeMediaKeys):
        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.cpp:
        (WebKit::WebKitExtensionManager::scanModules):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        (WebKit::removeAllMediaKeyStorageForOriginPath):
        (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesModifiedBetweenDates):
        (WebKit::WebMediaKeyStorageManager::deleteAllMediaKeyEntries):

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

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoff Garen.

        Add SPI to suspend / resume a WKWebView. This suspends the page as if it was in
        the back/forward cache but the suspension happens in-place, no need to navigate.
        The suspended page is also not part of the Back/Forward cache so its cap on the
        number of suspended pages does not apply here.

        Most of WKWebView's API / SPI will throw an exception when called on a suspended
        view (The WKPageRefAPI will RELEASE_ASSERT()). Some of the basic API will stay
        functional (URL, isLoading, title, ...). It is also safe to deallocate / close
        a suspended WKWebView.

        * UIProcess/API/C/WKPage.cpp:
        (crashIfPageIsSuspended):
        (WKPageLoadURL):
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequest):
        (WKPageLoadURLRequestWithUserData):
        (WKPageLoadFile):
        (WKPageLoadFileWithUserData):
        (WKPageLoadData):
        (WKPageLoadDataWithUserData):
        (WKPageLoadHTMLString):
        (WKPageLoadHTMLStringWithUserData):
        (WKPageLoadAlternateHTMLString):
        (WKPageLoadAlternateHTMLStringWithUserData):
        (WKPageLoadPlainTextString):
        (WKPageLoadPlainTextStringWithUserData):
        (WKPageLoadWebArchiveData):
        (WKPageLoadWebArchiveDataWithUserData):
        (WKPageStopLoading):
        (WKPageReload):
        (WKPageReloadWithoutContentBlockers):
        (WKPageReloadFromOrigin):
        (WKPageReloadExpiredOnly):
        (WKPageTryClose):
        (WKPageClose):
        (WKPageGoForward):
        (WKPageGoBack):
        (WKPageGoToBackForwardListItem):
        (WKPageTryRestoreScrollPosition):
        (WKPageUpdateWebsitePolicies):
        (WKPageSetApplicationNameForUserAgent):
        (WKPageSetCustomUserAgent):
        (WKPageSetCustomTextEncodingName):
        (WKPageTerminate):
        (WKPageRestoreFromSessionState):
        (WKPageRestoreFromSessionStateWithoutNavigation):
        (WKPageSetCustomBackingScaleFactor):
        (WKPageSetTextZoomFactor):
        (WKPageSetPageZoomFactor):
        (WKPageSetPageAndTextZoomFactors):
        (WKPageSetScaleFactor):
        (WKPageSetUseFixedLayout):
        (WKPageSetFixedLayoutSize):
        (WKPageListenForLayoutMilestones):
        (WKPageSetSuppressScrollbarAnimations):
        (WKPageSetRubberBandsAtLeft):
        (WKPageSetRubberBandsAtRight):
        (WKPageSetRubberBandsAtTop):
        (WKPageSetRubberBandsAtBottom):
        (WKPageSetEnableVerticalRubberBanding):
        (WKPageSetEnableHorizontalRubberBanding):
        (WKPageSetBackgroundExtendsBeyondPage):
        (WKPageSetPaginationMode):
        (WKPageSetPaginationBehavesLikeColumns):
        (WKPageSetPageLength):
        (WKPageSetGapBetweenPages):
        (WKPageSetPaginationLineGridEnabled):
        (WKPageSetMaintainsInactiveSelection):
        (WKPageCenterSelectionInVisibleArea):
        (WKPageFindStringMatches):
        (WKPageGetImageForFindMatch):
        (WKPageSelectFindMatch):
        (WKPageFindString):
        (WKPageHideFindUI):
        (WKPageCountStringMatches):
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageFindClient):
        (WKPageSetPageFindMatchesClient):
        (WKPageSetPageInjectedBundleClient):
        (WKPageSetPageFormClient):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):
        (WKPageSetPageStateClient):
        (WKPageRunJavaScriptInMainFrame):
        (WKPageRunJavaScriptInMainFrame_b):
        (WKPageRenderTreeExternalRepresentation):
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        (WKPageGetBytecodeProfile):
        (WKPageGetSamplingProfilerOutput):
        (WKPageGetSelectionAsWebArchiveData):
        (WKPageGetContentsAsMHTMLData):
        (WKPageForceRepaint):
        (WKPageValidateCommand):
        (WKPageExecuteCommand):
        (WKPageComputePagesForPrinting):
        (WKPageDrawPagesToPDF):
        (WKPageBeginPrinting):
        (WKPageEndPrinting):
        (WKPageSetControlledByAutomation):
        (WKPageSetAllowsRemoteInspection):
        (WKPageSetMediaVolume):
        (WKPageSetMuted):
        (WKPageSetMediaCaptureEnabled):
        (WKPageDidAllowPointerLock):
        (WKPageClearUserMediaState):
        (WKPageDidDenyPointerLock):
        (WKPageSetMayStartMediaWhenInWindow):
        (WKPageSelectContextMenuItem):
        (WKPageSetScrollPinningBehavior):
        (WKPageSetAddsVisitedLinks):
        (WKPageClearWheelEventTestMonitor):
        (WKPageCallAfterNextPresentationUpdate):
        (WKPageSetIgnoresViewportScaleLimits):
        (WKPageGetApplicationManifest_b):
        (WKPageDumpPrivateClickMeasurement):
        (WKPageClearPrivateClickMeasurement):
        (WKPageSetPrivateClickMeasurementOverrideTimerForTesting):
        (WKPageMarkAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WKPageSimulateResourceLoadStatisticsSessionRestart):
        (WKPageSetPrivateClickMeasurementTokenPublicKeyURLForTesting):
        (WKPageSetPrivateClickMeasurementTokenSignatureURLForTesting):
        (WKPageSetPrivateClickMeasurementAttributionReportURLsForTesting):
        (WKPageMarkPrivateClickMeasurementsAsExpiredForTesting):
        (WKPageSetPCMFraudPreventionValuesForTesting):
        (WKPageSetMockCameraOrientation):
        (WKPageLoadedSubresourceDomains):
        (WKPageClearLoadedSubresourceDomains):
        (WKPageSetMediaCaptureReportingDelayForTesting):
        (WKPageDispatchActivityStateUpdateForTesting):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):
        (-[WKWebView loadHTMLString:baseURL:]):
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        (-[WKWebView startDownloadUsingRequest:completionHandler:]):
        (-[WKWebView resumeDownloadFromResumeData:completionHandler:]):
        (-[WKWebView goToBackForwardListItem:]):
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView stopLoading]):
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        (-[WKWebView evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView closeAllMediaPresentationsWithCompletionHandler:]):
        (-[WKWebView pauseAllMediaPlaybackWithCompletionHandler:]):
        (-[WKWebView setAllMediaPlaybackSuspended:completionHandler:]):
        (-[WKWebView requestMediaPlaybackStateWithCompletionHandler:]):
        (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
        (-[WKWebView setCameraCaptureState:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withSourceURL:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView setCustomUserAgent:]):
        (-[WKWebView setAllowsLinkPreview:]):
        (-[WKWebView setPageZoom:]):
        (-[WKWebView findString:withConfiguration:completionHandler:]):
        (-[WKWebView setMediaType:]):
        (-[WKWebView setInteractionState:]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView printOperationWithPrintInfo:]):
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        (-[WKWebView createWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView loadSimulatedRequest:response:responseData:]):
        (-[WKWebView loadSimulatedRequest:withResponse:responseData:]):
        (-[WKWebView loadSimulatedRequest:responseHTMLString:]):
        (-[WKWebView loadSimulatedRequest:withResponseHTMLString:]):
        (-[WKWebView loadFileRequest:allowingReadAccessToURL:]):
        (-[WKWebView _toggleStrikeThrough:]):
        (-[WKWebView _increaseListLevel:]):
        (-[WKWebView _decreaseListLevel:]):
        (-[WKWebView _changeListType:]):
        (-[WKWebView _setViewportSizeForCSSViewportUnits:]):
        (-[WKWebView _didEnableBrowserExtensions:]):
        (-[WKWebView _didDisableBrowserExtensions:]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _executeEditCommand:argument:completion:]):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _completeTextManipulationForItems:completion:]):
        (-[WKWebView _takeFindStringFromSelection:]):
        (-[WKWebView _updateMediaPlaybackControlsManager]):
        (-[WKWebView _togglePictureInPicture]):
        (-[WKWebView _closeAllMediaPresentations]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        (-[WKWebView _restoreAppHighlights:]):
        (-[WKWebView _restoreAndScrollToAppHighlight:]):
        (-[WKWebView _addAppHighlight]):
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]):
        (-[WKWebView _grantAccessToAssetServices]):
        (-[WKWebView _revokeAccessToAssetServices]):
        (-[WKWebView _switchFromStaticFontRegistryToUserFontRegistry]):
        (-[WKWebView _appBoundNavigationDataForDomain:completionHandler:]):
        (-[WKWebView _suspendPage:]):
        (-[WKWebView _resumePage:]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _getPDFFirstPageSizeInFrame:completionHandler:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        (-[WKWebView _close]):
        (-[WKWebView _tryClose]):
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        (-[WKWebView _attachmentForIdentifier:]):
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:detailsWithLinks:completionHandler:]):
        (-[WKWebView _isJITEnabled:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:withSourceURL:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _updateWebpagePreferences:]):
        (-[WKWebView _notifyUserScripts]):
        (-[WKWebView _deferrableUserScriptsNeedNotification]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        (-[WKWebView _setAddsVisitedLinks:]):
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsOfAllFramesAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        (-[WKWebView _getApplicationManifestWithCompletionHandler:]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView _setPageZoomFactor:]):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        (-[WKWebView _clearServiceWorkerEntitlementOverride:]):
        (-[WKWebView _preconnectToServer:]):
        (-[WKWebView _setCanUseCredentialStorage:]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _setFixedLayoutSize:]):
        (-[WKWebView _setBackgroundExtendsBeyondPage:]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setCORSDisablingPatterns:]):
        (-[WKWebView _getProcessDisplayNameWithCompletionHandler:]):
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]):
        (-[WKWebView _grantAccessToPreferenceService]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _setMediaCaptureEnabled:]):
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspend):
        (WebKit::WebPageProxy::resume):
        (WebKit::WebPageProxy::requestMediaPlaybackState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspend):
        (WebKit::WebPage::resume):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Remove the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225599

        Reviewed by Anders Carlsson.

        * Shared/win/AuxiliaryProcessMainWin.cpp:
        (WebKit::AuxiliaryProcessMainCommon::parseCommandLine): Use
        parseIntegerAllowingTrailingJunk<uint64_t> instead of String::toUInt64.
        * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp:
        (WebKit::ScriptMessageClient::didPostMessage): Ditto.
        * UIProcess/win/WebProcessPoolWin.cpp:
        (WebKit::initializeRemoteInspectorServer): Use
        parseIntegerAllowingTrailingJunk<uint16_t> instead of StringView::toUInt64.
        This is a 16-bit port number, so not valuable to parse larger integers.

2021-05-11  Devin Rousso  <drousso@apple.com>

        [macCatalyst] should have CSS `hover: hover` and `pointer: fine`
        https://bugs.webkit.org/show_bug.cgi?id=225672

        Reviewed by Tim Horton.

        Test: iOSMouseSupport.MouseAlwaysConnected

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isMousePrimaryPointingDevice): Added.
        (WebKit::hasAccessoryMousePointingDevice): Added.
        (WebKit::hasAccessoryStylusPointingDevice): Added.
        (WebKit::WebPage::hoverSupportedByPrimaryPointingDevice const):
        (WebKit::WebPage::hoverSupportedByAnyAvailablePointingDevice const):
        (WebKit::WebPage::pointerCharacteristicsOfPrimaryPointingDevice const):
        (WebKit::WebPage::pointerCharacteristicsOfAllAvailablePointingDevices const):
        (WebKit::hasMouseDevice): Deleted.
        macCatalyst should consider the mouse as the primary pointing device, just like macOS:
         - `hover` and `any-hover` should always be `hover`
         - `pointer` and `any-pointer` should always be `fine` (instead of only if an accessory mouse/stylus is connected)

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::notifyHasMouseDeviceChanged): Added.
        (WebKit::WebProcessProxy::notifyHasStylusDeviceChanged):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::platformInitialize):
        (WebKit::WebProcessProxy::platformDestroy):
        (WebKit::WebProcessProxy::notifyHasMouseDeviceChanged): Deleted.
        * UIProcess/ios/WKMouseDeviceObserver.h:
        * UIProcess/ios/WKMouseDeviceObserver.mm:
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * WebProcess/WebProcess.messages.in:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Clean up macro usage to avoid unnecessary work on macCatalyst.
        Drive-by: Move non-platform code to non-platform files.

2021-05-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277341.
        https://bugs.webkit.org/show_bug.cgi?id=225685

        Caused WK2 layout tests to exit with an exception

        Reverted changeset:

        "Add SPI to suspend / resume a WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=225333
        https://trac.webkit.org/changeset/277341

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

        [iOS] Mail compose web view doesn't scroll to reveal the selection in certain configurations
        https://bugs.webkit.org/show_bug.cgi?id=225675
        rdar://77095886

        Reviewed by Tim Horton.

        Currently when computing input view bounds upon receiving `UIKeyboardDidChangeFrameNotification`, we attempt to
        map the on-screen bounds of the keyboard to the window's coordinate space, and save the result in an ivar in
        `WKWebView`, `_inputViewBounds`. The keyboard frame (which corresponds to `UIKeyboardFrameEndUserInfoKey` in the
        notification's userInfo dictionary) is given to us in screen coordinates, and we currently pass this through
        `-convertRect:fromWindow:`, with a nil `UIWindow`.

        However, this results in mapping the rect from the coordinate space of the window's `UIWindowScene` rather than
        the window screen. In shipping Mail on iOS, this doesn't matter because the window containing the compose web
        view shares the same coordinate space as the screen. In some other configurations of MobileMail, however, the
        compose web view appears inside its own `UIWindow`. This causes the above coordinate conversion logic to fail,
        since we attempt to map a rect given to us in screen coordinates from the compose web view's window scene's
        coordinate space, instead of the screen's coordinate space.

        We fix this by using `-convertRect:fromCoordinateSpace:` instead, and explicitly pass in
        `self.window.screen.coordinateSpace`.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _updateScrollViewForTransaction:]):
        (-[WKWebView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        (-[WKWebView _contentRectForUserInteraction]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):

        Rename `_inputViewBounds` to `_inputViewBoundsInWindow` for clarity.

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _inputViewBoundsInWindow]):
        (-[WKWebView _inputViewBounds]): Deleted.

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

        Crash in DisplayLink::incrementFullSpeedRequestClientCount()
        https://bugs.webkit.org/show_bug.cgi?id=225683
        <rdar://77716330>

        Reviewed by Tim Horton.

        Crash data suggest that in WebPageProxy::updateWheelEventActivityAfterProcessSwap()
        the connection might be null. Protect against that an an unset DisplayID, as we do
        in wheelEventHysteresisUpdated().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateWheelEventActivityAfterProcessSwap):
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::incrementFullSpeedRequestClientCount): Remove an extra semicolon.

2021-05-11  Tim Horton  <timothy_horton@apple.com>

        Fix the CGDisplayListImageBufferBackend build
        https://bugs.webkit.org/show_bug.cgi?id=225681

        Unreviewed.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::getPixelBuffer const):
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:

2021-05-11  Alex Christensen  <achristensen@webkit.org>

        Remove xpc_connection_kill
        https://bugs.webkit.org/show_bug.cgi?id=225602

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::terminateWithReason):

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

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoffrey Garen.

        Add SPI to suspend / resume a WKWebView. This suspends the page as if it was in
        the back/forward cache but the suspension happens in-place, no need to navigate.
        The suspended page is also not part of the Back/Forward cache so its cap on the
        number of suspended pages does not apply here.

        Most of WKWebView's API / SPI will throw an exception when called on a suspended
        view (The WKPageRefAPI will RELEASE_ASSERT()). Some of the basic API will stay
        functional (URL, isLoading, title, ...). It is also safe to deallocate / close
        a suspended WKWebView.

        * UIProcess/API/C/WKPage.cpp:
        (crashIfPageIsSuspended):
        (WKPageLoadURL):
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequest):
        (WKPageLoadURLRequestWithUserData):
        (WKPageLoadFile):
        (WKPageLoadFileWithUserData):
        (WKPageLoadData):
        (WKPageLoadDataWithUserData):
        (WKPageLoadHTMLString):
        (WKPageLoadHTMLStringWithUserData):
        (WKPageLoadAlternateHTMLString):
        (WKPageLoadAlternateHTMLStringWithUserData):
        (WKPageLoadPlainTextString):
        (WKPageLoadPlainTextStringWithUserData):
        (WKPageLoadWebArchiveData):
        (WKPageLoadWebArchiveDataWithUserData):
        (WKPageStopLoading):
        (WKPageReload):
        (WKPageReloadWithoutContentBlockers):
        (WKPageReloadFromOrigin):
        (WKPageReloadExpiredOnly):
        (WKPageTryClose):
        (WKPageClose):
        (WKPageGoForward):
        (WKPageGoBack):
        (WKPageGoToBackForwardListItem):
        (WKPageTryRestoreScrollPosition):
        (WKPageUpdateWebsitePolicies):
        (WKPageSetApplicationNameForUserAgent):
        (WKPageSetCustomUserAgent):
        (WKPageSetCustomTextEncodingName):
        (WKPageTerminate):
        (WKPageRestoreFromSessionState):
        (WKPageRestoreFromSessionStateWithoutNavigation):
        (WKPageSetCustomBackingScaleFactor):
        (WKPageSetTextZoomFactor):
        (WKPageSetPageZoomFactor):
        (WKPageSetPageAndTextZoomFactors):
        (WKPageSetScaleFactor):
        (WKPageSetUseFixedLayout):
        (WKPageSetFixedLayoutSize):
        (WKPageListenForLayoutMilestones):
        (WKPageSetSuppressScrollbarAnimations):
        (WKPageSetRubberBandsAtLeft):
        (WKPageSetRubberBandsAtRight):
        (WKPageSetRubberBandsAtTop):
        (WKPageSetRubberBandsAtBottom):
        (WKPageSetEnableVerticalRubberBanding):
        (WKPageSetEnableHorizontalRubberBanding):
        (WKPageSetBackgroundExtendsBeyondPage):
        (WKPageSetPaginationMode):
        (WKPageSetPaginationBehavesLikeColumns):
        (WKPageSetPageLength):
        (WKPageSetGapBetweenPages):
        (WKPageSetPaginationLineGridEnabled):
        (WKPageSetMaintainsInactiveSelection):
        (WKPageCenterSelectionInVisibleArea):
        (WKPageFindStringMatches):
        (WKPageGetImageForFindMatch):
        (WKPageSelectFindMatch):
        (WKPageFindString):
        (WKPageHideFindUI):
        (WKPageCountStringMatches):
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageFindClient):
        (WKPageSetPageFindMatchesClient):
        (WKPageSetPageInjectedBundleClient):
        (WKPageSetPageFormClient):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):
        (WKPageSetPageStateClient):
        (WKPageRunJavaScriptInMainFrame):
        (WKPageRunJavaScriptInMainFrame_b):
        (WKPageRenderTreeExternalRepresentation):
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        (WKPageGetBytecodeProfile):
        (WKPageGetSamplingProfilerOutput):
        (WKPageGetSelectionAsWebArchiveData):
        (WKPageGetContentsAsMHTMLData):
        (WKPageForceRepaint):
        (WKPageValidateCommand):
        (WKPageExecuteCommand):
        (WKPageComputePagesForPrinting):
        (WKPageDrawPagesToPDF):
        (WKPageBeginPrinting):
        (WKPageEndPrinting):
        (WKPageSetControlledByAutomation):
        (WKPageSetAllowsRemoteInspection):
        (WKPageSetMediaVolume):
        (WKPageSetMuted):
        (WKPageSetMediaCaptureEnabled):
        (WKPageDidAllowPointerLock):
        (WKPageClearUserMediaState):
        (WKPageDidDenyPointerLock):
        (WKPageSetMayStartMediaWhenInWindow):
        (WKPageSelectContextMenuItem):
        (WKPageSetScrollPinningBehavior):
        (WKPageSetAddsVisitedLinks):
        (WKPageClearWheelEventTestMonitor):
        (WKPageCallAfterNextPresentationUpdate):
        (WKPageSetIgnoresViewportScaleLimits):
        (WKPageGetApplicationManifest_b):
        (WKPageDumpPrivateClickMeasurement):
        (WKPageClearPrivateClickMeasurement):
        (WKPageSetPrivateClickMeasurementOverrideTimerForTesting):
        (WKPageMarkAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WKPageSimulateResourceLoadStatisticsSessionRestart):
        (WKPageSetPrivateClickMeasurementTokenPublicKeyURLForTesting):
        (WKPageSetPrivateClickMeasurementTokenSignatureURLForTesting):
        (WKPageSetPrivateClickMeasurementAttributionReportURLsForTesting):
        (WKPageMarkPrivateClickMeasurementsAsExpiredForTesting):
        (WKPageSetPCMFraudPreventionValuesForTesting):
        (WKPageSetMockCameraOrientation):
        (WKPageLoadedSubresourceDomains):
        (WKPageClearLoadedSubresourceDomains):
        (WKPageSetMediaCaptureReportingDelayForTesting):
        (WKPageDispatchActivityStateUpdateForTesting):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):
        (-[WKWebView loadHTMLString:baseURL:]):
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        (-[WKWebView startDownloadUsingRequest:completionHandler:]):
        (-[WKWebView resumeDownloadFromResumeData:completionHandler:]):
        (-[WKWebView goToBackForwardListItem:]):
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView stopLoading]):
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        (-[WKWebView evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView closeAllMediaPresentationsWithCompletionHandler:]):
        (-[WKWebView pauseAllMediaPlaybackWithCompletionHandler:]):
        (-[WKWebView setAllMediaPlaybackSuspended:completionHandler:]):
        (-[WKWebView requestMediaPlaybackStateWithCompletionHandler:]):
        (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
        (-[WKWebView setCameraCaptureState:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withSourceURL:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView setCustomUserAgent:]):
        (-[WKWebView setAllowsLinkPreview:]):
        (-[WKWebView setPageZoom:]):
        (-[WKWebView findString:withConfiguration:completionHandler:]):
        (-[WKWebView setMediaType:]):
        (-[WKWebView setInteractionState:]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView printOperationWithPrintInfo:]):
        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
        (-[WKWebView createWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView loadSimulatedRequest:response:responseData:]):
        (-[WKWebView loadSimulatedRequest:withResponse:responseData:]):
        (-[WKWebView loadSimulatedRequest:responseHTMLString:]):
        (-[WKWebView loadSimulatedRequest:withResponseHTMLString:]):
        (-[WKWebView loadFileRequest:allowingReadAccessToURL:]):
        (-[WKWebView _toggleStrikeThrough:]):
        (-[WKWebView _increaseListLevel:]):
        (-[WKWebView _decreaseListLevel:]):
        (-[WKWebView _changeListType:]):
        (-[WKWebView _setViewportSizeForCSSViewportUnits:]):
        (-[WKWebView _didEnableBrowserExtensions:]):
        (-[WKWebView _didDisableBrowserExtensions:]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _executeEditCommand:argument:completion:]):
        (-[WKWebView _startTextManipulationsWithConfiguration:completion:]):
        (-[WKWebView _completeTextManipulation:completion:]):
        (-[WKWebView _completeTextManipulationForItems:completion:]):
        (-[WKWebView _takeFindStringFromSelection:]):
        (-[WKWebView _updateMediaPlaybackControlsManager]):
        (-[WKWebView _togglePictureInPicture]):
        (-[WKWebView _closeAllMediaPresentations]):
        (-[WKWebView _stopMediaCapture]):
        (-[WKWebView _stopAllMediaPlayback]):
        (-[WKWebView _suspendAllMediaPlayback]):
        (-[WKWebView _resumeAllMediaPlayback]):
        (-[WKWebView _restoreAppHighlights:]):
        (-[WKWebView _restoreAndScrollToAppHighlight:]):
        (-[WKWebView _addAppHighlight]):
        (-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLs:]):
        (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]):
        (-[WKWebView _grantAccessToAssetServices]):
        (-[WKWebView _revokeAccessToAssetServices]):
        (-[WKWebView _switchFromStaticFontRegistryToUserFontRegistry]):
        (-[WKWebView _appBoundNavigationDataForDomain:completionHandler:]):
        (-[WKWebView _suspendPage:]):
        (-[WKWebView _resumePage:]):
        (-[WKWebView _setApplicationNameForUserAgent:]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _reloadExpiredOnly]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        (-[WKWebView _takePDFSnapshotWithConfiguration:completionHandler:]):
        (-[WKWebView _getPDFFirstPageSizeInFrame:completionHandler:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        (-[WKWebView _close]):
        (-[WKWebView _tryClose]):
        (-[WKWebView _insertAttachmentWithFilename:contentType:data:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:options:completion:]):
        (-[WKWebView _insertAttachmentWithFileWrapper:contentType:completion:]):
        (-[WKWebView _attachmentForIdentifier:]):
        (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]):
        (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]):
        (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:detailsWithLinks:completionHandler:]):
        (-[WKWebView _isJITEnabled:]):
        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
        (-[WKWebView _callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _evaluateJavaScript:withSourceURL:inFrame:inContentWorld:completionHandler:]):
        (-[WKWebView _updateWebpagePreferences:]):
        (-[WKWebView _notifyUserScripts]):
        (-[WKWebView _deferrableUserScriptsNeedNotification]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        (-[WKWebView _setAddsVisitedLinks:]):
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]):
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        (-[WKWebView _getContentsAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsOfAllFramesAsStringWithCompletionHandler:]):
        (-[WKWebView _getContentsAsAttributedStringWithCompletionHandler:]):
        (-[WKWebView _getApplicationManifestWithCompletionHandler:]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView _setPageZoomFactor:]):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _saveBackForwardSnapshotForItem:]):
        (-[WKWebView _clearServiceWorkerEntitlementOverride:]):
        (-[WKWebView _preconnectToServer:]):
        (-[WKWebView _setCanUseCredentialStorage:]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _setFixedLayoutSize:]):
        (-[WKWebView _setBackgroundExtendsBeyondPage:]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setCORSDisablingPatterns:]):
        (-[WKWebView _getProcessDisplayNameWithCompletionHandler:]):
        (-[WKWebView _setMinimumEffectiveDeviceWidth:]):
        (-[WKWebView _grantAccessToPreferenceService]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _setAllowsMediaDocumentInlinePlayback:]):
        (-[WKWebView _setMediaCaptureEnabled:]):
        (-[WKWebView _setPageMuted:]):
        (-[WKWebView _removeDataDetectedLinks:]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        (-[WKWebView _doAfterNextPresentationUpdateWithoutWaitingForPainting:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebPageProxy::suspend):
        (WebKit::WebPageProxy::resume):
        (WebKit::WebPageProxy::requestMediaPlaybackState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::suspend):
        (WebKit::WebPage::resume):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-05-11  Ben Nham  <nham@apple.com>

        Failing sandbox check for media permissions should not generate a violation report
        https://bugs.webkit.org/show_bug.cgi?id=225662

        Reviewed by Geoffrey Garen.

        We sandbox_check the UIProcess for camera and video permissions. But if the process doesn't
        have those permissions, sandbox_check fails and generates an expensive violation report that
        task_suspends the process. We need to suppress the reporting with SANDBOX_CHECK_NO_REPORT.

        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::checkSandboxRequirementForType):

2021-05-11  Alex Christensen  <achristensen@webkit.org>

        Add SPI to restrict networking to a set of hosts
        https://bugs.webkit.org/show_bug.cgi?id=225426
        <rdar://77571521>

        Reviewed by Tim Horton.

        * 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::allowedNetworkHosts const):
        (API::PageConfiguration::setAllowedNetworkHosts):
        (API::PageConfiguration::loadsFromNetwork const): Deleted.
        (API::PageConfiguration::setLoadsFromNetwork): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setLoadsFromNetwork:]):
        (-[WKWebViewConfiguration _loadsFromNetwork]):
        (-[WKWebViewConfiguration _setAllowedNetworkHosts:]):
        (-[WKWebViewConfiguration _allowedNetworkHosts]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):

2021-05-11  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Extend access to 'com.apple.print.normalizerd' when canvas drawing is done in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=225623
        <rdar://problem/77354349>

        Reviewed by Per Arne Vollan.

        We need to dynamically extend access to 'com.apple.print.normalizerd' when the GPU Process is not handling canvas drawing.
        WebKit needs this access to properly draw EPS images.

        Tested by fast/images/eps-as-image.html

        * UIProcess/WebPageProxy.cpp:
        (WebKit::gpuMachServices): Add 'com.apple.print.normalizerd' to set of required services.
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in: Remove 'com.apple.print.normalizerd' since it is
        not possible to use from the Web Authentication process.
        * WebProcess/com.apple.WebProcess.sb.in: Expect the extension to be dynamically extended on all releases.

2021-05-11  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Add _STAttributionDisplayName to macOS and iOS GPUProcess Info.plist
        https://bugs.webkit.org/show_bug.cgi?id=225626
        rdar://77019240

        Reviewed by Youenn Fablet.

        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-OSX.plist:
        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUService/Info-iOS.plist:

2021-05-11  Ada Chan  <ada.chan@apple.com>

        [WebXR] Return a default layer handle in XRDeviceProxy::createLayerProjection
        https://bugs.webkit.org/show_bug.cgi?id=225631

        Reviewed by Dean Jackson.

        * Shared/Cocoa/XRDeviceProxy.h:
        * Shared/Cocoa/XRDeviceProxy.mm:
        (WebKit::XRDeviceProxy::createLayerProjection):
        * UIProcess/Cocoa/PlatformXRCoordinator.h:
        (WebKit::PlatformXRCoordinator::defaultLayerHandle):
        * WebProcess/cocoa/PlatformXRSystemProxy.h:
        * WebProcess/cocoa/PlatformXRSystemProxy.mm:
        (WebKit::PlatformXRSystemProxy::createLayerProjection):

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Allow immediate action gestures to begin when force clicking text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225600
        <rdar://problem/77792365>

        Reviewed by Tim Horton.

        Adopt the new hit-test option. See WebCore/ChangeLog for more details.

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

2021-05-10  Sam Weinig  <weinig@apple.com>

        Use PixelBuffer rather than ImageData in platform/ code to fix layering violation
        https://bugs.webkit.org/show_bug.cgi?id=225584

        Reviewed by Darin Adler.

        Replace all uses of the DOM layer object WebCore::ImageData with the new platform
        layer WebCore::PixelBuffer, which fixes a layering violation WebCore and avoids
        unnecessary allocations / reference counting.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<Optional<T>>::encode):
        (IPC::ArgumentCoder<Optional<T>>::decode):
        Add templatized Encoder/Decoder to work with streaming encoder.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintRenderingResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintCompositedResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintPixelBufferToImageBuffer):
        (WebKit::RemoteGraphicsContextGL::paintImageDataToImageBuffer): Deleted.
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGL.messages.in:
        * GPUProcess/graphics/RemoteGraphicsContextGLFunctionsGenerated.h:
        (paintRenderingResultsToPixelBuffer):
        (paintRenderingResultsToImageData): Deleted.
        * GPUProcess/graphics/RemoteImageBuffer.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetPixelBufferHelper):
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetPixelBuffer):
        (WebKit::RemoteRenderingBackend::semaphoreForGetPixelBuffer):
        (WebKit::RemoteRenderingBackend::updateSharedMemoryAndSemaphoreForGetPixelBuffer):
        (WebKit::RemoteRenderingBackend::destroyGetPixelBufferSharedMemory):
        (WebKit::RemoteRenderingBackend::populateGetPixelBufferSharedMemory):
        (WebKit::RemoteRenderingBackend::decodeItem):
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetImageDataHelper): Deleted.
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetImageData): Deleted.
        (WebKit::RemoteRenderingBackend::semaphoreForGetImageData): Deleted.
        (WebKit::RemoteRenderingBackend::updateSharedMemoryAndSemaphoreForGetImageData): Deleted.
        (WebKit::RemoteRenderingBackend::destroyGetImageDataSharedMemory): Deleted.
        (WebKit::RemoteRenderingBackend::populateGetImageDataSharedMemory): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp:
        (WebKit::CGDisplayListImageBufferBackend::getPixelBuffer const):
        (WebKit::CGDisplayListImageBufferBackend::putPixelBuffer):
        (WebKit::CGDisplayListImageBufferBackend::getImageData const): Deleted.
        (WebKit::CGDisplayListImageBufferBackend::putImageData): Deleted.
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Ref<WebCore::ImageData>>::encode): Deleted.
        (IPC::ArgumentCoder<Ref<WebCore::ImageData>>::decode): Deleted.
        (IPC::ArgumentCoder<RefPtr<WebCore::ImageData>>::encode): Deleted.
        (IPC::ArgumentCoder<RefPtr<WebCore::ImageData>>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::getPixelBuffer const):
        (WebKit::ImageBufferShareableBitmapBackend::putPixelBuffer):
        (WebKit::ImageBufferShareableBitmapBackend::getImageData const): Deleted.
        (WebKit::ImageBufferShareableBitmapBackend::putImageData): Deleted.
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::paintRenderingResultsToCanvas):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:
        (WebKit::RemoteGraphicsContextGLProxy::paintRenderingResultsToPixelBuffer):
        (WebKit::RemoteGraphicsContextGLProxy::paintRenderingResultsToImageData): Deleted.
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::putPixelBuffer):
        (WebKit::RemoteImageBufferProxy::putImageData): Deleted.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetPixelBuffer):
        (WebKit::RemoteRenderingBackendProxy::waitForGetPixelBufferToComplete):
        (WebKit::RemoteRenderingBackendProxy::destroyGetPixelBufferSharedMemory):
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetImageData): Deleted.
        (WebKit::RemoteRenderingBackendProxy::waitForGetImageDataToComplete): Deleted.
        (WebKit::RemoteRenderingBackendProxy::destroyGetImageDataSharedMemory): Deleted.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::getPixelBuffer const):
        (WebKit::ImageBufferShareableIOSurfaceBackend::putPixelBuffer):
        (WebKit::ImageBufferShareableIOSurfaceBackend::getImageData const): Deleted.
        (WebKit::ImageBufferShareableIOSurfaceBackend::putImageData): Deleted.
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

2021-05-10  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Extend Network Process sandbox to access more Network Extension databases
        https://bugs.webkit.org/show_bug.cgi?id=225614
        <rdar://problem/77696566>

        Reviewed by Per Arne Vollan.

        We don't allow the Network Process to directly memory-map files used by the network extensions
        feature. We can improve memory performance by allowing the process to mmap these files, rather
        than forcing a series of XPC operations to build the same database in memory.

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

2021-05-10  Kate Cheney  <katherine_cheney@apple.com>

        Speculative revalidation requests not properly attributed as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=225613
        <rdar://problem/77664358>

        Reviewed by Brent Fulgham.

        Speculative revalidation requests make network connections and should
        be attributed as app-bound based on the initiating navigation.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::isAppBound const):
        (WebKit::NetworkCache::SubresourceInfo::setIsAppBound):
        (WebKit::NetworkCache::SubresourcesEntry::subresources):
        (WebKit::NetworkCache::SubresourcesEntry::subresources const): Deleted.
        Remove const qualifier for the SubresourcesEntry::subresources()
        function now that we need to store the app-bound value.

2021-05-10  Kate Cheney  <katherine_cheney@apple.com>

        Preflight requests not properly attributed as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=225596
        <rdar://problem/77664272>

        Reviewed by Brent Fulgham.

        Testing SPI to request load data to check if preflight requests
        were properly marked.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didLoadAppBoundRequest:]):
        (-[WKWebView _didLoadNonAppBoundRequest:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make WebCore::HitTestRequest::RequestType an enum class
        https://bugs.webkit.org/show_bug.cgi?id=225597

        Reviewed by Sam Weinig.

        See WebCore/ChangeLog for more details.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame hitTest:options:]):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest const):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::defaultHitTestRequestTypes):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::characterIndexForPointAsync):
        (WebKit::WebPage::updateWithImageExtractionResult):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rectForElementAtInteractionLocation const):
        (WebKit::rangeForPointInRootViewCoordinates):
        (WebKit::WebPage::setFocusedFrameBeforeSelectingTextAtLocation):
        (WebKit::isObscuredElement):
        (WebKit::selectionPositionInformation):
        (WebKit::textInteractionPositionInformation):
        (WebKit::WebPage::positionInformation):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        (WebKit::WebPage::lookupTextAtLocation):

2021-05-10  Chris Dumez  <cdumez@apple.com>

        [iOS] Pages with service workers do not suspend promptly
        https://bugs.webkit.org/show_bug.cgi?id=225598

        Reviewed by Youenn Fablet.

        WebProcessProxy::updateServiceWorkerProcessAssertion() was starting a foreground/background activity
        if there is a service worker in-process and if any of the client processes are foreground/background.
        The issue is that a common case is that one of the client process is the service worker process
        itself (since we run the service worker in-process whenever possible nowadays). As a result, it would
        create a process assertion cycle. We'd start a foreground activity due to the service worker but we
        would not release it when the view is no longer foreground, because the process would stay "foreground"
        due to the service worker process assertion.

        To address this, updateServiceWorkerProcessAssertion() now only takes process assertions if there
        are client processes other than the current process. This avoids the cycle and this is really the only
        case we need to make sure the service worker process doesn't suspend. In the case where the service
        worker and the client are in the same process, then the normal process assertions are sufficient.

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

2021-05-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the build with recent SDKs.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectMultiplePicker configurePresentation]):

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Add ObjC API similar to WKBundlePageCopyGroupIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=225477

        Reviewed by Chris Dumez.

        Once adopted this will allow us to remove WKWebProcessPlugInPageGroup

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroupInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _groupIdentifier]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2021-05-10  Antoine Quint  <graouts@webkit.org>

        Fix some unified build errors
        https://bugs.webkit.org/show_bug.cgi?id=225594

        Reviewed by Wenson Hsieh.

        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h:
        * UIProcess/ios/WKTextSelectionRect.mm:
        * UIProcess/mac/WKTextInputWindowController.mm:

2021-05-10  Youenn Fablet  <youenn@apple.com>

        Have IPC::Semaphore::wait return a state boolean
        https://bugs.webkit.org/show_bug.cgi?id=225587

        Reviewed by Alex Christensen.

        Semaphore::wait might return early, in particular if its sempahore is destroyed.
        To handle this case, return false in that case to allow specific handling by caller.
        Use return state in RemoteCaptureSampleManager::RemoteAudio::startThread as a way to stop the capture thread.
        Covered by existing tests.

        * Platform/IPC/IPCSemaphore.h:
        * Platform/IPC/darwin/IPCSemaphoreDarwin.cpp:
        (IPC::Semaphore::wait):
        * Platform/IPC/unix/IPCSemaphoreUnix.cpp:
        (IPC::Semaphore::wait):
        * Platform/IPC/win/IPCSemaphoreWin.cpp:
        (IPC::Semaphore::wait):
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::startThread):

2021-05-10  Aditya Keerthi  <akeerthi@apple.com>

        [iPadOS] Do not present custom input peripherals when switching back to a tab with a focused element
        https://bugs.webkit.org/show_bug.cgi?id=225541
        <rdar://problem/77537795>

        Reviewed by Wenson Hsieh.

        With the introduction of desktop-class browing on iPad, form control
        elements began to retain focus even after their input peripheral
        (popover, menu, etc.) was dismissed. This behavior matches macOS - when
        a <select> element is clicked, a menu is presented, and when a option
        is selected, the menu is dismissed but the element retains focus.

        Consequently, when a <select> menu is dismissed by choosing an option on
        an iPad with a hardware keyboard, the element retains focus. Now, when
        switching tabs and coming back to the tab with the focused <select>, an
        activity state update is triggered. Upon recognizing that there is a
        focused element, an ElementDidFocus message is sent to the UIProcess.

        In [WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:],
        the focus is given permission to present the input peripheral (menu)
        when the hardware keyboard is attached. This is necessary when necessary
        when focusing a text input, because the UCB needs to be displayed and
        text selection needs to be set up. However, the behavior is undesirable
        for elements that present a popover or a menu (select, color inputs, and
        date inputs), since the user is unexpectedly shown an input peripheral.
        Even worse, the user's scroll position will be changed to ensure the
        focused element is visible.

        To fix the undesirable behavior, and get closer to the macOS behavior,
        custom input peripherals should not be displayed when switching back
        to a tab with a focused element.

        Test: fast/forms/ios/focus-select-and-switch-tabs.html

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

        Only show the input peripheral if it is not a keyboard view.

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Remove WKBundlePageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=225471

        Reviewed by Darin Adler.

        Its last use was removed in rdar://60987265

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/APIInjectedBundleBundleClient.h:
        (API::InjectedBundle::Client::willDestroyPage):
        (API::InjectedBundle::Client::didInitializePageGroup): Deleted.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAsynchronousSpellCheckingEnabledForTesting):
        (WKBundleGetLiveDocumentURLsForTesting):
        (WKBundleSetUserStyleSheetLocationForTesting):
        (WKBundleAddUserScript): Deleted.
        (WKBundleAddUserStyleSheet): Deleted.
        (WKBundleRemoveUserScript): Deleted.
        (WKBundleRemoveUserStyleSheet): Deleted.
        (WKBundleRemoveUserScripts): Deleted.
        (WKBundleRemoveUserStyleSheets): Deleted.
        (WKBundleRemoveAllUserContent): Deleted.
        (WKBundleSetAsynchronousSpellCheckingEnabled): Deleted.
        (WKBundleGetLiveDocumentURLs): Deleted.
        (WKBundleSetUserStyleSheetLocation): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetPageGroup): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAsynchronousSpellCheckingEnabled):
        (WebKit::InjectedBundle::setUserStyleSheetLocation):
        (WebKit::InjectedBundle::liveDocumentURLs):
        (WebKit::InjectedBundle::didInitializePageGroup): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
        (WebKit::InjectedBundleClient::didInitializePageGroup): Deleted.
        * WebProcess/InjectedBundle/InjectedBundleClient.h:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::create):

2021-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add picker UI for <input type=date> and <input type=datetime-local>
        https://bugs.webkit.org/show_bug.cgi?id=224924

        Reviewed by Adrian Perez de Castro.

        Use a GtkPopover with a GtkCalendar.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetFocus): Only notify the web process about focus changes when shouldNotifyFocusEvents is true.
        (webkitWebViewBaseSetShouldNotifyFocusEvents): Set whether the web view should notify about focus changes to the
        web process.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/WebDateTimePickerGtk.cpp:
        (WebKit::WebDateTimePickerGtk::~WebDateTimePickerGtk): Call invalidate instead of endPicker.
        (WebKit::WebDateTimePickerGtk::invalidate): Destroy the popover and allow the web view to notify about focus
        events again.
        (WebKit::WebDateTimePickerGtk::endPicker): Invalidate and notify the parent.
        (WebKit::timeToString): Helper to convert the time portions of a DateComponents to a string.
        (WebKit::calendarDateToString): Helper to convert selected date to a string.
        (WebKit::WebDateTimePickerGtk::didChooseDate): Notify the WebPageProxy about the selected date.
        (WebKit::WebDateTimePickerGtk::showDateTimePicker): Create or update a GtkPopover with a calendar.
        (WebKit::WebDateTimePickerGtk::update): Update the calendar and current date.
        * UIProcess/gtk/WebDateTimePickerGtk.h:

2021-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use always async scrolling in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=225512

        Reviewed by Fujii Hironori.

        We currently use async scrolling only when the hardware acceleration policy is set for always, but not when
        entering accelerating compositing mode in ondemand policy. Since the GTK port still supports the non accelerated
        compositing mode we need to add and remove the scrolling tree when entering and leaving the accelerated
        compositing mode.

        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_set_hardware_acceleration_policy): Always enable async scrolling when accelerated compositing
        is enabled.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Ditto.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::~DrawingAreaCoordinatedGraphics): Remove the scrolling tree if the
        drawing area is destroyed in accelerated compositing mode.
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): Add the scrolling tree.
        (WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingMode): Remove the scrolling tree.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage): Do not add the scrolling tree from here for the GTK port.
        (WebKit::WebPage::close): Do not remove the scrolling tree from here for the GTK port.

2021-05-10  Youenn Fablet  <youenn@apple.com>

        Use IPC::Semaphore instead of sending an IPC message for every captured audio sample
        https://bugs.webkit.org/show_bug.cgi?id=225452

        Reviewed by Eric Carlson.

        Previously, we were sending an IPC message from UIProcess or GPUProcess to WebProcess for every microphone audio sample chunk.
        We are now using IPC::Semaphore to signal that a new chunk is to be processed.

        We no longer send the chunk timestamp. Instead, we reconstruct it from the number of previously processed samples.
        At audio storage change, we send the start time and we assume that there is continuous timing based on sample counts after that.
        That is why we recreate a new audio storage change anytime we need to reset or the configuration changes, which should not happen often in practice.

        We process fixed-size chunks on WebProcess side and signal it on GPUProcess/UIProcess side.
        This size is sent through IPC at audio storage change time and is the max of 128 samples (WebAudio quantum) and AudioSession preferred size.
        In case WebAudio is used, it should be 128 samples. In case WebAudio is not used, it should be 20 ms of audio data.

        Covered by existing tests and manually tested.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::start):
        (WebKit::UserMediaCaptureManagerProxy::SourceProxy::storageChanged):
        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
        (WebKit::RemoteCaptureSampleManager::audioStorageChanged):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::RemoteAudio):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::~RemoteAudio):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::stopThread):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::startThread):
        (WebKit::RemoteCaptureSampleManager::RemoteAudio::setStorage):
        * WebProcess/cocoa/RemoteCaptureSampleManager.h:
        * WebProcess/cocoa/RemoteCaptureSampleManager.messages.in:

2021-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should have the ability to send and receive shared memory
        https://bugs.webkit.org/show_bug.cgi?id=225576

        Reviewed by Wenson Hsieh.

        This patch adds the capability to send & receive shared memory for IPC testing purposes.
        It adds IPC.createSharedMemory which creates a JavaScript object representing a newly
        allocated IPC-sharable memory. It has readBytes and writeBytes methods. Both takes offset
        and the number of bytes to read / write. readBytes will return a new ArrayBuffer and
        writeBytes takes an ArrayBuffer or a typed array as the first argument.

        IPC.sendMessage and IPC.sendSyncMessage now supprts encoding this SharedMemory JavaScript
        object. It supports the type specific arguments of "protection" and "dataSize" in addition
        to the regular "value" property for the SharedMemory object.

        This patch also adds the support for sending Semaphore object over IPC created via
        IPC.createSemaphore, which was supposed to be added in r277199.

        Finally, this patch also exposes the VM page size via IPC.vmPageSize to facilitate
        the allocation of a sharable memory of an interesting size for testing purposes.

        Tests: TestWebKitAPI.IPCTestingAPI.CanReceiveSharedMemory
               TestWebKitAPI.IPCTestingAPI.CanCreateSharedMemory
               TestWebKitAPI.IPCTestingAPI.CanSendSemaphpre
               TestWebKitAPI.IPCTestingAPI.CanSendSharedMemory

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetImageData): Use uint32_t instead
        of size_t since the latter depends on the specific architecture (e.g. 32-bit vs 64-bit).
        (WebKit::RemoteRenderingBackend::updateSharedMemoryAndSemaphoreForGetImageData): Ditto.
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in: Ditto.
        * Platform/IPC/JSIPCBinding.h: Added a specialization for SharedMemory::IPCHandle.
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPCSemaphore::encode const): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::create): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::size): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::JSSharedMemory): Added.
        (WebKit::IPCTestingAPI::convertToUint64): Moved up here.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::signal): Fixed a typo.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::waitFor): Ditto.
        (WebKit::IPCTestingAPI::JSSharedMemory::createHandle): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::createJSWrapper): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::wrapperClass): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::unwrap): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::toWrapped): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::initialize): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::finalize): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::staticFunctions): Added.
        (WebKit::IPCTestingAPI::JSSharedMemory::readBytes): Added.
        (WebKit::IPCTestingAPI::arrayBufferDataFromValueRef): Extracted out of encodeTypedArray.
        (WebKit::IPCTestingAPI::JSSharedMemory::writeBytes): Added.
        (WebKit::IPCTestingAPI::JSIPC::staticFunctions): Added IPC.createSharedMemory.
        (WebKit::IPCTestingAPI::JSIPC::staticValues): Added IPC.vmPageSize.
        (WebKit::IPCTestingAPI::encodeTypedArray): 
        (WebKit::IPCTestingAPI::getObjectIdentifierFromProperty): Now uses convertToUint64.
        (WebKit::IPCTestingAPI::encodeSharedMemory): Added.
        (WebKit::IPCTestingAPI::encodeSemaphore): Added.
        (WebKit::IPCTestingAPI::encodeArgument): Added the support for encoding SharedMemory and
        Semaphore.
        (WebKit::IPCTestingAPI::JSIPC::createSharedMemory): Added.
        (WebKit::IPCTestingAPI::JSIPC::vmPageSize): Added.
        (IPC::jsValueForDecodedArgumentValue): Added. Creates a newly added SharedMemory JavaScript
        object for SharedMemory::IPCHandle. It also exposes dataSize and protection value.
        This decoder detects whether the shared memory is writable or not by attempting to map it
        as Protection::ReadWrite and falling back to Protection::ReadOnly if the former fails.

2021-05-09  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 6: Migrate ItemBufferWritingClient from ItemHandle to a const Variant&
        https://bugs.webkit.org/show_bug.cgi?id=224270

        Reviewed by Wenson Hsieh.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::encodeItemOutOfLineHelper):

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

        [GPUP] A small video element enters fullscreen with strange animations
        https://bugs.webkit.org/show_bug.cgi?id=225548

        Reviewed by Eric Carlson.

        Use `FloatRect` instead of `IntRect` to exchange video element location/size
        information between WebContent processes and the UI process to avoid information
        mismatch due to floating-point rounding.

        Deal with the video element resizing differently for two cases:
        1) Video is playing in the inline mode.
        2) Video is entering fullscreen/picture-in-picture.
        For the latter case, `-[WKVideoLayerRemote layoutSublayers]` will scale the layer
        with the same factor in both X and Y direction.

        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
        (WebKit::setVideoInlineSizeIfPossible):
        (WebKit::RemoteMediaPlayerProxy::setVideoInlineSizeFenced):

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

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::setVideoInlineSizeFenced):
        (WebKit::MediaPlayerPrivateRemote::inVideoFullscreenOrPictureInPicture const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
        (-[WKVideoLayerRemote layoutSublayers]):
        (-[WKVideoLayerRemote resolveBounds]):
        * WebProcess/cocoa/VideoFullscreenManager.mm:
        (WebKit::inlineVideoFrame):
        (WebKit::VideoFullscreenManager::requestUpdateInlineRect):

2021-05-08  Darin Adler  <darin@apple.com>

        Remove uses of the WTF::String::toInt family of functions from WebKit framework sources
        https://bugs.webkit.org/show_bug.cgi?id=225570

        Reviewed by Sam Weinig.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::readSizeFile): Use parseInteger<uint64_t>
        instead of charactersToUIntStrict. Also simplified the code a bit by
        reducing the mixing of integer types in the function.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions): Use parseInteger<unsigned>
        instead of String::toUIntStrict. Also use StringView::substring so we don't
        have to allocate a copy of a substring just to parse it.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getClientSDKVersion): Use
        parseInteger<uint32_t> instead of charactersToUIntStrict. Also let the
        StringView constructor take care of converting the const char*
        so we don't have to write explicit calls to std::strlen here.
        (WebKit::XPCServiceInitializerDelegate::getProcessIdentifier): Use
        parseInteger<uint64_t> instead of String::toUInt64Strict. Also pass the
        const char* as a StringView rather than converting it to a String so we
        don't have to allocate a copy of the string just to parse it.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::PluginVersion::parse): Use parseIntegerAllowingTrailingJunk<unsigned>
        instead of String::toUInt. Also use StringView::split instead of String::split
        so we don't have to allocate memory for all the substrings and a range-based
        for loop for simplicity.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (coreTextManipulationItemIdentifierFromString): Use -[NSString longLongValue]
        instead of String::toUInt64. There's no need to parse this unsigned because
        the values will fit in 63 bits just fine, and it's nice to use NSString
        directly rather than copying the string just to parse the integer in it.
        (coreTextManipulationTokenIdentifierFromString): Ditto.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer): Use parseIntegerAllowingTrailingJunk<unsigned>
        instead of String::toInt. The length can't be negative; it was not helpful
        to parse negative numbers before and this is a small bug fix, but in a code
        path that is probably not used for much of anything any more.

2021-05-08  Sam Weinig  <weinig@apple.com>

        Factor out pixel buffer from DOM specific ImageData class
        https://bugs.webkit.org/show_bug.cgi?id=225554

        Reviewed by Darin Adler.

        Update for ImageData::data() returning a reference.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::populateGetImageDataSharedMemory):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Ref<WebCore::ImageData>>::encode):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

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

        REGRESSION (r276797?): [ macOS/iOS ] TestWebKitAPI.URLSchemeHandler.Exceptions is flakey crashing
        https://bugs.webkit.org/show_bug.cgi?id=225373

        Reviewed by Sam Weinig.

        This patch fixes three problems related to the lifetime of WKURLSchemeTasks:

        1. There was an unneeded abstraction API::URLSchemeTask which wrapped a WebURLSchemeTask, which could have a different lifetime than its owner.
           This is especially bad since at least one was used on multiple threads.
        2. We weren't explicitly keeping a strong reference to the task given to the API client in startURLSchemeTask: and stopURLSchemeTask: which could
           cause all our internal maps to release their references to the task after the first call to didFailWithError and there was a test that did multiple
           calls to didFailWithError and verifies it throws an NSException the second time.
        3. We were keeping a HashSet of raw WebURLSchemeHandler pointers, then using each of them without keeping it alive.

        This is covered by at least the URLSchemeHandler.Exceptions API test which would crash in many exciting places before this but doesn't crash after this.

        * Sources.txt:
        * UIProcess/API/APIURLSchemeTask.cpp: Removed.
        * UIProcess/API/APIURLSchemeTask.h: Removed.
        * UIProcess/API/C/WKTestingSupport.cpp:
        (WKGetAPIURLSchemeTaskInstanceCount): Deleted.
        * UIProcess/API/C/WKTestingSupport.h:
        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (-[WKURLSchemeTaskImpl init]):
        (-[WKURLSchemeTaskImpl dealloc]):
        (-[WKURLSchemeTaskImpl request]):
        (-[WKURLSchemeTaskImpl _requestOnlyIfCached]):
        (-[WKURLSchemeTaskImpl _willPerformRedirection:newRequest:completionHandler:]):
        (-[WKURLSchemeTaskImpl didReceiveResponse:]):
        (-[WKURLSchemeTaskImpl didReceiveData:]):
        (-[WKURLSchemeTaskImpl didFinish]):
        (-[WKURLSchemeTaskImpl didFailWithError:]):
        (-[WKURLSchemeTaskImpl _didPerformRedirection:newRequest:]):
        (-[WKURLSchemeTaskImpl _frame]):
        * UIProcess/API/Cocoa/WKURLSchemeTaskInternal.h:
        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.h:
        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm:
        (WebKit::WebURLSchemeHandlerCocoa::platformStartTask):
        (WebKit::WebURLSchemeHandlerCocoa::platformStopTask):
        (WebKit::WebURLSchemeHandlerCocoa::platformTaskCompleted): Deleted.
        * UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.h:
        * UIProcess/Inspector/win/InspectorResourceURLSchemeHandler.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopAllURLSchemeTasks):
        * UIProcess/WebURLSchemeHandler.cpp:
        (WebKit::WebURLSchemeHandler::taskCompleted):
        * UIProcess/WebURLSchemeHandler.h:
        * UIProcess/WebURLSchemeTask.h:
        * WebKit.xcodeproj/project.pbxproj:

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

        [SOUP] Use the new libsoup network metrics API
        https://bugs.webkit.org/show_bug.cgi?id=225510

        Reviewed by Michael Catanzaro.

        Use the new API available in libsoup3. It provides more accurate information for time metrics and also size
        metrics that were missing.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::clearRequest):
        (WebKit::NetworkDataTaskSoup::resume):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidCompleteWithError):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):
        (WebKit::NetworkDataTaskSoup::wroteHeadersCallback):
        (WebKit::NetworkDataTaskSoup::wroteBodyCallback):
        (WebKit::NetworkDataTaskSoup::gotBodyCallback):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] [GPU] Silence warning about com.apple.audio.AudioComponentRegistrar in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=225547
        <rdar://problem/77334436>

        Reviewed by Per Arne Vollan.

        We block access to various media things (like 'com.apple.audio.AudioComponentRegistrar') when the GPU Process is being used.
        Some AudioToolbox code continues to try to connect even though we are not activating relevant parts of the audio subsystem.
        AudioToolbox doesn't care about this blocked connection when running in this mode, but they have not had a chance to modify
        the framework to avoid attempting to connect.

        To avoid spurious logging and telemetry, silence the sandbox violation when the GPU Process is active.

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

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [macOS] [GPU] Process is missing access to IOMobileFramebufferUserClient on Apple Silicon
        https://bugs.webkit.org/show_bug.cgi?id=225545
        <rdar://problem/77591664>

        Reviewed by Jer Noble.

        Apple Silicon GPU Process needs access to IOMobileFramebufferUserClient for certain types of media playback. We allow this
        on iOS, and in the WebContent process, but missed it in the GPU Process.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-05-07  James Savage  <james.savage@apple.com>

        Validate Swift async imports.
        https://bugs.webkit.org/show_bug.cgi?id=225134
        <rdar://73620237>

        Reviewed by Sam Weinig.

        Audit our imported Objective-C API for correct translations to Swift's
        upcoming concurrency feature. This mostly entails removing redundant
        words, tagging methods which Swift's heuristics missed, and in some
        cases disabling methods that do not follow Swift's async conventions.

        * Shared/API/Cocoa/WKFoundation.h: Because the Foundation macros used
        for Swift async won't exist in all SDKs, provide our own wrapper around
        them to avoid undefined macro errors.
        * SwiftOverlay/Configurations/WebKitSwiftOverlay.xcconfig: Passing these
        flags to older tools will result in errors, so only so conditionally.
        * SwiftOverlay/WebKitSwiftOverlay.xcodeproj/project.pbxproj: Added a
        new source file reference for generated sources. These will be copied
        from WebKitAdditions if available, or replaced with empty sources for
        compatibility.
        * UIProcess/API/Cocoa/NSAttributedString.h: Adopt new attributes to
        define an explicit Swift async name.
        * UIProcess/API/Cocoa/WKContentRuleListStore.h: Ditto.
        * UIProcess/API/Cocoa/WKDownloadDelegate.h: In this case I also apply
        NS_SWIFT_NAME as the "decisionHandler" argument would otherwise not
        import as async. Despite using a different macro, I'm just using
        NS_SWIFT_ASYNC_NAME to check for these changes as all these annotations
        should exist or not-exist at once.
        * UIProcess/API/Cocoa/WKHTTPCookieStore.h: Ditto.
        * UIProcess/API/Cocoa/WKNavigationDelegate.h: Ditto.
        * UIProcess/API/Cocoa/WKScriptMessageHandlerWithReply.h: Ditto.
        * UIProcess/API/Cocoa/WKUIDelegate.h: Ditto.
        * UIProcess/API/Cocoa/WKWebView.h: _Nullable_result is a new annotation
        which specifies that the result and error are not mutually exclusive,
        but rather than we can expect a nil result in cases where there are not
        an error. For the same reason as above, we only want to refer to this
        keyword conditionally.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h: Ditto.

2021-05-07  Tim Horton  <timothy_horton@apple.com>

        Add an experimental alternative display-list-based RemoteLayerBackingStore implementation
        https://bugs.webkit.org/show_bug.cgi?id=225508

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.cpp: Added.
        (WebKit::CGDisplayListImageBufferBackend::calculateMemoryCost):
        (WebKit::CGDisplayListImageBufferBackend::create):
        (WebKit::CGDisplayListImageBufferBackend::CGDisplayListImageBufferBackend):
        (WebKit::CGDisplayListImageBufferBackend::createImageBufferBackendHandle const):
        (WebKit::CGDisplayListImageBufferBackend::context const):
        (WebKit::CGDisplayListImageBufferBackend::backendSize const):
        (WebKit::CGDisplayListImageBufferBackend::bytesPerRow const):
        (WebKit::CGDisplayListImageBufferBackend::copyNativeImage const):
        (WebKit::CGDisplayListImageBufferBackend::toBGRAData const):
        (WebKit::CGDisplayListImageBufferBackend::getImageData const):
        (WebKit::CGDisplayListImageBufferBackend::putImageData):
        * Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h: Added.
        Add an ImageBuffer backend backed by a CG display list.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        Add a new RemoteLayerBackingStore type that uses CGDisplayListImageBufferBackend.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode const):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::supportsPartialRepaint):
        Disable partial repaint if using display-list-based backing store,
        because we don't currently have any way to mutate display lists.

        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        When applying a display-list-based backing store to a layer, we just
        pass the encodede data directly to the layer, and tell it to use the
        display list to render.

        * SourcesCocoa.txt:
        * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm:
        (WebKit::RemoteLayerTreeNode::createWithPlainLayer):
        (-[WKPlainRemoteLayer description]): Deleted.
        Move WKPlainRemoteLayer to RemoteLayerTreeLayers, and rename it to WKCompositingLayer.
        It will now back all WKCompositingViews.

        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.h: Added.
        * UIProcess/RemoteLayerTree/cocoa/RemoteLayerTreeLayers.mm: Added.
        (-[WKCompositingLayer description]):
        (-[WKCompositingLayer _setWKContentsDisplayList:]):
        (-[WKCompositingLayer _wkContentsDisplayList]):
        (-[WKCompositingLayer drawInContext:]):
        Make WKCompositingLayer replay the given display list in drawRect
        (just because we're currently missing API to actually directly pass
        the encoded display list data to CA).

        * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
        (+[WKCompositingView layerClass]):
        Use WKCompositingLayer as the layer class for all WKCompositingViews.

        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/ImageBufferBackendHandle.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateBackingStore):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h:
        (WebKit::RemoteLayerTreeContext::useCGDisplayListsForDOMRendering const):
        (WebKit::RemoteLayerTreeContext::setUseCGDisplayListsForDOMRendering):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
        Plumb the internal feature flag from WebPreferences to RemoteLayerTreeContext
        to PlatformCALayerRemote to RemoteLayerBackingStore; if the preference is
        on and the feature is available, we'll always prefer display-list backed
        surfaces over either of the bitmap types.

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Make AccessibilityReduceMotion test case work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=225244
        <rdar://problem/77589455>

        Reviewed by Per Arne Vollan.

        New tests for Accessibility-related features were added in Bug 215664, but only for macOS.
        We support these same features on iOS, and should have test coverage.

        Tested by AccessibilityReduceMotion.mm.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] [GPU] Silence warning about com.apple.fontservicesd
        https://bugs.webkit.org/show_bug.cgi?id=225520
        <rdar://problem/77536616>

        Reviewed by Per Arne Vollan.

        We silenced the warnings about blocked connections to 'com.apple.fontservicesd' in the WebContent process in Bug 220320. We should
        have done the same to the GPU Process to avoid spurious reports and telemetry.

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

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

        Unreviewed, reverting r277201.
        https://bugs.webkit.org/show_bug.cgi?id=225542

        Includes project file change.

        Reverted changeset:

        "[iOS] Make AccessibilityReduceMotion test case work on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=225244
        https://trac.webkit.org/changeset/277201

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Make AccessibilityReduceMotion test case work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=225244
        <rdar://problem/77589455>

        New tests for Accessibility-related features were added in Bug 215664, but only for macOS.
        We support these same features on iOS, and should have test coverage.

        Reviewed by Per Arne Vollan.

        Tested by AccessibilityReduceMotion.mm.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:

2021-05-07  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should have the ability to create and receive IPC::Semaphore
        https://bugs.webkit.org/show_bug.cgi?id=225537

        Reviewed by Wenson Hsieh.

        This patch adds the capability to create IPC::Semaphore for IPC testing purposes.
        It adds IPC.createSemaphore which creates a JavaScript object representing a semaphore
        with signal and waitFor methods like IPC::Semaphore but waitFor taking milliseconds
        to be consistent with other JavaScript APIs.

        This patch also adds the support for encoding RemoteRenderingBackendCreationParameters
        to facilitate creating a remote rendering backend during IPC testing.

        Tests: TestWebKitAPI.IPCTestingAPI.CanReceiveIPCSemaphore
               TestWebKitAPI.IPCTestingAPI.CanCreateIPCSemaphore

        * Platform/IPC/JSIPCBinding.cpp:
        (IPC::jsValueForDecodedArgumentValue): Takes r-value reference since IPC::Semaphore
        doesn't have a copy constructor.
        * Platform/IPC/JSIPCBinding.h:
        (IPC::jsValueForDecodedArgumentValue): Ditto. Added a specialization for IPC::Semaphore.
        (IPC::putJSValueForDecodeArgumentInArray):
        * WebProcess/WebPage/IPCTestingAPI.cpp:
        (WebKit::IPCTestingAPI::JSIPCSemaphore): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::create): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::exchange): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::JSIPCSemaphore): Added.
        (WebKit::IPCTestingAPI::createTypeError): Moved up.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::createJSWrapper): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::wrapperClass): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::unwrap): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::toWrapped): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::initialize): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::finalize): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::staticFunctions): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::signal): Added.
        (WebKit::IPCTestingAPI::JSIPCSemaphore::waitFor): Added.
        (WebKit::IPCTestingAPI::JSIPC::wrapperClass):
        (WebKit::IPCTestingAPI::JSIPC::staticFunctions): Added IPC.createSemaphore.
        (WebKit::IPCTestingAPI::getObjectIdentifierFromProperty): Added.
        (WebKit::IPCTestingAPI::encodeRemoteRenderingBackendCreationParameters): Added.
        (WebKit::IPCTestingAPI::encodeArgument): Added the support for encoding
        RemoteRenderingBackendCreationParameters as an IPC argument.
        (WebKit::IPCTestingAPI::JSIPC::createSemaphore): Added.
        (IPC::jsValueForDecodedArgumentValue): Defined the aforementioned specialization for
        IPC::Semaphore with IPCTestingAPI .

2021-05-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Set the -isSourceEditable property when presenting webpage translation popup
        https://bugs.webkit.org/show_bug.cgi?id=225515
        <rdar://problem/77658040>

        Reviewed by Tim Horton.

        See WebCore/ChangeLog for more details.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleContextMenuTranslation):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleContextMenuTranslation):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::handleContextMenuTranslation):
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::handleTranslation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleContextMenuTranslation):
        * WebProcess/WebPage/WebPage.h:

2021-05-07  Carlos Garnacho  <carlosg@gnome.org>

        [GTK4] Rewrite GTK gesture support to work for both 3.x and 4.x.
        https://bugs.webkit.org/show_bug.cgi?id=212324

        Reviewed by Carlos Garcia Campos.

        Rewrite the touch gesture handling to avoid GdkEvent as an exchange
        token, and not rely on the web view being able to hold and re-route
        these at whim. This makes touch and touchpad gestures work on GTK3
        and GTK4 in similar ways, and so that both work.

        For this, touch event propagation got some substantial changes, it
        used to work by first delivering the touch events to the web page,
        and manually feeding the returned+unhandled ones to gesture controllers.
        Now event delivery is delegated on GTK, and happens right away on
        gesture controllers, it is the WebkitWebViewBase which chooses to make
        them effective after the web page (maybe) handled the events. Gestures
        are reset whenever the web page is considered to be handling touch
        events.

        Also fix some buglets accumulated along the way, web view zoom conflicted
        with in-page zoom handling, and ViewGestureController page switching
        conflicted with press-drag-release emulation on the web page. These now
        work better and closer to GtkScrolledWindow behavior.

        No new tests, the GTK touch tests that should catch this were disabled
        in the past and need fixing. This patch will require manual testing.

        * PlatformGTK.cmake: Drop GTK4 conditionals around ViewGestureController
        * SourcesGTK.txt: Drop GestureController.cpp. Build ViewGestureController
        code files unconditionally.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent): Delegate handling on
        WebKitWebViewBase.
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Use platform
        independent struct to forward scroll to ViewGestureController.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSnapshot): Involve ViewGestureController in rendering.
        (webkitWebViewBaseButtonPressEvent):
        (webkitWebViewBaseButtonReleaseEvent):
        (webkitWebViewBaseButtonPressed):
        (webkitWebViewBaseButtonReleased):
        (webkitWebViewBaseMotionNotifyEvent): Ignore pointer-emulated events from
        touchscreens.
        (webkitWebViewBaseHandleWheelEvent):
        (webkitWebViewBaseScroll):  Use platform independent struct
        to forward scroll to ViewGestureController.
        (appendTouchEvent):
        (touchPointStateForEvents):
        (webkitWebViewBaseGetTouchPointsForEvent):
        (webkitWebViewBaseTouchEvent):
        Generalized to work on both GTK3 and GTK4.
        (webkitWebViewBaseZoomBegin):
        (webkitWebViewBaseZoomChanged):
        (webkitWebViewBaseTouchLongPress):
        (webkitWebViewBaseTouchPress):
        (webkitWebViewBaseTouchRelease):
        (webkitWebViewBaseTouchDragBegin):
        (webkitWebViewBaseTouchDragUpdate):
        (webkitWebViewBaseTouchDragEnd):
        (webkitWebViewBaseTouchDragCancel):
        (webkitWebViewBaseTouchSwipe): Newly added touch gesture implementation
        callbacks. Not delegated anymore on GestureController.
        (webkitWebViewBaseConstructed): Create touch gestures in the base view
        widget, let them handle events automatically instead of relying on
        manual event feeding via gtk_event_controller_handle_event(). Also add
        a GtkEventControllerLegacy to handle forwarding of raw touch events to
        the web page in GTK4.
        (webkitWebViewBaseSetEnableBackForwardNavigationGesture):
        (webkitWebViewBaseViewGestureController):
        (webkitWebViewBaseBeginBackSwipeForTesting):
        (webkitWebViewBaseCompleteBackSwipeForTesting):
        (webkitWebViewBaseWillSwapWebProcess):
        (webkitWebViewBaseDidExitWebProcess):
        (webkitWebViewBaseDidRelaunchWebProcess):
        (webkitWebViewBaseDidStartProvisionalLoadForMainFrame):
        (webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame):
        (webkitWebViewBaseDidFinishNavigation):
        (webkitWebViewBaseDidFailNavigation):
        (webkitWebViewBaseDidSameDocumentNavigationForMainFrame):
        (webkitWebViewBaseDidRestoreScrollPosition): Remove conditionals around
        ViewGestureController for GTK4.
        (webkitWebViewBasePageGrabbedTouch): New method to tag touch events
        altogether as handled by the web page, thus resetting any ongoing view-level
        gesture handling. This inversion is necessary as gesture controllers are now
        always fed input events parallel to web page touch event handling.
        (webkitWebViewBaseGestureController): Deleted.
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseEvent): Removed widget_class->event vfunc. Touchpad gesture
        event forwarding to event controllers is delegated on GTK.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/ViewGestureController.h:
        * UIProcess/gtk/GestureController.cpp: Removed. Gestures are implemented in
        the base view.
        * UIProcess/gtk/GestureController.h: Removed.
        * UIProcess/gtk/ViewGestureControllerGtk.cpp:
        (WebKit::isEventStop):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanStartSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanEndSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
        (WebKit::isTouchEvent):
        (WebKit::createScrollEvent):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::beginSimulatedSwipeInDirectionForTesting):
        (WebKit::ViewGestureController::completeSimulatedSwipeInDirectionForTesting): Declare
        PlatformGtkScrollData, and use it as "platform scroll event" for both GTK3 and GTK4.
        (WebKit::ViewGestureController::snapshot): New GTK4 specific method to render
        the page switching gesture action.

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

        Add WebRTC logging control in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=225346

        Reviewed by Eric Carlson.

        Implement setting of WebRTC log level using LibWebRTCCodecs and LibWebRTCCodecsProxy.
        This will help debugging issues with GPU-running webrtc codecs.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::toWebRTCVideoRotation):
        (WebKit::LibWebRTCCodecsProxy::setRTCLoggingLevel):
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionOnMainThread):
        (WebKit::LibWebRTCCodecs::setLoggingLevel):
        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::setLoggingLevel):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:

2021-05-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Safari sometimes hangs underneath `WebKit::UIDelegate::UIClient::createNewPage`
        https://bugs.webkit.org/show_bug.cgi?id=225481
        rdar://77565282

        Reviewed by Chris Dumez.

        Consider the scenario where a webpage programmatically opens a window in a new tab on iOS while the keyboard is
        visible. In certain configurations, Safari indirectly tells the `WKWebView` containing the original webpage to
        `-resignFirstResponder` and then `-becomeFirstResponder` again, while creating a new web view and shuffling
        around the view hierarchy under `-webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:`.

        Since the keyboard is up, this causes UIKit to ask for an autocorrection context via `-[WKContentView
        requestAutocorrectionContextWithCompletionHandler:]`, which blocks the main thread on a response from the web
        process. Of course, since we're handling synchronous IPC, the web process isn't capable of sending a response
        back to the UI process, so we deadlock until we exceed the IPC timeout, and then exit the call stack.

        Instead, it's possible in this case to recognize that we're already handling a synchronous IPC message, and any
        attempts to wait for a response will time out anyways. Instead of waiting for the entire timeout duration, we
        can fail eagerly to avoid hanging the process that is waiting.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Connection.h:

        Add a new counter variable, `m_inDispatchSyncMessageCount`, that is incremented and decremented while we're
        in the process of dispatching an incoming sync IPC message. If `m_inDispatchSyncMessageCount` is nonzero and
        we have a non-infinite IPC timeout duration, then we should fail sooner inside `Connection::waitForMessage`,
        instead of waiting to time out.

        Drive-by refactoring: while we're here, let's also move initialization for some of the members on `Connection`
        into the class declaration, instead of the constructor.

        (IPC::Connection::WTF_GUARDED_BY_LOCK):
        * Platform/IPC/Timeout.h:
        (IPC::Timeout::isInfinity const):
        * WebKit.xcodeproj/project.pbxproj:

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

        [iOS] Allow file-read* and file-write-data for /dev/null and /dev/zero
        https://bugs.webkit.org/show_bug.cgi?id=225482
        <rdar://problem/77503594>

        Reviewed by Per Arne Vollan.

        Revise sandbox to allow read and write-data access to /dev/null and /dev/zero.

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

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

        Retry asynchronously in WebProcessPool::getGPUProcessConnection() in case of failure
        https://bugs.webkit.org/show_bug.cgi?id=225486

        Reviewed by Alex Christensen.

        Retry asynchronously in WebProcessPool::getGPUProcessConnection(), similarly to what
        we do in WebsiteDataStore::getNetworkProcessConnection(). As a result, we no longer
        need to ref the WebProcessPool in the lambda and we avoid retrying unnecessarily
        when the WebProcessPool is getting destroyed.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection):

2021-05-06  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] Reduce MediaPlayer polling frequency when possible
        https://bugs.webkit.org/show_bug.cgi?id=225396
        <rdar://problem/77562643>

        Reviewed by Jer Noble.

        When the MediaPlayerPrivate supports the new "current time changed" callback, use it
        know when currentTime changes instead of polling at a fixed frequency. Current time
        changes much more frequently than the other state that needs to be pushed to the
        web process periodically so split current time out of the "cached state" struct
        and push it separately when it changes, which also allow us to reduce the polling
        frequency significantly.

        Some of the state we were updating every time the cached state timer fired only
        changes at known times, so reduce the number of things updated every time state 
        is pushed.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::getConfiguration): Set the timeChanged callback.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerNetworkStateChanged): Update cached 
        readyState and networkState since they aren't updated by updateCachedState.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged): Ditto.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDurationChanged): Update cached duration.
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCharacteristicChanged): Update hasAudio
        and hasVideo.
        (WebKit::RemoteMediaPlayerProxy::startUpdateCachedStateMessageTimer): Decrease the
        time frequency to 200ms when the player supports the time change callback. Decrease
        it to 250ms even when it doesn't because we interpolate time in the WP anyway.
        (WebKit::RemoteMediaPlayerProxy::currentTimeChanged): Send the time change.
        (WebKit::RemoteMediaPlayerProxy::updateCachedState): Send CurrentTimeChanged if
        the player doesn't support the new callback. Don't update properties that change
        at predictable times.
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::pause): Use m_cachedMediaTime and m_cachedMediaTimeQueryTime
        instead of m_cachedState.currentTime and m_cachedState.timestamp.
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const): Ditto.
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged): Ditto.
        (WebKit::MediaPlayerPrivateRemote::currentTimeChanged): Update time instance variables.
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::performTaskAtMediaTime): Use m_cachedMediaTime 
        and m_cachedMediaTimeQueryTime instead of m_cachedState.currentTime and m_cachedState.timestamp.
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:

        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const): Remove currentTime and timestamp.
        (WebKit::RemoteMediaPlayerState::decode): Ditto.

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

        Fix crash when WebsiteDataStore is destroyed with outstanding getNetworkProcessConnection request
        https://bugs.webkit.org/show_bug.cgi?id=225478
        <rdar://77576148>

        Reviewed by Chris Dumez.

        In WebsiteDataStore::getNetworkProcessConnection if we don't get a connection the first time, we terminate the network process
        and try again.  This greatly increases our success rate.  However, if we are cancelling the reply because of the destruction
        of the WebsiteDataStore, we will end up doing bad things with partially destroyed objects, which ends up crashing.
        In order to prevent this, use RunLoop::main.dispatch to retry on the next runloop iteration so that we will never be inside the
        stack of WebsiteDataStore::~WebsiteDataStore when retrying.  In that case, we will find that weakThis is null and send an empty
        reply.

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

2021-05-06  Sihui Liu  <sihui_liu@apple.com>

        Drop some unnecessary code in LocalStorageDatabase
        https://bugs.webkit.org/show_bug.cgi?id=225435

        Reviewed by Chris Dumez.

        No behavior change.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create): 
        (WebKit::LocalStorageDatabase::LocalStorageDatabase): Remove two paremeters that are no longer needed after 
        dropping code.
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::migrateItemTableIfNeeded): SQLiteTransaction() by default sets readOnly to false,
        and it will be rolled back for failure in ~SQLiteTransaction.
        (WebKit::LocalStorageDatabase::close):
        (WebKit::LocalStorageDatabase::tryToOpenDatabase): Deleted. Merged to openDatabase.
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::ensureDatabase const):

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

        Add sandbox extension flag to specify that path contains no symlinks
        https://bugs.webkit.org/show_bug.cgi?id=219428
        <rdar://problem/66551986>

        Reviewed by Brent Fulgham.

        In general, when SandboxExtension::createHandleWithoutResolvingPath is called, it is assumed that there are no symlinks
        in the provided path. Add a 'canonical' flag, which can be used by platform APIs to verify that this is the case. This
        patch also stops resolving symlinks with [NSString stringByResolvingSymlinksInPath] in favor of realpath, since realpath
        correcly replaces /var with /private/var, which [NSString stringByResolvingSymlinksInPath] does not.
       
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
        (WebKit::stringByResolvingSymlinksInPath):
        (WebKit::SandboxExtension::createHandleWithoutResolvingPath):
        * Shared/SandboxExtension.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::webProcessDataStoreParameters):

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

        [iOS] UI process hangs when showing a modal JavaScript dialog while focusing an input field
        https://bugs.webkit.org/show_bug.cgi?id=225409
        rdar://76792407

        Reviewed by Darin Adler, Chris Dumez and Tim Horton.

        Consider the scenario where an input field has a focus event handler that shows a modal JavaScript dialog (e.g.
        confirm, alert, prompt). We get the following sequence of events in this scenario:

        (WEB)   The text field is focused, and sends WebPageProxy::ElementDidFocus. A modal dialog is then triggered by
                script inside the focus event handler, sending a message like WebPageProxy::RunJavaScriptAlert.

        (UI)    The UI process receives WebPageProxy::ElementDidFocus, and calls `-reloadInputViews` while showing the
                keyboard. UIKit may then call back into `-requestAutocorrectionContextWithCompletionHandler:`, which
                triggers sync IPC back to the web process. While waiting to receive a response message, we receive and
                dispatch WebPageProxy::RunJavaScriptAlert.

        At this point, the UI process is still waiting for a HandleAutocorrectionContext response IPC message, but the
        web process is blocked on a response to the modal JavaScript dialog; since both processes are blocked on each
        other, we're now in deadlock.

        To mitigate this, we can preemptively send autocorrection context data right before we're about to synchronously
        block in the web process on a modal dialog. In the UI process, we use this autocorrection context object to
        immediately stop syncwaiting for a HandleAutocorrectionContext response. See below for more details.

        Test: fast/events/ios/show-modal-alert-during-focus.html

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::waitForMessage):

        Make a slight adjustment here so that `waitForMessage` bails if one of the messages we're dispatching underneath
        `SyncMessageState::dispatchMessages` is the message we happen to be waiting for anyways. In this case, it's
        necessary in order for the preemptive `WebPageProxy::HandleAutocorrectionContext` message sent by the web
        process to unblock the UI process, which is waiting for a `WebPageProxy::HandleAutocorrectionContext` response.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::runModalJavaScriptDialog):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runModalJavaScriptDialog):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):

        Wrap calls to `runJavaScript(Alert|Confirm|Prompt)` underneath a new page client method that takes a block,
        `runModalJavaScriptDialog`. See `-[WKContentView runModalJavaScriptDialog:]` below for more details.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::runModalJavaScriptDialog):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

        Avoid blocking on the web process if it's waiting on a modal JavaScript dialog anyways; just use the last
        autocorrection context we received from the web process (which we know must've been sent right before showing
        the modal dialog anyways).

        (-[WKContentView runModalJavaScriptDialog:]):

        In the case where we're in the process of presenting the keyboard (or UCB) on iOS after focusing an input field,
        avoid immediately allowing the client to show any modal UI until we're done managing keyboard logic in WebKit.
        Without this adjustment, we'll end up trying to present the modal JavaScript dialog in the middle of UIKit's
        call to `-requestAutocorrectionContextWithCompletionHandler:`, which then causes UIKit to throw an exception
        underneath keyboard code.

        (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::prepareToRunModalJavaScriptDialog):

        Add logic to preemptively compute and send `WebAutocorrectionContext` data to the UI process on iOS, in the case
        where we're about to show a modal JavaScript dialog and there is an editable focused element. While the modal
        dialog is shown, we'll use this information to immediately respond to UIKit's autocorrection context requests,
        instead of trying to block on responses from the web process.

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

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

        Streamline codec parsing, replacing uses of HashMap with SortedArrayMap
        https://bugs.webkit.org/show_bug.cgi?id=225368

        Reviewed by Sam Weinig.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        Removed unneeded include.
        * Shared/WebsiteData/WebsiteData.h: Ditto.

2021-05-06  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Compute proximity information while snapping
        https://bugs.webkit.org/show_bug.cgi?id=224326

        Reviewed by Simon Fraser.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<SnapOffset<float>>::encode): Add the snap area index to the encoded arguments.
        (ArgumentCoder<SnapOffset<float>>::decode): Add the snap area index to the decoded arguments.
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::encode): No longer encode ranges, but encode snap areas.
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::decode): Ditto for decode.
        * Shared/WebCoreArgumentCoders.cpp: Remove code dealing with scroll offset ranges.
        * Shared/WebCoreArgumentCoders.h: Ditto.
        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling const): Pass
        in viewport size to closestSnapOffset which is necessary for calculating proximity.
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
        (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Ditto.

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

        Remove network website data when a user clears an individual domain
        https://bugs.webkit.org/show_bug.cgi?id=225350
        <rdar://problem/76029480>

        Reviewed by Brent Fulgham.

        Convert parameters to Optional values now that we use the function
        for individual domains.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        We should check all possible website data entries and delete
        network domain data if any of them contain a domain.

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::removeNetworkWebsiteData):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::removeNetworkWebsiteData):

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

        Reduce sandbox telemetry
        https://bugs.webkit.org/show_bug.cgi?id=225417
        <rdar://77489628>

        Reviewed by Darin Adler.

        Remove sandbox telemetry which is no longer needed.

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

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: tie into existing TCADA/RLTT systems so that the value is kept in sync with painting
        https://bugs.webkit.org/show_bug.cgi?id=225405

        Reviewed by Tim Horton.

        Instead of sending an IPC to the UIProcess whenever the logic to determine the sampled page
        top color finishes, wait to dispatch the IPC until we're about to render (just like theme
        color and page extended background color). On macOS, this means the IPC is dispatched inside
        `TiledCoreAnimationDrawingArea::updateRendering`. On iOS, the `Color` is included as part of
        the `RemoteLayerTreeTransaction`.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::sampledPageTopColorChanged const): Renamed from `didSamplePageTopColor`.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sampledPageTopColorChanged): Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        (WebKit::WebPage::flushPendingSampledPageTopColorChange): Added.
        (WebKit::WebPage::didSamplePageTopColor): Deleted.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::sampledPageTopColor const): Added.
        (WebKit::RemoteLayerTreeTransaction::setSampledPageTopColor): Added.
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode const):
        (WebKit::RemoteLayerTreeTransaction::decode):

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sampledPageTopColorChanged): Renamed from `didSamplePageTopColor`.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

2021-05-05  Alex Christensen  <achristensen@webkit.org>

        Add WebKitAdditions stubs for new NetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=225406
        <rdar://77563372>

        Reviewed by Jer Noble.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didFinishCollectingMetrics:]):

2021-05-05  Dean Jackson  <dino@apple.com>

        Separated layers need to be configured
        https://bugs.webkit.org/show_bug.cgi?id=225378

        Reviewed by Tim Horton.

        Configure a layer as it becomes separated. The actual code will
        come from WebKitAdditions.

        * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
        (configureSeparatedLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):

2021-05-05  Tim Horton  <timothy_horton@apple.com>

        Add and adopt RemoteLayerBackingStore::Type (instead of "accelerates drawing" bit)
        https://bugs.webkit.org/show_bug.cgi?id=225384

        Reviewed by Anders Carlsson.

        No new tests, no behavior change, just refactoring.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::type const):
        (WebKit::RemoteLayerBackingStore::acceleratesDrawing const): Deleted.
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::encode const):
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::pixelFormat const):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
        (WebKit::nameForBackingStoreType):
        (WebKit::operator<<):
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateBackingStore):
        In preparation for adding another backing store type, refactor RemoteLayerBackingStore
        to have a type enum instead of an "accelerates drawing" bit.

2021-05-05  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Remove access to the unused 'nvram' system command
        https://bugs.webkit.org/show_bug.cgi?id=225370
        <rdar://problem/66583129>
        
        Reviewed by Per Arne Vollan.

        Add a 'deny' rule for nvram, since we don't use it and have no reason to access it.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebAuthn.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: take additional snapshots further down the page to see if the sampled top color is more than just a tiny strip
        https://bugs.webkit.org/show_bug.cgi?id=225323

        Reviewed by Beth Dakin.

        Add a `SampledPageTopColorMinHeight` setting that controls how far down the sampled page top
        color needs to extend in order for us to not bail. If the value > 0, we take an additional
        snapshot at (0, SampledPageTopColorMinHeight) and (width, SampledPageTopColorMinHeight),
        comparing each to the snapshot directly above (e.g. (0, SampledPageTopColorMinHeight) is
        compared to (0, 0)) using the `SampledPageTopColorMaxDifference`. Depending on the value, if
        the color across the top of the page is only a small strip, these extra snapshot comparisons
        will prevent a resulting color from being derived.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setSampledPageTopColorMinHeight:]): Added.
        (-[WKWebViewConfiguration _sampledPageTopColorMinHeight]): Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        Provide SPI to configure the `SampledPageTopColorMinHeight` preference when creating the `WKWebView`.

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

        REGRESSION (r276633): ASSERTION FAILED: !forbidMallocUseScopeCount || disableMallocRestrictionScopeCount
        https://bugs.webkit.org/show_bug.cgi?id=225374
        <rdar://problem/77533237>

        Reviewed by Chris Dumez.

        Disable memory allocation checks in speech recognition code path.
        No change of behavior.

        * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp:
        (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::storageChanged):

2021-05-05  Jean-Yves Avenard  <jya@apple.com>

        imported/w3c/web-platform-tests/media-source/mediasource-activesourcebuffers.html is a flakey
        https://bugs.webkit.org/show_bug.cgi?id=225386
        rdar://74704447

        Reviewed by Eric Carlson.

        When enabling/disabling a track, the web content process would send a message to the GPU process which in turn
        would send a message back to the content process, notifying that the track configuration had changed, that would
        then enable/disable again the track.
        If the content process in between those IPC messages had modified the track (such as via JS call), it was
        possible for the track status to get lost once the GPU message above got actioned.

        Having the GPU process notify that a track configuration got changed when it was originally triggered by the
        content process is unnecessary. We modify the RemoteAudioTrack and RemoteVideoTrack so that if the change came
        from the web process, the GPU process doesn't send a message back with information that could already be obsolete.

        No new tests. Fix an assertion failure in tests.

        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
        (WebKit::RemoteAudioTrackProxy::enabledChanged):
        * GPUProcess/media/RemoteAudioTrackProxy.h:
        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
        (WebKit::RemoteVideoTrackProxy::selectedChanged):
        * GPUProcess/media/RemoteVideoTrackProxy.h:

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

        Dynamically pass capture sandbox extensions to GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=225319

        Reviewed by Eric Carlson.

        Make sure to send the sandbox extensions for all WKWebView applications.
        We do so once we are ready to start capture since TCC access should have been granted at that point.
        Manually tested.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        (WebKit::GPUProcess::updateSandboxAccess):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/GPUProcess.messages.in:
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):
        (WebKit::GPUProcessProxy::updateSandboxAccess):
        (WebKit::GPUProcessProxy::updateCaptureAccess):
        (WebKit::isSafari): Deleted.
        (WebKit::shouldCreateCameraSandboxExtension): Deleted.
        (WebKit::shouldCreateMicrophoneSandboxExtension): Deleted.
        * UIProcess/GPU/GPUProcessProxy.h:

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

        [GPUP] Implement SourceBufferPrivateRemote::bufferFull()
        https://bugs.webkit.org/show_bug.cgi?id=224139

        Reviewed by Jer Noble.

        Modify two IPC messages to implement `SourceBufferPrivateRemote::bufferFull()`.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::evictCodedFrames):
        (WebKit::RemoteSourceBufferProxy::reenqueueMediaIfNeeded):
        * GPUProcess/media/RemoteSourceBufferProxy.h:
        * GPUProcess/media/RemoteSourceBufferProxy.messages.in:

        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::evictCodedFrames):
        (WebKit::SourceBufferPrivateRemote::reenqueueMediaIfNeeded):

2021-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Find a way to validate source_secret_token and source_secret_token_signature
        https://bugs.webkit.org/show_bug.cgi?id=224321
        <rdar://problem/76695542>

        Reviewed by John Wilander.

        Covered by exisiting tests.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        Reverts r236878.

2021-05-04  Jer Noble  <jer.noble@apple.com>

        [Media in GPU Process] Move AudioSessionRoutingArbitratorProxy to the GPU process
        https://bugs.webkit.org/show_bug.cgi?id=217535
        <rdar://problem/70152548>

        Reviewed by Eric Carlson.

        Add a new, local-only object which can aggregate changes to the audio routing.
        The UIProcess version of this object spans a process boundary, but this new
        object can operate locally without an XPC communication channel. As part of this
        change, the "SharedArbitrator" in AudioSessionRoutingArbitratorProxyCocoa has been
        moved into WebCore to be used both there and in this new object.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::didClose):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/mac/LocalAudioSessionRoutingArbitrator.cpp: Added.
        (WebKit::LocalAudioSessionRoutingArbitrator::create):
        (WebKit::LocalAudioSessionRoutingArbitrator::LocalAudioSessionRoutingArbitrator):
        (WebKit::LocalAudioSessionRoutingArbitrator::~LocalAudioSessionRoutingArbitrator):
        (WebKit::LocalAudioSessionRoutingArbitrator::processDidTerminate):
        (WebKit::LocalAudioSessionRoutingArbitrator::beginRoutingArbitrationWithCategory):
        (WebKit::LocalAudioSessionRoutingArbitrator::leaveRoutingAbritration):
        * GPUProcess/mac/LocalAudioSessionRoutingArbitrator.h:
        * SourcesCocoa.txt:
        * UIProcess/Media/AudioSessionRoutingArbitratorProxy.h:
        * UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm:
        (WebKit::AudioSessionRoutingArbitratorProxy::AudioSessionRoutingArbitratorProxy):
        (WebKit::AudioSessionRoutingArbitratorProxy::processDidTerminate):
        (WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory):
        (WebKit::AudioSessionRoutingArbitratorProxy::endRoutingArbitration):
        (): Deleted.
        (WebKit::SharedArbitrator::sharedInstance): Deleted.
        (WebKit::SharedArbitrator::isInRoutingArbitrationForArbitrator): Deleted.
        (WebKit::SharedArbitrator::beginRoutingArbitrationForArbitrator): Deleted.
        (WebKit::SharedArbitrator::endRoutingArbitrationForArbitrator): Deleted.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::setCategory):

2021-05-04  Kate Cheney  <katherine_cheney@apple.com>

        Remove internal NetworkSessionCocoa additions
        https://bugs.webkit.org/show_bug.cgi?id=225365
        <rdar://problem/75693914>

        Reviewed by Per Arne Vollan.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):

2021-05-04  Chris Dumez  <cdumez@apple.com>

        Blob contentType with charset renders html as plain text
        https://bugs.webkit.org/show_bug.cgi?id=225226

        Reviewed by Alex Christensen.

        Our code would use the Blob's Content-Type (media type) as a MIME type internally. As a result, if the Blob's
        media type would contain anything besides the MIME type (e.g. a charget), then it would lead to failures. 

        * NetworkProcess/NetworkDataTaskBlob.cpp:
        (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse):

2021-05-04  Alex Christensen  <achristensen@webkit.org>

        localStorage changes aren't reflected between WKWebViews using WKWebViewConfiguration._groupIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=225344
        <rdar://77496721>

        Reviewed by Brady Eidson.

        When we switched from using _pageGroup to _groupIdentifier, we also broke localStorage by making a new pageGroupID for each WKWebView.
        This is the low-risk solution to this problem that remembers what pageGroupID we used for this same identifier, creating the effect of
        using the same StorageNamespaceIdentifier for each _groupIdentifier like we did when we used _pageGroup.
        See the comment in StorageAreaMap::dispatchLocalStorageEvent.

        The higher-risk solution that needs to be done but probably shouldn't be merged to a branch at this point is to remove StorageNamespaceIdentifier.
        I plan to do that in a follow-up patch.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::pageGroupData):

2021-05-04  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Allow HTMLMediaElement preload > "metadata" on iPad by default
        https://bugs.webkit.org/show_bug.cgi?id=223802

        Reviewed by Eric Carlson.

        Align default iPad WebKit behavior for media element preload with Mac WebKit behavior.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):

2021-05-04  Alex Christensen  <achristensen@webkit.org>

        Don't iterate NetworkProcessProxy::m_websiteDataStores
        https://bugs.webkit.org/show_bug.cgi?id=225337
        <rdar://77233103>

        Reviewed by Geoffrey Garen.

        There is evidence that this collection is mutated while iterating, and there are a lot of ways that might happen.
        Instead, keep a Vector<Ref<WebsiteDataStore>>.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
        * UIProcess/Network/NetworkProcessProxyCocoa.mm:
        (WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const):

2021-05-04  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] Use MonotonicTime for elapsed time
        https://bugs.webkit.org/show_bug.cgi?id=225329
        <rdar://problem/77472811>

        Reviewed by Simon Fraser.

        No new tests, no change of behavior.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlaybackStateChanged):
        (WebKit::RemoteMediaPlayerProxy::updateCachedState):
        (WebKit::RemoteMediaPlayerProxy::performTaskAtMediaTime):
        (WebKit::RemoteMediaPlayerProxy::setVideoPlaybackMetricsUpdateInterval):
        (WebKit::RemoteMediaPlayerProxy::maybeUpdateCachedVideoMetrics):
        (WebKit::RemoteMediaPlayerProxy::updateCachedVideoMetrics):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::videoPlaybackQualityMetrics):
        (WebKit::MediaPlayerPrivateRemote::performTaskAtMediaTime):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const):
        (WebKit::RemoteMediaPlayerState::decode):

2021-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        REGRESSION: [ iOS ] 11 http/wpt/webauthn/ tests are crashing
        https://bugs.webkit.org/show_bug.cgi?id=225225
        rdar://77074618

        Reviewed by Brent Fulgham.

        Covered by exisiting tests.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::AuthenticatorManager::runPresenter):
        (WebKit::AuthenticatorManager::runPresenterInternal):
        * UIProcess/WebAuthentication/AuthenticatorManager.h:
        * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.h:
        Disables the modern UI in the mock testing environment.

2021-05-04  Chris Dumez  <cdumez@apple.com>

        [iOS] Use async API to take RunningBoard assertions
        https://bugs.webkit.org/show_bug.cgi?id=225324
        <rdar://76972252>

        Reviewed by Geoffrey Garen.

        Use async [RBSAssertion acquireWithInvalidationHandler:] API to take process assertions
        instead of the synchronous [RBSAssertion acquireWithError:] API. This avoids risking
        hanging the main thread for too long.

        Note that [RBSAssertion isValid] returns false until the assertion is taken so I am
        using our own "isValid" boolean to indicate if the RBSAssertion was invalidated or
        or not. We use this flag to decide if we need to take the assertion again. We wouldn't
        want to re-take the assertion simply because it is still in the process of being
        acquired.

        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::isValid const): Deleted.
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::isValid const):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager assertion:didInvalidateWithError:]):
        (-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAssertion::processAssertionWasInvalidated):
        (-[WKProcessAssertionBackgroundTaskManager _hasBackgroundTask]): Deleted.
        (-[WKRBSAssertionDelegate dealloc]): Deleted.
        (-[WKRBSAssertionDelegate assertionWillInvalidate:]): Deleted.
        (-[WKRBSAssertionDelegate assertion:didInvalidateWithError:]): Deleted.
        (WebKit::ProcessAssertion::isValid const): Deleted.

2021-05-04  Jim Mason  <jmason@ibinx.com>

        [GTK] segmentation fault in WebKit::IconDatabase::loadIconForPageURL
        https://bugs.webkit.org/show_bug.cgi?id=225279

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/glib/IconDatabase.cpp:
        (WebKit::IconDatabase::loadIconForPageURL):
        (WebKit::IconDatabase::setIconForPageURL):

2021-05-04  Youenn Fablet  <youenn@apple.com>

        Use OptionSet for MediaProducer::MediaStateFlags
        https://bugs.webkit.org/show_bug.cgi?id=225227

        Reviewed by Eric Carlson.

        Update code according safer MediaProducer::MediaStateFlags type.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView cameraCaptureState]):
        (-[WKWebView microphoneCaptureState]):
        * UIProcess/Cocoa/MediaUtilities.mm:
        (WebKit::toWKMediaCaptureStateDeprecated):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::captureStateChanged):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        (WebKit::WebPageProxy::setMuted):
        (WebKit::WebPageProxy::updatePlayingMediaDidChange):
        (WebKit::WebPageProxy::updateReportedMediaCaptureState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::mediaState const):

2021-05-03  Megan Gardner  <megan_gardner@apple.com>

        Allow AppHighlight visibility to be toggled
        https://bugs.webkit.org/show_bug.cgi?id=225276

        Reviewed by Wenson Hsieh.

        Add supporting infrastructure to allow highlights to be turned on and off.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::restoreAppHighlightsAndScrollToIndex):
        (WebKit::WebPageProxy::setAppHighlightsActive):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView targetForAction:withSender:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setAppHighlightsActive):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-05-03  Tim Horton  <timothy_horton@apple.com>

        Use ImageBuffer scaling in RemoteLayerBackingStore, rather than handling scale in the class
        https://bugs.webkit.org/show_bug.cgi?id=225081

        Reviewed by Said Abou-Hallawa.

        No new tests, no behavior change.

        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::backingStoreSize const): Deleted.
        Make use of ImageBuffer's scaling support instead of scaling ourselves.
        This will be helpful for future patches where the backing store's ImageBuffer
        needs to know the presentation size, not just the backing store size.
        We also do the back->front copy in scaled space now, which simplifies the code a bit.
        
        We have to explicitly specify the source and destination rect for the copy, because
        GraphicsContext::drawImageBuffer's implicit source rect is computed using
        ImageBuffer::logicalSize(), which is a *truncated* IntSize.

        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::ImageBufferShareableBitmapBackend):
        Apply the device scale factor to the GraphicsContext that ImageBufferShareableBitmapBackend
        adopts from ShareableBitmap. We don't need to flip because ShareableBitmap does that,
        but it doesn't know anything about scales at all.

2021-05-03  Patrick Angle  <pangle@apple.com>

        Web Inspector: [Cocoa] Grid overlay area names aren't centered within areas.
        https://bugs.webkit.org/show_bug.cgi?id=225176

        Reviewed by Devin Rousso.

        Grid area names were changed to be centered in their area in r275519. On iOS, the label was changed to treat the
        provided point as the center, but the label was still being anchored in the top-left corner. This patch corrects
        that by using the center of the area as the anchor point for the label.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView _createGridOverlayLayer:scale:]):

2021-05-03  Zhenchao Li  <zhenchao_li@apple.com>

        Add macOS Safari sandbox exception for com.apple.CFNetwork preferences
        https://bugs.webkit.org/show_bug.cgi?id=225184
        <rdar://69305108>

        Reviewed by Per Arne Vollan

        rdar://69305108 Add macOS Safari sandbox exception for com.apple.CFNetwork preferences

        * Source/WebKit/NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2021-05-03  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Grouped <select> options should appear inline in the menu
        https://bugs.webkit.org/show_bug.cgi?id=225314
        <rdar://problem/76785797>

        Reviewed by Wenson Hsieh.

        Currently, <select> options within an <optgroup> element are presented
        within an expandable/collapsible submenu. However, to better match the
        visual style across the rest of the system, the grouped options should
        appear inline in the root menu, and groups should be separated by a
        visual separator.

        Covered by existing tests. A testing-only method was updated to reflect
        the changes.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker createMenu]):

        Used UIMenuOptionsDisplayInline to present submenus inline in the root
        menu. This option separates submenus using a visual separator.

        Since inline submenus do not support a title, and <optgroup> elements
        can be labeled, the group title is displayed as a disabled action at
        the top of the submenu.

        Removed logic to promote the grouped submenu to the root menu in the
        case where only one submenu contains all options, since the submenu
        now appears inline, and an additional tap is no longer necessary to
        view the options.

        (-[WKSelectPicker actionForOptionIndex:]):

        Updated this testing-only method to account for the potential existence
        of an additional action representing a group title.

2021-05-03  Devin Rousso  <drousso@apple.com>

        [macCatalyst] "Enter Full Screen" button in media controls disappears
        https://bugs.webkit.org/show_bug.cgi?id=225210
        <rdar://problem/77010150>

        Reviewed by Eric Carlson.

        In order for the "Enter Full Screen" media controls button to stay visible the `<video>`
        must return `true` for `HTMLMediaElement::webkitSupportsFullscreen`, which calls into
       `MediaPlayerPrivate::supportsFullscreen`. On macOS and iOS, this will always return `true`
        because of `ENABLE(FULLSCREEN_API)`, but on macCatalyst that's not enabled, so we instead
        use `DeprecatedGlobalSettings::avKitEnabled`, but this is only set in the WebProcess (and
        WK1). With the GPUProcess enabled, this value is not set, so the `RemoteMediaPlayerProxy`
        will instead get `false`.

        This patch removes `DeprecatedGlobalSettings::avKitEnabled` since it's enabled on WK1 and
        non-GPUProcess WK2, and the related iOS-only SPI appears to not be used anywhere internally,
        instead having callsites just check `HAVE(AVKIT)`.

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

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

2021-05-03  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Crash when tapping fields on cycle.travel
        https://bugs.webkit.org/show_bug.cgi?id=225259
        <rdar://problem/77386417>

        Reviewed by Wenson Hsieh.

        The From/To fields on cycle.travel have a click handler that presents
        a popover. The popover is presented by changing its display property
        from "none" to "block", and contains an input element with the "autofocus"
        attribute. After changing the popover element's display property, the
        page focuses another element by calling focus().

        In WebKit, focusing an element sends an IPC message from the WebProcess
        to the UIProcess, so that UIProcess knows of the focused element and
        can present the necessary UI. All relevant information about the element
        is encoded in a FocusedElementInformation struct, which is populated by
        WebPage::getFocusedElementInformation.

        Prior to populating the FocusedElementInformation,
        getFocusedElementInformation performs a layout if needed,
        so that the information sent to the UIProcess is up-to-date. In this
        instance, a layout is needed after the popover element's display
        property is changed. Then, since the page immediately focuses another
        element after the display change, WebKit calls
        getFocusedElementInformation prior to the layout being performed.
        getFocusedElementInformation then sees that a layout is needed, and
        triggers the pending layout.

        Now, since since the popover contains an element with "autofocus",
        another element is focused as a post-layout task. This means that the
        layout triggered by getFocusedElementInformation changes the focused
        element. r256401 added an early return in this case, to prevent a null
        pointer deref.

        An early return in getFocusedElementInformation leaves the passed-in
        FocusedElementInformation in an inconsistent state. In particular,
        the FocusedElementInformation's elementContext is left with invalid
        identifiers. Currently, all callers of getFocusedElementInformation do
        not check whether the information is in a valid state. Consequently,
        the caller (in this case, WebPage::elementDidFocus) proceeds to send
        an IPC message with the FocusedElementInformation as one of the
        arguments. Then, a release assert is hit as sending IPC messages with
        invalid arguments is unsafe.

        To fix, make getFocusedElementInformation return an optional
        FocusedElementInformation, rather than populating a parameter that
        could be left in an invalid state. Then, any early returns can return
        WTF::nullopt, to signify that we were unable to generate a valid
        FocusedElementInformation. Finally, whenever the method returns
        nullopt, we do not send the IPC message (or in another case, send a
        message with nullopt).

        Test: fast/forms/focus-change-after-layout-update-during-focus-crash.html

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView updateCurrentFocusedElementInformation:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestFocusedElementInformation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::elementDidFocus):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestFocusedElementInformation):
        (WebKit::WebPage::focusedElementInformation):

2021-05-03  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Properly reset WebKitWebView's responsiveness flag
        https://bugs.webkit.org/show_bug.cgi?id=225291

        Reviewed by Alicia Boya Garcia.

        Reset the web process responsiveness flag whenever the web process is terminated.

        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewWebProcessTerminated):
        (webkit_web_view_terminate_web_process):

2021-05-03  Youenn Fablet  <youenn@apple.com>

        Use OptionSet for MediaProducer::MutedStateFlags
        https://bugs.webkit.org/show_bug.cgi?id=224550
        <rdar://problem/76960294>

        Reviewed by Eric Carlson.

        Update to use new OptionSet MediaProducer::MutedStateFlags.
        Fix a potential bug in case the page is video capture muted, covered by updated API test.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMuted):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
        (-[WKWebView setCameraCaptureState:completionHandler:]):
        (-[WKWebView _setPageMuted:]):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_set_is_muted):
        * UIProcess/Cocoa/MediaUtilities.mm:
        (WebKit::toWKMediaMutedState):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityState):
        * UIProcess/WebPageProxy.h:

2021-05-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        IPC::Semaphore operations ASSERT when the semaphore has been destroyed
        https://bugs.webkit.org/show_bug.cgi?id=225142
        <rdar://problem/76178000>

        Reviewed by Chris Dumez.

        Add KERN_TERMINATED to the expected return values of semaphore_{signal,wait,timedwait} calls.

        * Platform/IPC/darwin/IPCSemaphoreDarwin.cpp:
        (IPC::Semaphore::signal):
        (IPC::Semaphore::wait):
        (IPC::Semaphore::waitFor):

2021-04-30  Darin Adler  <darin@apple.com>

        Use SortedArrayMap in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=225251

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkLoad.cpp: Removed unneeded includes.
        * NetworkProcess/NetworkResourceLoadMap.h: Ditto.
        * Shared/SharedStringHashStore.h: Ditto.
        * UIProcess/API/APIPageConfiguration.h: Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm: Ditto.
        * UIProcess/API/Cocoa/_WKInspector.mm: Ditto.
        * UIProcess/Automation/SimulatedInputDispatcher.h: Ditto.
        * UIProcess/Inspector/WebInspectorUIProxy.cpp: Ditto.
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm: Ditto.
        * UIProcess/WebPageGroup.h: Ditto.
        * UIProcess/WebPasteboardProxy.h: Ditto.
        * UIProcess/WebPreferences.h: Ditto.
        * WebProcess/Geolocation/WebGeolocationManager.h: Ditto.
        * WebProcess/WebPage/WebBackForwardListProxy.h: Ditto.

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        App highlight UI should be disabled when selecting text in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225260
        rdar://77359313

        Reviewed by Tim Horton.

        Add a bit to `EditorState` to indicate when a ranged selection is inside an image overlay.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode const):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView shouldAllowAppHighlightCreation]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView targetForAction:withSender:]):

        Make `-targetForAction:withSender:` return `self` only if we have a ranged selection that is not inside an image
        overlay. Interestingly, UIKit doesn't seem to consult `-canPerformAction:withSender:` for actions that are added
        through `-[UIMenuController setMenuItems:]`, so we add the check here instead of inside `-canPerformAction:`
        above.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):

        Set the new bit here. Note that this (importantly) doesn't trigger layout, because `VisibleSelection::range`
        just returns a (potentially uncanonicalized) `SimpleRange`. For the purposes of checking whether the selection
        is inside an image overlay, this is sufficient.

2021-04-30  Eric Carlson  <eric.carlson@apple.com>

        [GPUP] Poll videoPlaybackQualityMetrics at the frequency is it accessed by script
        https://bugs.webkit.org/show_bug.cgi?id=225245
        rdar://77159589

        Reviewed by Jer Noble.

        Updating videoPlaybackQualityMetrics is computationally expensive, so instead of
        getting it every time cached properties are updated (every 100 ms) keep track of
        how often the page fetches the property and update it at that frequency.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::play):
        (WebKit::RemoteMediaPlayerProxy::pause):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerRateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlaybackStateChanged):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCharacteristicChanged):
        (WebKit::RemoteMediaPlayerProxy::updateCachedState):
        (WebKit::RemoteMediaPlayerProxy::setVideoPlaybackMetricsUpdateInterval):
        (WebKit::RemoteMediaPlayerProxy::maybeUpdateCachedVideoMetrics):
        (WebKit::RemoteMediaPlayerProxy::updateCachedVideoMetrics):
        (WebKit::RemoteMediaPlayerProxy::logChannel const):
        (WebKit::RemoteMediaPlayerProxy::setShouldUpdatePlaybackMetrics): Deleted.
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::updateVideoPlaybackMetricsUpdateInterval):
        (WebKit::MediaPlayerPrivateRemote::videoPlaybackQualityMetrics):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

2021-04-30  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Always extend access to local process HTTP/3 cache directory
        https://bugs.webkit.org/show_bug.cgi?id=225171
        <rdar://problem/76287224>

        Reviewed by Alex Christensen.

        Always pass the cache directory for HTTP/3 use, regardless of the current setting of
        the flag. We still pass the flag so that users can turn the feature on and off, so there
        is no change in expected behavior. However, certain OS settings can override the user
        setting in the browser, so it's helpful to have the path permission for cases where a user
        toggles state outside of the browser.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):

2021-04-30  Peng Liu  <peng.liu6@apple.com>

        ASSERTION FAILED: Unhandled message RemoteRemoteCommandListenerProxy_UpdateSupportedCommands
        https://bugs.webkit.org/show_bug.cgi?id=225234

        Reviewed by Darin Adler.

        We need to keep dispatching (and ignoring) messages for `RemoteRemoteCommandListenerProxy`
        after the object is destroyed. That could happen because other web processes may still have
        active `RemoteRemoteCommandListener` after `GPUConnectionToWebProcess::m_remoteRemoteCommandListener`
        is destroyed.

        No new tests. Fix an assertion failure in tests.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::dispatchMessage):

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a heuristic to determine whether a synthetic click triggered any meaningful changes
        https://bugs.webkit.org/show_bug.cgi?id=225240
        rdar://77221196

        Reviewed by Tim Horton.

        Add a simple heuristic to inform WKWebView iOS clients when a tap either failed to result in a synthetic click,
        or resulted in a synthetic click that (probably) didn't have any "meaningful side effects". While this notion of
        "meaningfulness" isn't well defined, the idea behind the heuristic is that it should distinguish between taps on
        clickable elements like buttons or links that trigger some noticable change on the page, vs. taps on both
        clickable or non-clickable elements that do not trigger any changes on the page.

        For instance on a news-article-like page, this delegate method should be invoked when tapping on paragraph text
        in the article, even if there is a click handler over the entire article or even body element. However, tapping
        a link or a button on the same page should not cause this delegate method to be invoked. Additionally, if the
        page explicitly prevents default behavior during a synthetic mouse event, this method should also *not* be
        invoked.

        This behavior is roughly similar to the existing delegate method `-_webView:didNotHandleTapAsClickAtPoint:`,
        except that this variant allows for more wiggle room around what constitutes a "meaningful" interaction with the
        page.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didNotHandleTapAsMeaningfulClickAtPoint):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _didNotHandleTapAsMeaningfulClickAtPoint:]):

        See Tools/ChangeLog for more details about this testing hook.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didNotHandleTapAsMeaningfulClickAtPoint):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didNotHandleTapAsMeaningfulClickAtPoint):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didNotHandleTapAsMeaningfulClickAtPoint):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didHandleOrPreventMouseDownOrMouseUpEvent):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::didHandleOrPreventMouseDownOrMouseUpEvent):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isProbablyMeaningfulClick):

        Implement the core of the heuristic here. For now, it just examines the size of the click target. This isn't
        going to satisfy the case where a page installs a click event handler on the body element (or a similar
        element that encapsulates most of the page) and then performs hit-testing in their script, but it's somewhere to
        start.

        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::attemptSyntheticClick):
        (WebKit::WebPage::didHandleOrPreventMouseDownOrMouseUpEvent):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::commitPotentialTapFailed):

2021-04-30  Per Arne Vollan  <pvollan@apple.com>

        prefers-reduced-motion is not reactive on iOS
        https://bugs.webkit.org/show_bug.cgi?id=222381
        <rdar://75933915>

        Reviewed by Brent Fulgham.

        With CFPrefs direct mode, there is a race between the notification that an accessibility preference has been changed
        by the user, and the the in-memory Accessibility preference cache in the WebContent process. We resolve this by using
        new SPI to clear the cached Accessibility settings when we are notified of an accessibility change so they always
        reflect the user's most recent setting.

        * Platform/spi/Cocoa/AccessibilitySupportSPI.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::setPreferenceValue):

2021-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        _WKWebAuthenticationPanelDelegate registration and assertion SPI doesn't work without an LAContext 
        https://bugs.webkit.org/show_bug.cgi?id=225218
        <rdar://76969220>

        Reviewed by Brent Fulgham.

        Covered by manual tests.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):
        Adds a case for nil LAContext.

2021-04-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r276838.

        Caused
        TestWebKitAPI.WebKit.AlternativeServicesDefaultDirectoryCreation
        to fail

        Reverted changeset:

        "[Cocoa] Always extend access to local process HTTP/3 cache
        directory"
        https://bugs.webkit.org/show_bug.cgi?id=225171
        https://commits.webkit.org/r276838

2021-04-30  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Properly recover from unresponsive web processes
        https://bugs.webkit.org/show_bug.cgi?id=224533

        Reviewed by Carlos Garcia Campos.

        Add a new method to the GLib API to terminate the web process associated to a
        WebKitWebView.

        * UIProcess/API/glib/WebKitNavigationClient.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkit_web_view_terminate_web_process):
        * 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:

2021-04-30  Per Arne  <pvollan@apple.com>

        Enforce IOKit filtering
        https://bugs.webkit.org/show_bug.cgi?id=223937
        <rdar://problem/76271551>

        Reviewed by Brent Fulgham.

        Enforce IOKit method filtering based on telemetry. This patch also adds IOKit method telemetry for some Apple Silicion
        IOKit classes, which were overlooked in the first telemetry phase.

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

2021-04-30  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Always extend access to local process HTTP/3 cache directory
        https://bugs.webkit.org/show_bug.cgi?id=225171
        <rdar://problem/76287224>

        Reviewed by Alex Christensen.

        Always pass the cache directory for HTTP/3 use, regardless of the current setting of
        the flag. We still pass the flag so that users can turn the feature on and off, so there
        is no change in expected behavior. However, certain OS settings can override the user
        setting in the browser, so it's helpful to have the path permission for cases where a user
        toggles state outside of the browser.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformSetNetworkParameters):

2021-04-29  Megan Gardner  <megan_gardner@apple.com>

        Remove some unneeded code.
        https://bugs.webkit.org/show_bug.cgi?id=225216

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setUpAppHighlightMenusIfNeeded]): Deleted.

2021-04-29  Peng Liu  <peng.liu6@apple.com>

        AVAudioSession throws an exception when WebKit tries to set its routeSharingPolicy to "independent"
        https://bugs.webkit.org/show_bug.cgi?id=225213

        Reviewed by Jer Noble.

        AVAudioSession does not expect WebKit to set its routeSharingPolicy
        to AVAudioSessionRouteSharingPolicyIndependent(RouteSharingPolicy::Independent).

        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::updateCategory):

2021-04-29  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove unused logd-diagnostic-client rules
        https://bugs.webkit.org/show_bug.cgi?id=225214
        <rdar://problem/66587621>

        Reviewed by Per Arne Vollan.

        WebKit does not have either of the two entitlements required to use the 'log-diagnostic-client' rules.
        We should remove these rules from the sandbox to reduce attack surface, since they provide no benefit.

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

2021-04-29  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Two message loops between WebContent process and GPU process to enable/select audio/video tracks
        https://bugs.webkit.org/show_bug.cgi?id=225193

        Reviewed by Eric Carlson.

        The current implementation has two message loops between Web process
        and GPU process related to enable/select audio/video tracks.

        For audio, the message loop is:
        Web Process -> GPU process: RemoteMediaPlayerProxy::audioTrackSetEnabled
        GPU Process -> Web Process: MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged

        The message loop will lead to the following function call loop:

        AudioTrackPrivateRemote::updateConfiguration()
        AudioTrackPrivateRemote::setEnabled()
        RemoteMediaPlayerProxy::audioTrackSetEnabled()
        RemoteAudioTrackProxy::setEnabled()
        AudioTrackPrivateAVFObjC::setEnabled()
        AudioTrackPrivate::setEnabled()
        RemoteAudioTrackProxy::enabledChanged()
        RemoteAudioTrackProxy::configurationChanged()
        MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged()
        again, AudioTrackPrivateRemote::updateConfiguration(), and repeat ...

        The loop for video tracks is similar.

        The loop is bad but normally does not impact a media player's functionality.

        However, if a page disables and enables an audio track of a media element with HLS stream
        in one run loop, the loop will disable and enable the track repeatedly, as a result,
        CoreMedia's HLS player will disable/enable audio segments and send/cancel download
        requests repeatedly. Eventually the player won't play audio.

        This patch fixes these two message loops.

        Test: media/media-video-audio-track.html

        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
        (WebKit::VideoTrackPrivateRemote::updateConfiguration):

2021-04-29  Alex Christensen  <achristensen@webkit.org>

        Make URLSchemeTask destruction more straightforward
        https://bugs.webkit.org/show_bug.cgi?id=225195
        <rdar://77310818>

        Reviewed by Chris Dumez.

        There's a seemingly-new crash in the lambda of WebURLSchemeHandlerCocoa::platformTaskCompleted
        That labmda doesn't need to exist.  We should do our object destruction like the rest of our objects.

        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (-[WKURLSchemeTaskImpl dealloc]):
        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm:
        (WebKit::WebURLSchemeHandlerCocoa::platformTaskCompleted):

2021-04-29  Ben Nham  <nham@apple.com>

        Reduce memory footprint for background tabs
        https://bugs.webkit.org/show_bug.cgi?id=225007

        Reviewed by Chris Dumez.

        When a WebContent process contains only non-visible pages (e.g. if it is a background tab),
        we should attempt to reduce our memory footprint after some time interval to help relieve
        system-wide memory pressure. This is enabled only on Mac because iOS already does something
        similar just before WebContent suspends.

        One exception to this is that we don't do this proactive slimming for processes that are in
        the back/forward cache or in the WebProcess cache. This is because dropping the memory cache
        in those types of processes leads to perf regressions in benchmarks that do certain types of
        cross-origin navigations. We'll use a separate mechanism for controlling the memory usage of
        those processes; our current logic keeps those processes around until we are at the warning
        or critical memory pressure level.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pageDidEnterWindow):
        (WebKit::WebProcess::pageWillLeaveWindow):
        (WebKit::WebProcess::nonVisibleProcessGraphicsCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessMemoryCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired): Deleted.
        * WebProcess/WebProcess.h:

2021-04-29  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Reduce logging for uninteresting sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=225197
        <rdar://problem/77321299>

        Reviewed by Per Arne Vollan.

        CFPreferences needs to read from .GlobalPreferences.plist and .GlobalPreferences_m.plist on iOS, just like it
        does on macOS. We should unblock these so we stop getting useless telemetry about the violations, and avoid
        preference problems on iOS.

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

2021-04-29  Darin Adler  <darin@apple.com>

        Extend SortedArrayMap further to work on case-folded strings, use in MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=224968

        Reviewed by Sam Weinig.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _isDisplayingPDF]): Updated since MIMETypeRegistry::pdfMIMETypes
        returns a different type.
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry initWithConfiguration:]): Updated since
        MIMETypeRegistry::systemPreviewMIMETypes returns a different type.

2021-04-29  Ben Nham  <nham@apple.com>

        Unreviewed, reverting r276619.

        Causes multiple regressions on perf bots, as multiple tests test hot page loads in
        WebContent processes that are in the process cache. Dropping the memory cache in those
        processes caused multiple benchmarks to regress.

        Reverted changeset:

        "Reduce memory footprint for background tabs"
        https://bugs.webkit.org/show_bug.cgi?id=225007
        https://commits.webkit.org/r276619

2021-04-29  Chris Dumez  <cdumez@apple.com>

        Improve local storage size estimation for quota limitation
        https://bugs.webkit.org/show_bug.cgi?id=225123
        <rdar://problem/77248111>

        Reviewed by Alex Christensen.

        Improve local storage size estimation for quota limitation:
        - Rely on String::sizeInBytes() to compute the String size, instead of using
          String::length() * sizeof(UChar)
        - Make estimation consistent between StorageMap & LocalStorageDatabase

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::setItem):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

2021-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276689, r276736, and r276737.
        https://bugs.webkit.org/show_bug.cgi?id=225188

        Broke platform/ios/ios/storage/domstorage/5mb-quota.html

        Reverted changesets:

        "Improve local storage size estimation for quota limitation"
        https://bugs.webkit.org/show_bug.cgi?id=225123
        https://trac.webkit.org/changeset/276689

        "REGRESSION(r276689): [ iOS wk2 ]
        platform/ios/ios/storage/domstorage/5mb-quota.html is a
        constant text failure"
        https://bugs.webkit.org/show_bug.cgi?id=225160
        https://trac.webkit.org/changeset/276736

        "Make sure we invalidate the iterator in StorageMap::clear()"
        https://bugs.webkit.org/show_bug.cgi?id=225164
        https://trac.webkit.org/changeset/276737

2021-04-29  Said Abou-Hallawa  <said@apple.com>

        Fix build break after r276753

        Unreviewed, build fix.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-04-29  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] REGRESSION(r272888): Don't assert the validity of the dataURL mimeType inside GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=225175
        <rdar://76286963>

        Reviewed by Simon Fraser.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        Assert the validity of the mimeType before sending it to GPU Process.

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Coalesce adjacent selection geometries when rendering individual selection quads
        https://bugs.webkit.org/show_bug.cgi?id=225054

        Reviewed by Tim Horton.

        Make some further minor adjustments to selection behavior in image overlays on iOS. In particular, when using
        selection handles to modify the selected range, shift the start and end of the selected range so that they're at
        the beginning and end of text runs, respectively.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::insideImageOverlay):
        (WebKit::expandForImageOverlay):
        (WebKit::rangeForPointInRootViewCoordinates):

2021-04-28  Devin Rousso  <drousso@apple.com>

        experiment with averaging sampling colors across the top of the page as the scroll area background
        https://bugs.webkit.org/show_bug.cgi?id=224987
        <rdar://problem/76251889>

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didSamplePageTopColor const): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didSamplePageTopColor): Added.
        Pass along the `sampledPageTopColor` to the UIProcess.

        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sampledPageTopColor): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scrollAreaBackgroundColor const):
        (WebKit::WebPageProxy::didSamplePageTopColor): Added.
        Use the `sampledPageTopColor` if the `UseSampledPageTopColorForScrollAreaBackgroundColor`
        internal preference is enabled instead of the CSS `background-color` of the `<html>`/`<body>`.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::sampledPageTopColorWillChange): Added.
        (WebKit::PageClient::sampledPageTopColorDidChange): Added.
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::sampledPageTopColorWillChange): Added.
        (WebKit::PageClientImplCocoa::sampledPageTopColorDidChange): Added.
        Add ObjC KVO support for `-[WKWebView _sampledPageTopColor]`.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        (-[WKWebView _sampledPageTopColor]): Added.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setSampledPageTopColorMaxDifference:]): Added.
        (-[WKWebViewConfiguration _sampledPageTopColorMaxDifference]): Added.
        Provide SPI to configure the `SampledPageTopColorMaxDifference` preference when
        creating the `WKWebView`. Expose the result as `_sampledPageTopColor` SPI.

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web content process occasionally crashes under VisibleSelection::adjustPositionForEnd
        https://bugs.webkit.org/show_bug.cgi?id=225072
        rdar://77159489

        Reviewed by Darin Adler.

        The fix for this crash that I landed in r276688 was based on a misunderstanding that accessing `treeScope()`
        would trigger a null pointer deref if `isInTreeScope()` is `false`. This is not the case, since the `treeScope`
        of a `Node` is a separate notion from whether that `Node` is connected to said tree scope.

        Since this crash is really due to dereferencing a null container node in the case where `selectionStart` or
        `selectionEnd` are null, a better fix is to just check the nullity of the container node.

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

2021-04-28  Basuke Suzuki  <basuke.suzuki@sony.com>

        Suppress warnings for %{private}s format specifier
        https://bugs.webkit.org/show_bug.cgi?id=225137

        Reviewed by Alex Christensen.

        Add PRIVATE_LOG_STRING macro which is defined depending on if
        os_log() is used or rather old printf().
        See also: https://bugs.webkit.org/show_bug.cgi?id=207478

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::openITPDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::enableForeignKeys):
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnInTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isEmpty const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertObservedDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::relationshipExists const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationshipList):
        (WebKit::ResourceLoadStatisticsDatabaseStore::populateFromMemoryStore):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistic):
        (WebKit::ResourceLoadStatisticsDatabaseStore::mergeStatistics):
        (WebKit::ResourceLoadStatisticsDatabaseStore::incrementRecordsDeletedCountForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::recursivelyFindNonPrevalentDomainsThatRedirectedToThisDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAsPrevalentIfHasRedirectedToPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccessUnderOpener):
        (WebKit::ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUserInteraction):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setDomainsAsPrevalent):
        (WebKit::ResourceLoadStatisticsDatabaseStore::predicateValueForDomain const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrevalentResource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setGrandfathered):
        (WebKit::ResourceLoadStatisticsDatabaseStore::setIsScheduledForAllButCookieDataRemoval):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getMostRecentlyUpdatedTimestamp const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::ensureResourceStatisticsForRegistrableDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearDatabaseContents):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeDataForDomain):
        (WebKit::ResourceLoadStatisticsDatabaseStore::cookieAccess):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearGrandfathering):
        (WebKit::ResourceLoadStatisticsDatabaseStore::pruneStatisticsIfNeeded):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateLastSeen):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateDataRecordsRemoved):
        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectSubStatisticsCount):
        (WebKit::ResourceLoadStatisticsDatabaseStore::getDomainStringFromDomainID const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::appendSubStatisticList const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::resourceToString const):
        (WebKit::ResourceLoadStatisticsDatabaseStore::domainIDExistsInDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::updateOperatingDatesParameters):
        (WebKit::ResourceLoadStatisticsDatabaseStore::includeTodayAsOperatingDateIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertExpiredStatisticForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeUnattributed):
        (WebKit::ResourceLoadStatisticsDatabaseStore::allAttributedPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearExpiredPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::privateClickMeasurementToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):

2021-04-28  Ryosuke Niwa  <rniwa@webkit.org>

        When IPC testing API is enabled, GPU process shouldn't kill Web Process
        https://bugs.webkit.org/show_bug.cgi?id=225143
        <rdar://70692277>

        Reviewed by Chris Dumez.

        Set Connection::g_ignoreInvalidMessageForTesting on createGPUConnectionToWebProcess
        when the IPC testing API is enabled.

        Tests: IPCTestingAPI.CanSendSyncMessageToGPUProcess
               IPCTestingAPI.CanSendAsyncMessageToGPUProcess
               IPCTestingAPI.CanSendInvalidAsyncMessageToGPUProcessWithoutTermination

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didReceiveInvalidMessage): Exit early without
        killing the Web process if IPC testing API is enabled.
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::createGPUConnectionToWebProcess): Set the aforementioned flag
        on the IPC connection.
        * Shared/GPUProcessConnectionParameters.h:
        (WebKit::GPUProcessConnectionParameters): Added ignoreInvalidMessageForTesting.
        (WebKit::GPUProcessConnectionParameters::encode const):
        (WebKit::GPUProcessConnectionParameters::decode):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains): Cleanup. Use a helper function.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::getGPUProcessConnection): Set the value of
        GPUProcessConnectionParameters::ignoreInvalidMessageForTesting based on the value
        of WebProcessProxy::m_ignoreInvalidMessageForTesting.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::ignoreInvalidMessageForTesting const): Added.

2021-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276658.
        https://bugs.webkit.org/show_bug.cgi?id=225161

        Introduced perf regression

        Reverted changeset:

        "Enforce IOKit filtering"
        https://bugs.webkit.org/show_bug.cgi?id=223937
        https://trac.webkit.org/changeset/276658

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r275267) Network process crashes in Data::adoptMap
        https://bugs.webkit.org/show_bug.cgi?id=225159
        <rdar://77066555>

        Reviewed by Geoffrey Garen.

        There was a missing check to see if mapping was successful.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Add SPI to query whether a URL would be upgraded to HTTPS
        https://bugs.webkit.org/show_bug.cgi?id=225154
        <rdar://77269904>

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (+[WKWebView _shouldUpgradeToHTTPS:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2021-04-28  Brent Fulgham  <bfulgham@apple.com>

        [iOS] [GPU] The UI process should issue mach sandbox extensions to 'iconservices'
        https://bugs.webkit.org/show_bug.cgi?id=225111
        <rdar://problem/68366888>

        Reviewed by Per Arne Vollan.

        In Bug 205443 we did work to extend access to non-web-browsing services to the WebContent process only when
        needed. This was lost in the transition to the GPU Process, and should be added back.

        This change does the following:
        1. Adds sandbox extension handles for the iconservices (and related) services to the GPU process creation parameters.
        2. Updates the GPUProcessProxy to extend iconservices when waranted, and add them to the creation parameter structure.
        3. Updates the GPUProcess to consume the extensions (when granted).
        4. Makes a GPU process-specific version of the 'nonBrowserServices' static function for use by GPUProcessProxy. This is needed
           because fewer services are needed in the GPU process than in the WebContent process.
        5. Removes unused telemetry from the WebContent process sandbox.
        6. Switches the GPU process sandbox to deny iconservices (and related) by default, and to consume the extensions instead.

        Tested by exisiting TestWebKitAPI tests.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):

2021-04-28  Chris Dumez  <cdumez@apple.com>

        Crash under GPUProcessProxy::getGPUProcessConnection()
        https://bugs.webkit.org/show_bug.cgi?id=224017
        <rdar://75146104>

        Reviewed by Darin Adler.

        The crash would happen when replyToPendingMessages() get called in the AuxiliaryProcessProxy
        destructor and there would be a pending getGPUProcessConnection() IPC. The lambda in
        WebProcessPool::getGPUProcessConnection() would check if a WeakPtr to the WebProcessPool is
        valid before calling `ensureGPUProcess().getGPUProcessConnection()`. However, at this point, 
        the WebProcessPool destructor is still running so the WeakPtr is still valid but 
        `ensureGPUProcess().getGPUProcessConnection()` will crash because the GPUProcessProxy
        destructor has already run.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        Drop code that was causing the GPUProcessProxy to reply to all its pending IPC messages whenenever
        a WebProcessPool gets destroyed. This is incorrect since a GPUProcessProxy may be shared by several
        WebProcessPool objects. Note that the AuxiliaryProcessProxy destructor already takes care of
        calling replyToPendingMessages().

        (WebKit::WebProcessPool::getGPUProcessConnection):
        Protect the WebProcessPool is the lambda to prevent the case where this lambda gets called and the
        WebProcessPool & GPUProcessProxy are in the middle of destruction.

2021-04-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        Asserting that function or variable is accessed in a certain thread should be simpler and more robust
        https://bugs.webkit.org/show_bug.cgi?id=224971

        Reviewed by Darin Adler.

        Use ThreadAssertions in RemoteGraphicsContextGL implementations
        as an example.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        (WebKit::RemoteGraphicsContextGL::~RemoteGraphicsContextGL):
        (WebKit::RemoteGraphicsContextGL::initialize):
        (WebKit::RemoteGraphicsContextGL::stopListeningForIPC):
        (WebKit::RemoteGraphicsContextGL::displayWasReconfigured):
        (WebKit::RemoteGraphicsContextGL::workQueueInitialize):
        (WebKit::RemoteGraphicsContextGL::workQueueUninitialize):
        (WebKit::RemoteGraphicsContextGL::didComposite):
        (WebKit::RemoteGraphicsContextGL::forceContextLost):
        (WebKit::RemoteGraphicsContextGL::dispatchContextChangedNotification):
        (WebKit::RemoteGraphicsContextGL::reshape):
        (WebKit::RemoteGraphicsContextGL::prepareForDisplay):
        (WebKit::RemoteGraphicsContextGL::synthesizeGLError):
        (WebKit::RemoteGraphicsContextGL::getError):
        (WebKit::RemoteGraphicsContextGL::ensureExtensionEnabled):
        (WebKit::RemoteGraphicsContextGL::notifyMarkContextChanged):
        (WebKit::RemoteGraphicsContextGL::paintRenderingResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintCompositedResultsToCanvas):
        (WebKit::RemoteGraphicsContextGL::paintImageDataToImageBuffer):
        (WebKit::RemoteGraphicsContextGL::copyTextureFromMedia):
        (WebKit::RemoteGraphicsContextGL::simulateEventForTesting):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::platformWorkQueueInitialize):
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):
        * GPUProcess/graphics/RemoteGraphicsContextGLFunctionsGenerated.h:

2021-04-27  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Suppress warnings for %llu format specifier for uint64_t.
        https://bugs.webkit.org/show_bug.cgi?id=225138

        Reviewed by Darin Adler.

        PRIu64 from <cstdint> should be use to format uint64_t value in printf.

        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):
        (WebKit::WebSWServerConnection::startFetch):

2021-04-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add a Condition type that supports thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=224970

        Reviewed by Darin Adler.

        Use CheckedCondition and CheckedLock as an example of the
        added implementations.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        (IPC::Connection::WTF_GUARDED_BY_LOCK):
        Use CheckedCondition (as an example).

        Mark up variables protected by
        IPC::Connection::m_waitForMessageMutex
        to use thread safety analysis.

        * Shared/mac/MediaFormatReader/MediaTrackReader.cpp:
        (WebKit::MediaTrackReader::greatestPresentationTime const):
        Fix unlocked access.

        (WebKit::MediaTrackReader::addSample):
        (WebKit::MediaTrackReader::waitForSample const):
        (WebKit::MediaTrackReader::finishParsing):
        (WebKit::MediaTrackReader::copyProperty):
        (WebKit::MediaTrackReader::finalize):
        * Shared/mac/MediaFormatReader/MediaTrackReader.h:
        Use CheckedCondition (as an example).

        Mark up variables protected by
        MediaTrackReader::m_sampleStorageLock
        to use thread safety analysis.

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Improve local storage size estimation for quota limitation
        https://bugs.webkit.org/show_bug.cgi?id=225123

        Reviewed by Alex Christensen.

        Improve local storage size estimation for quota limitation:
        - Rely on String::sizeInBytes() to compute the String size, instead of using
          String::length() * sizeof(UChar)
        - Make estimation consistent between StorageMap & LocalStorageDatabase

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::setItem):
        (WebKit::estimateEntrySize): Deleted.
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:

2021-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web content process occasionally crashes under VisibleSelection::adjustPositionForEnd
        https://bugs.webkit.org/show_bug.cgi?id=225072
        rdar://77159489

        Reviewed by Darin Adler.

        Make `rangeForPointInRootViewCoordinates` robust in the case where the original selection may have become
        orphaned or null, by checking that the `targetNode` and existing `selectionStart` or `selectionEnd` are in a
        tree scope before accessing `treeScope()`.

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

2021-04-27  Chris Dumez  <cdumez@apple.com>

        IPC::decoder::decode() should mark decoder as invalid when failing
        https://bugs.webkit.org/show_bug.cgi?id=225117

        Reviewed by Darin Adler.

        IPC::decoder::decode() should mark decoder as invalid when failing, instead of relying
        on individual type decoders to do so. This makes type decoders a bit simpler and less
        error-prone.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<CString>::decode):
        (IPC::decodeStringText):
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchMessageReceiverMessage):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Decoder.cpp:
        (IPC::m_destinationID):
        * Platform/IPC/Decoder.h:
        (IPC::Decoder::decode):
        (IPC::Decoder::operator>>):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageSynchronous):
        (IPC::handleMessageSynchronousWantsConnection):
        (IPC::handleMessageAsync):
        (IPC::handleMessageAsyncWantsConnection):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::decode):

2021-04-27  Alex Christensen  <achristensen@webkit.org>

        charset in contentType used in Blob.prototype.slice(start, end, contentType) is lost
        https://bugs.webkit.org/show_bug.cgi?id=225057

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2021-04-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        HashTableConstIterator's consistency assertion fails while closing m_webIDBServers in NetworkProcess::didClose since r275846
        https://bugs.webkit.org/show_bug.cgi?id=225089

        Reviewed by Chris Dumez.

        The items of m_webIDBServers were removed while iterating
        m_webIDBServers.

        Move m_webIDBServers to a temporary HashMap before iterating.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Copy-on-write semantics should be an internal implementation detail of StorageMap
        https://bugs.webkit.org/show_bug.cgi?id=225108

        Reviewed by Alex Christensen.

        Update StorageArea due to StorageMap API changes.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::setItem):
        (WebKit::StorageArea::removeItem):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::items const):
        (WebKit::StorageArea::openDatabaseAndImportItemsIfNeeded const):
        * NetworkProcess/WebStorage/StorageArea.h:

2021-04-27  Per Arne  <pvollan@apple.com>

        Enforce IOKit filtering
        https://bugs.webkit.org/show_bug.cgi?id=223937
        <rdar://problem/76271551>

        Reviewed by Brent Fulgham.

        Enforce IOKit method filtering based on telemetry. This patch also adds IOKit method telemetry for some Apple Silicion
        IOKit classes, which were overlooked in the first telemetry phase.

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

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Don't keep local storage data in memory in the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=225065

        Reviewed by Alex Christensen.

        When a WebPage would start to use the local storage API, the WebProcess
        would send a sync IPC to the NetworkProcess to retrieve all the local
        storage entries for the origin. The NetworkProcess would read those
        entries from a SQLite database and send them back to the WebProcess.
        Both the NetworkProcess would keep the entries in memory, in a
        StorageMap object (which is basically a HashMap). On some sites, the
        strings in the local storage may be very large. It is useful for the
        WebProcess to keep them in memory for performance reasons, especially
        considering that the Web API is synchronous. However, there is no real
        need to keep them in memory in the Network Process side, especially
        given that the WebProcess already has its own copy. On the network
        process side, we can get rid of the StorageMap entirely in the local
        storage case and 100% rely on the SQLite database. This is what this
        patch implements.

        A/B testing shows this is a 2-3% progression on Membuster. There does
        not appear to be a meaningful progression on PLUM sadly. This is also
        neutral on PLT.

        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::estimateEntrySize):
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::tryToOpenDatabase):
        (WebKit::LocalStorageDatabase::items const):
        (WebKit::LocalStorageDatabase::removeItem):
        (WebKit::LocalStorageDatabase::item const):
        (WebKit::LocalStorageDatabase::setItem):
        (WebKit::LocalStorageDatabase::clear):
        (WebKit::LocalStorageDatabase::close):
        (WebKit::LocalStorageDatabase::databaseIsEmpty const):
        (WebKit::LocalStorageDatabase::openIfExisting):
        (WebKit::LocalStorageDatabase::scopedStatement const):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        - Update LocalStorageDatabase API to match more closely the API of
          StorageMap. This way StorageArea can rely on the LocalStorageDatabase
          entirely instead of the StorageMap with minimal changes.
        - Add quota support similarly to what is done in StorageArea so that
          LocalStorageDatabase::setItem() fails when the quota is reached.
        - Cache the SQLiteStatements for performance reasons

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::flushAndClose):
        We no longer need to call syncToDatabase() before closing since
        LocalStorageDatabase no longer has a queue on pending operations.

        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::StorageArea):
        (WebKit::StorageArea::addListener):
        (WebKit::StorageArea::removeListener):
        (WebKit::StorageArea::setItem):
        (WebKit::StorageArea::removeItem):
        (WebKit::StorageArea::clear):
        (WebKit::StorageArea::items const):
        (WebKit::StorageArea::ensureDatabase const):
        * NetworkProcess/WebStorage/StorageArea.h:
        If the StorageArea is used for local storage, we now don't even initialize
        a StorageMap and rely entirely on LocalStorageDatabase. If the StorageArea
        is used for session storage, we keep using a StorageMap since there is no
        backing database. This is fairly straightforward because I updated the
        LocalStorageDatabase API to match fairly closely the StorageMap one.

        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::waitUntilSyncingLocalStorageFinished):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        [IPC Hardening] Make sure IPC::Decoder constructors consistently call markInvalid() when decoding fails
        https://bugs.webkit.org/show_bug.cgi?id=225110
        <rdar://76547775>

        Reviewed by Darin Adler.

        One of the IPC::Decoder constructors was failing to call markInvalid() after failing to
        decoder the message name.

        * Platform/IPC/Decoder.cpp:
        (IPC::m_destinationID):

2021-04-27  Chris Dumez  <cdumez@apple.com>

        Ask LocalStorage database to free as much memory as possible on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=225109

        Reviewed by Geoffrey Garen.

        Ask LocalStorage database to free as much memory as possible on memory pressure.
        Some of the strings in the database can be large and we don't want SQLite to be
        holding on to those for performance reason when we are under memory pressure.

        This seems to be a ~1.75% improvement on PLUM/nytimes-home and a ~1% improvement
        on PLUM/wikipedia, sadly not enough to show an impact on the overal PLUM score.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::handleLowMemoryWarning):
        * NetworkProcess/WebStorage/LocalStorageDatabase.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::handleLowMemoryWarning):
        * NetworkProcess/WebStorage/StorageArea.h:
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::handleLowMemoryWarning):
        * NetworkProcess/WebStorage/StorageManagerSet.h:

2021-04-27  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Don't use FORWARDING_HEADERS_DIR for GTK WebKit headers
        https://bugs.webkit.org/show_bug.cgi?id=225006

        Reviewed by Michael Catanzaro.

        Use WebKit2Gtk_FRAMEWORK_HEADERS_DIR and WebKit2Gtk_DERIVED_SOURCES_DIR for WebKit2 GTK
        headers instead of FORWARDING_HEADERS_DIR and DERIVED_SOURCES_DIR.

        * PlatformGTK.cmake:

2021-04-27  Brent Fulgham  <bfulgham@apple.com>

        [iOS] [GPU] The UI process should issue the mach sandbox extension to 'com.apple.AGXCompilerService' 
        https://bugs.webkit.org/show_bug.cgi?id=225004
        <rdar://problem/68362930>

        Reviewed by Darin Adler.

        In Bug 203915 and Bug 210616 we did work to only extend access to AGX-related graphics facilities on relevant hardware. This was
        lost in the transition to the GPU Process and should be added back.

        This change does the following:
        1. Adds sandbox extension handles for the AGX-related compiler services and IOKit classes to the GPUProcess creation parameters.
        2. Updates the GPUProcessProxy to extend AGX features when warranted and add them to the creation parameter structure.
        3. Updates the GPUProcess to consume the extensions (when granted).
        4. Updates the WebProcessPool to use the WebCore version of the 'agxCompilerClasses' and 'agxCompilerServices' functions.
        5. Moves the 'agxCompilerClasses' and 'agxCompilerServices' functions to WebCore, alongside the other AGX functions.

        It also corrects the sandbox rule for the AGXCompilerService in the GPU Process sandbox, which incorrectly called it a 'global-name',
        when it is an xpc-service.

        Tested by existing graphics tests.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcessCreationParameters.cpp:
        (WebKit::GPUProcessCreationParameters::encode const):
        (WebKit::GPUProcessCreationParameters::decode):
        * GPUProcess/GPUProcessCreationParameters.h:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb: Correct AGX compiler service type.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::nonBrowserServices):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::agxCompilerClasses): Deleted.
        (WebKit::agxCompilerServices): Deleted.
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::GPUProcessProxy):

2021-04-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Smart invert>Safari>images & other colors improperly invert
        https://bugs.webkit.org/show_bug.cgi?id=225077
        <rdar://problem/77176061>

        Reviewed by Alan Bujtas.

        The invert colors property is gathered during the screen data collection phase.
        So properly update the value in WebCore, we need to resend these properties when 
        accessibility settings change.

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

2021-04-27  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Direct AVIF loading does not work.
        https://bugs.webkit.org/show_bug.cgi?id=222867

        Reviewed by Michael Catanzaro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didGetFileInfo): Use mime-type reported for local files by gio
        only as a last resort. Our MIMETypeRegistry is more reliable in these cases.

2021-04-27  Youenn Fablet  <youenn@apple.com>

        Add memory allocation checks in more realtime audio capture/rendering places
        https://bugs.webkit.org/show_bug.cgi?id=224750

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        (WebKit::AudioMediaStreamTrackRenderer::pushSamples):
        (WebKit::AudioMediaStreamTrackRenderer::storageChanged):

2021-04-26  Tim Nguyen  <ntim@apple.com>

        Add more eager OOB checks when creating DisplayListReaderHandle & DisplayListWriterHandle.
        https://bugs.webkit.org/show_bug.cgi?id=225055
        <rdar://71896663>

        Reviewed by Wenson Hsieh.

        There were already some OOB checks for both classes, this revision adds checks at creation-time.
        Also add a comment on top of SharedDisplayListHandle.h to mention that only subclasses use it.

        * GPUProcess/graphics/DisplayListReaderHandle.h:
        (WebKit::DisplayListReaderHandle::create):
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::didCreateSharedDisplayListHandle):
        * Shared/SharedDisplayListHandle.h:
        (WebKit::SharedDisplayListHandle::SharedDisplayListHandle):
        * WebProcess/GPU/graphics/DisplayListWriterHandle.h:
        (WebKit::DisplayListWriterHandle::create):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::createItemBuffer):

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Consistently include headers with <Framework/Header.h>
        https://bugs.webkit.org/show_bug.cgi?id=225067

        Reviewed by Alexey Proskuryakov.

        * Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h:
        * Shared/API/Cocoa/_WKSameDocumentNavigationTypeInternal.h:
        * UIProcess/API/Cocoa/NSAttributedString.mm:
        * UIProcess/API/Cocoa/WKBrowsingContextGroupInternal.h:
        * UIProcess/API/Cocoa/WKConnectionInternal.h:
        * UIProcess/API/Cocoa/WKNavigationDataInternal.h:
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        * UIProcess/API/Cocoa/WKSecurityOriginInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
        * UIProcess/API/Cocoa/_WKAttachment.mm:
        * UIProcess/API/Cocoa/_WKAttachmentInternal.h:
        * UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h:
        * UIProcess/API/Cocoa/_WKInspectorConfiguration.mm:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        * UIProcess/API/Cocoa/_WKUserContentFilterInternal.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanelInternal.h:
        * UIProcess/API/mac/WKWebViewMac.h:
        * UIProcess/API/mac/WKWebViewMac.mm:
        * UIProcess/Cocoa/MediaUtilities.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        * UIProcess/Cocoa/UIDelegate.mm:
        * UIProcess/Cocoa/WKContactPicker.mm:
        * UIProcess/Cocoa/WKShareSheet.mm:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/Inspector/mac/RemoteWebInspectorUIProxyMac.mm:
        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        * UIProcess/WebAuthentication/Cocoa/WebAuthenticationPanelClient.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/mac/HighPerformanceGPUManager.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrameInternal.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandleInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.mm:

2021-04-26  Kate Cheney  <katherine_cheney@apple.com>

        ResourceLoadStatisticsDatabaseStore::aggregatedThirdPartyData() hangs for a long time
        https://bugs.webkit.org/show_bug.cgi?id=225063
        <rdar://problem/76248557>

        Reviewed by Brent Fulgham.

        Unique index values speed up sqlite database queries, and prevent
        repeated entries in tables without primary keys. Its possible to
        get into a state where some tables in the ITP database do not have index
        values. We should check on open if the database has index values, and
        create them if not. This may require migrating existing data and
        removing repeated entries.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        Remove semi-colons in CREATE UNIQUE INDEX queries. They aren't needed
        and if we remove them we can use these constexpr values to check for
        the correct stored index later on.

        (WebKit::stripIndexQueryToMatchStoredValue):
        We use CREATE UNIQUE INDEX IF NOT EXISTS to avoid an error if the
        unique index already exists, but the value is stored in the database
        without the "IF NOT EXISTS" portion. In order to check for correct
        values we need to strip this out.

        (WebKit::expectedTableAndIndexQueries):
        (WebKit::ResourceLoadStatisticsDatabaseStore::checkForMissingTablesInSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::currentTableAndIndexQueries):
        Return the schema and index for a given table. If the index is empty
        that means SQLite created an automatic index and we should return
        WTF::nullopt.

        (WebKit::ResourceLoadStatisticsDatabaseStore::needsUpdatedPrivateClickMeasurementSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::missingUniqueIndices):
        (WebKit::ResourceLoadStatisticsDatabaseStore::missingReferenceToObservedDomains):
        (WebKit::ResourceLoadStatisticsDatabaseStore::needsUpdatedSchema):
        (WebKit::insertDistinctValuesInTableQuery):
        Since unique indices prevent repeat entries, tables without them might
        have repeated entries. We need to select only one of each entry to
        migrate to the new tables. This picks the one with the most recent
        lastUpdated time.

        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices):
        This fix revealed an index that is never created. I added it here. 

        (WebKit::ResourceLoadStatisticsDatabaseStore::isCorrectSubStatisticsCount):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _isRelationshipOnlyInDatabaseOnce:thirdParty:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        Convert SPI previously only used for layout tests to be used for an
        API test where we can load a database with repeated values to ensure
        the migration is correct after my change.

2021-04-26  Ben Nham  <nham@apple.com>

        Reduce memory footprint for background tabs
        https://bugs.webkit.org/show_bug.cgi?id=225007

        Reviewed by Chris Dumez.

        When a WebContent process contains only non-visible pages (e.g. if it is a background tab),
        we should attempt to reduce our memory footprint after some time interval to help relieve
        system-wide memory pressure. This is enabled only on Mac because iOS already does something
        similar just before WebContent suspends.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pageDidEnterWindow):
        (WebKit::WebProcess::pageWillLeaveWindow):
        (WebKit::WebProcess::nonVisibleProcessGraphicsCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessMemoryCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired): Deleted.
        * WebProcess/WebProcess.h:

2021-04-26  Ben Nham  <nham@apple.com>

        Handle warning-level memory notifications more aggressively
        https://bugs.webkit.org/show_bug.cgi?id=225008

        Reviewed by Chris Dumez.

        We've found that in some workloads, the critical-level memory pressure handler releases
        significantly more memory than the warning-level memory pressure handler. On Macs, it is
        likely that the memory pressure coincides with swapping. So when we get even a warning-level
        notification from the OS, we should err on the side of releasing more memory to help relieve
        the swapping state. To do this, treat warning level notifications the same as critical level
        notifications on Mac if the WebProcess is in the background.

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

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Update Mac-specific CMake files
        https://bugs.webkit.org/show_bug.cgi?id=225064

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2021-04-26  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r271861): [iOS] Accessory bar navigation to elements outside the viewport fails
        https://bugs.webkit.org/show_bug.cgi?id=224980
        <rdar://problem/77042311>

        Reviewed by Wenson Hsieh.

        r271861 introduced logic to prevent obscured elements from being
        focusable using the accessory bar, using hit testing. However, it also
        prevented elements outside the viewport from participating in accessory
        bar navigation.

        To fix, include HitTestRequest::IgnoreClipping in the hit test request
        options. This ensures that hit test requests are not clipped to the
        viewport.

        Note that this behavior is covered by an existing test, but the test
        only failed on smaller devices.

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

2021-04-26  Don Olmstead  <don.olmstead@sony.com>

        Fix includes for some GTK/GLib headers
        https://bugs.webkit.org/show_bug.cgi?id=225020

        Reviewed by Adrian Perez de Castro.

        An include was assuming Source/WebKit as its root.

        * UIProcess/API/glib/WebKitInitialize.cpp:

2021-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] OrdinarySet should invoke custom [[Set]] methods
        https://bugs.webkit.org/show_bug.cgi?id=217916

        Reviewed by Yusuke Suzuki.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2021-04-26  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Update sandbox message filter syntax
        https://bugs.webkit.org/show_bug.cgi?id=223384

        Reviewed by Brent Fulgham.

        Update sandbox message filter syntax on iOS. The previous syntax should also still be supported.

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

2021-04-25  Devin Rousso  <drousso@apple.com>

        Add `ALWAYS_LOG_WITH_STREAM` macro for easier development/debugging
        https://bugs.webkit.org/show_bug.cgi?id=224959

        Reviewed by Darin Adler.

        It's often very helpful to use existing `operator<<` defined on objects, but annoying to
        have to copypaste the boilerplate code that creates a `WTF::TextStream` and uses it in a
        `WTFLogAlways` or wait for a debug build to enable existing `LOG_WITH_STREAM`.

        * Platform/Logging.h:
        Move contents of `pal/LogMacros.h` to `wtf/Assertions.h`.

2021-04-25  Jer Noble  <jer.noble@apple.com>

        [GPUP] REGRESSION: Selecting play/pause on Spotify.com causes page to reload
        https://bugs.webkit.org/show_bug.cgi?id=225023
        <rdar://76985997>

        Reviewed by Darin Adler.

        A zero ObjectIdentifier is apparently invalid, which causes a debug ASSERT on the sending
        side and a SIGKILL on the receiving side. Replace the zero ObjectIdentifier message when
        clearing a LegacyCDMSession with an Optional<ObjectIdentifier>, and send an explicit
        WTF::nullopt when clearing.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCachedKeyForKeyId const):
        (WebKit::RemoteMediaPlayerProxy::setLegacyCDMSession):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::setCDMSession):

2021-04-25  Jer Noble  <jer.noble@apple.com>

        [GPUP][iOS] Silent video playback can interrupt system audio
        https://bugs.webkit.org/show_bug.cgi?id=225031
        <rdar://76652073>

        Reviewed by Eric Carlson.

        When the WebContent process asks the GPU Process to set the AVAudioSession audio session
        category, the GPU Process as an optimization returns early if the session category being
        requested is the same as has already been set. However, the default value of the category
        is "None" (which translates to AVAudioSessionCategoryAmbient), and setting the category
        to "None" becomes a no-op due to this default. As such, the GPUP never sets the underlying
        AVAudioSession's category away from the default, which is AVAudioSessionCategorySoloAmbient,
        and thus will interrupt other audio during playback.

        Additionally, there's a subtle logic error where the audio session category is not changed
        when a given WebContent process (and it's RemoteAudioSession & Proxy) goes away.

        The fix for both of these issues is to re-calculate the correct audio session category
        when a RemoteAudioSessionProxy is added or removed from RemoteAudioSessionProxyManager.
        Since "None" is the default value for a RemoteAudioSessionProxy, the mere act of adding
        a new RemoteAudioSessionProxy (which is created when a WebContent process is created)
        will cause the audio session category to be set to AVAudioSessionCategoryAmbient.

        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::setCategory):
        * GPUProcess/media/RemoteAudioSessionProxy.h:
        * GPUProcess/media/RemoteAudioSessionProxyManager.cpp:
        (WebKit::RemoteAudioSessionProxyManager::addProxy):
        (WebKit::RemoteAudioSessionProxyManager::removeProxy):
        (WebKit::RemoteAudioSessionProxyManager::updateCategory):
        (WebKit::RemoteAudioSessionProxyManager::setCategoryForProcess): Deleted.
        * GPUProcess/media/RemoteAudioSessionProxyManager.h:

2021-04-25  Dean Jackson  <dino@apple.com>

        [WebXR] Should be enabled when WEBXR_INTERNALS is true
        https://bugs.webkit.org/show_bug.cgi?id=225026
        <rdar://problem/77111380>

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultWebXREnabled): Return true when HAVE(WEBXR_INTERNALS).

2021-04-24  Tim Horton  <timothy_horton@apple.com>

        Changing the source of a model element with clipping applied does not update the model
        https://bugs.webkit.org/show_bug.cgi?id=224917

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.h:
        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteModelHosting.mm:
        (WebKit::PlatformCALayerRemoteModelHosting::dumpAdditionalProperties):
        Add a bit to platformLayerTreeAsText() that makes PlatformCALayerRemoteModelHosting
        dump the size of the model that it is hosting, which is used in the test for this bug.

2021-04-23  Kate Cheney  <katherine_cheney@apple.com>

        PCM: debug mode should send the second report on a 10 second delay after the first
        https://bugs.webkit.org/show_bug.cgi?id=225010
        <rdar://problem/77092303>

        Reviewed by John Wilander.

        Fix a bug in PCM debug mode where we don't set the timer for 10_s
        after sending the first report for an attribution.

        No new tests, this is debug mode only. Non-debug mode behavior is
        covered by existing tests, and I tested debug mode manually.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        If the attribution has been sent to only one endpoint, indicated by
        a non-null laterTimeToSend value, we should set the timer to be 10
        seconds if debug mode is enabled.

        Also, change the interval time from 1 minute to 10 seconds, because
        there was no good reason that it was 1 minute and we should be
        consistent. Also 1 minute is a long time to wait during a test.

2021-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275562.
        https://bugs.webkit.org/show_bug.cgi?id=225002

        Causes issues in iOS contextmenu animations and interactions
        with other popovers

        Reverted changeset:

        "[iOS] contextmenu hints can be clipped by the WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=224204
        https://trac.webkit.org/changeset/275562

2021-04-23  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r273154): fast/forms/ios/repeatedly-focus-offscreen-select.html is consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=224985
        <rdar://problem/77042177>

        Reviewed by Wenson Hsieh.

        The test is failing after r273154, which made <select> elements present
        a UIMenu rather than a popover. The old logic ensured popovers were not
        presented when the <select> element was offscreen (see r265117 for more
        information on why that behavior was necessary), but the new
        presentation omitted that logic.

        To achieve the correct behavior, and fix the failing test, <select>
        menus should not be presented when the element is offscreen.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker controlBeginEditing]):

2021-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276451.
        https://bugs.webkit.org/show_bug.cgi?id=224999

        Broke perf testing

        Reverted changeset:

        "[iOS] Update sandbox message filter syntax"
        https://bugs.webkit.org/show_bug.cgi?id=223384
        https://trac.webkit.org/changeset/276451

2021-04-23  Brent Fulgham  <bfulgham@apple.com>

        [iOS] GPU Process sandbox lacks IOMobileFramebufferUserClient method filter
        https://bugs.webkit.org/show_bug.cgi?id=224956
        <rdar://problem/68227590>

        Reviewed by Per Arne Vollan.

        This patch updates the GPU process sandbox to match the method filter used in the WebContent process
        so that we will retain consistent protections when activating the GPU Process. These are the same rules
        governing access to this resource when the GPU process is disabled, so should not create a change in behavior.

        We also remove unneeded telemetry to reduce messaging burden and avoid performance issues.

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

2021-04-23  BJ Burg  <bburg@apple.com>

        Web Inspector: [Cocoa] WKInspectorResourceURLSchemeHandler needs to serialize cleanup actions
        https://bugs.webkit.org/show_bug.cgi?id=224986
        <rdar://76768454>

        Reviewed by Devin Rousso.

        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm:
        (-[WKInspectorResourceURLSchemeHandler webView:startURLSchemeTask:]):
        Do cleanup on the main queue so that it can be serialized with reads.

        (-[WKInspectorResourceURLSchemeHandler webView:stopURLSchemeTask:]):
        Ensure that all removals from the map are processed before doing a lookup.

2021-04-23  Darin Adler  <darin@apple.com>

        Remove decoder memory allocations based on untrusted data (sizes) in the stream; related changes
        https://bugs.webkit.org/show_bug.cgi?id=224984

        Reviewed by Sam Weinig.

        * Platform/IPC/ArgumentCoders.h: Remove the calls to
        HashMap::reserveInitialCapacity and HashSet::reserveInitialCapacity, based
        on number read in from the decoder. This means there will be more wasted
        memory in these HashMap and HashSet objects, so we have to test to make
        sure this does not create a performance problem. But without this check,
        we are trying to allocate memory based on an unstrusted size.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<RefPtr<ApplePayError>>::encode): Removed the coder
        for a Vector of these RefPtr, replaced it with a coder for an individual one,
        allowing the Vector ArgumentCoder template to handle vector size and construction.
        One benefit is that this adds in a shrinkToFit and prevents us from making any
        separate mistake about pre-sizing the Vector here since we use shared code.
        (IPC::ArgumentCoder<RefPtr<ApplePayError>>::decode): Ditto.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<RefPtr<SecurityOrigin>>::encode): Ditto.
        (IPC::ArgumentCoder<RefPtr<SecurityOrigin>>::decode): Ditto.
        (IPC::ArgumentCoder<WebCore::CDMInstanceSession::KeyStatusVector>::encode):
        (IPC::ArgumentCoder<WebCore::CDMInstanceSession::KeyStatusVector>::decode):
        Removed unnecessary specialization for the KeyStatusVector. There is already
        an ArgumentCoder for Vector, for std::pair, for Ref<SharedBuffer>, and for
        enumerations like CDMKeyStatus, so there's no need to have a specialized
        coder for this. This function that we are removing had a call to
        reserveInitialCapacity, but the Vector ArgumentCoder template does not.

        * Shared/WebCoreArgumentCoders.h: Replaced the
        ArgumentCoder<Vector<RefPtr<WebCore::ApplePayError>>> specialization with
        ArgumentCoder<RefPtr<WebCore::ApplePayError>>. Removed the
        ArgumentCoder<WebCore::CDMInstanceSession::KeyStatusVector> specialization.

2021-04-23  Kate Cheney  <katherine_cheney@apple.com>

        Set proper network logging level for full web browsers
        https://bugs.webkit.org/show_bug.cgi?id=224982
        <rdar://problem/76903650>

        Reviewed by Brent Fulgham.

        Full web browsers have different low-level network logging requirements
        for ephemeral sessions.

        No new tests. There's no automated way to test if network level logs
        show up. I tested that logging is correct for web browser and non web
        browser apps manually.

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

2021-04-23  Chris Dumez  <cdumez@apple.com>

        Disable GPUProcess on shipping iOS
        https://bugs.webkit.org/show_bug.cgi?id=224897

        Reviewed by Eric Carlson.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultUseGPUProcessForCanvasRenderingEnabled):
        (WebKit::defaultUseGPUProcessForDOMRenderingEnabled):
        (WebKit::defaultUseGPUProcessForMediaEnabled):
        (WebKit::defaultUseGPUProcessForWebGLEnabled):
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):

2021-04-23  Youenn Fablet  <youenn@apple.com>

        Fix KVO for camera/microphone capture state WKWebView API
        https://bugs.webkit.org/show_bug.cgi?id=224922
        <rdar://problem/77008199>

        Reviewed by Eric Carlson.

        Add missing willChange observer call and migrate keys to API keys.
        Covered by API test.

        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::microphoneCaptureWillChange):
        (WebKit::PageClientImplCocoa::cameraCaptureWillChange):
        (WebKit::PageClientImplCocoa::microphoneCaptureChanged):
        (WebKit::PageClientImplCocoa::cameraCaptureChanged):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::microphoneCaptureWillChange):
        (WebKit::PageClient::cameraCaptureWillChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateReportedMediaCaptureState):

2021-04-23  Chris Dumez  <cdumez@apple.com>

        Improve our constructDeletedValue() template specializations
        https://bugs.webkit.org/show_bug.cgi?id=224889

        Reviewed by Darin Adler.

        Improve our constructDeletedValue() template specializations and make them more consistent:
        - Use placement-new instead of object assignment since we don't want/need to destroy the
          existing object (since it is uninitialized).
        - Do as little initialization as possible for performance reasons.

        * NetworkProcess/cache/NetworkCache.h:
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::NetworkCache::GlobalFrameID>::isDeletedValue):
        * Platform/IPC/StringReference.h:
        (WTF::HashTraits<IPC::StringReference>::constructDeletedValue):
        * Shared/CallbackID.h:
        (WTF::HashTraits<WebKit::CallbackID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::CallbackID>::isDeletedValue):

2021-04-23  Youenn Fablet  <youenn@apple.com>

        Handle rotation correctly in WebRTC GPUProcess rendering pipeline
        https://bugs.webkit.org/show_bug.cgi?id=224927
        <rdar://76915991>

        Reviewed by Eric Carlson.

        Instead of updating the inner layer, update the root layer.

        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
        (WebKit::RemoteSampleBufferDisplayLayer::updateAffineTransform):

2021-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement PageClient::makeViewBlank()
        https://bugs.webkit.org/show_bug.cgi?id=224236

        Reviewed by Chris Dumez.

        Make most of the changes in r275485 cross platform and implement PageClient::makeViewBlank() for the GTK port.

        * UIProcess/API/glib/WebKitUIClient.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::makeViewBlank):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSnapshot):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseMakeBlank):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
        (WebKit::WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate):
        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
        (WebKit::DrawingAreaCoordinatedGraphics::display):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didUpdateRendering):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::didUpdateRendering): Deleted.

2021-04-22  Jer Noble  <jer.noble@apple.com>

        [Mac] CMBaseClass object pointers can become unaligned on x86
        https://bugs.webkit.org/show_bug.cgi?id=224950
        <rdar://77020922>

        Reviewed by Eric Carlson.

        CMBaseClass has a 4-byte version member before its 8-byte pointers on x86. Deal with this
        the same way we do with other pointer-bearing, static, CM-type objects: enforce a 4-byte
        packing, and prepend the struct with another 4-byte object in order to force the pointers
        into 8-byte alignment.

        * Shared/mac/MediaFormatReader/CoreMediaWrapped.h:
        (WebKit::CoreMediaWrapped<Wrapped>::vTable):

2021-04-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r276397
        https://bugs.webkit.org/show_bug.cgi?id=224883

        Reviewed by Darin Adler.

        Use a range-based for loop when mapping FloatQuads in `sendTapHighlightForNodeIfNecessary`.
        No change in behavior.

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

2021-04-22  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remove useless 'network-outbound' rule from non-networking file rule
        https://bugs.webkit.org/show_bug.cgi?id=224940
        <rdar://problem/66583476>

        Reviewed by Per Arne Vollan.

        No new tests. No effect on behavior.

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

2021-04-22  BJ Burg  <bburg@apple.com>

        [Cocoa] re-enable test case WKInspectorDelegate.InspectorConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=224577
        <rdar://70505272>

        Reviewed by Devin Rousso.

        For the purposes of testing, we want to be able to issue a fetch() that will
        hit a custom URL scheme handler registered with _WKInspectorConfiguration.
        This is not allowed by the existing <meta> tag CSP directive list because 'connect-src *'
        does not allow connecting to arbitrary schemes, just arbitrary domains.

        To fix this, relax the 'connect-src' directive in Main.html and apply
        a dynamically-computed CSP directive using the 'Content-Security-Policy' HTTP
        response header. This is only sent for main resources (Main.html and Test.html)
        using the newly added inspector-resource: URL scheme handler.

        The dynamically computed directive explicitly allows 'self' and any other registered
        custom URL scheme handlers. WebKit ports which have not migrated away from file:///
        will only apply the weaker 'connect-src' directive from the <meta> tag after this change.

        Progresses an existing API test: WKInspectorDelegate.InspectorConfiguration.

        * UIProcess/API/Cocoa/_WKInspectorDelegate.h:
        * UIProcess/API/APIInspectorClient.h:
        (API::InspectorClient::frontendLoaded):
        * UIProcess/API/Cocoa/_WKInspectorPrivateForTesting.h:
        * UIProcess/API/Cocoa/_WKInspector.mm:
        * UIProcess/API/Cocoa/_WKInspectorTesting.mm:
        (JavaScriptSnippetToFetchURL):
        (-[_WKInspector _fetchURLForTesting:]):

        * UIProcess/Inspector/WebInspectorUIProxy.cpp:
        (WebKit::WebInspectorUIProxy::frontendLoaded): Notify the _WKInspectorDelegate
        adapter that the frontend has finished loading.

        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.h:
        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm:
        (-[WKInspectorResourceURLSchemeHandler allowedURLSchemesForCSP]):
        (-[WKInspectorResourceURLSchemeHandler setAllowedURLSchemesForCSP:]):
        (-[WKInspectorResourceURLSchemeHandler webView:startURLSchemeTask:]):
        Added. Keep track of allowed custom schemes and allowed main resources.
        Apply the CSP directive for main resource requests only.

        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController webViewConfiguration]):
        Set the allowed URL schemes property so the URL scheme handler can include
        the schemes in the dynamically computed 'connect-src' directive.

2021-04-22  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for WKWebView snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=224943

        Reviewed by Tim Horton.

        Add new trace points to make snapshotting-related issues easier to diagnose. In the UI
        process we start/end a trace scope when requested to snapshot, and before calling the
        client's completion handler.

        Trace CARenderServer snapshots which happen in the UI process, and in the web process, trace
        the start and end of the snapshot painting.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]):
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView requestSnapshot]):
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::paintSnapshotAtSize):

2021-04-22  Lauro Moura  <lmoura@igalia.com>

        Unreviewed. Guard doesPageNeedTCCD in platform COCOA after r274213
        https://bugs.webkit.org/show_bug.cgi?id=224951

        Silence -Wunused-function in non-cocoa platforms.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:

2021-04-22  Patrick Griffis  <pgriffis@igalia.com>

        [SOUP] Show more connection information in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=224873

        Show the h2 protocol as well as the connection identifier
        in the inspector.

        Reviewed by Adrian Perez de Castro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::gotHeadersCallback):
        (WebKit::soupHTTPVersionToString):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):

2021-04-22  Chris Dumez  <cdumez@apple.com>

        NowPlayingInfoForGPUManager::clearNowPlayingInfoPrivate() sometimes launches the GPUProcess on page close
        https://bugs.webkit.org/show_bug.cgi?id=224939

        Reviewed by Simon Fraser.

        Make sure NowPlayingInfoForGPUManager::clearNowPlayingInfoPrivate() never launches the GPUProcess. The GPU
        process already takes care of clearing now playing info on exit.

        * WebProcess/GPU/media/WebMediaStrategy.cpp:
        (WebKit::WebMediaStrategy::createNowPlayingManager const):

2021-04-22  Chris Dumez  <cdumez@apple.com>

        Call RemoteMediaEngineConfigurationFactory::registerFactory() in WebProcess::setUseGPUProcessForMedia()
        https://bugs.webkit.org/show_bug.cgi?id=224937

        Reviewed by Eric Carlson.

        Call RemoteMediaEngineConfigurationFactory::registerFactory() in WebProcess::setUseGPUProcessForMedia(),
        like we used to do, instead of doing it in the GPUProcessConnection constructor. It is safer to
        register the factory before we have a GPUProcessConnection and we wouldn't want things to behave
        differently depending on whether or not the GPUProcess is already launched. I made sure that this does
        not eagerly launch the GPUProcess.

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        (WebKit::GPUProcessConnection::mediaEngineConfigurationFactory): Deleted.
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setUseGPUProcessForMedia):
        (WebKit::WebProcess::mediaEngineConfigurationFactory):
        * WebProcess/WebProcess.h:

2021-04-22  Alex Christensen  <achristensen@webkit.org>

        Fix ENABLE macro around NetworkProcessConnection::connectToRTCDataChannelRemoteSource declaration
        https://bugs.webkit.org/show_bug.cgi?id=224938

        Reviewed by Chris Dumez.

        This matches the macro around the definition.

        * WebProcess/Network/NetworkProcessConnection.h:

2021-04-22  BJ Burg  <bburg@apple.com>

        v2: REGRESSION(r266890): [Cocoa] Fix API::InspectorClient leak
        https://bugs.webkit.org/show_bug.cgi?id=223899
        <rdar://problem/75249282>

        Reviewed by Devin Rousso.

        Address post-review feedback.

        * UIProcess/API/Cocoa/_WKInspectorTesting.mm:
        (-[_WKInspector _openURLExternallyForTesting:useFrontendAPI:]):

2021-04-22  Alex Christensen  <achristensen@webkit.org>

        Add some new messages.in files to the Mac CMake build

        * PlatformMac.cmake:

2021-04-22  Per Arne  <pvollan@apple.com>

        [iOS] Update sandbox message filter syntax
        https://bugs.webkit.org/show_bug.cgi?id=223384
        <rdar://problem/75531614>

        Reviewed by Brent Fulgham.

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

2021-04-22  Martin Robinson  <mrobinson@webkit.org>

        [GTK] Turn on editable <input type=date> and <input type=time> fields
        https://bugs.webkit.org/show_bug.cgi?id=224921

        Reviewed by Carlos Garcia Campos.

        Turn on editable date and time inputs for GTK.

        * SourcesGTK.txt: Add source file.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDateTimePicker): Added.
        * UIProcess/API/gtk/PageClientImpl.h: Added method declaration.
        * UIProcess/gtk/WebDateTimePickerGtk.cpp: Added. Stub for date/time picker which
        doesn't have any user interface. This will allow clients to use the editable shadow
        DOM date/time input editable fields.
        (WebKit::WebDateTimePickerGtk::create):
        (WebKit::WebDateTimePickerGtk::~WebDateTimePickerGtk):
        (WebKit::WebDateTimePickerGtk::WebDateTimePickerGtk):
        (WebKit::WebDateTimePickerGtk::endPicker):
        (WebKit::WebDateTimePickerGtk::showDateTimePicker):
        * UIProcess/gtk/WebDateTimePickerGtk.h: Added.

2021-04-22  Aditya Keerthi  <akeerthi@apple.com>

        Fix the tvOS build after r276325
        https://bugs.webkit.org/show_bug.cgi?id=224929
        <rdar://problem/77003408>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:

        [UIColor systemBackgroundColor] is SPI on tvOS.

        (-[WKDateTimePickerViewController viewDidLoad]):

        UIBlurEffectStyleSystemMaterial is not available on tvOS. Instead, use
        a UIView with a system background color as the background view.

2021-04-20  BJ Burg  <bburg@apple.com>

        v2: Web Inspector: exempt API::SharedJSContext from remote inspection and automatic inspection
        https://bugs.webkit.org/show_bug.cgi?id=224841
        <rdar://69386559>

        Reviewed by Devin Rousso.

        Use the RemoteInspector C SPI to temporarily turn off "allow remote inspection by default".

        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm:
        (API::SharedJSContext::ensureContext):

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] The Look Up text service popover should avoid covering selected text
        https://bugs.webkit.org/show_bug.cgi?id=224915
        rdar://75891746

        Reviewed by Megan Gardner.

        Adjust the presentation rect when showing the Look Up text service popup using the callout bar on iOS so that
        we use the entire bounds of the selection. Currently, we only use the first selection rect (top to bottom) as
        the presentation rect, which may cause the popup to obscure selected text.

        This seems to have been derived from iOS legacy web view behavior that dating back to rdar://7475904; while the
        exact reasoning for this is effectively lost to time, it's likely due to how there used to only be a single
        block selection rect in non-editable content in iOS 5 anyways, so taking only the first selection rect would not
        be incorrect. However, we now use character granularity selection everywhere in WebKit2, so this logic is no
        longer sensible.

        Test: TextServicesTests.LookUpPresentationRect

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

        Make a similar adjustment here, since this presentation rect is intended to match that of the Look Up popover.

2021-04-22  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Re-block access to SYS_setattrlist
        https://bugs.webkit.org/show_bug.cgi?id=224892
        <rdar://problem/74828532>

        Reviewed by Per Arne Vollan.

        No new tests. No change in behavior.

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

2021-04-22  Chris Dumez  <cdumez@apple.com>

        Call RemoteCDMFactory::registerFactory() in WebProcess::setUseGPUProcessForMedia()
        https://bugs.webkit.org/show_bug.cgi?id=224907

        Reviewed by Eric Carlson.

        Call RemoteCDMFactory::registerFactory() in WebProcess::setUseGPUProcessForMedia() like we
        did before r275887, instead of doing it in the GPUProcessConnection constructor. This is
        safer as it makes sure the CDMFactory gets registered even if the GPUProcess has not launched
        yet. This is also more consistent with what we do for LegacyCDM since Bug 224905.

        The MediaKeys API still seems functional after r275887 (unlike the LegacyCDM one) so it does
        not seem it caused obvious breakage. That said, it is still safer to restore pre-r275887
        behavior. There is also no drawback to restoring the previous behavior since I made sure the
        GPUProcess does not get launched eagerly.

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        (WebKit::GPUProcessConnection::dispatchMessage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setUseGPUProcessForMedia):
        (WebKit::WebProcess::cdmFactory):
        * WebProcess/WebProcess.h:

2021-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add support for preconnect
        https://bugs.webkit.org/show_bug.cgi?id=177934

        Reviewed by Sergio Villar Senin.

        Use new libsoup API to implement preconnect support.

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::createRequest):
        (WebKit::NetworkDataTaskSoup::resume):
        (WebKit::NetworkDataTaskSoup::preconnectCallback):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2021-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build error: Couldn't find include 'Soup-2.4.gir'
        https://bugs.webkit.org/show_bug.cgi?id=224926

        Reviewed by Philippe Normand.

        Use the right soup API version when generating the introspection.

        * PlatformGTK.cmake:

2021-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Web processes recreated after crashing are not created with the right contentSizeCategory
        https://bugs.webkit.org/show_bug.cgi?id=224916

        Reviewed by Tim Horton.

        * 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):

2021-04-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] GetDoubleClickTime() returns 0 in the non-interactive window station on Windows 10 version 2004
        https://bugs.webkit.org/show_bug.cgi?id=224793

        Reviewed by Don Olmstead.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::clickCount): Use WebCore::getDoubleClickTime instead of
        GetDoubleClickTime API.

2021-04-21  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Refactor SourceBuffer::enqueuedSamplesForTrackID() for testing purposes
        https://bugs.webkit.org/show_bug.cgi?id=224891

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
        (WebKit::RemoteSourceBufferProxy::enqueuedSamplesForTrackID):
        * GPUProcess/media/RemoteSourceBufferProxy.h:
        * GPUProcess/media/RemoteSourceBufferProxy.messages.in:
        * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
        (WebKit::SourceBufferPrivateRemote::bufferedSamplesForTrackId):
        (WebKit::SourceBufferPrivateRemote::enqueuedSamplesForTrackID):
        * WebProcess/GPU/media/SourceBufferPrivateRemote.h:

2021-04-21  John Wilander  <wilander@apple.com>

        PCM: Remove PrivateClickMeasurement::PcmDataCarried::NonPersonallyIdentifiable overrides in testing
        https://bugs.webkit.org/show_bug.cgi?id=224885
        <rdar://problem/76973184>

        Reviewed by Brent Fulgham.

        We had a temporary override to PrivateClickMeasurement::PcmDataCarried::NonPersonallyIdentifiable
        in WebKit::PrivateClickMeasurementManager::getTokenPublicKey() and
        WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken().

        This patch removes those overrides since the network load hang has been resolved.

        No new tests. Existing tests cover this code.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):

2021-04-21  Chris Dumez  <cdumez@apple.com>

        Regression(r275887) open.spotify.com says Safari is not supported
        https://bugs.webkit.org/show_bug.cgi?id=224905
        <rdar://76982108>

        Reviewed by Eric Carlson.

        Move legacyCDMFactory() getter from GPUProcessConnection to WebProcess so that
        we can query it without having to launch the GPUProcess. This means we can
        call legacyCDMFactory().registerFactory() inside of WebProcess::setUseGPUProcessForMedia()
        (like before r275887) instead of doing it in the GPUProcessConnection constructor.

        As a result, calls to WebKitMediaKeys.isTypeSupported() return accurate results
        even if the GPUProcess is not launched yet. Calling WebKitMediaKeys.isTypeSupported() ends
        up launching the GPU Process, as is expected.

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        (WebKit::GPUProcessConnection::legacyCDMFactory): Deleted.
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::setCDM):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setUseGPUProcessForMedia):
        (WebKit::WebProcess::legacyCDMFactory):
        * WebProcess/WebProcess.h:

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce helper methods to map FloatQuads to and from content and root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=224883

        Reviewed by Tim Horton.

        Use the new helper methods.

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

        Note that we previously rounded absolute quads to the nearest integer when mapping through root view
        coordinates. From <https://bugs.webkit.org/show_bug.cgi?id=128277#c2>, this seemed unintentional to begin with,
        and we should be able to use the `FloatPoint` conversion methods instead.

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Fix internal builds after r276325
        https://bugs.webkit.org/show_bug.cgi?id=224896

        Reviewed by Tim Horton.

        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePickerViewController datePickerInsets]):
        (-[WKDateTimePicker _contextMenuInteraction:styleForMenuWithConfiguration:]):

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Update font for group headers in the <select multiple> picker
        https://bugs.webkit.org/show_bug.cgi?id=224823
        <rdar://problem/76785841>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPickerTableViewController tableView:heightForHeaderInSection:]):

        The new font's size can varying depending on the user's Dynamic Type
        setting. Consequently, the height of the header must now be computed
        dynamically.

        (-[WKSelectPickerTableViewController tableView:viewForHeaderInSection:]):
        (-[WKSelectPickerTableViewController groupHeaderFont]):

        Use a font with text style UIFontTextStyleTitle3 and a semibold weight,
        matching other system grouped headers. The font is not saved as an
        instance variable so that an up-to-date lineHeight can be obtained in
        "tableView:heightForHeightInSection:".

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Text selection in image overlays should not be limited to rectilinear quads
        https://bugs.webkit.org/show_bug.cgi?id=224837
        <rdar://76829981>

        Reviewed by Tim Horton.

        See WebCore ChangeLog for more details.

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

        Encode the `SelectionGeometry` by serializing a `FloatQuad` instead of an enclosing rect.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::operator==):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView markedTextRange]):
        * UIProcess/ios/WKTextSelectionRect.h:
        * UIProcess/ios/WKTextSelectionRect.mm:
        (-[WKTextSelectionRectCustomHandleInfo initWithFloatQuad:]):
        (-[WKTextSelectionRectCustomHandleInfo bottomLeft]):
        (-[WKTextSelectionRectCustomHandleInfo topLeft]):
        (-[WKTextSelectionRectCustomHandleInfo bottomRight]):
        (-[WKTextSelectionRectCustomHandleInfo topRight]):
        (-[WKTextSelectionRect initWithCGRect:]):
        (-[WKTextSelectionRect initWithSelectionGeometry:scaleFactor:]):
        (-[WKTextSelectionRect _path]):
        (-[WKTextSelectionRect _customHandleInfo]):

        Implement SPI methods on `UITextSelectionRect` to render text selection UI using quads instead of rects.

        (-[WKTextSelectionRect initWithSelectionGeometry:]): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::convertContentToRootView):

2021-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid April 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=222652
        <rdar://problem/75262285>

        Unreviewed non-unified build fixes.

        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp: Add missing
        NetworkProcessConnection.h include.
        (WebKit::RTCDataChannelRemoteManager::connectToRemoteSource): Sprinkle missing WebCore::
        namespace prefixes.
        (WebKit::RTCDataChannelRemoteManager::postTaskToHandler): Ditto.
        (WebKit::RTCDataChannelRemoteManager::sourceFromIdentifier): Ditto.
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp: Add missing WebProcess.h include.

2021-04-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        Fix build break after r276363
        https://bugs.webkit.org/show_bug.cgi?id=224881

        Unreviewed, build fix.

        Fix build break after r276363
        WebGL GPUP crashes when preparing for display due to off-thread WeakPtr access (IOSURFACE_SET_OWNERSHIP_IDENTITY)

        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:

2021-04-21  Kate Cheney  <katherine_cheney@apple.com>

        Followup change to bug 224779 based on post-land review comment.
        https://bugs.webkit.org/show_bug.cgi?id=224779
        <rdar://problem/76738879>

        Reviewed by Chris Dumez.

        Remove unnecessary document check.

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

2021-04-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add OpenGLES2 targets
        https://bugs.webkit.org/show_bug.cgi?id=224786

        Reviewed by Adrian Perez de Castro.

        Use the OpenGL::GLES target.

        * CMakeLists.txt:

2021-04-21  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Refactor the implementation of MediaSource::buffered()
        https://bugs.webkit.org/show_bug.cgi?id=224848

        Reviewed by Eric Carlson.

        Add an IPC message `BufferedChanged` to forward the buffered ranges of
        `MediaSource` from a WebContent process to the GPU process.

        * GPUProcess/media/RemoteMediaSourceProxy.cpp:
        (WebKit::RemoteMediaSourceProxy::buffered const):
        (WebKit::RemoteMediaSourceProxy::bufferedChanged):
        * GPUProcess/media/RemoteMediaSourceProxy.h:
        * GPUProcess/media/RemoteMediaSourceProxy.messages.in:
        * WebProcess/GPU/media/MediaSourcePrivateRemote.cpp:
        (WebKit::MediaSourcePrivateRemote::bufferedChanged):
        * WebProcess/GPU/media/MediaSourcePrivateRemote.h:

2021-04-21  Aditya Keerthi  <akeerthi@apple.com>

        Fix the watchOS build after r276325
        https://bugs.webkit.org/show_bug.cgi?id=224868
        <rdar://problem/76938541>

        Reviewed by Wenson Hsieh.

        r276325 broke the watchOS build by using UIBlurEffectStyleSystemMaterial
        in WKDateTimeInputControl.mm.

        However, while we have been compiling WKDateTimeInputControl for
        watchOS, the class is unused. This is due to the fact that watchOS has
        a separate date/time picker implementation. Rather than conditionally
        compiling the UIBlurEffectStyleSystemMaterial logic (which would
        involve writing additional logic to make sure WKDateTimeInputControl
        still compiles on watchOS), we can simply stop building
        WKDateTimeInputControl on watchOS.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView dateTimeInputControl:]):
        (-[WKContentView timePickerValueHour:]):
        (-[WKContentView timePickerValueMinute:]):
        * UIProcess/ios/forms/WKDateTimeInputControl.h:
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:

2021-04-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL GPUP crashes when preparing for display due to off-thread WeakPtr access (IOSURFACE_SET_OWNERSHIP_IDENTITY)
        https://bugs.webkit.org/show_bug.cgi?id=224864

        Reviewed by Chris Dumez.

        Do not navigate WeakPtr in RemoteGraphicsContextGL thread.
        Instead, cache the ownership identity tag during constructor
        in main thread.

        No new tests, caught with existing tests when the define
        is enabled.

        * GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
        (WebKit::RemoteGraphicsContextGLCocoa::RemoteGraphicsContextGLCocoa):
        (WebKit::RemoteGraphicsContextGLCocoa::prepareForDisplay):

2021-04-21  Simon Fraser  <simon.fraser@apple.com>

        Enhance scrolling-related trace points
        https://bugs.webkit.org/show_bug.cgi?id=224852

        Reviewed by Tim Horton.

        Add a new trace point in EventDispatcher::displayWasRefreshed() so we can tell when the
        WebProcess receives displayDidRefresh IPC (this can sometimes be delayed by other work that
        might share the same dispatch thread).

        We repurpose the existing DisplayRefreshDispatchingToMainThread which is the WK1 equivalent.

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

2021-04-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE Cog build fix after r276316

        * wpe/wpe-webkit-uninstalled.pc.in: Adjust paths once again.

2021-04-21  Tim Horton  <timothy_horton@apple.com>

        Long-pressing a data detectors link causes the link to be followed
        https://bugs.webkit.org/show_bug.cgi?id=224847
        <rdar://problem/72889738>

        Reviewed by Wenson Hsieh.

        On iOS, it is possible for a gesture to be externally cancelled (in this case,
        when a data detectors context menu is presented by long pressing a link).
        This is reported to WKMouseGestureRecognizer as "touches cancelled".
        Currently, WKMouseGestureRecognizer just runs with that as a normal
        "mouse button release" event, which then causes the link that you're long
        pressing to also be followed.

        * Shared/NativeWebMouseEvent.h:
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::encode const):
        (WebKit::WebMouseEvent::decode):
        * Shared/WebMouseEvent.h:
        (WebKit::WebMouseEvent::gestureCancelled const):
        * Shared/ios/NativeWebMouseEventIOS.mm:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * UIProcess/ios/WKMouseGestureRecognizer.mm:
        (-[WKMouseGestureRecognizer createMouseEventWithType:wasCancelled:]):
        (-[WKMouseGestureRecognizer touchesBegan:withEvent:]):
        (-[WKMouseGestureRecognizer touchesMoved:withEvent:]):
        (-[WKMouseGestureRecognizer touchesEnded:withEvent:]):
        (-[WKMouseGestureRecognizer touchesCancelled:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverEntered:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverMoved:withEvent:]):
        (-[WKMouseGestureRecognizer _hoverExited:withEvent:]):
        (-[WKMouseGestureRecognizer createMouseEventWithType:]): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        Add a bit to WebKit::WebMouseEvent indicating that the gesture it is a part of
        was cancelled. This will only be set on the mouse release event dispatched from
        touchesCancelled from WKMouseGestureRecognizer, and will cause WebCore to
        avoid dispatching the click event, as you would on macOS if you e.g.
        moved the mouse too far from its origin during the press.

        Plumb the bit all the way from WKMouseGestureRecognizer, through the
        NativeWebMouseEvent constructor, to WebMouseEvent, and then check it
        and call invalidateClick() immediately before handing WebCore the
        mouse release event, to avoid the click event.

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid triggering image extraction for animated images
        https://bugs.webkit.org/show_bug.cgi?id=224851

        Reviewed by Megan Gardner.

        Avoid making image extraction requests for animated images by adding an optional `AllowsAnimatedImages`
        argument to `createShareableBitmap`, and passing in `AllowsAnimatedImages::No` in the case where we're creating
        a shareable bitmap for image extraction.

        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.cpp:
        (WebKit::createShareableBitmap):
        * WebProcess/WebCoreSupport/ShareableBitmapUtilities.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::requestImageExtraction):

2021-04-21  Megan Gardner  <megan_gardner@apple.com>

        Support scrolling to a selected AppHighlight
        https://bugs.webkit.org/show_bug.cgi?id=224773

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (restoreHighlight):
        (-[WKWebView _restoreAppHighlights:]):
        (-[WKWebView _restoreAndScrollToAppHighlight:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::restoreAppHighlightsAndScrollToIndex):
        (WebKit::WebPageProxy::restoreAppHighlights): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreAppHighlightsAndScrollToIndex):
        (WebKit::WebPage::restoreAppHighlights): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-04-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        Connection::m_mainThread is unused
        https://bugs.webkit.org/show_bug.cgi?id=224806

        Reviewed by Darin Adler.

        Remove unused Connection::m_mainThread.

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

2021-04-20  Ian Gilbert  <iang@apple.com>

        Crash due to VectorBuffer pre-allocation failure
        https://bugs.webkit.org/show_bug.cgi?id=224840

        Reviewed by Sam Weinig.

        Vector decoder could attempt to allocate a large buffer and on failure would crash.
        Changed decode to avoid allocating a Vector based on the decoded size.

        Test: ipc/large-vector-allocate-failure-crash.html

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<Vector<RefPtr<ApplePayError>>>::decode):

2021-04-20  Chris Dumez  <cdumez@apple.com>

        If an idle GPUProcess doesn't exit under memory pressure because it just launched, check again later
        https://bugs.webkit.org/show_bug.cgi?id=224829

        Reviewed by Darin Adler.

        In r276305, I made it so that the GPUProcess does not exit under memory pressure when idle
        if it launched less than 5 seconds ago. This gives the WebProcess time to schedule work with
        the GPUProcess after launching it and makes sure we don't repeatedly / frequently exit &
        relaunch the GPUProcess.

        In this patch, I am tweaking the policy so that if we could have exited but didn't because
        the GPUProcess was too young (less than 5 seconds old), then I schedule a timer for this
        5 second deadline to check again if the GPUProcess could exit (meaning that it is unused).
        When the timer fires, the process doesn't have to be under memory pressure still in order
        to exit, it just needs to be idle. I figured the fact that we were under memory pressure
        less than 5 seconds ago should be enough incentive to exit if idle.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::GPUProcess):
        (WebKit::GPUProcess::canExitUnderMemoryPressure const):
        * GPUProcess/GPUProcess.h:

2021-04-20  Devin Rousso  <drousso@apple.com>

        Parse `theme_color` in web application manifests and pass it along to `-[WKWebView themeColor]`
        https://bugs.webkit.org/show_bug.cgi?id=224796

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/_WKApplicationManifest.h:
        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
        (-[_WKApplicationManifest initWithCoder:]):
        (-[_WKApplicationManifest encodeWithCoder:]):
        (-[_WKApplicationManifest themeColor]): Added.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::themeColorChanged const):
        (WebKit::WebChromeClient::pageExtendedBackgroundColorDidChange const):
        Drive-by: Remove the `Color` parameter since it's not actually used in the WebProcess.

2021-04-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Lots of spurious -Wnonnull warnings with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224452

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginView.cpp:

2021-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename WebCore::SelectionRect to WebCore::SelectionGeometry
        https://bugs.webkit.org/show_bug.cgi?id=224820

        Reviewed by Megan Gardner.

        See WebCore/ChangeLog for more details.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode const):
        (WebKit::EditorState::PostLayoutData::decode):
        (WebKit::operator<<):
        * Shared/EditorState.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<SelectionGeometry>::encode):
        (IPC::ArgumentCoder<SelectionGeometry>::decode):
        (IPC::ArgumentCoder<SelectionRect>::encode): Deleted.
        (IPC::ArgumentCoder<SelectionRect>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationRequest.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::WKSelectionDrawingInfo::WKSelectionDrawingInfo):
        (WebKit::operator==):
        (WebKit::operator<<):
        (-[WKContentView _pointIsInsideSelectionRect:outBoundingRect:]):
        (-[WKContentView _shouldToggleSelectionCommandsAfterTapAt:]):
        (-[WKContentView webSelectionRectsForSelectionGeometries:]):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _lookupForWebView:]):
        (-[WKContentView _shareForWebView:]):
        (-[WKContentView _translateForWebView:]):
        (-[WKContentView _addShortcutForWebView:]):
        (-[WKContentView _showDictionary:]):
        (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]):
        (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView webSelectionRectsForSelectionRects:]): Deleted.
        * UIProcess/ios/WKTextSelectionRect.h:
        * UIProcess/ios/WKTextSelectionRect.mm:
        (-[WKTextSelectionRect initWithCGRect:]):
        (-[WKTextSelectionRect initWithSelectionGeometry:]):
        (-[WKTextSelectionRect rect]):
        (-[WKTextSelectionRect writingDirection]):
        (-[WKTextSelectionRect containsStart]):
        (-[WKTextSelectionRect containsEnd]):
        (-[WKTextSelectionRect isVertical]):
        (-[WKTextSelectionRect initWithSelectionRect:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::requestRectsForGranularityWithSelectionOffset):
        (WebKit::WebPageProxy::requestRectsAtSelectionOffsetWithText):
        (WebKit::WebPageProxy::selectionBoundingRectInRootViewCoordinates const):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::convertContentToRootView):
        (WebKit::WebPage::getPlatformEditorState const):
        (WebKit::WebPage::getRectsForGranularityWithSelectionOffset):
        (WebKit::WebPage::getRectsAtSelectionOffsetWithText):
        (WebKit::WebPage::requestAutocorrectionData):
        (WebKit::convertContentToRootViewSelectionRects): Deleted.

2021-04-20  Kate Cheney  <katherine_cheney@apple.com>

        Preconnect tasks and preflight checks do not correctly mark app-bound context string
        https://bugs.webkit.org/show_bug.cgi?id=224779
        <rdar://problem/76738879>

        Reviewed by Brent Fulgham.

        We are using request.firstPartyForCookies() to set the app-bound request
        context as of https://bugs.webkit.org/show_bug.cgi?id=224311. Some
        cases like preconnect tasks and CORS preflight requests don't set this
        value because it is not needed for cookie purposes. Since we are now
        using it for app-bound requests, and the context is needed for all
        network connections, even those that don't send bytes, we should set
        the firstPartyForCookies for these cases.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::preconnectTo):
        This is the code path for preconnecting to the main resource load, so
        we can use the given URL as the first party.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::preconnectTo):
        This is the code path for sub resources. We should use the document
        firstPartyForCookies value.

2021-04-20  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Update date/time picker appearance
        https://bugs.webkit.org/show_bug.cgi?id=224794
        <rdar://problem/76785859>

        Reviewed by Wenson Hsieh.

        Date/time pickers should have a system material background and should
        avoid obscuring the associated element when possible.

        * Platform/spi/ios/UIKitSPI.h:

        Add new SPI declarations to support date/time picker modifications.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (createTargetedPreview):
        (createFallbackTargetedPreview):
        (-[WKContentView _createTargetedContextMenuHintPreviewForFocusedElement]):

        Set the UITargetedPreview background color to clearColor when
        presenting a date/time picker, so that the presented picker has a
        visible material effect. Without this change, the picker would have a
        solid white or black background.

        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePickerViewController initWithDelegate:]):
        (-[WKDateTimePickerViewController viewDidLoad]):

        Add a system material background to the date picker using
        UIVisualEffectView.

        (-[WKDateTimePickerViewController datePickerChanged:]):
        (-[WKDateTimePickerViewController resetButtonPressed:]):
        (-[WKDateTimePickerViewController doneButtonPressed:]):
        (-[WKDateTimePickerViewController datePickerInsets]):
        (-[WKDateTimePickerViewController preferredDatePickerSize]):
        (-[WKDateTimePickerViewController preferredContentSize]):
        (-[WKDateTimePickerViewController date]):
        (-[WKDateTimePickerViewController setDate:]):
        (-[WKDateTimePickerViewController setDatePickerMode:]):
        (-[WKDateTimePickerViewController timeZone]):
        (-[WKDateTimePickerViewController setTimeZone:]):
        (-[WKDateTimePickerViewController calendar]):
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKDateTimePicker _preferredEdgeInsetsForDateTimePicker]):

        Attempt to present the date picker in a way that does not obscure the
        element.

        (-[WKDateTimePicker _contextMenuInteraction:styleForMenuWithConfiguration:]):
        (-[WKDateTimePicker contextMenuInteraction:configurationForMenuAtLocation:]):
        (-[WKDateTimePicker dateTimePickerViewControllerDidChangeDate:]):
        (-[WKDateTimePicker dateTimePickerViewControllerDidPressResetButton:]):
        (-[WKDateTimePicker dateTimePickerViewControllerDidPressDoneButton:]):
        (-[WKDateTimePicker shouldForceGregorianCalendar]):
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker _timeZoneOffsetFromGMT:]):
        (-[WKDateTimePicker _sanitizeInputValueForFormatter:]):
        (-[WKDateTimePicker dateFormatterForPicker]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker setDateTimePickerToInitialValue]):
        (-[WKDateTimePicker controlView]):

        Updated this method to return nil, matching other form controls that
        do not present a keyboard input view (example: <select>).

        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker controlEndEditing]):
        (-[WKDateTimePicker calendarType]):
        (-[WKDateTimePicker hour]):
        (-[WKDateTimePicker minute]):
        (-[WKDateTimePicker setHour:minute:]):

2021-04-20  Keith Miller  <keith_miller@apple.com>

        FullGCActivityCallback should use the percentage of pages uncompressed in RAM to determine deferral.
        https://bugs.webkit.org/show_bug.cgi?id=224817

        Reviewed by Filip Pizlo.

        Add mincore to the acceptable syscall list.

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

2021-04-20  Jiewen Tan  <jiewen_tan@apple.com>

        Platform Key registration does not prompt for user password when in biometric lockout
        https://bugs.webkit.org/show_bug.cgi?id=224828
        <rdar://76907840>

        Reviewed by Brent Fulgham.

        Covered by manul tests.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):

2021-04-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Don't use FORWARDING_HEADERS_DIR for JSC GLib headers
        https://bugs.webkit.org/show_bug.cgi?id=224821

        Reviewed by Michael Catanzaro.

        Use JavaScriptCoreGLib_FRAMEWORK_HEADERS_DIR and JavaScriptCoreGLib_DERIVED_SOURCES_DIR
        for GLib JSC headers instead of FORWARDING_HEADERS_DIR and DERIVED_SOURCES_DIR.

        * PlatformGTK.cmake:

2021-04-20  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Add additional logging to help identify SSO dialog dismissals
        https://bugs.webkit.org/show_bug.cgi?id=224703
        <rdar://problem/76783787>

        Reviewed by Maciej Stachowiak.

        Add logging around the SSO sheet life cycle to help identify edge cases..."

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

2021-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Mac Catalyst] Adopt UIView API to avoid showing focus rings around WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=224819

        Reviewed by Tim Horton.

        Replace our usage of the deprecated `-[UIView _setFocusRingType:]` method with API on `UIView` that achieves
        the same effect.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):

2021-04-20  Alex Christensen  <achristensen@webkit.org>

        Fix use-after-move introduced in r275407
        https://bugs.webkit.org/show_bug.cgi?id=224045

        Reviewed by Darin Adler.

        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):

2021-04-20  Marco Felsch  <m.felsch@pengutronix.de>

        [WPE] QML WPEView dynamic loading fails
        https://bugs.webkit.org/show_bug.cgi?id=224814

        Reviewed by Philippe Normand.

        The scene graph can be initialized when we receive window handle change
        notification and so we will not receive a scenegraph initialization
        notification. In such case we need to initzialize it ourself.

        No new tests. Testing can be done if the WPEView is moved to a
        QML component which gets loaded later on demand.

        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::configureWindow):

2021-04-20  Marco Felsch  <m.felsch@pengutronix.de>

        [WPE][Qt] Fix build failure after r270690
        https://bugs.webkit.org/show_bug.cgi?id=223070

        Reviewed by Philippe Normand.

        WPE fails to build with `-DENABLE_WPE_QT_API=ON` after adapting the
        visibility for linked frameworks done by r270690.

        The reason for that is that the visibility is now more strict and we
        have to add the WTF dependecy or drop the WTF fast-allocate mechanism.

        Adding the WTF dependency is a bit odd since this would staticly link
        the WTF lib into a small wrapper lib. Also this lib has nothing to do
        with Webkit at all. It is just a QT adaption library.

        No new tests, it can be build again.

        * UIProcess/API/wpe/qt/WPEQtView.cpp:
        (WPEQtView::notifyLoadChangedCallback):
        (WPEQtView::notifyLoadFailedCallback):
        (WPEQtView::runJavaScript):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.cpp:
        (WPEQtViewBackend::create):
        * UIProcess/API/wpe/qt/WPEQtViewBackend.h:
        * UIProcess/API/wpe/qt/WPEQtViewLoadRequest.h:

        Drop WTF usage and use system allocator since the lib has nothing to do
        with Webkit at all.

2021-04-20  Basuke Suzuki  <basuke.suzuki@sony.com>

        Remove UNUSED warnings based on the configuration.
        https://bugs.webkit.org/show_bug.cgi?id=224787

        Reviewed by Darin Adler.

        Added UNUSED_VARIABLE or its variant to suppress warnings based on the configuration.

        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
        (WebKit::ResourceLoadStatisticsStore::debugLogDomainsInBatches):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestStorageSpace):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::pageIDFromWebFrame):
        (WebKit::frameIDFromWebFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prepareToSuspend):

2021-04-20  Chris Dumez  <cdumez@apple.com>

        Make sure we don't exit the GPUProcess too frequently while under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=224798

        Reviewed by Darin Adler.

        We've recently started to exit the GPUProcess if idle and under memory pressure, in order
        to save memory. This is great but we wouldn't want to repeatedly exit and relaunch the
        GPUProcess while under memory pressure either. To address this, I am adding a condition to
        GPUProcess::canExitUnderMemoryPressure() to make sure we don't exit the GPUProcess if it's
        been running for less than 5 seconds.

        To avoid generating flakiness in our benchmarks and API tests, I am disabling this condition
        if the memory pressure is simulated (via `notifyutil -p org.WebKit.lowMemory`).

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::canExitUnderMemoryPressure const):
        * GPUProcess/GPUProcess.h:

2021-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r276271.

        It did not fix the Canvas-Arcs subtest on the bots

        Reverted changeset:

        "MotionMark's Canvas-Arcs subtest is broken if the GPUProcess
        is not yet running"
        https://bugs.webkit.org/show_bug.cgi?id=224778
        https://commits.webkit.org/r276271

2021-04-19  Darin Adler  <darin@apple.com>

        Refactor sorted array mapping machinery in LocaleToScriptMapping.cpp for reuse elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=224733

        Reviewed by Yusuke Suzuki.

        * NetworkProcess/PrivateClickMeasurementManager.h: Removed unused include of HashMap.h.
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h: Ditto.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::createSelectorExceptionMap): Deleted.
        (WebKit::commandNameForSelectorName): Use SortedArrayMap instead of HashMap.

2021-04-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL GPU Process implementation should use thread safety annotations
        https://bugs.webkit.org/show_bug.cgi?id=224752

        Reviewed by Kenneth Russell.

        Make WebGL GPU process implementation use thread safety analysis.

        Mark up the guarded variables in IPC Stream implementation using
        clang thread safety analysis annotations.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::RemoteGraphicsContextGL::paintImageDataToImageBuffer):
        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::dispatch):
        (IPC::StreamConnectionWorkQueue::addStreamConnection):
        (IPC::StreamConnectionWorkQueue::removeStreamConnection):
        (IPC::StreamConnectionWorkQueue::processStreams):
        * Platform/IPC/StreamConnectionWorkQueue.h:
        * Platform/IPC/StreamServerConnection.cpp:
        (IPC::StreamServerConnectionBase::enqueueMessage):
        * Platform/IPC/StreamServerConnection.h:
        (IPC::StreamServerConnection<Receiver>::startReceivingMessages):
        (IPC::StreamServerConnection<Receiver>::stopReceivingMessages):
        (IPC::StreamServerConnection<Receiver>::dispatchStreamMessages):
        (IPC::StreamServerConnection<Receiver>::dispatchOutOfStreamMessage):

2021-04-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION(r224516): Remote WebGL Context is not create due to RemoteRenderingBackend not being created
        https://bugs.webkit.org/show_bug.cgi?id=224751

        Reviewed by Chris Dumez.

        Fix WebGL GPU process after r275922.

        RemoteRenderingBackend must be created so that RemoteGraphicsContextGL
        can take a reference of it.

        Fixes layout test failures when run with --gpu-process.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::ensureBackendCreated):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createGraphicsContextGL const):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r276189): GPUProcess.WebProcessTerminationAfterTooManyGPUProcessCrashes is crashing
        https://bugs.webkit.org/show_bug.cgi?id=224790
        <rdar://problem/76869318>

        Reviewed by Darin Adler.

        GPUProcess.WebProcessTerminationAfterTooManyGPUProcessCrashes is intentionally repeatedly
        killing the GPUProcess. As a result, the GPUProcess may get killed very shortly after
        a relaunch and the RemoteAudioDestinationManager::StartAudioDestination synchronous IPC
        may fail if it is ongoing at the time of the crash. This would cause m_destinationID to
        not get initialized and then get sent as IPC parameter, thus crashing.

        pre-r276189, we were not crashing because m_destinationID was not reset on crash and we
        would thus send IPC for a destination that does not exist but at least the destinationID
        would not be 0. This patch makes sure we don't try and send IPC at all when m_destinationID
        is 0.

        * WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
        (WebKit::RemoteAudioDestinationProxy::connection):
        (WebKit::RemoteAudioDestinationProxy::startRendering):
        (WebKit::RemoteAudioDestinationProxy::stopRendering):
        (WebKit::RemoteAudioDestinationProxy::storageChanged):
        * WebProcess/GPU/media/RemoteAudioDestinationProxy.h:

2021-04-19  Jer Noble  <jer.noble@apple.com>

        [iOS] Media playback continues after backgrounding hosting application
        https://bugs.webkit.org/show_bug.cgi?id=224776
        <rdar://75707807>

        Reviewed by Eric Carlson.

        Tested by existing API test: WKWebViewPausePlayingAudioTests.OutOfWindow

        When the MediaSessionHelperIOS was moved into the GPU process, no object remains listening for the
        UIApplication{Will,Did}Enter{Foreground,Background}Notification rebroadcasted by WebPageIOS.

        Rather than just rebroadcast the UIKit notification to all listeners within the WebContent process,
        which may or may not be listening, just tell the current PlatformMediaSessionManager directly.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillResignActive):
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):
        (WebKit::WebPage::applicationDidBecomeActive):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        MotionMark's Canvas-Arcs subtest is broken if the GPUProcess is not yet running
        https://bugs.webkit.org/show_bug.cgi?id=224778

        Reviewed by Simon Fraser.

        I recently made changes so that the GPUProcess is only launched when it is needed. This means
        that until MotionMark's Canvas-Arcs subtest, the GPUProcess is usually not yet running. As a
        result, RemoteRenderingBackendProxy::createImageBuffer() ends up launching the GPUProcess
        and sending the GPUConnectionToWebProcess::CreateRenderingBackend and
        RemoteRenderingBackend::CreateImageBuffer IPC right away. We seem to have a synchronization
        issue because when this happens, the rendering for the Canvas-Arcs subtest is visibly broken
        and its score is very low (< 6, instead of > 600).

        Making the GPUConnectionToWebProcess::CreateRenderingBackend synchronous again (I made it
        async recently) seems to address the synchronization issue and restores correct behavior on
        MotionMark. I am therefore making this IPC synchronous again in this patch to get benchmark
        coverage again while I investigate the root cause offline.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        Fix races in LibWebRTCCodecs introduced in r276214
        https://bugs.webkit.org/show_bug.cgi?id=224758

        Reviewed by Youenn Fablet.

        After r276214, LibWebRTCCodecs's createDecoder() / createEncoder() may hop to the main
        thread to initialize the connection to the GPUProcess. If releaseDecoder() / releaseEncoder()
        were to get called very shortly after, they may win the race and have no decoder / encoder
        to release, since they are dispatched directly to the background thread. To address the issue,
        we now call ensureGPUProcessConnectionAndDispatchToThread() in releaseDecoder(), releaseEncoder()
        and initializeEncoder().

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::releaseDecoder):
        (WebKit::LibWebRTCCodecs::releaseEncoder):
        (WebKit::LibWebRTCCodecs::initializeEncoder):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        Add more GPUProcess release logging to facilitate debugging
        https://bugs.webkit.org/show_bug.cgi?id=224761

        Reviewed by Darin Adler.

        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::GPUProcess):
        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
        (WebKit::GPUProcess::removeGPUConnectionToWebProcess):
        (WebKit::GPUProcess::initializeGPUProcess):

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        Add -Wthread-safety to compile flags.

        * Configurations/Base.xcconfig:

2021-04-18  Chris Dumez  <cdumez@apple.com>

        Update LibWebRTCCodecsProxy to use a Lock
        https://bugs.webkit.org/show_bug.cgi?id=224728

        Reviewed by Darin Adler.

        Update LibWebRTCCodecsProxy to use a Lock, instead of a std::atomic<bool> that
        has to be kept up to date. I think this simplifies the code a bit. Adding / Removing
        encoder / decoder is not very hot code as far as I know and there will very rarely
        be contention since allowsExitUnderMemoryPressure() is only called on memory pressure.

        m_encoder / m_decoder are still always modified from the background thread. However, we
        now check from the main thread if they are empty by locking.

        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::close):
        (WebKit::LibWebRTCCodecsProxy::createH264Decoder):
        (WebKit::LibWebRTCCodecsProxy::createH265Decoder):
        (WebKit::LibWebRTCCodecsProxy::createVP9Decoder):
        (WebKit::LibWebRTCCodecsProxy::releaseDecoder):
        (WebKit::LibWebRTCCodecsProxy::decodeFrame):
        (WebKit::LibWebRTCCodecsProxy::setFrameSize):
        (WebKit::LibWebRTCCodecsProxy::createEncoder):
        (WebKit::LibWebRTCCodecsProxy::releaseEncoder):
        (WebKit::LibWebRTCCodecsProxy::initializeEncoder):
        (WebKit::LibWebRTCCodecsProxy::encodeFrame):
        (WebKit::LibWebRTCCodecsProxy::setEncodeRates):
        (WebKit::LibWebRTCCodecsProxy::allowsExitUnderMemoryPressure const):
        (WebKit::LibWebRTCCodecsProxy::updateHasEncodersOrDecoders): Deleted.

2021-04-17  Chris Dumez  <cdumez@apple.com>

        GPUConnectionToWebProcess::allowsExitUnderMemoryPressure() should check if libWebRTCCodecsProxy is used
        https://bugs.webkit.org/show_bug.cgi?id=224709

        Reviewed by Darin Adler.

        If the libWebRTCCodecsProxy has either encoders or decoders then the GPUProcess should not
        exit under memory pressure, since it is not idle.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::allowsExitUnderMemoryPressure const):
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
        (WebKit::LibWebRTCCodecsProxy::createH264Decoder):
        (WebKit::LibWebRTCCodecsProxy::createH265Decoder):
        (WebKit::LibWebRTCCodecsProxy::createVP9Decoder):
        (WebKit::LibWebRTCCodecsProxy::releaseDecoder):
        (WebKit::LibWebRTCCodecsProxy::createEncoder):
        (WebKit::LibWebRTCCodecsProxy::releaseEncoder):
        (WebKit::LibWebRTCCodecsProxy::updateHasEncodersOrDecoders):
        (WebKit::LibWebRTCCodecsProxy::allowsExitUnderMemoryPressure const):
        Use a std::atomic<bool> to determine if the LibWebRTCCodecsProxy has encoders/decoders since
        allowsExitUnderMemoryPressure() gets called on the main thread but m_encoders / m_decoders
        get updated on a background thread.

2021-04-17  Kimmo Kinnunen  <kkinnunen@apple.com>

        Unhandled IPC messages should use correct format with the decoder.destinationID() ASSERT message
        https://bugs.webkit.org/show_bug.cgi?id=224335

        Reviewed by Antti Koivisto.

        Use PRIu64 instead of llu in the ASSERT messages for printing unhandled message destination.
        uint64_t is printf'ed with PRIu64.

        * Scripts/webkit/messages.py:
        (generate_message_handler):
        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        (WebKit::TestWithImageData::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        (WebKit::TestWithLegacyReceiver::didReceiveSyncTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        (WebKit::TestWithSemaphore::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp:
        (WebKit::TestWithStream::didReceiveStreamMessage):
        * Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:
        (WebKit::TestWithSuperclass::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        (WebKit::TestWithoutAttributes::didReceiveSyncMessage):

2021-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Add some support for webpage translation in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=224683
        <rdar://problem/75641882>

        Reviewed by Darin Adler.

        Remove some more compile-time guards, now that the WebCore enum is not conditional on `ENABLE(APP_HIGHLIGHT)`.
        See WebCore/ChangeLog for more information.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):

2021-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove PromisedAttachmentInfo::blobURL and adjacent code
        https://bugs.webkit.org/show_bug.cgi?id=224720

        Reviewed by Ryosuke Niwa.

        The `blobURL` member of `PromisedAttachmentInfo` was originally introduced to facilitate drag and drop support
        for attachment elements in WebKit2, by writing blob URL data to temporary file paths on behalf of
        `NSFilePromiseProvider` when starting a drag on attachment elements backed by blobs. However, this was
        superceded by use of `NSFileWrapper` and the `_WKAttachment` SPI instead, such that we only support dragging
        attachment elements if they correspond to API `Attachment` objects in the UI process. This means we can remove
        this `blobURL`, along with the file name and content type members of the struct (which were only added to
        support the ability to drag blob-backed attachments).

        Code that utilized this member was originally introduced in <https://trac.webkit.org/r235202>, and was
        subsequently removed in <https://trac.webkit.org/r240687>.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PromisedAttachmentInfo>::encode):
        (IPC::ArgumentCoder<PromisedAttachmentInfo>::decode):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKPromisedAttachmentContext initWithIdentifier:fileName:]):
        (WebKit::WebViewImpl::writeToURLForFilePromiseProvider):
        (WebKit::WebViewImpl::startDrag):
        (-[WKPromisedAttachmentContext initWithIdentifier:blobURL:fileName:]): Deleted.
        (-[WKPromisedAttachmentContext blobURL]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _prepareToDragPromisedAttachment:]):

2021-04-17  Chris Dumez  <cdumez@apple.com>

        Use WebProcess::existingGPUProcessConnection() whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=224725

        Reviewed by Darin Adler.

        Use WebProcess::existingGPUProcessConnection() whenever possible, instead of WebProcess::ensureGPUProcessConnection().
        This avoids relaunching the GPUProcess if it has already exited.

        * WebProcess/GPU/media/RemoteAudioHardwareListener.cpp:
        (WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener):
        * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
        (WebKit::AudioMediaStreamTrackRenderer::~AudioMediaStreamTrackRenderer):
        * WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:
        (WebKit::RemoteRealtimeAudioSource::~RemoteRealtimeAudioSource):
        * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
        (WebKit::RemoteRealtimeVideoSource::~RemoteRealtimeVideoSource):

2021-04-17  Chris Dumez  <cdumez@apple.com>

        LibWebRTCCodecs eagerly launches the GPUProcess and always relaunches it on exit
        https://bugs.webkit.org/show_bug.cgi?id=224704

        Reviewed by Darin Adler.

        LibWebRTCCodecs eagerly launches the GPUProcess and always relaunches it on exit. The GPUProcess
        should only be (re-)launched when needed. In the case of the LibWebRTCCodecs, it seems it only
        needs a GPUProcess connection if it has m_decoders / m_encoders are non-empty.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionOnMainThread):
        Renamed startListeningForIPC() to ensureGPUProcessConnectionOnMainThread(). Only do the
        connection initialization if m_connection is not null.

        (WebKit::LibWebRTCCodecs::ensureGPUProcessConnectionAndDispatchToThread):
        Version of dispatchToThread() which makes sure that the GPUProcessConnection is initialized
        before dispatching. It is used when constructing a decoder / encoder. It sets the
        m_needsGPUProcessConnection flag to true to indicate someone needed the connection
        (and that we should re-initiate it in case it is severed). If the connection is already
        initialized, then it does a simple dispatchToThread(). If the connection is not initialized
        yet, then we have to hop to the main thread (if not already on it) to initialize the
        GPUProcessConnection.

        (WebKit::LibWebRTCCodecs::gpuProcessConnectionMayNoLongerBeNeeded):
        Function that gets called on the background thread every time a encoder / decoder is
        removed. Its purpose is to set m_needsGPUProcessConnection back to false once we no
        longer have any encoder / decoder, so that gpuProcessConnectionDidClose() does not
        attempt to relaunch the GPUProcess if it goes away.

        LibWebRTCCodecs::setCallbacks():
        Check if VP9Support is enabled via PlatformMediaSessionManager instead of from the
        GPUProcessConnection. This avoids eagerly launching the GPUProcess. The
        GPUProcessConnection constructor gets its VPx support information from
        PlatformMediaSessionManager anyway. The WebPage constructor is where the VPx support
        information comes from and it updates the VPx flags on the PlatformMediaSessionManager.
        The WebPage constructor only updates the VPx flags on the GPUProcessConnection if this
        connection already exists to avoid eagerly launching the GPUProcess.

        (WebKit::LibWebRTCCodecs::createDecoder):
        - Call ensureGPUProcessConnectionAndDispatchToThread() instead of dispatchToThread()
          to make sure we have a GPUProcessConnection before creating the decoder.
        - Add a missing locker for m_connectionLock on the background thread since it is using
          m_connection (pre-existing bug).

        (WebKit::LibWebRTCCodecs::releaseDecoder):
        Call gpuProcessConnectionMayNoLongerBeNeeded() to reset the m_needsGPUProcessConnection
        flag to false if necessary.

        (WebKit::LibWebRTCCodecs::createEncoder):
        - Call ensureGPUProcessConnectionAndDispatchToThread() instead of dispatchToThread()
          to make sure we have a GPUProcessConnection before creating the encoder.

        (WebKit::LibWebRTCCodecs::releaseEncoder):
        Call gpuProcessConnectionMayNoLongerBeNeeded() to reset the m_needsGPUProcessConnection
        flag to false if necessary.

        (WebKit::LibWebRTCCodecs::gpuProcessConnectionDidClose):
        - Clear m_connection when the GPUProcess connection is severed (note that this does not
          necessarily indicate a crash since the GPUProcess exits when idle and under memory
          pressure).
        - Only re-initiate the GPUProcess connection if m_needsGPUProcessConnection is true,
          meaning that we have encoders/decoders. I use this flag instead of checking m_encoders
          & m_decoders since those containers are modified on the background thread and this
          function is called on the main thread.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
        (WebKit::LibWebRTCCodecs::create):
        - Stop calling startListeningForIPC() on construction as we don't want to launch the GPUProcess
        until an encoder / decoder is created.
        - Fix a pre-existing issue where the class subclasses ThreadSafeRefCounted (via
          ThreadMessageReceiverRefCounted) and yet was using std::unique_ptr<> instead of
          RefPtr<>.

        * WebProcess/WebProcess.h:

2021-04-17  Chris Dumez  <cdumez@apple.com>

        RemoteImageDecoderAVFManager should never re-launch the GPUProcess on destruction
        https://bugs.webkit.org/show_bug.cgi?id=224723

        Reviewed by Darin Adler.

        RemoteImageDecoderAVFManager was calling ensureGPUProcessConnection() it is destructor,
        just to remove itself as an IPC message receiver. This means it could unnecessarily
        relaunch the GPUProcess. This patch addresses that.

        This patch also makes it so that RemoteImageDecoderAVFManager registers itself as a
        client of the GPUProcessConnection, so that it gets notified when the connection gets
        severed. Right now, I only do very basic crash handling but this paves the way to do
        better in the future. I did fix a bug where the RemoteImageDecoderAVFManager would
        not re-register itself as a message receiver after a GPUProcess re-launch.

        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::RemoteImageDecoderAVF):
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.cpp:
        (WebKit::RemoteImageDecoderAVFManager::createImageDecoder):
        (WebKit::RemoteImageDecoderAVFManager::deleteRemoteImageDecoder):
        (WebKit::RemoteImageDecoderAVFManager::~RemoteImageDecoderAVFManager):
        (WebKit::RemoteImageDecoderAVFManager::gpuProcessConnectionDidClose):
        (WebKit::RemoteImageDecoderAVFManager::ensureGPUProcessConnection):
        (WebKit::RemoteImageDecoderAVFManager::gpuProcessConnection const): Deleted.
        * WebProcess/GPU/media/RemoteImageDecoderAVFManager.h:

2021-04-17  Tyler Wilcock  <twilco.o@protonmail.com>

        Consider making CSSStyleSheet::rules() just an alias of CSSStyleSheet::cssRules().
        https://bugs.webkit.org/show_bug.cgi?id=197725

        Reviewed by Darin Adler.

        CSSStyleSheet.rules has been changed to alias CSSStyleSheet.cssRulesForBindings.  Now,
        to access just the CSSRuleList, CSSStyleSheet.cssRules must be called.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSStyleSheet.cpp:
        (webkit_dom_css_style_sheet_get_rules):
        Use CSSStyleSheet.cssRules instead of CSSStyleSheet.rules (deleted
        with this patch) to get access to the CSSRuleList of this
        stylesheet.

2021-04-17  Sam Weinig  <weinig@apple.com>

        Move RuntimeEnabledFeatures to Settings (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=224440

        Reviewed by Alex Christensen.

        Move a few RuntimeEnabledFeatures to Settings to consolidate settings
        in one object and removes the need for additional boilerplate. This 
        is now possible as Settings are now accessible in workers.

        Moves PeerConnectionEnabled, WebGLUsingMetal, WebGL2Enabled, WebGPUEnabled
        and MaskWebGLStringsEnabled.

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

2021-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy Ref/RefPtr in Editor
        https://bugs.webkit.org/show_bug.cgi?id=224708

        Reviewed by Wenson Hsieh.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState const):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestAutocorrectionData):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::fontAtSelection):

2021-04-16  Chris Dumez  <cdumez@apple.com>

        RemoteAudioDestinationProxy should not launch / relaunch the GPUProcess unless it is actually rendering
        https://bugs.webkit.org/show_bug.cgi?id=224691

        Reviewed by Geoffrey Garen.

        RemoteAudioDestinationProxy was initiating a connection to the GPUProcess in its constructor and
        re-initiating the connection right away upon GPUProcess crash. This goes against our recent efforts
        to run the GPUProcess only when it is actually needed. The RemoteAudioDestinationProxy really only
        needs the GPUProcess when it is actually rendering / playing.

        * GPUProcess/media/RemoteAudioDestinationManager.cpp:
        (WebKit::RemoteAudioDestinationManager::allowsExitUnderMemoryPressure const):
        Allow the GPUProcess to exit when under memory pressure even if it has AudioDestinations, as long
        as they are not playing.

        * WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
        (WebKit::RemoteAudioDestinationProxy::RemoteAudioDestinationProxy):
        (WebKit::RemoteAudioDestinationProxy::ensureGPUProcessConnection):
        (WebKit::RemoteAudioDestinationProxy::~RemoteAudioDestinationProxy):
        (WebKit::RemoteAudioDestinationProxy::startRendering):
        (WebKit::RemoteAudioDestinationProxy::stopRendering):
        (WebKit::RemoteAudioDestinationProxy::storageChanged):
        (WebKit::RemoteAudioDestinationProxy::gpuProcessConnectionDidClose):
        * WebProcess/GPU/media/RemoteAudioDestinationProxy.h:

2021-04-16  Chris Dumez  <cdumez@apple.com>

        [GPUProcess] Crash under RemoteAudioDestination::render()
        https://bugs.webkit.org/show_bug.cgi?id=224688
        <rdar://76643365>

        Reviewed by Eric Carlson.

        When the connection between the GPUProcess and the WebProcess was severed,
        GPUConnectionToWebProcess::didClose() would get called and end up destroying
        the RemoteAudioDestination object on the main thread. The issue is that the
        RemoteAudioDestination may be playing at the time and we would end up
        destroying the RemoteAudioDestination object without stopping rendering
        first. As a result, we would crash on the background thread in the
        RemoteAudioDestination::render() function, trying to use the m_ringBuffer
        data member that got destroyed on the main thread.

        To address this, I updated the RemoteAudioDestination destructor so that it
        stops rendering if necessary. AudioOutputUnitStop() is synchronous so this
        ensures render() is done running on the background thread (and won't be
        called again) before proceeding with the destruction of the data members.

        Test: webaudio/AudioContext/audiocontext-destruction-crash.html

        * GPUProcess/media/RemoteAudioDestinationManager.cpp:
        Updated the class to stop subclassing ThreadSafeRefCounted. This class does
        not need RefCounting at all. I updated the call site to use UniqueRef<>.

        (WebKit::RemoteAudioDestination::create): Deleted.
        Drop this factory function and made the constructor public now that we no longer
        subclass ThreadSafeRefCounted and use makeUniqueRef<>() at the call site.

        (WebKit::RemoteAudioDestination::scheduleGracefulShutdownIfNeeded): Deleted.
        Stop this function now that the destructor takes care of shutting down gracefully.

        (WebKit::RemoteAudioDestination::RemoteAudioDestination):
        Made the constructor public.

        (WebKit::RemoteAudioDestination::render):
        - Stop checking m_protectThisDuringGracefulShutdown on the background thread. This data
          member is not needed since stop() is synchronous. It was also not thread-safe since
          m_protectThisDuringGracefulShutdown was set on the main thread and we are on the
          audio thread here.
        - Similarly, drop the check for m_isPlaying. m_isPlaying is not atomic so the check
          was not thread safe. Even if m_isPlaying was atomic, m_isPlaying get set to true
          *after* calling m_audioOutputUnitAdaptor.start() so render() may early return
          even though we were playing. Also, this check is not needed since we set
          m_isPlaying to false after calling m_audioOutputUnitAdaptor.stop() and the stop()
          call is synchronous and should not return until the audio thread stopped rendering.

        * GPUProcess/media/RemoteAudioDestinationManager.h:

2021-04-16  Chris Dumez  <cdumez@apple.com>

        The RemoteRemoteCommandListener destructor should never (re-)launch the GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=224701

        Reviewed by Eric Carlson.

        The RemoteRemoteCommandListener destructor should never (re-)launch the GPUProcess,
        just to unregister itself. If the GPUProcess is not running, then the
        RemoteRemoteCommandListener is not registered.

        * WebProcess/GPU/media/RemoteRemoteCommandListener.cpp:
        (WebKit::RemoteRemoteCommandListener::~RemoteRemoteCommandListener):
        (WebKit::RemoteRemoteCommandListener::gpuProcessConnectionDidClose):

2021-04-16  Jiewen Tan  <jiewen_tan@apple.com>

        Pass credential name to the WebAuthn UI during registration
        https://bugs.webkit.org/show_bug.cgi?id=224697
        <rdar://75803352>

        Reviewed by Brent Fulgham.

        Covered by new test contents within existing test files.

        * Platform/spi/Cocoa/AuthenticationServicesCoreSPI.h:
        Paperwork for the new SPI.

        * UIProcess/API/APIWebAuthenticationPanel.cpp:
        (API::WebAuthenticationPanel::create):
        (API::WebAuthenticationPanel::WebAuthenticationPanel):
        * UIProcess/API/APIWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (-[_WKWebAuthenticationPanel userName]):
        Adds a new userName property.

        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::getUserName):
        (WebKit::AuthenticatorManager::runPanel):
        (WebKit::AuthenticatorManager::runPresenter):
        Passes the userName to the UI.

        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.h:
        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.mm:
        Paperwork for the new SPI.

        * UIProcess/WebAuthentication/Cocoa/AuthenticatorPresenterCoordinator.h:
        * UIProcess/WebAuthentication/Cocoa/AuthenticatorPresenterCoordinator.mm:
        (WebKit::AuthenticatorPresenterCoordinator::AuthenticatorPresenterCoordinator):
        Passes the userName to the new SPI.

2021-04-16  Cameron McCormack  <heycam@apple.com>

        Place vertical scrollbars at (inline/block)-end edge in all writing modes.
        https://bugs.webkit.org/show_bug.cgi?id=224224

        Reviewed by Simon Fraser.

        * UIProcess/win/WebPopupMenuProxyWin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:

2021-04-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Refactor some webpage translation code
        https://bugs.webkit.org/show_bug.cgi?id=224680
        Work towards <rdar://75641882>

        Reviewed by Tim Horton.

        See WebCore ChangeLog for more details.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode const):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:

        Remove `selectionBounds`. We don't need this anymore, because we'll instead compute the selection bounds only
        when the Translate menu item is selected, instead of relying on `m_activeContextMenuContextData` being up to
        date.

        (WebKit::ContextMenuContextData::selectedText const):
        (WebKit::ContextMenuContextData::selectionBounds const): Deleted.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::handleContextMenuTranslation):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::handleTranslation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleContextMenuTranslation):
        * WebProcess/WebPage/WebPage.h:

2021-04-16  Jiewen Tan  <jiewen_tan@apple.com>

        Allow using the platform authenticator on non-Touch ID Macs according to Internal requirements
        https://bugs.webkit.org/show_bug.cgi?id=224639
        <rdar://74698346>

        Reviewed by Daniel Bates.

        * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterDecidePolicy):
        (WebKit::LocalAuthenticator::continueMakeCredentialAfterUserVerification):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterResponseSelected):
        (WebKit::LocalAuthenticator::continueGetAssertionAfterUserVerification):
        Don't set the UserVerification bit if UserVerification is not done.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.h:
        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):
        Only check UserPresence on non-Touch ID Macs.

        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):
        Make the platform authenticator available according to Internal requirements.

        * UIProcess/WebAuthentication/Mock/MockLocalConnection.h:
        * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm:
        (WebKit::MockLocalConnection::verifyUser):
        Mock testing support.

        * UIProcess/WebAuthentication/WebAuthenticationRequestData.cpp:
        (WebKit::getUserVerificationRequirement):
        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
        Add a helper for extracting the UserVerification input.

2021-04-16  Peng Liu  <peng.liu6@apple.com>

        [GPUP] WebContent process should not create AVOutputContext instances when media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224469

        Reviewed by Eric Carlson.

        * Scripts/webkit/messages.py: Fix clean build failures on the WinCairo port.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setWirelessPlaybackTarget):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

        * GPUProcess/media/ios/RemoteMediaSessionHelperProxy.cpp:
        (WebKit::RemoteMediaSessionHelperProxy::activeVideoRouteDidChange):

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encode):
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData): Deleted.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::mediaRelatedIOKitClasses):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerState):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::temporaryMachServices): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
        (WebKit::RemoteMediaSessionHelper::activeVideoRouteDidChange):

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

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected const):

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Disable ApplicationCache with linkedOnOrAfter check
        https://bugs.webkit.org/show_bug.cgi?id=224629

        Reviewed by Brady Eidson.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultOfflineWebApplicationCacheEnabled):
        * Shared/WebPreferencesDefaultValues.h:

2021-04-16  Ada Chan  <ada.chan@apple.com>

        Add WKUIDelegate SPI for starting XR session
        https://bugs.webkit.org/show_bug.cgi?id=224634

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::startXRSession):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::startXRSession):

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r275839.

        The new release assertion is hitting to easily in client apps

        Reverted changeset:

        "Make sure AuxiliaryProcessProxy::sendMessage() is called on
        the main thread"
        https://bugs.webkit.org/show_bug.cgi?id=224448
        https://commits.webkit.org/r275839

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Exit the GPUProcess when under memory pressure if it is not being used
        https://bugs.webkit.org/show_bug.cgi?id=224556

        Reviewed by Darin Adler.

        Exit the GPUProcess when under memory pressure if it is not being used. This will
        help us save memory, especially until we are able to enable "DOM Rendering in
        GPUProcess".

        Note that when the GPUProcess is ready to exit, it sends an IPC to the UIProcess
        in order to get terminated, instead of terminating itself. The reason I do this is
        so that the UIProcess can distinguish a GPUProcess crash from a normal idle exit.

        A/B testing shows:
        - 5-8% PLUM3 progression on iPhone
        - 2.5-4% PLUM3 progression on iPad
        - No PLT5 regression on either iPhone or iPad.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
        (WebKit::GPUConnectionToWebProcess::allowsExitUnderMemoryPressure const):
        (WebKit::GPUConnectionToWebProcess::releaseRenderingBackend):
        (WebKit::GPUConnectionToWebProcess::releaseGraphicsContextGL):
        * GPUProcess/GPUConnectionToWebProcess.h:
        (WebKit::GPUConnectionToWebProcess::remoteMediaPlayerManagerProxy):
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::removeGPUConnectionToWebProcess):
        (WebKit::GPUProcess::canExitUnderMemoryPressure const):
        (WebKit::GPUProcess::tryExitIfUnusedAndUnderMemoryPressure):
        (WebKit::GPUProcess::tryExitIfUnused):
        (WebKit::GPUProcess::lowMemoryHandler):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::allowsExitUnderMemoryPressure const):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/media/RemoteAudioDestinationManager.cpp:
        (WebKit::RemoteAudioDestinationManager::deleteAudioDestination):
        (WebKit::RemoteAudioDestinationManager::allowsExitUnderMemoryPressure const):
        * GPUProcess/media/RemoteAudioDestinationManager.h:
        * GPUProcess/media/RemoteCDMFactoryProxy.cpp:
        (WebKit::RemoteCDMFactoryProxy::removeInstance):
        (WebKit::RemoteCDMFactoryProxy::allowsExitUnderMemoryPressure const):
        * GPUProcess/media/RemoteCDMFactoryProxy.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::deleteDecoder):
        (WebKit::RemoteImageDecoderAVFProxy::allowsExitUnderMemoryPressure const):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
        (WebKit::RemoteLegacyCDMFactoryProxy::removeSession):
        (WebKit::RemoteLegacyCDMFactoryProxy::allowsExitUnderMemoryPressure const):
        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.h:
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
        (WebKit::RemoteMediaPlayerManagerProxy::deleteMediaPlayer):
        (WebKit::RemoteMediaPlayerManagerProxy::allowsExitUnderMemoryPressure const):
        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp:
        (WebKit::RemoteAudioMediaStreamTrackRendererManager::allowsExitUnderMemoryPressure const):
        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h:
        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
        (WebKit::RemoteMediaRecorderManager::releaseRecorder):
        (WebKit::RemoteMediaRecorderManager::allowsExitUnderMemoryPressure const):
        * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp:
        (WebKit::RemoteSampleBufferDisplayLayerManager::allowsExitUnderMemoryPressure const):
        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
        * Shared/ProcessTerminationReason.h:
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
        (WebKit::UserMediaCaptureManagerProxy::hasSourceProxies const):
        * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::gpuProcessExited):
        (WebKit::GPUProcessProxy::processIsReadyToExit):
        (WebKit::GPUProcessProxy::didClose):
        (WebKit::GPUProcessProxy::didFinishLaunching):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/GPU/GPUProcessProxy.messages.in:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::gpuProcessDidExit):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gpuProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gpuProcessExited):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::gpuProcessExited):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::gpuProcessDidExit):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _gpuProcessDidExit]):

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Early IPC messages to a WorkQueueMessageReceiver may get processed out of order
        https://bugs.webkit.org/show_bug.cgi?id=224623

        Reviewed by Geoffrey Garen.

        Bug 224566 exposed an issue where early IPC being sent to WorkQueueMessageReceiver might get received
        out of order. The reason behind it is that the WorkQueueMessageReceiver registers itself on the main
        thread while we receive the IPC on the IPC thread. When we receive the IPC on the IPC thread, we check
        if there is a WorkQueueMessageReceiver for it and if there is, we dispatch the message straight to its
        WorkQueue. However, if the WorkQueueMessageReceiver has not registered itself yet on the main thread,
        we hop to the main thread first, before dispatching the IPC back to the receiver's WorkQueue. The
        extra hop to the main thread means that 2 IPC messages to the WorkQueueMessageReceiver sent one after
        the other may get dispatched on the WorkQueue in an inconsistent order, if the WorkQueueMessageReceiver
        registers itself as a receiver in between the 2 IPC messages.

        We actually were trying to deal with this issue in Connection::addWorkQueueMessageReceiver(). When
        the WorkQueueMessageReceiver would register itself on the main thread, we would grab the incomingMessages
        lock and check m_incomingMessages for messages that should be dispatched to the WorkQueue. Those are
        async messages that should have been dispatched straight to the WorkQueue on the IPC thread but didn't
        because the WorkQueueMessageReceiver has not registered itself yet.

        However, this logic in Connection::addWorkQueueMessageReceiver() was insufficient because it only checked
        m_incomingMessages. m_incomingMessages only contains async messages. Sync messages (and special async
        messages with the IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply flag) are stored in
        Connection::SyncMessageState::m_messagesToDispatchWhileWaitingForSyncReply. This is what was causing
        Bug 224566 since RemoteRenderingBackendProxy's CreateImageBuffer IPC was async with the
        DispatchMessageEvenWhenWaitingForSyncReply flag and its GetDataURLForImageBuffer was synchronous. The
        ordering of these 2 IPC messages could get reversed and it would cause correctness issues and flaky
        crashes.

        To address the issue, I updated Connection::addWorkQueueMessageReceiver() to ask the
        Connection::SyncMessageState to enqueue its matching messages to the WorkQueue. There was one issue
        though because Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection()
        was taking messages out of m_messagesToDispatchWhileWaitingForSyncReply and storing them in a local
        container and then iterating over this container to dispatch the messages. The dispatching of one
        of these messages could cause a WorkQueueMessageReceiver to register itself (call addWorkQueueMessageReceiver()).
        When this would happen, addWorkQueueMessageReceiver() would try and enqueue matching messages in
        m_messagesToDispatchWhileWaitingForSyncReply and would miss the messages in the local container
        that dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection() is currently iterating on.
        To address this issue, I introduced a new m_messagesBeingDispatched data member and used that to
        store the messages being dispatched instead of the local container. As a result,
        addWorkQueueMessageReceiver() can now enqueue the messages in m_messagesBeingDispatched first and
        then enqueue the ones in m_messagesToDispatchWhileWaitingForSyncReply.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):
        Revert r276007 that was committed as a temporary workaround for this bug.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::enqueueMatchingMessages):
        Add utility function to SyncMessageState to enqueue its matching messages in m_messagesBeingDispatched
        and m_messagesToDispatchWhileWaitingForSyncReply to the provided MessageReceiveQueue. This is called
        by Connection::addMessageReceiveQueue(). The logic is similar to the one in the
        enqueueMatchingMessagesToMessageReceiveQueue() function but works on a Deque<ConnectionAndIncomingMessage>
        instead of a Deque<std::unique_ptr<Decoder>>.

        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::SyncMessageState::dispatchMessagesAndResetDidScheduleDispatchMessagesForConnection):
        Use m_messagesBeingDispatched instead of a local container to store the messages we are about to
        dispatch. This allows enqueueMatchingMessages() to check those messages to see if they should be
        dispatched to a MessageReceiveQueue. We also need to make sure we don't iterate over
        m_messagesBeingDispatched to call dispatch() on the messages. This is important because any message
        dispatch may cause a WorkQueueMessageReceiver to register itself, which would call
        enqueueMatchingMessages() and potentially extract matching messages from m_messagesBeingDispatched.
        For this reason, we take messages from m_messagesBeingDispatched one by one, until the container
        becomes empty.

        (IPC::Connection::addMessageReceiveQueue):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::addThreadMessageReceiver):
        - This used to only check m_incomingMessages for matching messages that should be enqueued on the
          MessageReceiveQueue in order to preserve IPC ordering. This was insufficient because it would fail
          to consider sync IPC messages (or async IPC messages with the
          IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply flag). Since those are stored in separate
          containers in Connection::SyncMessageState, we now also call
          Connection::SyncMessageState::enqueueMatchingMessages() to enqueue those messages and preserve their
          ordering too. This fixes IPC ordering bug identified via Bug 224566.
        - Avoid some code duplication by moving more logic to a shared enqueueMatchingMessagesToMessageReceiveQueue()
          function. The function is no longer templated because I don't think it is worth increasing binary
          size just to avoid the virtual enqueueMessage() function call on the MessageReceiverQueue. We do not
          register message receivers very often and then only have a few early messages at most to enqueue.

2021-04-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Show resource priority and remote IP in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=224660

        Reviewed by Adrian Perez de Castro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::toNetworkLoadPriority):
        (WebKit::NetworkDataTaskSoup::didGetHeaders):
        (WebKit::NetworkDataTaskSoup::networkEvent):

2021-04-16  Youenn Fablet  <youenn@apple.com>

        Promote WKWebView device orientation permission delegate to API
        https://bugs.webkit.org/show_bug.cgi?id=223919

        Reviewed by Alex Christensen.

        Move corresponding SPI to API.
        Introduce WK_API_UNAVAILABLE to make that API not available in certain OSes.

        Covered by existing tests.

        * Scripts/postprocess-header-rule:
        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):

2021-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276107.
        https://bugs.webkit.org/show_bug.cgi?id=224653

        It broke non-Cocoa clean builds

        Reverted changeset:

        "[GPUP] WebContent process should not create AVOutputContext
        instances when media in GPU Process is enabled"
        https://bugs.webkit.org/show_bug.cgi?id=224469
        https://trac.webkit.org/changeset/276107

2021-04-15  Kate Cheney  <katherine_cheney@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at com.apple.WebKit: WTF::HashTableConstIterator<WTF::String, WTF::KeyValuePair<...
        https://bugs.webkit.org/show_bug.cgi?id=224637
        <rdar://problem/76540809>

        Reviewed by Alex Christensen.

        If the protocol and host of the SecurityOrigin object are empty,
        toRawString() could return null. We should add a valid key check here
        before doing a hash table lookup.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin const):

2021-04-15  Peng Liu  <peng.liu6@apple.com>

        [GPUP] WebContent process should not create AVOutputContext instances when media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224469

        Reviewed by Eric Carlson.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setWirelessPlaybackTarget):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:

        * GPUProcess/media/ios/RemoteMediaSessionHelperProxy.cpp:
        (WebKit::RemoteMediaSessionHelperProxy::activeVideoRouteDidChange):

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData):
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encode):
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::encodePlatformData): Deleted.
        (IPC::ArgumentCoder<WebCore::MediaPlaybackTargetContext>::decodePlatformData): Deleted.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::mediaRelatedIOKitClasses):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerState):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::temporaryMachServices): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
        (WebKit::RemoteMediaSessionHelper::activeVideoRouteDidChange):

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

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected const):

2021-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move the implementation of -[WKWebView themeColor] into the main WKWebView category
        https://bugs.webkit.org/show_bug.cgi?id=224628

        Reviewed by Tim Horton.

        Move the implementation of `-themeColor` out of the private category, and into the main category instead to
        silence the warning.

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

2021-04-15  Tim Horton  <timothy_horton@apple.com>

        Add a mechanism to dump the PlatformCALayer subtree of a GraphicsLayer, for testing
        https://bugs.webkit.org/show_bug.cgi?id=224595

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
        Add a getter for the PlatformCALayer sublayers of PlatformCALayerRemote; see the note on PlatformCALayerCocoa.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::layerTreeAsText const):
        Adopt the RenderLayerCompositor version of layerTreeAsText.

2021-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should become focused without requiring -[WKWebView canBecomeFocused] to return YES
        https://bugs.webkit.org/show_bug.cgi?id=224613
        <rdar://problem/76710314>

        Reviewed by Tim Horton.

        Make a couple of minor tweaks to `WKContentView`'s implementation of the `UIFocus` protocol methods.

        Test: UIFocusTests.ContentViewCanBecomeFocused

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView canBecomeFocused]): Deleted.

        Remove the ability for clients to influence `-[WKContentView canBecomeFocused]` by overriding `-[WKWebView
        canBecomeFocused]`. Apparently, making `WKWebView` focusable by UIKit in addition to the content view causes the
        web view to occasionally take first responder instead of the content view, which then breaks key event handling.

        Instead, make it so that `-[WKContentView canBecomeFocused]` still returns `NO` by default, return `YES` for
        internal clients that override the private UI delegate method `-_webView:takeFocus:`, and additionally introduce
        a new delegate method, `-_webViewCanBecomeFocused:`, so that clients can make `-[WKContentView canBecomeFocused]`
        return `NO` even if the delegate responds to `-_webView:takeFocus:`. This is because it doesn't make sense for a
        WebKit client to allow UIKit's focus engine to (effectively) descend into web content without a way for the
        embedder to handle the case where focus later ascends out of web content (and asks the UI delegate to take
        focus).

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView canBecomeFocused]):
        (-[WKContentView didUpdateFocusInContext:withAnimationCoordinator:]):

        Also, make a minor adjustment here to avoid moving focus to the next or previous focusable element in the case
        where focus is being moved _away from_ the content view, by consulting `-[UIFocusUpdateContext nextFocusedView]`.

        (-[WKContentView canBecomeFocusedForWebView]): Deleted.

2021-04-15  Brady Eidson  <beidson@apple.com>

        Move WKURLSchemeTask redirect API to SPI
        https://bugs.webkit.org/show_bug.cgi?id=224581

        Reviewed by Alex Christensen.

        Need to work out some design kinks.

        * UIProcess/API/Cocoa/WKURLSchemeTask.h:
        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (-[WKURLSchemeTaskImpl _willPerformRedirection:newRequest:completionHandler:]):
        (-[WKURLSchemeTaskImpl willPerformRedirection:newRequest:completionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKURLSchemeTaskPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setURLSchemeHandlerForScheme):

2021-04-15  Simon Fraser  <simon.fraser@apple.com>

        UI process can assert in DisplayLink::decrementFullSpeedRequestClientCount()
        https://bugs.webkit.org/show_bug.cgi?id=224388

        Reviewed by Tim Horton.

        The start/stop of m_wheelEventActivityHysteresis in WebPageProxy could cross
        a process swap boundary, resulting in a decrement getting sent to the new DisplayLink/connection
        pair for the new process, which asserted.

        Fix by telling the DisplayLink about new processes when we're in an active wheel
        event state.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::finishAttachingToWebProcess):
        (WebKit::WebPageProxy::updateWheelEventActivityAfterProcessSwap):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::startNotificationMechanism):
        (WebKit::DisplayRefreshMonitorMac::stopNotificationMechanism):

2021-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Bring back the call to ResourceResponse::setDeprecatedNetworkLoadMetrics after r276008
        https://bugs.webkit.org/show_bug.cgi?id=224608

        Reviewed by Adrian Perez de Castro.

        It turns out it's actually still used by the inspector. I don't want to revert r276008 because it included other
        fixes, so it's just fixed in this patch.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):

2021-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add support for "nextHopProtocol" for Resource Timing
        https://bugs.webkit.org/show_bug.cgi?id=168543

        Reviewed by Adrian Perez de Castro.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::didGetHeaders): Set NetworkLoadMetrics::protocol.

2021-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Stop using ResourceResponse::setDeprecatedNetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=224541

        Reviewed by Adrian Perez de Castro.

        We are already providing the metrics via didCompleteWithError(). Also make sure we set fetchStart and use it
        instead of a member.

        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
        (WebKit::NetworkDataTaskSoup::didSendRequest):
        (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse):
        (WebKit::NetworkDataTaskSoup::dispatchDidCompleteWithError):
        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
        (WebKit::NetworkDataTaskSoup::networkEvent):
        (WebKit::NetworkDataTaskSoup::didStartRequest):
        (WebKit::NetworkDataTaskSoup::didRestart):
        * NetworkProcess/soup/NetworkDataTaskSoup.h:

2021-04-15  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r275921-r275922): [ wk2 ] http/tests/security/webgl-remote-read-remote-image-allowed-with-credentials.html is flakey crashing
        https://bugs.webkit.org/show_bug.cgi?id=224566
        <rdar://problem/76657007>

        Reviewed by Tim Horton.

        r275921-r275922 changed the timing of when the WebProcess/RemoteRenderingBackendProxy sends the GPUConnectionToWebProcess::CreateRenderingBackend
        IPC to the GPUProcess. This IPC used to get sent as soon as the RemoteRenderingBackendProxy was constructed. However, I delayed sending it until
        the RemoteRenderingBackendProxy actually needs to create an ImageBuffer to avoid launching the GPUProcess prematurely.

        Unfortunately, this exposed a pre-existing synchronization issue with regards to the RemoteRenderingBackend IPC. In particular, the
        GPUConnectionToWebProcess::CreateRenderingBackend was getting sent asynchronously and processed by the GPUProcess on the main thread. This would
        cause the creation of the RemoteRenderingBackend object on the GPUProcess side, which would then register itself as a WorkQueueMessageReceiver.
        The issue is that the WebProcess was sending the RemoteRenderingBackend IPC so quickly after the CreateRenderingBackend IPC that when the IPC is
        received (on the IPC thread), the RemoteRenderingBackend has not had a change to register itself as a WorkQueueMessageReceiver yet. As a result,
        some of the early IPC was getting dispatched to the main thread and later IPC would get sent to the RemoteRenderingBackend WorkQueue. This was
        causing RemoteRenderingBackend to get processed out of order.

        To address the synchronization issue for now, I made the GPUConnectionToWebProcess::CreateRenderingBackend synchronous. This may not be the
        best design long term but it is an easy and safe way to resolve this for now. It makes sure the WebProcess cannot send RemoteRenderingBackend
        IPC until after the GPUProcess has created the RemoteRenderingBackend and the RemoteRenderingBackend object has registered itself as a
        WorkQueueMessageReceiver. We probably want to follow-up when we come up with a better design. For now though, I have verified locally that this
        fixes the out of order IPC messaging AND the flaky crashes on these canvas tests.

        No new tests, unskipped existing tests that are no longer flaky.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):

2021-04-14  Basuke Suzuki  <basuke.suzuki@sony.com>

        Fix WK_EXPORT macro for declspec compilers
        https://bugs.webkit.org/show_bug.cgi?id=224583

        Reviewed by Don Olmstead.

        It displays warnings when macro is not defined. Actually it is defined only when
        it builds WebKit. It should be defined(BUILDING_WebKit).

        * Shared/API/c/WKDeclarationSpecifiers.h:

2021-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        6 http/wpt/webauthn layout-tests are constantly timing out
        https://bugs.webkit.org/show_bug.cgi?id=224531
        <rdar://76432480>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * UIProcess/WebAuthentication/Mock/MockLocalService.mm:
        (WebKit::MockLocalService::MockLocalService):
        Needs to deal with the mock testing infrastructure according to internal requirements.

2021-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Make image extraction interactions work for elements inside links
        https://bugs.webkit.org/show_bug.cgi?id=224576
        <rdar://problem/76664721>

        Reviewed by Devin Rousso.

        See WebCore ChangeLog for more details.

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

2021-04-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _themeColor]` SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=224571
        <rdar://problem/75231602>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView themeColor]): Added.
        (-[WKWebView _themeColor]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::themeColorWillChange):
        (WebKit::PageClientImplCocoa::themeColorDidChange):

2021-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Make image extraction interactions work for elements inside links
        https://bugs.webkit.org/show_bug.cgi?id=224517
        <rdar://problem/76616431>

        Reviewed by Devin Rousso.

        See comments below for more details.

        Tests:  fast/images/image-extraction/click-link-with-image-overlay.html
                fast/images/image-extraction/ios/select-word-in-image-overlay-inside-link.html

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add `imageElementContext`, an optional element context that exists alongside `elementContext`. This is necessary
        in the case where the user is interacting with an image element inside a link element because we need to know
        about the inner hit-tested image element for the purposes of image extraction, but the clickable element we use
        for the `elementContext` is the link element instead.

        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::isValidForRequest const):

        Make a slight adjustment here - since `includeImageData` may require image bitmap data in cases where only the
        `includeSnapshot` flag is set, it's incorrect to assume that setting `includeSnapshot` fulfills all the needs of
        `includeImageData`.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]):

        Consult `imageElementContext` instead of `elementContext`.

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

        Set the position information's `imageElementContext`.

        (WebKit::elementPositionInformation):
        (WebKit::WebPage::positionInformation):

        Make a couple of adjustments here: (1) avoid requesting link position information if the hit-tested node is text
        inside of an image overlay. (2) If the `includeImageData` request flag is set and the hit-tested node is an
        image element but `isImage` is not set, then additionally supply the image data using the
        `imagePositionInformation` helper function. This ensures that in the case where we're requesting image data and
        the user is interacting with an image element inside a link, we'll send decoded image data back to the UI
        process.

2021-04-14  Youenn Fablet  <youenn@apple.com>

        Update WKPageSet implementation according new MediaProducer::MutedState values
        https://bugs.webkit.org/show_bug.cgi?id=224548

        Reviewed by Eric Carlson.

        Covered by API test.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMuted):
        Translate WKMediaMutedState to WebCore::MediaProducer::MutedStateFlags properly.

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Don't block proxy authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=224564
        <rdar://76542907>

        Reviewed by Brady Eidson.

        You have to use SPI to get WebKit to tell CFNetwork to not handle proxy authentication by default,
        but if you do it only works for first-party requests.  Our challenge blocking to prevent cross-site fetches from
        asking for basic auth credentials should not block challenges for proxy authentication.  The radar has an application
        that wants to handle them.

        Covered by an API test.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):

2021-04-14  Don Olmstead  <don.olmstead@sony.com>

        [GPUP] RemoteGraphicsContextsGL shouldn't be referenced when ENABLE_WEBGL is off
        https://bugs.webkit.org/show_bug.cgi?id=224560

        Reviewed by Alex Christensen.

        Add an ENABLE(WEBGL) guard.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didClose):

2021-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a comment fix after r275847

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):
        Explains why instead of what.

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Temporarily fix more terminate_with_reason-related crashes
        https://bugs.webkit.org/show_bug.cgi?id=224559
        <rdar://76639741>

        Reviewed by Geoff Garen.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::terminateWithReason):

2021-04-14  Devin Rousso  <drousso@apple.com>

        [iOS] limit how often `WebAVPlayerController` notifies the `PlaybackSessionModel` about changes to playback speed
        https://bugs.webkit.org/show_bug.cgi?id=224515
        <rdar://problem/75901463>

        Reviewed by Eric Carlson.

        This change will cause `HTMLMediaElement::setPlaybackRate` to not send IPC back and forth
        between the WebProcess and UIProcess, as a modification to the `WebAVPlayerController` in
        the UIProcess would notify its `PlaybackSessionModel` "delegate", which would in turn make
        it's way back to the related `HTMLMediaElement::setPlaybackRate` in the WebProcess.

        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
        (WebKit::PlaybackSessionModelContext::setPlaybackRate): Added.
        (WebKit::PlaybackSessionManagerProxy::setPlaybackRate): Added.
        * WebProcess/cocoa/PlaybackSessionManager.messages.in:
        * WebProcess/cocoa/PlaybackSessionManager.h:
        * WebProcess/cocoa/PlaybackSessionManager.mm:
        (WebKit::PlaybackSessionManager::setPlaybackRate): Added.
        Add support for handling when the `rate` of the `AVPlayerController` changes too.

2021-04-14  Kate Cheney  <katherine_cheney@apple.com>

        Service worker soft-update loads not being marked app-bound
        https://bugs.webkit.org/show_bug.cgi?id=223200
        <rdar://problem/75438555>

        Reviewed by Youenn Fablet.

        We should pass the app-bound request value when doing a soft update.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::isAppBound):
        * NetworkProcess/NetworkResourceLoader.h:
        Make a helper function to get the request's app-bound value.

        * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
        (WebKit::ServiceWorkerFetchTask::softUpdateIfNeeded):
        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::loadFromNetwork):
        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
        (WebKit::WebSWServerConnection::createFetchTask):
        * Shared/NavigatingToAppBoundDomain.h:
        (WebKit::AppBoundNavigationTestingData::setDidPerformSoftUpdate):
        (WebKit::AppBoundNavigationTestingData::clearAppBoundNavigationDataTesting):
        (WebKit::AppBoundNavigationTestingData::encode const):
        (WebKit::AppBoundNavigationTestingData::decode):
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _appBoundNavigationData:]):
        Update testing struct to make sure a soft-update occurred before
        checking app-bound data. This accounts for the delay between the
        page load and the soft update.

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Reduce maximum HashTable entry size to 128 bytes
        https://bugs.webkit.org/show_bug.cgi?id=224381

        Reviewed by Yusuke Suzuki.

        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:
        (WebKit::ViewUpdateDispatcher::UpdateData::UpdateData):

2021-04-14  Chris Dumez  <cdumez@apple.com>

        [iOS] WKMouseDeviceObserver is calling WebProcessProxy::send() on a non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=224529
        <rdar://76598710>

        Reviewed by Tim Horton.

        Make sure WKMouseDeviceObserver calls WebProcessProxy::notifyHasMouseDeviceChanged() on the main thread
        since:
        1. It iterates over WebProcessProxy::allProcesses() which is only safe on the main thread
        2. It calls WebProcessProxy::send() wich is only safe on the main thread

        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/WKMouseDeviceObserver.mm:
        (-[WKMouseDeviceObserver mousePointerDevicesDidChange:]):
        (-[WKMouseDeviceObserver _setHasMouseDeviceForTesting:]):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::notifyHasMouseDeviceChanged):

2021-04-14  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Add a property to the WebKitWebView indicating whether the web process is responsive
        https://bugs.webkit.org/show_bug.cgi?id=224359

        Reviewed by Adrian Perez de Castro.

        Add a property to WebKitWebView indicating whether the web processes used are responsive.

        * UIProcess/API/glib/WebKitNavigationClient.cpp:
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkitWebViewSetIsWebProcessResponsive):
        (webkit_web_view_get_is_web_process_responsive):
        * UIProcess/API/glib/WebKitWebViewPrivate.h:
        * 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:

2021-04-13  Jer Noble  <jer.noble@apple.com>

        [GPUP] MediaSource.addSourceBuffer() will throw if given the same parameter as a previous call to HTMLMediaElement.canPlayType()
        https://bugs.webkit.org/show_bug.cgi?id=224273
        <rdar://74805071>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-addsourcebuffer-after-canplaytype.html

        RemoteMediaPlayerMIMETypeCache will receive requests to verify whether it can handle a MIME/codec combination,
        as well as whether this indicates a MediaStream, MSE source, or neither. If a cache for the MSE back-end receives
        a query for a MIME type, but the query parameters indicate this is not a MSE source, it will say no and cache the
        response. However the cache is keyed solely on the MIME/codec, so when a subsequent call to create a SourceBuffer
        hits the cache entry, it thinks it will be unable to handle the MIME and rejects.

        Make the mime-type cache triple keyed: use both the raw ContentType (MIME & codecs) as well as the flags stating
        whether the source is a MediaStream, MSE, or neither.

        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.cpp:
        (WebKit::RemoteMediaPlayerMIMETypeCache::supportsTypeAndCodecs):
        * WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.h:

2021-04-13  Ada Chan  <ada.chan@apple.com>

        Implement PlatformXRSystem::xrCoordinator() for USE(APPLE_INTERNAL_SDK)
        https://bugs.webkit.org/show_bug.cgi?id=224510

        Reviewed by Dean Jackson.

        * UIProcess/Cocoa/PlatformXRSystem.mm:

2021-04-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed fix after r275921 to address crashes on the iOS bots.

        The crash would occur when the WebPage constructor would end up calling WebProcess::ensureGPUProcessConnection().
        Since we're in the middle of constructing the page, the pageID has been added to m_pageMap but not the page yet.
        ensureGPUProcessConnection() was iterating over m_pageMap and expecting pages in the map to be non-null.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::ensureGPUProcessConnection):

2021-04-13  Chris Dumez  <cdumez@apple.com>

        RemoteRenderingBackendProxy should only relaunch the GPUProcess if it actually needs it
        https://bugs.webkit.org/show_bug.cgi?id=224516

        Reviewed by Geoff Garen.

        Previously, RemoteRenderingBackendProxy would launch the GPUProcess as soon as it was
        constructed. This went against the goals of r275887 to delay the GPUProcess launch
        until it is actually needed. Also, in case a a GPUProcess crash/termination,
        RemoteRenderingBackendProxy would relaunch the GPUProcess right away, even if it
        did not need it (No live ImageBuffers). This patch addresses both issues.

        This patch is a pre-requirement for terminating the GPUProcess on memory pressure when
        it is not used by any tabs.

        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
        (WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):
        (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
        (WebKit::RemoteRenderingBackendProxy::messageSenderConnection const):
        (WebKit::RemoteRenderingBackendProxy::waitForDidCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackendProxy::waitForDidFlush):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

2021-04-13  Chris Dumez  <cdumez@apple.com>

        Stop requiring a RemoteRenderingBackend for visibility propagation views
        https://bugs.webkit.org/show_bug.cgi?id=224513

        Reviewed by Geoff Garen.

        Stop requiring a RemoteRenderingBackend for visibility propagation views. This is
        inconvenient because doing media playback in the GPUProcess does not require a
        RemoteRenderingBackend. This was also making things difficult to exit the
        GPUProcess on memory pressure when unused.

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createVisibilityPropagationContextForPage):
        (WebKit::GPUConnectionToWebProcess::destroyVisibilityPropagationContextForPage):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackendCreationParameters.h:
        (WebKit::RemoteRenderingBackendCreationParameters::encode const):
        (WebKit::RemoteRenderingBackendCreationParameters::decode):
        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::createVisibilityPropagationContextForPage):
        (WebKit::GPUProcessConnection::destroyVisibilityPropagationContextForPage):
        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::RemoteRenderingBackendProxy):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):
        (WebKit::WebPage::gpuProcessConnectionDidBecomeAvailable):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureGPUProcessConnection):

2021-04-13  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r275898; remove unnecessary files from the project.

        * WebKit.xcodeproj/project.pbxproj:

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        WebProcessPool should store Vector<Ref<WebProcessProxy>> instead of Vector<RefPtr>
        https://bugs.webkit.org/show_bug.cgi?id=224412

        Reviewed by Chris Dumez.

        No change in behavior, except I also changed a raw pointer to a WeakPtr, so we should be a little safer.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::remoteWebInspectorEnabledCallback):
        (WebKit::WebProcessPool::registerNotificationObservers):
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::cacheMediaMIMETypes):
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::removeAll):
        (WebKit::VisitedLinkStore::sendStoreHandleToProcess):
        (WebKit::VisitedLinkStore::didUpdateSharedStringHashes):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gpuProcessCrashed):
        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
        (WebKit::WebProcessPool::initializeNewWebProcess):
        (WebKit::WebProcessPool::enableProcessTermination):
        (WebKit::WebProcessPool::shouldTerminate):
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::processForRegistrableDomain):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::terminateAllWebContentProcesses):
        (WebKit::webProcessProxyFromConnection):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToAllProcesses):
        (WebKit::WebProcessPool::sendToAllProcessesForSession):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):

2021-04-13  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r275262) [WebDriver] Make automation JS code aware of injected script headers
        https://bugs.webkit.org/show_bug.cgi?id=224422

        Reviewed by BJ Burg.

        r275262 introduced "//# sourceURL..." prefixes to injected scripts and
        this broke Automation JS evaluation, as the code evaluated is wrapped
        with "(async " + CODE + ")". This results in "Unexpected keyword 'function'.
        Expected ')' to end a compound expression." errors.

        Covered by existing tests.

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype._execute): Move initial lines
        with leading comments before the async expression.

2021-04-13  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Color picker sheet should use default height
        https://bugs.webkit.org/show_bug.cgi?id=224371
        <rdar://problem/76416775>

        Reviewed by Wenson Hsieh.

        System color pickers have a default height that is between a half-sheet
        and a full sheet. WebKit should match the default so that users do not
        need to swipe up and down to access all of the controls in the color
        picker.

        * UIProcess/ios/forms/WKFormColorControl.mm:
        (-[WKColorPicker configurePresentation]):

        Always use UIModalPresentationPopover when presenting the
        UIColorPickerViewController. In compact environments, this style
        behaves the same as UIModalPresentationFormSheet, and the presented
        height of the color picker matches the system default.

        This method of presentation matches the logic in UIColorWell.

2021-04-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Refactor logic for presenting the shared QLPreviewPanel when revealing an image
        https://bugs.webkit.org/show_bug.cgi?id=224445
        <rdar://problem/76552762>

        Reviewed by Andy Estes and Devin Rousso.

        `QLPreviewPanel.h` states that `QLPreviewPanel`'s state should never be modified by something that is not
        currently controlling it (where "control" is determined through the `QLPreviewPanelController` category
        methods declared in the same header file). Currently, WebKit code for revealing an image using the shared
        QuickLook panel does not respect this requirement, and instead attempts to set the `dataSource` and `delegate`
        properties of `QLPreviewPanel` out of band.

        While this is not an issue if nothing in the responder chain accepts preview panel control (i.e. implements the
        method `-acceptsPreviewPanelControl:` and returns `YES`), it leads to compatibility issues in apps like Mail
        that override these methods and replace the `dataSource` and `delegate` properties on `QLPreviewPanel`. The end
        result is that `WebPageProxy` ends up in an unexpected state where `WKImageExtractionPreviewController` has been
        created, but will never be destroyed (until the web view itself is destroyed) because we're no longer the
        delegate for the shared `QLPreviewPanel`, and therefore won't receive the teardown message when the preview
        window is dismissed.

        To address this, we refactor this logic so that `WKWebView` (or `WKView`, if applicable) is capable of accepting
        preview panel control. See below for more details.

        * SourcesCocoa.txt:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView acceptsPreviewPanelControl:]):
        (-[WKView beginPreviewPanelControl:]):
        (-[WKView endPreviewPanelControl:]):

        Implement `QLPreviewPanelController` hooks on `WKView`, and plumb directly into `WebViewImpl`.

        * UIProcess/API/mac/WKWebViewMac.mm:
        (-[WKWebView acceptsPreviewPanelControl:]):
        (-[WKWebView beginPreviewPanelControl:]):
        (-[WKWebView endPreviewPanelControl:]):

        Implement `QLPreviewPanelController` hooks on `WKWebView`, and plumb directly into `WebViewImpl`.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::acceptsPreviewPanelControl):

        Only accept control of the preview panel if we have an active image extraction preview controller.

        (WebKit::WebViewImpl::beginPreviewPanelControl):
        (WebKit::WebViewImpl::endPreviewPanelControl):

        When beginning to take control (and relinquishing control) of the preview panel, respectively set and unset the
        `dataSource` and `delegate` properties to the active image extraction preview controller.

        * UIProcess/mac/WKImageExtractionPreviewController.h: Added.
        * UIProcess/mac/WKImageExtractionPreviewController.mm: Added.
        (-[WKImageExtractionPreviewItem initWithURL:title:]):
        (-[WKImageExtractionPreviewItem dealloc]):
        (-[WKImageExtractionPreviewItem previewItemURL]):
        (-[WKImageExtractionPreviewItem previewItemTitle]):
        (-[WKImageExtractionPreviewController initWithPage:url:title:]):
        (-[WKImageExtractionPreviewController numberOfPreviewItemsInPreviewPanel:]):
        (-[WKImageExtractionPreviewController previewPanel:previewItemAtIndex:]):

        Partially upstream `_WKImageExtractionPreviewController` to OpenSource, as `WKImageExtractionPreviewController`
        (the underscore is unnecessary because this object is not SPI- or API-exposed). Additionally, move it out into
        its own header and source, so that it can be imported elsewhere.

        * WebKit.xcodeproj/project.pbxproj:

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=224451

        Reviewed by Chris Dumez.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences encodeWithCoder:]):
        (-[WKPreferences initWithCoder:]):
        (-[WKPreferences plugInsEnabled]):
        (-[WKPreferences setPlugInsEnabled:]):

2021-04-13  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Make ImageBuffer calculate its memoryCost() from its size
        https://bugs.webkit.org/show_bug.cgi?id=224306

        Reviewed by Simon Fraser.

        * Shared/ShareableBitmap.h:
        Make ShareableBitmap::calculateBytesPerRow() public.

        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
        (WebKit::ImageBufferShareableBitmapBackend::configuration):
        (WebKit::ImageBufferShareableBitmapBackend::calculateSafeBackendSize):
        (WebKit::ImageBufferShareableBitmapBackend::calculateBytesPerRow):
        (WebKit::ImageBufferShareableBitmapBackend::calculateMemoryCost):
        (WebKit::ImageBufferShareableBitmapBackend::create):
        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
        ShareableBitmap::calculateBytesPerRow() is used to get the bytesPerRow()
        by giving it the scaled backend size.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::create):
        Use the new name of the function calculateSafeBackendSize().

        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableIOSurfaceBackend::calculateSafeBackendSize):
        (WebKit::ImageBufferShareableIOSurfaceBackend::calculateMemoryCost):
        (WebKit::ImageBufferShareableIOSurfaceBackend::calculateExternalMemoryCost):
        (WebKit::ImageBufferShareableIOSurfaceBackend::bytesPerRow const):
        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:
        Implement these static functions and make them call the corresponding 
        functions from ImageBufferIOSurfaceBackend because this class is derived
        from ImageBufferBackend.

        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableMappedIOSurfaceBackend.cpp:
        (WebKit::ImageBufferShareableMappedIOSurfaceBackend::create):
        Use the new name of the function calculateSafeBackendSize().

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Revert r275172
        https://bugs.webkit.org/show_bug.cgi?id=224499
        <rdar://76396241>

        Reviewed by Tim Horton.

        It turns out that terminate_with_reason uses a different syscall than xpc_connection_kill in its implementation,
        and the former is not allowed by Messages's sandbox yet.  Revert for Messages until they add it.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
        (IPC::Connection::kill):
        * Platform/spi/Cocoa/ReasonSPI.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::platformInvalidate):
        (WebKit::terminateWithReason):

2021-04-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] remove link-time dependency on WebKitSwift
        https://bugs.webkit.org/show_bug.cgi?id=224493

        Reviewed by Eric Carlson.

        * Configurations/WebKit.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2021-04-13  Devin Rousso  <drousso@apple.com>

        [iOS] Only use the theme color if it's valid when `UseThemeColorForScrollAreaBackgroundColor` is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224455

        Reviewed by Wenson Hsieh.

        Without a check for `isValid()`, the `m_themeColor` would always be used, even if not set.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scrollAreaBackgroundColor const):

2021-04-13  Chris Dumez  <cdumez@apple.com>

        Fix typo in GPUProcessConnection::enableVP9Decoders()
        https://bugs.webkit.org/show_bug.cgi?id=224491

        Reviewed by Darin Adler.

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::enableVP9Decoders):

2021-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275889.
        https://bugs.webkit.org/show_bug.cgi?id=224488

        Unintentional commit

        Reverted changeset:

        https://trac.webkit.org/changeset/275889

2021-04-13  Sihui Liu  <sihui_liu@apple.com>

        Make WebIDBServer not block main thread during initialization
        https://bugs.webkit.org/show_bug.cgi?id=224299

        Reviewed by Geoffrey Garen.

        Move Lock from WebCore::IDBServer to WebIDBServer so we can block background thread in suspend() when m_server 
        is uninitialized.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::m_closeCallback):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::suspend):
        (WebKit::WebIDBServer::resume):
        (WebKit::WebIDBServer::openDatabase):
        (WebKit::WebIDBServer::deleteDatabase):
        (WebKit::WebIDBServer::abortTransaction):
        (WebKit::WebIDBServer::commitTransaction):
        (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBServer::createObjectStore):
        (WebKit::WebIDBServer::deleteObjectStore):
        (WebKit::WebIDBServer::renameObjectStore):
        (WebKit::WebIDBServer::clearObjectStore):
        (WebKit::WebIDBServer::createIndex):
        (WebKit::WebIDBServer::deleteIndex):
        (WebKit::WebIDBServer::renameIndex):
        (WebKit::WebIDBServer::putOrAdd):
        (WebKit::WebIDBServer::getRecord):
        (WebKit::WebIDBServer::getAllRecords):
        (WebKit::WebIDBServer::getCount):
        (WebKit::WebIDBServer::deleteRecord):
        (WebKit::WebIDBServer::openCursor):
        (WebKit::WebIDBServer::iterateCursor):
        (WebKit::WebIDBServer::establishTransaction):
        (WebKit::WebIDBServer::databaseConnectionPendingClose):
        (WebKit::WebIDBServer::databaseConnectionClosed):
        (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBServer::didFireVersionChangeEvent):
        (WebKit::WebIDBServer::openDBRequestCancelled):
        (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
        (WebKit::WebIDBServer::addConnection):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::close):
        * NetworkProcess/IndexedDB/WebIDBServer.h:

2021-04-13  Chris Dumez  <cdumez@apple.com>

        The GPUProcess should only launch when it is needed
        https://bugs.webkit.org/show_bug.cgi?id=224461

        Reviewed by Eric Carlson.

        The GPUProcess should only launch when it is needed. This avoids wasting memory
        on simple pages, especially until we enable "DOM rendering in GPU Process".

        * WebProcess/GPU/GPUProcessConnection.cpp:
        (WebKit::GPUProcessConnection::GPUProcessConnection):
        As soon as we create a GPUProcessConnection, if "Media in GPUProcess" is enabled
        we do some media-related initialization that we used to do in
        WebProcess::setUseGPUProcessForMedia(). setUseGPUProcessForMedia() gets called
        when constructing a WebPage and this initialization requires a GPUProcess. We
        thus want to delay the initialization until we actually need a GPUProcess.

        (WebKit::GPUProcessConnection::enableVP9Decoders):
        Rename function to make it clear it is only used for VP9.

        * WebProcess/GPU/GPUProcessConnection.h:
        * WebProcess/GPU/media/RemoteAudioSession.cpp:
        (WebKit::RemoteAudioSession::create):
        (WebKit::RemoteAudioSession::RemoteAudioSession):
        (WebKit::RemoteAudioSession::~RemoteAudioSession):
        (WebKit::RemoteAudioSession::gpuProcessConnectionDidClose):
        (WebKit::RemoteAudioSession::ensureConnection):
        (WebKit::RemoteAudioSession::configuration const):
        (WebKit::RemoteAudioSession::configuration):
        (WebKit::RemoteAudioSession::setCategory):
        (WebKit::RemoteAudioSession::setPreferredBufferSize):
        (WebKit::RemoteAudioSession::tryToSetActiveInternal):
        (WebKit::RemoteAudioSession::category const):
        (WebKit::RemoteAudioSession::configurationChanged):
        * WebProcess/GPU/media/RemoteAudioSession.h:
        Update RemoteAudioSession to lazily initiate the GPUProcess connection instead
        of doing it on construction. The RemoteAudioSession gets created as soon as we
        create a WebPage, at which point we may not need a GPUProcess yet.

        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
        (WebKit::RemoteMediaSessionHelper::RemoteMediaSessionHelper):
        (WebKit::RemoteMediaSessionHelper::ensureConnection):
        (WebKit::RemoteMediaSessionHelper::gpuProcessConnectionDidClose):
        (WebKit::RemoteMediaSessionHelper::startMonitoringWirelessRoutesInternal):
        (WebKit::RemoteMediaSessionHelper::stopMonitoringWirelessRoutesInternal):
        (WebKit::RemoteMediaSessionHelper::providePresentingApplicationPID):
        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h:
        Update RemoteMediaSessionHelper to lazily initiate the GPUProcess connection instead
        of doing it on construction. The RemoteAudioSession gets created as soon as we
        create a WebPage, at which point we may not need a GPUProcess yet.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        - Update GPUProcessConnection::updateParameters() call to enableVP9Decoders() due to rename.
          This makes it clear it is only useful for VP9. We also only call it if there is already
          a GPUProcess connection. If there is no connection right now, the GPUProcessConnection
          constructor will take care of getting the latest values from the PlatformMediaSessionManager
          and send them to the GPUProcess.
        - Call ensureRemoteRenderingBackendProxy() only if we already have a GPUProcessConnection, to
          avoid eagerly launching the GPUProcess. If no GPUProcessConnection exists,
          WebProcess::ensureGPUProcessConnection() will take care of calling ensureRemoteRenderingBackendProxy()
          on its pages.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureGPUProcessConnection):
        This logic used to happen in WebPage::updatePreferences(). However, I had to make it conditional on
        have a GPUProcessConnection to avoid eagerly launching the GPUProcess. As a result, I now need some
        logic when we initiate the GPUProcessConnection to call ensureRemoteRenderingBackendProxy() on the
        WebPages. Note that this is a temporary workaround until we enable DOM Rendering in the GPUProcess.

        (WebKit::WebProcess::setUseGPUProcessForMedia):
        setUseGPUProcessForMedia() gets called when constructing a WebPage, at which point a GPUProcess is
        not useful yet. As a result, we should make sure setUseGPUProcessForMedia() does not call
        ensureGPUProcessConnection() to avoid eagerly launching the GPUProcess and potentially wasting memory.
        To fix this, I moved some of the logic to the GPUProcessConnection constructor so that we do the
        media-related GPUProcess initialization ONLY once we actually have a GPUProcess.

2021-04-13  Sihui Liu  <sihui_liu@apple.com>

        StorageArea in LocalStorageNamespace can be abandoned
        https://bugs.webkit.org/show_bug.cgi?id=224459

        Reviewed by Geoffrey Garen.

        Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).

        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
        (WebKit::LocalStorageNamespace::removeStorageArea):
        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
        * NetworkProcess/WebStorage/StorageArea.cpp:
        (WebKit::StorageArea::removeListener):
        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
        (WebKit::StorageManagerSet::removeConnection):
        (WebKit::StorageManagerSet::disconnectFromStorageArea):

2021-04-13  Peng Liu  <peng.liu6@apple.com>

        [macOS] Netflix videos opened in background tab never become playable after foregrounding
        https://bugs.webkit.org/show_bug.cgi?id=224384

        Reviewed by Eric Carlson.

        When a page calls `navigator.requestMediaKeySystemAccess()` in a background tab, the request
        will be added to a pending request hash map. However, the current implementation of
        `MediaKeySystemPermissionRequestManager` does not send the request when the tab switches
        to foreground. This patch fixes this issue by adding the `MediaKeySystemPermissionRequestManager`
        object as a `MediaCanStartListener` of `Document`, so that it will send its pending requests
        when the tab switches to foreground (`mediaCanStart()`).

        * WebKit.xcodeproj/project.pbxproj: Add two cpp files to the xcode project.

        * WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.cpp:
        Add the object as a `MediaCanStartListener` so that it can send the `MediaKeySystemRequest`
        to the UI process when the tab switches to foreground.
        (WebKit::MediaKeySystemPermissionRequestManager::startMediaKeySystemRequest):
        (WebKit::MediaKeySystemPermissionRequestManager::cancelMediaKeySystemRequest):
        (WebKit::MediaKeySystemPermissionRequestManager::mediaCanStart):
        * WebProcess/EncryptedMedia/MediaKeySystemPermissionRequestManager.h:

2021-04-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] CaptureDevice monitor used from UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=222888

        Reviewed by Youenn Fablet.

        GStreamer ports aim to reduce usage of the GStreamer library in the UIProcess and thus
        should not relay capture devicechange monitoring to the UIProcess. For the long term we plan
        to migrate media processing to the GPUProcess but for now we have to maintain the media
        pipelines in the WebProcess. Initializing GStreamer in multiple processes (including the
        UIProcess) has a significant performance impact on embedded platforms, that's why we try to
        avoid it as much as possible.

        The device monitoring code from the UserMediaProcessManager was partly moved to the
        RealtimeMediaSourceCenter so that it can be easily reused by GStreamer ports from the
        UserMediaPermissionRequestManager.

        * UIProcess/UserMediaProcessManager.cpp:
        (WebKit::UserMediaProcessManager::UserMediaProcessManager):
        (WebKit::UserMediaProcessManager::updateCaptureDevices):
        (WebKit::UserMediaProcessManager::devicesChanged):
        (WebKit::UserMediaProcessManager::beginMonitoringCaptureDevices):
        * UIProcess/UserMediaProcessManager.h:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::UserMediaPermissionRequestManager):
        (WebKit::UserMediaPermissionRequestManager::updateCaptureDevices):
        (WebKit::UserMediaPermissionRequestManager::DeviceObserver::devicesChanged):
        (WebKit::UserMediaPermissionRequestManager::addDeviceChangeObserver):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        (WebKit::UserMediaPermissionRequestManager::DeviceObserver::DeviceObserver):

2021-04-12  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        [CoreIPC] Crash in logDiagnosticMessage code
        https://bugs.webkit.org/show_bug.cgi?id=224390

        Reviewed by Chris Dumez.

        Create new WebPageProxy::logDiagnosticMessage APIs designed to be called on messages that
        need sanity checking, and hook that up to IPC handlers (while leaving existing APIs
        for all other callers).

        Test: ipc/analytics-logger-crash.html

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::logDiagnosticMessageWithValue):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::logDiagnosticMessageFromWebProcess):
        (WebKit::ProvisionalPageProxy::logDiagnosticMessageWithEnhancedPrivacyFromWebProcess):
        (WebKit::ProvisionalPageProxy::logDiagnosticMessageWithValueDictionaryFromWebProcess):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessageFromWebProcess):
        (WebKit::WebPageProxy::logDiagnosticMessageWithResultFromWebProcess):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValueFromWebProcess):
        (WebKit::WebPageProxy::logDiagnosticMessageWithEnhancedPrivacyFromWebProcess):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValueDictionaryFromWebProcess):
        (WebKit::WebPageProxy::logDiagnosticMessageWithDomainFromWebProcess):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithEnhancedPrivacy):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValueDictionary):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithDomain):

2021-04-12  Jiewen Tan  <jiewen_tan@apple.com>

        Force the WebAuthn compatible mode to always show UI
        https://bugs.webkit.org/show_bug.cgi?id=224402
        <rdar://75757362>

        Reviewed by Brent Fulgham.

        Covered by manual tests.

        * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm:
        (WebKit::LocalConnection::verifyUser):

2021-04-12  Sihui Liu  <sihui_liu@apple.com>

        Create WebIDBServer only when it is needed
        https://bugs.webkit.org/show_bug.cgi?id=224305
        rdar://71962196

        Reviewed by Alex Christensen.

        Currently each WebIDBServer has a separate thread, so we don't want to create or keep WebIDBServer if it's not 
        in use. There are two cases where network process needs a WebIDBServer:
        1. handle requests from UI process to collect or remove data
        2. handle requests from Web process to perform IDB operations 

        Previously, we created a WebIDBServer when network process connects to a web process, but that does not mean web
        process will perform IDB operations and we may create a thread that's not used. To avoid this, add a new message
        AddIDBConnection for web process to ensure network process has WebIDBServer when it's about to perform operation.

        Also, previously network process removes a WebIDBServer when session is removed and WebIDBServer is not binded 
        with any web process connection. Now we remove WebIDBServer when it's done handling requests, that is count of
        pending requests from UI process is 0 and WebIDBServer is not binded with web process connection. We also remove
        WebIDBServer at when network process is about to be destroyed (NetworkProcess::didClose) so we can break the 
        reference cycle of NetworkProcess-WebIDBServer-IDBServer, and make sure thread exits.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer):
        (WebKit::m_closeCallback):
        (WebKit::WebIDBServer::~WebIDBServer):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::close):
        (WebKit::WebIDBServer::tryClose):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::addIDBConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::createWebIDBServer):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        (WebKit::NetworkProcess::removeWebIDBServerIfPossible): Deleted. Move the removal code to WebIDBServer.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):

2021-04-12  Chris Dumez  <cdumez@apple.com>

        Make sure AuxiliaryProcessProxy::sendMessage() is called on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=224448

        Reviewed by Geoffrey Garen.

        Make sure AuxiliaryProcessProxy::sendMessage() is called on the main thread. This is a follow-up to
        Bug 224377 but for trunk.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        (WebKit::AuxiliaryProcessProxy::replyToPendingMessages):

2021-04-12  Ada Chan  <ada.chan@apple.com>

        Initial implementation of WebChromeClient::enumerateImmersiveXRDevices() and XRDeviceProxy
        https://bugs.webkit.org/show_bug.cgi?id=224353

        Reviewed by Dean Jackson

        - Add XRDeviceProxy which implements PlatformXR::Device.
        - Implement WebChromeClient::enumerateImmersiveXRDevices(), which calls PlatformXRSystemProxy
        to get the list of XRDeviceProxy.
        - XRDeviceProxy goes through PlatformXRSystemProxy to handle its operations.
        PlatformXRSystemProxy sends messages over IPC to PlatformXRSystem on the UI process side,
        which handles XR device discovery and manages sessions via the PlatformXRCoordinator interface.
        PlatformXRSystem::xrCoordinator() returns null for now and will be handled in a later patch.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Platform/Logging.h:
        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        (headers_for_type):
        * Shared/Cocoa/XRDeviceProxy.h: Added.
        * Shared/Cocoa/XRDeviceProxy.mm: Added.
        (WebKit::XRDeviceProxy::create):
        (WebKit::XRDeviceProxy::XRDeviceProxy):
        Initialize its data members based on the XRDeviceInfo passed in.
        Keep a weak pointer to PlatformXRSystemProxy (as PlatformXRSystemProxy has
        strong references to its list of XRDeviceProxy).
        (WebKit::XRDeviceProxy::sessionDidEnd):
        Notify the TrackingAndRenderingClient that the session has ended.
        (WebKit::XRDeviceProxy::initializeTrackingAndRendering):
        (WebKit::XRDeviceProxy::shutDownTrackingAndRendering):
        (WebKit::XRDeviceProxy::views const):
        Return left and right views if the device supports stereo rendering.
        Otherwise return just one view.
        (WebKit::XRDeviceProxy::requestFrame):
        * Shared/WebCoreArgumentCoders.h:
        * SourcesCocoa.txt:
        * UIProcess/Cocoa/PlatformXRCoordinator.h: Copied from Source/WebCore/platform/xr/cocoa/PlatformXRCocoa.h.
        Initial interface for communicating with the platform regarding XR devices and sessions.
        For now, the interface covers session creation and termination, and scheduling frame updates.
        * UIProcess/Cocoa/PlatformXRSystem.h: Copied from Source/WebCore/platform/xr/cocoa/PlatformXRCocoa.h.
        * UIProcess/Cocoa/PlatformXRSystem.messages.in: Copied from Source/WebCore/platform/xr/cocoa/PlatformXRCocoa.h.
        * UIProcess/Cocoa/PlatformXRSystem.mm: Added.
        (WebKit::PlatformXRSystem::PlatformXRSystem):
        (WebKit::PlatformXRSystem::~PlatformXRSystem):
        (WebKit::PlatformXRSystem::invalidate):
        End any existing session on invalidation.
        (WebKit::PlatformXRSystem::enumerateImmersiveXRDevices):
        (WebKit::PlatformXRSystem::initializeTrackingAndRendering):
        (WebKit::PlatformXRSystem::shutDownTrackingAndRendering):
        (WebKit::PlatformXRSystem::requestFrame):
        (WebKit::PlatformXRSystem::xrCoordinator):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didAttachToRunningProcess):
        Set up the PlatformXRSystem held by the WebPageProxy.
        (WebKit::WebPageProxy::resetState):
        Invalidate m_xrSystem so existing session is ended properly.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/HighPerformanceGPUManager.h:
        Include WeakHashSet.h due to recent type change of m_processesRequiringHighPerformance
        from HashSet to WeakHashSet.
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::enumerateImmersiveXRDevices):
        Get the list of XRDeviceInfo that represents the immersive devices returned
        from PlatformXRSystem. Reuse any existing XRDeviceProxy instances that have the same
        XRDeviceIdentifier. Otherwise, create new ones.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
        (WebKit::WebPage::xrSystemProxy):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/PlatformXRSystemProxy.h: Copied from Source/WebCore/platform/xr/cocoa/PlatformXRCocoa.h.
        * WebProcess/cocoa/PlatformXRSystemProxy.messages.in: Copied from Source/WebCore/platform/xr/cocoa/PlatformXRCocoa.h.
        * WebProcess/cocoa/PlatformXRSystemProxy.mm: Added.
        (WebKit::PlatformXRSystemProxy::PlatformXRSystemProxy):
        (WebKit::PlatformXRSystemProxy::~PlatformXRSystemProxy):
        (WebKit::PlatformXRSystemProxy::enumerateImmersiveXRDevices):
        (WebKit::PlatformXRSystemProxy::initializeTrackingAndRendering):
        (WebKit::PlatformXRSystemProxy::shutDownTrackingAndRendering):
        (WebKit::PlatformXRSystemProxy::requestFrame):
        (WebKit::PlatformXRSystemProxy::sessionDidEnd):
        (WebKit::PlatformXRSystemProxy::deviceByIdentifier):

2021-04-12  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Use g_object_notify_by_pspec() whenever possible
        https://bugs.webkit.org/show_bug.cgi?id=224366

        Reviewed by Carlos Garcia Campos.

        Keep a static array with the GParamSpec pointer for each property, and trigger
        property change notifications using g_object_notify_by_pspec() to avoid looking
        up by its name each time.

        * Shared/API/glib/WebKitURIRequest.cpp:
        (webkit_uri_request_class_init):
        (webkit_uri_request_set_uri):
        * UIProcess/API/glib/WebKitDownload.cpp:
        (webkitDownloadDecideDestination):
        (webkit_download_class_init):
        (webkitDownloadSetResponse):
        (webkitDownloadNotifyProgress):
        (webkit_download_set_destination):
        (webkit_download_set_allow_overwrite):
        * UIProcess/API/glib/WebKitEditorState.cpp:
        (webkit_editor_state_class_init):
        (webkitEditorStateSetTypingAttributes):
        * UIProcess/API/glib/WebKitGeolocationManager.cpp:
        (webkitGeolocationManagerSetEnableHighAccuracy):
        (webkit_geolocation_manager_class_init):
        * UIProcess/API/glib/WebKitInputMethodContext.cpp:
        (webkit_input_method_context_class_init):
        (webkit_input_method_context_set_input_purpose):
        (webkit_input_method_context_set_input_hints):
        * UIProcess/API/glib/WebKitSettings.cpp:
        (webkit_settings_class_init):
        (webkit_settings_set_enable_javascript):
        (webkit_settings_set_auto_load_images):
        (webkit_settings_set_load_icons_ignoring_image_load_setting):
        (webkit_settings_set_enable_offline_web_application_cache):
        (webkit_settings_set_enable_html5_local_storage):
        (webkit_settings_set_enable_html5_database):
        (webkit_settings_set_enable_xss_auditor):
        (webkit_settings_set_enable_frame_flattening):
        (webkit_settings_set_enable_java):
        (webkit_settings_set_javascript_can_open_windows_automatically):
        (webkit_settings_set_enable_hyperlink_auditing):
        (webkit_settings_set_default_font_family):
        (webkit_settings_set_monospace_font_family):
        (webkit_settings_set_serif_font_family):
        (webkit_settings_set_sans_serif_font_family):
        (webkit_settings_set_cursive_font_family):
        (webkit_settings_set_fantasy_font_family):
        (webkit_settings_set_pictograph_font_family):
        (webkit_settings_set_default_font_size):
        (webkit_settings_set_default_monospace_font_size):
        (webkit_settings_set_minimum_font_size):
        (webkit_settings_set_default_charset):
        (webkit_settings_set_enable_developer_extras):
        (webkit_settings_set_enable_resizable_text_areas):
        (webkit_settings_set_enable_tabs_to_links):
        (webkit_settings_set_enable_dns_prefetching):
        (webkit_settings_set_enable_caret_browsing):
        (webkit_settings_set_enable_fullscreen):
        (webkit_settings_set_print_backgrounds):
        (webkit_settings_set_enable_webaudio):
        (webkit_settings_set_enable_webgl):
        (webkit_settings_set_allow_modal_dialogs):
        (webkit_settings_set_zoom_text_only):
        (webkit_settings_set_javascript_can_access_clipboard):
        (webkit_settings_set_media_playback_requires_user_gesture):
        (webkit_settings_set_media_playback_allows_inline):
        (webkit_settings_set_draw_compositing_indicators):
        (webkit_settings_set_enable_site_specific_quirks):
        (webkit_settings_set_enable_page_cache):
        (webkit_settings_set_user_agent):
        (webkit_settings_set_enable_smooth_scrolling):
        (webkit_settings_set_enable_write_console_messages_to_stdout):
        (webkit_settings_set_enable_media_stream):
        (webkit_settings_set_enable_mock_capture_devices):
        (webkit_settings_set_enable_spatial_navigation):
        (webkit_settings_set_enable_mediasource):
        (webkit_settings_set_enable_encrypted_media):
        (webkit_settings_set_enable_media_capabilities):
        (webkit_settings_set_allow_file_access_from_file_urls):
        (webkit_settings_set_allow_universal_access_from_file_urls):
        (webkit_settings_set_allow_top_navigation_to_data_urls):
        (webkit_settings_set_hardware_acceleration_policy):
        (webkit_settings_set_enable_back_forward_navigation_gestures):
        (webkit_settings_set_enable_javascript_markup):
        (webkit_settings_set_enable_media):
        (webkit_settings_set_media_content_types_requiring_hardware_support):
        * UIProcess/API/glib/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkit_web_context_class_init):
        (webkit_web_context_set_use_system_appearance_for_scrollbars):
        * UIProcess/API/glib/WebKitWebResource.cpp:
        (webkit_web_resource_class_init):
        (webkitWebResourceUpdateURI):
        (webkitWebResourceSetResponse):
        * UIProcess/API/glib/WebKitWebView.cpp:
        (webkitWebViewSetIsLoading):
        (webkitWebViewIsPlayingAudioChanged):
        (webkitWebViewUpdateFavicon):
        (webkit_web_view_class_init):
        (webkitWebViewLoadChanged):
        (webkitWebViewDidChangePageID):
        (webkit_web_view_set_is_muted):
        (webkit_web_view_set_settings):
        (webkit_web_view_set_zoom_level):
        (webkit_web_view_set_editable):
        * UIProcess/API/glib/WebKitWindowProperties.cpp:
        (webkit_window_properties_class_init):
        (webkitWindowPropertiesSetGeometry):
        (webkitWindowPropertiesSetToolbarVisible):
        (webkitWindowPropertiesSetMenubarVisible):
        (webkitWindowPropertiesSetStatusbarVisible):
        (webkitWindowPropertiesSetLocationbarVisible):
        (webkitWindowPropertiesSetScrollbarsVisible):
        (webkitWindowPropertiesSetResizable):
        (webkitWindowPropertiesSetFullscreen):
        * UIProcess/API/gtk/WebKitColorChooserRequest.cpp:
        (webkit_color_chooser_request_class_init):
        (webkit_color_chooser_request_set_rgba):
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkit_print_operation_class_init):
        (webkit_print_operation_set_print_settings):
        (webkit_print_operation_set_page_setup):
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (webkit_web_inspector_class_init):
        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
        (webkitWebPageSetURI):
        (webkit_web_page_class_init):

2021-04-11  Sam Weinig  <weinig@apple.com>

        Simplify WebKitTestRunner preference reset to be more like DRT
        https://bugs.webkit.org/show_bug.cgi?id=224410

        Reviewed by Darin Adler.

        Add WKPreferencesStartBatchingUpdates/WKPreferencesEndBatchingUpdates
        to support batching preferences updates by clients.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesStartBatchingUpdates):
        (WKPreferencesEndBatchingUpdates):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPreferences.h:

2021-04-10  Alex Christensen  <achristensen@webkit.org>

        Use WeakHashSet<WebProcessProxy> instead of HashSet<WebProcessProxy*>
        https://bugs.webkit.org/show_bug.cgi?id=224393

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::requestHighPerformanceGPU):
        (WebKit::WebProcessProxy::releaseHighPerformanceGPU):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::enableProcessTermination):
        (WebKit::WebProcessPool::shouldTerminate):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::startedUsingGamepads):
        (WebKit::WebProcessPool::stoppedUsingGamepads):
        (WebKit::WebProcessPool::processStoppedUsingGamepads):
        (WebKit::WebProcessPool::gamepadConnected):
        (WebKit::WebProcessPool::gamepadDisconnected):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::maybeShutDown):
        (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess):
        * UIProcess/mac/HighPerformanceGPUManager.mm:
        (WebKit::HighPerformanceGPUManager::addProcessRequiringHighPerformance):
        (WebKit::HighPerformanceGPUManager::removeProcessRequiringHighPerformance):
        (WebKit::HighPerformanceGPUManager::updateState):

2021-04-10  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessProxy::shouldSendPendingMessage()
        https://bugs.webkit.org/show_bug.cgi?id=224377
        <rdar://75329251>

        Reviewed by David Kilzer.

        We are crashing with a null-dereference of pendingMessage.encoder inside WebProcessProxy::shouldSendPendingMessage().
        However, pendingMessage.encoder is a UniqueRef<> and thus cannot be null. Also, we know that the WebProcessProxy
        is alive because WebProcessProxy::didFinishLaunching() has a protector.

        One thing that I believe could theoretically happen and would not be safe though is AuxiliaryProcessProxy::sendMessage()
        being called on a non-main thread. Sending IPC off the main thread is safe in general and something we commonly do with
        an IPC::Connection. To make this safe, IPC::Connection uses a Lock to protect its vector of messages. However, sending
        IPC via an AuxiliaryProcessProxy is currently not thread safe as it relies on the process state (which gets updated on
        the main thread) and access to the m_pendingMessages is not synchronized.
        
        As a speculative fix, I have added logic in AuxiliaryProcessProxy::sendMessage() to dispatch to the main thread if
        we're not already on it. I have also used WTF::DestructionThread::MainRunLoop to make sure all AuxiliaryProcessProxy
        objects get destroyed on the main thread.

        In a follow-up, I am planning to add a release assertion in AuxiliaryProcessProxy::sendMessage() to make sure we're
        on a main thread. We'll then be able to drop the "dispatching the main thread" logic. For now though, I think we
        should start with the "dispatch to main thread" logic, so that we have a patch that we can cherry-pick to a branch.

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::sendMessage):
        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
        (WebKit::AuxiliaryProcessProxy::replyToPendingMessages):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
        (WebKit::WebAuthnProcessProxy::singleton):
        * UIProcess/WebProcessProxy.h:

2021-04-10  Charlène Wendling  <julianaito@posteo.jp>

        Properly use CompletionHandler when USE_OPENGL_OR_ES is set to OFF
        https://bugs.webkit.org/show_bug.cgi?id=224149

        Reviewed by Fujii Hironori.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
        (WebKit::LayerTreeHost::forceRepaintAsync):

2021-04-10  Sihui Liu  <sihui_liu@apple.com>

        Unreviewed, reverting r275794, r275784, r275779

        r275779 caused bots to crash and r275794, r275784 didn't fully fix it; reverting the patches to investigate.

        Reverted changeset:

        "Create WebIDBServer only when it is needed"
        https://bugs.webkit.org/show_bug.cgi?id=224305
        https://commits.webkit.org/r275779

2021-04-10  Sihui Liu  <sihui_liu@apple.com>

        Unreviewed, fix test crashes after r275779
        https://bugs.webkit.org/show_bug.cgi?id=224305
        rdar://71962196

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::WebIDBServer): rolling back change on setting thread name as we see crash in 
        pthread_setname_np.

2021-04-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] CADisplayLink in the web process is used unintentionally
        https://bugs.webkit.org/show_bug.cgi?id=224395

        Reviewed by Tim Horton.

        When RemoteLayerTreeDrawingArea called windowScreenDidChange() from its constructor,
        m_page.drawingArea() was null which resulted in DisplayRefreshMonitor::create()
        receiving a null DisplayRefreshMonitorFactory*, so it fell back to the legacy
        DisplayRefreshMonitorIOS, instead of using RemoteLayerTreeDisplayRefreshMonitor.

        Fix by sending windowScreenDidChange() from the UI process, with the synthetic
        DisplayID generated from the webPageID(). This has the advantage that
        WebPageProxy will also store the correct DisplayID, and is more similar to macOS.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

2021-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r271660): Tap highlight no longer shows when tapping clickable elements without touch event listeners
        https://bugs.webkit.org/show_bug.cgi?id=224385
        <rdar://problem/76462370>

        Reviewed by Tim Horton.

        In r271660, I added a call to `-finishInteraction` when resetting the synthetic tap gesture to fix a bug where
        it was possible for the tap highlight to remain indefinitely when tapping on a clickable element with a touchend
        event listener. This was because the touch end deferring gesture defers `-_singleTapDidReset:` until after
        `-_didGetTapHighlightForRequest:…nodeHasBuiltInClickHandling:`, where we receive the tap highlight information.

        ```
        2021-04-09 13:05:27.141097-0700 -[WKContentView(WKInteraction) _singleTapIdentified:]
        2021-04-09 13:05:27.148678-0700 -[WKContentView(WKInteraction) _didGetTapHighlightForRequest:…nodeHasBuiltInClickHandling:]
        2021-04-09 13:05:27.162525-0700 -[WKContentView(WKInteraction) _singleTapRecognized:]
        2021-04-09 13:05:27.162675-0700   ↳ -[WKContentView(WKInteraction) _showTapHighlight]
        2021-04-09 13:05:27.163250-0700 -[WKContentView(WKInteraction) _singleTapDidReset:]
        2021-04-09 13:05:51.849481-0700   ↳ -[WKContentView(WKInteraction) _finishInteraction]
        ```

        However, in the case where there is no touchend event listener and when fast-click is active, we reset the tap
        gesture before receiving the tap highlight information:

        ```
        2021-04-09 13:05:51.836638-0700 -[WKContentView(WKInteraction) _singleTapIdentified:]
        2021-04-09 13:05:51.846152-0700 -[WKContentView(WKInteraction) _singleTapRecognized:]
        2021-04-09 13:05:51.847196-0700 -[WKContentView(WKInteraction) _singleTapDidReset:]
        2021-04-09 13:05:51.848563-0700 -[WKContentView(WKInteraction) _didGetTapHighlightForRequest:…nodeHasBuiltInClickHandling:]
        2021-04-09 13:05:51.848851-0700   ↳ -[WKContentView(WKInteraction) _showTapHighlight]
        2021-04-09 13:05:51.849481-0700   ↳ -[WKContentView(WKInteraction) _finishInteraction]

        ```

        Critically, this means that calling `-_finishInteraction` in `-_singleTapDidReset:` prematurely flagged the
        tap highlight request as complete (by setting `_isTapHighlightIDValid` to `NO`) in the case where we aren't
        deferring gestures, which caused us to avoid showing the tap highlight at all when we eventually receive the tap
        highlight information.

        To fix this, only fade out the tap highlight view in `-_singleTapDidReset:` if the tap highlight request has
        already finished (i.e. `_isTapHighlightIDValid` has been set to `NO`). Additionally, split logic for fading out
        the highlight view into a separate method, and add a `BOOL` flag to make the fading idempotent.

        Test: fast/events/touch/ios/tap-highlight-during-synthetic-click.html

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

        Also add a testing-only method to report the frame of the tap highlight view. Note that this only attempts to
        return the current `frame` of the tap highlight view instead of converting the frame to the coordinate system of
        the content view (as other similar testing hooks do), since the tap highlight view only exists in the view
        hierarchy for a brief duration.

        (-[WKContentView _finishInteraction]):
        (-[WKContentView _fadeTapHighlightViewIfNeeded]):
        (-[WKContentView _singleTapDidReset:]):

2021-04-09  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Correct process-info rules to restrict to self
        https://bugs.webkit.org/show_bug.cgi?id=224383
        <rdar://problem/66582454>

        Reviewed by Eric Carlson.

        The sandbox allows 'process-info' by default, so our allow rules have no real impact.
        We need to deny access first, as we do on macOS, so that the allow rules have meaning.

        I reviewed the macOS sandbox, and made sure the iOS sandbox allows the same items.

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

2021-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process crashes if image extraction is requested for an element that is pending image extraction
        https://bugs.webkit.org/show_bug.cgi?id=224397
        <rdar://problem/76472254>

        Reviewed by Tim Horton.

        Add a missing null check, so that we don't append (and then end up attempting to call) a null completion handler
        in the case where image extraction is re-requested for an element that already has a pending image extraction
        request.

        This is currently not possible to reliably test this; in a future patch, I will add testing infrastructure that
        will allow us to simulate image extraction requests and responses at the client layer.

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

2021-04-09  Sihui Liu  <sihui_liu@apple.com>

        Unreviewed, fix for test crashes after r275779.
        https://bugs.webkit.org/show_bug.cgi?id=224305
        rdar://71962196

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createWebIDBServer): hitting an assertion when deref the WeakPtr, so rolling back to
        old impl.

2021-04-09  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Don't set LD_RUNPATH_SEARCH_PATHS in the WebKit project file.
        https://bugs.webkit.org/show_bug.cgi?id=224392

        Reviewed by Eric Carlson.

        * WebKit.xcodeproj/project.pbxproj:

2021-04-09  Sihui Liu  <sihui_liu@apple.com>

        Create WebIDBServer only when it is needed
        https://bugs.webkit.org/show_bug.cgi?id=224305
        rdar://71962196

        Reviewed by Alex Christensen.

        Currently each WebIDBServer comes with a thread, so we don't want to keep WebIDBServer if it's not in use.
        Now there are two cases where network process needs a WebIDBServer:
        1. handle requests from UI process to collect or remove data
        2. handle requests from Web process to perform IDB operations 
        We created a WebIDBServer when network process connects to a web process, and we should create it when 
        web process is about to perform IDB operations. Also, we should remove WebIDBServer if it's done handling
        requests, i.e count of pending requests from UI process is 0 and WebIDBServer is not associated with any web 
        process connection.

        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        (WebKit::WebIDBServer::create):
        (WebKit::WebIDBServer::WebIDBServer): Add SessionID to thread name so we know which session to blame in crash 
        traces. 
        (WebKit::m_closeCallback):
        (WebKit::WebIDBServer::getOrigins):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
        (WebKit::WebIDBServer::renameOrigin):
        (WebKit::WebIDBServer::removeConnection):
        (WebKit::WebIDBServer::tryClose):
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::addIDBConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Add a message for web process to ask network process
        to create WebIDBServer if not exists, and associate the web process connection with WebIDBServer.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::createWebIDBServer):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        (WebKit::NetworkProcess::removeWebIDBServerIfPossible): Deleted. Move the removal code to WebIDBServer.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):

2021-04-09  Chris Dumez  <cdumez@apple.com>

        Need to propagate and use 'canShowWhileLocked' in the GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=224345
        <rdar://76011262>

        Reviewed by Tim Horton.

        The GPUProcess was previously creating a single visibility propagation view even though
        it was potentially serving several web views. Also, it would also pass
        `canShowWhileLocked=false` when constructing the visibility propagation view, ignoring
        the value of WKWebViewConfiguration._canShowWhileLocked. This would lead to issues for
        apps relying on WKWebView to show content on the lock screen.

        To address the issue, we now have the RemoteRenderingBackend construct its own
        visibility propagation view in the GPUProcess. The GPUProcess constructs a
        RemoteRenderingBackend per WebPage being served so this is convenient. When sending the
        IPC to the GPUProcess to construct the RemoteRenderingBackend, the WebProcess now sends
        the page identifier as well as the value of the canShowWhileLocked flag so that we
        can use the correct canShowWhileLocked flag when constructing the visibility propagation
        view.

        The logic in the UIProcess for dealing with GPUProcess visibility propagation views
        is now almost identical to WebProcess visibility propagation views. They are stored on
        the WebPageProxy and get swapped on process-swap (since a new WebPage gets created).

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in:
        * GPUProcess/GPUProcess.cpp:
        (WebKit::GPUProcess::initializeGPUProcess):
        * GPUProcess/GPUProcess.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::create):
        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackendCreationParameters.h: Added.
        (WebKit::RemoteRenderingBackendCreationParameters::encode const):
        (WebKit::RemoteRenderingBackendCreationParameters::decode):
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::didCreateContextInWebProcessForVisibilityPropagation):
        (WebKit::WebPageProxy::didCreateContextInGPUProcessForVisibilityPropagation):
        * UIProcess/GPU/GPUProcessProxy.cpp:
        (WebKit::GPUProcessProxy::getGPUProcessConnection):
        (WebKit::GPUProcessProxy::didCreateContextForVisibilityPropagation):
        * UIProcess/GPU/GPUProcessProxy.h:
        * UIProcess/GPU/GPUProcessProxy.messages.in:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::didCreateContextInWebProcessForVisibilityPropagation):
        * UIProcess/ProvisionalPageProxy.cpp:
        (WebKit::ProvisionalPageProxy::ProvisionalPageProxy):
        (WebKit::ProvisionalPageProxy::didCreateContextInWebProcessForVisibilityPropagation):
        (WebKit::ProvisionalPageProxy::didCreateContextInGPUProcessForVisibilityPropagation):
        (WebKit::ProvisionalPageProxy::didReceiveMessage):
        * UIProcess/ProvisionalPageProxy.h:
        (WebKit::ProvisionalPageProxy::contextIDForVisibilityPropagationInWebProcess const):
        (WebKit::ProvisionalPageProxy::contextIDForVisibilityPropagationInGPUProcess const):
        * UIProcess/SuspendedPageProxy.cpp:
        (WebKit::SuspendedPageProxy::SuspendedPageProxy):
        * UIProcess/SuspendedPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::swapToProvisionalPage):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::gpuProcessCrashed):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didCreateContextInWebProcessForVisibilityPropagation):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView _setupVisibilityPropagationViewForWebProcess]):
        (-[WKContentView _setupVisibilityPropagationViewForGPUProcess]):
        (-[WKContentView _removeVisibilityPropagationViewForWebProcess]):
        (-[WKContentView _processDidExit]):
        (-[WKContentView _gpuProcessCrashed]):
        (-[WKContentView _didRelaunchProcess]):
        (-[WKContentView _webProcessDidCreateContextForVisibilityPropagation]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::create):
        (WebKit::RemoteRenderingBackendProxy::RemoteRenderingBackendProxy):
        (WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
        (WebKit::RemoteRenderingBackendProxy::connectToGPUProcess):
        (WebKit::RemoteRenderingBackendProxy::reestablishGPUProcessConnection):
        (WebKit::RemoteRenderingBackendProxy::messageSenderDestinationID const):
        (WebKit::RemoteRenderingBackendProxy::waitForDidCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackendProxy::waitForDidFlush):
        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetImageData):
        (WebKit::RemoteRenderingBackendProxy::destroyGetImageDataSharedMemory):
        (WebKit::RemoteRenderingBackendProxy::getDataURLForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getDataForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getBGRADataForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getShareableBitmap):
        (WebKit::RemoteRenderingBackendProxy::cacheNativeImage):
        (WebKit::RemoteRenderingBackendProxy::cacheFont):
        (WebKit::RemoteRenderingBackendProxy::deleteAllFonts):
        (WebKit::RemoteRenderingBackendProxy::releaseRemoteResource):
        (WebKit::RemoteRenderingBackendProxy::sendWakeupMessage):
        (WebKit::RemoteRenderingBackendProxy::didAppendData):
        (WebKit::RemoteRenderingBackendProxy::createItemBuffer):
        (WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::ensureRemoteRenderingBackendProxy):

2021-04-08  Darin Adler  <darin@apple.com>

        [Cocoa] Reduce usage of autorelease, fix mistakes noticed nearby code using autorelease
        https://bugs.webkit.org/show_bug.cgi?id=224340

        Reviewed by Anders Carlsson.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Use RetainPtr<NSURLRequest> instead of
        __strong NSURLRequest*& for the in/out argument of the
        applySniffingPoliciesAndBindRequestToInferfaceIfNeeded function.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
        Updated to use RetainPtr instead of __strong. Also fixed some incorrect uses of %llu
        to log NSUInteger and uint64_t, switching to "%lu" (and casting to unsigned long to
        retain 32-bit compatibility) and "%" PRIu64 respectively.
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): Ditto.
        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection): Ditto.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (setIgnoreHSTS): Added. Helper function so the code that makes a mutableCopy is isolated
        in a helper function for clarity. A good counterpart to the existing ignoreHSTS function.
        (updateIgnoreStrictTransportSecuritySetting): Changed to use a RetainPtr<NSURLRequest>
        in/out argument instead of an argument plus a return value, obviating the need to use
        autorelease and making this easier to read. Used setIgnoreHSTS for brevity in implementation.
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        Update for change to updateIgnoreStrictTransportSecuritySetting.
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]): Ditto.
        (WebKit::proxyDictionary): Return a RetainPtr instead of something autoreleased.
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Call get() on the result of the
        proxyDictionary function.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (makePolicyDecisionBlock): Return a BlockPtr instead of an autoreleased block.
        Also use a lambda and retainWK for better clarity on capture semantics rather than
        doing a WKRetain in the caller and a WKRelease in the block.
        (setUpPagePolicyClient): Call get() on the result of the
        makePolicyDecisionBlock function.

        * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:
        (WebKit::animationValueFromKeyframeValue): Return a RetainPtr instead of an
        autoreleased object.
        (WebKit::createAnimation): Call get() on the result of the
        animationValueFromKeyframeValue function.

2021-04-09  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Silence a CFNetwork preference file access warning 
        https://bugs.webkit.org/show_bug.cgi?id=224344
        <rdar://problem/75839558>

        Reviewed by Eric Carlson.

        Silence sandbox telemetry and reports when CFNetwork attempts to read an unimportant preference
        when executing in the WebContent process. This has been confirmed to be a silent/safe failiure
        case (just returns false) and is not needed in the WebContent process.

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

2021-04-09  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Use context menus for text input datalist dropdowns
        https://bugs.webkit.org/show_bug.cgi?id=224287
        <rdar://problem/76351317>

        Reviewed by Wenson Hsieh.

        Use context menus rather than popovers to present suggested values for
        text inputs with an associated datalist element.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:

        Expose _isShowingDatalistSuggestions for testing. Previously, the test
        runner traversed the view hierarchy in order to determine whether the
        suggestions were visible. However, that approach is not reliable since
        we no longer own the presented view, and UIKit could change the
        implementation details of context menus.

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

        Add a mechanism to perform actions after an editor state update when
        focusing an element. If an update is not expected, run the block
        immediately.

        See below for details on why this is necessary.

        (-[WKContentView _didUpdateEditorState]):

        Run any pending blocks that were awaiting an editor state update.

        (-[WKContentView isShowingDataListSuggestions]):
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.h:
        * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:
        (-[WKDataListSuggestionsDropdown invalidate]):
        (-[WKDataListSuggestionsDropdown didSelectOptionAtIndex:]):
        (-[WKDataListSuggestionsDropdown _showSuggestions]):

        Present a context menu displaying the suggestions if one is not already
        presented.

        Note that focusing text fields can result in automatic zooming of the
        webview. This zooming occurs after an editor state update for focused
        elements. The presentation of the context menu is deferred to run
        after an editor state update to ensure any zooming occurs before
        showing the menu. Without this deferred presentation mechanism, the
        context menu can be presented before the state update, partially
        obscuring the webview and resulting in an incorrect zoom once the
        update occurs.

        If a menu is already presented, use `updateVisibleMenuWithBlock:` to
        update the contents of the menu.

        (-[WKDataListSuggestionsDropdown _updateTextSuggestions]):
        (-[WKDataListSuggestionsDropdown _updateSuggestionsMenuElements]):
        (-[WKDataListSuggestionsDropdown _removeContextMenuInteraction]):
        (-[WKDataListSuggestionsDropdown _suggestionsMenuDidPresent]):
        (-[WKDataListSuggestionsDropdown _suggestionsMenuDidDismiss]):
        (-[WKDataListSuggestionsDropdown _preferredEdgeInsetsForSuggestionsMenu]):

        By default, context menus can obscure the presenting element if there
        are too many options. Inset the menu so that it does not overlap the
        text field. Present the menu above the text field if there is less
        space underneath the field.

        (-[WKDataListSuggestionsDropdown contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        (-[WKDataListSuggestionsDropdown _contextMenuInteraction:styleForMenuWithConfiguration:]):
        (-[WKDataListSuggestionsDropdown contextMenuInteraction:configurationForMenuAtLocation:]):
        (-[WKDataListSuggestionsDropdown contextMenuInteraction:willDisplayMenuForConfiguration:animator:]):
        (-[WKDataListSuggestionsDropdown contextMenuInteraction:willEndForConfiguration:animator:]):

2021-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Wrong KeyboardEvent.key for numeric key pad with NumLock
        https://bugs.webkit.org/show_bug.cgi?id=224352

        Reviewed by Don Olmstead.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2021-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a completion handler argument to `ChromeClient::requestImageExtraction`
        https://bugs.webkit.org/show_bug.cgi?id=224348

        Reviewed by Tim Horton.

        Add an optional completion handler argument to `ChromeClient::requestImageExtraction`. If specified, this
        completion handler will be invoked with the image overlay host element (if present), once image extraction
        finishes, or if the element is not suitable for image extraction.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestImageExtraction):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::requestImageExtraction):

        Refactor this code, such that the data structure that (weakly) holds elements pending image extraction is
        distinct from the set of elements that have completed image extraction. This allows us to queue completion
        handlers to each element with a pending image extraction request, and invoke them once image extraction is
        finished.

        The existing weak set, `m_elementsWithExtractedImages`, is now repurposed to keep track of only elements that
        have finished image extraction (and may or may not contain an image overlay). The new member variable,
        `m_elementsPendingImageExtraction`, maintains pairs of weak elements and completion handlers; upon finishing
        image extraction, each completion handler corresponding to the element (if it still exists) will be invoked.
        Since the element is weakly held, in the case where the element is destroyed before image extraction finishes,
        we will clean up the (now-null) entries in `m_elementsPendingImageExtraction` when the image extraction request
        is finished.

        * WebProcess/WebPage/WebPage.h:

2021-04-08  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Write more blinded secret tests
        https://bugs.webkit.org/show_bug.cgi?id=222018
        <rdar://problem/74674160>

        Reviewed by John Wilander.

        Covered by new tests.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
        The KeyID is no longer truncated.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _setPrivateClickMeasurementAttributionTokenPublicKeyURLForTesting:completionHandler:]):
        (-[WKWebView _setPrivateClickMeasurementAttributionTokenSignatureURLForTesting:completionHandler:]):
        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _setUIEventAttributionForTesting:withNonce:]):
        Adds SPI for testing.

2021-04-08  Alex Christensen  <achristensen@webkit.org>

        Serialize URL instead of entire challenge for informing client that modern TLS was negotiated
        https://bugs.webkit.org/show_bug.cgi?id=224346
        <rdar://76421667>

        Reviewed by Geoff Garen.

        This callback is only used in Safari, and they only use the host.
        We are serializing the certificate chain, during which we evaluate the trustedness and correctness of the certificate chain.
        This patch removes that unused operation.

        * 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:
        (WebKit::WebPageProxy::didNegotiateModernTLS):
        * UIProcess/WebPageProxy.h:

2021-04-08  Tim Horton  <timothy_horton@apple.com>

        Safari unit tests sometimes fail an ASSERTion in IOSurface.mm's optionsFor32BitSurface()
        https://bugs.webkit.org/show_bug.cgi?id=224351
        <rdar://problem/76405354>

        Reviewed by Wenson Hsieh.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _takeViewSnapshot]):
        Don't take view snapshots for views that have a empty size.
        This triggers both the assertions mentioned in the title, and the newly added ones.

2021-04-08  Kate Cheney  <katherine_cheney@apple.com>

        Fix incorrect compile-time macro for CFNETWORK_NSURLSESSION_ATTRIBUTED_BUNDLE_IDENTIFIER
        https://bugs.webkit.org/show_bug.cgi?id=224347
        <rdar://problem/76353792>

        Reviewed by Brent Fulgham.

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

2021-04-08  Eric Carlson  <eric.carlson@apple.com>

        [macOS] WebProcessProxy::sendAudioComponentRegistrations leaks CFDataRef
        https://bugs.webkit.org/show_bug.cgi?id=224349
        <rdar://problem/76176827>

        Reviewed by Jer Noble.

        Tested manually.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::sendAudioComponentRegistrations): The CFDictionary
        returned by AudioComponentFetchServerRegistrations is newly allocated, so adopt
        it into the RetainPtr so we don't increase the retain count.

2021-04-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r273541) WKWebView can't load NSURLRequest subclasses
        https://bugs.webkit.org/show_bug.cgi?id=224338

        Reviewed by Brent Fulgham.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::ResourceRequest>::encodePlatformData):

2021-04-08  Kate Cheney  <katherine_cheney@apple.com>

        Add test infrastructure for app bound request context string
        https://bugs.webkit.org/show_bug.cgi?id=224311
        <rdar://problem/76229003>

        Reviewed by Brent Fulgham.

        The app-bound request context string is the eTLD+1 for a load and is
        needed by CFNetwork. We should add testing infrastructure to make sure
        the context string is being properly set.

        Test: http/tests/in-app-browser-privacy/context-string-for-subframe.html

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (contextString):
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
        * Shared/NavigatingToAppBoundDomain.h:
        (WebKit::AppBoundNavigationTestingData::clearAppBoundNavigationDataTesting):
        (WebKit::AppBoundNavigationTestingData::updateAppBoundNavigationTestingData):
        (WebKit::AppBoundNavigationTestingData::encode const):
        (WebKit::AppBoundNavigationTestingData::decode):
        Store the context string in the testing struct.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _appBoundNavigationDataForDomain:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        SPI to get the app-bound request test data for layout testing.

2021-04-08  Chris Dumez  <cdumez@apple.com>

        Cache NSInvocation objects on _WKRemoteObjectInterface
        https://bugs.webkit.org/show_bug.cgi?id=224331
        <rdar://75628393>

        Reviewed by Geoffrey Garen.

        Have _WKRemoteObjectInterface eagerly create the NSInvocation objects and store them
        instead of re-constructing them every time they are needed.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (decodeInvocation):
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (methodArgumentTypeEncodingForSelector):
        (initializeMethod):
        (-[_WKRemoteObjectInterface debugDescription]):
        (classesForSelectorArgument):
        (-[_WKRemoteObjectInterface _invocationForSelector:]):
        (-[_WKRemoteObjectInterface _invocationForReplyBlockOfSelector:]):
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForReplyBlockOfSelector:]):
        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h:

2021-04-08  Dean Jackson  <dino@apple.com>

        Specify Swift version in configuration
        https://bugs.webkit.org/show_bug.cgi?id=224334

        Reviewed by Darin Adler.

        Specify Swift language version 5 to stop an Xcode warning.

        * Configurations/Base.xcconfig:

2021-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Temporarily retain some media services when GPU Process active
        https://bugs.webkit.org/show_bug.cgi?id=224328
        <rdar://problem/76370805>

        Reviewed by Eric Carlson.

        Testing of the GPU Process show that access to the CoreMedia routing service is still needed under
        some use cases. To prevent user-facing impact, we will allow these connections while the underlying
        issues are resolved.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::temporaryMachServices): Added.
        (WebKit::WebPageProxy::creationParameters): Extend access to the set of temporaryMachServices when
        the GPU Process is enabled.

2021-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build after r275640
        https://bugs.webkit.org/show_bug.cgi?id=224239

        * WebKit.xcodeproj/project.pbxproj:
        This source file was added to the project as a compilation target, but it also appears in unified sources; this
        causes the `encode` and `decode` methods to be defined twice, leading to a linker error. Fix this by only
        including it as a unified source.

2021-04-08  Jer Noble  <jer.noble@apple.com>

        [Swift] Move the "Copy Additional Sources" Build Phase into the WebKitSwift target
        https://bugs.webkit.org/show_bug.cgi?id=224330

        Reviewed by Eric Carlson.

        Avoid a dependency cycle (WebKit -> WebKitSwift -> WebKit) due to the Copy Additional Sources phase by moving
        that phase to the WebKitSwift target itself.

        * WebKit.xcodeproj/project.pbxproj:

2021-04-08  Sihui Liu  <sihui_liu@apple.com>

        Remove logging for investigating http/tests/IndexedDB/storage-limit-1.html failure
        https://bugs.webkit.org/show_bug.cgi?id=223086
        <rdar://problem/75591816>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::storageQuotaManager):
        (WebKit::NetworkProcess::setQuotaLoggingEnabled): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetQuotaLoggingEnabled): Deleted.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setQuotaLoggingEnabled): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::setQuotaLoggingEnabled): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-04-08  Kimmo Kinnunen  <kkinnunen@apple.com>

        Difficult to understand which IPC message caused an ASSERT due to being not handled
        https://bugs.webkit.org/show_bug.cgi?id=224269

        Reviewed by Chris Dumez.

        Add the message name and destination ID to the assertion message about
        unhandled IPC message.

        * Scripts/webkit/messages.py:
        (generate_message_handler):
        * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp:
        (WebKit::TestWithIfMessage::didReceiveMessage):
        * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp:
        (WebKit::TestWithImageData::didReceiveMessage):
        (WebKit::TestWithImageData::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp:
        (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage):
        (WebKit::TestWithLegacyReceiver::didReceiveSyncTestWithLegacyReceiverMessage):
        * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp:
        (WebKit::TestWithSemaphore::didReceiveMessage):
        (WebKit::TestWithSemaphore::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp:
        (WebKit::TestWithStreamBuffer::didReceiveMessage):
        * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp:
        (WebKit::TestWithStream::didReceiveStreamMessage):
        * Scripts/webkit/tests/TestWithSuperclassMessageReceiver.cpp:
        (WebKit::TestWithSuperclass::didReceiveSyncMessage):
        * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp:
        (WebKit::TestWithoutAttributes::didReceiveMessage):
        (WebKit::TestWithoutAttributes::didReceiveSyncMessage):

2021-04-02  Darin Adler  <darin@apple.com>

        Use Hasher more, remove IntegerHasher, fix hashing-related mistakes
        https://bugs.webkit.org/show_bug.cgi?id=224138

        Reviewed by Chris Dumez.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h: Added now-needed include
        of URLHash.h, since we removed it from a widely-included header.

        * NetworkProcess/cache/NetworkCache.h:
        (WebKit::NetworkCache::GlobalFrameID::hash const): Use computeHash
        instead of combining intHash with StringHasher::hashMemory. This fixes
        two mistakes: one is that there is no need to hash a hash. The second is
        that intHash takes a 32-bit integer as its parameter, so high bits
        of object identifiers were discarded unnecessarily.

        * Scripts/webkit/messages.py: Added code so that if URL is in an argument, we include the
        URLHash.h header. Would be better to just use URL.h and use URLHash.h only if it's a
        HashMap<URL>, but currently the script does not distinguish those cases. This wasn't needed
        before becuase a widely included header was always pulling in URLHash.h.

        * Shared/API/Cocoa/WKBrowsingContextHandle.mm:
        (-[WKBrowsingContextHandle hash]): Use computeHash instead of pairIntHash.
        This fixes a mistake: pairIntHash takes two 32-bit integers, so high bits
        of object identifiers were discarded unnecessarily.

        * NetworkProcess/Storage/WebSWContextManagerConnection.h: Added now-needed include
        of URLHash.h, since we removed it from a widely-included header.

2021-04-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r275614; make sure SWIFT_VERSION is defined inside the WebKitSwift build target.

        * Configurations/WebKitSwift.xcconfig:

2021-04-07  Ada Chan  <ada.chan@apple.com>

        [WebXR] Introduce XRDeviceIdentifier and XRDeviceInfo to be used to communicate device info
        https://bugs.webkit.org/show_bug.cgi?id=224239

        Reviewed by Tim Horton.

        These classes are codable so they can be used in messages across UI/web process boundary.
        In a future patch, these classes will be used to create device objects returned from
        WebChromeClient::enumerateImmersiveXRDevices().

        * Shared/Cocoa/XRDeviceIdentifier.h: Added.
        This codable type will be used to identify a device.
        * Shared/Cocoa/XRDeviceInfo.h: Added.
        * Shared/Cocoa/XRDeviceInfo.mm: Added.
        (WebKit::XRDeviceInfo::encode const):
        (WebKit::XRDeviceInfo::decode):
        * Shared/WebCoreArgumentCoders.h:
        Add EnumTraits for PlatformXR::ReferenceSpaceType so we can encode it.
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-04-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] webkit://gpu should print runtime libwpe and wpebackend-fdo versions
        https://bugs.webkit.org/show_bug.cgi?id=224298

        Reviewed by Adrian Perez de Castro.

        * UIProcess/API/glib/WebKitProtocolHandler.cpp:
        (WebKit::WebKitProtocolHandler::handleGPU):

2021-04-07  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Incorrect selector used to set logging level
        https://bugs.webkit.org/show_bug.cgi?id=224292
        <rdar://problem/75379660>

        Reviewed by John Wilander.

        Use {public} declarations so we get logging in release builds. These strings
        are not sensitive.

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

2021-04-07  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Incorrect selector used to set logging level
        https://bugs.webkit.org/show_bug.cgi?id=224292
        <rdar://problem/75379660>

        Reviewed by John Wilander.

        The wrong selector label was used to configure the low-level network logging level.

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

2021-04-07  Alex Christensen  <achristensen@webkit.org>

        Use os_transaction_create instead of deprecated xpc_transaction_begin/end
        https://bugs.webkit.org/show_bug.cgi?id=224288

        Reviewed by Tim Horton.

        xpc_transaction_begin/end are deprecated with os_transaction_t being the replacement.
        The transaction object makes it easier to associate a transaction's begin and end with each other,
        and it adds a name, which makes system level debugging of what transactions are happening in which
        processes much nicer.

        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::osTransaction):
        (WebKit::XPCServiceExit):

2021-04-07  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add WebKitAdditions sources to project
        https://bugs.webkit.org/show_bug.cgi?id=223803

        Reviewed by Eric Carlson.

        Enabling swift compilation requires modularization of the WebKit project,
        but some of the headers in the WebKitLegacy.h umbrella header conflict with
        filenames in the WebKit project, and can't be included in Objective-C or
        Swift sources. To work around this issue for now, add "#if defined(__cplusplus)"
        guards around those headers.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/Cocoa/WebKitLegacy.h:
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPreferences.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebFrame.h:

2021-04-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Null pointer dereference when child process exits immediately
        https://bugs.webkit.org/show_bug.cgi?id=224209

        Reviewed by Carlos Garcia Campos.

        We discovered that when the child process exits immediately after it is spawned,
        g_subprocess_get_identifier() will return nullptr. In this case, we should crash cleanly
        with SIGABRT via g_error(), rather than crashing with a null pointer dereference inside
        g_ascii_strtoll(). SIGABRT is much nicer than SIGSEGV and indicates that we really do want
        to crash here, whereas SIGSEGV is just a bug.

        Also, let's be careful with our terminology in the existing error message here. Although
        GSubprocess currently always forks, I'm working to make it use posix_spawn() instead, so
        let's not claim that fork() has failed when it soon might not be used at all.

        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2021-04-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r275571 and r275537, which introduced conflicting changes.

        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]):
        (-[WKMediaSessionCoordinatorHelper playSessionWithCompletion:]):

2021-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address some post-landing comments after r275491
        https://bugs.webkit.org/show_bug.cgi?id=224126

        Reviewed by Darin Adler.

        Address some minor feedback; no change in behavior.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::createMenuActionItem):

        Remove an unnecessary local variable.

        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):

        Use `WTF::URL` instead of `NSURL`, and remove a header import that is now unnecessary.

        (WebKit::WebContextMenuProxyMac::getContextMenuItem):

        Remove some more unnecessary local variables.

2021-04-06  Jer Noble  <jer.noble@apple.com>

        [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
        https://bugs.webkit.org/show_bug.cgi?id=224173

        Reviewed by Eric Carlson.

        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::playSession):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::playSession):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:

2021-04-06  Brent Fulgham  <bfulgham@apple.com>

        Add additional page load diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=224194
        <rdar://problem/76227175>

        Reviewed by Alex Christensen.

        This patch adds new logging to help us diagnose and investigate page load failures.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose): Log when the connection from a WebProcess requesting a load
        is closed.
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier): Log when the WebProcess requests a load
        identifier be removed (and cancelled).
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::restartNetworkLoad): Log when an in-process load is cancelled so that the load
        can be restarted.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose): Log when the network process crashes.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose): Add logging when the WebProcess crashes.
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad): Remove an erroneous log message that made it appear that no URL handler
        had been called. The log message was generated when a normal network load handler was executed, leading to
        confusing troubleshooting logs.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::registerURLSchemeHandler): Log when a web page registers a custom URL handler, and for which scheme.
        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::pageIDFromWebFrame): Added helper.
        (WebKit::frameIDFromWebFrame): Ditto.
        (WebKit::WebURLSchemeTaskProxy::startLoading): Add logging to track progress of custom URL handlers.
        (WebKit::WebURLSchemeTaskProxy::stopLoading): Ditto.
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection): Ditto.
        (WebKit::WebURLSchemeTaskProxy::didReceiveResponse): Ditto.
        (WebKit::WebURLSchemeTaskProxy::didReceiveData): Ditto.
        (WebKit::WebURLSchemeTaskProxy::didComplete): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed): Add logging that the network process crashed.

2021-04-06  Devin Rousso  <drousso@apple.com>

        [iOS] contextmenu hints can be clipped by the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=224204
        <rdar://problem/75504620>

        Reviewed by Wenson Hsieh.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView cleanUpRelatedViews]): Added.
        (-[WKContentView _didScroll]):
        (-[WKContentView textEffectsWindow]):
        (-[WKContentView _createPreviewContainerWithLayerName:]):
        (-[WKContentView containerForDropPreviews]):
        (-[WKContentView containerForDragPreviews]):
        (-[WKContentView containerForContextMenuHintPreviews]):
        (-[WKContentView _hideTargetedPreviewContainerViews]):
        (-[WKContentView _updateTargetedPreviewViewsContainerViewFrameIfNeeded]): Added.
        (-[WKContentView _removeTargetedPreviewViewsContainerViewIfPossible]): Added.
        (-[WKContentView _updateTargetedPreviewScrollViewUsingContainerScrollingNodeID:]): Added.
        (-[WKContentView cleanUpDragSourceSessionState]):
        (-[WKContentView _createTargetedContextMenuHintPreviewForFocusedElement]):
        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]):
        (-[WKContentView _removeContextMenuViewIfPossible]):
        (-[WKContentView dropInteraction:concludeDrop:]):
        (-[WKContentView overridePositionTrackingViewForTargetedPreviewIfNecessary:containerScrollingNodeID:]): Deleted.
        Instead of attaching the contextmenu hint container (`_contextMenuHintContainerView`) to
        the `WKWebView` (via the `_interactionViewsContainerView`), attach it to a new container
        (`_targetedPreviewViewsContainerView`) under the `UITextEffectsWindow` so that if the
        contextmenu target is near the edge of the `WKWebView` then the shadow of the contextmenu
        hint will not be clipped by the `WKWebView`. Whenever any view is scrolled, adjust the
        `frame` of the `_targetedPreviewViewsContainerView` so that the contextmenu hint moves.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
        Call `-cleanUpRelatedViews` if no longer attached to a `window` so that the
        `_targetedPreviewViewsContainerView` is not left behind if the `WKWebView` is moved.

        * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollViewForScrollingNodeID const):
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
        * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm:
        (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::scrollView const): Added.
        `ScrollingTreeFrameScrollingNodeRemoteIOS` also has a corresponding `UIScrollView`.

        * Platform/spi/ios/UIKitSPI.h:
        Remove no longer needed SPI now that WebKit manages the position of the contextmenu hint.

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay label style cleanup
        https://bugs.webkit.org/show_bug.cgi?id=224240

        Reviewed by BJ Burg.

        Mirror changes to constants from `WebCore::InspectorOverlay`.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (createLayoutLabelLayer):
        (-[WKInspectorHighlightView _createGridOverlayLayer:scale:]):

2021-04-06  Mike Gorse  <mgorse@suse.com>

        Build fails when video is disabled
        https://bugs.webkit.org/show_bug.cgi?id=224198

        Reviewed by Adrian Perez de Castro.

        Add #if ENABLE(VIDEO) where needed.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::decodeItem):
        * UIProcess/gtk/ClipboardGtk3.cpp:
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::committedLoad):

2021-04-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add IPC::Semaphore stub for Unix ports
        https://bugs.webkit.org/show_bug.cgi?id=224223

        Reviewed by Don Olmstead.

        PlayStation, GTK and WPE ports don't use it yet. Just add stubs
        instead of scattering #if everywhere using Semaphore.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):
        (WebKit::RemoteRenderingBackend::populateGetImageDataSharedMemory):
        * Platform/IPC/StreamClientConnection.cpp:
        (IPC::StreamClientConnection::setWakeUpSemaphore):
        (IPC::StreamClientConnection::wakeUpServer):
        * Platform/IPC/StreamClientConnection.h:
        (IPC::StreamClientConnection::tryAcquire):
        (IPC::StreamClientConnection::tryAcquireAll):
        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::StreamConnectionWorkQueue):
        (IPC::StreamConnectionWorkQueue::removeStreamConnection):
        (IPC::StreamConnectionWorkQueue::stop):
        (IPC::StreamConnectionWorkQueue::wakeUp):
        (IPC::StreamConnectionWorkQueue::wakeUpProcessingThread):
        * Platform/IPC/StreamConnectionWorkQueue.h:
        * Platform/IPC/StreamServerConnection.cpp:
        (IPC::StreamServerConnectionBase::release):
        (IPC::StreamServerConnectionBase::releaseAll):
        * Platform/IPC/unix/IPCSemaphoreUnix.cpp: Added.
        (IPC::Semaphore::Semaphore):
        (IPC::Semaphore::signal):
        (IPC::Semaphore::wait):
        (IPC::Semaphore::waitFor):
        (IPC::Semaphore::encode const):
        (IPC::Semaphore::decode):
        (IPC::Semaphore::destroy):
        * PlatformPlayStation.cmake:
        * Sources.txt:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::waitForGetImageDataToComplete):
        (WebKit::RemoteRenderingBackendProxy::didAppendData):
        * WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
        (WebKit::RemoteAudioDestinationProxy::startRenderingThread):
        (WebKit::RemoteAudioDestinationProxy::stopRenderingThread):

2021-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Delay the end of printing while PrintContext is in use.
        https://bugs.webkit.org/show_bug.cgi?id=224229

        Reviewed by Antti Koivisto.

        Added a new RAII object, PrintContextAccessScope, to delay the call to endPrinting
        and deployed in various IPC messages used during printing.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::beginPrinting): Deployed PrintContextAccessScope.
        (WebKit::WebPage::endPrinting): Exit early without ending printing if there is an active
        PrintContextAccessScope in the stack.
        (WebKit::WebPage::endPrintingImmediately): Extracted from endPrintingImmediately.
        (WebKit::WebPage::computePagesForPrinting): Deployed PrintContextAccessScope.
        (WebKit::WebPage::computePagesForPrintingImpl): Ditto.
        (WebKit::WebPage::drawRectToImage): Ditto.
        (WebKit::WebPage::drawPagesToPDF): Ditto.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::PrintContextAccessScope): Added.
        (WebKit::WebPage::PrintContextAccessScope::PrintContextAccessScope): Added.
        (WebKit::WebPage::PrintContextAccessScope::~PrintContextAccessScope): Added.

2021-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r274610): Unable to drag images when image extraction is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224211
        <rdar://problem/76229563>

        Reviewed by Tim Horton.

        r274610 introduced a new deferring gesture recognizer intended to prevent several text interaction gestures from
        recognizing during pending image extraction. However, this also causes dragging on iOS to fail, since the
        gesture used to initiate dragging is excluded by the new deferring gesture recognizer. To fix this, allow the
        new deferring gesture to recognize simultaneously alongside all gestures with the exception of only the gestures
        it is intended to defer (i.e. text interaction gestures).

        Test: fast/events/ios/dragstart-on-image-by-long-pressing.html

        * UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
        * UIProcess/API/ios/WKWebViewTestingIOS.mm:
        (-[WKWebView _isAnimatingDragCancel]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[UIGestureRecognizer _wk_isTapAndAHalf]):

        Add a WebKit category method that returns whether or not a gesture recognizer is a tap-and-a-half gesture.

        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):

        Allow the image extraction deferring gesture to recognize alongside all other gestures, with the exception of
        the text interaction gestures determined by `-shouldDeferGestureDueToImageExtraction:`. This limits the impact
        of this new deferring gesture, such that it only affects the text interaction gestures it is intended to defer.

        (-[WKContentView shouldDeferGestureDueToImageExtraction:]):

        Add a helper method to determine whether or not a gesture recognizer should be deferred, due to pending image
        extraction. We pull this logic behind a helper method because it's now consulted from two call sites.

        (-[WKContentView deferringGestureRecognizer:shouldDeferOtherGestureRecognizer:]):
        (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]):
        (-[WKContentView isAnimatingDragCancel]):

        Add a testing hook to return whether or not the drag cancel animation is running. See Tools/ChangeLog and the
        new layout test for more detail.

        (tapAndAHalfRecognizerClass): Deleted.

2021-04-06  Alex Christensen  <achristensen@webkit.org>

        Hold strong reference to xpc_connection_t in XPCServiceEventHandler
        https://bugs.webkit.org/show_bug.cgi?id=224242
        <rdar://74308418>

        Reviewed by David Kilzer.

        There is a reasonable chance that by the time we get to the block of xpc_connection_set_event_handler
        and back through WorkQueue::main().dispatchSync the xpc_connection_t has been freed.

        Also, the adoption in each entry points was incorrect, causing a late overrelease when tearing down the process.
        It was incorrect because we did not just create the connection or get it from any NS_RETURNS_RETAINED-like function.
        It was causing rare crashes once everything else had released their hold on the connection.

        * GPUProcess/EntryPoint/Cocoa/XPCService/GPUServiceEntryPoint.mm:
        (GPU_SERVICE_INITIALIZER):
        * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm:
        (NETWORK_SERVICE_INITIALIZER):
        * PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm:
        (PLUGIN_SERVICE_INITIALIZER):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        * WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnServiceEntryPoint.mm:
        (WEBAUTHN_SERVICE_INITIALIZER):
        * WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm:
        (WEBCONTENT_SERVICE_INITIALIZER):

2021-04-06  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Allow access to 'com.apple.system.logger' in the Base System
        https://bugs.webkit.org/show_bug.cgi?id=224241
        <rdar://problem/75960194>

        Reviewed by Alex Christensen.

        Deeper testing has revealed that some test configurations used internally require access to 'com.apple.system.logger' in the base
        system to support certain diagnostic operations outside the normal user release logging paths.

        This patch restores access to the 'com.apple.system.logger' endpoint when running in the Base System.

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

2021-04-06  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add MediaSessionCoordinator API test
        https://bugs.webkit.org/show_bug.cgi?id=224140
        <rdar://problem/76171173>

        Reviewed by Jer Noble.

        * Sources.txt: Include RemoteMediaSessionCoordinatorProxy.cpp and RemoteMediaSessionCoordinator.cpp
        so they don't have to be included in the Xcode project.

        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h: Declare enums, struct, and protocols
        necessary to implement and use an object derived from MediaSessionCoordinatorProxyPrivate.
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _createMediaSessionCoordinatorForTesting:completionHandler:]): New private
        method to create a MediaSessionCoordinatorProxyPrivate.
        (-[WKMediaSessionCoordinatorHelper initWithCoordinator:]):
        (-[WKMediaSessionCoordinatorHelper seekSessionToTime:withCompletion:]):
        (-[WKMediaSessionCoordinatorHelper playSessionWithCompletion:]):
        (-[WKMediaSessionCoordinatorHelper pauseSessionWithCompletion:]):
        (-[WKMediaSessionCoordinatorHelper setSessionTrack:withCompletion:]):

        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::mediaSessionCoordinatorForTesting): MediaSessionCoordinatorProxyPrivate
        getter.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setMediaSessionCoordinatorForTesting): Setter for 
        MediaSessionCoordinatorProxyPrivate drived object.

        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h: Add typedef for the completion
        handler used by many coordinator proxy methods.

        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        Set the private coordinator client so calls to the session can be forwarded.
        (WebKit::RemoteMediaSessionCoordinatorProxy::join): Use MediaSessionCommandCompletionHandler.
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSeekTo): Ditto.
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePlay): Ditto.
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePause): Ditto.
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSetTrack): Ditto.
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatorStateChanged): Ditto.
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createMediaSessionCoordinator): Change completion handler
        parameter to return a bool instead of a RemoteMediaSessionCoordinatorProxy as the
        client interface provides all of the session access needed.
        * UIProcess/WebPageProxy.h:

        * WebKit.xcodeproj/project.pbxproj: Remove RemoteMediaSessionCoordinatorProxy.cpp 
        and RemoteMediaSessionCoordinator.cpp
        
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::join): Use ExceptionData's toException()
        method instead of creating an Exception directly. Remove the destination ID parameter
        to sendWithAsyncReply so messageSenderDestinationID() will be used.
        (WebKit::RemoteMediaSessionCoordinator::leave): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::seekTo) Ditto.:
        (WebKit::RemoteMediaSessionCoordinator::play): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::pause): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::setTrack): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::positionStateChanged): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::readyStateChanged): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::playbackStateChanged): Ditto.
        (WebKit::RemoteMediaSessionCoordinator::coordinatorStateChanged): Ditto.

2021-04-06  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Prevent background blur when presenting date/time pickers
        https://bugs.webkit.org/show_bug.cgi?id=224189
        <rdar://problem/76220352>

        Reviewed by Wenson Hsieh.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker _contextMenuInteraction:styleForMenuWithConfiguration:]):

        Presenting a UIContextMenuInteraction results in the application of a
        blur effect to the background view. However, the peripheral presented
        when interacting with a UIDatePicker across the rest of the system
        does not blur the background.

        To align our behavior with the rest of the system, remove the blur
        effect by specifying an empty UIVisualEffect for the
        _UIContextMenuStyle's preferredBackgroundEffects. The empty effect
        must be explicitly specified, since setting an empty array will result
        in the default effect being applied.

2021-04-06  Alex Christensen  <achristensen@webkit.org>

        Revert part of crash fix to keep test infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=224196

        These two tests change the bundle identifier to test what it's like to not be in a test:

        http/tests/in-app-browser-privacy/app-bound-domain-gets-app-bound-session.html
        http/tests/in-app-browser-privacy/non-app-bound-iframe-under-app-bound-domain-is-app-bound.html

        This partial revert of r275486 allows the test to dynamically change whether it's in testing mode.

        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::doesParentProcessHaveITPEnabled):
        (WebKit::isParentProcessAFullWebBrowser):

2021-04-06  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Clean up two messages.in files
        https://bugs.webkit.org/show_bug.cgi?id=224153

        Reviewed by Eric Carlson.

        No new tests, no functional change.

        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:

2021-04-06  Tyler Wilcock  <twilco.o@protonmail.com>

        Non-unified build fixes, early April 2021
        https://bugs.webkit.org/show_bug.cgi?id=224091

        Reviewed by Simon Fraser.

        The SelectionRestorationMode enum has been moved out of Document.h so
        the entirety of Document.h doesn't need to be included just for that
        enum.

        * WebProcess/WebPage/WebPage.cpp:
        Add #include "SelectionRestorationMode.h".

2021-04-06  Youenn Fablet  <youenn@apple.com>

        Release WebRTC remote encoder/decoder callback lock right after having changed the encoder/decoder callback
        https://bugs.webkit.org/show_bug.cgi?id=224228
        <rdar://74560516>

        Reviewed by Eric Carlson.

        We were locking the callback lock, changing the callback and hopping to codec map thread to free the encoder/decoder.
        Then we were unlocking the callback lock.
        There was a chance that the encoder/decoder gets freed in the codec map thread before we unlock its callback lock.
        Given that we nullify the callback in decoder/encoder Release before going to destructor, we can just remove the lock/nullify code.
        Covered by existing test sets.

        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
        (WebKit::LibWebRTCCodecs::releaseDecoder):
        (WebKit::LibWebRTCCodecs::releaseEncoder):

2021-04-06  Alex Christensen  <achristensen@webkit.org>

        Remove definition used for staging change with internal repo
        https://bugs.webkit.org/show_bug.cgi?id=224196

        * Shared/Cocoa/DefaultWebBrowserChecks.h:
        This definition was used to help me land the patch without breaking the internal build.
        Now that I've used it to adapt to the open source changes, I can remove it.

2021-04-06  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Update UIDatePickerStyle for <input type=time>
        https://bugs.webkit.org/show_bug.cgi?id=224187
        <rdar://problem/76219729>

        Reviewed by Wenson Hsieh.

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

        Use UIDatePickerStyleWheels rather than UIDatePickerStyleInline, since
        the inline style now requires an additional tap to present the editable
        picker view.

2021-04-06  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid overlay does not honor writing modes and RTL layout direction.
        https://bugs.webkit.org/show_bug.cgi?id=224127

        Reviewed by BJ Burg.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (createLayoutLabelLayer):
        - WebCore::backgroundPathForLayoutLabel now treats the `None` arrow direction as being centered on the label's
        location.

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [WPE] Enable Cog's GTK4 backend
        https://bugs.webkit.org/show_bug.cgi?id=224099

        Reviewed by Adrian Perez de Castro.

        * wpe/wpe-webkit-uninstalled.pc.in: Fix paths to derived sources.

2021-04-06  Ian Gilbert  <iang@apple.com>

        IPC::decodeObject null dereference in decodeArrayInternal()
        https://bugs.webkit.org/show_bug.cgi?id=224214

        Reviewed by Ryosuke Niwa.

        Add null pointer check to decodeArrayInternal.

        Test: ipc/decode-object-array-crash.html

        * Shared/Cocoa/ArgumentCodersCocoa.mm:
        (IPC::decodeArrayInternal):

2021-04-05  Jiewen Tan  <jiewen_tan@apple.com>

        Allow the WebAuthn UI to inform users about BiometryLockout
        https://bugs.webkit.org/show_bug.cgi?id=224124
        <rdar://74815938>

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/Cocoa/LocalService.mm:
        (WebKit::LocalService::isAvailable):
        The LocalService is still available within the BiometryLockout period.

2021-04-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Image preview context menu action should be shown conditionally
        https://bugs.webkit.org/show_bug.cgi?id=224126
        <rdar://problem/76162272>

        Reviewed by Devin Rousso.

        Add a page client hook to return whether or not the "reveal image" context menu item should be enabled, given
        the image URL and decoded image bitmap; we then use this method to conditionally insert a context menu item for
        revealing the image in context menu data.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::computeCanRevealImage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::computeCanRevealImage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::computeCanRevealImage):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::createMenuActionItem):

        Pull logic for mapping a `WebContextMenuItemData` of type `ActionType` or `CheckableActionType` to a platform
        `NSMenuItem` out into a separate helper function. Use this helper in `getContextMenuItem`, as well as the
        completion handler for the call to `computeCanRevealImage`. Note that this also requires moving the
        `menuItemIdentifier` function up above `getContextMenuFromItems`.

        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):

        Special case the `ContextMenuItemTagRevealImage` item; instead of adding this item to the context menu right
        away, we hide it by default, and only reinsert it if the page client indicates that we require the item (via
        `computeCanRevealImage`).

        (WebKit::WebContextMenuProxyMac::getContextMenuItem):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r267763) NetworkProcess never terminates
        https://bugs.webkit.org/show_bug.cgi?id=224191
        <rdar://problem/76124590>

        Reviewed by Chris Dumez.

        Before r267763, when a WebProcessPool was deallocated, the NetworkProcess it owned was terminated.
        Since then, once you start using a NetworkProcess, it will be kept until your app closes or it crashes.
        To reclaim these resources in a way similar to how we did before, we now terminate the network process in two situations:
        1. If all WebsiteDataStores associated with it are deallocated.  This happens if you have never used the default WKWebsiteDataStore.
        2. If all WebProcessPools are deallocated.  This can still happen if you do use the default WKWebsiteDataStore, which is never deallocated.

        Covered by API tests.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore _defaultNetworkProcessExists]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::defaultNetworkProcessExists):
        (WebKit::NetworkProcessProxy::removeSession):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Reduce crash inside getAuditToken
        https://bugs.webkit.org/show_bug.cgi?id=224196
        <rdar://74536285>

        Reviewed by David Kilzer.

        Something is crashing inside the call to getAuditToken, and I believe it is happening during teardown of the network process.
        After many days of head scratching and many previous attempts at fixing this problem, it persists.
        Since direct strategies at fixing this problem have failed, I now try something different.
        Instead of calling getAuditToken at the beginning of every resource load to ask if the parent process has an entitlement,
        I now call it only once per process.  That should make things faster and less crashy.  Otherwise no change in behavior.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::activateSessionCleanup):
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        * Shared/Cocoa/DefaultWebBrowserChecks.h:
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::doesParentProcessHaveITPEnabled):
        (WebKit::isParentProcessAFullWebBrowser):
        * WebProcess/WebAuthentication/WebAuthenticatorCoordinator.cpp:
        (WebKit::WebCore::isWebBrowser):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isParentProcessAWebBrowser const):

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Make sure we no longer show the previous page when running a JS prompt
        https://bugs.webkit.org/show_bug.cgi?id=215782
        <rdar://problem/67698601>

        Reviewed by Darin Adler.

        Make sure we no longer show the previous page when running a JS prompt.
        If we have not yet done a layer tree commit since the last load commit, then
        we are likely still showing the previous page. If we are asked to run a JS
        prompt / alert / confirm at this point, it would be confusing to still show
        the previous page. In order to address the issue, we now make the view blank
        in such scenario (ideally, we'd have painted the new page but this is
        currently not a trivial thing to do).

        To make the view blank, the approach chosen is the set the opacity of our
        root layer to 0 when the JS prompt is requested (before the first paint) and
        set the opacity back to 1 after the first paint.

        To minimize the risks of breakage, the behavior change is behind a
        linked-on-after check. Also, we only trigger this behavior if the WKWebView
        client actually implements the corresponding JS prompt delegate.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::makeViewBlank):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate):
        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::makeViewBlank):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        * UIProcess/mac/PageClientImplMac.h:
        * UIProcess/mac/PageClientImplMac.mm:
        (WebKit::PageClientImpl::makeViewBlank):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        Add flag to make sure pending async messages are processed *before* the JS prompt sync IPCs.
        Without this, it was possible for the UIProcess to receive the JS prompt IPC *before* the
        DidCommitLoadForFrame IPC, which would confuse our logic, since we would think this is a JS
        prompt for the previous page.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sendSyncWithDelayedReply):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::didUpdateRendering):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * NetworkProcess/PrivateClickMeasurementNetworkLoader.cpp:
        (WebKit::PrivateClickMeasurementNetworkLoader::didReceiveBuffer):
        * PlatformMac.cmake:
        * Shared/Cocoa/SandboxExtensionCocoa.mm:
        * SourcesCocoa.txt:
        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h:

2021-04-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() on various tests
        https://bugs.webkit.org/show_bug.cgi?id=209450
        <rdar://problem/60799255>

        Reviewed by Tim Horton.

        See WebCore for more details.

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

        Stop the idempotent text autosizing recomputation timer (`m_textAutoSizingAdjustmentTimer`) when idempotent text
        autosizing is disabled.

        * WebProcess/WebPage/WebPage.h:

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Protect frame in WebPage::runJavaScriptInFrameInScriptWorld()
        https://bugs.webkit.org/show_bug.cgi?id=224210

        Reviewed by Alex Christensen.

        Between the time we were getting the raw pointer to the frame, and the time were were passing it to
        WebPage::runJavaScript(), we were potentially calling WebFrameLoaderClient::dispatchGlobalObjectAvailable().
        It is possible in theory for those synchronous injected bundle calls to mess with the frame tree and cause
        our frame to go bad. As a result, it is best to protect the frame as soon as we get it.

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

2021-04-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a missing bounds check when mapping display list items from a shared display list handle
        https://bugs.webkit.org/show_bug.cgi?id=224156
        <rdar://problem/71805209>

        Reviewed by Tim Horton.

        Add a check to ensure that we don't end up with out-of-bounds memory access when attempting to map an `offset`
        and `capacity` in shared display list data into a `WebCore::DisplayList`. It's possible for this to happen if
        either the sum of `offset` and `capacity` (i.e. the extent of the mapped segment) overflows `size_t`, or the
        extent exceeds the total length of the buffer in shared memory.

        * GPUProcess/graphics/DisplayListReaderHandle.cpp:
        (WebKit::DisplayListReaderHandle::displayListForReading const):

        Note that returning `nullptr` here subsequently causes us to terminate the web process due to the message check
        for `displayList` inside `nextDestinationImageBufferAfterApplyingDisplayLists`.

2021-04-05  Chris Dumez  <cdumez@apple.com>

        Make sure service workers use a ScriptSourceCode backed by file-mapped memory when possible
        https://bugs.webkit.org/show_bug.cgi?id=224088

        Reviewed by Yusuke Suzuki.

        * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
        (WebKit::ServiceWorkerSoftUpdateLoader::didFinishLoading):

2021-04-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WK2] Implement IPC::Semaphore to run WebGL in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=224014

        Reviewed by Don Olmstead.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        * GPUProcess/graphics/RemoteGraphicsContextGLWin.cpp: Added.
        (WebKit::RemoteGraphicsContextGL::create):
        (WebKit::RemoteGraphicsContextGLWin::RemoteGraphicsContextGLWin):
        (WebKit::RemoteGraphicsContextGLWin::platformWorkQueueInitialize):
        (WebKit::RemoteGraphicsContextGL::prepareForDisplay):
        * Platform/IPC/IPCSemaphore.cpp:
        * Platform/IPC/IPCSemaphore.h:
        * Platform/IPC/StreamClientConnection.cpp:
        (IPC::StreamClientConnection::setWakeUpSemaphore):
        (IPC::StreamClientConnection::wakeUpServer):
        * Platform/IPC/StreamClientConnection.h:
        (IPC::StreamClientConnection::tryAcquire):
        (IPC::StreamClientConnection::tryAcquireAll):
        * Platform/IPC/StreamConnectionWorkQueue.cpp:
        (IPC::StreamConnectionWorkQueue::StreamConnectionWorkQueue):
        (IPC::StreamConnectionWorkQueue::removeStreamConnection):
        (IPC::StreamConnectionWorkQueue::stop):
        (IPC::StreamConnectionWorkQueue::wakeUp):
        (IPC::StreamConnectionWorkQueue::wakeUpProcessingThread):
        * Platform/IPC/StreamConnectionWorkQueue.h:
        * Platform/IPC/StreamServerConnection.cpp:
        (IPC::StreamServerConnectionBase::release):
        (IPC::StreamServerConnectionBase::releaseAll):
        * Platform/IPC/win/IPCSemaphoreWin.cpp: Added.
        (IPC::Semaphore::Semaphore):
        (IPC::Semaphore::~Semaphore):
        (IPC::Semaphore::operator=):
        (IPC::Semaphore::signal):
        (IPC::Semaphore::wait):
        (IPC::Semaphore::waitFor):
        (IPC::Semaphore::encode const):
        (IPC::Semaphore::decode):
        (IPC::Semaphore::destroy):
        * PlatformWin.cmake:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createGraphicsContextGL const):

2021-04-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 1: Require encoding/decoding delegates for non-inline display list items
        https://bugs.webkit.org/show_bug.cgi?id=223849

        Reviewed by Wenson Hsieh.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-04-05  Jer Noble  <jer.noble@apple.com>

        [MediaSession] Small refactoring of MediaSession implementation classes
        https://bugs.webkit.org/show_bug.cgi?id=224141

        Reviewed by Eric Carlson.

        A smorgasboard of small refactoring changes:

        - MediaSessionCoordinatorProxyPrivate should use an Optional<ExceptionData> rather than
          an actual ExceptionData, to handle the case where no exception was encoutered.
        - RemoteMediaSessionCoordinatorProxy::create() should just return a Ref, not a RefPtr.
        - Logging inside a completion handler requires access to this.
        - Add RemoteMediaSessionCoordinatorProxy.cpp to the build.

        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::create):
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        (WebKit::RemoteMediaSessionCoordinatorProxy::join):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSeekTo):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePlay):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePause):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSetTrack):
        (WebKit::RemoteMediaSessionCoordinatorProxy::pauseSession):
        (WebKit::RemoteMediaSessionCoordinatorProxy::setSessionTrack):
        (WebKit::RemoteMediaSessionCoordinatorProxy::logChannel const):
        (WebKit::RemoteMediaSessionCoordinatorProxy::::coordinateSetTrack): Deleted.
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        (WebKit::RemoteMediaSessionCoordinatorProxy::logger const):
        (WebKit::RemoteMediaSessionCoordinatorProxy::logIdentifier const):
        (WebKit::RemoteMediaSessionCoordinatorProxy::logClassName const):

2021-04-05  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Calling AudioComponentFetchServerRegistrations on main thread causes launch time regression
        https://bugs.webkit.org/show_bug.cgi?id=224137
        <rdar://76137483>

        Reviewed by Eric Carlson.

        Run the command to fetch AudioComponent registration data on a generic background queue.

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

2021-04-05  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Enable Service Worker tests
        https://bugs.webkit.org/show_bug.cgi?id=223591

        Reviewed by Fujii Hironori.

        WPT HTTP tests were failing because SSL Connect errors weren't triggering authentication challenges.
        Also Add a suggestedFilename implementation.

        * NetworkProcess/curl/NetworkDataTaskCurl.cpp:
        * NetworkProcess/curl/NetworkDataTaskCurl.h:

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

        [GPUP][iPad] Audio only when airplaying a youtube video
        https://bugs.webkit.org/show_bug.cgi?id=224132

        Reviewed by Eric Carlson.

        While `MediaPlayerPrivateAVFoundationObjC` only implements `setWirelessPlaybackTarget()`
        on macOS, `MediaPlayerPrivateMediaSourceAVFObjC` implements it on both macOS and iOS.
        Therefore, `RemoteMediaPlayerProxy` has to forward the calls of `setWirelessPlaybackTarget()`
        from WebContent processes to "MediaPlayerPrivate*" on both macOS and iOS.

        Manually tested.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::setWirelessPlaybackTarget):

2021-04-02  Jer Noble  <jer.noble@apple.com>

        [GPUP] Power regression: audio hardware is configured for 128 frame preferred buffer size during VideoAudio playback
        https://bugs.webkit.org/show_bug.cgi?id=224122

        Reviewed by Eric Carlson.

        The RemoteAudioHardwareListenerProxy tracks when audio hardware changes, and updates the WebContent process with
        the supported properies of the new default audio device, including supported buffer sizes. However, it only does
        so when the current audio devices changes, and not initially. Instead, ensure the WebContent process is immediately
        update with the correct values for supported buffer sizes. This allows VideoAudio playback to enter a lower-power
        playback mode by specifying a large preferred buffer size (4096).

        * GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp:
        (WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):

2021-04-02  Brady Eidson  <beidson@apple.com>

        Add WKURLSchemeTask redirect API.
        https://bugs.webkit.org/show_bug.cgi?id=224119

        Reviewed by Alex Christensen.

        Covered by new API tests.
        
        Instead of the existing "did do a redirect" SPI without completion handler, this one has
        a completion handler with a new request for the task, proposed by WebKit.

        * UIProcess/API/Cocoa/WKURLSchemeTask.h:
        * UIProcess/API/Cocoa/WKURLSchemeTask.mm:
        (raiseExceptionIfNecessary):
        (-[WKURLSchemeTaskImpl willPerformRedirection:newRequest:completionHandler:]):

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]):

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

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::willPerformRedirection):
        (WebKit::WebURLSchemeTask::didPerformRedirection):
        (WebKit::WebURLSchemeTask::didReceiveResponse):
        (WebKit::WebURLSchemeTask::didReceiveData):
        (WebKit::WebURLSchemeTask::didComplete):
        * UIProcess/WebURLSchemeTask.h:
        (WebKit::WebURLSchemeTask::waitingForRedirectCompletionHandlerCallback const):

        * WebKit.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::urlSchemeTaskWillPerformRedirection):
        (WebKit::WebPage::urlSchemeTaskDidPerformRedirection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
        (WebKit::WebURLSchemeHandlerProxy::taskDidPerformRedirection):
        * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:

        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
        (WebKit::WebURLSchemeTaskProxy::didPerformRedirection):
        * WebProcess/WebPage/WebURLSchemeTaskProxy.h:

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Introduce ScriptBuffer class to wrap SharedBuffer containing a script
        https://bugs.webkit.org/show_bug.cgi?id=224092

        Reviewed by Yusuke Suzuki and Geoff Garen.

        Introduce ScriptBuffer class to wrap SharedBuffer containing a script. We started using SharedBuffer to represent
        worker scripts instead of String, so that they can hold file mapped data and be shared across processes.
        This patch introduces a new ScriptBuffer to wrap those SharedBuffers. The type makes it clearer what type of
        data we're dealing with. The helper functions used to convert between String and SharedBuffer can now simply
        be member functions on ScriptBuffer. This also simplifies IPC code.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::didSaveScriptsToDisk):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        Use ScriptBuffer instead SharedBuffer.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::tryConvertToShareableResourceHandle):
        (IPC::decodeScriptBufferAsShareableResourceHandle):
        (IPC::ArgumentCoder<WebCore::ScriptBuffer>::encode):
        (IPC::ArgumentCoder<WebCore::ScriptBuffer>::decode):
        * Shared/WebCoreArgumentCoders.h:
        - Add IPC encoder / decoder for ScriptBuffer which tries to encode / decode as a ShareableResource whenever
          possible (single segment that is file mapped). This logic used to be in the ServiceWorkerContextData
          coders. Now that the logic is in the ScriptBuffer coder, the ServiceWorkerContextData encoding / decoding
          becomes much simpler.
        - Moved ServiceWorkerContextData coders from WebCoreArgumentCoders back to its class in WebCore, now that
          they no longer need to deal with ShareableResource directly.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::didSaveScriptsToDisk):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        Send scripts over IPC as ScriptBuffer instead of using ShareableResource directly. The new IPC encoder /
        decoder for ScriptBuffer takes care of using ShareableResource for us.

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r275434.

        Need to figure out a better strategy to chose the color

        Reverted changeset:

        "Make sure we are no longer show the previous page when
        running a JS prompt"
        https://bugs.webkit.org/show_bug.cgi?id=215782
        https://commits.webkit.org/r275434

2021-04-01  Simon Fraser  <simon.fraser@apple.com>

        Allow wheel events to trigger high frequency DisplayLinks
        https://bugs.webkit.org/show_bug.cgi?id=224095

        Reviewed by Sam Weinig.

        When scrolling via wheel events, we may want to drive scrolling tree updates
        (which are driven by EventDispatcher::displayWasRefreshed()) at a higher rate
        than the main thread does rendering updates.

        To support this, give DisplayLink a count of "full speed" clients, and when this count is
        greater than zero, have DisplayLink::notifyObserversDisplayWasRefreshed() send
        EventDispatcher IPC at full framerate, while passing a flag based on the usual
        relevantForUpdateFrequency() about whether to update the main thread for a given update.

        Allow DisplayLink connection info objects with non-zero fullSpeedUpdatesClientCount
        to stick around, because that fullSpeedUpdatesClientCount needs to be stored for
        connections that may not yet have observers.

        Since DisplayLink might have info for connections with no observers, adjust the logic in
        DisplayLink::notifyObserversDisplayWasRefreshed() to do the CVDisplayLinkStop
        after traversing the observers.

        The "full speed" client count is maintained by a HysteresisActivity on WebPageProxy,
        whose impulse is wheel events. This replaces a singleton HysteresisActivity which
        was used to determine whether IPC goes to EventDispatcher or the main thread of
        the web process.

        WebPageProxy needs to track the PlatformDisplayID for the screen that its view is on,
        so it knows which DisplayLink to message.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::setDisplayLinkForDisplayWantsFullSpeedUpdates):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_wheelEventActivityHysteresis):
        (WebKit::WebPageProxy::wheelEventHysteresisUpdated):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::windowScreenDidChange):
        (WebKit::ScrollingObserver::willSendWheelEvent): Deleted.
        (WebKit::ScrollingObserver::ScrollingObserver): Deleted.
        (WebKit::ScrollingObserver::singleton): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::~DisplayLink):
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        (WebKit::DisplayLink::removeInfoForConnectionIfPossible):
        (WebKit::DisplayLink::incrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::decrementFullSpeedRequestClientCount):
        (WebKit::DisplayLink::setPreferredFramesPerSecond):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * UIProcess/mac/DisplayLink.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::displayWasRefreshed):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::startNotificationMechanism):
        (WebKit::DisplayRefreshMonitorMac::adjustPreferredFramesPerSecond):

2021-04-02  Chris Dumez  <cdumez@apple.com>

        Make sure we are no longer show the previous page when running a JS prompt
        https://bugs.webkit.org/show_bug.cgi?id=215782
        <rdar://problem/67698601>

        Reviewed by Simon Fraser.

        Make sure we are no longer show the previous page when running a JS prompt.
        If we have not yet done a layer tree commit since the last load commit, then
        we are likely still showing the previous page. If we are asked to run a JS
        prompt / alert / confirm at this point, it would be confusing to still show
        the previous page. In order to address the issue, we now make the view blank
        in such scenario (ideally, we'd have painted the new page but this is
        currently not a trivial thing to do).

        To make the view blank, the approach chosen was to add a blank overlay view
        on top of the content. This overlay view gets taken down as soon as we
        paint the view again.

        * SourcesCocoa.txt:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hasBlankOverlay]):
        (-[WKWebView _setHasBlankOverlay:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/PageClientImplCocoa.h:
        * UIProcess/Cocoa/PageClientImplCocoa.mm:
        (WebKit::PageClientImplCocoa::setHasBlankOverlay):
        * UIProcess/Cocoa/WKBlankOverlayView.h: Added.
        * UIProcess/Cocoa/WKBlankOverlayView.mm: Added.
        (-[WKBlankOverlayView initWithFrame:]):
        * UIProcess/PageClient.h:
        (WebKit::PageClient::setHasBlankOverlay):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::didUpdateRendering):

2021-04-02  Per Arne  <pvollan@apple.com>

        Add IOKit method filter telemetry
        https://bugs.webkit.org/show_bug.cgi?id=223652
        <rdar://problem/75751391>

        Reviewed by Brent Fulgham.

        Add IOKit method filter telemetry in the WebContent sandbox on macOS and iOS.

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

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Capture rotation is wrong after Safari is backgrounded then foregrounded
        https://bugs.webkit.org/show_bug.cgi?id=224103

        Reviewed by Eric Carlson.

        WebPage computes rotation either based on rotation notification or viewport notification.
        Apply the same technique in UIProcess to let GPUProcess get the right information.
        Manually tested.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Do not send samples to GPUProcess if mediastream video is not playing
        https://bugs.webkit.org/show_bug.cgi?id=224100
        <rdar://74809558>

        Reviewed by Eric Carlson.

        In case video is paused, there is no need to send samples to GPUProcess.
        Instead, we can just exit early.
        This fixes the issue of freezing camera in case a hidden video element tries to play the camera feed.
        Manually tested.

        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
        (WebKit::SampleBufferDisplayLayer::play):
        (WebKit::SampleBufferDisplayLayer::pause):
        (WebKit::SampleBufferDisplayLayer::enqueueSample):
        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:

2021-04-02  John Wilander  <wilander@apple.com>

        PCM: PrivateClickMeasurementManager::getTokenPublicKey() should not use PrivateClickMeasurement::PcmDataCarried::PersonallyIdentifiable when validating the token before the attribution report is sent
        https://bugs.webkit.org/show_bug.cgi?id=223956
        <rdar://problem/76086936>

        Reviewed by Youenn Fablet.

        No new tests. This just changes the NetworkLoadParameters field pcmDataCarried
        for the initial public key load and for PCM Debug Mode. This network load setting
        is not observable in tests.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
            Now sends PrivateClickMeasurement::PcmDataCarried::PersonallyIdentifiable
            to PrivateClickMeasurementManager::getTokenPublicKey() since it's required.
        (WebKit::generateNetworkLoadParameters):
            Now takes the parameter isDebugModeEnabled and if it's true, forces
            PrivateClickMeasurement::PcmDataCarried::PersonallyIdentifiable since
            Debug Mode disables privacy measures making PCM network requests likely
            to be personally identifiable.
        (WebKit::generateNetworkLoadParametersForHttpPost):
            Now forwards isDebugModeEnabled to generateNetworkLoadParameters().
        (WebKit::generateNetworkLoadParametersForHttpGet):
            Now forwards isDebugModeEnabled to generateNetworkLoadParameters().
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
            Now takes a PrivateClickMeasurement::PcmDataCarried parameter to be able
            to request the public key in either network load mode.
            Now also forwards isDebugModeEnabled to generateNetworkLoadParameters().
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
            Now sends PrivateClickMeasurement::PcmDataCarried::NonPersonallyIdentifiable
            to PrivateClickMeasurementManager::getTokenPublicKey() since it's required.
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
            Now forwards isDebugModeEnabled to generateNetworkLoadParameters().
        * NetworkProcess/PrivateClickMeasurementManager.h:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Use webrtc GPU Process feature flag for audio capture on MacOS
        https://bugs.webkit.org/show_bug.cgi?id=223682

        Reviewed by Eric Carlson.

        Manually tested.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):

2021-04-02  Youenn Fablet  <youenn@apple.com>

        No audio output when unplugged wired headset during a call
        https://bugs.webkit.org/show_bug.cgi?id=216389
        <rdar://problem/68692800>

        Reviewed by Eric Carlson.

        Make use of WebCore methods instead of reimplementing them here.

        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
        (WebKit::RemoteMediaSessionHelper::startMonitoringWirelessRoutesInternal):
        (WebKit::RemoteMediaSessionHelper::stopMonitoringWirelessRoutesInternal):
        (WebKit::RemoteMediaSessionHelper::activeVideoRouteDidChange):
        (WebKit::RemoteMediaSessionHelper::startMonitoringWirelessRoutes): Deleted.
        (WebKit::RemoteMediaSessionHelper::stopMonitoringWirelessRoutes): Deleted.
        (WebKit::RemoteMediaSessionHelper::applicationWillEnterForeground): Deleted.
        (WebKit::RemoteMediaSessionHelper::applicationDidEnterBackground): Deleted.
        (WebKit::RemoteMediaSessionHelper::applicationWillBecomeInactive): Deleted.
        (WebKit::RemoteMediaSessionHelper::applicationDidBecomeActive): Deleted.
        (WebKit::RemoteMediaSessionHelper::externalOutputDeviceAvailableDidChange): Deleted.
        (WebKit::RemoteMediaSessionHelper::isPlayingToAutomotiveHeadUnitDidChange): Deleted.
        (WebKit::RemoteMediaSessionHelper::activeAudioRouteDidChange): Deleted.
        * WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        [MacOS] Enable NSURLSession WebSocket code path in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220973
        <rdar://problem/73655870>

        Reviewed by Darin Adler.

        Disable a debug assert until it gets fixed below WebKit.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:webSocketTask:didOpenWithProtocol:]):

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce RobinHoodHashTable
        https://bugs.webkit.org/show_bug.cgi?id=223895

        Reviewed by Fil Pizlo.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ObservedDomainsTableSchemaV1Alternate):
        (WebKit::expectedUnattributedColumns):
        (WebKit::expectedAttributedColumns):
        (WebKit::createTableQueries):
        * Platform/IPC/ArgumentCoders.h:
        * Shared/Cocoa/DefaultWebBrowserChecks.mm:
        (WebKit::getAppBoundDomainsTesting):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess):
        * UIProcess/WebProcessProxy.h:

2021-04-02  Youenn Fablet  <youenn@apple.com>

        Pass the main frame URL to requestGeolocationAuthorizationForURL delegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=224045

        Reviewed by Alex Christensen.

        Simplify code path using requestGeolocationAuthorizationForURL SPI.
        We store the URL in the GeolocationRequestData since it might change over time given the requests may be processed asynchronously.
        Once geolocation access check is done, we then process each request one at a time using a Deque.
        We pass the main frame URL instead of the URL of the frame that called the API, following getUserMedia and device motion orientation. 
        Manually tested in the simulator.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        Remove shouldRequestGeolocationAuthorizationForURL SPI that is not used.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        Remove unneeded origin creation.
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:completionHandler:view:]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationDenied]):
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        (WebKit::decidePolicyForGeolocationRequestFromOrigin):

2021-04-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275387.
        https://bugs.webkit.org/show_bug.cgi?id=224094

        IOKit method list not complete

        Reverted changeset:

        "Add IOKit method filter telemetry"
        https://bugs.webkit.org/show_bug.cgi?id=223652
        https://trac.webkit.org/changeset/275387

2021-04-01  Said Abou-Hallawa  <said@apple.com>

        Add a macro to help staging logDiagnosticMessageWithDomain in Safari
        https://bugs.webkit.org/show_bug.cgi?id=224081

        Reviewed by Wenson Hsieh.

        Checking this macro will allow the webkit clients to implement this API
        and build with or without r275103.

        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:

2021-04-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteRenderingBackend should clean up CG resources after last Canvas is destroyed in Gpu process
        https://bugs.webkit.org/show_bug.cgi?id=223885
        <rdar://problem/75637356>

        Reviewed by Simon Fraser.

        Release CoreGraphics resources (Metal device command buffers,
        and other per-device resources) 1s after last
         - RemoteRenderingBackend drawable resource
         - RemoteGraphicsContextGL instance
         - RemoteMediaPlayerProxy instance
        has been destroyed.

        Adds ScopedRenderingResourcesRequest and
        ScopedWebGLRenderingResourcesRequest to hold the intent to
        use the global rendering resources. The names are called 'Request'
        because the implementation is not guaranteed to do anything specific.
        E.g. ResourcesRequest == "I'd like the resources to be available"
             ResourcesLock, ResourcesHolder, ...  = "The resources are guaranteed
             to be held."
        The naming tries to be consistent with the similar class
        ScopedHighPerformanceGPURequest.

        For sequence like:
        1) Visit a page with simple Context2D usage
        2) Close the page (but leave the browser running)
        This saves 2mb of IOAccelMemory at step 2 on a tested device.


        * Configurations/WebKit.xcconfig:
        Link WebKit to Metal in order to use the RemoteRenderingRequest
        (_MTLCopyAllDevices symbol).

        * GPUProcess/GPUConnectionToWebProcess.cpp:
        (WebKit::GPUConnectionToWebProcess::didClose):
        Clear the map containing RemoteGraphicsContextGL objects
        when connection to WebContent process is closed.
        This stops the RemoteGraphicsContextGL listening for IPC
        and destroys them in scenarios where the connection is
        closed but the GPUConnectionToWebProcess is staying alive
        for some reason. In this patch, this would happen for example
        during reload of the page.

        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
        (WebKit::remoteGraphicsContextGLStreamWorkQueue):
        (WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
        (WebKit::RemoteGraphicsContextGL::initialize):
        (WebKit::RemoteGraphicsContextGL::stopListeningForIPC):
        * GPUProcess/graphics/RemoteGraphicsContextGL.h:
        Hold the ScopedWebGLRenderingResourcesRequest for
        the duration of the RemoteGraphicsContextGL context lifetime.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):
        (WebKit::RemoteRenderingBackend::createImageBuffer):
        (WebKit::RemoteRenderingBackend::releaseRemoteResource):
        (WebKit::RemoteRenderingBackend::updateRenderingResourceRequest):
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        Hold the ScopedRenderingResourcesRequest for the duration that
        there are ImageBuffers or NativeImages in the RemoteResourceCache.

        A RemoteRenderingBackend might exist without any drawable due to
        a) Context2D being created and then destroyed
        b) WebGL taking a reference to the RemoteRenderingBackend in order
        to submit work in case the caller would request Image -> texture
        upload.

        In case of WebGL context being created and then destroyed, there is
        a RRB instance alive but not doing any rendering. In these cases,
        we want the rendering resources to be released and not held by
        the empty RRB.

        * GPUProcess/graphics/ScopedRenderingResourcesRequest.cpp: Copied from Source/WebCore/PAL/pal/spi/cocoa/MetalSPI.h.
        (WebKit::ScopedRenderingResourcesRequest::scheduleFreeRenderingResources):
        (WebKit::ScopedRenderingResourcesRequest::freeRenderingResources):
        * GPUProcess/graphics/ScopedRenderingResourcesRequest.h: Added.
        (WebKit::ScopedRenderingResourcesRequest::ScopedRenderingResourcesRequest):
        (WebKit::ScopedRenderingResourcesRequest::~ScopedRenderingResourcesRequest):
        (WebKit::ScopedRenderingResourcesRequest::operator=):
        (WebKit::ScopedRenderingResourcesRequest::isRequested const):
        (WebKit::ScopedRenderingResourcesRequest::acquire):
        (WebKit::ScopedRenderingResourcesRequest::reset):
        * GPUProcess/graphics/ScopedRenderingResourcesRequestCocoa.mm: Copied from Source/WebCore/PAL/pal/spi/cocoa/MetalSPI.h.
        (WebKit::ScopedRenderingResourcesRequest::scheduleFreeRenderingResources):
        (WebKit::ScopedRenderingResourcesRequest::freeRenderingResources):
        Add a scoped holder for the rendering resources. Currently it purges
        all Metal device memory.

        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.cpp: Copied from Source/WebCore/PAL/pal/spi/cocoa/MetalSPI.h.
        (WebKit::ScopedWebGLRenderingResourcesRequest::scheduleFreeWebGLRenderingResources):
        (WebKit::ScopedWebGLRenderingResourcesRequest::freeWebGLRenderingResources):
        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequest.h: Added.
        (WebKit::ScopedWebGLRenderingResourcesRequest::ScopedWebGLRenderingResourcesRequest):
        (WebKit::ScopedWebGLRenderingResourcesRequest::~ScopedWebGLRenderingResourcesRequest):
        (WebKit::ScopedWebGLRenderingResourcesRequest::operator=):
        (WebKit::ScopedWebGLRenderingResourcesRequest::isRequested const):
        (WebKit::ScopedWebGLRenderingResourcesRequest::acquire):
        (WebKit::ScopedWebGLRenderingResourcesRequest::reset):
        * GPUProcess/graphics/ScopedWebGLRenderingResourcesRequestCocoa.cpp: Copied from Source/WebCore/PAL/pal/spi/cocoa/MetalSPI.h.
        (WebKit::ScopedWebGLRenderingResourcesRequest::scheduleFreeWebGLRenderingResources):
        (WebKit::ScopedWebGLRenderingResourcesRequest::freeWebGLRenderingResources):
        Add a scoped holder for the WebGL global resources. Currently it frees
        the ANGLE related global data. It also purges all Metal device memory
        via RenderingResourcesRequest.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::invalidate):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        Hold RenderingResourcesRequest for the duration of a media player
        existing in the GPU process. It's not known if media playback needs
        Metal. At least some videos do not need it. However, this is erring
        on the side of caution in order to avoid potential video frame skips
        the video playback using Metal but then the devices being purged by
        a Context2D or WebGL -related destruction.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:

2021-04-01  Kate Cheney  <katherine_cheney@apple.com>

        Clear network website data when a user clears history/website data
        https://bugs.webkit.org/show_bug.cgi?id=224030
        <rdar://problem/75288338>

        Reviewed by David Kilzer.

        Clear network-related website data for domains when clearing history/
        website data.

        No new tests. Unable to test due to recent changes in a dependent
        framework's infrastructure for setting network website data for
        testing. Will post a followup test once that is resolved.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::removeNetworkWebsiteData):
        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (NetworkSessionCocoa::removeNetworkWebsiteData):
        * Scripts/process-entitlements.sh:

2021-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Contact AutoFill suggestions no longer show up in non-username or password fields
        https://bugs.webkit.org/show_bug.cgi?id=224087
        <rdar://problem/76080205>

        Reviewed by Tim Horton.

        For the time being, limit use of `PUICQuickboardController` to text content types that would allow for login
        credential AutoFill in Quickboard. We can remove this logic when `PUICQuickboardController` can be updated with
        and present arbitrary text suggestion values.

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

2021-04-01  BJ Burg  <bburg@apple.com>

        v2: REGRESSION(r266890): [Cocoa] Fix API::InspectorClient leak
        https://bugs.webkit.org/show_bug.cgi?id=223899
        <rdar://problem/75249282>

        Reviewed by Devin Rousso.

        Refactor to *not* use the helper ObjC class InspectorDelegate.
        Instead, store the _WKInspectorDelegate in _WKInspector directly
        using a WeakObjCPtr ivar. Move the C++ bridge class to be defined
        inside _WKInspector.mm since it's only used there. Adapt it to
        work better with a nil delegate.

        * UIProcess/API/APIInspectorClient.h:
        (API::InspectorClient::openURLExternally):

        * UIProcess/API/Cocoa/_WKInspectorInternal.h:
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector delegate]):
        (-[_WKInspector setDelegate:]):
        (-[_WKInspector dealloc]):

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * UIProcess/Inspector/Cocoa/InspectorDelegate.h: Removed.
        * UIProcess/Inspector/Cocoa/InspectorDelegate.mm: Removed.

        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController initWithConfiguration:inspectedPage:]):
        Drive-by, fix the leak of _WKInspectorConfiguration.

2021-04-01  Chris Dumez  <cdumez@apple.com>

        Share same code between network process termination and crash handling
        https://bugs.webkit.org/show_bug.cgi?id=224056

        Reviewed by Darin Adler.

        Share same code between network process termination and crash handling. This would avoid
        bugs such as Bug 224022.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::terminate):
        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        (WebKit::NetworkProcessProxy::didTerminate): Deleted.
        (WebKit::NetworkProcessProxy::networkProcessCrashed): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessDidTerminate):
        (WebKit::WebProcessPool::networkProcessCrashed): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::networkProcessDidTerminate):
        (WebKit::WebsiteDataStore::terminateNetworkProcess):
        (WebKit::WebsiteDataStore::networkProcessCrashed): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-04-01  Per Arne  <pvollan@apple.com>

        Add IOKit method filter telemetry
        https://bugs.webkit.org/show_bug.cgi?id=223652
        <rdar://problem/75751391>

        Reviewed by Brent Fulgham.

        Add IOKit method filter telemetry in the WebContent sandbox on macOS and iOS.

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

2021-04-01  Dean Jackson  <dino@apple.com>

        Add #import for when unified sources doesn't import it first.

        * Shared/ios/WebIconUtilities.h:

2021-04-01  Chris Dumez  <cdumez@apple.com>

        Have the ServiceWorker process hold on to a file mapped version of the service worker scripts to save dirty memory
        https://bugs.webkit.org/show_bug.cgi?id=224015
        <rdar://75637679>

        Reviewed by Geoffrey Garen.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::didSaveScriptsToDisk):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::didSaveScriptsToDisk):
        * WebProcess/Storage/WebSWContextManagerConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
        When the NetworkProcess is done saving the service worker scripts to disk and it gets
        a file mapped version, it now sends them to the ServiceWorker process as ShareableResource
        handles via IPC. This allows the ServiceWorker process to replace its heap-allocated
        versions of the script and save on dirty memory use (in the cold case).

        * Shared/ShareableResource.h:
        Fix bug where 2 of ShareableResource data members were not properly initialized by the default
        constructor.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeServiceWorkerContextDataScript):
        (IPC::decodeServiceWorkerContextDataScript):
        (IPC::ArgumentCoder<ServiceWorkerContextData::ImportedScript>::encode):
        (IPC::ArgumentCoder<ServiceWorkerContextData::ImportedScript>::decode):
        (IPC::ArgumentCoder<ServiceWorkerContextData>::encode):
        (IPC::ArgumentCoder<ServiceWorkerContextData>::decode):
        (IPC::tryConvertToShareableResourceHandle):
        * Shared/WebCoreArgumentCoders.h:
        Moved IPC encoders / decoders for ServiceWorkerContextData and ServiceWorkerContextData::ImportedScript
        to the WebKit layer, in WebCoreArgumentCoders. This allows us to encode / decode the scripts as
        WebKit::ShareableHandle whenever possible. This way, when the NetworkProcess sends a
        ServiceWorkerContextData to the ServiceWorker process to launch a service worker, both the
        ServiceWorker process and the Network process share the same mmap'd versions of the scripts and we
        save on dirty memory use. This helps reduce dirty memory use in the ServiceWorker process in the
        warm case, where the scripts are loaded straight from the disk (via SWScriptStorage).

2021-04-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION(r272999): User-installed fonts no longer work in Mail
        https://bugs.webkit.org/show_bug.cgi?id=223985
        <rdar://problem/75975210>

        Reviewed by Per Arne Vollan.

        The sandbox extension which allows user-installed fonts to work was part of the WebPage,
        but XType may already have been initialized to use the static registry by the time the WebPage
        has been created. Therefore, simply _having_ a sandbox extension isn't sufficient; instead,
        WebPage's constructor needs to call CTFontManagerEnableAllUserFonts() to switch to using fontd
        in addition to using the sandbox extension.

        Test: WebKit.UserInstalledFontsWork

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:

2021-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        Allow ASCWebKitSPISupport to be used on macOS
        https://bugs.webkit.org/show_bug.cgi?id=224036
        <rdar://76028645>

        Reviewed by Brent Fulgham.

        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.h:
        * UIProcess/WebAuthentication/Cocoa/AuthenticationServicesCoreSoftLink.mm:

2021-04-01  Per Arne  <pvollan@apple.com>

        [GPU process] Enable CFPrefs direct mode
        https://bugs.webkit.org/show_bug.cgi?id=223817
        <rdar://74748933>

        Reviewed by Brent Fulgham.

        Enable CFPrefs direct mode in the GPU process.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
        (WebKit::shouldEnableCFPrefsDirectMode):
        (WebKit::XPCServiceMain):

2021-04-01  Alex Christensen  <achristensen@webkit.org>

        Use sendWithAsyncReply for NetworkProcess messages with async replies
        https://bugs.webkit.org/show_bug.cgi?id=224025

        Reviewed by Youenn Fablet.

        This will prevent us from having to manually store and handle the callback IDs and other things.

        * 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::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::networkProcessCrashed):
        (WebKit::NetworkProcessProxy::clearCallbackStates): Deleted.
        (WebKit::NetworkProcessProxy::didFetchWebsiteData): Deleted.
        (WebKit::NetworkProcessProxy::didDeleteWebsiteData): Deleted.
        (WebKit::NetworkProcessProxy::didDeleteWebsiteDataForOrigins): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2021-04-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275350.
        https://bugs.webkit.org/show_bug.cgi?id=224048

        Introduced perf regression

        Reverted changeset:

        "Add IOKit method filter telemetry"
        https://bugs.webkit.org/show_bug.cgi?id=223652
        https://trac.webkit.org/changeset/275350

2021-04-01  Martin Robinson  <mrobinson@igalia.com>

        Expose an alias for ScrollSnapOffsetInfo<T> to make it easier to use
        https://bugs.webkit.org/show_bug.cgi?id=223986

        Reviewed by Sergio Villar Senin.

        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::decode): Use new aliases.
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::encode): Ditto.
        (ArgumentCoder<FloatScrollSnapOffsetsInfo>::decode): Ditto.
        (ArgumentCoder<ScrollSnapOffsetsInfo<float>>::encode): Deleted.
        (ArgumentCoder<ScrollSnapOffsetsInfo<float>>::decode): Deleted.

2021-04-01  Per Arne  <pvollan@apple.com>

        Add IOKit method filter telemetry
        https://bugs.webkit.org/show_bug.cgi?id=223652
        <rdar://problem/75751391>

        Reviewed by Brent Fulgham.

        Add IOKit method filter telemetry in the WebContent sandbox on macOS and iOS.

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

2021-04-01  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Process the pending messages of GPUProcessProxy before its destructor is called
        https://bugs.webkit.org/show_bug.cgi?id=224017

        Reviewed by Simon Fraser.

        Ensure all the pending messages of the singleton GPUProcessProxy are
        processed every time a WebProcessPool is about to be deleted. When calling
        the completion handlers of these messages, the GPUProcessProxy and the 
        WebProcessPool have to be valid

        * UIProcess/AuxiliaryProcessProxy.cpp:
        (WebKit::AuxiliaryProcessProxy::~AuxiliaryProcessProxy):
        (WebKit::AuxiliaryProcessProxy::replyToPendingMessages):
        * UIProcess/AuxiliaryProcessProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):

2021-03-31  Simon Fraser  <simon.fraser@apple.com>

        Feed preferred frames per second back to the UI process for each DisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=224023

        Reviewed by Sam Weinig.

        DisplayLink needs to track the preferredFramesPerSecond of each of its client
        observers. notifyObserversDisplayWasRefreshed() can then avoid sending IPC to
        a process a frequency which is higher than that process needs.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::startDisplayLink):
        (WebKit::WebProcessPool::setDisplayLinkPreferredFramesPerSecond):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::removeObserver):
        (WebKit::DisplayLink::removeObservers):
        (WebKit::DisplayLink::setPreferredFramesPerSecond):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * UIProcess/mac/DisplayLink.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::startDisplayLink):
        (WebKit::WebProcessProxy::setDisplayLinkPreferredFramesPerSecond):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::adjustPreferredFramesPerSecond):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::setPreferredFramesPerSecond): Deleted.
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::startNotificationMechanism):
        (WebKit::DisplayRefreshMonitorMac::adjustPreferredFramesPerSecond):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h:

2021-03-31  Patrick Angle  <pangle@apple.com>

        Web Inspector: [Cocoa] WKInspectorResourceURLSchemeHandler can exceed the soft thread limit when opening multiple inspectors simultaneously.
        https://bugs.webkit.org/show_bug.cgi?id=223958

        Reviewed by BJ Burg.

        In engineering builds, the Web Inspector is loaded as hundreds of separate resources instead of the handful of
        minified sources used for released builds. When two Web Inspector windows are opened their loads can overlap
        and it is possible for the sum total of file load operations to exceed the dispatch soft thread limit. To
        resolve this, we set a sensible limit to the number of simultaneous inspector loading operations. A higher
        number of allowed concurrent operations yielded no noticeable increase in load speeds.

        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm:
        (-[WKInspectorResourceURLSchemeHandler webView:startURLSchemeTask:]):

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        List of extents should be bounds-checked when iterating display list items
        https://bugs.webkit.org/show_bug.cgi?id=224019
        <rdar://problem/71851600>

        Reviewed by Tim Horton.

        Rename `InvalidItem` to `InvalidItemOrExtent`.

        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::nextDestinationImageBufferAfterApplyingDisplayLists):

2021-03-31  Chris Dumez  <cdumez@apple.com>

        REGRESSION: The NetworkProcess fails to relaunch after it crashes
        https://bugs.webkit.org/show_bug.cgi?id=224022
        <rdar://75148724>

        Reviewed by Darin Adler.

        NetworkProcessProxy::networkProcessCrashed() failed to clear defaultNetworkProcess() like we do on
        network process termination (in NetworkProcessProxy::didTerminate()). As a result, upon a
        network process crash, WebsiteDataStore::networkProcessCrashed() would get called and
        properly clear WebsiteDataStore::m_networkProcess. However, when calling
        WebsiteDataStore::networkProcess() later on, it would re-initialize m_networkProcess with
        the same dead NetworkProcessProxy, since networkProcessForSession() relies on
        NetworkProcessProxy::defaultNetworkProcess().

        No new tests, will land an API test shortly as a follow-up.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessCrashed):

2021-03-31  Eric Carlson  <eric.carlson@apple.com>

        [macOS] MediaSessionCoordinator should have join and leave methods
        https://bugs.webkit.org/show_bug.cgi?id=223955
        <rdar://problem/76021588>

        Reviewed by Jer Noble.

        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h: Renamed from Source/WebKit/UIProcess/Media/MediaSessionCoordinatorPrivateProxy.h.
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::create):
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        (WebKit::RemoteMediaSessionCoordinatorProxy::join):
        (WebKit::RemoteMediaSessionCoordinatorProxy::leave):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatorStateChanged):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createMediaSessionCoordinator):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::create):
        (WebKit::RemoteMediaSessionCoordinator::RemoteMediaSessionCoordinator):
        (WebKit::RemoteMediaSessionCoordinator::join):
        (WebKit::RemoteMediaSessionCoordinator::leave):
        (WebKit::RemoteMediaSessionCoordinator::coordinatorStateChanged):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createMediaSessionCoordinator):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        * UIProcess/Media/MediaSessionCoordinatorProxyPrivate.h: Renamed from Source/WebKit/UIProcess/Media/MediaSessionCoordinatorPrivateProxy.h.
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::create):
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatorStateChanged):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createMediaSessionCoordinator):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
        (WebKit::RemoteMediaSessionCoordinator::create):
        (WebKit::RemoteMediaSessionCoordinator::RemoteMediaSessionCoordinator):
        (WebKit::RemoteMediaSessionCoordinator::coordinatorStateChanged):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createMediaSessionCoordinator):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Update a couple of icons in the file upload context menu
        https://bugs.webkit.org/show_bug.cgi?id=224013
        <rdar://problem/73234218>

        Reviewed by Tim Horton.

        Use updated symbols for the "Photo Library" and "Take Photo or Video" menu items.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel contextMenuInteraction:configurationForMenuAtLocation:]):

2021-03-30  Simon Fraser  <simon.fraser@apple.com>

        Assertions in DisplayUpdate when dragging WebView windows between screens with different refresh rates
        https://bugs.webkit.org/show_bug.cgi?id=223984

        Reviewed by Sam Weinig.

        RemoteLayerTreeDisplayRefreshMonitor knows its m_preferredFramesPerSecond so can
        return that.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::displayNominalFramesPerSecond):

2021-03-31  Sihui Liu  <sihui_liu@apple.com>

        Add logging in IndexedDB to help debug flaky quota tests
        https://bugs.webkit.org/show_bug.cgi?id=223578
        <rdar://problem/75956789>

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::storageQuotaManager):

2021-03-31  Alex Christensen  <achristensen@webkit.org>

        Add deprecation macros.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::encodeNSError):
        * UIProcess/Authentication/mac/WebCredentialMac.mm:
        (WebKit::leafCertificate):
        (WebKit::chain):

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should support UIKit protocol methods for becoming focused
        https://bugs.webkit.org/show_bug.cgi?id=224003
        <rdar://problem/75313658>

        Reviewed by Megan Gardner.

        Implement a few protocol methods on `UIFocusEnvironment`. See below for more details.

        Test: UIFocusTests.OverrideCanBecomeFocused

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView canBecomeFocused]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView canBecomeFocused]):
        (-[WKContentView canBecomeFocusedForWebView]):

        Implement `-canBecomeFocused`, and return `YES` by default. If `-canBecomeFocused` is overridden on `WKWebView`,
        then defer to that overridden method instead.

        (-[WKContentView didUpdateFocusInContext:withAnimationCoordinator:]):

        Handle the focus environment change by advancing to the next or previous focusable element, depending on the
        focus context's heading direction.

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

        Add a null check so that callers that don't need to know when the focus change is complete are able to pass in a
        `nil` completion handler.

2021-03-31  Youenn Fablet  <youenn@apple.com>

        Make use of NSURLSessionWebSocket.sendCloseCode if available
        https://bugs.webkit.org/show_bug.cgi?id=223999

        Reviewed by Alex Christensen.

        If available, we just call sendCloseCode, cancel will happen when NetworkSocketChannel is destroyed.
        Covered by LayoutTests/http/tests/websocket/tests/hybi/client-close-2.html.

        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:
        (WebKit::WebSocketTask::close):

2021-03-31  Youenn Fablet  <youenn@apple.com>

        Send WebSocket cocoa authentication challenge to AuthenticationManager
        https://bugs.webkit.org/show_bug.cgi?id=223998

        Reviewed by Alex Christensen.

        In case of authentication challenge related to WebSocketTask, send it to the AuthenticationManager for evaluation.
        Minor refactoring to reuse the same completion handler as for network data tasks.
        Covered by LayoutTests/http/tests/websocket/tests/hybi/simple-wss.html with NSURLSessionWebSocket code path enabled.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::allowsSpecificHTTPSCertificateForHost):
        (WebKit::CompletionHandler<void):
        (WebKit::NetworkSessionCocoa::continueDidReceiveChallenge):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.h:
        (WebKit::WebSocketTask::pageID const):
        (WebKit::WebSocketTask::partition const):
        * NetworkProcess/cocoa/WebSocketTaskCocoa.mm:

2021-03-31  Chris Dumez  <cdumez@apple.com>

        ServiceWorkerContextData should not be saved both on ServiceWorkerThread & ServiceWorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=224001

        Reviewed by Geoffrey Garen.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/Storage/WebSWContextManagerConnection.h:

2021-03-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Fall back to context menu presentation after long pressing image overlay text
        https://bugs.webkit.org/show_bug.cgi?id=223967
        <rdar://problem/76028620>

        Reviewed by Tim Horton.

        Add support for this behavior; see <rdar://problem/76028620> for more details.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode const):
        (WebKit::InteractionInformationAtPosition::decode):

        Add a couple of new flags (`isSelected` and `isImageOverlayText`) to indicate whether the interaction is over
        selected text, and also whether the interaction is over text in an image overlay, respectively.

        * Shared/ios/InteractionInformationRequest.cpp:
        (WebKit::InteractionInformationRequest::encode const):
        (WebKit::InteractionInformationRequest::decode):
        (WebKit::InteractionInformationRequest::isValidForRequest const):

        Add a new position information request option to ignore user agent shadow root content.

        * Shared/ios/InteractionInformationRequest.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

        Add a flag that's set when `_imageExtractionTimeoutGestureRecognizer` is recognized, and is about to present a
        context menu, and is unset upon starting the context menu presentation.

        (-[WKContentView setUpInteraction]):
        (-[WKContentView cleanUpInteraction]):
        (-[WKContentView gestureRecognizer:shouldRequireFailureOfGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]):

        Make the timeout gesture (`_imageExtractionTimeoutGestureRecognizer`) require the failure of the context menu
        initiation gesture, such that this image extraction timeout gesture won't trigger if the context menu has
        already been triggered.

        (-[WKContentView _invalidateCurrentPositionInformation]):
        (-[WKContentView _didCommitLoadForMainFrame]):

        Pull logic for resetting cached position information into a helper, and call it inside
        `-_didCommitLoadForMainFrame`.

        (-[WKContentView _contextMenuInteraction:configurationForMenuAtLocation:completion:]):

        Reset the new flag (`_contextMenuWasTriggeredByImageExtractionTimeout`) if necessary, and use its existing value
        to determine whether we should ignore UA shadow root content when performing a hit-test for the context menu
        configuration.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::imageRendererAndImage):
        (WebKit::imagePositionInformation):
        (WebKit::elementPositionInformation):

        Additionally supply the image URL and image data if `includeImageData` is set, even if the hit-tested node is
        just a text node underneath an image element's overlay.

        (WebKit::selectionPositionInformation):
        (WebKit::WebPage::positionInformation):

        Add support for the new position information flags.

2021-03-30  Chris Dumez  <cdumez@apple.com>

        ASSERT(m_sendPort) in IPC::Connection::open() when running some iOS unit tests
        https://bugs.webkit.org/show_bug.cgi?id=223982
        <rdar://75974285>

        Reviewed by Alexey Proskuryakov.

        If the UIProcess exits or severs it connection to the WebProcess while the WebProcess is
        launching, the WebProcess ends up getting an invalid mach port upon initialization. This
        is expected and XPCServiceInitializerDelegate::getConnectionIdentifier() was dealing with
        this. getConnectionIdentifier() was checking if the port was invalid by checking if it was
        MACH_PORT_NULL and calling exit() in such case. However, something has changed (likely
        at OS level) and we are now sometimes getting MACH_PORT_DEAD instead of MACH_PORT_NULL.
        The proper way to check if a mach port is valid is to call MACH_PORT_VALID(), which checks
        for both MACH_PORT_NULL and MACH_PORT_DEAD. I therefore updated getConnectionIdentifier()
        to use MACH_PORT_VALID() instead of an explicit check for MACH_PORT_NULL. This gets rid
        of debug assertions we were seeing in the output of some iOS unit tests.

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

2021-03-30  Chris Dumez  <cdumez@apple.com>

        Service Worker scripts use too much memory in the network process
        https://bugs.webkit.org/show_bug.cgi?id=223808
        <rdar://75637093>

        Reviewed by Geoff Garen.

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
        Pass a ServiceWorkerContextData::ImportedScript struct in the SetScriptResource IPC
        for convenience. We used to pass the ImportedScript data members separately.

        * NetworkProcess/cache/CacheStorageEngine.cpp:
        (WebKit::CacheStorage::Engine::clearAllCachesFromDisk):
        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
        (WebKit::CacheStorage::Engine::deleteNonEmptyDirectoryOnBackgroundThread):
        * NetworkProcess/cache/CacheStorageEngine.h:
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        * NetworkProcess/cache/NetworkCacheFileSystem.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        Drop deleteDirectoryRecursively() implementation and use the existing
        FileSystem::deleteNonEmptyDirectory() in wtf instead.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile const):
        Moved some of the mapToFile() logic to WTF, so that it can be reused.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeSharedBuffer):
        (IPC::decodeSharedBuffer):
        Update SharedBuffer's IPC argument coder to distinguish a null SharedBuffer
        and an empty one. We now use SharedBuffer to store service worker script sources
        and it is possible for the script sources to be empty (and they are in some of
        our API tests).

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::setScriptResource):
        Pass a ServiceWorkerContextData::ImportedScript struct in the SetScriptResource IPC
        for convenience. We used to pass the ImportedScript data members separately.

2021-03-30  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Introduce PrivateClickMeasurementNetworkLoader
        https://bugs.webkit.org/show_bug.cgi?id=222217
        <rdar://74817863>

        Reviewed by Youenn Fablet.

        This patch refactors PrivateClickMeasurementManager to use a newly introduced PrivateClickMeasurementNetworkLoader
        instead of the PingLoad to handle network traffics such that PCMM can receive and process response bodies.

        PrivateClickMeasurementNetworkLoader is a stripped down version of the ServiceWorkerSoftUpdateLoader, which is also
        a derived class of NetworkLoadClient.

        Covered by new test contents within existing test files.

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::addPrivateClickMeasurementNetworkLoader):
        (WebKit::NetworkSession::removePrivateClickMeasurementNetworkLoader):
        Modifies the PCMM to use PCMNL. And then introduces a hash table to manage the lifetime of each PCMNL.

        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::PrivateClickMeasurementManager):
        (WebKit::generateNetworkLoadParameters):
        (WebKit::generateNetworkLoadParametersForHttpPost):
        (WebKit::generateNetworkLoadParametersForHttpGet):
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        (WebKit::generateNetworkResourceLoadParameters): Deleted.
        (WebKit::generateNetworkResourceLoadParametersForHttpPost): Deleted.
        (WebKit::generateNetworkResourceLoadParametersForHttpGet): Deleted.
        * NetworkProcess/PrivateClickMeasurementManager.h:
        (WebKit::PrivateClickMeasurementManager::setNetworkLoadFunction):
        (WebKit::PrivateClickMeasurementManager::setPingLoadFunction): Deleted.
        Modifies the PCMM to use PCMNL. Specifically, changes the token_public_key and unlinkable_token to be extracted
        from the JSON content of the response.

        * NetworkProcess/PrivateClickMeasurementNetworkLoader.cpp: Added.
        (WebKit::PrivateClickMeasurementNetworkLoader::start):
        (WebKit::PrivateClickMeasurementNetworkLoader::PrivateClickMeasurementNetworkLoader):
        (WebKit::PrivateClickMeasurementNetworkLoader::fail):
        (WebKit::PrivateClickMeasurementNetworkLoader::willSendRedirectedRequest):
        (WebKit::PrivateClickMeasurementNetworkLoader::didReceiveResponse):
        (WebKit::PrivateClickMeasurementNetworkLoader::didReceiveBuffer):
        (WebKit::PrivateClickMeasurementNetworkLoader::didFinishLoading):
        (WebKit::PrivateClickMeasurementNetworkLoader::didFailLoading):
        (WebKit::PrivateClickMeasurementNetworkLoader::didComplete):
        * NetworkProcess/PrivateClickMeasurementNetworkLoader.h: Added.
        Introduces the PCMNL.

        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.h:
        Fixes an Unified Build issue.

        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        Some paperwork.

2021-03-30  Jiewen Tan  <jiewen_tan@apple.com>

        Allow WebAuthn process talk to the ASD
        https://bugs.webkit.org/show_bug.cgi?id=223947
        <rdar://75908828>

        Reviewed by Brent Fulgham.

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

2021-03-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r275172): Many com.apple.WebKit.Networking.Development crashes appearing in "other crashes"
        https://bugs.webkit.org/show_bug.cgi?id=223952

        Reviewed by Geoffrey Garen.

        Use OS_REASON_FLAG_NO_CRASH_REPORT to prevent crash reports.  xpc_connection_kill didn't generate crash reports.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
        (IPC::Connection::kill):
        * Platform/spi/Cocoa/ReasonSPI.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::platformInvalidate):

2021-03-30  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Reduce logging for uninteresting sandbox violations
        https://bugs.webkit.org/show_bug.cgi?id=223943
        <rdar://problem/76014115>

        Reviewed by Per Arne Vollan.

        Testing has shown some IOKit properties needed by the macOS Network Process, and a handful of items needed when running in recovery mode. We should
        allow these items to support proper function and to reduce telemetry for items that we don't need to learn more about.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-03-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Address post-commit comments on r275180
        https://bugs.webkit.org/show_bug.cgi?id=223915

        Reviewed by Kimmo Kinnunen.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::waitForDidCreateImageBufferBackend):
        (WebKit::RemoteRenderingBackendProxy::waitForDidFlush):
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetImageData):
        (WebKit::RemoteRenderingBackendProxy::waitForGetImageDataToComplete):
        (WebKit::RemoteRenderingBackendProxy::getDataURLForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getDataForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getBGRADataForImageBuffer):
        (WebKit::RemoteRenderingBackendProxy::getShareableBitmap):
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

2021-03-30  Jon Lee  <jonlee@apple.com>

        Remove obsolete WebGL2 feature flag
        https://bugs.webkit.org/show_bug.cgi?id=223945

        Reviewed by Darin Adler.

        * FeatureFlags/WebKit-appletvos.plist: Feature flag is not referenced anywhere.
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:

2021-03-30  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Add an IPC message to implement RemoteImageDecoderAVF::clearFrameBufferCache()
        https://bugs.webkit.org/show_bug.cgi?id=223707

        Reviewed by Youenn Fablet.

        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
        (WebKit::RemoteImageDecoderAVFProxy::deleteDecoder):
        Replace `const ImageDecoderIdentifier&` with `ImageDecoderIdentifier`.
        (WebKit::RemoteImageDecoderAVFProxy::encodedDataStatusChanged): Ditto.
        (WebKit::RemoteImageDecoderAVFProxy::setExpectedContentSize): Ditto.
        (WebKit::RemoteImageDecoderAVFProxy::setData): Ditto.
        (WebKit::RemoteImageDecoderAVFProxy::createFrameImageAtIndex): Ditto.
        (WebKit::RemoteImageDecoderAVFProxy::clearFrameBufferCache):
        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
        * GPUProcess/media/RemoteImageDecoderAVFProxy.messages.in:
        Add IPC message `clearFrameBufferCache()`, and replace `uint32_t` with `size_t`
        because IPC messages support it now.

        * WebProcess/GPU/media/RemoteImageDecoderAVF.cpp:
        (WebKit::RemoteImageDecoderAVF::setData):
        (WebKit::RemoteImageDecoderAVF::clearFrameBufferCache):
        Implement the same behavior as `ImageDecoderAVFObjC::clearFrameBufferCache()`.
        This change will reduce the peak memory usage.

2021-03-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r275210. Disambiguate the WeakPtrFactory in RemoteMediaSessionCoordinatorProxy with a using statement.

        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:

2021-03-30  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, reverting r275197.

        The change is spooky.

        Reverted changeset:

        "Safari crashed and lost all tabs, after unlocking sleeping
        device"
        https://bugs.webkit.org/show_bug.cgi?id=223832
        https://commits.webkit.org/r275197

2021-03-30  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Two taps required to view <select> options on Square Checkout
        https://bugs.webkit.org/show_bug.cgi?id=223933
        <rdar://problem/74828029>

        Reviewed by Wenson Hsieh.

        Some sites, such as Square Checkout, wrap all the <option>s in a
        <select> element in a single <optgroup>. With the new context menu
        appearance for <select> on iOS, this means that users have to tap twice
        to view the options on some sites (once to bring up the menu and once
        to expand the grouped menu).

        To fix, promote the the contents of the grouped submenu to the root menu
        if all the options are contained within a single submenu.

        Test: fast/forms/ios/form-control-refresh/select/all-options-in-single-optgroup.html

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker createMenu]):

2021-03-29  Simon Fraser  <simon.fraser@apple.com>

        Allow non-60fps display updates to be driven by DisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=223912

        Reviewed by Sam Weinig.

        Improve the logging.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::addObserver):

2021-03-30  Jer Noble  <jer.noble@apple.com>

        MediaSessionCoordinatorPrivateProxy should have a Client
        https://bugs.webkit.org/show_bug.cgi?id=223935

        Reviewed by Eric Carlson.

        Similar to the non-proxy MediaSessionCoordinatorPrivate, the Proxy
        version should have a client, used for communicating state changes
        downstream.

        * UIProcess/Media/MediaSessionCoordinatorPrivateProxy.h:
        (WebKit::MediaSessionCoordinatorPrivateProxy::setClient):
        (WebKit::MediaSessionCoordinatorPrivateProxy::client const):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::seekSessionToTime):
        (WebKit::RemoteMediaSessionCoordinatorProxy::playSession):
        (WebKit::RemoteMediaSessionCoordinatorProxy::pauseSession):
        (WebKit::RemoteMediaSessionCoordinatorProxy::setSessionTrack):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:

2021-03-30  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Add "CodeComplete" attribute to some feature flags
        https://bugs.webkit.org/show_bug.cgi?id=223907

        Reviewed by Daniel Bates.

        Add "CodeComplete" attribute for three feature flags:
        - gpu_process_canvas_rendering
        - gpu_process_media
        - gpu_process_webrtc

        Also replace tabs in the plist files with spaces.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:
        * Scripts/combine-feature-flags-plist.py:
        (main): Fix an issue to merge "attributes".

2021-03-30  Jean-Yves Avenard  <jya@apple.com>

        Now Playing content isn't updated when media session's Metadata is modified
        https://bugs.webkit.org/show_bug.cgi?id=223795

        Reviewed by Eric Carlson.

        * UIProcess/Media/MediaSessionCoordinatorPrivateProxy.h: Update for new method prototyping.
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
        (WebKit::RemoteMediaSessionCoordinatorProxy::positionStateChanged): Update for new method prototyping.
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp: 
        (WebKit::RemoteMediaSessionCoordinator::positionStateChanged): Update for new method prototyping.
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:

2021-03-29  Jiewen Tan  <jiewen_tan@apple.com>

        Safari crashed and lost all tabs, after unlocking sleeping device
        https://bugs.webkit.org/show_bug.cgi?id=223832
        <rdar://75555287>

        Reviewed by David Kilzer.

        A speculative fix for this crash. A possible explanation from the crash log suggests that the protectedThis
        could be elided because of compiler optimization given it is not used in the block. To prevent such optimization,
        protectedThis is therefore used explicitly in the block.

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

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        [Big Sur arm64] TestWebKitAPI.WebKit.AccessibilityReduceMotion is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=222824

        Reviewed by Tim Horton.

        Use smart pointers instead of storing raw ObjC pointers as ivars.

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

2021-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a way for internal clients to hit-test for selectable text in user agent shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=223894
        <rdar://problem/75968068>

        Reviewed by Tim Horton.

        Augment some Objective-C injected bundle SPI to allow internal clients to hit-test for selectable text,
        including content in UA shadow roots. Refer to <rdar://problem/75753666> for more context.

        Tests:  InjectedBundleHitTest.TextParagraph
                InjectedBundleHitTest.ImageOverlay

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame hitTest:options:]):

        Add a new version of `-hitTest:` that takes hit testing options (for now, the only option is whether or not we
        should allow UA shadow root content when hit-testing).

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle isSelectableTextNode]):

        Add a readonly getter to return whether or not the hit-tested node is a selectable text node.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isSelectableTextNode const):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest const):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::defaultHitTestRequestTypes):

2021-03-29  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Don't record DisplayList items if the GPU Process has been terminated
        https://bugs.webkit.org/show_bug.cgi?id=223864
        <rdar://73586187>

        Reviewed by Simon Fraser.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 2: Rename setItemBufferClient to setItemBuffer{Writing,Reading}Client
        https://bugs.webkit.org/show_bug.cgi?id=223863

        Reviewed by Wenson Hsieh.

        * GPUProcess/graphics/DisplayListReaderHandle.cpp:
        (WebKit::DisplayListReaderHandle::displayListForReading const):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):

2021-03-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process]: Improve getImageData() perf part 2: Use shared memory and a semaphore
        https://bugs.webkit.org/show_bug.cgi?id=223732

        Reviewed by Ryosuke Niwa.

        This patch implements a design for getImageData() where the web process and the GPU process
        set up a shmem + semaphore ahead-of-time, so that when we encounter a call to getImageData(),
        the GPU process can just write into the shmem and signal the semaphore. The web process just
        encodes the getImageData() call into the regular display list, flushAsync()s to kick the GPU
        process, then just waits on the semaphore. Initial performance testing shows that this is
        way, way faster than sending messages containing pixel color data payloads.

        This patch causes a ~40% progression on the Images test in MotionMark on my Mac with the GPU
        process enabled. When compared to the GPU process disabled, the results after just running
        just a few times seem to be pretty close (within the noise).

        If we need more performance, the next step is to try to reduce the memcpy()s.

        No new tests because there is no behavior change.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetImageDataHelper):
        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetImageData):
        (WebKit::RemoteRenderingBackend::semaphoreForGetImageData):
        (WebKit::RemoteRenderingBackend::updateSharedMemoryAndSemaphoreForGetImageData):
        (WebKit::RemoteRenderingBackend::destroyGetImageDataSharedMemory):
        (WebKit::RemoteRenderingBackend::populateGetImageDataSharedMemory):
        (WebKit::RemoteRenderingBackend::getImageData): Deleted.
        * GPUProcess/graphics/RemoteRenderingBackend.h:
        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
        * Platform/IPC/IPCSemaphore.h:
        * Platform/IPC/darwin/IPCSemaphoreDarwin.cpp:
        (IPC::Semaphore::waitFor):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
        (WebKit::RemoteRenderingBackendProxy::sharedMemoryForGetImageData):
        (WebKit::RemoteRenderingBackendProxy::waitForGetImageDataToComplete):
        (WebKit::RemoteRenderingBackendProxy::destroyGetImageDataSharedMemory):
        (WebKit::RemoteRenderingBackendProxy::getImageData): Deleted.
        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

2021-03-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Custom fonts don't work in GPU process mode
        https://bugs.webkit.org/show_bug.cgi?id=223861

        Reviewed by Don Olmstead.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (IPC::ArgumentCoder<Ref<Font>>::decodePlatformData):

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        Use terminate_with_reason instead of xpc_connection_kill
        https://bugs.webkit.org/show_bug.cgi?id=223618

        Reviewed by Darin Adler.

        The former was deprecated in rdar://70461770
        This does the same thing but adds debugging information so that people looking at process terminations have more information about what is going on.

        * Platform/IPC/cocoa/ConnectionCocoa.mm:
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
        (IPC::Connection::kill):
        * Platform/spi/Cocoa/ReasonSPI.h: Added.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::platformInvalidate):
        * WebKit.xcodeproj/project.pbxproj:

2021-03-29  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add remote MediaSessionCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=223854
        <rdar://problem/75934650>

        Reviewed by Jer Noble.

        Define the interface for a remote MediaSessionCoordinatorPrivate and implement
        message senders and receivers RemoteMediaSessionCoordinator and 
        RemoteMediaSessionCoordinatorProxy.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * SourcesCocoa.txt:
        * UIProcess/Media/MediaSessionCoordinatorPrivateProxy.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp: Added.
        (WebKit::RemoteMediaSessionCoordinatorProxy::create):
        (WebKit::RemoteMediaSessionCoordinatorProxy::RemoteMediaSessionCoordinatorProxy):
        (WebKit::RemoteMediaSessionCoordinatorProxy::~RemoteMediaSessionCoordinatorProxy):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinateSeekTo):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePlay):
        (WebKit::RemoteMediaSessionCoordinatorProxy::coordinatePause):
        (WebKit::RemoteMediaSessionCoordinatorProxy::::coordinateSetTrack):
        (WebKit::RemoteMediaSessionCoordinatorProxy::positionStateChanged):
        (WebKit::RemoteMediaSessionCoordinatorProxy::playbackStateChanged):
        (WebKit::RemoteMediaSessionCoordinatorProxy::readyStateChanged):
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createMediaSessionCoordinator):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp: Added.
        (WebKit::RemoteMediaSessionCoordinator::create):
        (WebKit::RemoteMediaSessionCoordinator::RemoteMediaSessionCoordinator):
        (WebKit::RemoteMediaSessionCoordinator::~RemoteMediaSessionCoordinator):
        (WebKit::RemoteMediaSessionCoordinator::seekTo):
        (WebKit::RemoteMediaSessionCoordinator::play):
        (WebKit::RemoteMediaSessionCoordinator::pause):
        (WebKit::RemoteMediaSessionCoordinator::setTrack):
        (WebKit::RemoteMediaSessionCoordinator::positionStateChanged):
        (WebKit::RemoteMediaSessionCoordinator::readyStateChanged):
        (WebKit::RemoteMediaSessionCoordinator::playbackStateChanged):
        (WebKit::RemoteMediaSessionCoordinator::seekSessionToTime):
        (WebKit::RemoteMediaSessionCoordinator::playSession):
        (WebKit::RemoteMediaSessionCoordinator::pauseSession):
        (WebKit::RemoteMediaSessionCoordinator::setSessionTrack):
        (WebKit::RemoteMediaSessionCoordinator::logChannel const):
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h: Added.
        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createMediaSessionCoordinator):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        Migrate _WKUserContentExtension and older versions of WKContentRuleList to WKContentRuleList during lookup
        https://bugs.webkit.org/show_bug.cgi?id=223831

        Reviewed by Brady Eidson.

        r275078 incremented CurrentContentRuleListFileVersion for the first time in a few years.
        As a result, we will get a WKErrorContentRuleListStoreVersionMismatch during lookup for existing compiled WKContentRuleLists.
        To make this as compatible as possible, if we see such a WKContentRuleList, try extracting its source and recompiling.

        Also, _WKUserContentExtension is used by Safari and being migrated from in rdar://75889414.
        To make this succeed and not leave any files behind, we move legacy files to modern filenames during lookup.
        We also remove them if they're there when removing the WKContentRuleList from the WKContentRuleListStore,
        and we include them in getAvailableContentRuleListIdentifiers.  compileContentRuleList only compiles to the modern locations,
        and invalidateContentRuleListVersion is only used for tests.  All this is done on non-main WorkQueues, so the few additional
        file reads/writes aren't an issue.

        Luckily, _WKUserContentExtensionStore was only used by Safari, and its defaultStore was never used.

        All this is covered by API tests.

        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::defaultStore):
        (API::ContentRuleListStore::storeWithPath):
        (API::ContentRuleListStore::ContentRuleListStore):
        (API::openAndMapContentRuleList):
        (API::getContentRuleListSourceFromMappedFile):
        (API::ContentRuleListStore::lookupContentRuleList):
        (API::ContentRuleListStore::getAvailableContentRuleListIdentifiers):
        (API::ContentRuleListStore::compileContentRuleList):
        (API::ContentRuleListStore::removeContentRuleList):
        (API::ContentRuleListStore::invalidateContentRuleListVersion):
        (API::ContentRuleListStore::getContentRuleListSource):
        (API::ContentRuleListStore::legacyDefaultStore): Deleted.
        (API::ContentRuleListStore::nonLegacyDefaultStore): Deleted.
        (API::ContentRuleListStore::~ContentRuleListStore): Deleted.
        (API::openAndMapOrCopyContentRuleList): Deleted.
        * UIProcess/API/APIContentRuleListStore.h:
        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreCreate):
        * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
        (API::ContentRuleListStore::defaultStorePath):
        * UIProcess/API/Cocoa/WKContentRuleListStore.h:
        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
        (+[WKContentRuleListStore defaultStore]):
        (+[WKContentRuleListStore storeWithURL:]):
        (+[WKContentRuleListStore defaultStoreWithLegacyFilename]):
        (+[WKContentRuleListStore storeWithURLAndLegacyFilename:]):
        * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:

2021-03-28  Simon Fraser  <simon.fraser@apple.com>

        Plumb DisplayUpdate through the display refresh monitors
        https://bugs.webkit.org/show_bug.cgi?id=223847

        Reviewed by Sam Weinig.

        Future work will allow DisplayRefreshMonitorClients to request different frame rates, which
        are whole fractions of the display's nominal refresh rate. These various frame rate requests
        flow up through the DisplayRefreshMonitors, and in WebKit2, up through IPC to the
        per-display DisplayLink which may even service multiple processes.

        For power reasons, we don't want to trigger display refresh notifications down the chain at
        the highest possible frequency; at various stages of propagation the rate might be halved if
        that's necessary for downstream clients.
        
        To make this frequency splitting logic simple, this patch introduces DisplayUpdate, which
        represents an update of the display, and contains data about it in the form of a numerator
        is the frame index, and the denominator is the nominal frame rate. Frame index wraps to zero
        every second.
        
        For example, a 60Hz display will generate display refreshes with DisplayUpdates which
        sequentially will be { 0, 60 }, { 1, 60 }, { 2, 60 } ... { 59, 60 }, { 0, 60 }. The
        zeroth frame is at some arbitrary time and not aligned with wallclock time.
        
        Thus a client with a 30Hz update requirement can simply ignore every odd-numbered frame, and
        a client downstream from it with a 15Hz requirement, which only receives those even-numbered
        frames, still has enough information to compute which frames to ignore.
        
        Classes which are sources of callbacks for DisplayRefreshMonitor need to generate these
        DisplayUpdates; that includes the various platform DisplayRefreshMonitor subclasses in
        WebCore, and those in WebKit that live in the UI process and trigger updates over IPC.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::invalidate):
        (WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):
        (WebKit::ThreadedDisplayRefreshMonitor::ThreadedDisplayRefreshMonitor): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * UIProcess/mac/DisplayLink.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::displayWasRefreshed):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::RemoteLayerTreeDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::setPreferredFramesPerSecond):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::didUpdateLayers):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::dispatchDisplayDidRefresh):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::displayWasRefreshed):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2021-03-29  Youenn Fablet  <youenn@apple.com>

        Promote WKWebView getUserMedia SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=223806

        Reviewed by Eric Carlson.

        Move SPI to API.
        Update delegate to take an enumeration instead of two booleans.
        Make setters completion handlers nullable.
        Covered by API tests.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView cameraCaptureState]):
        (-[WKWebView microphoneCaptureState]):
        (-[WKWebView setMicrophoneCaptureState:completionHandler:]):
        (-[WKWebView setCameraCaptureState:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest):
        (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):

2021-03-28  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Don't ever replay DisplayList items of a RemoteImageBuffer in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=223780
        <rdar://75852494>

        Reviewed by Wenson Hsieh.

        Make sure the destructor of RemoteImageBufferProxy clears its DisplayList
        so the destructor of the base class does not replay its items in WebProcess.

        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS, it seems like it is on for all ports
        https://bugs.webkit.org/show_bug.cgi?id=223810

        Reviewed by Simon Fraser.

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS conditionals.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/IndexedDB/WebIDBServer.cpp:
        * NetworkProcess/IndexedDB/WebIDBServer.h:
        * NetworkProcess/IndexedDB/WebIDBServer.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::addWebsiteDataStore):
        (WebKit::NetworkProcess::destroySession):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::resume):
        (WebKit::NetworkProcess::renameOriginInWebsiteData):
        (WebKit::NetworkProcess::storageQuotaManager):
        (WebKit::NetworkProcess::connectionToWebProcessClosed):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::SessionStorageQuotaManager::idbRootPath const):
        * Shared/Databases/IndexedDB/IDBUtilities.cpp:
        * Shared/Databases/IndexedDB/IDBUtilities.h:
        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBKeyPath>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebsiteDataStoreParameters.cpp:
        (WebKit::WebsiteDataStoreParameters::encode const):
        (WebKit::WebsiteDataStoreParameters::decode):
        * Shared/WebsiteDataStoreParameters.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::addSession):
        (WebKit::NetworkProcessProxy::createSymLinkForFileUpgrade):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parameters):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Databases/WebDatabaseProvider.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::idbConnectionToServer):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed):

2021-03-28  Youenn Fablet  <youenn@apple.com>

        Use-after-move in UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition
        https://bugs.webkit.org/show_bug.cgi?id=223842
        <rdar://problem/75791668>

        Reviewed by Eric Carlson.

        Use request decision handler instead of already moved completion handler.

        Tests: fast/speechrecognition/start-recognition-after-denied-gum.html
               fast/speechrecognition/start-recognition-after-gum.html

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):

2021-03-27  Simon Fraser  <simon.fraser@apple.com>

        Have DisplayLink compute its displayNominalFramesPerSecond just once
        https://bugs.webkit.org/show_bug.cgi?id=223845

        Reviewed by Zalan Bujtas.

        Rather than calling CVDisplayLinkGetNominalOutputVideoRefreshPeriod() every time, 
        just store displayNominalFramesPerSecond in a member variable.

        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::nominalFramesPerSecondFromDisplayLink):
        (WebKit::DisplayLink::nominalFramesPerSecond const): Deleted.
        * UIProcess/mac/DisplayLink.h:
        (WebKit::DisplayLink::nominalFramesPerSecond const):

2021-03-27  Simon Fraser  <simon.fraser@apple.com>

        Allow DisplayRefreshMonitor to be more long-lived objects
        https://bugs.webkit.org/show_bug.cgi?id=223844

        Reviewed by Chris Dumez.

        The existing behavior for DisplayRefreshMonitors was that they were created and destroyed
        frequently, as their clients are registered and unregistered. In addition, some of
        their subclasses had duplicated logic related to how often they fired without clients
        before they were removed.

        The 1:1 correspondance between DisplayRefreshMonitors and physical displays makes them
        a useful place to store per-display information (like refresh rate), which should
        persist whether or not they have clients, so this change prepares for that.
        
        The main changes in this patch are:
          1. Provide virtual startNotificationMechanism()/stopNotificationMechanism() functions on
             DisplayRefreshMonitor that subclasses can use to start their CVDisplayLink or related
             functionality.

          2. Provide some shared maxUnscheduledFireCount logic that subclasses can tune to
             provide the hysteresis used to control the start/stop of the underlying
             notification mechanism.

         3. Provide a shared dispatchDisplayDidRefresh() function that most implementations
            can use.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
        * UIProcess/mac/DisplayLink.cpp:
        (WebKit::DisplayLink::DisplayLink):
        (WebKit::DisplayLink::~DisplayLink):
        (WebKit::DisplayLink::addObserver):
        (WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::requestRefreshCallback):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::dispatchDisplayDidRefresh):
        (WebKit::DisplayRefreshMonitorMac::startNotificationMechanism):
        (WebKit::DisplayRefreshMonitorMac::stopNotificationMechanism):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback): Deleted.
        (WebKit::DisplayRefreshMonitorMac::displayLinkFired): Deleted.
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h:

2021-03-27  Kate Cheney  <katherine_cheney@apple.com>

        PCM: Send report to both click source and attribution destination website
        https://bugs.webkit.org/show_bug.cgi?id=223615
        <rdar://problem/75849443>

        Reviewed by Brent Fulgham.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        Move these queries to the correct INSERT OR REPLACE category. Stop
        inserting null for earliestTimeToSendToDestination and starting
        binding a parameter to it now that we are supporting reports to both
        sites.

        Now that earliestTimeToSend* can be null if a report has been sent
        to a site, we need queries to set the value to null, and also need
        to sort attributions by the minimum of either the two reporting times,
        or the non-null time if one is null.

        (WebKit::ResourceLoadStatisticsDatabaseStore::destroyStatements):
        (WebKit::ResourceLoadStatisticsDatabaseStore::buildPrivateClickMeasurementFromDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributePrivateClickMeasurement):
        We should not attribute a PCM value if it has already been reported to
        either the source or destination. This is covered by checking
        secondsUntilSend.hasValidSecondsUntilSendValues() and 
        previouslyAttributed.value().hasPreviouslyBeenReported() before
        inserting anything into the attributed PCM table.

        (WebKit::ResourceLoadStatisticsDatabaseStore::earliestTimesToSend):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markReportAsSentToSource):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markReportAsSentToDestination):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        Clear a value from the attributed table only if it has been sent to
        both source and destination site. Otherwise, set the corresponding
        attribution endpoint to null so we don't send it here again.

        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        For the sake of testing we can set the destination earliest time to
        send to null. We are only confirming here that the expired attribution
        gets sent.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::attributePrivateClickMeasurement):
        (WebKit::WebResourceLoadStatisticsStore::clearSentAttribution):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
        (WebKit::PrivateClickMeasurementManager::getTokenPublicKey):
        We currently have no way of setting the destination token URL site for
        testing. To avoid flakiness, we should not make a ping load for the
        token URL if we are reporting to the destination in test mode.

        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequest):
        (WebKit::PrivateClickMeasurementManager::fireConversionRequestImpl):
        (WebKit::PrivateClickMeasurementManager::clearSentAttribution):
        (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
        * NetworkProcess/PrivateClickMeasurementManager.h:

2021-03-27  Tyler Wilcock  <twilco.o@protonmail.com>

        Remove DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=223837

        Reviewed by Simon Fraser.

        Fixes build for GTK + WPE after
        https://trac.webkit.org/changeset/275134/webkit.

        Quoting that revision:

        > handleDisplayRefreshedNotificationOnMainThread() is an anachronism left over from
        > the non-main-thread nature of the CVDisplayLink callback. There's no need to burden
        > all subclasses of DisplayRefreshMonitor with that detail.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
        (WebKit::ThreadedDisplayRefreshMonitor::invalidate):
        (WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):
        Replace call to DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread(this)
        with displayDidRefresh().

2021-03-27  David Kilzer  <ddkilzer@apple.com>

        Fix leaks in WKInspectorResourceURLSchemeHandler
        <https://webkit.org/b/223824>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm:
        (-[WKInspectorResourceURLSchemeHandler webView:startURLSchemeTask:]):
        - Make use of adoptNS() when assigning a newly allocated, +1
          retained Objective-C object to a RetainPtr<>.
        - Also fix leak of local NSHTTPURLResponse object by using a
          RetainPtr<>.

2021-03-27  Simon Fraser  <simon.fraser@apple.com>

        Remove DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=223837

        Reviewed by Tim Horton.
        
        handleDisplayRefreshedNotificationOnMainThread() is an anachronism left over from
        the non-main-thread nature of the CVDisplayLink callback. There's no need to burden
        all subclasses of DisplayRefreshMonitor with that detail.

        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::didUpdateLayers):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::displayLinkFired):

2021-03-26  Patrick Angle  <pangle@apple.com>

        Web Inspector: Grid layout labels can be drawn outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=221972

        Reviewed by BJ Burg.

        Add support for the new `WebCore::InspectorOverlay::LabelArrowEdgePosition` property to grid overlays on iOS.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (createLayoutLabelLayer):
        - Support the new `WebCore::InspectorOverlay::LabelArrowEdgePosition`.
        - Use new helpers in WebCore::InspectorOverlay to reduce code duplication.
        (-[WKInspectorHighlightView _createGridOverlayLayer:scale:]):

2021-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use PUICQuickboardController for text input when HAVE(QUICKBOARD_CONTROLLER) is defined
        https://bugs.webkit.org/show_bug.cgi?id=223809
        <rdar://problem/56730407>

        Reviewed by Tim Horton.

        Enable `PUICQuickboardController` by default, and remove a runtime preference that previously disabled this
        feature by default when `HAVE(QUICKBOARD_CONTROLLER)` is defined.

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

        Add a couple of missing selector checks before attempting to configure smart quotes and smart dash editing
        behaviors.

        (-[WKContentView _createQuickboardController:]):

        Additionally opt into a quickboard controller API to bypass the interstitial Quickboard view controller when
        using `PUICQuickboardController`.

        (-[WKContentView presentViewControllerForCurrentFocusedElement]):

        Remove a check for the (now-removed) preference.

2021-03-26  Brady Eidson  <beidson@apple.com>

        Refactor NetworkSessionCocoa to prepare for per-WebPageProxy sessions
        https://bugs.webkit.org/show_bug.cgi?id=223776

        Reviewed by Alex Christensen.

        No new tests (No behavior change refactor)

        A NetworkSessionCocoa has (n) NSURLSessions associated with it.
        
        When a network load needs to happen - based on the context for that load - the appropriate
        NSURLSession is chosen (or created).
        
        In a future patch, there will be an additional bit of context used for choosing the appropriate
        NSURLSession - The WKWebView the load was triggered from.
        
        This patch takes those (n) NSURLSessions and wraps them in a SessionSet object.
        It also adds the concept of looking up the appropriate SessionSet based on the WebPageProxyIdentifier
        triggering the load.
        
        This patch by itself should not be a behavior change, but allows the followup to be much simpler.
        
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::createSocketChannel):
        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkDataTask.cpp:
        (WebKit::NetworkDataTask::create):

        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::createWebSocketTask):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::removeWebSocketTask):
        (WebKit::NetworkSession::addWebSocketTask):

        * NetworkProcess/NetworkSocketChannel.cpp:
        (WebKit::NetworkSocketChannel::create):
        (WebKit::NetworkSocketChannel::NetworkSocketChannel):
        (WebKit::NetworkSocketChannel::~NetworkSocketChannel):
        * NetworkProcess/NetworkSocketChannel.h:

        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
        (WebKit::WebSWServerToContextConnection::WebSWServerToContextConnection):
        * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):

        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSessionCocoa::hstsStorage const):
        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
        (WebKit::NetworkSessionCocoa::initializeStandardSessionsInSet):
        (WebKit::NetworkSessionCocoa::sessionSetForPage):
        (WebKit::NetworkSessionCocoa::sessionSetForPage const):
        (WebKit::NetworkSessionCocoa::initializeEphemeralStatelessSessionIfNeeded):
        (WebKit::NetworkSessionCocoa::SessionSet::initializeEphemeralStatelessSessionIfNeeded):
        (WebKit::NetworkSessionCocoa::sessionWrapperForTask):
        (WebKit::NetworkSessionCocoa::appBoundSession):
        (WebKit::NetworkSessionCocoa::hasAppBoundSession const):
        (WebKit::NetworkSessionCocoa::clearAppBoundSession):
        (WebKit::NetworkSessionCocoa::isolatedSession):
        (WebKit::NetworkSessionCocoa::SessionSet::isolatedSession):
        (WebKit::NetworkSessionCocoa::hasIsolatedSession const):
        (WebKit::NetworkSessionCocoa::clearIsolatedSessions):
        (WebKit::NetworkSessionCocoa::invalidateAndCancelSessionSet):
        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
        (WebKit::NetworkSessionCocoa::createWebSocketTask):
        (WebKit::NetworkSessionCocoa::addWebSocketTask):
        (WebKit::NetworkSessionCocoa::removeWebSocketTask):
        (WebKit::NetworkSessionCocoa::hostNamesWithAlternativeServices const):
        (WebKit::NetworkSessionCocoa::deleteAlternativeServicesForHostNames):
        (WebKit::NetworkSessionCocoa::clearAlternativeServices):
        (WebKit::NetworkSessionCocoa::initializeEphemeralStatelessSession): Deleted.
        
        * NetworkProcess/soup/NetworkSessionSoup.cpp:
        (WebKit::NetworkSessionSoup::createWebSocketTask):
        * NetworkProcess/soup/NetworkSessionSoup.h:
        
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        
        * WebProcess/Network/WebSocketChannel.cpp:
        (WebKit::WebSocketChannel::create):
        (WebKit::WebSocketChannel::WebSocketChannel):
        (WebKit::WebSocketChannel::connect):
        * WebProcess/Network/WebSocketChannel.h:
        
        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createWebSocketChannel):
        * WebProcess/Network/WebSocketProvider.h:
        
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::establishConnection):
        (WebKit::WebSWContextManagerConnection::installServiceWorker):
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_lastNavigationWasAppBound):

2021-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow some image overlay content to render in fully transparent image elements
        https://bugs.webkit.org/show_bug.cgi?id=223781
        <rdar://problem/75886351>

        Reviewed by Tim Horton.

        Implement a new chrome client hook. See WebCore ChangeLog for more information.

        * WebProcess/WebCoreSupport/WebChromeClient.h:

2021-03-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Deprecate using DERIVED_SOURCES_DIR/FOWARDING_HEADERS_DIR directly
        https://bugs.webkit.org/show_bug.cgi?id=223763

        Reviewed by Michael Catanzaro.

        Remove any usages of DERIVED_SOURCES_DIR and FOWARDING_HEADERS_DIR.

        * PlatformGTK.cmake:
        * PlatformMac.cmake: Remove creation of forwarding headers.

2021-03-26  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Brent Fulgham.

        Enable Notify filtering by setting Notify options before entering sandbox.

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

2021-03-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274938.
        https://bugs.webkit.org/show_bug.cgi?id=223811

        Introduced perf regression

        Reverted changeset:

        "Add IOKit method filter telemetry"
        https://bugs.webkit.org/show_bug.cgi?id=223652
        https://trac.webkit.org/changeset/274938

2021-03-26  Kate Cheney  <katherine_cheney@apple.com>

        Implement PCM SQLite changes based on spec review
        https://bugs.webkit.org/show_bug.cgi?id=223726
        <rdar://problem/75818526>

        Reviewed by Brent Fulgham.

        This patch makes 2 significant changes in the SQLite database for
        PCM. First, it renames attributeOnSiteDomainID to destinationSiteDomainID
        based on spec review. Second, it adds support for sending reports to
        both click source and destination sites. This involved adding an
        additional column to the AttributedPrivateClickMeasurement table to
        store the earliest time to send a report to the destination, renaming
        the earliestTimeToSend column to specify source, and removing the NOT NULL
        constraint on earliestTimeToSend in order to mark in the database when
        a report has been send to the source site.

        Since we need to remove a NOT NULL constraint and update foreign keys
        and unique constraints, this requires a full migration of data from
        the PCM tables.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        earliestTimeToSendToDestination should be null for now until we
        implement the rest of the PCM work in
        https://bugs.webkit.org/show_bug.cgi?id=223615.

        Remove semi-colons from create table queries. They don't matter in
        this context and if we remove them we can use the create table
        queries to check for a correct schema.

        (WebKit::attributedPrivateClickMeasurementSchemaV1):
        (WebKit::attributedPrivateClickMeasurementSchemaV1Alternate):
        Capture the table info from AttributedPrivateClickMeasurement to check
        if we need an update.

        (WebKit::expectedUnattributedColumns):
        (WebKit::expectedAttributedColumns):
        Instead of storing outdated columns, we should store expected columns
        and add any missing ones in addMissingColumnsToTable.

        (WebKit::ResourceLoadStatisticsDatabaseStore::tableSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::needsUpdatedPrivateClickMeasurementSchema):
        (WebKit::ResourceLoadStatisticsDatabaseStore::missingReferenceToObservedDomains):
        Separate out some duplicated code.

        (WebKit::ResourceLoadStatisticsDatabaseStore::migrateDataToNewTablesIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::columnsForTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsToTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::addMissingColumnsIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnInTable):
        (WebKit::ResourceLoadStatisticsDatabaseStore::renameColumnsIfNecessary):
        (WebKit::ResourceLoadStatisticsDatabaseStore::openAndUpdateSchemaIfNecessary):
        Simplify the way we update the schema by first adding columns, then
        renaming, then migrating. This way we don't need to worry about a
        mismatch in number of columns or column name when transferring data.

        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        (WebKit::ResourceLoadStatisticsDatabaseStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WebKit::unattributedPrivateClickMeasurementSchemaV1): Deleted.
        (WebKit::unattributedPrivateClickMeasurementSchemaV1Alternate): Deleted.
        (WebKit::outdatedUnattributedColumns): Deleted.
        (WebKit::outdatedAttributedColumns): Deleted.
        (WebKit::columnsToCopy): Deleted.
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::statisticsDatabaseColumnsForTable):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::statisticsDatabaseColumnsForTable):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _statisticsDatabaseColumnsForTable:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::statisticsDatabaseColumnsForTable):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::statisticsDatabaseColumnsForTable):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        New function for testing.

2021-03-26  Said Abou-Hallawa  <said@apple.com>

        Allow logging minimal info about uploading media files in the system diagnose
        https://bugs.webkit.org/show_bug.cgi?id=223706

        Reviewed by Alex Christensen.

        Add the new method logDiagnosticMessageWithDomain to the modern ObjC API
        WKDiagnosticLoggingDelegate and make it accessible from DiagnosticLoggingClient.

        * Scripts/webkit/messages.py:
        (types_that_cannot_be_forward_declared):
        * UIProcess/API/APIDiagnosticLoggingClient.h:
        (API::DiagnosticLoggingClient::logDiagnosticMessageWithDomain):
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.mm:
        (WebKit::DiagnosticLoggingClient::setDelegate):
        (WebKit::toWKDiagnosticLoggingDomain):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithDomain):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessageWithDomain):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithDomain):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2021-03-26  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Enable the UseGPUProcessForMedia preference by default
        https://bugs.webkit.org/show_bug.cgi?id=223771

        Reviewed by Eric Carlson.

        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-watchos.plist:

2021-03-26  Youenn Fablet  <youenn@apple.com>

        Use webrtc GPU Process feature flag for video capture on MacOS
        https://bugs.webkit.org/show_bug.cgi?id=223683

        Reviewed by Eric Carlson.

        Manually tested.

        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):

2021-03-26  Jessie Berlin  <jberlin@webkit.org>

        Update the BEFORE/SINCE, SYSTEM_VERSION_PREFIX, and MACOSX_DEPLOYMENT_TARGET flags
        https://bugs.webkit.org/show_bug.cgi?id=223779

        Reviewed by Tim Horton.

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

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to block only in frames or only in main frame
        https://bugs.webkit.org/show_bug.cgi?id=219001

        Reviewed by Ben Poulain.

        * UIProcess/API/APIContentRuleListStore.cpp:
        (API::ContentRuleListStore::getContentRuleListSource):
        * UIProcess/API/APIContentRuleListStore.h:

2021-03-25  Megan Gardner  <megan_gardner@apple.com>

        Have App Highlights be a Configuration Setting instead of an internal Preference setting.
        https://bugs.webkit.org/show_bug.cgi?id=223720
        rdar://75196085

        Reviewed by Wenson Hsieh.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultAppHighlightsEnabled): Deleted.
        * Shared/WebPreferencesDefaultValues.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setupPageConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setAppHighlightsEnabled:]):
        (-[WKWebViewConfiguration _appHighlightsEnabled]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.h:

2021-03-25  Jessie Berlin  <jberlin@webkit.org>

        Remove 10.13 DEPLOYMENT_TARGETs and SYSTEM_VERSION_PREFIXs
        https://bugs.webkit.org/show_bug.cgi?id=223765

        Reviewed by Tim Horton.

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

2021-03-25  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Turn GPU process rendering for 2D canvas on by default
        https://bugs.webkit.org/show_bug.cgi?id=223772
        <rdar://75799739>

        Reviewed by Tim Horton.

        Enable the 'gpu_process_canvas_rendering' feature flag.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:

2021-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275057.
        https://bugs.webkit.org/show_bug.cgi?id=223768

        Caused build failure

        Reverted changeset:

        "Enforce notifyd message filtering"
        https://bugs.webkit.org/show_bug.cgi?id=223601
        https://trac.webkit.org/changeset/275057

2021-03-25  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Brent Fulgham.

        Enable Notify filtering by setting Notify options before entering sandbox.

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

2021-03-25  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Date picker view jumps to center when switching between MobileSafari and another app
        https://bugs.webkit.org/show_bug.cgi?id=223662
        <rdar://problem/74748727>

        Reviewed by Tim Horton.

        Tapping on a date input presents a UIDatePicker inside of a
        UIContextMenuInteraction. The presentation of context menus is
        dependent on the _positionInformation in WKContentViewInteraction being
        up-to-date.

        To ensure the value is up-to-date, a position information request is
        made prior to presenting the date picker. However, the location used
        for the request is the current FocusedElementInformation's
        lastInteractionLocation. This is fine in most cases, since the date
        picker is usually present immediately after tapping on the date input.
        However, the date picker can be closed and presented again when
        switching between MobileSafari and another app, as the input is focused
        again when MobileSafari is reopened. If the switch is performed using a
        gesture, the last interaction location is modified. Consequently, the
        last interaction location does not always correspond to the position
        of the date input, and the position information request gives us
        incorrect information, leading to incorrect presentation of the picker.

        To fix, add a new way of presenting context menus that is not dependent
        on position information. Instead, form controls can use the information
        they already have in FocusedElementInformation to present their
        peripherals.

        No new tests, since this bug only reproduces when swiping to switch apps.
        Other touches in the web view immediately dismiss the date picker, making
        the bug difficult to reproduce in a test.

        * Shared/FocusedElementInformation.cpp:
        (WebKit::FocusedElementInformation::encode const):
        (WebKit::FocusedElementInformation::decode):
        * Shared/FocusedElementInformation.h:

        Added a member to inform FocusedElementInformation whether the focused
        element is in a subscrollable region.

        See r248447 for more details on why this information is needed when
        creating a UITargetedPreview.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView overridePositionTrackingViewForTargetedPreviewIfNecessary:containerScrollingNodeID:]):

        Factored out the logic that overrides the targeted preview's position
        tracking view when the element is in a subscrollable region.

        (-[WKContentView _createTargetedContextMenuHintPreviewForFocusedElement]):

        Create a targeted preview using the current FocusedElementInformation.

        (-[WKContentView _createTargetedContextMenuHintPreviewIfPossible]):
        * UIProcess/ios/forms/WKDateTimeInputControl.mm:
        (-[WKDateTimePicker controlBeginEditing]):

        Displaying the context menu no longer needs to be done asynchronously
        since the FocusedElementInformation is already available during
        controlBeginEditing.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:

        Adopt the new logic for <select> elements, since the presented context
        menu is an input peripheral, and can run into the same issues as the
        date picker.

        (-[WKSelectPicker controlBeginEditing]):
        (-[WKSelectPicker contextMenuInteraction:previewForHighlightingMenuWithConfiguration:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::completeSyntheticClick):

        Remove a redundant call to elementDidRefocus following r258333. The
        FocusController already calls elementDidRefocus before this point, when
        the mousepress event is dispatched.

        The redundant call was uncovered when making the context menu
        presentation synchronous, and causes problems with the presentation.
        Specifically, the first call to elementDidRefocus causes the context
        menu to be presented. The second call then results in an attempt
        to scroll the web view, since the context menu can obscure the
        assisted node. The additional scrolling is unwanted behavior, since it
        does not occur when focusing the node for the first time.

        This issue was previously unobserved, since the asynchronous presentation
        of the context menu (after obtaining new position information) resulted
        in both calls to elementDidRefocus occuring before presentation.

        (WebKit::WebPage::getFocusedElementInformation):

        Forward the scrolling node information to the UIProcess, so that the
        position tracking view of the UITargetedPreview can be overridden
        if necessary.

2021-03-25  BJ Burg  <bburg@apple.com>

        SendKeys on Input of type=file returns element not found in some cases
        https://bugs.webkit.org/show_bug.cgi?id=223028
        <rdar://problem/75526126>

        Reviewed by Devin Rousso.

        This bizarre behavior is triggered by removing the <input type=file> element inside an onclick() handler
        for the input element. This confuses safaridriver, which expects to be able to query the file input's .value
        via JavaScript after setting the files.

        As part of the fix, provide the list of selected filenames in the Automation.fileChooserDismissed event.
        On the safaridriver side, just use the list of filenames provided in this event to avoid an extra JS evaluation
        that may race with page content.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::handleRunOpenPanel):

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r272376): [iOS] ASSERTION FAILED: sessionID.isEphemeral() || !path.isEmpty() in WebKit::NetworkProcess::swServerForSession
        https://bugs.webkit.org/show_bug.cgi?id=222713

        Reviewed by Geoff Garen.

        Because NetworkProcess::CreateNetworkConnectionToWebProcess is sent with SendOption::DispatchMessageEvenWhenWaitingForSyncReply, it is possible
        for two messages of type NetworkProcess::AddWebsiteDataStore and two messages of type NetworkProcess::CreateNetworkConnectionToWebProcess to be in the queue,
        but the second NetworkProcess::CreateNetworkConnectionToWebProcess jumps to the front of the line while the UI process is waiting for the reply to the first.
        Then, when calling NetworkProcess::swServerForSession we expect the session's parameters to have been initialized in the network process already, but we cut
        ahead of the parameter initialization message.  This is a realistically rare condition that can only be hit when using SPI, but it is hit in the
        ResourceLoadStatistics.StoreSuspension API test.  To fix this, we send the WebsiteDataStoreParameters from each WebsiteDataStore in the NetworkProcessCreationParameters.
        To avoid doing extra work, we introduce an early return in NetworkProcessProxy::addSession if we have already added parameters from this session to the network process.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::addSessionStorageQuotaManager):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
        (WebKit::NetworkProcessProxy::addSession):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::parametersFromEachWebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2021-03-25  John Wilander  <wilander@apple.com>

        PCM: Rename attributeOn to attributionDestination and change the IDL data type of attributionSourceId to unsigned long
        https://bugs.webkit.org/show_bug.cgi?id=223661
        <rdar://problem/75762075>

        Reviewed by Brent Fulgham.

        The PR review of the update of the PCM spec lead WebKit, Mozilla, and Google to decide on two changes:
        1. Rename attributeOn to attributionDestination
        2. Change the IDL data type of attributionSourceId from DOMString to unsigned long

        The spec change can be seen in this commit:
        https://github.com/privacycg/private-click-measurement/pull/75/commits/8623b5df5e899e6652bc5b00313585f7eeafa797

        This patch makes those changes, plus changes names of SPIs, functions, and variables accordingly.

        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
        (WebKit::ResourceLoadStatisticsDatabaseStore::buildPrivateClickMeasurementFromDatabase):
        (WebKit::ResourceLoadStatisticsDatabaseStore::findPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::insertPrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::removeUnattributed):
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributePrivateClickMeasurement):
        (WebKit::ResourceLoadStatisticsDatabaseStore::attributionToString):
        (WebKit::ResourceLoadStatisticsDatabaseStore::clearSentAttribution):
        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::attributePrivateClickMeasurement):
        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setPrivateClickMeasurementAttributionReportURLsForTesting):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.cpp:
        (WebKit::NetworkSession::setPrivateClickMeasurementAttributionReportURLsForTesting):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/PrivateClickMeasurementManager.cpp:
        (WebKit::PrivateClickMeasurementManager::handleAttribution):
        (WebKit::PrivateClickMeasurementManager::attribute):
        (WebKit::PrivateClickMeasurementManager::setAttributionReportURLsForTesting):
        * NetworkProcess/PrivateClickMeasurementManager.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPrivateClickMeasurementAttributionReportURLsForTesting):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
        (-[WKWebView _setPrivateClickMeasurementAttributionReportURLsForTesting:destinationURL:completionHandler:]):
        (-[WKWebView _setPrivateClickMeasurementAttributionReportURLsForTesting:attributeOnURL:completionHandler:]): Deleted.
        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _setUIEventAttribution:]):
        (-[WKWebView _uiEventAttribution]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::setPrivateClickMeasurementAttributionReportURLsForTesting):
        * UIProcess/WebPageProxy.h:

2021-03-25  Chris Dumez  <cdumez@apple.com>

        Do not do process pre-warming when the system is under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=223717
        <rdar://problem/75810423>

        Reviewed by Antti Koivisto.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prewarmGlobally):
        Only do prewarming if we're not under memory pressure as this would make
        the situation worse.

2021-03-25  Youenn Fablet  <youenn@apple.com>

        Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
        https://bugs.webkit.org/show_bug.cgi?id=223679

        Reviewed by Eric Carlson.

        When starting to monitor, pass whether to enumerate all interfaces from WebProcess to NetworkProcess as a boolean.
        In NetworkProcess, do network interface enumeration as usual, but use the boolean to decide whether to send the full list or the list that is related to the default IP addresses to WebProcess.

        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
        (WebKit::NetworkManagerWrapper::addListener):
        (WebKit::NetworkManagerWrapper::onNetworksChanged):
        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
        (WebKit::NetworkRTCMonitor::onNetworksChanged):
        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
        * NetworkProcess/webrtc/NetworkRTCMonitor.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createPeerConnection):
        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
        (WebKit::WebRTCMonitor::setEnumeratingAllNetworkInterfacesEnabled):
        (WebKit::WebRTCMonitor::StartUpdating):
        * WebProcess/Network/webrtc/WebRTCMonitor.h:

2021-03-25  Tim Horton  <timothy_horton@apple.com>

        All Books quirks are flakily not applied in modern WebKit
        https://bugs.webkit.org/show_bug.cgi?id=157101
        <rdar://problem/25965028>

        Reviewed by Darin Adler.

        In r200121, a quirk was introduced that queried the isIBooks()
        RuntimeApplicationChecks method from inside commonVM().

        RuntimeApplicationChecks bundle checks cache the result of the bundle
        check, and, as such, must not be called until the bundle identifer of
        the UI application is known. In legacy WebKit, this is not a problem,
        because the check is running in the application process; in modern WebKit,
        there is a short window between process launch and the InitializeWebProcess
        message being received where we won't know the bundle identifier, and if
        isIBooks() (or any other bundle check) is called during this time, it will
        cache the wrong result.

        It is possible for commonVM() to be called in this window; one possible path
        to this is by triggering an os_log_fault during this time, which WebKit
        observes (via os_state_add_handler()) in order to dump memory usage
        (which happens to call commonVM() and results in isIBooks getting called
        and caching the wrong value).

        Add an assertion, and move the quirk to live as a setting on the process
        pool configuration, to be set via SPI by Books, instead of as a bundle check.

        Also, ensure that client bundle identifier and SDK version are set in 
        all WebKit subprocesses, so that bundle/SDK checks work everywhere
        (previously, the GPU process was using SDK checks without having pushed
        the values from the UI process, resulting in incorrect results, and
        running afoul of the assertion added above).

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        (API::defaultShouldThrowExceptionForGlobalConstantRedeclaration):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration shouldThrowExceptionForGlobalConstantRedeclaration]):
        (-[_WKProcessPoolConfiguration setShouldThrowExceptionForGlobalConstantRedeclaration:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::initializeNewWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Plumb a new _WKProcessPoolConfiguration parameter to the Web Content process,
        and set the bit on the commonVM when launched.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode const):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/AuxiliaryProcess.cpp:
        (WebKit::AuxiliaryProcess::initialize):
        (WebKit::AuxiliaryProcess::platformInitialize):
        * Shared/AuxiliaryProcess.h:
        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
        (WebKit::initializeTimerCoalescingPolicy):
        (WebKit::AuxiliaryProcess::platformInitialize):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getClientSDKVersion):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode const):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Remove an extra unused member.
        * Shared/ios/AuxiliaryProcessIOS.mm:
        (WebKit::AuxiliaryProcess::platformInitialize): Deleted.
        * Shared/mac/AuxiliaryProcessMac.mm:
        (WebKit::initializeTimerCoalescingPolicy): Deleted.
        (WebKit::AuxiliaryProcess::platformInitialize): Deleted.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Plumb the client bundle identifer and SDK version to all auxiliary processes
        at process initialization time instead of InitializeWebProcess/NetworkProcess
        message receipt time, closing the window in which it is invalid to use
        bundle checks, and ensuring that bundle checks work in all processes.

2021-03-24  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        Crash in TextChecker::updateSpellingUIWithGrammarString()
        https://bugs.webkit.org/show_bug.cgi?id=223716

        Reviewed by Ryosuke Niwa.

        Prevent a crash by checking the GrammarDetail's range.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):

2021-03-24  Simon Fraser  <simon.fraser@apple.com>

        Add DisplayLink log channels in WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=223669

        Reviewed by Tim Horton.

        DisplayRefreshMonitor code involves some non-trivial object
        fan-out and WebProcess/UI Process interaction, and it deserves
        a log channel.

        * Platform/Logging.h:
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp:
        (WebKit::DisplayRefreshMonitorMac::displayLinkFired):

2021-03-24  Kate Cheney  <katherine_cheney@apple.com>

        Remove deprecated WKMediaPlayback APIs
        https://bugs.webkit.org/show_bug.cgi?id=223704
        <rdar://problem/74611683>

        Reviewed by Tim Horton.

        We kept these API around after updating the names to give clients
        time to adopt the new versions. We can remove them now.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView pauseAllMediaPlayback:]): Deleted.
        (-[WKWebView suspendAllMediaPlayback:]): Deleted.
        (-[WKWebView resumeAllMediaPlayback:]): Deleted.
        (-[WKWebView closeAllMediaPresentations:]): Deleted.
        (-[WKWebView requestMediaPlaybackState:]): Deleted.

2021-03-24  Alex Christensen  <achristensen@webkit.org>

        Call InitializeWebKit2 when initializing a _WKUserInitiatedAction
        https://bugs.webkit.org/show_bug.cgi?id=223708
        <rdar://75788877>

        Reviewed by Chris Dumez.

        There is a test that deallocates a _WKUserInitiatedAction before anything calls InitializeWebKit2.
        Calling constructInWrapper calls InitializeWebKit2.
        Since r274227 it has been asserting s_mainRunLoop in RunLoop::isMain.  This fixes it.
        We don't have test infrastructure to test this in WebKit because TestWebKitAPI initializes the main thread for us before doing anything.

        * UIProcess/API/APIUserInitiatedAction.h:
        * UIProcess/API/Cocoa/_WKUserInitiatedAction.mm:
        (-[_WKUserInitiatedAction init]):

2021-03-24  Youenn Fablet  <youenn@apple.com>

        Update GPUProcess sandbox to support camera access
        https://bugs.webkit.org/show_bug.cgi?id=223681

        Reviewed by Eric Carlson.

        Give access to com.apple.appleh13camerad in GPUProcess.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:

2021-03-24  Per Arne  <pvollan@apple.com>

        The media accessibility service is not an XPC service
        https://bugs.webkit.org/show_bug.cgi?id=223699
        <rdar://75750989>

        Reviewed by Brent Fulgham.

        The media accessibility service is not an XPC service, but is listed as such in the sandbox.

        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2021-03-24  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Per Arne Vollan.

        Enforce notifyd message filtering on macOS and iOS.

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

2021-03-24  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Revise loadSimulatedRequest API with final review comments (223657)
        https://bugs.webkit.org/show_bug.cgi?id=223657
        <rdar://75757727>

        Reviewed by Alex Christensen.

        Tested by TestWebKitAPI.

        Update the WKWebView API to match final review comments. Deprecate the prior draft API so that we
        can smoothly transition away from the original methods.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadSimulatedRequest:response:responseData:]):
        (-[WKWebView loadSimulatedRequest:withResponse:responseData:]):
        (-[WKWebView loadSimulatedRequest:responseHTMLString:]):
        (-[WKWebView loadSimulatedRequest:withResponseHTMLString:]):

2021-03-24  Sihui Liu  <sihui_liu@appe.com>

        Ignore middle commits during animated resize
        https://bugs.webkit.org/show_bug.cgi?id=223530

        Reviewed by Tim Horton.

        For animated resize, UI process sets layer transform to fit new size until web process picks up size change and 
        paints. It is possible that UI process receives a commit during animated resize and the commit is not for the 
        animated resize (web process commits before animated resize). In this case, our current implementation is: if 
        SPI client species there will be no other update (!_waitingForEndAnimatedResize), we change layer transform to
        reflect change of the middle commit. 

        However, that commit does not mean web process issues new paint, so the adjustment can be wrong. We find the 
        handling of middle commits causes issues in SPI client's use case  (rdar://47623140). Also by manual testing, 
        it's not clear how the code can benefit current SPI clients. It seems to cause the same trouble sometimes. So 
        let's just remove it.

        * UIProcess/API/ios/WKWebViewIOS.mm:
        (-[WKWebView _didCommitLayerTreeDuringAnimatedResize:]):

2021-03-24  Per Arne  <pvollan@apple.com>

        Add IOKit method filter telemetry
        https://bugs.webkit.org/show_bug.cgi?id=223652
        <rdar://problem/75751391>

        Reviewed by Brent Fulgham.

        Add IOKit method filter telemetry in the WebContent sandbox on macOS and iOS.

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

2021-03-24  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE] Build error in ARMv7 invalid 'static_cast' for GLNativeWindowType
        https://bugs.webkit.org/show_bug.cgi?id=223684

        Fixes this error:

          error: invalid 'static_cast' from type 'uintptr_t' {aka 'unsigned
          int'} to type 'GLNativeWindowType' {aka 'void*'}

        ; an invalid 'static_cast' from type error for ARMv7 (rpi3 and mesa driver)
        by using the same solution chosen in
        https://bugs.webkit.org/show_bug.cgi?id=179511:

          EGLNativeWindowType can be aliased to a different type depending (at least) on the EGL
          implementation, its build options, and the libepoxy build options.  Using "static_cast"
          works when it is a numeric value and the width of the value needs to be optionally
          extended to 64 bits (e.g. the EGL type is "int" in a 32-bit CPU) but not for pointers,
          and using "reinterpret_cast" works when the size of a pointer is 64 bits but not in other
          cases. Therefore it seems reasonable to use a plain C cast expression to solve this
          particular situation.

        https://trac.webkit.org/changeset/274869/webkit

        Reviewed by Philippe Normand.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::createGLContext):

2021-03-23  Simon Fraser  <simon.fraser@apple.com>

        Add DisplayRefreshMonitorFactory.
        https://bugs.webkit.org/show_bug.cgi?id=223648

        Reviewed by Chris Dumez.

        Future work will require that it's possible to create a DisplayRefreshMonitor
        without having a DisplayRefreshMonitorClient. It was also weird that the way to
        create a DisplayRefreshMonitor was via the DisplayRefreshMonitorClient, so
        this change fixes both by adding DisplayRefreshMonitorFactory.

        In WK2, the drawing areas are DisplayRefreshMonitorFactories. If there is no
        factory, we fall back to the default implementations.

        Remove DrawingAreaMac.cpp since its code was entirely related to creating
        DisplayRefreshMonitorMac objects.

        * SourcesCocoa.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::displayRefreshMonitorFactory const):
        (WebKit::WebChromeClient::createDisplayRefreshMonitor const): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::createDisplayRefreshMonitor): Deleted.
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::createDisplayRefreshMonitor):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp: Renamed from Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp.
        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebKit::DisplayRefreshMonitorMac::displayLinkFired):
        * WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h: Copied from Source/WebCore/platform/graphics/GraphicsLayerUpdater.h.
        (WebKit::DisplayRefreshMonitorMac::create):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::createDisplayRefreshMonitor):

2021-03-23  Kate Cheney  <katherine_cheney@apple.com>

        Service worker loads are not marked as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=222635
        <rdar://problem/74395950>

        Reviewed by Youenn Fablet.

        Mark the service worker document loader as app-bound or not when
        initiating a fetch event.

        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::startFetch):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createDocumentLoader):
        Fix capitalization error.

2021-03-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Implement inspector-resource:// URL scheme handler for Web Inspector resources
        https://bugs.webkit.org/show_bug.cgi?id=223619

        Reviewed by Don Olmstead.

        Implemented inspector-resource:// URL scheme handler for WinCairo
        port. Mac port did it in Bug 179904.

        http/tests/inspector tests were crashing due to
        RELEASE_ASSERT_WITH_SECURITY_IMPLICATION failure (See Bug 223566).

        * PlatformWin.cmake:
        * UIProcess/Inspector/win/InspectorResourceURLSchemeHandler.cpp: Added.
        (WebKit::InspectorResourceURLSchemeHandler::platformStartTask):
        * UIProcess/Inspector/win/InspectorResourceURLSchemeHandler.h: Added.
        * UIProcess/Inspector/win/WebInspectorUIProxyWin.cpp:
        (WebKit::WebInspectorUIProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorUIProxy::inspectorPageURL):
        (WebKit::WebInspectorUIProxy::inspectorTestPageURL):
        * WebProcess/Inspector/win/WebInspectorUIWin.cpp:
        (WebKit::WebInspectorUI::localizedStringsURL const):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL const):

2021-03-23  Kate Cheney  <katherine_cheney@apple.com>

        Add getter to textInteractionEnabled property
        https://bugs.webkit.org/show_bug.cgi?id=223638
        <rdar://problem/73990298>

        Reviewed by Darin Adler.

        During API review, it was pointed out that the textInteractionEnabled
        property should have a getter/Swift name prefixed with "is" so the
        call site reads like an assertion about the receiver.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences isTextInteractionEnabled]):
        (-[WKPreferences textInteractionEnabled]): Deleted.

2021-03-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274889.
        https://bugs.webkit.org/show_bug.cgi?id=223653

        Sandbox change not ready yet

        Reverted changeset:

        "Enforce notifyd message filtering"
        https://bugs.webkit.org/show_bug.cgi?id=223601
        https://trac.webkit.org/changeset/274889

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

        Provide a way to specify platform vs security key when requesting an assertion in the SPI
        https://bugs.webkit.org/show_bug.cgi?id=223547
        <rdar://74034746>

        Reviewed by Brent Fulgham.

        This patch adds the authenticator attachment option to the getAssertion SPI such that the caller
        can decide what transports it needs.

        * UIProcess/API/Cocoa/_WKAuthenticatorAttachment.h: Added.
        * UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:
        * UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm:
        (-[_WKPublicKeyCredentialRequestOptions init]):
        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
        (authenticatorAttachment):
        (+[_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:]):
        * UIProcess/WebAuthentication/AuthenticatorManager.cpp:
        (WebKit::WebCore::collectTransports):
        (WebKit::AuthenticatorManager::getTransports const):
        * WebKit.xcodeproj/project.pbxproj:

2021-03-23  Jer Noble  <jer.noble@apple.com>

        [GPUP] 2 web audio WPT tests fail when media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=221696
        <rdar://problem/74440772>

        Reviewed by Eric Carlson.

        Test fails when AudioDestination.maxChannelCount is queried and returns 0; pipe the correct
        value through from the GPU process.

        * GPUProcess/media/RemoteAudioSessionProxy.cpp:
        (WebKit::RemoteAudioSessionProxy::configuration):
        * WebProcess/GPU/media/RemoteAudioSession.h:
        * WebProcess/GPU/media/RemoteAudioSessionConfiguration.h:
        (WebKit::RemoteAudioSessionConfiguration::encode const):
        (WebKit::RemoteAudioSessionConfiguration::decode):

2021-03-23  Per Arne  <pvollan@apple.com>

        Enforce notifyd message filtering
        https://bugs.webkit.org/show_bug.cgi?id=223601
        <rdar://75098580>

        Reviewed by Brent Fulgham.

        Enforce notifyd message filtering on macOS and iOS.

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

2021-03-23  Philippe Normand  <pnormand@igalia.com>

        [GTK] X11 build fixes
        https://bugs.webkit.org/show_bug.cgi?id=223577

        Reviewed by Adrian Perez de Castro.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::createGLContext): GLNativeWindowType might be a long unsigned
        int, which can't be reinterpret casted to uin64_t on 32-bit platforms.
        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp: Use
        WebCore::Region to prevent clashes with X11's Region.
        (WebKit::DrawingAreaCoordinatedGraphics::scroll):
        (WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaCoordinatedGraphics::display):

2021-03-23  Aditya Keerthi  <akeerthi@apple.com>

        [iPadOS] Stale checked item when reopening <select>
        https://bugs.webkit.org/show_bug.cgi?id=223592
        <rdar://problem/75629529>

        Reviewed by Wenson Hsieh.

        Reopening a select element after changing its value displays the
        original value as checked, rather than the current value on iPadOS. This
        is incorrect, since the checked value in the context menu should match
        the selected value in-page.

        The behavior is incorrect on iPadOS, but works correctly on iPhone, since
        dismissing input peripherals on iPhone blurs the focused element,
        resulting in a new peripheral being created each time. However, on iPad
        the same peripheral is reused when interacting with the same element.
        Since the presented UIMenu is only created once during the initialization
        of the peripheral, the checked item can be stale on iPads. To fix, update
        the menu each time the peripheral is presented, rather than each time it
        is created.

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

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKSelectPicker initWithView:]):

        Do not create the presented UIMenu during initialization.

        (-[WKSelectPicker controlBeginEditing]):

        Create the UIMenu when the peripheral is about to be presented. This
        ensures the state of the menu is up-to-date.

        (-[WKSelectPicker didSelectOptionIndex:]):

        Update the underlying data structure for <select> elements, so that a
        newly created UIMenu will have the correct state.

        (-[WKSelectPicker createMenu]):

        Use a separate local variable to avoid modifying a reference. The
        incorrect logic here was masked by the fact that the UIMenu was
        previously only created once per WKSelectPicker.

        (-[WKSelectPicker actionForOptionIndex:]):

        Factored logic to get a UIAction from an option index for testing.

        (-[WKSelectPicker selectRow:inComponent:extendingSelection:]):

        Call accessoryDone to simulate the dismissal of the presented UIMenu
        when using this testing method.

        (-[WKSelectPicker selectFormAccessoryHasCheckedItemAtRow:]):

        Implement this method so that the checked item can be obtained in tests.

2021-03-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        Move instanced drawing functionality from ExtensionsGL to GraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=223179

        Reviewed by Kenneth Russell.

        Remove unused instanced rendering functions from ExtensionsGL.
        They are already in GraphicsContextGL interfaces.
        ExtensionsGL is being removed as it is redundant. The extension object
        is the same object as the context object and not useful.

        * GPUProcess/graphics/RemoteGraphicsContextGL.messages.in:
        * GPUProcess/graphics/RemoteGraphicsContextGLFunctionsGenerated.h:
        (drawBuffersEXT):
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:
        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:

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

        Enable webrtc GPU Process feature flag
        https://bugs.webkit.org/show_bug.cgi?id=223582

        Reviewed by Eric Carlson.

        Enable WebRTC GPU process feature flag.
        Make use of it for WebRTC codecs experimental flag default value.
        Make use of it for WebRTC video capture experimental flag default value on iOS. Keep it to false on MacOS.
        Update audio capture experimental flag default value to false on MacOS until we can use the feature flag value.
        No change of behavior.

        * FeatureFlags/WebKit-appletvos.plist:
        * FeatureFlags/WebKit-ios.plist:
        * FeatureFlags/WebKit-macos.plist:
        * FeatureFlags/WebKit-watchos.plist:
        * Shared/WebPreferencesDefaultValues.cpp:
        (WebKit::defaultCaptureAudioInGPUProcessEnabled):
        (WebKit::defaultCaptureVideoInGPUProcessEnabled):
        (WebKit::defaultWebRTCCodecsInGPUProcess):

2021-03-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process]: Improve getImageData() perf part 1: Add a GetImageData display list item
        https://bugs.webkit.org/show_bug.cgi?id=223544

        Reviewed by Wenson Hsieh.

        * GPUProcess/graphics/RemoteImageBuffer.h:
        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
        (WebKit::RemoteRenderingBackend::decodeItem):
        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

2021-03-22  Jean-Yves Avenard  <jya@apple.com>

        Move management of RemoteCommandListener from MediaSessionManagerCocoa into NowPlayingManager
        https://bugs.webkit.org/show_bug.cgi?id=223435
        <rdar://problem/75567198>

        Reviewed by Eric Carlson.

        * GPUProcess/GPUConnectionToWebProcess.cpp: Update methods to use new NowPlayingManager API.
        (WebKit::GPUConnectionToWebProcess::clearNowPlayingInfo):
        (WebKit::GPUConnectionToWebProcess::setNowPlayingInfo):
        (WebKit::GPUConnectionToWebProcess::updateSupportedRemoteCommands): explicitly call setSupportsSeek
        * GPUProcess/GPUConnectionToWebProcess.h:
        * GPUProcess/GPUConnectionToWebProcess.messages.in: Remove argument that can be easily inferred in code.
        * WebProcess/GPU/media/WebMediaStrategy.cpp: Override createNowPlayingManager method when using the GPU process.
        (WebKit::WebMediaStrategy::createNowPlayingManager const):
        (WebKit::WebMediaStrategy::clearNowPlayingInfo): Deleted.
        (WebKit::WebMediaStrategy::setNowPlayingInfo): Deleted.
        * WebProcess/GPU/media/WebMediaStrategy.h:

2021-03-22  Patrick Angle  <pangle@apple.com>

        Web Inspector: Port grid overlay drawing to iOS
        https://bugs.webkit.org/show_bug.cgi?id=223396

        Reviewed by BJ Burg.

        Port drawing routines from `WebCore::InspectorOverlay` to use `CALayer`s on iOS to enable drawing grid overlays
        on iOS. Drawing logic is, as much as possible, equivalent to that defined in `WebCore::InspectorOverlay`, with
        changes to fit the CALayer model.

        * UIProcess/Inspector/ios/WKInspectorHighlightView.h:
        * UIProcess/Inspector/ios/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView initWithFrame:]):
        (-[WKInspectorHighlightView _removeAllLayers]):
        (-[WKInspectorHighlightView _createLayers:]):
        (layerPath):
        - Path should be closed so that objects being stroked are stroked on all edges.
        (-[WKInspectorHighlightView _layoutForNodeListHighlight:]):
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]):
        (-[WKInspectorHighlightView _createGridOverlayLayers:scale:]):
        (createLayoutHatchingLayer):
        (createLayoutLabelLayer):
        (-[WKInspectorHighlightView _createGridOverlayLayer:scale:]):
        - Create layers for the grid overlays.
        (-[WKInspectorHighlightView update:scale:]):
        - Obtain the view scale so that `CATextLayer`s can have the correct content scale set.
        (-[WKInspectorHighlightView update:]): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _showInspectorHighlight:]):

2021-03-22  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Add a "wallTime" field to struct RemoteMediaPlayerState
        https://bugs.webkit.org/show_bug.cgi?id=223523

        Reviewed by Eric Carlson.

        Function `MediaPlayerPrivateRemote::currentMediaTime()` returns the
        current media time in the cached state, which is not the "current"
        media time of the media player. This patch adds a "wallTime" field
        to struct `RemoteMediaPlayerState`, so that `MediaPlayerPrivateRemote`
        can adjust the `currentTime` in the cached state based on `m_rate`
        and `WallTime::now()` and returns a more accurate value.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::~RemoteMediaPlayerProxy):
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerPlaybackStateChanged):
        (WebKit::RemoteMediaPlayerProxy::updateCachedState):
        (WebKit::RemoteMediaPlayerProxy::performTaskAtMediaTime):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:

        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::pause):
        (WebKit::MediaPlayerPrivateRemote::currentMediaTime const):
        (WebKit::MediaPlayerPrivateRemote::playbackStateChanged):
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        (WebKit::MediaPlayerPrivateRemote::performTaskAtMediaTime):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:

        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const):
        (WebKit::RemoteMediaPlayerState::decode):

2021-03-22  BJ Burg  <bburg@apple.com>

        Web Inspector: rename WebInspectorProxy to WebInspectorUIProxy
        https://bugs.webkit.org/show_bug.cgi?id=223551

        Reviewed by Devin Rousso.

        To improve clarity in the codebase, I'm renaming this to be consistent
        with it's WebProcess-side counterpart, WebInspectorUI. There are many
        different classes with the 'WebInspector' prefix, so it can be difficult
        to understand whether a class is associated with the WebInspectorUI
        frontend or the InspectorController backend. This fixes one of the biggest
        offenders.

        For brevity, I have elided function-level changelog entries from files
        that have been renamed. This is a mechanical refactoring.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * PlatformFTW.cmake:
        * PlatformWin.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * SourcesGTK.txt:
        * UIProcess/API/APIInspectorClient.h:
        (API::InspectorClient::openURLExternally):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didAttachLocalInspector):
        (API::UIClient::willCloseLocalInspector):
        (API::UIClient::configurationForLocalInspector):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorGetTypeID):
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/mac/WKInspectorPrivateMac.h:
        * UIProcess/API/Cocoa/_WKInspectorInternal.h:
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
        (-[_WKRemoteWebInspectorViewController initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewControllerInternal.h:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (webkitWebInspectorCreate):
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::configurationForLocalInspector):
        (WebKit::UIDelegate::UIClient::didAttachLocalInspector):
        (WebKit::UIDelegate::UIClient::willCloseLocalInspector):
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/Inspector/Agents/InspectorBrowserAgent.cpp:
        * UIProcess/Inspector/Cocoa/InspectorDelegate.h:
        * UIProcess/Inspector/Cocoa/InspectorDelegate.mm:
        (WebKit::InspectorDelegate::InspectorClient::openURLExternally):
        * UIProcess/Inspector/Cocoa/InspectorExtensionDelegate.mm:
        * UIProcess/Inspector/RemoteWebInspectorUIProxy.cpp: Renamed from Source/WebKit/UIProcess/Inspector/RemoteWebInspectorProxy.cpp.
        (WebKit::RemoteWebInspectorUIProxy::RemoteWebInspectorUIProxy):
        (WebKit::RemoteWebInspectorUIProxy::~RemoteWebInspectorUIProxy):
        (WebKit::RemoteWebInspectorUIProxy::invalidate):
        (WebKit::RemoteWebInspectorUIProxy::setDiagnosticLoggingAvailable):
        (WebKit::RemoteWebInspectorUIProxy::load):
        (WebKit::RemoteWebInspectorUIProxy::closeFromBackend):
        (WebKit::RemoteWebInspectorUIProxy::closeFromCrash):
        (WebKit::RemoteWebInspectorUIProxy::show):
        (WebKit::RemoteWebInspectorUIProxy::sendMessageToFrontend):
        (WebKit::RemoteWebInspectorUIProxy::frontendLoaded):
        (WebKit::RemoteWebInspectorUIProxy::frontendDidClose):
        (WebKit::RemoteWebInspectorUIProxy::reopen):
        (WebKit::RemoteWebInspectorUIProxy::resetState):
        (WebKit::RemoteWebInspectorUIProxy::bringToFront):
        (WebKit::RemoteWebInspectorUIProxy::save):
        (WebKit::RemoteWebInspectorUIProxy::append):
        (WebKit::RemoteWebInspectorUIProxy::setSheetRect):
        (WebKit::RemoteWebInspectorUIProxy::setForcedAppearance):
        (WebKit::RemoteWebInspectorUIProxy::startWindowDrag):
        (WebKit::RemoteWebInspectorUIProxy::openURLExternally):
        (WebKit::RemoteWebInspectorUIProxy::showCertificate):
        (WebKit::RemoteWebInspectorUIProxy::sendMessageToBackend):
        (WebKit::RemoteWebInspectorUIProxy::createFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::closeFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformResetState):
        (WebKit::RemoteWebInspectorUIProxy::platformBringToFront):
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        (WebKit::RemoteWebInspectorUIProxy::platformAppend):
        (WebKit::RemoteWebInspectorUIProxy::platformSetSheetRect):
        (WebKit::RemoteWebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::RemoteWebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::RemoteWebInspectorUIProxy::platformOpenURLExternally):
        (WebKit::RemoteWebInspectorUIProxy::platformShowCertificate):
        (WebKit::RemoteWebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        * UIProcess/Inspector/RemoteWebInspectorUIProxy.h: Renamed from Source/WebKit/UIProcess/Inspector/RemoteWebInspectorProxy.h.
        (WebKit::RemoteWebInspectorUIProxyClient::~RemoteWebInspectorUIProxyClient):
        (WebKit::RemoteWebInspectorUIProxy::create):
        (WebKit::RemoteWebInspectorUIProxy::setClient):
        (WebKit::RemoteWebInspectorUIProxy::isUnderTest const):
        (WebKit::RemoteWebInspectorUIProxy::extensionController const):
        (WebKit::RemoteWebInspectorUIProxy::window const):
        (WebKit::RemoteWebInspectorUIProxy::sheetRect const):
        * UIProcess/Inspector/RemoteWebInspectorUIProxy.messages.in: Renamed from Source/WebKit/UIProcess/Inspector/RemoteWebInspectorProxy.messages.in.
        * UIProcess/Inspector/WebInspectorUIProxy.cpp: Renamed from Source/WebKit/UIProcess/Inspector/WebInspectorProxy.cpp.
        (WebKit::WebInspectorUIProxy::WebInspectorUIProxy):
        (WebKit::WebInspectorUIProxy::~WebInspectorUIProxy):
        (WebKit::WebInspectorUIProxy::setInspectorClient):
        (WebKit::WebInspectorUIProxy::inspectionLevel const):
        (WebKit::WebInspectorUIProxy::inspectorPagePreferences const):
        (WebKit::WebInspectorUIProxy::invalidate):
        (WebKit::WebInspectorUIProxy::sendMessageToFrontend):
        (WebKit::WebInspectorUIProxy::isFront):
        (WebKit::WebInspectorUIProxy::connect):
        (WebKit::WebInspectorUIProxy::show):
        (WebKit::WebInspectorUIProxy::hide):
        (WebKit::WebInspectorUIProxy::close):
        (WebKit::WebInspectorUIProxy::closeForCrash):
        (WebKit::WebInspectorUIProxy::reopen):
        (WebKit::WebInspectorUIProxy::resetState):
        (WebKit::WebInspectorUIProxy::reset):
        (WebKit::WebInspectorUIProxy::updateForNewPageProcess):
        (WebKit::WebInspectorUIProxy::setFrontendConnection):
        (WebKit::WebInspectorUIProxy::showConsole):
        (WebKit::WebInspectorUIProxy::showResources):
        (WebKit::WebInspectorUIProxy::showMainResourceForFrame):
        (WebKit::WebInspectorUIProxy::attachBottom):
        (WebKit::WebInspectorUIProxy::attachRight):
        (WebKit::WebInspectorUIProxy::attachLeft):
        (WebKit::WebInspectorUIProxy::attach):
        (WebKit::WebInspectorUIProxy::detach):
        (WebKit::WebInspectorUIProxy::setAttachedWindowHeight):
        (WebKit::WebInspectorUIProxy::setAttachedWindowWidth):
        (WebKit::WebInspectorUIProxy::setSheetRect):
        (WebKit::WebInspectorUIProxy::startWindowDrag):
        (WebKit::WebInspectorUIProxy::togglePageProfiling):
        (WebKit::WebInspectorUIProxy::toggleElementSelection):
        (WebKit::WebInspectorUIProxy::isMainOrTestInspectorPage):
        (WebKit::WebInspectorUIProxy::createFrontendPage):
        (WebKit::WebInspectorUIProxy::openLocalInspectorFrontend):
        (WebKit::WebInspectorUIProxy::open):
        (WebKit::WebInspectorUIProxy::didClose):
        (WebKit::WebInspectorUIProxy::closeFrontendPageAndWindow):
        (WebKit::WebInspectorUIProxy::sendMessageToBackend):
        (WebKit::WebInspectorUIProxy::frontendLoaded):
        (WebKit::WebInspectorUIProxy::bringToFront):
        (WebKit::WebInspectorUIProxy::bringInspectedPageToFront):
        (WebKit::WebInspectorUIProxy::attachAvailabilityChanged):
        (WebKit::WebInspectorUIProxy::setForcedAppearance):
        (WebKit::WebInspectorUIProxy::openURLExternally):
        (WebKit::WebInspectorUIProxy::inspectedURLChanged):
        (WebKit::WebInspectorUIProxy::showCertificate):
        (WebKit::WebInspectorUIProxy::elementSelectionChanged):
        (WebKit::WebInspectorUIProxy::timelineRecordingChanged):
        (WebKit::WebInspectorUIProxy::setDeveloperPreferenceOverride):
        (WebKit::WebInspectorUIProxy::setDiagnosticLoggingAvailable):
        (WebKit::WebInspectorUIProxy::save):
        (WebKit::WebInspectorUIProxy::append):
        (WebKit::WebInspectorUIProxy::shouldOpenAttached):
        (WebKit::WebInspectorUIProxy::evaluateInFrontendForTesting):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorUIProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorUIProxy::platformInvalidate):
        (WebKit::WebInspectorUIProxy::platformResetState):
        (WebKit::WebInspectorUIProxy::platformBringToFront):
        (WebKit::WebInspectorUIProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorUIProxy::platformHide):
        (WebKit::WebInspectorUIProxy::platformIsFront):
        (WebKit::WebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::WebInspectorUIProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorUIProxy::platformShowCertificate):
        (WebKit::WebInspectorUIProxy::platformSave):
        (WebKit::WebInspectorUIProxy::platformAppend):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformAttach):
        (WebKit::WebInspectorUIProxy::platformDetach):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformSetSheetRect):
        (WebKit::WebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::WebInspectorUIProxy::inspectorPageURL):
        (WebKit::WebInspectorUIProxy::inspectorTestPageURL):
        (WebKit::WebInspectorUIProxy::infoForLocalDebuggable):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformAttachAvailabilityChanged):
        * UIProcess/Inspector/WebInspectorUIProxy.h: Renamed from Source/WebKit/UIProcess/Inspector/WebInspectorProxy.h.
        (WebKit::WebInspectorUIProxy::create):
        (WebKit::WebInspectorUIProxy::inspectorClient):
        (WebKit::WebInspectorUIProxy::inspectedPage const):
        (WebKit::WebInspectorUIProxy::inspectorPage const):
        (WebKit::WebInspectorUIProxy::extensionController const):
        (WebKit::WebInspectorUIProxy::isConnected const):
        (WebKit::WebInspectorUIProxy::isVisible const):
        (WebKit::WebInspectorUIProxy::inspectorWindow const):
        (WebKit::WebInspectorUIProxy::sheetRect const):
        (WebKit::WebInspectorUIProxy::inspectorView const):
        (WebKit::WebInspectorUIProxy::attachmentSide const):
        (WebKit::WebInspectorUIProxy::isAttached const):
        (WebKit::WebInspectorUIProxy::isProfilingPage const):
        (WebKit::WebInspectorUIProxy::isElementSelectionActive const):
        (WebKit::WebInspectorUIProxy::isUnderTest const):
        (WebKit::WebInspectorUIProxy::platformCanAttach):
        (WebKit::WebInspectorUIProxy::canAttach const):
        * UIProcess/Inspector/WebInspectorUIProxy.messages.in: Renamed from Source/WebKit/UIProcess/Inspector/WebInspectorProxy.messages.in.
        * UIProcess/Inspector/glib/RemoteInspectorClient.cpp:
        * UIProcess/Inspector/glib/RemoteInspectorClient.h:
        * UIProcess/Inspector/gtk/RemoteWebInspectorUIProxyGtk.cpp: Renamed from Source/WebKit/UIProcess/Inspector/gtk/RemoteWebInspectorProxyGtk.cpp.
        (WebKit::RemoteWebInspectorUIProxy::updateWindowTitle):
        (WebKit::remoteInspectorViewDestroyed):
        (WebKit::RemoteWebInspectorUIProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformResetState):
        (WebKit::RemoteWebInspectorUIProxy::platformBringToFront):
        (WebKit::remoteFileReplaceContentsCallback):
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        (WebKit::RemoteWebInspectorUIProxy::platformAppend):
        (WebKit::RemoteWebInspectorUIProxy::platformSetSheetRect):
        (WebKit::RemoteWebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::RemoteWebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::RemoteWebInspectorUIProxy::platformOpenURLExternally):
        (WebKit::RemoteWebInspectorUIProxy::platformShowCertificate):
        * UIProcess/Inspector/gtk/WebInspectorUIProxyClient.h: Renamed from Source/WebKit/UIProcess/Inspector/gtk/WebInspectorProxyClient.h.
        * UIProcess/Inspector/gtk/WebInspectorUIProxyGtk.cpp: Renamed from Source/WebKit/UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp.
        (WebKit::inspectorViewDestroyed):
        (WebKit::WebInspectorUIProxy::setClient):
        (WebKit::WebInspectorUIProxy::updateInspectorWindowTitle const):
        (WebKit::exceededDatabaseQuota):
        (WebKit::webProcessDidCrash):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::getContextMenuFromProposedMenu):
        (WebKit::inspectorWebsiteDataStore):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorUIProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorUIProxy::platformInvalidate):
        (WebKit::WebInspectorUIProxy::platformHide):
        (WebKit::WebInspectorUIProxy::platformResetState):
        (WebKit::WebInspectorUIProxy::platformBringToFront):
        (WebKit::WebInspectorUIProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorUIProxy::platformIsFront):
        (WebKit::WebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::WebInspectorUIProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorUIProxy::platformShowCertificate):
        (WebKit::WebInspectorUIProxy::inspectorPageURL):
        (WebKit::WebInspectorUIProxy::inspectorTestPageURL):
        (WebKit::WebInspectorUIProxy::infoForLocalDebuggable):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformAttach):
        (WebKit::WebInspectorUIProxy::platformDetach):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformSetSheetRect):
        (WebKit::WebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::fileReplaceContentsCallback):
        (WebKit::WebInspectorUIProxy::platformSave):
        (WebKit::WebInspectorUIProxy::platformAppend):
        (WebKit::WebInspectorUIProxy::platformAttachAvailabilityChanged):
        * UIProcess/Inspector/gtk/WebKitInspectorWindow.cpp:
        (webkitInspectorWindowNew):
        * UIProcess/Inspector/mac/RemoteWebInspectorUIProxyMac.mm: Renamed from Source/WebKit/UIProcess/Inspector/mac/RemoteWebInspectorProxyMac.mm.
        (-[WKRemoteWebInspectorUIProxyObjCAdapter window:willPositionSheet:usingRect:]):
        (-[WKRemoteWebInspectorUIProxyObjCAdapter initWithRemoteWebInspectorUIProxy:]):
        (-[WKRemoteWebInspectorUIProxyObjCAdapter inspectorWKWebViewDidBecomeActive:]):
        (-[WKRemoteWebInspectorUIProxyObjCAdapter inspectorViewControllerInspectorDidCrash:]):
        (-[WKRemoteWebInspectorUIProxyObjCAdapter inspectorViewControllerInspectorIsUnderTest:]):
        (WebKit::RemoteWebInspectorUIProxy::webView const):
        (WebKit::RemoteWebInspectorUIProxy::didBecomeActive):
        (WebKit::RemoteWebInspectorUIProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformResetState):
        (WebKit::RemoteWebInspectorUIProxy::platformBringToFront):
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        (WebKit::RemoteWebInspectorUIProxy::platformAppend):
        (WebKit::RemoteWebInspectorUIProxy::platformSetSheetRect):
        (WebKit::RemoteWebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::RemoteWebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::RemoteWebInspectorUIProxy::platformOpenURLExternally):
        (WebKit::RemoteWebInspectorUIProxy::platformShowCertificate):
        * UIProcess/Inspector/mac/WKInspectorViewController.mm:
        (-[WKInspectorViewController webView]):
        * UIProcess/Inspector/mac/WebInspectorUIProxyMac.mm: Renamed from Source/WebKit/UIProcess/Inspector/mac/WebInspectorProxyMac.mm.
        (-[WKWebInspectorUIProxyObjCAdapter inspectorRef]):
        (-[WKWebInspectorUIProxyObjCAdapter inspector]):
        (-[WKWebInspectorUIProxyObjCAdapter initWithWebInspectorUIProxy:]):
        (-[WKWebInspectorUIProxyObjCAdapter invalidate]):
        (-[WKWebInspectorUIProxyObjCAdapter window:willPositionSheet:usingRect:]):
        (-[WKWebInspectorUIProxyObjCAdapter windowDidMove:]):
        (-[WKWebInspectorUIProxyObjCAdapter windowDidResize:]):
        (-[WKWebInspectorUIProxyObjCAdapter windowWillClose:]):
        (-[WKWebInspectorUIProxyObjCAdapter windowDidEnterFullScreen:]):
        (-[WKWebInspectorUIProxyObjCAdapter windowDidExitFullScreen:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectedViewFrameDidChange:]):
        (-[WKWebInspectorUIProxyObjCAdapter observeValueForKeyPath:ofObject:change:context:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewControllerDidBecomeActive:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewControllerInspectorDidCrash:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewControllerInspectorIsUnderTest:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewController:willMoveToWindow:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewControllerDidMoveToWindow:]):
        (-[WKWebInspectorUIProxyObjCAdapter inspectorViewController:openURLExternally:]):
        (WebKit::WebInspectorUIProxy::didBecomeActive):
        (WebKit::WebInspectorUIProxy::attachmentViewDidChange):
        (WebKit::WebInspectorUIProxy::attachmentWillMoveFromWindow):
        (WebKit::WebInspectorUIProxy::attachmentDidMoveToWindow):
        (WebKit::WebInspectorUIProxy::updateInspectorWindowTitle const):
        (WebKit::WebInspectorUIProxy::createFrontendWindow):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorUIProxy::closeFrontendPage):
        (WebKit::WebInspectorUIProxy::closeFrontendAfterInactivityTimerFired):
        (WebKit::WebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorUIProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorUIProxy::platformInvalidate):
        (WebKit::WebInspectorUIProxy::platformHide):
        (WebKit::WebInspectorUIProxy::platformResetState):
        (WebKit::WebInspectorUIProxy::platformBringToFront):
        (WebKit::WebInspectorUIProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorUIProxy::platformIsFront):
        (WebKit::WebInspectorUIProxy::platformCanAttach):
        (WebKit::WebInspectorUIProxy::platformAttachAvailabilityChanged):
        (WebKit::WebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::WebInspectorUIProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorUIProxy::platformShowCertificate):
        (WebKit::WebInspectorUIProxy::platformSave):
        (WebKit::WebInspectorUIProxy::platformAppend):
        (WebKit::WebInspectorUIProxy::windowFrameDidChange):
        (WebKit::WebInspectorUIProxy::windowFullScreenDidChange):
        (WebKit::WebInspectorUIProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformAttach):
        (WebKit::WebInspectorUIProxy::platformDetach):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformSetSheetRect):
        (WebKit::WebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::WebInspectorUIProxy::inspectorPageURL):
        (WebKit::WebInspectorUIProxy::inspectorTestPageURL):
        (WebKit::systemVersionPlist):
        (WebKit::WebInspectorUIProxy::infoForLocalDebuggable):
        (WebKit::WebInspectorUIProxy::applyForcedAppearance):
        * UIProcess/Inspector/socket/RemoteInspectorClient.cpp:
        * UIProcess/Inspector/win/RemoteWebInspectorUIProxyWin.cpp: Renamed from Source/WebKit/UIProcess/Inspector/win/RemoteWebInspectorProxyWin.cpp.
        (WebKit::RemoteWebInspectorUIProxy::WndProc):
        (WebKit::registerWindowClass):
        (WebKit::RemoteWebInspectorUIProxy::sizeChange):
        (WebKit::RemoteWebInspectorUIProxy::onClose):
        (WebKit::RemoteWebInspectorUIProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorUIProxy::platformResetState):
        (WebKit::RemoteWebInspectorUIProxy::platformBringToFront):
        (WebKit::RemoteWebInspectorUIProxy::platformSave):
        (WebKit::RemoteWebInspectorUIProxy::platformAppend):
        (WebKit::RemoteWebInspectorUIProxy::platformSetSheetRect):
        (WebKit::RemoteWebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::RemoteWebInspectorUIProxy::platformStartWindowDrag):
        (WebKit::RemoteWebInspectorUIProxy::platformOpenURLExternally):
        (WebKit::RemoteWebInspectorUIProxy::platformShowCertificate):
        (WebKit::RemoteWebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        * UIProcess/Inspector/win/WebInspectorUIProxyWin.cpp: Renamed from Source/WebKit/UIProcess/Inspector/win/WebInspectorProxyWin.cpp.
        (WebKit::getInspectedWindowInfo):
        (WebKit::WebInspectorUIProxy::windowReceivedMessage):
        (WebKit::WebInspectorUIProxy::wndProc):
        (WebKit::WebInspectorUIProxy::registerWindowClass):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::webProcessDidCrash):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendPage):
        (WebKit::WebInspectorUIProxy::platformCloseFrontendPageAndWindow):
        (WebKit::WebInspectorUIProxy::inspectorPageURL):
        (WebKit::WebInspectorUIProxy::inspectorTestPageURL):
        (WebKit::WebInspectorUIProxy::infoForLocalDebuggable):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformAttach):
        (WebKit::WebInspectorUIProxy::platformDetach):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorUIProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorUIProxy::platformSetSheetRect):
        (WebKit::WebInspectorUIProxy::platformIsFront):
        (WebKit::WebInspectorUIProxy::platformHide):
        (WebKit::WebInspectorUIProxy::platformResetState):
        (WebKit::WebInspectorUIProxy::platformBringToFront):
        (WebKit::WebInspectorUIProxy::platformBringInspectedPageToFront):
        (WebKit::WebInspectorUIProxy::platformSetForcedAppearance):
        (WebKit::WebInspectorUIProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorUIProxy::platformShowCertificate):
        (WebKit::WebInspectorUIProxy::platformSave):
        (WebKit::WebInspectorUIProxy::platformAppend):
        (WebKit::WebInspectorUIProxy::platformAttachAvailabilityChanged):
        (WebKit::WebInspectorUIProxy::platformCreateFrontendWindow):
        (WebKit::WebInspectorUIProxy::platformDidCloseForCrash):
        (WebKit::WebInspectorUIProxy::platformInvalidate):
        (WebKit::WebInspectorUIProxy::platformStartWindowDrag):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::m_limitsNavigationsToAppBoundDomains):
        (WebKit::WebPageProxy::inspector const):
        * UIProcess/WebPageProxy.h:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Inspector/RemoteWebInspectorUI.cpp:
        (WebKit::RemoteWebInspectorUI::sendMessageToBackend):
        (WebKit::RemoteWebInspectorUI::frontendLoaded):
        (WebKit::RemoteWebInspectorUI::changeSheetRect):
        (WebKit::RemoteWebInspectorUI::setForcedAppearance):
        (WebKit::RemoteWebInspectorUI::startWindowDrag):
        (WebKit::RemoteWebInspectorUI::bringToFront):
        (WebKit::RemoteWebInspectorUI::closeWindow):
        (WebKit::RemoteWebInspectorUI::reopen):
        (WebKit::RemoteWebInspectorUI::resetState):
        (WebKit::RemoteWebInspectorUI::openURLExternally):
        (WebKit::RemoteWebInspectorUI::save):
        (WebKit::RemoteWebInspectorUI::append):
        (WebKit::RemoteWebInspectorUI::showCertificate):
        * WebProcess/Inspector/WebInspector.cpp:
        (WebKit::WebInspector::openLocalInspectorFrontend):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::bringToFront):
        (WebKit::WebInspector::elementSelectionChanged):
        (WebKit::WebInspector::timelineRecordingChanged):
        (WebKit::WebInspector::setDeveloperPreferenceOverride):
        (WebKit::WebInspector::updateDockingAvailability):
        * WebProcess/Inspector/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::updateConnection):
        (WebKit::WebInspectorUI::frontendLoaded):
        (WebKit::WebInspectorUI::startWindowDrag):
        (WebKit::WebInspectorUI::bringToFront):
        (WebKit::WebInspectorUI::closeWindow):
        (WebKit::WebInspectorUI::reopen):
        (WebKit::WebInspectorUI::resetState):
        (WebKit::WebInspectorUI::setForcedAppearance):
        (WebKit::WebInspectorUI::requestSetDockSide):
        (WebKit::WebInspectorUI::changeAttachedWindowHeight):
        (WebKit::WebInspectorUI::changeAttachedWindowWidth):
        (WebKit::WebInspectorUI::changeSheetRect):
        (WebKit::WebInspectorUI::openURLExternally):
        (WebKit::WebInspectorUI::save):
        (WebKit::WebInspectorUI::append):
        (WebKit::WebInspectorUI::inspectedURLChanged):
        (WebKit::WebInspectorUI::showCertificate):
        (WebKit::WebInspectorUI::sendMessageToBackend):

2021-03-22  Devin Rousso  <drousso@apple.com>

        Remove unused JS and CSS files of media controls
        https://bugs.webkit.org/show_bug.cgi?id=214955
        <rdar://problem/66604040>

        Reviewed by Eric Carlson.

        Cocoa platforms are already using modern media controls so there's no reason to keep the old
        media controls resources/logic around any longer. It just wastes space.

        The non-iOS Apple controls must be kept though as they are still used on Windows.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetModernMediaControlsEnabled): Deleted.
        (WKPreferencesGetModernMediaControlsEnabled): Deleted.
        Replace `ModernMediaControlsEnabled` setting with `ENABLE_MODERN_MEDIA_CONTROLS` build flag.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        Update the static `minVideoWidth` value for modern media controls.

2021-03-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] ASSERTION FAILED: isMainThread() in GPU process for some canvas/philip/tests tests
        https://bugs.webkit.org/show_bug.cgi?id=223500

        Reviewed by Alex Christensen.

        In WinCairo GPU process mode, WebCore::Font IPC decoder was using
        FontCache::fontForFamily that should be called only in the main
        thread. However, It is was called in IPC thread. Reimplemented the
        decoder without using FontCache::fontForFamily.

        Encode LOGFONT for WebCore::Font, and decode it and create a font
        directly from it.

        This change also encodes and decodes the
        FontPlatformData::CreationData of custom fonts. However, custom
        fonts still don't work in GPU process mode because
        FontCustomPlatformData is destructed soon. In non-GPU process
        mode, FontCustomPlatformData is retained by CachedFont. In GPU
        process mode, fontReference of FontCustomPlatformData should be
        refcounted and retained by WebCore::Font.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (IPC::ArgumentCoder<LOGFONT>::encode):
        (IPC::ArgumentCoder<LOGFONT>::decode):
        (IPC::ArgumentCoder<Ref<Font>>::encodePlatformData):
        (IPC::ArgumentCoder<Ref<Font>>::decodePlatformData):

2021-03-22  Per Arne  <pvollan@apple.com>

        Allow additional fcntl
        https://bugs.webkit.org/show_bug.cgi?id=223590
        <rdar://problem/75702241>

        Reviewed by Brent Fulgham.

        An additional fcntl is being used and should be allowed.

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

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

        RealtimeMediaSource does not need to be a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=223573
        <rdar://75583258>

        Reviewed by Eric Carlson.

        * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.h:

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

        Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:2681:9: runtime error: load of value nnn, which is not a valid value for type 'BOOL' (aka 'signed char')
        https://bugs.webkit.org/show_bug.cgi?id=223581

        Reviewed by Simon Fraser.

        The code was implicitly casting an uint64_t identifier into a BOOL variable. The intention was
        to check whether the identifier is 0 or not. To silence the UBSAN error, we now use the bool
        type instead of BOOL (since BOOL is defined as a signed char on some platforms).

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

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

        Add an early return in UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList
        https://bugs.webkit.org/show_bug.cgi?id=223571

        Reviewed by Eric Carlson.

        Update code to early return as soon as possible.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::computeFilteredDeviceList):

2021-03-19  Darin Adler  <darin@apple.com>

        [Cocoa] Make it possible to release a WKWebView on a non-main thread without a crash due to WKScriptMessage race
        https://bugs.webkit.org/show_bug.cgi?id=222336

        Reviewed by Chris Dumez.

        * Platform/spi/Cocoa/objcSPI.h: Removed this unused file.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageGetWebView): Use WKPageProxy::cocoaView instead of fromWebPageProxy.
        * UIProcess/API/Cocoa/WKDownload.mm:
        (-[WKDownload webView]): Ditto.
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo webView]): Ditto.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (ScriptMessageHandlerDelegate::didPostMessage): Use WKPageProxy::cocoaView
        instead of fromWebPageProxy and add null checks.
        (ScriptMessageHandlerDelegate::didPostMessageWithAsyncReply): Ditto.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (pageToViewMap): Deleted.
        (fromWebPageProxy): Deleted.
        (-[WKWebView _initializeWithConfiguration:]): Use WKPageProxy::setCocoaView
        instead of adding the page/view pair to a map.
        (-[WKWebView dealloc]): Removed code that removed the page/view pair from the map.

        * UIProcess/API/Cocoa/WKWebViewInternal.h: Removed fromWebPageProxy.

        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload originatingWebView]): Use WKPageProxy::cocoaView instead of fromWebPageProxy.
        * UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
        (-[_WKFrameTreeNode webView]): Ditto.
        * UIProcess/API/Cocoa/_WKInspector.mm:
        (-[_WKInspector webView]): Ditto.
        * UIProcess/API/Cocoa/_WKInspectorTesting.mm:
        (-[_WKInspector inspectorWebView]): Ditto.

        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::requestSwitchToPage): Use WKPageProxy::cocoaView
        instead of fromWebPageProxy and add a null check.
        (WebKit::AutomationSessionClient::requestHideWindowOfPage): Ditto.
        (WebKit::AutomationSessionClient::requestRestoreWindowOfPage): Ditto.
        (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage): Ditto.
        (WebKit::AutomationSessionClient::isShowingJavaScriptDialogOnPage): Ditto.
        (WebKit::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage): Ditto.
        (WebKit::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage): Ditto.
        (WebKit::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage): Ditto.
        (WebKit::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage): Ditto.
        (WebKit::AutomationSessionClient::typeOfCurrentJavaScriptDialogOnPage): Ditto.
        (WebKit::AutomationSessionClient::currentPresentationOfPage): Ditto.

        * UIProcess/Cocoa/MediaPermissionUtilities.mm:
        (WebKit::alertForPermission): Use WKPageProxy::cocoaView instead of fromWebPageProxy.

        * UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:
        (WebKit::PopUpSOAuthorizationSession::abortInternal): Added a null check since
        initSecretWebView is no longer guaranteed to allocate m_secretWebView in the case
        where the WKWebView is nil.
        (WebKit::PopUpSOAuthorizationSession::completeInternal): Ditto.
        (WebKit::PopUpSOAuthorizationSession::initSecretWebView): Use WKPageProxy::cocoaView
        instead of fromWebPageProxy and added a null check.

        * UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:
        (WebKit::SOAuthorizationSession::continueStartAfterDecidePolicy): Use WKPageProxy::cocoaView
        instead of fromWebPageProxy.

        * UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm:
        (WebKit::WebURLSchemeHandlerCocoa::platformStartTask): Use WKPageProxy::cocoaView
        instead of fromWebPageProxy and added a null check.
        (WebKit::WebURLSchemeHandlerCocoa::platformStopTask): Ditto. Also call the
        new suppressTaskStoppedExceptions if we are unable to call the delegate method due to
        the WKWebView already being nil.

        * UIProcess/PDF/WKPDFHUDView.mm:
        (-[WKPDFHUDView hitTest:]): Use WKPageProxy::cocoaView instead of fromWebPageProxy.

        * UIProcess/WebURLSchemeTask.cpp:
        (WebKit::WebURLSchemeTask::didPerformRedirection): Don't raise the "task stopped"
        exception if it has been explicitly suppressed.
        (WebKit::WebURLSchemeTask::didReceiveResponse): Ditto.
        (WebKit::WebURLSchemeTask::didReceiveData): Ditto.
        (WebKit::WebURLSchemeTask::didComplete): Ditto.

        * UIProcess/WebURLSchemeTask.h: Added a suppressTaskStoppedExceptions function,
        which we use to prevent exceptions in the case where the WKWebView was deallocated.
        Since we were not able to call the delegate method in that case, the caller can't
        be expected to refrain from calling methods. Eventually, clients of WKWebView could avoid this
        by calling the _close method instead of relying for deallocation to do web view teardown,
        but we need to promote that from SPI to API.

        * UIProcess/WebPageProxy.h: Tweaked forward declarations a bit, and added one for WKWebView.
        Marked the class final and use final instead of override. Added Cocoa-only cocoaView and
        setCocoaView function members, and m_cocoaView data member. Also added inline implementations
        but only compile them when included from an Objective-C source file.

        * WebKit.xcodeproj/project.pbxproj: Removed objcSPI.h.

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

        Implement RTCDataChannel transfer out of process
        https://bugs.webkit.org/show_bug.cgi?id=223443

        Reviewed by Eric Carlson.

        Add support for connecting remote sources to remote data channels.
        This is done by connection detached data channels to remote source that will send messages to network process.
        Network process then sends to the process in which was reattached the data channel.
        Pairing of data channels is done in main thread through connectToSource message.
        The data then flows in background threads, network process being the proxy between web processes.
        RTCDataChannelRemoteManagerProxy is the forwarding entity in NetworkProcess.
        RTCDataChannelRemoteManager is the entity in WebProcess doing the messaging from and to data channels.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::connectToRTCDataChannelRemoteSource):
        (WebKit::NetworkConnectionToWebProcess::registerToRTCDataChannelProxy):
        (WebKit::NetworkConnectionToWebProcess::unregisterToRTCDataChannelProxy):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::rtcDataChannelProxy):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.cpp: Added.
        (WebKit::RTCDataChannelRemoteManagerProxy::RTCDataChannelRemoteManagerProxy):
        (WebKit::RTCDataChannelRemoteManagerProxy::registerConnectionToWebProcess):
        (WebKit::RTCDataChannelRemoteManagerProxy::unregisterConnectionToWebProcess):
        (WebKit::RTCDataChannelRemoteManagerProxy::sendData):
        (WebKit::RTCDataChannelRemoteManagerProxy::close):
        (WebKit::RTCDataChannelRemoteManagerProxy::changeReadyState):
        (WebKit::RTCDataChannelRemoteManagerProxy::receiveData):
        (WebKit::RTCDataChannelRemoteManagerProxy::detectError):
        (WebKit::RTCDataChannelRemoteManagerProxy::bufferedAmountIsDecreasing):
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.h: Added.
        * NetworkProcess/webrtc/RTCDataChannelRemoteManagerProxy.messages.in: Added.
        * Sources.txt:
        * WebKit.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::connectToRTCDataChannelRemoteSource):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
        (WebKit::LibWebRTCProvider::createRTCDataChannelRemoteHandlerConnection):
        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp: Added.
        (WebKit::RTCDataChannelRemoteManager::sharedManager):
        (WebKit::RTCDataChannelRemoteManager::RTCDataChannelRemoteManager):
        (WebKit::RTCDataChannelRemoteManager::setConnection):
        (WebKit::RTCDataChannelRemoteManager::connectToRemoteSource):
        (WebKit::RTCDataChannelRemoteManager::remoteHandlerConnection):
        (WebKit::RTCDataChannelRemoteManager::remoteSourceConnection):
        (WebKit::RTCDataChannelRemoteManager::postTaskToHandler):
        (WebKit::RTCDataChannelRemoteManager::sourceFromIdentifier):
        (WebKit::RTCDataChannelRemoteManager::sendData):
        (WebKit::RTCDataChannelRemoteManager::close):
        (WebKit::RTCDataChannelRemoteManager::changeReadyState):
        (WebKit::RTCDataChannelRemoteManager::receiveData):
        (WebKit::RTCDataChannelRemoteManager::detectError):
        (WebKit::RTCDataChannelRemoteManager::bufferedAmountIsDecreasing):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::create):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::RemoteHandlerConnection):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::connectToSource):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::sendData):
        (WebKit::RTCDataChannelRemoteManager::RemoteHandlerConnection::close):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::create):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::RemoteSourceConnection):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didChangeReadyState):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didReceiveStringData):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didReceiveRawData):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didDetectError):
        (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::bufferedAmountIsDecreasing):
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.h: Added.
        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.messages.in: Copied from Source/WebKit/WebProcess/Network/NetworkProcessConnection.messages.in.
        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
        (WebKit::WebSWContextManagerConnection::installServiceWorker):

2021-03-19  Kate Cheney  <katherine_cheney@apple.com>

        Cannot login to microsoftonline.com without allowing storage access
        https://bugs.webkit.org/show_bug.cgi?id=223510
        <rdar://problem/75619058>

        Reviewed by John Wilander.

        Disable the storage access quirk for non-default web browsers and
        don't cancel the login click on sites even if the user denies storage
        access. See WebCore changelog for more details.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::isParentProcessAFullWebBrowser const):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
        (WebKit::WebResourceLoadObserver::hasDeniedCrossPageStorageAccess const):
        (WebKit::WebResourceLoadObserver::setHasDeniedCrossPageStorageAccess):
        * WebProcess/WebCoreSupport/WebResourceLoadObserver.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageIsParentProcessAFullWebBrowser):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:

2021-03-19  Brent Fulgham  <bfulgham@apple.com>

        [macOS] Allow opendirectoryd access in base system
        https://bugs.webkit.org/show_bug.cgi?id=223527
        <rdar://problem/75492699>

        Reviewed by Per Arne Vollan.

        Allow the WebContent process to communicate with opendirectoryd when running in the base system.

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

2021-03-19  BJ Burg  <bburg@apple.com>

        Web Inspector: remove unnecessary inspectorBaseURL() and assumed read access
        https://bugs.webkit.org/show_bug.cgi?id=223526

        Reviewed by Devin Rousso.

        inspectorBaseURL() is only used to call WebProcess::assumeReadAccessToBaseURL, which
        generates a sandbox extension. However, after r274697, all ports now use non-file:///
        schemes to load inspector resources, so any needed sandbox extensions are handled in
        port-specific code or by the URL scheme handler.

        * UIProcess/Inspector/RemoteWebInspectorProxy.cpp:
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):
        * UIProcess/Inspector/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createFrontendPage):
        (WebKit::WebInspectorProxy::inspectorBaseURL): Deleted.
        * UIProcess/Inspector/WebInspectorProxy.h:
        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL): Deleted.
        * UIProcess/Inspector/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorBaseURL): Deleted.
        * UIProcess/Inspector/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL): Deleted.
        * mac/WebKit2.order:

2021-03-19  Jer Noble  <jer.noble@apple.com>

        [GPUP] platform/mac/media/encrypted-media/fps-clearkey-crash.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=221687
        <rdar://problem/74438911>

        Reviewed by Eric Carlson.

        Add support for passing the value of MediaPlayerPrivate::waitingForKey() across the process boundary.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::mediaPlayerWaitingForKeyChanged):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::waitingForKeyChanged):
        (WebKit::MediaPlayerPrivateRemote::waitingForKey const):
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:

2021-03-19  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Test imported/w3c/web-platform-tests/fetch/range/general.window.html fails when media in GPU process is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=221817

        Reviewed by Jer Noble.

        The `didLoadingProgress()` function of `MediaPlayerPrivateAVFoundation`
        and `MediaPlayerPrivateMediaSourceAVFObjC` changes their mutable member
        variables, so a caller (e.g., RemoteMediaPlayerProxy::didLoadingProgress())
        will get false eventually if it calls the function repeatedly. As a result,
        `MediaPlayerPrivateRemote::didLoadingProgress()` will always return false.
        This patch fixes this issue with a new synchronous message in `RemoteMediaPlayerProxy`.

        No new tests. Fix a test failure.

        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
        (WebKit::RemoteMediaPlayerProxy::didLoadingProgress):
        (WebKit::RemoteMediaPlayerProxy::updateCachedState):
        * GPUProcess/media/RemoteMediaPlayerProxy.h:
        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
        (WebKit::MediaPlayerPrivateRemote::didLoadingProgress const):
        (WebKit::MediaPlayerPrivateRemote::updateCachedState):
        * WebProcess/GPU/media/RemoteMediaPlayerState.h:
        (WebKit::RemoteMediaPlayerState::encode const):
        (WebKit::RemoteMediaPlayerState::decode):

2021-03-19  Antti Koivisto  <antti@apple.com>

        Reduce the number of allowed parallel low priority resource loads before visual completion
        https://bugs.webkit.org/show_bug.cgi?id=223448

        Reviewed by Geoff Garen.

        More aggressive scheduling during early page load seems like a win.

        * NetworkProcess/NetworkLoadScheduler.cpp:
        
        Reduce from six to two.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):

        This revealed an issue where allowing scheduling for synchronous XHR can end up in a deadlock
        (since the web process won't be able to process redirect requests).
        
        Tested by imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm.

== Rolled over to ChangeLog-2021-03-18 ==

