Diff
Modified: trunk/Source/WebKit/ChangeLog (265724 => 265725)
--- trunk/Source/WebKit/ChangeLog 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/ChangeLog 2020-08-15 01:46:04 UTC (rev 265725)
@@ -1,3 +1,104 @@
+2020-08-14 Kate Cheney <[email protected]>
+
+ Convert remaining SharedMemory::Handle to SharedMemory::IPCHandle
+ https://bugs.webkit.org/show_bug.cgi?id=215471
+ <rdar://problem/67024177>
+
+ Reviewed by David Kilzer.
+
+ Use the new struct for sending SharedMemory::Handle objects via IPC, so
+ we can include the exact size of data (SharedMemory::Handle::size()
+ rounds up to the nearest page), and verify these sizes match when decoding.
+
+ In many cases, the size is not sent as a separate argument via IPC, so
+ we can initialize the IPCHandle object with SharedMemory::Handle::size().
+
+ We can remove the additional size parameter when it exists, because
+ we are now passing IPCHandle which should include the size value.
+
+ * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
+ (WebKit::RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged):
+ * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h:
+ * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in:
+ * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
+ (WebKit::RemoteMediaRecorder::audioSamplesStorageChanged):
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ * GPUProcess/webrtc/RemoteMediaRecorder.messages.in:
+ Send SharedMemory::IPCHandle object instead of SharedMemory::Handle
+ over IPC.
+
+ * NetworkProcess/ServiceWorker/WebSWOriginStore.cpp:
+ (WebKit::WebSWOriginStore::sendStoreHandle):
+ Since no additional size parameter is being sent in this function, we
+ can use handle.size() as the IPCHandle::dataSize parameter.
+
+ * Platform/SharedMemory.h:
+ Remove encode/decode functions in SharedMemory::Handle.
+
+ * Platform/cocoa/SharedMemoryCocoa.cpp:
+ (WebKit::SharedMemory::Handle::encode const): Deleted.
+ (WebKit::SharedMemory::Handle::decode): Deleted.
+ * Platform/unix/SharedMemoryUnix.cpp:
+ (WebKit::SharedMemory::IPCHandle::encode const):
+ (WebKit::SharedMemory::IPCHandle::decode):
+ * Platform/win/SharedMemoryWin.cpp:
+ (WebKit::SharedMemory::IPCHandle::encode const):
+ (WebKit::SharedMemory::IPCHandle::decode):
+ (WebKit::SharedMemory::Handle::encode const): Deleted.
+ (WebKit::SharedMemory::Handle::decode): Deleted.
+ Remove SharedMemory::Handle encode/decode functions so we will not
+ ever send a SharedMemory::Handle object over IPC accidentally in the future.
+
+ * Shared/ShareableBitmap.cpp:
+ (WebKit::ShareableBitmap::Handle::encode const):
+ (WebKit::ShareableBitmap::Handle::decode):
+ Keep m_size here because it is an IntSize object and is useful to
+ check width/height parameters in the SharableBitmap object.
+
+ * Shared/ShareableResource.cpp:
+ (WebKit::ShareableResource::Handle::encode const):
+ (WebKit::ShareableResource::Handle::decode):
+ * Shared/WebCompiledContentRuleListData.cpp:
+ (WebKit::WebCompiledContentRuleListData::encode const):
+ (WebKit::WebCompiledContentRuleListData::decode):
+ * Shared/WebCoreArgumentCoders.cpp:
+ (IPC::encodeSharedBuffer):
+ (IPC::decodeSharedBuffer):
+ * Shared/WebHitTestResultData.cpp:
+ (WebKit::WebHitTestResultData::encode const):
+ (WebKit::WebHitTestResultData::decode):
+ More cases of converting between SharedMemory::Handle and
+ SharedMemory::IPCHandle when encoding/decoding.
+
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ * UIProcess/VisitedLinkStore.cpp:
+ (WebKit::VisitedLinkStore::sendStoreHandleToProcess):
+ * WebProcess/GPU/media/RemoteAudioBusData.h:
+ (WebKit::RemoteAudioBusData::encode const):
+ (WebKit::RemoteAudioBusData::decode):
+ Since no additional size parameter is being sent in this function, we
+ can use handle.size() as the IPCHandle::dataSize parameter.
+
+ * WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp:
+ (WebKit::AudioMediaStreamTrackRenderer::storageChanged):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::storageChanged):
+ * WebProcess/Storage/WebSWClientConnection.cpp:
+ (WebKit::WebSWClientConnection::setSWOriginTableSharedMemory):
+ * WebProcess/Storage/WebSWClientConnection.h:
+ * WebProcess/Storage/WebSWClientConnection.messages.in:
+ * WebProcess/WebPage/VisitedLinkTableController.cpp:
+ (WebKit::VisitedLinkTableController::setVisitedLinkTable):
+ * WebProcess/WebPage/VisitedLinkTableController.h:
+ * WebProcess/WebPage/VisitedLinkTableController.messages.in:
+ * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
+ (WebKit::RemoteCaptureSampleManager::audioStorageChanged):
+ * WebProcess/cocoa/RemoteCaptureSampleManager.h:
+ * WebProcess/cocoa/RemoteCaptureSampleManager.messages.in:
+ More cases of converting between SharedMemory::Handle and
+ SharedMemory::IPCHandle when encoding/decoding.
+
+
2020-08-14 Per Arne Vollan <[email protected]>
[Cocoa] Avoid changing XPC target queue inside XPC event handler
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -95,7 +95,7 @@
m_renderer->setVolume(value);
}
-void RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged(const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
+void RemoteAudioMediaStreamTrackRenderer::audioSamplesStorageChanged(const SharedMemory::IPCHandle& ipcHandle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
{
ASSERT(m_ringBuffer);
if (!m_ringBuffer)
@@ -103,7 +103,7 @@
m_description = description;
- if (handle.isNull()) {
+ if (ipcHandle.handle.isNull()) {
m_ringBuffer->deallocate();
storage().setReadOnly(false);
storage().setStorage(nullptr);
@@ -110,7 +110,7 @@
return;
}
- auto memory = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ auto memory = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
storage().setStorage(WTFMove(memory));
storage().setReadOnly(true);
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -56,7 +56,7 @@
void stop();
void clear();
void setVolume(float);
- void audioSamplesStorageChanged(const SharedMemory::Handle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
+ void audioSamplesStorageChanged(const SharedMemory::IPCHandle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
void audioSamplesAvailable(MediaTime, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame);
SharedRingBufferStorage& storage();
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.messages.in 2020-08-15 01:46:04 UTC (rev 265725)
@@ -30,7 +30,7 @@
SetVolume(float value)
- AudioSamplesStorageChanged(WebKit::SharedMemory::Handle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
+ AudioSamplesStorageChanged(WebKit::SharedMemory::IPCHandle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
AudioSamplesAvailable(MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
}
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -64,7 +64,7 @@
return static_cast<SharedRingBufferStorage&>(m_ringBuffer->storage());
}
-void RemoteMediaRecorder::audioSamplesStorageChanged(const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
+void RemoteMediaRecorder::audioSamplesStorageChanged(const SharedMemory::IPCHandle& ipcHandle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
{
ASSERT(m_ringBuffer);
if (!m_ringBuffer)
@@ -72,7 +72,7 @@
m_description = description;
- if (handle.isNull()) {
+ if (ipcHandle.handle.isNull()) {
m_ringBuffer->deallocate();
storage().setReadOnly(false);
storage().setStorage(nullptr);
@@ -79,7 +79,7 @@
return;
}
- auto memory = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ auto memory = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
storage().setStorage(WTFMove(memory));
storage().setReadOnly(true);
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -63,7 +63,7 @@
RemoteMediaRecorder(GPUConnectionToWebProcess&, MediaRecorderIdentifier, Ref<WebCore::MediaRecorderPrivateWriter>&&, bool recordAudio);
// IPC::MessageReceiver
- void audioSamplesStorageChanged(const SharedMemory::Handle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
+ void audioSamplesStorageChanged(const SharedMemory::IPCHandle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
void audioSamplesAvailable(MediaTime, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame);
void videoSampleAvailable(WebCore::RemoteVideoSample&&);
void fetchData(CompletionHandler<void(IPC::DataReference&&, const String& mimeType)>&&);
Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.messages.in (265724 => 265725)
--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.messages.in 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.messages.in 2020-08-15 01:46:04 UTC (rev 265725)
@@ -24,7 +24,7 @@
#if PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(MEDIA_STREAM) && HAVE(AVASSETWRITERDELEGATE)
messages -> RemoteMediaRecorder NotRefCounted {
- AudioSamplesStorageChanged(WebKit::SharedMemory::Handle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
+ AudioSamplesStorageChanged(WebKit::SharedMemory::IPCHandle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
AudioSamplesAvailable(MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
VideoSampleAvailable(WebCore::RemoteVideoSample sample)
FetchData() -> (IPC::DataReference buffer, String mimeType) Async
Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWOriginStore.cpp (265724 => 265725)
--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWOriginStore.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWOriginStore.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -87,7 +87,12 @@
if (!m_store.createSharedMemoryHandle(handle))
return;
- connection.send(Messages::WebSWClientConnection::SetSWOriginTableSharedMemory(handle));
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ connection.send(Messages::WebSWClientConnection::SetSWOriginTableSharedMemory(SharedMemory::IPCHandle { WTFMove(handle), dataSize }));
}
void WebSWOriginStore::didInvalidateSharedMemory()
Modified: trunk/Source/WebKit/Platform/SharedMemory.h (265724 => 265725)
--- trunk/Source/WebKit/Platform/SharedMemory.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Platform/SharedMemory.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -79,9 +79,6 @@
void clear();
- void encode(IPC::Encoder&) const;
- static WARN_UNUSED_RETURN bool decode(IPC::Decoder&, Handle&);
-
#if USE(UNIX_DOMAIN_SOCKETS)
IPC::Attachment releaseAttachment() const;
void adoptAttachment(IPC::Attachment&&);
Modified: trunk/Source/WebKit/Platform/cocoa/SharedMemoryCocoa.cpp (265724 => 265725)
--- trunk/Source/WebKit/Platform/cocoa/SharedMemoryCocoa.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Platform/cocoa/SharedMemoryCocoa.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -88,31 +88,6 @@
m_size = 0;
}
-void SharedMemory::Handle::encode(IPC::Encoder& encoder) const
-{
- encoder << static_cast<uint64_t>(m_size);
- encoder << IPC::MachPort(m_port, MACH_MSG_TYPE_MOVE_SEND);
- m_port = MACH_PORT_NULL;
-}
-
-bool SharedMemory::Handle::decode(IPC::Decoder& decoder, Handle& handle)
-{
- ASSERT(!handle.m_port);
- ASSERT(!handle.m_size);
-
- uint64_t size;
- if (!decoder.decode(size))
- return false;
-
- IPC::MachPort machPort;
- if (!decoder.decode(machPort))
- return false;
-
- handle.m_size = size;
- handle.m_port = machPort.port();
- return true;
-}
-
void SharedMemory::IPCHandle::encode(IPC::Encoder& encoder) const
{
encoder << static_cast<uint64_t>(handle.m_size);
Modified: trunk/Source/WebKit/Platform/unix/SharedMemoryUnix.cpp (265724 => 265725)
--- trunk/Source/WebKit/Platform/unix/SharedMemoryUnix.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Platform/unix/SharedMemoryUnix.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -88,23 +88,6 @@
return true;
}
-void SharedMemory::Handle::encode(IPC::Encoder& encoder) const
-{
- encoder << releaseAttachment();
-}
-
-bool SharedMemory::Handle::decode(IPC::Decoder& decoder, Handle& handle)
-{
- ASSERT_ARG(handle, handle.isNull());
-
- IPC::Attachment attachment;
- if (!decoder.decode(attachment))
- return false;
-
- handle.adoptAttachment(WTFMove(attachment));
- return true;
-}
-
IPC::Attachment SharedMemory::Handle::releaseAttachment() const
{
return WTFMove(m_attachment);
Modified: trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp (265724 => 265725)
--- trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -103,18 +103,6 @@
return true;
}
-void SharedMemory::Handle::encode(IPC::Encoder& encoder) const
-{
- encoder << static_cast<uint64_t>(m_size);
-
- encodeHandle(encoder, m_handle);
-
- // Hand off ownership of our HANDLE to the receiving process. It will close it for us.
- // FIXME: If the receiving process crashes before it receives the memory, the memory will be
- // leaked. See <http://webkit.org/b/47502>.
- m_handle = 0;
-}
-
void SharedMemory::Handle::encodeHandle(IPC::Encoder& encoder, HANDLE handle)
{
encoder << reinterpret_cast<uint64_t>(handle);
@@ -151,24 +139,6 @@
return success;
}
-bool SharedMemory::Handle::decode(IPC::Decoder& decoder, Handle& handle)
-{
- ASSERT_ARG(handle, !handle.m_handle);
- ASSERT_ARG(handle, !handle.m_size);
-
- uint64_t size;
- if (!decoder.decode(size))
- return false;
-
- auto processSpecificHandle = decodeHandle(decoder);
- if (!processSpecificHandle)
- return false;
-
- handle.m_handle = processSpecificHandle.value();
- handle.m_size = size;
- return true;
-}
-
Optional<HANDLE> SharedMemory::Handle::decodeHandle(IPC::Decoder& decoder)
{
uint64_t sourceHandle;
Modified: trunk/Source/WebKit/Shared/ShareableBitmap.cpp (265724 => 265725)
--- trunk/Source/WebKit/Shared/ShareableBitmap.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Shared/ShareableBitmap.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -43,7 +43,8 @@
void ShareableBitmap::Handle::encode(IPC::Encoder& encoder) const
{
- encoder << m_handle;
+ SharedMemory::IPCHandle ipcHandle(WTFMove(m_handle), numBytesForSize(m_size, m_configuration).unsafeGet());
+ encoder << ipcHandle;
encoder << m_size;
encoder << m_configuration;
}
@@ -50,7 +51,8 @@
bool ShareableBitmap::Handle::decode(IPC::Decoder& decoder, Handle& handle)
{
- if (!decoder.decode(handle.m_handle))
+ SharedMemory::IPCHandle ipcHandle;
+ if (!decoder.decode(ipcHandle))
return false;
if (!decoder.decode(handle.m_size))
return false;
@@ -58,6 +60,8 @@
return false;
if (!decoder.decode(handle.m_configuration))
return false;
+
+ handle.m_handle = WTFMove(ipcHandle.handle);
return true;
}
Modified: trunk/Source/WebKit/Shared/ShareableResource.cpp (265724 => 265725)
--- trunk/Source/WebKit/Shared/ShareableResource.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Shared/ShareableResource.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -40,19 +40,20 @@
void ShareableResource::Handle::encode(IPC::Encoder& encoder) const
{
- encoder << m_handle;
+ encoder << SharedMemory::IPCHandle { WTFMove(m_handle), m_size };
encoder << m_offset;
- encoder << m_size;
}
bool ShareableResource::Handle::decode(IPC::Decoder& decoder, Handle& handle)
{
- if (!decoder.decode(handle.m_handle))
+ SharedMemory::IPCHandle ipcHandle;
+ if (!decoder.decode(ipcHandle))
return false;
if (!decoder.decode(handle.m_offset))
return false;
- if (!decoder.decode(handle.m_size))
- return false;
+
+ handle.m_size = ipcHandle.dataSize;
+ handle.m_handle = WTFMove(ipcHandle.handle);
return true;
}
Modified: trunk/Source/WebKit/Shared/WebCompiledContentRuleListData.cpp (265724 => 265725)
--- trunk/Source/WebKit/Shared/WebCompiledContentRuleListData.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Shared/WebCompiledContentRuleListData.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -38,7 +38,14 @@
{
SharedMemory::Handle handle;
data->createHandle(handle, SharedMemory::Protection::ReadOnly);
- encoder << handle;
+
+ // FIXME: Add the exact data size being sent over IPC to the WebCompiledContentRuleListData() constructor to be encoded here.
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ encoder << SharedMemory::IPCHandle { WTFMove(handle), dataSize };
encoder << conditionsApplyOnlyToDomainOffset;
encoder << actionsOffset;
@@ -53,10 +60,10 @@
Optional<WebCompiledContentRuleListData> WebCompiledContentRuleListData::decode(IPC::Decoder& decoder)
{
- SharedMemory::Handle handle;
- if (!decoder.decode(handle))
+ SharedMemory::IPCHandle ipcHandle;
+ if (!decoder.decode(ipcHandle))
return WTF::nullopt;
- RefPtr<SharedMemory> data = "" SharedMemory::Protection::ReadOnly);
+ RefPtr<SharedMemory> data = "" SharedMemory::Protection::ReadOnly);
Optional<unsigned> conditionsApplyOnlyToDomainOffset;
decoder >> conditionsApplyOnlyToDomainOffset;
Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (265724 => 265725)
--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -140,10 +140,10 @@
encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(element.segment->data()), element.segment->size(), 1);
#else
SharedMemory::Handle handle;
- auto sharedMemoryBuffer = SharedMemory::allocate(buffer->size());
- memcpy(sharedMemoryBuffer->data(), buffer->data(), buffer->size());
+ auto sharedMemoryBuffer = SharedMemory::allocate(bufferSize);
+ memcpy(sharedMemoryBuffer->data(), buffer->data(), bufferSize);
sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly);
- encoder << handle;
+ encoder << SharedMemory::IPCHandle { WTFMove(handle), bufferSize };
#endif
}
@@ -167,15 +167,11 @@
buffer = SharedBuffer::create(WTFMove(data));
#else
- SharedMemory::Handle handle;
- if (!decoder.decode(handle))
+ SharedMemory::IPCHandle ipcHandle;
+ if (!decoder.decode(ipcHandle))
return false;
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- if (bufferSize > handle.size())
- return false;
-
- auto sharedMemoryBuffer = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemoryBuffer = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryBuffer)
return false;
Modified: trunk/Source/WebKit/Shared/WebHitTestResultData.cpp (265724 => 265725)
--- trunk/Source/WebKit/Shared/WebHitTestResultData.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/Shared/WebHitTestResultData.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -120,9 +120,9 @@
WebKit::SharedMemory::Handle imageHandle;
if (imageSharedMemory && imageSharedMemory->data())
imageSharedMemory->createHandle(imageHandle, WebKit::SharedMemory::Protection::ReadOnly);
- encoder << imageHandle;
- encoder << imageSize;
+ encoder << WebKit::SharedMemory::IPCHandle { WTFMove(imageHandle), imageSize };
+
bool hasLinkTextIndicator = linkTextIndicator;
encoder << hasLinkTextIndicator;
if (hasLinkTextIndicator)
@@ -152,22 +152,21 @@
|| !decoder.decode(hitTestResultData.dictionaryPopupInfo))
return false;
- WebKit::SharedMemory::Handle imageHandle;
+ WebKit::SharedMemory::IPCHandle imageHandle;
if (!decoder.decode(imageHandle))
return false;
- if (!imageHandle.isNull())
- hitTestResultData.imageSharedMemory = WebKit::SharedMemory::map(imageHandle, WebKit::SharedMemory::Protection::ReadOnly);
-
- if (!decoder.decode(hitTestResultData.imageSize))
- return false;
-
- if (hitTestResultData.imageSharedMemory) {
- // SharedMemory:size() is rounded up to the nearest page.
- if (hitTestResultData.imageSize > hitTestResultData.imageSharedMemory->size())
+ hitTestResultData.imageSize = imageHandle.dataSize;
+ if (imageHandle.handle.isNull()) {
+ if (hitTestResultData.imageSize)
return false;
- } else if (hitTestResultData.imageSize)
- return false;
+ } else {
+ hitTestResultData.imageSharedMemory = WebKit::SharedMemory::map(imageHandle.handle, WebKit::SharedMemory::Protection::ReadOnly);
+ if (!hitTestResultData.imageSharedMemory)
+ return false;
+ if (!hitTestResultData.imageSize)
+ return false;
+ }
bool hasLinkTextIndicator;
if (!decoder.decode(hasLinkTextIndicator))
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (265724 => 265725)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -202,7 +202,14 @@
SharedMemory::Handle handle;
if (storage)
storage->createHandle(handle, SharedMemory::Protection::ReadOnly);
- m_connection->send(Messages::RemoteCaptureSampleManager::AudioStorageChanged(m_id, handle, m_description, m_numberOfFrames), 0);
+
+ // FIXME: Send the actual data size with IPCHandle.
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ m_connection->send(Messages::RemoteCaptureSampleManager::AudioStorageChanged(m_id, SharedMemory::IPCHandle { WTFMove(handle), dataSize }, m_description, m_numberOfFrames), 0);
}
bool preventSourceFromStopping()
Modified: trunk/Source/WebKit/UIProcess/VisitedLinkStore.cpp (265724 => 265725)
--- trunk/Source/WebKit/UIProcess/VisitedLinkStore.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/UIProcess/VisitedLinkStore.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -118,7 +118,13 @@
if (!m_linkHashStore.createSharedMemoryHandle(handle))
return;
- process.send(Messages::VisitedLinkTableController::SetVisitedLinkTable(handle), identifier());
+ // FIXME: Get the actual size of data being sent from m_linkHashStore and send it in the SharedMemory::IPCHandle object.
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ process.send(Messages::VisitedLinkTableController::SetVisitedLinkTable(SharedMemory::IPCHandle { WTFMove(handle), dataSize }), identifier());
}
void VisitedLinkStore::didInvalidateSharedMemory()
Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioBusData.h (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioBusData.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteAudioBusData.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -46,7 +46,7 @@
for (size_t i = 0; i < channelBuffers.size(); ++i) {
SharedMemory::Handle handle;
channelBuffers[i]->createHandle(handle, SharedMemory::Protection::ReadWrite);
- encoder << handle;
+ encoder << SharedMemory::IPCHandle { WTFMove(handle), channelBuffers[i]->size() };
}
}
@@ -63,11 +63,13 @@
return false;
for (size_t i = 0; i < size; ++i) {
- SharedMemory::Handle handle;
- if (!decoder.decode(handle))
+ SharedMemory::IPCHandle ipcHandle;
+ if (!decoder.decode(ipcHandle))
return false;
- if (auto memory = SharedMemory::map(handle, SharedMemory::Protection::ReadWrite))
+ if (auto memory = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadWrite))
result.channelBuffers.append(memory.releaseNonNull());
+ else
+ return false;
}
return true;
Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRenderer.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -106,7 +106,14 @@
SharedMemory::Handle handle;
if (storage)
storage->createHandle(handle, SharedMemory::Protection::ReadOnly);
- m_connection->send(Messages::RemoteAudioMediaStreamTrackRenderer::AudioSamplesStorageChanged { handle, m_description, static_cast<uint64_t>(m_numberOfFrames) }, m_identifier);
+
+ // FIXME: Send the actual data size with IPCHandle.
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ m_connection->send(Messages::RemoteAudioMediaStreamTrackRenderer::AudioSamplesStorageChanged { SharedMemory::IPCHandle { WTFMove(handle), dataSize }, m_description, static_cast<uint64_t>(m_numberOfFrames) }, m_identifier);
}
}
Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -113,7 +113,14 @@
SharedMemory::Handle handle;
if (storage)
storage->createHandle(handle, SharedMemory::Protection::ReadOnly);
- m_connection->send(Messages::RemoteMediaRecorder::AudioSamplesStorageChanged { handle, m_description, static_cast<uint64_t>(m_numberOfFrames) }, m_identifier);
+
+ // FIXME: Send the actual data size with IPCHandle.
+#if OS(DARWIN) || OS(WINDOWS)
+ uint64_t dataSize = handle.size();
+#else
+ uint64_t dataSize = 0;
+#endif
+ m_connection->send(Messages::RemoteMediaRecorder::AudioSamplesStorageChanged { SharedMemory::IPCHandle { WTFMove(handle), dataSize }, m_description, static_cast<uint64_t>(m_numberOfFrames) }, m_identifier);
}
void MediaRecorderPrivate::fetchData(CompletionHandler<void(RefPtr<WebCore::SharedBuffer>&&, const String& mimeType)>&& completionHandler)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -133,9 +133,9 @@
return m_swOriginTable->contains(origin);
}
-void WebSWClientConnection::setSWOriginTableSharedMemory(const SharedMemory::Handle& handle)
+void WebSWClientConnection::setSWOriginTableSharedMemory(const SharedMemory::IPCHandle& ipcHandle)
{
- m_swOriginTable->setSharedMemory(handle);
+ m_swOriginTable->setSharedMemory(ipcHandle.handle);
}
void WebSWClientConnection::setSWOriginTableIsImported()
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -98,7 +98,7 @@
IPC::Connection* messageSenderConnection() const final;
uint64_t messageSenderDestinationID() const final { return 0; }
- void setSWOriginTableSharedMemory(const SharedMemory::Handle&);
+ void setSWOriginTableSharedMemory(const SharedMemory::IPCHandle&);
void setSWOriginTableIsImported();
void clear();
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in 2020-08-15 01:46:04 UTC (rev 265725)
@@ -35,7 +35,7 @@
NotifyClientsOfControllerChange(HashSet<WebCore::DocumentIdentifier> contextIdentifiers, struct WebCore::ServiceWorkerData newController)
SetSWOriginTableIsImported()
- SetSWOriginTableSharedMemory(WebKit::SharedMemory::Handle handle)
+ SetSWOriginTableSharedMemory(WebKit::SharedMemory::IPCHandle handle)
PostMessageToServiceWorkerClient(WebCore::DocumentIdentifier destinationContextIdentifier, struct WebCore::MessageWithMessagePorts message, struct WebCore::ServiceWorkerData source, String sourceOrigin)
DidMatchRegistration(uint64_t matchRequestIdentifier, Optional<WebCore::ServiceWorkerRegistrationData> data)
Modified: trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.cpp (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -84,9 +84,9 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::VisitedLinkStore::AddVisitedLinkHashFromPage(webPage.webPageProxyIdentifier(), linkHash), m_identifier);
}
-void VisitedLinkTableController::setVisitedLinkTable(const SharedMemory::Handle& handle)
+void VisitedLinkTableController::setVisitedLinkTable(const SharedMemory::IPCHandle& ipcHandle)
{
- auto sharedMemory = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemory = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemory)
return;
Modified: trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.h (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -47,7 +47,7 @@
// IPC::MessageReceiver.
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
- void setVisitedLinkTable(const SharedMemory::Handle&);
+ void setVisitedLinkTable(const SharedMemory::IPCHandle&);
void visitedLinkStateChanged(const Vector<WebCore::SharedStringHash>&);
void allVisitedLinkStateChanged();
void removeAllVisitedLinks();
Modified: trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in 2020-08-15 01:46:04 UTC (rev 265725)
@@ -21,7 +21,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
messages -> VisitedLinkTableController {
- SetVisitedLinkTable(WebKit::SharedMemory::Handle handle)
+ SetVisitedLinkTable(WebKit::SharedMemory::IPCHandle ipcHandle)
VisitedLinkStateChanged(Vector<WebCore::SharedStringHash> linkHashes)
AllVisitedLinkStateChanged()
RemoveAllVisitedLinks()
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp 2020-08-15 01:46:04 UTC (rev 265725)
@@ -87,7 +87,7 @@
m_queue->dispatch(WTFMove(callback));
}
-void RemoteCaptureSampleManager::audioStorageChanged(WebCore::RealtimeMediaSourceIdentifier identifier, const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
+void RemoteCaptureSampleManager::audioStorageChanged(WebCore::RealtimeMediaSourceIdentifier identifier, const SharedMemory::IPCHandle& ipcHandle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
{
ASSERT(!WTF::isMainRunLoop());
@@ -96,7 +96,7 @@
RELEASE_LOG_ERROR(WebRTC, "Unable to find source %llu for storageChanged", identifier.toUInt64());
return;
}
- iterator->value->setStorage(handle, description, numberOfFrames);
+ iterator->value->setStorage(ipcHandle.handle, description, numberOfFrames);
}
void RemoteCaptureSampleManager::audioSamplesAvailable(WebCore::RealtimeMediaSourceIdentifier identifier, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h 2020-08-15 01:46:04 UTC (rev 265725)
@@ -55,7 +55,7 @@
void dispatchToThread(Function<void()>&&) final;
// Messages
- void audioStorageChanged(WebCore::RealtimeMediaSourceIdentifier, const SharedMemory::Handle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
+ void audioStorageChanged(WebCore::RealtimeMediaSourceIdentifier, const SharedMemory::IPCHandle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
void audioSamplesAvailable(WebCore::RealtimeMediaSourceIdentifier, MediaTime, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame);
void setConnection(IPC::Connection*);
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in (265724 => 265725)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in 2020-08-15 01:24:02 UTC (rev 265724)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in 2020-08-15 01:46:04 UTC (rev 265725)
@@ -24,7 +24,7 @@
#if ENABLE(MEDIA_STREAM)
messages -> RemoteCaptureSampleManager NotRefCounted {
- AudioStorageChanged(WebCore::RealtimeMediaSourceIdentifier id, WebKit::SharedMemory::Handle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
+ AudioStorageChanged(WebCore::RealtimeMediaSourceIdentifier id, WebKit::SharedMemory::IPCHandle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
AudioSamplesAvailable(WebCore::RealtimeMediaSourceIdentifier id, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)
}