[webkit-changes] [WebKit/WebKit] f10ee4: Rework ArgumentCodersCocoa to get us much closer t...

Brady Eidson noreply at github.com
Sat Nov 11 00:36:42 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f10ee49ef636c10dd181239c2b624bf85a954ebc
      https://github.com/WebKit/WebKit/commit/f10ee49ef636c10dd181239c2b624bf85a954ebc
  Author: Brady Eidson <beidson at apple.com>
  Date:   2023-11-11 (Sat, 11 Nov 2023)

  Changed paths:
    M Source/WebCore/platform/mac/SerializedPlatformDataCueMac.h
    M Source/WebCore/platform/mac/SerializedPlatformDataCueMac.mm
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources.make
    M Source/WebKit/Platform/IPC/Decoder.h
    M Source/WebKit/Scripts/generate-serializers.py
    M Source/WebKit/Scripts/webkit/tests/GeneratedSerializers.cpp
    M Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.h
    M Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm
    A Source/WebKit/Shared/Cocoa/CoreIPCArray.h
    A Source/WebKit/Shared/Cocoa/CoreIPCArray.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCCFType.h
    A Source/WebKit/Shared/Cocoa/CoreIPCCFType.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCColor.h
    A Source/WebKit/Shared/Cocoa/CoreIPCColor.serialization.in
    M Source/WebKit/Shared/Cocoa/CoreIPCData.h
    M Source/WebKit/Shared/Cocoa/CoreIPCDate.h
    A Source/WebKit/Shared/Cocoa/CoreIPCDictionary.h
    A Source/WebKit/Shared/Cocoa/CoreIPCDictionary.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCFont.h
    A Source/WebKit/Shared/Cocoa/CoreIPCFont.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.h
    A Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.mm
    A Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.h
    A Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.mm
    A Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCString.h
    A Source/WebKit/Shared/Cocoa/CoreIPCString.serialization.in
    A Source/WebKit/Shared/Cocoa/CoreIPCURL.h
    A Source/WebKit/Shared/Cocoa/CoreIPCURL.serialization.in
    M Source/WebKit/Shared/Cocoa/WebIconUtilities.mm
    M Source/WebKit/Shared/cf/CoreIPCNumber.h
    M Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Tools/TestWebKitAPI/Tests/IPC/IPCSerialization.mm

  Log Message:
  -----------
  Rework ArgumentCodersCocoa to get us much closer to generated serializers
https://bugs.webkit.org/show_bug.cgi?id=264588
rdar://118236121

Reviewed by Alex Christensen.

This changes introduces ObjC object wrappers.
Encoding an ObjC object directly creates a typed wrapper around it.

For wrappers around a type that we still do directly via ObjC (e.g. NSArray), encoding the wrapper
then ends up going down the old "encode ObjC directly" path.

This change has the following benefits:
1 - We now broadly use serialization.in files for all ObjC types.
2 - For catch-all types like SecureCoding, we can now easily break out individual types into
    their own individual wrappers with individual serialization.
3 - So it follows, over time, the complicated logic in ArgumentCodersCocoa.mm can be whittled away.
4 - Having wrappers enables us to directly serialize collection types (like NSArray) without
    relying on the existing ObjC code path

