diff --git b/Source/WebCore/platform/gtk/PasteboardGtk.cpp a/Source/WebCore/platform/gtk/PasteboardGtk.cpp index fbe7198..6693af0 100644 --- b/Source/WebCore/platform/gtk/PasteboardGtk.cpp +++ a/Source/WebCore/platform/gtk/PasteboardGtk.cpp @@ -315,15 +315,43 @@ void Pasteboard::read(PasteboardWebContentReader& reader, WebContentReadingPolic void Pasteboard::read(PasteboardFileReader& reader, Optional) { + WTFLogAlways("xxoo Pasteboard::read PasteboardFileReader"); if (m_selectionData) { - for (const auto& filePath : m_selectionData->filenames()) + WTFLogAlways("xxoo Pasteboard::read m_selectionData"); + for (const auto& filePath : m_selectionData->filenames()) { + WTFLogAlways("xxoo Pasteboard::read m_selectionData reader.readFilename filePath=%s", filePath.utf8().data()); reader.readFilename(filePath); + } return; } + + WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard pasteboardName=%s", m_name.utf8().data()); auto filePaths = platformStrategies()->pasteboardStrategy()->readFilePathsFromClipboard(m_name); - for (const auto& filePath : filePaths) + for (const auto& filePath : filePaths) { + WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard reader.readFilename filePath=%s", filePath.utf8().data()); reader.readFilename(filePath); + } + + if (filePaths.isEmpty()) { + WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard got no filePaths, try readBufferFromClipboard pasteboardName=%s", m_name.utf8().data()); + + auto types = platformStrategies()->pasteboardStrategy()->types(m_name); + static const ASCIILiteral imageTypes[] = { "image/png"_s, "image/jpeg"_s, "image/gif"_s, "image/bmp"_s, "image/vnd.microsoft.icon"_s, "image/x-icon"_s }; + for (const auto& imageType : imageTypes) { + if (types.contains(imageType)) { + WTFLogAlways("xxoo Pasteboard::read readBufferFromClipboard types contains imageType"); + auto buffer = platformStrategies()->pasteboardStrategy()->readBufferFromClipboard(m_name, imageType); + // readBuffer(const String&, const String& type, Ref&&) + // readImage(Ref&&, const String&, PresentationSize = { }) + if (!buffer->isEmpty()) { + reader.readBuffer(imageType, imageType, buffer.releaseNonNull()); + WTFLogAlways("xxoo Pasteboard::read reader.readBuffer success"); + return; + } + } + } + } } bool Pasteboard::hasData()