Title: [271237] trunk/Source/WebKit
Revision
271237
Author
[email protected]
Date
2021-01-07 09:04:21 -0800 (Thu, 07 Jan 2021)

Log Message

WebKit IPC builtin messages should be part of the model
https://bugs.webkit.org/show_bug.cgi?id=220318

Patch by Kimmo Kinnunen <[email protected]> on 2021-01-07
Reviewed by Chris Dumez.

Add IPC and AsyncReply message receivers to the IPC model
so that their messages can be part of the generator dynamic logic instead of
being part of the static textual templates.

IPC receiver is a built-in message receiver that has few async messages.

AsyncReply receiver is a built-in message receiver that has one async message
for each message declared as 'Async' in any receiver.

This helps to refine features such as "is message asynchronous" more easily.

Adds new test case TestWithIfMessage to check a case that went wrong when
making the change.

Moves parsing tests to parser_unittest.py so that TestWithIfMessage does not
need to be added to the parsing tests. The said test is not intended to exercises
anything particular in the parsing.

Adds test logic for asserting MessageNames.{h,cpp} and MessageArgumentDescriptions.cpp
are as expected.

* Scripts/generate-message-receiver.py:
(main):
* Scripts/webkit/messages.py:
* Scripts/webkit/model.py:
(check_global_model_inputs):
(generate_global_model):
* Scripts/webkit/model_unittest.py:
* Scripts/webkit/tests/MessageNames.cpp:
(IPC::description):
(IPC::receiverName):
(IPC::isValidMessageName):
* Scripts/webkit/tests/MessageNames.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (271236 => 271237)


--- trunk/Source/WebKit/ChangeLog	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/ChangeLog	2021-01-07 17:04:21 UTC (rev 271237)
@@ -1,3 +1,44 @@
+2021-01-07  Kimmo Kinnunen  <[email protected]>
+
+        WebKit IPC builtin messages should be part of the model
+        https://bugs.webkit.org/show_bug.cgi?id=220318
+
+        Reviewed by Chris Dumez.
+
+        Add IPC and AsyncReply message receivers to the IPC model
+        so that their messages can be part of the generator dynamic logic instead of
+        being part of the static textual templates.
+        
+        IPC receiver is a built-in message receiver that has few async messages.
+
+        AsyncReply receiver is a built-in message receiver that has one async message
+        for each message declared as 'Async' in any receiver.
+
+        This helps to refine features such as "is message asynchronous" more easily.
+
+        Adds new test case TestWithIfMessage to check a case that went wrong when
+        making the change.
+
+        Moves parsing tests to parser_unittest.py so that TestWithIfMessage does not
+        need to be added to the parsing tests. The said test is not intended to exercises
+        anything particular in the parsing.
+
+        Adds test logic for asserting MessageNames.{h,cpp} and MessageArgumentDescriptions.cpp
+        are as expected.
+
+        * Scripts/generate-message-receiver.py:
+        (main):
+        * Scripts/webkit/messages.py:
+        * Scripts/webkit/model.py:
+        (check_global_model_inputs):
+        (generate_global_model):
+        * Scripts/webkit/model_unittest.py:
+        * Scripts/webkit/tests/MessageNames.cpp:
+        (IPC::description):
+        (IPC::receiverName):
+        (IPC::isValidMessageName):
+        * Scripts/webkit/tests/MessageNames.h:
+
 2021-01-07  Lauro Moura  <[email protected]>
 
         REGRESSION(r270425) [GTK] wheel scrolling stopped working

Modified: trunk/Source/WebKit/Scripts/generate-message-receiver.py (271236 => 271237)


--- trunk/Source/WebKit/Scripts/generate-message-receiver.py	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/generate-message-receiver.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -54,13 +54,17 @@
             sys.stderr.write("Error: %s defined in file %s/%s.messages.in instead of %s.messages.in\n" % (receiver.name, base_dir, parameter, receiver.name))
             sys.exit(1)
 
-    errors = webkit.model.check_global_model(receivers)
+    errors = webkit.model.check_global_model_inputs(receivers)
     if errors:
         for e in errors:
             sys.stderr.write("Error: %s\n" % e)
         sys.exit(1)
 
+    receivers = webkit.model.generate_global_model(receivers)
+
     for receiver in receivers:
+        if receiver.has_attribute(webkit.model.BUILTIN_ATTRIBUTE):
+            continue
         with open('%sMessageReceiver.cpp' % receiver.name, "w+") as implementation_output:
             implementation_output.write(webkit.messages.generate_message_handler(receiver))
 

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -25,6 +25,7 @@
 import sys
 
 from webkit import parser
