Modified: trunk/Source/WebKit/ChangeLog (289679 => 289680)
--- trunk/Source/WebKit/ChangeLog 2022-02-11 23:54:39 UTC (rev 289679)
+++ trunk/Source/WebKit/ChangeLog 2022-02-12 00:42:00 UTC (rev 289680)
@@ -1,3 +1,20 @@
+2022-02-11 Said Abou-Hallawa <[email protected]>
+
+ [GPU Process] [CG] Add an ArgumentCoder for CFCharacterSetRef
+ https://bugs.webkit.org/show_bug.cgi?id=236507
+
+ Reviewed by Sam Weinig.
+
+ CFCharacterSetRef is used for encoding and decoding the system fonts.
+
+ * Shared/cf/ArgumentCodersCF.cpp:
+ (IPC::typeFromCFTypeRef):
+ (IPC::ArgumentCoder<CFTypeRef>::encode):
+ (IPC::ArgumentCoder<RetainPtr<CFTypeRef>>::decode):
+ (IPC::ArgumentCoder<CFCharacterSetRef>::encode):
+ (IPC::ArgumentCoder<RetainPtr<CFCharacterSetRef>>::decode):
+ * Shared/cf/ArgumentCodersCF.h:
+
2022-02-11 Megan Gardner <[email protected]>
Enable grammar checking on Mac Catalyst.
Modified: trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp (289679 => 289680)
--- trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp 2022-02-11 23:54:39 UTC (rev 289679)
+++ trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp 2022-02-12 00:42:00 UTC (rev 289680)
@@ -59,6 +59,7 @@
enum class CFType : uint8_t {
CFArray,
CFBoolean,
+ CFCharacterSet,
CFData,
CFDate,
CFDictionary,
@@ -93,6 +94,8 @@
return CFType::CFArray;
if (typeID == CFBooleanGetTypeID())
return CFType::CFBoolean;
+ if (typeID == CFCharacterSetGetTypeID())
+ return CFType::CFCharacterSet;
if (typeID == CFDataGetTypeID())
return CFType::CFData;
if (typeID == CFDateGetTypeID())
@@ -142,6 +145,9 @@
case CFType::CFBoolean:
encoder << static_cast<CFBooleanRef>(typeRef);
return;
+ case CFType::CFCharacterSet:
+ encoder << static_cast<CFCharacterSetRef>(typeRef);
+ return;
case CFType::CFData:
encoder << static_cast<CFDataRef>(typeRef);
return;
@@ -217,6 +223,13 @@
return std::nullopt;
return WTFMove(*boolean);
}
+ case CFType::CFCharacterSet: {
+ std::optional<RetainPtr<CFCharacterSetRef>> characterSet;
+ decoder >> characterSet;
+ if (!characterSet)
+ return std::nullopt;
+ return WTFMove(*characterSet);
+ }
case CFType::CFData: {
std::optional<RetainPtr<CFDataRef>> data;
decoder >> data;
@@ -399,6 +412,43 @@
}
template<typename Encoder>
+void ArgumentCoder<CFCharacterSetRef>::encode(Encoder& encoder, CFCharacterSetRef characterSet)
+{
+ auto data = "" characterSet));
+ if (!data) {
+ encoder << false;
+ return;
+ }
+
+ encoder << true << data;
+}
+
+template void ArgumentCoder<CFCharacterSetRef>::encode<Encoder>(Encoder&, CFCharacterSetRef);
+template void ArgumentCoder<CFCharacterSetRef>::encode<StreamConnectionEncoder>(StreamConnectionEncoder&, CFCharacterSetRef);
+
+std::optional<RetainPtr<CFCharacterSetRef>> ArgumentCoder<RetainPtr<CFCharacterSetRef>>::decode(Decoder& decoder)
+{
+ std::optional<bool> hasData;
+ decoder >> hasData;
+ if (!hasData)
+ return std::nullopt;
+
+ if (!*hasData)
+ return { nullptr };
+
+ std::optional<RetainPtr<CFDataRef>> data;
+ decoder >> data;
+ if (!data)
+ return std::nullopt;
+
+ auto characterSet = adoptCF(CFCharacterSetCreateWithBitmapRepresentation(nullptr, data->get()));
+ if (!characterSet)
+ return std::nullopt;
+
+ return WTFMove(characterSet);
+}
+
+template<typename Encoder>
void ArgumentCoder<CFDataRef>::encode(Encoder& encoder, CFDataRef data)
{
encoder << IPC::DataReference(CFDataGetBytePtr(data), CFDataGetLength(data));
@@ -877,6 +927,7 @@
IPC::CFType,
IPC::CFType::CFArray,
IPC::CFType::CFBoolean,
+ IPC::CFType::CFCharacterSet,
IPC::CFType::CFData,
IPC::CFType::CFDate,
IPC::CFType::CFDictionary,
Modified: trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.h (289679 => 289680)
--- trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.h 2022-02-11 23:54:39 UTC (rev 289679)
+++ trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.h 2022-02-12 00:42:00 UTC (rev 289680)
@@ -73,6 +73,13 @@
static std::optional<RetainPtr<CFBooleanRef>> decode(Decoder&);
};
+template<> struct ArgumentCoder<CFCharacterSetRef> {
+ template<typename Encoder> static void encode(Encoder&, CFCharacterSetRef);
+};
+template<> struct ArgumentCoder<RetainPtr<CFCharacterSetRef>> : CFRetainPtrArgumentCoder<CFCharacterSetRef> {
+ static std::optional<RetainPtr<CFCharacterSetRef>> decode(Decoder&);
+};
+
template<> struct ArgumentCoder<CFDataRef> {
template<typename Encoder> static void encode(Encoder&, CFDataRef);
};