* Source/WebCore/platform/mac/SerializedPlatformDataCueMac.h:
* Source/WebCore/platform/mac/SerializedPlatformDataCueMac.mm:
(WebCore::SerializedPlatformDataCueMac::allowedClassesForNativeValues):
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/Platform/IPC/Decoder.h:
(IPC::Decoder::decodeWithAllowedClasses):
(IPC::Decoder::allowedClasses const):
* Source/WebKit/Scripts/generate-serializers.py:
(decode_type):
* Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.h:
(IPC::CoreIPCRetainPtr::CoreIPCRetainPtr):
(IPC::isObjectClassAllowed):
(IPC::decodeRequiringAllowedClasses):
(IPC::ArgumentCoder<T::encode):
(IPC::ArgumentCoder<CoreIPCRetainPtr<T>>::encode):
(IPC::ArgumentCoder<CoreIPCRetainPtr<T>>::decode):
(IPC::decodeWithAllowedClasses): Deleted.
* Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:
(IPC::typeFromObject):
(IPC::encodeObjectDirectly<NSArray>):
(IPC::decodeObjectDirectlyRequiringAllowedClasses<NSArray>):
(IPC::encodeObjectDirectly<NSDictionary>):
(IPC::id>>):
(IPC::decodeObjectDirectlyRequiringAllowedClasses<NSDictionary>):
(IPC::encodeObjectDirectly<WebCore::CocoaFont>):
(IPC::decodeObjectDirectlyRequiringAllowedClasses<WebCore::CocoaFont>):
(IPC::encodeObjectDirectly<NSObject<NSSecureCoding>>):
(IPC::shouldEnableStrictMode):
(IPC::decodeObjectDirectlyRequiringAllowedClasses<NSObject<NSSecureCoding>>):
(IPC::encodeObjectDirectly<CFTypeRef>):
(IPC::decodeObjectDirectlyRequiringAllowedClasses<CFTypeRef>):
(IPC::encodeObjectWithWrapper):
(IPC::decodeObjectFromWrapper):
(IPC::encodeArrayInternal): Deleted.
(IPC::decodeArrayInternal): Deleted.
(IPC::encodeColorInternal): Deleted.
(IPC::decodeColorInternal): Deleted.
(IPC::encodeDataInternal): Deleted.
(IPC::decodeDataInternal): Deleted.
(IPC::encodeDateInternal): Deleted.
(IPC::decodeDateInternal): Deleted.
(IPC::encodeDictionaryInternal): Deleted.
(IPC::decodeDictionaryInternal): Deleted.
(IPC::encodeFontInternal): Deleted.
(IPC::decodeFontInternal): Deleted.
(IPC::encodeNumberInternal): Deleted.
(IPC::decodeNumberInternal): Deleted.
(IPC::encodeSecureCodingInternal): Deleted.
(IPC::decodeSecureCodingInternal): Deleted.
(IPC::encodeStringInternal): Deleted.
(IPC::decodeStringInternal): Deleted.
(IPC::encodeURLInternal): Deleted.
(IPC::decodeURLInternal): Deleted.
(IPC::encodeCFInternal): Deleted.
(IPC::decodeCFInternal): Deleted.
(IPC::encodeObject): Deleted.
(IPC::decodeObject): Deleted.
* Source/WebKit/Shared/Cocoa/CoreIPCArray.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCArray::CoreIPCArray):
(WebKit::CoreIPCArray::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCArray.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCCFType.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCCFType::CoreIPCCFType):
(WebKit::CoreIPCCFType::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCCFType.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCColor.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCColor::CoreIPCColor):
(WebKit::CoreIPCColor::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCColor.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCData.h:
(WebKit::CoreIPCData::CoreIPCData):
(WebKit::CoreIPCData::toID const):
* Source/WebKit/Shared/Cocoa/CoreIPCDate.h:
(WebKit::CoreIPCDate::CoreIPCDate):
(WebKit::CoreIPCDate::toID const):
* Source/WebKit/Shared/Cocoa/CoreIPCDictionary.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCDictionary::CoreIPCDictionary):
(WebKit::CoreIPCDictionary::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCDictionary.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCFont.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCFont::CoreIPCFont):
(WebKit::CoreIPCFont::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCFont.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCData.h.
(WebKit::CoreIPCNSCFObject::CoreIPCNSCFObject):
* Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.mm: Added.
(WebKit::valueFromID):
(WebKit::CoreIPCNSCFObject::CoreIPCNSCFObject):
(WebKit::CoreIPCNSCFObject::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCNSCFObject.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCSecureCoding::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.mm: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCSecureCoding::CoreIPCSecureCoding):
* Source/WebKit/Shared/Cocoa/CoreIPCSecureCoding.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCString.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCString::CoreIPCString):
(WebKit::CoreIPCString::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCString.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/CoreIPCURL.h: Copied from Source/WebKit/Shared/Cocoa/CoreIPCDate.h.
(WebKit::CoreIPCURL::CoreIPCURL):
(WebKit::CoreIPCURL::toID):
* Source/WebKit/Shared/Cocoa/CoreIPCURL.serialization.in: Added.
* Source/WebKit/Shared/Cocoa/WebIconUtilities.mm:
* Source/WebKit/Shared/cf/CoreIPCNumber.h:
(WebKit::CoreIPCNumber::CoreIPCNumber):
(WebKit::CoreIPCNumber::toID):
* Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:
(IPC::ArgumentCoder<WebCore::SerializedPlatformDataCueValue>::encodePlatformData):
(IPC::ArgumentCoder<WebCore::SerializedPlatformDataCueValue>::decodePlatformData):
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/IPC/IPCSerialization.mm:
(TEST):

Canonical link: https://commits.webkit.org/270587@main




More information about the webkit-changes mailing list