+from webkit.model import BUILTIN_ATTRIBUTE, ASYNC_ATTRIBUTE
 
 _license_header = """/*
  * Copyright (C) 2010-2021 Apple Inc. All rights reserved.
@@ -58,8 +59,52 @@
 LEGACY_RECEIVER_ATTRIBUTE = 'LegacyReceiver'
 NOT_REFCOUNTED_RECEIVER_ATTRIBUTE = 'NotRefCounted'
 SYNCHRONOUS_ATTRIBUTE = 'Synchronous'
-ASYNC_ATTRIBUTE = 'Async'
 
+
+def receiver_enumerator_order_key(receiver_name):
+    if receiver_name == 'IPC':
+        return 1
+    elif receiver_name == 'AsyncReply':
+        return 2
+    return 0
+
+
+class MessageEnumerator(object):
+
+    def __init__(self, receiver, messages):
+        self.receiver = receiver
+        self.messages = messages
+
+    def __str__(self):
+        if self.messages[0].has_attribute(BUILTIN_ATTRIBUTE):
+            return self.messages[0].name
+        if self.receiver.name == 'AsyncReply':
+            return self.messages[0].name
+        return '%s_%s' % (self.receiver.name, self.messages[0].name)
+
+    @classmethod
+    def sort_key(cls, obj):
+        return receiver_enumerator_order_key(obj.receiver.name), str(obj)
+
+
+def get_message_enumerators(receivers):
+    enumerators = []
+    for receiver in receivers:
+        receiver_enumerators = {}
+        for message in receiver.messages:
+            if message.name not in receiver_enumerators:
+                receiver_enumerators[message.name] = MessageEnumerator(receiver, messages=[message])
+            else:
+                receiver_enumerators[message.name].messages.append(message)
+        enumerators += receiver_enumerators.values()
+    assert(len(enumerators) == len(set(enumerators)))
+    return sorted(enumerators, key=MessageEnumerator.sort_key)
+
+
+def get_receiver_enumerators(receivers):
+    return sorted((r.name for r in receivers), key=lambda n: (receiver_enumerator_order_key(n), n))
+
+
 def messages_header_filename(receiver):
     return '%sMessages.h' % receiver.name
 
@@ -911,45 +956,19 @@
     result.append('namespace IPC {\n')
     result.append('\n')
     result.append('enum class ReceiverName : uint8_t {')
-
-    enum_value = 1
-    first_receiver = True
-    for receiver in receivers:
-        result.append('\n')
-        result.append('    ')
-        if not first_receiver:
-            result.append(', ')
-        first_receiver = False
-        result.append('%s = %d' % (receiver.name, enum_value))
-        enum_value = enum_value + 1
-    result.append('\n    , IPC = %d' % enum_value)
-    enum_value = enum_value + 1
-    result.append('\n    , AsyncReply = %d' % enum_value)
-    enum_value = enum_value + 1
-    result.append('\n    , Invalid = %d' % enum_value)
+    result.append('\n    ')
+    enums = ['%s = %d' % (e, v) for v, e in enumerate(get_receiver_enumerators(receivers), 1)]
+    result.append('\n    , '.join(enums))
+    result.append('\n    , Invalid = %d' % (len(enums) + 1))
     result.append('\n};\n')
     result.append('\n')
-    result.append('enum class MessageName : uint16_t {')
 
-    enum_values = set()
-    for receiver in receivers:
-        for message in receiver.messages:
-            enum_values.add('%s_%s' % (receiver.name, message.name))
-            if message.has_attribute(ASYNC_ATTRIBUTE):
-                enum_values.add('%s_%sReply' % (receiver.name, message.name))
+    message_enumerators = get_message_enumerators(receivers)
 
-    first_message = True
-    for enum_value in sorted(enum_values):
-        result.append('\n    ')
-        if not first_message:
-            result.append(', ')
-        first_message = False
-        result.append(enum_value)
-    result.append('\n    , WrappedAsyncMessageForTesting')
-    result.append('\n    , SyncMessageReply')
-    result.append('\n    , InitializeConnection')
-    result.append('\n    , LegacySessionState')
-    result.append('\n    , Last = LegacySessionState')
+    result.append('enum class MessageName : uint16_t {')
+    result.append('\n    ')
+    result.append('\n    , '.join(str(e) for e in message_enumerators))
+    result.append('\n    , Last = %s' % message_enumerators[-1])
     result.append('\n};\n')
     result.append('\n')
     result.append('ReceiverName receiverName(MessageName);\n')
@@ -987,24 +1006,11 @@
     result.append('const char* description(MessageName name)\n')
     result.append('{\n')
     result.append('    switch (name) {\n')
-    enum_values = set()
-    for receiver in receivers:
-        for message in receiver.messages:
-            enum_values.add('%s_%s' % (receiver.name, message.name))
-            if message.has_attribute(ASYNC_ATTRIBUTE):
-                enum_values.add('%s_%sReply' % (receiver.name, message.name))
 
-    for enum_value in sorted(enum_values):
-        result.append('    case MessageName::%s:\n' % enum_value)
-        result.append('        return "%s";\n' % enum_value)
-    result.append('    case MessageName::WrappedAsyncMessageForTesting:\n')
-    result.append('        return "IPC::WrappedAsyncMessageForTesting";\n')
-    result.append('    case MessageName::SyncMessageReply:\n')
-    result.append('        return "IPC::SyncMessageReply";\n')
-    result.append('    case MessageName::InitializeConnection:\n')
-    result.append('        return "IPC::InitializeConnection";\n')
-    result.append('    case MessageName::LegacySessionState:\n')
-    result.append('        return "IPC::LegacySessionState";\n')
+    message_enumerators = get_message_enumerators(receivers)
+    for enumerator in message_enumerators:
+        result.append('    case MessageName::%s:\n' % enumerator)
+        result.append('        return "%s";\n' % enumerator)
     result.append('    }\n')
     result.append('    ASSERT_NOT_REACHED();\n')
     result.append('    return "<invalid message name>";\n')
@@ -1013,30 +1019,14 @@
     result.append('ReceiverName receiverName(MessageName messageName)\n')
     result.append('{\n')
     result.append('    switch (messageName) {\n')
-    message_receiver_map = dict()
-    async_reply_messages = set()
-    for receiver in receivers:
-        messages = set()
-        for message in receiver.messages:
-            messages.add('%s_%s' % (receiver.name, message.name))
-            if message.has_attribute(ASYNC_ATTRIBUTE):
-                async_reply_messages.add('%s_%sReply' % (receiver.name, message.name))
-        if len(messages):
-            message_receiver_map[receiver.name] = messages
-
-    for receiver_name, message_names in message_receiver_map.items():
-        for message_name in sorted(message_names):
-            result.append('    case MessageName::%s:\n' % message_name)
-        result.append('        return ReceiverName::%s;\n' % receiver_name)
-
-    for async_reply_message in sorted(async_reply_messages):
-        result.append('    case MessageName::%s:\n' % async_reply_message)
-    result.append('        return ReceiverName::AsyncReply;\n')
-    result.append('    case MessageName::WrappedAsyncMessageForTesting:\n')
-    result.append('    case MessageName::SyncMessageReply:\n')
-    result.append('    case MessageName::InitializeConnection:\n')
-    result.append('    case MessageName::LegacySessionState:\n')
-    result.append('        return ReceiverName::IPC;\n')
+    prev_enumerator = None
+    for enumerator in message_enumerators:
+        if prev_enumerator and prev_enumerator.receiver != enumerator.receiver:
+            result.append('        return ReceiverName::%s;\n' % prev_enumerator.receiver.name)
+        result.append('    case MessageName::%s:\n' % enumerator)
+        prev_enumerator = enumerator
+    if prev_enumerator:
+        result.append('        return ReceiverName::%s;\n' % prev_enumerator.receiver.name)
     result.append('    }\n')
     result.append('    ASSERT_NOT_REACHED();\n')
     result.append('    return ReceiverName::Invalid;\n')
@@ -1044,25 +1034,14 @@
     result.append('\n')
     result.append('bool isValidMessageName(MessageName messageName)\n')
     result.append('{\n')
-    for receiver in receivers:
-        for message in receiver.messages:
+    for enumerator in message_enumerators:
+        for message in enumerator.messages:
             if message.condition:
                 result.append('#if %s\n' % message.condition)
-            result.append('    if (messageName == IPC::MessageName::%s_%s)\n' % (receiver.name, message.name))
+            result.append('    if (messageName == IPC::MessageName::%s)\n' % enumerator)
             result.append('        return true;\n')
-            if message.has_attribute(ASYNC_ATTRIBUTE):
-                result.append('    if (messageName == IPC::MessageName::%s_%sReply)\n' % (receiver.name, message.name))
-                result.append('        return true;\n')
             if message.condition:
                 result.append('#endif\n')
-    result.append('    if (messageName == IPC::MessageName::WrappedAsyncMessageForTesting)\n')
-    result.append('        return true;\n')
-    result.append('    if (messageName == IPC::MessageName::SyncMessageReply)\n')
-    result.append('        return true;\n')
-    result.append('    if (messageName == IPC::MessageName::InitializeConnection)\n')
-    result.append('        return true;\n')
-    result.append('    if (messageName == IPC::MessageName::LegacySessionState)\n')
-    result.append('        return true;\n')
     result.append('    return false;\n')
     result.append('};\n')
     result.append('\n')
@@ -1075,6 +1054,8 @@
     result.append('{\n')
     result.append('    switch (name) {\n')
     for receiver in receivers:
+        if receiver.has_attribute(BUILTIN_ATTRIBUTE):
+            continue
         if receiver.condition:
             result.append('#if %s\n' % receiver.condition)
         previous_message_condition = None
@@ -1106,10 +1087,14 @@
     result.append('{\n')
     result.append('    switch (name) {\n')
     for receiver in receivers:
+        if receiver.has_attribute(BUILTIN_ATTRIBUTE):
+            continue
         if receiver.condition:
             result.append('#if %s\n' % receiver.condition)
         previous_message_condition = None
         for message in receiver.messages:
+            if message.has_attribute(BUILTIN_ATTRIBUTE):
+                continue
             argument_list = arguments_from_message(message)
             if argument_list is None:
                 continue
@@ -1155,6 +1140,8 @@
         '"JSIPCBinding.h"': [None]
     }
     for receiver in receivers:
+        if receiver.has_attribute(BUILTIN_ATTRIBUTE):
+            continue
         header_conditions['"%s"' % messages_header_filename(receiver)] = [None]
         collect_header_conditions_for_receiver(receiver, header_conditions)
 
@@ -1204,7 +1191,7 @@
                 if message.condition:
                     result.append('#if %s\n' % message.condition)
             previous_message_condition = message.condition
-            result.append('    case MessageName::%s_%s:\n' % (receiver.name, message.name))
+            result.append('    case MessageName::%s:\n' % MessageEnumerator(receiver, [message]))
             result.append('        return true;\n')
         if previous_message_condition:
             result.append('#endif\n')

Modified: trunk/Source/WebKit/Scripts/webkit/messages_unittest.py (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/messages_unittest.py	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/messages_unittest.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -30,345 +30,37 @@
 import sys
 import unittest
 
-if sys.version_info > (3, 0):
-    from io import StringIO
-else:
-    from StringIO import StringIO
-
 module_directory = os.path.dirname(os.path.abspath(__file__))
 
 sys.path.append(os.path.abspath(os.path.join(module_directory, os.path.pardir)))
-from webkit import messages
-from webkit import parser
+from webkit import messages, model, parser  # noqa: E402
 
 tests_directory = os.path.join(module_directory, 'tests')
 
 reset_results = False
 
-with open(os.path.join(tests_directory, 'TestWithoutAttributes.messages.in')) as in_file:
-    _messages_file_contents = in_file.read()
+_test_receiver_names = ['TestWithSuperclass', 'TestWithLegacyReceiver', 'TestWithoutAttributes', 'TestWithIfMessage']
 
-with open(os.path.join(tests_directory, 'TestWithLegacyReceiver.messages.in')) as in_file:
-    _legacy_messages_file_contents = in_file.read()
 
-with open(os.path.join(tests_directory, 'TestWithSuperclass.messages.in')) as in_file:
-    _superclass_messages_file_contents = in_file.read()
+def receiver_header_file_name(receiver_name):
+    return '%sMessages.h' % receiver_name
 
-_expected_receiver_header_file_name = 'TestWithoutAttributesMessages.h'
-_expected_legacy_receiver_header_file_name = 'TestWithLegacyReceiverMessages.h'
-_expected_superclass_receiver_header_file_name = 'TestWithSuperclassMessages.h'
 
-_expected_receiver_implementation_file_name = 'TestWithoutAttributesMessageReceiver.cpp'
-_expected_legacy_receiver_implementation_file_name = 'TestWithLegacyReceiverMessageReceiver.cpp'
-_expected_superclass_receiver_implementation_file_name = 'TestWithSuperclassMessageReceiver.cpp'
+def receiver_implementation_file_name(receiver_name):
+    return '%sMessageReceiver.cpp' % receiver_name
 
-_base_expected_results = {
-    'conditions': ('(ENABLE(WEBKIT2) && (NESTED_MASTER_CONDITION || MASTER_OR && MASTER_AND))'),
-    'messages': (
-        {
-            'name': 'LoadURL',
-            'parameters': (
-                ('String', 'url'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'LoadSomething',
-            'parameters': (
-                ('String', 'url'),
-            ),
-            'conditions': ('ENABLE(TOUCH_EVENTS)'),
-        },
-        {
-            'name': 'TouchEvent',
-            'parameters': (
-                ('WebKit::WebTouchEvent', 'event'),
-            ),
-            'conditions': ('(ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))'),
-        },
-        {
-            'name': 'AddEvent',
-            'parameters': (
-                ('WebKit::WebTouchEvent', 'event'),
-            ),
-            'conditions': ('(ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))'),
-        },
-        {
-            'name': 'LoadSomethingElse',
-            'parameters': (
-                ('String', 'url'),
-            ),
-            'conditions': ('ENABLE(TOUCH_EVENTS)'),
-        },
-        {
-            'name': 'DidReceivePolicyDecision',
-            'parameters': (
-                ('uint64_t', 'frameID'),
-                ('uint64_t', 'listenerID'),
-                ('uint32_t', 'policyAction'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'Close',
-            'parameters': (),
-            'conditions': (None),
-        },
-        {
-            'name': 'PreferencesDidChange',
-            'parameters': (
-                ('WebKit::WebPreferencesStore', 'store'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'SendDoubleAndFloat',
-            'parameters': (
-                ('double', 'd'),
-                ('float', 'f'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'SendInts',
-            'parameters': (
-                ('Vector<uint64_t>', 'ints'),
-                ('Vector<Vector<uint64_t>>', 'intVectors')
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'CreatePlugin',
-            'parameters': (
-                ('uint64_t', 'pluginInstanceID'),
-                ('WebKit::Plugin::Parameters', 'parameters')
-            ),
-            'reply_parameters': (
-                ('bool', 'result'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'RunJavaScriptAlert',
-            'parameters': (
-                ('uint64_t', 'frameID'),
-                ('String', 'message')
-            ),
-            'reply_parameters': (),
-            'conditions': (None),
-        },
-        {
-            'name': 'GetPlugins',
-            'parameters': (
-                ('bool', 'refresh'),
-            ),
-            'reply_parameters': (
-                ('Vector<WebCore::PluginInfo>', 'plugins'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'GetPluginProcessConnection',
-            'parameters': (
-                ('String', 'pluginPath'),
-            ),
-            'reply_parameters': (
-                ('IPC::Connection::Handle', 'connectionHandle'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'TestMultipleAttributes',
-            'parameters': (
-            ),
-            'reply_parameters': (
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'TestParameterAttributes',
-            'parameters': (
-                ('uint64_t', 'foo', ('AttributeOne', 'AttributeTwo')),
-                ('double', 'bar'),
-                ('double', 'baz', ('AttributeThree',)),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'TemplateTest',
-            'parameters': (
-                ('HashMap<String, std::pair<String, uint64_t>>', 'a'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'SetVideoLayerID',
-            'parameters': (
-                ('WebCore::GraphicsLayer::PlatformLayerID', 'videoLayerID'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'DidCreateWebProcessConnection',
-            'parameters': (
-                ('IPC::MachPort', 'connectionIdentifier'),
-                ('OptionSet<WebKit::SelectionFlags>', 'flags'),
-            ),
-            'conditions': ('PLATFORM(MAC)'),
-        },
-        {
-            'name': 'InterpretKeyEvent',
-            'parameters': (
-                ('uint32_t', 'type'),
-            ),
-            'reply_parameters': (
-                ('Vector<WebCore::KeypressCommand>', 'commandName'),
-            ),
-            'conditions': ('PLATFORM(MAC)'),
-        },
-        {
-            'name': 'DeprecatedOperation',
-            'parameters': (
-                ('IPC::DummyType', 'dummy'),
-            ),
-            'conditions': ('ENABLE(DEPRECATED_FEATURE)'),
-        },
-        {
-            'name': 'ExperimentalOperation',
-            'parameters': (
-                ('IPC::DummyType', 'dummy'),
-            ),
-            'conditions': ('ENABLE(EXPERIMENTAL_FEATURE)'),
-        }
-    ),
-}
 
-_expected_results = dict(_base_expected_results, name='TestWithoutAttributes')
+def parse_receiver(receiver_name):
+    with open(os.path.join(tests_directory, '{}.messages.in'.format(receiver_name))) as in_file:
+        return parser.parse(in_file)
+    assert(False)
 
-_expected_legacy_results = dict(_base_expected_results, name='TestWithLegacyReceiver')
 
-_expected_superclass_results = {
-    'name': 'TestWithSuperclass',
-    'superclass': 'WebPageBase',
-    'conditions': None,
-    'messages': (
-        {
-            'name': 'LoadURL',
-            'parameters': (
-                ('String', 'url'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'TestAsyncMessage',
-            'parameters': (
-                ('WebKit::TestTwoStateEnum', 'twoStateEnum'),
-            ),
-            'reply_parameters': (
-                ('uint64_t', 'result'),
-            ),
-            'conditions': ('ENABLE(TEST_FEATURE)'),
-        },
-        {
-            'name': 'TestAsyncMessageWithNoArguments',
-            'parameters': (),
-            'reply_parameters': (),
-            'conditions': ('ENABLE(TEST_FEATURE)'),
-        },
-        {
-            'name': 'TestAsyncMessageWithMultipleArguments',
-            'parameters': (),
-            'reply_parameters': (
-                ('bool', 'flag'),
-                ('uint64_t', 'value'),
-            ),
-            'conditions': ('ENABLE(TEST_FEATURE)'),
-        },
-        {
-            'name': 'TestAsyncMessageWithConnection',
-            'parameters': (
-                ('int', 'value'),
-            ),
-            'reply_parameters': (
-                ('bool', 'flag'),
-            ),
-            'conditions': ('ENABLE(TEST_FEATURE)'),
-        },
-        {
-            'name': 'TestSyncMessage',
-            'parameters': (
-                ('uint32_t', 'param'),
-            ),
-            'reply_parameters': (
-                ('uint8_t', 'reply'),
-            ),
-            'conditions': (None),
-        },
-        {
-            'name': 'TestSynchronousMessage',
-            'parameters': (
-                ('bool', 'value'),
-            ),
-            'reply_parameters': (
-                ('Optional<WebKit::TestClassName>', 'optionalReply'),
-            ),
-            'conditions': (None),
-        },
-    ),
-}
-
-
-class MessagesTest(unittest.TestCase):
+class GeneratedFileContentsTest(unittest.TestCase):
     def setUp(self):
-        self.receiver = parser.parse(StringIO(_messages_file_contents))
-        self.legacy_receiver = parser.parse(StringIO(_legacy_messages_file_contents))
-        self.superclass_receiver = parser.parse(StringIO(_superclass_messages_file_contents))
+        self.test_receivers = [parse_receiver(receiver_name) for receiver_name in _test_receiver_names]
+        self.receivers = model.generate_global_model(self.test_receivers)
 
-
-class ParsingTest(MessagesTest):
-    def check_message(self, message, expected_message):
-        self.assertEquals(message.name, expected_message['name'])
-        self.assertEquals(len(message.parameters), len(expected_message['parameters']))
-        for index, parameter in enumerate(message.parameters):
-            expected_parameter = expected_message['parameters'][index]
-            self.assertEquals(parameter.type, expected_parameter[0])
-            self.assertEquals(parameter.name, expected_parameter[1])
-            if len(expected_parameter) > 2:
-                self.assertEquals(parameter.attributes, frozenset(expected_parameter[2]))
-                for attribute in expected_parameter[2]:
-                    self.assertTrue(parameter.has_attribute(attribute))
-            else:
-                self.assertEquals(parameter.attributes, frozenset())
-        if message.reply_parameters is not None:
-            for index, parameter in enumerate(message.reply_parameters):
-                self.assertEquals(parameter.type, expected_message['reply_parameters'][index][0])
-                self.assertEquals(parameter.name, expected_message['reply_parameters'][index][1])
-        else:
-            self.assertFalse('reply_parameters' in expected_message)
-        self.assertEquals(message.condition, expected_message['conditions'])
-
-    def test_receiver(self):
-        """Receiver should be parsed as expected"""
-        self.assertEquals(self.receiver.name, _expected_results['name'])
-        self.assertEquals(self.receiver.condition, _expected_results['conditions'])
-        self.assertEquals(len(self.receiver.messages), len(_expected_results['messages']))
-        for index, message in enumerate(self.receiver.messages):
-            self.check_message(message, _expected_results['messages'][index])
-
-        self.assertEquals(self.legacy_receiver.name, _expected_legacy_results['name'])
-        self.assertEquals(self.legacy_receiver.condition, _expected_legacy_results['conditions'])
-        self.assertEquals(len(self.legacy_receiver.messages), len(_expected_legacy_results['messages']))
-        for index, message in enumerate(self.legacy_receiver.messages):
-            self.check_message(message, _expected_legacy_results['messages'][index])
-
-        self.assertEquals(self.superclass_receiver.name, _expected_superclass_results['name'])
-        self.assertEquals(self.superclass_receiver.superclass, _expected_superclass_results['superclass'])
-        self.assertEquals(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages']))
-        for index, message in enumerate(self.superclass_receiver.messages):
-            self.check_message(message, _expected_superclass_results['messages'][index])
-
-
-class GeneratedFileContentsTest(unittest.TestCase):
     def assertGeneratedFileContentsEqual(self, actual_file_contents, expected_file_name):
         try:
             if reset_results:
@@ -385,49 +77,28 @@
                 self.assertEquals(actual_line, expected_line_list[index])
 
             self.assertEquals(len(actual_line_list), len(expected_line_list))
-        except:
+        except Exception:
             sys.stderr.write('In expected file %s\n' % expected_file_name)
             raise
 
-    def assertHeaderEqual(self, input_messages_file_contents, expected_file_name):
-        actual_file_contents = messages.generate_messages_header(parser.parse(StringIO(input_messages_file_contents)))
-        self.assertGeneratedFileContentsEqual(actual_file_contents, expected_file_name)
+    def test_receiver(self):
+        for receiver_name, receiver in zip(_test_receiver_names, self.test_receivers):
+            header_contents = messages.generate_messages_header(receiver)
+            self.assertGeneratedFileContentsEqual(header_contents, os.path.join(tests_directory, '{}Messages.h'.format(receiver_name)))
+            implementation_contents = messages.generate_message_handler(receiver)
+            self.assertGeneratedFileContentsEqual(implementation_contents, os.path.join(tests_directory, '{}MessageReceiver.cpp'.format(receiver_name)))
 
-    def assertImplementationEqual(self, input_messages_file_contents, expected_file_name):
-        actual_file_contents = messages.generate_message_handler(parser.parse(StringIO(input_messages_file_contents)))
-        self.assertGeneratedFileContentsEqual(actual_file_contents, expected_file_name)
+    def test_message_names(self):
+        header_contents = messages.generate_message_names_header(self.receivers)
+        self.assertGeneratedFileContentsEqual(header_contents, os.path.join(tests_directory, 'MessageNames.h'))
+        implementation_contents = messages.generate_message_names_implementation(self.receivers)
+        self.assertGeneratedFileContentsEqual(implementation_contents, os.path.join(tests_directory, 'MessageNames.cpp'))
 
+    def test_message_argument_description(self):
+        receiver_header_files = ['{}Messages.h'.format(receiver.name) for receiver in self.receivers]
+        implementation_contents = messages.generate_message_argument_description_implementation(self.receivers, receiver_header_files)
+        self.assertGeneratedFileContentsEqual(implementation_contents, os.path.join(tests_directory, 'MessageArgumentDescriptions.cpp'))
 
-class HeaderTest(GeneratedFileContentsTest):
-    def test_receiver_headers(self):
-        self.assertHeaderEqual(_messages_file_contents,
-                               _expected_receiver_header_file_name)
-        self.assertHeaderEqual(_legacy_messages_file_contents,
-                               _expected_legacy_receiver_header_file_name)
-        self.assertHeaderEqual(_superclass_messages_file_contents,
-                               _expected_superclass_receiver_header_file_name)
-
-
-class ReceiverImplementationTest(GeneratedFileContentsTest):
-    def test_receiver_implementations(self):
-        self.assertImplementationEqual(_messages_file_contents,
-                                       _expected_receiver_implementation_file_name)
-        self.assertImplementationEqual(_legacy_messages_file_contents,
-                                       _expected_legacy_receiver_implementation_file_name)
-        self.assertImplementationEqual(_superclass_messages_file_contents,
-                                       _expected_superclass_receiver_implementation_file_name)
-
-
-class UnsupportedPrecompilerDirectiveTest(unittest.TestCase):
-    def test_error_at_else(self):
-        with self.assertRaisesRegexp(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"):
-            messages.generate_message_handler(parser.parse(StringIO("asd\n#else bla\nfoo")))
-
-    def test_error_at_elif(self):
-        with self.assertRaisesRegexp(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"):
-            messages.generate_message_handler(parser.parse(StringIO("asd\n#elif bla\nfoo")))
-
-
 def add_reset_results_to_unittest_help():
     script_name = os.path.basename(__file__)
     reset_results_help = '''

Modified: trunk/Source/WebKit/Scripts/webkit/model.py (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/model.py	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/model.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -24,6 +24,9 @@
 
 from collections import Counter
 
+BUILTIN_ATTRIBUTE = "Builtin"
+ASYNC_ATTRIBUTE = "Async"
+
 class MessageReceiver(object):
     def __init__(self, name, superclass, attributes, messages, condition):
         self.name = name
@@ -64,7 +67,15 @@
         return attribute in self.attributes
 
 
-def check_global_model(receivers):
+ipc_receiver = MessageReceiver(name="IPC", superclass=None, attributes=[BUILTIN_ATTRIBUTE], messages=[
+    Message('WrappedAsyncMessageForTesting', [], [], attributes=[BUILTIN_ATTRIBUTE], condition=None),
+    Message('SyncMessageReply', [], [], attributes=[BUILTIN_ATTRIBUTE], condition=None),
+    Message('InitializeConnection', [], [], attributes=[BUILTIN_ATTRIBUTE], condition="PLATFORM(COCOA)"),
+    Message('LegacySessionState', [], [], attributes=[BUILTIN_ATTRIBUTE], condition=None)
+], condition=None)
+
+
+def check_global_model_inputs(receivers):
     errors = []
     receiver_counts = Counter([r.name for r in receivers])
     receiver_duplicates = [n for n, c in receiver_counts.items() if c > 1]
@@ -72,3 +83,13 @@
         errors.append('Duplicate message receiver names: %s' % (', '.join(receiver_duplicates)))
 
     return errors
+
+
+def generate_global_model(receivers):
+    async_reply_messages = []
+    for receiver in receivers:
+        for message in receiver.messages:
+            if message.has_attribute(ASYNC_ATTRIBUTE):
+                async_reply_messages.append(Message(name='%s_%sReply' % (receiver.name, message.name), parameters=message.reply_parameters, reply_parameters=[], attributes=None, condition=message.condition))
+    async_reply_receiver = MessageReceiver(name='AsyncReply', superclass='None', attributes=[BUILTIN_ATTRIBUTE], messages=async_reply_messages, condition=None)
+    return [ipc_receiver, async_reply_receiver] + receivers

Modified: trunk/Source/WebKit/Scripts/webkit/model_unittest.py (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/model_unittest.py	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/model_unittest.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -59,7 +59,7 @@
         self.assertEquals(other_receiver.name, 'WebPage')
         self.assertEquals(other_receiver.messages[0].name, 'LoadURL')
         self.assertEquals(other_receiver.messages[1].name, 'LoadURL2')
-        errors = model.check_global_model([receiver, other_receiver])
+        errors = model.check_global_model_inputs([receiver, other_receiver])
         self.assertEquals(len(errors), 1)
         self.assertTrue("Duplicate" in errors[0])
 

Copied: trunk/Source/WebKit/Scripts/webkit/parser_unittest.py (from rev 271236, trunk/Source/WebKit/Scripts/webkit/messages_unittest.py) (0 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/parser_unittest.py	                        (rev 0)
+++ trunk/Source/WebKit/Scripts/webkit/parser_unittest.py	2021-01-07 17:04:21 UTC (rev 271237)
@@ -0,0 +1,356 @@
+# Copyright (C) 2010-2018 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Examples of how to run:
+# python Source/WebKit/Scripts/webkit/parser_unittest.py
+# cd Source/WebKit/Scripts && python -m webkit.parser_unittest
+# cd Source/WebKit/Scripts && python -m unittest discover -p '*_unittest.py'
+
+import os
+import re
+import sys
+import unittest
+
+if sys.version_info > (3, 0):
+    from io import StringIO
+else:
+    from StringIO import StringIO
+
+module_directory = os.path.dirname(os.path.abspath(__file__))
+
+sys.path.append(os.path.abspath(os.path.join(module_directory, os.path.pardir)))
+from webkit import parser  # noqa: E402
+
+tests_directory = os.path.join(module_directory, 'tests')
+
+_expected_model_base = {
+    'conditions': ('(ENABLE(WEBKIT2) && (NESTED_MASTER_CONDITION || MASTER_OR && MASTER_AND))'),
+    'messages': (
+        {
+            'name': 'LoadURL',
+            'parameters': (
+                ('String', 'url'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'LoadSomething',
+            'parameters': (
+                ('String', 'url'),
+            ),
+            'conditions': ('ENABLE(TOUCH_EVENTS)'),
+        },
+        {
+            'name': 'TouchEvent',
+            'parameters': (
+                ('WebKit::WebTouchEvent', 'event'),
+            ),
+            'conditions': ('(ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))'),
+        },
+        {
+            'name': 'AddEvent',
+            'parameters': (
+                ('WebKit::WebTouchEvent', 'event'),
+            ),
+            'conditions': ('(ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))'),
+        },
+        {
+            'name': 'LoadSomethingElse',
+            'parameters': (
+                ('String', 'url'),
+            ),
+            'conditions': ('ENABLE(TOUCH_EVENTS)'),
+        },
+        {
+            'name': 'DidReceivePolicyDecision',
+            'parameters': (
+                ('uint64_t', 'frameID'),
+                ('uint64_t', 'listenerID'),
+                ('uint32_t', 'policyAction'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'Close',
+            'parameters': (),
+            'conditions': (None),
+        },
+        {
+            'name': 'PreferencesDidChange',
+            'parameters': (
+                ('WebKit::WebPreferencesStore', 'store'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'SendDoubleAndFloat',
+            'parameters': (
+                ('double', 'd'),
+                ('float', 'f'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'SendInts',
+            'parameters': (
+                ('Vector<uint64_t>', 'ints'),
+                ('Vector<Vector<uint64_t>>', 'intVectors')
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'CreatePlugin',
+            'parameters': (
+                ('uint64_t', 'pluginInstanceID'),
+                ('WebKit::Plugin::Parameters', 'parameters')
+            ),
+            'reply_parameters': (
+                ('bool', 'result'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'RunJavaScriptAlert',
+            'parameters': (
+                ('uint64_t', 'frameID'),
+                ('String', 'message')
+            ),
+            'reply_parameters': (),
+            'conditions': (None),
+        },
+        {
+            'name': 'GetPlugins',
+            'parameters': (
+                ('bool', 'refresh'),
+            ),
+            'reply_parameters': (
+                ('Vector<WebCore::PluginInfo>', 'plugins'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'GetPluginProcessConnection',
+            'parameters': (
+                ('String', 'pluginPath'),
+            ),
+            'reply_parameters': (
+                ('IPC::Connection::Handle', 'connectionHandle'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'TestMultipleAttributes',
+            'parameters': (
+            ),
+            'reply_parameters': (
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'TestParameterAttributes',
+            'parameters': (
+                ('uint64_t', 'foo', ('AttributeOne', 'AttributeTwo')),
+                ('double', 'bar'),
+                ('double', 'baz', ('AttributeThree',)),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'TemplateTest',
+            'parameters': (
+                ('HashMap<String, std::pair<String, uint64_t>>', 'a'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'SetVideoLayerID',
+            'parameters': (
+                ('WebCore::GraphicsLayer::PlatformLayerID', 'videoLayerID'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'DidCreateWebProcessConnection',
+            'parameters': (
+                ('IPC::MachPort', 'connectionIdentifier'),
+                ('OptionSet<WebKit::SelectionFlags>', 'flags'),
+            ),
+            'conditions': ('PLATFORM(MAC)'),
+        },
+        {
+            'name': 'InterpretKeyEvent',
+            'parameters': (
+                ('uint32_t', 'type'),
+            ),
+            'reply_parameters': (
+                ('Vector<WebCore::KeypressCommand>', 'commandName'),
+            ),
+            'conditions': ('PLATFORM(MAC)'),
+        },
+        {
+            'name': 'DeprecatedOperation',
+            'parameters': (
+                ('IPC::DummyType', 'dummy'),
+            ),
+            'conditions': ('ENABLE(DEPRECATED_FEATURE)'),
+        },
+        {
+            'name': 'ExperimentalOperation',
+            'parameters': (
+                ('IPC::DummyType', 'dummy'),
+            ),
+            'conditions': ('ENABLE(EXPERIMENTAL_FEATURE)'),
+        }
+    ),
+}
+
+_expected_model_test_without_attributes = dict(_expected_model_base, name='TestWithoutAttributes')
+
+_expected_model_test_with_legacy_receiver = dict(_expected_model_base, name='TestWithLegacyReceiver')
+
+_expected_model_test_with_superclass = {
+    'name': 'TestWithSuperclass',
+    'superclass': 'WebPageBase',
+    'conditions': None,
+    'messages': (
+        {
+            'name': 'LoadURL',
+            'parameters': (
+                ('String', 'url'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'TestAsyncMessage',
+            'parameters': (
+                ('WebKit::TestTwoStateEnum', 'twoStateEnum'),
+            ),
+            'reply_parameters': (
+                ('uint64_t', 'result'),
+            ),
+            'conditions': ('ENABLE(TEST_FEATURE)'),
+        },
+        {
+            'name': 'TestAsyncMessageWithNoArguments',
+            'parameters': (),
+            'reply_parameters': (),
+            'conditions': ('ENABLE(TEST_FEATURE)'),
+        },
+        {
+            'name': 'TestAsyncMessageWithMultipleArguments',
+            'parameters': (),
+            'reply_parameters': (
+                ('bool', 'flag'),
+                ('uint64_t', 'value'),
+            ),
+            'conditions': ('ENABLE(TEST_FEATURE)'),
+        },
+        {
+            'name': 'TestAsyncMessageWithConnection',
+            'parameters': (
+                ('int', 'value'),
+            ),
+            'reply_parameters': (
+                ('bool', 'flag'),
+            ),
+            'conditions': ('ENABLE(TEST_FEATURE)'),
+        },
+        {
+            'name': 'TestSyncMessage',
+            'parameters': (
+                ('uint32_t', 'param'),
+            ),
+            'reply_parameters': (
+                ('uint8_t', 'reply'),
+            ),
+            'conditions': (None),
+        },
+        {
+            'name': 'TestSynchronousMessage',
+            'parameters': (
+                ('bool', 'value'),
+            ),
+            'reply_parameters': (
+                ('Optional<WebKit::TestClassName>', 'optionalReply'),
+            ),
+            'conditions': (None),
+        },
+    ),
+}
+
+
+_parsing_test_cases = [
+    _expected_model_test_without_attributes,
+    _expected_model_test_with_legacy_receiver,
+    _expected_model_test_with_superclass
+]
+
+
+def parse_receiver(receiver_name):
+    with open(os.path.join(tests_directory, '{}.messages.in'.format(receiver_name))) as in_file:
+        return parser.parse(in_file)
+    assert(False)
+
+
+class ParsingTest(unittest.TestCase):
+    def setUp(self):
+        self.receivers = [parse_receiver(expected_model['name']) for expected_model in _parsing_test_cases]
+
+    def check_message(self, message, expected_message):
+        self.assertEquals(message.name, expected_message['name'])
+        self.assertEquals(len(message.parameters), len(expected_message['parameters']))
+        for index, parameter in enumerate(message.parameters):
+            expected_parameter = expected_message['parameters'][index]
+            self.assertEquals(parameter.type, expected_parameter[0])
+            self.assertEquals(parameter.name, expected_parameter[1])
+            if len(expected_parameter) > 2:
+                self.assertEquals(parameter.attributes, frozenset(expected_parameter[2]))
+                for attribute in expected_parameter[2]:
+                    self.assertTrue(parameter.has_attribute(attribute))
+            else:
+                self.assertEquals(parameter.attributes, frozenset())
+        if message.reply_parameters is not None:
+            for index, parameter in enumerate(message.reply_parameters):
+                self.assertEquals(parameter.type, expected_message['reply_parameters'][index][0])
+                self.assertEquals(parameter.name, expected_message['reply_parameters'][index][1])
+        else:
+            self.assertFalse('reply_parameters' in expected_message)
+        self.assertEquals(message.condition, expected_message['conditions'])
+
+    def test_receiver(self):
+        """Receiver should be parsed as expected"""
+        for receiver, expected_model in zip(self.receivers, _parsing_test_cases):
+            self.assertEquals(receiver.name, expected_model['name'])
+            self.assertEquals(receiver.condition, expected_model['conditions'])
+            self.assertEquals(len(receiver.messages), len(expected_model['messages']))
+            for index, message in enumerate(receiver.messages):
+                self.check_message(message, expected_model['messages'][index])
+
+
+class UnsupportedPrecompilerDirectiveTest(unittest.TestCase):
+    def test_error_at_else(self):
+        with self.assertRaisesRegexp(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"):
+            parser.parse(StringIO("asd\n#else bla\nfoo"))
+
+    def test_error_at_elif(self):
+        with self.assertRaisesRegexp(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"):
+            parser.parse(StringIO("asd\n#elif bla\nfoo"))

Modified: trunk/Source/WebKit/Scripts/webkit/tests/Makefile (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/Makefile	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/tests/Makefile	2021-01-07 17:04:21 UTC (rev 271237)
@@ -1,2 +1,2 @@
 all:
-	python ../../generate-message-receiver.py . TestWithSuperclass TestWithLegacyReceiver TestWithoutAttributes
+	python ../../generate-message-receiver.py . TestWithSuperclass TestWithLegacyReceiver TestWithoutAttributes TestWithIfMessage

Modified: trunk/Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp	2021-01-07 17:04:21 UTC (rev 271237)
@@ -44,6 +44,7 @@
 #if ENABLE(TEST_FEATURE)
 #include "TestTwoStateEnum.h"
 #endif
+#include "TestWithIfMessageMessages.h"
 #include "TestWithLegacyReceiverMessages.h"
 #include "TestWithSuperclassMessages.h"
 #include "TestWithoutAttributesMessages.h"
@@ -207,6 +208,14 @@
         return jsValueForDecodedArguments<Messages::TestWithoutAttributes::ExperimentalOperation::Arguments>(globalObject, decoder);
 #endif
 #endif
+#if PLATFORM(COCOA)
+    case MessageName::TestWithIfMessage_LoadURL:
+        return jsValueForDecodedArguments<Messages::TestWithIfMessage::LoadURL::Arguments>(globalObject, decoder);
+#endif
+#if PLATFORM(GTK)
+    case MessageName::TestWithIfMessage_LoadURL:
+        return jsValueForDecodedArguments<Messages::TestWithIfMessage::LoadURL::Arguments>(globalObject, decoder);
+#endif
     default:
         break;
     }
@@ -495,6 +504,19 @@
         };
 #endif
 #endif
+#if PLATFORM(COCOA)
+    case MessageName::TestWithIfMessage_LoadURL:
+        return Vector<ArgumentDescription> {
+            {"url", "String", nullptr, false},
+        };
+#endif
+#if PLATFORM(GTK)
+    case MessageName::TestWithIfMessage_LoadURL:
+        return Vector<ArgumentDescription> {
+            {"url", "String", nullptr, false},
+            {"value", "int64_t", nullptr, false},
+        };
+#endif
     default:
         break;
     }

Modified: trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.cpp (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.cpp	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.cpp	2021-01-07 17:04:21 UTC (rev 271237)
@@ -30,6 +30,8 @@
 const char* description(MessageName name)
 {
     switch (name) {
+    case MessageName::TestWithIfMessage_LoadURL:
+        return "TestWithIfMessage_LoadURL";
     case MessageName::TestWithLegacyReceiver_AddEvent:
         return "TestWithLegacyReceiver_AddEvent";
     case MessageName::TestWithLegacyReceiver_Close:
@@ -78,20 +80,12 @@
         return "TestWithSuperclass_LoadURL";
     case MessageName::TestWithSuperclass_TestAsyncMessage:
         return "TestWithSuperclass_TestAsyncMessage";
-    case MessageName::TestWithSuperclass_TestAsyncMessageReply:
-        return "TestWithSuperclass_TestAsyncMessageReply";
     case MessageName::TestWithSuperclass_TestAsyncMessageWithConnection:
         return "TestWithSuperclass_TestAsyncMessageWithConnection";
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithConnectionReply:
-        return "TestWithSuperclass_TestAsyncMessageWithConnectionReply";
     case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArguments:
         return "TestWithSuperclass_TestAsyncMessageWithMultipleArguments";
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply:
-        return "TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply";
     case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArguments:
         return "TestWithSuperclass_TestAsyncMessageWithNoArguments";
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply:
-        return "TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply";
     case MessageName::TestWithSuperclass_TestSyncMessage:
         return "TestWithSuperclass_TestSyncMessage";
     case MessageName::TestWithSuperclass_TestSynchronousMessage:
@@ -140,14 +134,22 @@
         return "TestWithoutAttributes_TestParameterAttributes";
     case MessageName::TestWithoutAttributes_TouchEvent:
         return "TestWithoutAttributes_TouchEvent";
-    case MessageName::WrappedAsyncMessageForTesting:
-        return "IPC::WrappedAsyncMessageForTesting";
-    case MessageName::SyncMessageReply:
-        return "IPC::SyncMessageReply";
     case MessageName::InitializeConnection:
-        return "IPC::InitializeConnection";
+        return "InitializeConnection";
     case MessageName::LegacySessionState:
-        return "IPC::LegacySessionState";
+        return "LegacySessionState";
+    case MessageName::SyncMessageReply:
+        return "SyncMessageReply";
+    case MessageName::WrappedAsyncMessageForTesting:
+        return "WrappedAsyncMessageForTesting";
+    case MessageName::TestWithSuperclass_TestAsyncMessageReply:
+        return "TestWithSuperclass_TestAsyncMessageReply";
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithConnectionReply:
+        return "TestWithSuperclass_TestAsyncMessageWithConnectionReply";
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply:
+        return "TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply";
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply:
+        return "TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply";
     }
     ASSERT_NOT_REACHED();
     return "<invalid message name>";
@@ -156,14 +158,8 @@
 ReceiverName receiverName(MessageName messageName)
 {
     switch (messageName) {
-    case MessageName::TestWithSuperclass_LoadURL:
-    case MessageName::TestWithSuperclass_TestAsyncMessage:
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithConnection:
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArguments:
-    case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArguments:
-    case MessageName::TestWithSuperclass_TestSyncMessage:
-    case MessageName::TestWithSuperclass_TestSynchronousMessage:
-        return ReceiverName::TestWithSuperclass;
+    case MessageName::TestWithIfMessage_LoadURL:
+        return ReceiverName::TestWithIfMessage;
     case MessageName::TestWithLegacyReceiver_AddEvent:
     case MessageName::TestWithLegacyReceiver_Close:
     case MessageName::TestWithLegacyReceiver_CreatePlugin:
@@ -187,6 +183,14 @@
     case MessageName::TestWithLegacyReceiver_TestParameterAttributes:
     case MessageName::TestWithLegacyReceiver_TouchEvent:
         return ReceiverName::TestWithLegacyReceiver;
+    case MessageName::TestWithSuperclass_LoadURL:
+    case MessageName::TestWithSuperclass_TestAsyncMessage:
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithConnection:
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArguments:
+    case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArguments:
+    case MessageName::TestWithSuperclass_TestSyncMessage:
+    case MessageName::TestWithSuperclass_TestSynchronousMessage:
+        return ReceiverName::TestWithSuperclass;
     case MessageName::TestWithoutAttributes_AddEvent:
     case MessageName::TestWithoutAttributes_Close:
     case MessageName::TestWithoutAttributes_CreatePlugin:
@@ -210,16 +214,16 @@
     case MessageName::TestWithoutAttributes_TestParameterAttributes:
     case MessageName::TestWithoutAttributes_TouchEvent:
         return ReceiverName::TestWithoutAttributes;
+    case MessageName::InitializeConnection:
+    case MessageName::LegacySessionState:
+    case MessageName::SyncMessageReply:
+    case MessageName::WrappedAsyncMessageForTesting:
+        return ReceiverName::IPC;
     case MessageName::TestWithSuperclass_TestAsyncMessageReply:
     case MessageName::TestWithSuperclass_TestAsyncMessageWithConnectionReply:
     case MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply:
     case MessageName::TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply:
         return ReceiverName::AsyncReply;
-    case MessageName::WrappedAsyncMessageForTesting:
-    case MessageName::SyncMessageReply:
-    case MessageName::InitializeConnection:
-    case MessageName::LegacySessionState:
-        return ReceiverName::IPC;
     }
     ASSERT_NOT_REACHED();
     return ReceiverName::Invalid;
@@ -227,108 +231,128 @@
 
 bool isValidMessageName(MessageName messageName)
 {
-    if (messageName == IPC::MessageName::TestWithSuperclass_LoadURL)
+#if PLATFORM(COCOA)
+    if (messageName == IPC::MessageName::TestWithIfMessage_LoadURL)
         return true;
-#if ENABLE(TEST_FEATURE)
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessage)
+#endif
+#if PLATFORM(GTK)
+    if (messageName == IPC::MessageName::TestWithIfMessage_LoadURL)
         return true;
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageReply)
+#endif
+#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_AddEvent)
         return true;
 #endif
-#if ENABLE(TEST_FEATURE)
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithNoArguments)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_Close)
         return true;
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_CreatePlugin)
         return true;
+#if ENABLE(DEPRECATED_FEATURE)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DeprecatedOperation)
+        return true;
 #endif
-#if ENABLE(TEST_FEATURE)
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArguments)
+#if PLATFORM(MAC)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DidCreateWebProcessConnection)
         return true;
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply)
-        return true;
 #endif
-#if ENABLE(TEST_FEATURE)
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithConnection)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DidReceivePolicyDecision)
         return true;
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithConnectionReply)
+#if ENABLE(EXPERIMENTAL_FEATURE)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_ExperimentalOperation)
         return true;
 #endif
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestSyncMessage)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_GetPluginProcessConnection)
         return true;
-    if (messageName == IPC::MessageName::TestWithSuperclass_TestSynchronousMessage)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_GetPlugins)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_LoadURL)
+#if PLATFORM(MAC)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_InterpretKeyEvent)
         return true;
+#endif
 #if ENABLE(TOUCH_EVENTS)
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_LoadSomething)
         return true;
 #endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_TouchEvent)
-        return true;
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_AddEvent)
-        return true;
-#endif
 #if ENABLE(TOUCH_EVENTS)
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_LoadSomethingElse)
         return true;
 #endif
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DidReceivePolicyDecision)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_LoadURL)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_Close)
-        return true;
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_PreferencesDidChange)
         return true;
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_RunJavaScriptAlert)
+        return true;
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_SendDoubleAndFloat)
         return true;
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_SendInts)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_CreatePlugin)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_SetVideoLayerID)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_RunJavaScriptAlert)
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_TemplateTest)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_GetPlugins)
-        return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_GetPluginProcessConnection)
-        return true;
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_TestMultipleAttributes)
         return true;
     if (messageName == IPC::MessageName::TestWithLegacyReceiver_TestParameterAttributes)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_TemplateTest)
+#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
+    if (messageName == IPC::MessageName::TestWithLegacyReceiver_TouchEvent)
         return true;
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_SetVideoLayerID)
+#endif
+    if (messageName == IPC::MessageName::TestWithSuperclass_LoadURL)
         return true;
-#if PLATFORM(MAC)
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DidCreateWebProcessConnection)
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessage)
         return true;
 #endif
-#if PLATFORM(MAC)
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_InterpretKeyEvent)
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithConnection)
         return true;
 #endif
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArguments)
+        return true;
+#endif
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithNoArguments)
+        return true;
+#endif
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestSyncMessage)
+        return true;
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestSynchronousMessage)
+        return true;
+#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
+    if (messageName == IPC::MessageName::TestWithoutAttributes_AddEvent)
+        return true;
+#endif
+    if (messageName == IPC::MessageName::TestWithoutAttributes_Close)
+        return true;
+    if (messageName == IPC::MessageName::TestWithoutAttributes_CreatePlugin)
+        return true;
 #if ENABLE(DEPRECATED_FEATURE)
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_DeprecatedOperation)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_DeprecatedOperation)
         return true;
 #endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
-    if (messageName == IPC::MessageName::TestWithLegacyReceiver_ExperimentalOperation)
+#if PLATFORM(MAC)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_DidCreateWebProcessConnection)
         return true;
 #endif
-    if (messageName == IPC::MessageName::TestWithoutAttributes_LoadURL)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_DidReceivePolicyDecision)
         return true;
-#if ENABLE(TOUCH_EVENTS)
-    if (messageName == IPC::MessageName::TestWithoutAttributes_LoadSomething)
+#if ENABLE(EXPERIMENTAL_FEATURE)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_ExperimentalOperation)
         return true;
 #endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
-    if (messageName == IPC::MessageName::TestWithoutAttributes_TouchEvent)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_GetPluginProcessConnection)
         return true;
+    if (messageName == IPC::MessageName::TestWithoutAttributes_GetPlugins)
+        return true;
+#if PLATFORM(MAC)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_InterpretKeyEvent)
+        return true;
 #endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
-    if (messageName == IPC::MessageName::TestWithoutAttributes_AddEvent)
+#if ENABLE(TOUCH_EVENTS)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_LoadSomething)
         return true;
 #endif
 #if ENABLE(TOUCH_EVENTS)
@@ -335,56 +359,54 @@
     if (messageName == IPC::MessageName::TestWithoutAttributes_LoadSomethingElse)
         return true;
 #endif
-    if (messageName == IPC::MessageName::TestWithoutAttributes_DidReceivePolicyDecision)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_LoadURL)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_Close)
-        return true;
     if (messageName == IPC::MessageName::TestWithoutAttributes_PreferencesDidChange)
         return true;
+    if (messageName == IPC::MessageName::TestWithoutAttributes_RunJavaScriptAlert)
+        return true;
     if (messageName == IPC::MessageName::TestWithoutAttributes_SendDoubleAndFloat)
         return true;
     if (messageName == IPC::MessageName::TestWithoutAttributes_SendInts)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_CreatePlugin)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_SetVideoLayerID)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_RunJavaScriptAlert)
+    if (messageName == IPC::MessageName::TestWithoutAttributes_TemplateTest)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_GetPlugins)
-        return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_GetPluginProcessConnection)
-        return true;
     if (messageName == IPC::MessageName::TestWithoutAttributes_TestMultipleAttributes)
         return true;
     if (messageName == IPC::MessageName::TestWithoutAttributes_TestParameterAttributes)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_TemplateTest)
+#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
+    if (messageName == IPC::MessageName::TestWithoutAttributes_TouchEvent)
         return true;
-    if (messageName == IPC::MessageName::TestWithoutAttributes_SetVideoLayerID)
-        return true;
-#if PLATFORM(MAC)
-    if (messageName == IPC::MessageName::TestWithoutAttributes_DidCreateWebProcessConnection)
-        return true;
 #endif
-#if PLATFORM(MAC)
-    if (messageName == IPC::MessageName::TestWithoutAttributes_InterpretKeyEvent)
+#if PLATFORM(COCOA)
+    if (messageName == IPC::MessageName::InitializeConnection)
         return true;
 #endif
-#if ENABLE(DEPRECATED_FEATURE)
-    if (messageName == IPC::MessageName::TestWithoutAttributes_DeprecatedOperation)
+    if (messageName == IPC::MessageName::LegacySessionState)
         return true;
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
-    if (messageName == IPC::MessageName::TestWithoutAttributes_ExperimentalOperation)
+    if (messageName == IPC::MessageName::SyncMessageReply)
         return true;
-#endif
     if (messageName == IPC::MessageName::WrappedAsyncMessageForTesting)
         return true;
-    if (messageName == IPC::MessageName::SyncMessageReply)
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageReply)
         return true;
-    if (messageName == IPC::MessageName::InitializeConnection)
+#endif
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithConnectionReply)
         return true;
-    if (messageName == IPC::MessageName::LegacySessionState)
+#endif
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply)
         return true;
+#endif
+#if ENABLE(TEST_FEATURE)
+    if (messageName == IPC::MessageName::TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply)
+        return true;
+#endif
     return false;
 };
 

Modified: trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.h (271236 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.h	2021-01-07 16:36:44 UTC (rev 271236)
+++ trunk/Source/WebKit/Scripts/webkit/tests/MessageNames.h	2021-01-07 17:04:21 UTC (rev 271237)
@@ -29,16 +29,18 @@
 namespace IPC {
 
 enum class ReceiverName : uint8_t {
-    TestWithSuperclass = 1
+    TestWithIfMessage = 1
     , TestWithLegacyReceiver = 2
-    , TestWithoutAttributes = 3
-    , IPC = 4
-    , AsyncReply = 5
-    , Invalid = 6
+    , TestWithSuperclass = 3
+    , TestWithoutAttributes = 4
+    , IPC = 5
+    , AsyncReply = 6
+    , Invalid = 7
 };
 
 enum class MessageName : uint16_t {
-    TestWithLegacyReceiver_AddEvent
+    TestWithIfMessage_LoadURL
+    , TestWithLegacyReceiver_AddEvent
     , TestWithLegacyReceiver_Close
     , TestWithLegacyReceiver_CreatePlugin
     , TestWithLegacyReceiver_DeprecatedOperation
@@ -62,13 +64,9 @@
     , TestWithLegacyReceiver_TouchEvent
     , TestWithSuperclass_LoadURL
     , TestWithSuperclass_TestAsyncMessage
-    , TestWithSuperclass_TestAsyncMessageReply
     , TestWithSuperclass_TestAsyncMessageWithConnection
-    , TestWithSuperclass_TestAsyncMessageWithConnectionReply
     , TestWithSuperclass_TestAsyncMessageWithMultipleArguments
-    , TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply
     , TestWithSuperclass_TestAsyncMessageWithNoArguments
-    , TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply
     , TestWithSuperclass_TestSyncMessage
     , TestWithSuperclass_TestSynchronousMessage
     , TestWithoutAttributes_AddEvent
@@ -93,11 +91,15 @@
     , TestWithoutAttributes_TestMultipleAttributes
     , TestWithoutAttributes_TestParameterAttributes
     , TestWithoutAttributes_TouchEvent
-    , WrappedAsyncMessageForTesting
-    , SyncMessageReply
     , InitializeConnection
     , LegacySessionState
-    , Last = LegacySessionState
+    , SyncMessageReply
+    , WrappedAsyncMessageForTesting
+    , TestWithSuperclass_TestAsyncMessageReply
+    , TestWithSuperclass_TestAsyncMessageWithConnectionReply
+    , TestWithSuperclass_TestAsyncMessageWithMultipleArgumentsReply
+    , TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply
+    , Last = TestWithSuperclass_TestAsyncMessageWithNoArgumentsReply
 };
 
 ReceiverName receiverName(MessageName);

Added: trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessage.messages.in (0 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessage.messages.in	                        (rev 0)
+++ trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessage.messages.in	2021-01-07 17:04:21 UTC (rev 271237)
@@ -0,0 +1,32 @@
+# Copyright (C) 2010 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Tests scenario where #if'ed message should generate isValidMessageName() == true for
+# both cases.
+messages -> TestWithIfMessage {
+#if PLATFORM(COCOA)
+    void LoadURL(String url)
+#endif
+#if PLATFORM(GTK)
+    void LoadURL(String url, int64_t value)
+#endif
+}

Added: trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp (0 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp	                        (rev 0)
+++ trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp	2021-01-07 17:04:21 UTC (rev 271237)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2010-2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TestWithIfMessage.h"
+
+#if PLATFORM(COCOA) || PLATFORM(GTK)
+#include "ArgumentCoders.h"
+#endif
+#include "Decoder.h"
+#include "HandleMessage.h"
+#include "TestWithIfMessageMessages.h"
+#if PLATFORM(COCOA) || PLATFORM(GTK)
+#include <wtf/text/WTFString.h>
+#endif
+
+namespace WebKit {
+
+void TestWithIfMessage::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
+{
+    auto protectedThis = makeRef(*this);
+#if PLATFORM(COCOA)
+    if (decoder.messageName() == Messages::TestWithIfMessage::LoadURL::name()) {
+        IPC::handleMessage<Messages::TestWithIfMessage::LoadURL>(decoder, this, &TestWithIfMessage::loadURL);
+        return;
+    }
+#endif
+#if PLATFORM(GTK)
+    if (decoder.messageName() == Messages::TestWithIfMessage::LoadURL::name()) {
+        IPC::handleMessage<Messages::TestWithIfMessage::LoadURL>(decoder, this, &TestWithIfMessage::loadURL);
+        return;
+    }
+#endif
+    UNUSED_PARAM(connection);
+    UNUSED_PARAM(decoder);
+    ASSERT_NOT_REACHED();
+}
+
+} // namespace WebKit

Added: trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessages.h (0 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessages.h	                        (rev 0)
+++ trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessages.h	2021-01-07 17:04:21 UTC (rev 271237)
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2010-2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "ArgumentCoders.h"
+#include "Connection.h"
+#include "MessageNames.h"
+#include "TestWithIfMessageMessagesReplies.h"
+#include <wtf/Forward.h>
+#include <wtf/ThreadSafeRefCounted.h>
+#include <wtf/text/WTFString.h>
+
+
+namespace Messages {
+namespace TestWithIfMessage {
+
+static inline IPC::ReceiverName messageReceiverName()
+{
+    return IPC::ReceiverName::TestWithIfMessage;
+}
+
+#if PLATFORM(COCOA)
+class LoadURL {
+public:
+    using Arguments = std::tuple<const String&>;
+
+    static IPC::MessageName name() { return IPC::MessageName::TestWithIfMessage_LoadURL; }
+    static const bool isSync = false;
+
+    explicit LoadURL(const String& url)
+        : m_arguments(url)
+    {
+    }
+
+    const Arguments& arguments() const
+    {
+        return m_arguments;
+    }
+
+private:
+    Arguments m_arguments;
+};
+#endif
+
+#if PLATFORM(GTK)
+class LoadURL {
+public:
+    using Arguments = std::tuple<const String&, int64_t>;
+
+    static IPC::MessageName name() { return IPC::MessageName::TestWithIfMessage_LoadURL; }
+    static const bool isSync = false;
+
+    LoadURL(const String& url, int64_t value)
+        : m_arguments(url, value)
+    {
+    }
+
+    const Arguments& arguments() const
+    {
+        return m_arguments;
+    }
+
+private:
+    Arguments m_arguments;
+};
+#endif
+
+} // namespace TestWithIfMessage
+} // namespace Messages

Added: trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessagesReplies.h (0 => 271237)


--- trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessagesReplies.h	                        (rev 0)
+++ trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessagesReplies.h	2021-01-07 17:04:21 UTC (rev 271237)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2010-2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "MessageNames.h"
+#include <wtf/Forward.h>
+
+
+namespace Messages {
+namespace TestWithIfMessage {
+
+
+} // namespace TestWithIfMessage
+} // namespace Messages
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to