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

