Title: [289680] trunk/Source/WebKit
Revision
289680
Author
[email protected]
Date
2022-02-11 16:42:00 -0800 (Fri, 11 Feb 2022)

Log Message

[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:

Modified Paths

Diff

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);
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to