Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d57023d5133d4df512b7e6ec7d4b4aa5004ce1d3
https://github.com/WebKit/WebKit/commit/d57023d5133d4df512b7e6ec7d4b4aa5004ce1d3
Author: Ruthvik Konda <[email protected]>
Date: 2026-08-05 (Wed, 05 Aug 2026)
Changed paths:
M Source/WebKit/Scripts/webkit/messages.py
M Source/WebKit/Scripts/webkit/messages_unittest.py
M Source/WebKit/Scripts/webkit/tests/Makefile
M Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp
M Source/WebKit/Scripts/webkit/tests/MessageNames.cpp
M Source/WebKit/Scripts/webkit/tests/MessageNames.h
A
Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledBy.messages.in
A
Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessageReceiver.cpp
A
Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessageReceiver.swift
A Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessages.h
A
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledBy.messages.in
A
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessageReceiver.cpp
A
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessageReceiver.swift
A
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessages.h
Log Message:
-----------
Swift IPC message receivers cannot be annotated with EnabledBy
https://bugs.webkit.org/show_bug.cgi?id=321027
rdar://184062042
Reviewed by Mike Wyrzykowski.
The IPC code generator emits a C++ message forwarder for receivers marked
SwiftReceiver or SwiftReceiverBuildEnabledBy, and that forwarder, rather than
the
receiver itself, becomes the IPC::MessageReceiver. When such a receiver is also
annotated with EnabledBy, the generated enablement check calls
sharedPreferencesForWebProcess() unqualified. That method is declared by
individual receivers rather than by the IPC machinery, and is absent from both
IPC
base classes, so it is not visible on the forwarder and the generated code fails
to compile. Both shipping Swift receivers use ExceptionForEnabledBy, which is
why
this has gone unnoticed. It blocks moving stream receivers such as RemoteMesh,
annotated EnabledBy=ModelElementEnabled, to Swift.
Have the forwarder ask its target for the preferences, and look the target up
before the enablement check so that it is available. The receiver-level gate and
the per-message gates read the same local, so this repairs both. The two
statement generators are merged into one function so that the ordering is
structural rather than a convention repeated at each of the three call sites.
Generated output for non-Swift receivers is unchanged.
A Swift receiver annotated with EnabledBy must now expose
sharedPreferencesForWebProcess() to C++. Since Swift cannot name an
un-specialized class template, std::optional<SharedPreferencesForWebProcess>
will need a named typedef, in the same way std::span<const char> already does
for
WebBackForwardList.
Covered by two new fixtures in the IPC message-generator test,
TestWithStreamSwiftEnabledBy (Stream with a receiver-level EnabledBy) and
TestWithSwiftConditionallyAndEnabledBy (SwiftReceiverBuildEnabledBy with
per-message EnabledBy).
* Source/WebKit/Scripts/webkit/messages.py:
(generate_target_and_enabled_by_statements):
(generate_target_and_enabled_by_statements.append_swift_statements):
(generate_target_and_enabled_by_statements.append_cpp_statements):
(generate_message_handler):
(generate_enabled_by_for_receiver): Deleted.
(generate_get_target_statements): Deleted.
* Source/WebKit/Scripts/webkit/messages_unittest.py:
* Source/WebKit/Scripts/webkit/tests/Makefile:
* Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
* Source/WebKit/Scripts/webkit/tests/MessageNames.cpp:
* Source/WebKit/Scripts/webkit/tests/MessageNames.h:
* Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledBy.messages.in:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessageReceiver.cpp:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessageReceiver.swift:
Added.
* Source/WebKit/Scripts/webkit/tests/TestWithStreamSwiftEnabledByMessages.h:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledBy.messages.in:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessageReceiver.cpp:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessageReceiver.swift:
Added.
*
Source/WebKit/Scripts/webkit/tests/TestWithSwiftConditionallyAndEnabledByMessages.h:
Added.
Canonical link: https://commits.webkit.org/318642@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications