Diff
Modified: trunk/Source/WebKit/ChangeLog (265701 => 265702)
--- trunk/Source/WebKit/ChangeLog 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/ChangeLog 2020-08-14 20:41:11 UTC (rev 265702)
@@ -1,3 +1,57 @@
+2020-08-14 Kate Cheney <katherine_che...@apple.com>
+
+ Convert SharedMemory::Handle to SharedMemory::IPCHandle WebPage image/pasteboard functions
+ https://bugs.webkit.org/show_bug.cgi?id=215478
+ <rdar://problem/67024582>
+
+ Reviewed by Chris Dumez.
+
+ Convert SharedMemory::Handle objects to SharedMemory::IPCHandle
+ objects which automatically verify the size of data being sent.
+
+ We can remove the additional size parameter being sent in many IPC
+ messages along with the handle, now that both are stored in the
+ IPCHandle struct.
+
+ * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+ (WebKit::WebPageProxy::setPromisedDataForImage):
+ * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
+ (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
+ No longer need size check, this is done in the IPCHandle::decode()
+ function.
+ (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
+ (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/WebPasteboardProxy.cpp:
+ (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
+ * UIProcess/WebPasteboardProxy.h:
+ * UIProcess/WebPasteboardProxy.messages.in:
+ * UIProcess/ios/WebPageProxyIOS.mm:
+ (WebKit::WebPageProxy::saveImageToLibrary):
+ * UIProcess/mac/WebPageProxyMac.mm:
+ (WebKit::WebPageProxy::dataSelectionForPasteboard):
+ No longer need size check, this is done in the IPCHandle::decode()
+ function.
+ (WebKit::WebPageProxy::setPromisedDataForImage):
+ * WebProcess/Plugins/PDF/PDFPlugin.mm:
+ (WebKit::PDFPlugin::writeItemsToPasteboard):
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebKit::WebPlatformStrategies::bufferForType):
+ (WebKit::WebPlatformStrategies::setBufferForType):
+ (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
+ No longer need size check, this is done in the IPCHandle::decode()
+ function.
+ * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
+ (WebKit::WebDragClient::declareAndWriteDragImage):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::getDataSelectionForPasteboard):
+ (WebKit::WebPage::performActionOnElement):
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::getDataSelectionForPasteboard):
+
2020-08-14 Wenson Hsieh <wenson_hs...@apple.com>
Unreviewed, revert r265213 and r265441
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -217,7 +217,7 @@
// FIXME: Move these functions to WebPageProxyIOS.mm.
#if PLATFORM(IOS_FAMILY)
-void WebPageProxy::setPromisedDataForImage(const String&, const SharedMemory::Handle&, uint64_t, const String&, const String&, const String&, const String&, const String&, const SharedMemory::Handle&, uint64_t)
+void WebPageProxy::setPromisedDataForImage(const String&, const SharedMemory::IPCHandle&, const String&, const String&, const String&, const String&, const String&, const SharedMemory::IPCHandle&)
{
notImplemented();
}
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -195,26 +195,26 @@
completionHandler(PlatformPasteboard(pasteboardName).allStringsForType(pasteboardType));
}
-void WebPasteboardProxy::getPasteboardBufferForType(IPC::Connection& connection, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(SharedMemory::Handle&&, uint64_t)>&& completionHandler)
+void WebPasteboardProxy::getPasteboardBufferForType(IPC::Connection& connection, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
- MESSAGE_CHECK_COMPLETION(!pasteboardType.isEmpty(), completionHandler({ }, 0));
+ MESSAGE_CHECK_COMPLETION(!pasteboardType.isEmpty(), completionHandler({ }));
if (!canAccessPasteboardData(connection, pasteboardName))
- return completionHandler({ }, 0);
+ return completionHandler({ });
RefPtr<SharedBuffer> buffer = PlatformPasteboard(pasteboardName).bufferForType(pasteboardType);
if (!buffer)
- return completionHandler({ }, 0);
+ return completionHandler({ });
uint64_t size = buffer->size();
if (!size)
- return completionHandler({ }, 0);
+ return completionHandler({ });
RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);
if (!sharedMemoryBuffer)
- return completionHandler({ }, 0);
+ return completionHandler({ });
memcpy(sharedMemoryBuffer->data(), buffer->data(), size);
SharedMemory::Handle handle;
sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly);
- completionHandler(WTFMove(handle), size);
+ completionHandler(SharedMemory::IPCHandle { WTFMove(handle), size });
}
void WebPasteboardProxy::getPasteboardChangeCount(const String& pasteboardName, CompletionHandler<void(int64_t)>&& completionHandler)
@@ -319,25 +319,22 @@
completionHandler(WTFMove(urlString), WTFMove(title));
}
-void WebPasteboardProxy::setPasteboardBufferForType(IPC::Connection& connection, const String& pasteboardName, const String& pasteboardType, const SharedMemory::Handle& handle, uint64_t size, CompletionHandler<void(int64_t)>&& completionHandler)
+void WebPasteboardProxy::setPasteboardBufferForType(IPC::Connection& connection, const String& pasteboardName, const String& pasteboardType, const SharedMemory::IPCHandle& ipcHandle, CompletionHandler<void(int64_t)>&& completionHandler)
{
MESSAGE_CHECK_COMPLETION(!pasteboardName.isEmpty(), completionHandler(0));
MESSAGE_CHECK_COMPLETION(!pasteboardType.isEmpty(), completionHandler(0));
auto previousChangeCount = PlatformPasteboard(pasteboardName).changeCount();
- if (handle.isNull()) {
+ if (ipcHandle.handle.isNull()) {
auto newChangeCount = PlatformPasteboard(pasteboardName).setBufferForType(nullptr, pasteboardType);
didModifyContentsOfPasteboard(connection, pasteboardName, previousChangeCount, newChangeCount);
return completionHandler(newChangeCount);
}
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- MESSAGE_CHECK_COMPLETION(size <= handle.size(), completionHandler(0));
-
- RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryBuffer)
return completionHandler(0);
- auto buffer = SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), static_cast<size_t>(size));
+ auto buffer = SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), static_cast<size_t>(ipcHandle.dataSize));
auto newChangeCount = PlatformPasteboard(pasteboardName).setBufferForType(buffer.ptr(), pasteboardType);
didModifyContentsOfPasteboard(connection, pasteboardName, previousChangeCount, newChangeCount);
completionHandler(newChangeCount);
@@ -415,26 +412,26 @@
completionHandler(WTFMove(url), WTFMove(title));
}
-void WebPasteboardProxy::readBufferFromPasteboard(IPC::Connection& connection, size_t index, const String& pasteboardType, const String& pasteboardName, CompletionHandler<void(SharedMemory::Handle&&, uint64_t size)>&& completionHandler)
+void WebPasteboardProxy::readBufferFromPasteboard(IPC::Connection& connection, size_t index, const String& pasteboardType, const String& pasteboardName, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
- MESSAGE_CHECK_COMPLETION(!pasteboardType.isEmpty(), completionHandler({ }, 0));
+ MESSAGE_CHECK_COMPLETION(!pasteboardType.isEmpty(), completionHandler({ }));
if (!canAccessPasteboardData(connection, pasteboardName))
- return completionHandler({ }, 0);
+ return completionHandler({ });
RefPtr<SharedBuffer> buffer = PlatformPasteboard(pasteboardName).readBuffer(index, pasteboardType);
if (!buffer)
- return completionHandler({ }, 0);
+ return completionHandler({ });
uint64_t size = buffer->size();
if (!size)
- return completionHandler({ }, 0);
+ return completionHandler({ });
RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);
if (!sharedMemoryBuffer)
- return completionHandler({ }, 0);
+ return completionHandler({ });
memcpy(sharedMemoryBuffer->data(), buffer->data(), size);
SharedMemory::Handle handle;
sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly);
- completionHandler(WTFMove(handle), size);
+ completionHandler(SharedMemory::IPCHandle { WTFMove(handle), size });
}
void WebPasteboardProxy::containsStringSafeForDOMToReadForType(IPC::Connection& connection, const String& type, const String& pasteboardName, CompletionHandler<void(bool)>&& completionHandler)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2020-08-14 20:41:11 UTC (rev 265702)
@@ -791,7 +791,7 @@
void startInteractionWithPositionInformation(const InteractionInformationAtPosition&);
void stopInteraction();
void performActionOnElement(uint32_t action);
- void saveImageToLibrary(const SharedMemory::Handle& imageHandle, uint64_t imageSize);
+ void saveImageToLibrary(const SharedMemory::IPCHandle& imageHandle);
void focusNextFocusedElement(bool isForward, CompletionHandler<void()>&& = [] { });
void setFocusedElementValue(const String&);
void setFocusedElementValueAsNumber(double);
@@ -1172,8 +1172,8 @@
void setDragCaretRect(const WebCore::IntRect&);
#if PLATFORM(COCOA)
void startDrag(const WebCore::DragItem&, const ShareableBitmap::Handle& dragImageHandle);
- void setPromisedDataForImage(const String& pasteboardName, const SharedMemory::Handle& imageHandle, uint64_t imageSize, const String& filename, const String& extension,
- const String& title, const String& url, const String& visibleURL, const SharedMemory::Handle& archiveHandle, uint64_t archiveSize);
+ void setPromisedDataForImage(const String& pasteboardName, const SharedMemory::IPCHandle& imageHandle, const String& filename, const String& extension,
+ const String& title, const String& url, const String& visibleURL, const SharedMemory::IPCHandle& archiveHandle);
#endif
#if PLATFORM(GTK)
void startDrag(WebCore::SelectionData&&, OptionSet<WebCore::DragOperation>, const ShareableBitmap::Handle& dragImage);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2020-08-14 20:41:11 UTC (rev 265702)
@@ -181,7 +181,7 @@
SelectionContextCallback(String selectedText, String beforeText, String afterText, WebKit::CallbackID callbackID)
InterpretKeyEvent(struct WebKit::EditorState state, bool isCharEvent) -> (bool handled) Synchronous
DidReceivePositionInformation(struct WebKit::InteractionInformationAtPosition information)
- SaveImageToLibrary(WebKit::SharedMemory::Handle handle, uint64_t size)
+ SaveImageToLibrary(WebKit::SharedMemory::IPCHandle handle)
ShowPlaybackTargetPicker(bool hasVideo, WebCore::IntRect elementRect, enum:uint8_t WebCore::RouteSharingPolicy policy, String routingContextUID)
CommitPotentialTapFailed()
DidNotHandleTapAsClick(WebCore::IntPoint point)
@@ -313,7 +313,7 @@
#endif
#if PLATFORM(COCOA) && ENABLE(DRAG_SUPPORT)
StartDrag(struct WebCore::DragItem dragItem, WebKit::ShareableBitmap::Handle dragImage)
- SetPromisedDataForImage(String pasteboardName, WebKit::SharedMemory::Handle imageHandle, uint64_t imageSize, String filename, String extension, String title, String url, String visibleURL, WebKit::SharedMemory::Handle archiveHandle, uint64_t archiveSize)
+ SetPromisedDataForImage(String pasteboardName, WebKit::SharedMemory::IPCHandle imageHandle, String filename, String extension, String title, String url, String visibleURL, WebKit::SharedMemory::IPCHandle archiveHandle)
#endif
#if PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
StartDrag(WebCore::SelectionData selectionData, OptionSet<WebCore::DragOperation> dragOperationMask, WebKit::ShareableBitmap::Handle dragImage)
Modified: trunk/Source/WebKit/UIProcess/WebPasteboardProxy.cpp (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/WebPasteboardProxy.cpp 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/WebPasteboardProxy.cpp 2020-08-14 20:41:11 UTC (rev 265702)
@@ -111,9 +111,9 @@
completionHandler({ }, { });
}
-void WebPasteboardProxy::readBufferFromPasteboard(IPC::Connection&, size_t, const String&, const String&, CompletionHandler<void(SharedMemory::Handle&&, uint64_t size)>&& completionHandler)
+void WebPasteboardProxy::readBufferFromPasteboard(IPC::Connection&, size_t, const String&, const String&, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
- completionHandler({ }, 0);
+ completionHandler({ });
}
#if !USE(LIBWPE)
Modified: trunk/Source/WebKit/UIProcess/WebPasteboardProxy.h (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/WebPasteboardProxy.h 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/WebPasteboardProxy.h 2020-08-14 20:41:11 UTC (rev 265702)
@@ -97,7 +97,7 @@
void getPasteboardPathnamesForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(Vector<String>&& pathnames, SandboxExtension::HandleArray&&)>&&);
void getPasteboardStringForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(String&&)>&&);
void getPasteboardStringsForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(Vector<String>&&)>&&);
- void getPasteboardBufferForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(SharedMemory::Handle&&, uint64_t)>&&);
+ void getPasteboardBufferForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, CompletionHandler<void(SharedMemory::IPCHandle&&)>&&);
void getPasteboardChangeCount(const String& pasteboardName, CompletionHandler<void(int64_t)>&&);
void getPasteboardColor(IPC::Connection&, const String& pasteboardName, CompletionHandler<void(WebCore::Color&&)>&&);
void getPasteboardURL(IPC::Connection&, const String& pasteboardName, CompletionHandler<void(const String&)>&&);
@@ -106,12 +106,12 @@
void setPasteboardURL(IPC::Connection&, const WebCore::PasteboardURL&, const String& pasteboardName, CompletionHandler<void(int64_t)>&&);
void setPasteboardColor(IPC::Connection&, const String&, const WebCore::Color&, CompletionHandler<void(int64_t)>&&);
void setPasteboardStringForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, const String&, CompletionHandler<void(int64_t)>&&);
- void setPasteboardBufferForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, const SharedMemory::Handle&, uint64_t size, CompletionHandler<void(int64_t)>&&);
+ void setPasteboardBufferForType(IPC::Connection&, const String& pasteboardName, const String& pasteboardType, const SharedMemory::IPCHandle&, CompletionHandler<void(int64_t)>&&);
#endif
void readStringFromPasteboard(IPC::Connection&, size_t index, const String& pasteboardType, const String& pasteboardName, CompletionHandler<void(String&&)>&&);
void readURLFromPasteboard(IPC::Connection&, size_t index, const String& pasteboardName, CompletionHandler<void(String&& url, String&& title)>&&);
- void readBufferFromPasteboard(IPC::Connection&, size_t index, const String& pasteboardType, const String& pasteboardName, CompletionHandler<void(SharedMemory::Handle&&, uint64_t size)>&&);
+ void readBufferFromPasteboard(IPC::Connection&, size_t index, const String& pasteboardType, const String& pasteboardName, CompletionHandler<void(SharedMemory::IPCHandle&&)>&&);
void getPasteboardItemsCount(IPC::Connection&, const String& pasteboardName, CompletionHandler<void(uint64_t)>&&);
void informationForItemAtIndex(IPC::Connection&, size_t index, const String& pasteboardName, int64_t changeCount, CompletionHandler<void(Optional<WebCore::PasteboardItemInfo>&&)>&&);
void allPasteboardItemInfo(IPC::Connection&, const String& pasteboardName, int64_t changeCount, CompletionHandler<void(Optional<Vector<WebCore::PasteboardItemInfo>>&&)>&&);
Modified: trunk/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in 2020-08-14 20:41:11 UTC (rev 265702)
@@ -36,7 +36,7 @@
GetPasteboardItemsCount(String pasteboardName) -> (uint64_t itemsCount) Synchronous WantsConnection
ReadStringFromPasteboard(uint64_t index, String pasteboardType, String pasteboardName) -> (String string) Synchronous WantsConnection
ReadURLFromPasteboard(uint64_t index, String pasteboardName) -> (String url, String title) Synchronous WantsConnection
- ReadBufferFromPasteboard(uint64_t index, String pasteboardType, String pasteboardName) -> (WebKit::SharedMemory::Handle handle, uint64_t size) Synchronous WantsConnection
+ ReadBufferFromPasteboard(uint64_t index, String pasteboardType, String pasteboardName) -> (WebKit::SharedMemory::IPCHandle handle) Synchronous WantsConnection
ContainsStringSafeForDOMToReadForType(String type, String pasteboardName) -> (bool result) Synchronous WantsConnection
#if PLATFORM(COCOA)
@@ -46,7 +46,7 @@
GetPasteboardPathnamesForType(String pasteboardName, String pasteboardType) -> (Vector<String> pathnames, WebKit::SandboxExtension::HandleArray sandboxExtensions) Synchronous WantsConnection
GetPasteboardStringForType(String pasteboardName, String pasteboardType) -> (String string) Synchronous WantsConnection
GetPasteboardStringsForType(String pasteboardName, String pasteboardType) -> (Vector<String> strings) Synchronous WantsConnection
- GetPasteboardBufferForType(String pasteboardName, String pasteboardType) -> (WebKit::SharedMemory::Handle handle, uint64_t size) Synchronous WantsConnection
+ GetPasteboardBufferForType(String pasteboardName, String pasteboardType) -> (WebKit::SharedMemory::IPCHandle handle) Synchronous WantsConnection
GetPasteboardChangeCount(String pasteboardName) -> (int64_t changeCount) Synchronous
GetPasteboardColor(String pasteboardName) -> (WebCore::Color color) Synchronous WantsConnection
GetPasteboardURL(String pasteboardName) -> (String urlString) Synchronous WantsConnection
@@ -55,7 +55,7 @@
SetPasteboardURL(struct WebCore::PasteboardURL pasteboardURL, String pasteboardName) -> (int64_t changeCount) Synchronous WantsConnection
SetPasteboardColor(String pasteboardName, WebCore::Color color) -> (int64_t changeCount) Synchronous WantsConnection
SetPasteboardStringForType(String pasteboardName, String pasteboardType, String string) -> (int64_t changeCount) Synchronous WantsConnection
- SetPasteboardBufferForType(String pasteboardName, String pasteboardType, WebKit::SharedMemory::Handle handle, uint64_t size) -> (int64_t changeCount) Synchronous WantsConnection
+ SetPasteboardBufferForType(String pasteboardName, String pasteboardType, WebKit::SharedMemory::IPCHandle handle) -> (int64_t changeCount) Synchronous WantsConnection
ContainsURLStringSuitableForLoading(String pasteboardName) -> (bool result) Synchronous WantsConnection
URLStringSuitableForLoading(String pasteboardName) -> (String url, String title) Synchronous WantsConnection
#endif
Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -666,17 +666,15 @@
m_process->send(Messages::WebPage::PerformActionOnElement(action), m_webPageID);
}
-void WebPageProxy::saveImageToLibrary(const SharedMemory::Handle& imageHandle, uint64_t imageSize)
+void WebPageProxy::saveImageToLibrary(const SharedMemory::IPCHandle& imageHandle)
{
- MESSAGE_CHECK(!imageHandle.isNull());
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- MESSAGE_CHECK(imageSize && imageSize <= imageHandle.size());
+ MESSAGE_CHECK(!imageHandle.handle.isNull());
- auto sharedMemoryBuffer = SharedMemory::map(imageHandle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemoryBuffer = SharedMemory::map(imageHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryBuffer)
return;
- auto buffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryBuffer->data()), static_cast<size_t>(imageSize));
+ auto buffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryBuffer->data()), static_cast<size_t>(imageHandle.dataSize));
pageClient().saveImageToLibrary(WTFMove(buffer));
}
Modified: trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm (265701 => 265702)
--- trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -249,15 +249,14 @@
{
if (!hasRunningProcess())
return nullptr;
- SharedMemory::Handle handle;
+
+ SharedMemory::IPCHandle ipcHandle;
uint64_t size = 0;
const Seconds messageTimeout(20);
- sendSync(Messages::WebPage::GetDataSelectionForPasteboard(pasteboardType), Messages::WebPage::GetDataSelectionForPasteboard::Reply(handle, size), messageTimeout);
- MESSAGE_CHECK_WITH_RETURN_VALUE(!handle.isNull(), nullptr);
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- MESSAGE_CHECK_WITH_RETURN_VALUE(size <= handle.size(), nullptr);
+ sendSync(Messages::WebPage::GetDataSelectionForPasteboard(pasteboardType), Messages::WebPage::GetDataSelectionForPasteboard::Reply(ipcHandle), messageTimeout);
+ MESSAGE_CHECK_WITH_RETURN_VALUE(!ipcHandle.handle.isNull(), nullptr);
- auto sharedMemoryBuffer = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemoryBuffer = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryBuffer)
return nullptr;
return SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), static_cast<size_t>(size));
@@ -283,29 +282,25 @@
#if ENABLE(DRAG_SUPPORT)
-void WebPageProxy::setPromisedDataForImage(const String& pasteboardName, const SharedMemory::Handle& imageHandle, uint64_t imageSize, const String& filename, const String& extension,
- const String& title, const String& url, const String& visibleURL, const SharedMemory::Handle& archiveHandle, uint64_t archiveSize)
+void WebPageProxy::setPromisedDataForImage(const String& pasteboardName, const SharedMemory::IPCHandle& imageHandle, const String& filename, const String& extension,
+ const String& title, const String& url, const String& visibleURL, const SharedMemory::IPCHandle& archiveHandle)
{
MESSAGE_CHECK_URL(url);
MESSAGE_CHECK_URL(visibleURL);
- MESSAGE_CHECK(!imageHandle.isNull());
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- MESSAGE_CHECK(imageSize && imageSize <= imageHandle.size());
+ MESSAGE_CHECK(!imageHandle.handle.isNull());
- auto sharedMemoryImage = SharedMemory::map(imageHandle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemoryImage = SharedMemory::map(imageHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryImage)
return;
- auto imageBuffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryImage->data()), static_cast<size_t>(imageSize));
+ auto imageBuffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryImage->data()), static_cast<size_t>(imageHandle.dataSize));
RefPtr<SharedBuffer> archiveBuffer;
- if (!archiveHandle.isNull()) {
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- MESSAGE_CHECK(archiveSize && archiveSize <= archiveHandle.size());
- auto sharedMemoryArchive = SharedMemory::map(archiveHandle, SharedMemory::Protection::ReadOnly);
+ if (!archiveHandle.handle.isNull()) {
+ auto sharedMemoryArchive = SharedMemory::map(archiveHandle.handle, SharedMemory::Protection::ReadOnly);
if (!sharedMemoryArchive)
return;
- archiveBuffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryArchive->data()), static_cast<size_t>(archiveSize));
+ archiveBuffer = SharedBuffer::create(static_cast<unsigned char*>(sharedMemoryArchive->data()), static_cast<size_t>(archiveHandle.dataSize));
}
pageClient().setPromisedDataForImage(pasteboardName, WTFMove(imageBuffer), ResourceResponseBase::sanitizeSuggestedFilename(filename), extension, title, url, visibleURL, WTFMove(archiveBuffer));
}
Modified: trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -2449,7 +2449,7 @@
RefPtr<SharedMemory> sharedMemory = SharedMemory::allocate(buffer->size());
memcpy(sharedMemory->data(), buffer->data(), buffer->size());
sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly);
- webProcess.parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::SetPasteboardBufferForType(pasteboardName, type, handle, buffer->size()), Messages::WebPasteboardProxy::SetPasteboardBufferForType::Reply(newChangeCount), 0);
+ webProcess.parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::SetPasteboardBufferForType(pasteboardName, type, SharedMemory::IPCHandle { WTFMove(handle), buffer->size() }), Messages::WebPasteboardProxy::SetPasteboardBufferForType::Reply(newChangeCount), 0);
}
}
}
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2020-08-14 20:41:11 UTC (rev 265702)
@@ -132,16 +132,12 @@
return SharedBuffer::create(WTFMove(overrideBuffer));
// Fallback to messaging the UI process for native pasteboard content.
- SharedMemory::Handle handle;
- uint64_t size { 0 };
- WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::GetPasteboardBufferForType(pasteboardName, pasteboardType), Messages::WebPasteboardProxy::GetPasteboardBufferForType::Reply(handle, size), 0);
- if (handle.isNull())
+ SharedMemory::IPCHandle ipcHandle;
+ WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::GetPasteboardBufferForType(pasteboardName, pasteboardType), Messages::WebPasteboardProxy::GetPasteboardBufferForType::Reply(ipcHandle), 0);
+ if (ipcHandle.handle.isNull())
return nullptr;
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- if (!size || size > handle.size())
- return nullptr;
- RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
- return SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), size);
+ RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
+ return SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), ipcHandle.dataSize);
}
void WebPlatformStrategies::getPathnamesForType(Vector<String>& pathnames, const String& pasteboardType, const String& pasteboardName)
@@ -216,7 +212,7 @@
}
}
int64_t newChangeCount { 0 };
- WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::SetPasteboardBufferForType(pasteboardName, pasteboardType, handle, buffer ? buffer->size() : 0), Messages::WebPasteboardProxy::SetPasteboardBufferForType::Reply(newChangeCount), 0);
+ WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::SetPasteboardBufferForType(pasteboardName, pasteboardType, SharedMemory::IPCHandle { WTFMove(handle), buffer ? buffer->size() : 0 }), Messages::WebPasteboardProxy::SetPasteboardBufferForType::Reply(newChangeCount), 0);
return newChangeCount;
}
@@ -404,21 +400,13 @@
RefPtr<WebCore::SharedBuffer> WebPlatformStrategies::readBufferFromPasteboard(size_t index, const String& pasteboardType, const String& pasteboardName)
{
- SharedMemory::Handle handle;
- uint64_t size { 0 };
- WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::ReadBufferFromPasteboard(index, pasteboardType, pasteboardName), Messages::WebPasteboardProxy::ReadBufferFromPasteboard::Reply(handle, size), 0);
- if (handle.isNull())
+ SharedMemory::IPCHandle ipcHandle;
+ WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::ReadBufferFromPasteboard(index, pasteboardType, pasteboardName), Messages::WebPasteboardProxy::ReadBufferFromPasteboard::Reply(ipcHandle), 0);
+ if (ipcHandle.handle.isNull())
return nullptr;
-#if OS(DARWIN) || OS(WINDOWS)
- // SharedMemory::Handle::size() is rounded up to the nearest page.
- if (!size || size > handle.size())
- return nullptr;
-#else
- if (!size)
- return nullptr;
-#endif
- RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(handle, SharedMemory::Protection::ReadOnly);
- return SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), size);
+
+ RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::map(ipcHandle.handle, SharedMemory::Protection::ReadOnly);
+ return SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), ipcHandle.dataSize);
}
URL WebPlatformStrategies::readURLFromPasteboard(size_t index, const String& pasteboardName, String& title)
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -181,7 +181,7 @@
filename = downloadFilename;
}
- m_page->send(Messages::WebPageProxy::SetPromisedDataForImage(pasteboardName, imageHandle, imageSize, filename, extension, title, String([[response URL] absoluteString]), WTF::userVisibleString(url), archiveHandle, archiveSize));
+ m_page->send(Messages::WebPageProxy::SetPromisedDataForImage(pasteboardName, SharedMemory::IPCHandle { WTFMove(imageHandle), imageSize }, filename, extension, title, String([[response URL] absoluteString]), WTF::userVisibleString(url), SharedMemory::IPCHandle { WTFMove(archiveHandle), archiveSize }));
}
#else
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2020-08-14 20:41:11 UTC (rev 265702)
@@ -862,7 +862,7 @@
void readSelectionFromPasteboard(const String& pasteboardName, CompletionHandler<void(bool&&)>&&);
void getStringSelectionForPasteboard(CompletionHandler<void(String&&)>&&);
- void getDataSelectionForPasteboard(const String pasteboardType, CompletionHandler<void(SharedMemory::Handle&&, uint64_t)>&&);
+ void getDataSelectionForPasteboard(const String pasteboardType, CompletionHandler<void(SharedMemory::IPCHandle&&)>&&);
void shouldDelayWindowOrderingEvent(const WebKit::WebMouseEvent&, CompletionHandler<void(bool)>&&);
void acceptsFirstMouse(int eventNumber, const WebKit::WebMouseEvent&, CompletionHandler<void(bool)>&&);
bool performNonEditingBehaviorForSelector(const String&, WebCore::KeyboardEvent*);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2020-08-14 20:41:11 UTC (rev 265702)
@@ -434,7 +434,7 @@
SetMainFrameIsScrollable(bool isScrollable)
RegisterUIProcessAccessibilityTokens(IPC::DataReference elemenToken, IPC::DataReference windowToken)
GetStringSelectionForPasteboard() -> (String stringValue) Synchronous
- GetDataSelectionForPasteboard(String pasteboardType) -> (WebKit::SharedMemory::Handle handle, uint64_t size) Synchronous
+ GetDataSelectionForPasteboard(String pasteboardType) -> (WebKit::SharedMemory::IPCHandle ipcHandle) Synchronous
ReadSelectionFromPasteboard(String pasteboardName) -> (bool result) Synchronous
#if ENABLE(SERVICE_CONTROLS)
Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -589,10 +589,10 @@
completionHandler({ });
}
-void WebPage::getDataSelectionForPasteboard(const String, CompletionHandler<void(SharedMemory::Handle&&, uint64_t)>&& completionHandler)
+void WebPage::getDataSelectionForPasteboard(const String, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
notImplemented();
- completionHandler({ }, 0);
+ completionHandler({ });
}
WKAccessibilityWebPageObject* WebPage::accessibilityRemoteObject()
@@ -3004,7 +3004,7 @@
memcpy(sharedMemoryBuffer->data(), buffer->data(), bufferSize);
SharedMemory::Handle handle;
sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly);
- send(Messages::WebPageProxy::SaveImageToLibrary(handle, bufferSize));
+ send(Messages::WebPageProxy::SaveImageToLibrary(SharedMemory::IPCHandle { WTFMove(handle), bufferSize }));
}
}
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm (265701 => 265702)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm 2020-08-14 20:27:08 UTC (rev 265701)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm 2020-08-14 20:41:11 UTC (rev 265702)
@@ -556,21 +556,21 @@
completionHandler(frame.editor().stringSelectionForPasteboard());
}
-void WebPage::getDataSelectionForPasteboard(const String pasteboardType, CompletionHandler<void(SharedMemory::Handle&&, uint64_t)>&& completionHandler)
+void WebPage::getDataSelectionForPasteboard(const String pasteboardType, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
auto& frame = m_page->focusController().focusedOrMainFrame();
if (frame.selection().isNone())
- return completionHandler({ }, 0);
+ return completionHandler({ });
RefPtr<SharedBuffer> buffer = frame.editor().dataSelectionForPasteboard(pasteboardType);
if (!buffer)
- return completionHandler({ }, 0);
+ return completionHandler({ });
uint64_t size = buffer->size();
RefPtr<SharedMemory> sharedMemoryBuffer = SharedMemory::allocate(size);
memcpy(sharedMemoryBuffer->data(), buffer->data(), size);
SharedMemory::Handle handle;
sharedMemoryBuffer->createHandle(handle, SharedMemory::Protection::ReadOnly);
- completionHandler(WTFMove(handle), size);
+ completionHandler(SharedMemory::IPCHandle { WTFMove(handle), size });
}
WKAccessibilityWebPageObject* WebPage::accessibilityRemoteObject()