browser(webkit): replace wpe pasteboard with a hashmap (#15506)

This commit is contained in:
Yury Semikhatsky 2022-07-08 15:07:39 -07:00 коммит произвёл GitHub
Родитель b9d1a5ad69
Коммит 4b4f23fdb8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 106 добавлений и 2 удалений

Просмотреть файл

@ -1,2 +1,2 @@
1677
Changed: yurys@chromium.org Thu 07 Jul 2022 12:33:45 PM PDT
1678
Changed: yurys@chromium.org Fri 08 Jul 2022 02:52:19 PM PDT

Просмотреть файл

@ -7980,6 +7980,110 @@ index a724f126f8f389d46ba5c1a941eef76fdc59c94c..aa40f6c3ee81213074639cce1d18eb21
String PlatformKeyboardEvent::singleCharacterString(unsigned val)
{
switch (val) {
diff --git a/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp b/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
index 93db57fd75b8fcac1a745f62294e27c97e040ab0..02411ac6bb361c2677c269945f665e0a92ccb902 100644
--- a/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
+++ b/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
@@ -31,10 +31,18 @@
#include "Pasteboard.h"
#include <wpe/wpe.h>
#include <wtf/Assertions.h>
+#include <wtf/HashMap.h>
+#include <wtf/NeverDestroyed.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
+static HashMap<String, String>& sharedPasteboard()
+{
+ static NeverDestroyed<HashMap<String, String>> pasteboard;
+ return pasteboard.get();
+}
+
PlatformPasteboard::PlatformPasteboard(const String&)
: m_pasteboard(wpe_pasteboard_get_singleton())
{
@@ -54,72 +62,26 @@ void PlatformPasteboard::performAsDataOwner(DataOwnerType, Function<void()>&& ac
void PlatformPasteboard::getTypes(Vector<String>& types) const
{
- struct wpe_pasteboard_string_vector pasteboardTypes = { nullptr, 0 };
- wpe_pasteboard_get_types(m_pasteboard, &pasteboardTypes);
-
- for (unsigned i = 0; i < pasteboardTypes.length; ++i) {
- auto& typeString = pasteboardTypes.strings[i];
- types.append(String(typeString.data, typeString.length));
- }
-
- wpe_pasteboard_string_vector_free(&pasteboardTypes);
+ for (const auto& type : sharedPasteboard().keys())
+ types.append(type);
}
String PlatformPasteboard::readString(size_t, const String& type) const
{
- struct wpe_pasteboard_string string = { nullptr, 0 };
- wpe_pasteboard_get_string(m_pasteboard, type.utf8().data(), &string);
- if (!string.length)
- return String();
-
- String returnValue(string.data, string.length);
-
- wpe_pasteboard_string_free(&string);
- return returnValue;
+ return sharedPasteboard().get(type);
}
void PlatformPasteboard::write(const PasteboardWebContent& content)
{
- static const char plainText[] = "text/plain;charset=utf-8";
- static const char htmlText[] = "text/html;charset=utf-8";
-
- CString textString = content.text.utf8();
- CString markupString = content.markup.utf8();
-
- struct wpe_pasteboard_string_pair pairs[] = {
- { { nullptr, 0 }, { nullptr, 0 } },
- { { nullptr, 0 }, { nullptr, 0 } },
- };
- wpe_pasteboard_string_initialize(&pairs[0].type, plainText, strlen(plainText));
- wpe_pasteboard_string_initialize(&pairs[0].string, textString.data(), textString.length());
- wpe_pasteboard_string_initialize(&pairs[1].type, htmlText, strlen(htmlText));
- wpe_pasteboard_string_initialize(&pairs[1].string, markupString.data(), markupString.length());
- struct wpe_pasteboard_string_map map = { pairs, 2 };
-
- wpe_pasteboard_write(m_pasteboard, &map);
-
- wpe_pasteboard_string_free(&pairs[0].type);
- wpe_pasteboard_string_free(&pairs[0].string);
- wpe_pasteboard_string_free(&pairs[1].type);
- wpe_pasteboard_string_free(&pairs[1].string);
+ String plainText = "text/plain;charset=utf-8"_s;
+ String htmlText = "text/html;charset=utf-8"_s;
+ sharedPasteboard().set(plainText, content.text);
+ sharedPasteboard().set(htmlText, content.markup);
}
void PlatformPasteboard::write(const String& type, const String& string)
{
- struct wpe_pasteboard_string_pair pairs[] = {
- { { nullptr, 0 }, { nullptr, 0 } },
- };
-
- auto typeUTF8 = type.utf8();
- auto stringUTF8 = string.utf8();
- wpe_pasteboard_string_initialize(&pairs[0].type, typeUTF8.data(), typeUTF8.length());
- wpe_pasteboard_string_initialize(&pairs[0].string, stringUTF8.data(), stringUTF8.length());
- struct wpe_pasteboard_string_map map = { pairs, 1 };
-
- wpe_pasteboard_write(m_pasteboard, &map);
-
- wpe_pasteboard_string_free(&pairs[0].type);
- wpe_pasteboard_string_free(&pairs[0].string);
+ sharedPasteboard().set(type, string);
}
Vector<String> PlatformPasteboard::typesSafeForDOMToReadAndWrite(const String&) const
diff --git a/Source/WebCore/platform/network/HTTPHeaderMap.cpp b/Source/WebCore/platform/network/HTTPHeaderMap.cpp
index f169677e661510b225b899c79b68d040179a097a..420e101c7bb7a49b5c644076a8a2ffab2282d758 100644
--- a/Source/WebCore/platform/network/HTTPHeaderMap.cpp