Crash under IPC::isValidMessageName()
https://bugs.webkit.org/show_bug.cgi?id=213751
<rdar://problem/64773416>
Reviewed by Geoffrey Garen.
This is a speculative fix for the crashes tracked by <rdar://problem/64773416>.
The suspicion is that the compiler optimizes the code for IPC::isValidMessageName()
because its parameter is of type MessageName. It may therefore assume the parameter
is a valid MessageName enum value, which is ironic because the purpose of this
function is to check whether or not the enum value is valid.
To address the issue, I got rid of the #ifdefs in MessageName enum so that the
enum values have an underlying value in the range [0, MessageName::Last]. I then
updated the isValidEnum template specialization to verify that the input integer
is indeed in the range [0, MessageName::Last] before casting it to a MessageName
and calling IPC::isValidMessageName().
* Scripts/webkit/messages.py:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@263807 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 34bcf1c..e35f0e3 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,25 @@
+2020-07-01 Chris Dumez <cdumez@apple.com>
+
+ Crash under IPC::isValidMessageName()
+ https://bugs.webkit.org/show_bug.cgi?id=213751
+ <rdar://problem/64773416>
+
+ Reviewed by Geoffrey Garen.
+
+ This is a speculative fix for the crashes tracked by <rdar://problem/64773416>.
+ The suspicion is that the compiler optimizes the code for IPC::isValidMessageName()
+ because its parameter is of type MessageName. It may therefore assume the parameter
+ is a valid MessageName enum value, which is ironic because the purpose of this
+ function is to check whether or not the enum value is valid.
+
+ To address the issue, I got rid of the #ifdefs in MessageName enum so that the
+ enum values have an underlying value in the range [0, MessageName::Last]. I then
+ updated the isValidEnum template specialization to verify that the input integer
+ is indeed in the range [0, MessageName::Last] before casting it to a MessageName
+ and calling IPC::isValidMessageName().
+
+ * Scripts/webkit/messages.py:
+
2020-07-01 Kate Cheney <katherine_cheney@apple.com>
WKUserScripts injecting into all frames seem to violate app-bound domains
diff --git a/Source/WebKit/Scripts/MessageNames.cpp b/Source/WebKit/Scripts/MessageNames.cpp
index b82bf04..e76fa2a 100644
--- a/Source/WebKit/Scripts/MessageNames.cpp
+++ b/Source/WebKit/Scripts/MessageNames.cpp
@@ -30,156 +30,70 @@
const char* description(MessageName name)
{
switch (name) {
+ case MessageName::WebPage_AddEvent:
+ return "WebPage_AddEvent";
+ case MessageName::WebPage_Close:
+ return "WebPage_Close";
+ case MessageName::WebPage_CreatePlugin:
+ return "WebPage_CreatePlugin";
+ case MessageName::WebPage_DeprecatedOperation:
+ return "WebPage_DeprecatedOperation";
+ case MessageName::WebPage_DidCreateWebProcessConnection:
+ return "WebPage_DidCreateWebProcessConnection";
+ case MessageName::WebPage_DidReceivePolicyDecision:
+ return "WebPage_DidReceivePolicyDecision";
+ case MessageName::WebPage_ExperimentalOperation:
+ return "WebPage_ExperimentalOperation";
+ case MessageName::WebPage_GetPluginProcessConnection:
+ return "WebPage_GetPluginProcessConnection";
+ case MessageName::WebPage_GetPlugins:
+ return "WebPage_GetPlugins";
+ case MessageName::WebPage_InterpretKeyEvent:
+ return "WebPage_InterpretKeyEvent";
+ case MessageName::WebPage_LoadSomething:
+ return "WebPage_LoadSomething";
+ case MessageName::WebPage_LoadSomethingElse:
+ return "WebPage_LoadSomethingElse";
case MessageName::WebPage_LoadURL:
- return "WebPage::LoadURL";
-#if ENABLE(TEST_FEATURE)
+ return "WebPage_LoadURL";
+ case MessageName::WebPage_PreferencesDidChange:
+ return "WebPage_PreferencesDidChange";
+ case MessageName::WebPage_RunJavaScriptAlert:
+ return "WebPage_RunJavaScriptAlert";
+ case MessageName::WebPage_SendDoubleAndFloat:
+ return "WebPage_SendDoubleAndFloat";
+ case MessageName::WebPage_SendInts:
+ return "WebPage_SendInts";
+ case MessageName::WebPage_SetVideoLayerID:
+ return "WebPage_SetVideoLayerID";
+ case MessageName::WebPage_TemplateTest:
+ return "WebPage_TemplateTest";
case MessageName::WebPage_TestAsyncMessage:
- return "WebPage::TestAsyncMessage";
+ return "WebPage_TestAsyncMessage";
case MessageName::WebPage_TestAsyncMessageReply:
- return "WebPage::TestAsyncMessageReply";
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithNoArguments:
- return "WebPage::TestAsyncMessageWithNoArguments";
- case MessageName::WebPage_TestAsyncMessageWithNoArgumentsReply:
- return "WebPage::TestAsyncMessageWithNoArgumentsReply";
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithMultipleArguments:
- return "WebPage::TestAsyncMessageWithMultipleArguments";
- case MessageName::WebPage_TestAsyncMessageWithMultipleArgumentsReply:
- return "WebPage::TestAsyncMessageWithMultipleArgumentsReply";
-#endif
-#if ENABLE(TEST_FEATURE)
+ return "WebPage_TestAsyncMessageReply";
case MessageName::WebPage_TestAsyncMessageWithConnection:
- return "WebPage::TestAsyncMessageWithConnection";
+ return "WebPage_TestAsyncMessageWithConnection";
case MessageName::WebPage_TestAsyncMessageWithConnectionReply:
- return "WebPage::TestAsyncMessageWithConnectionReply";
-#endif
+ return "WebPage_TestAsyncMessageWithConnectionReply";
+ case MessageName::WebPage_TestAsyncMessageWithMultipleArguments:
+ return "WebPage_TestAsyncMessageWithMultipleArguments";
+ case MessageName::WebPage_TestAsyncMessageWithMultipleArgumentsReply:
+ return "WebPage_TestAsyncMessageWithMultipleArgumentsReply";
+ case MessageName::WebPage_TestAsyncMessageWithNoArguments:
+ return "WebPage_TestAsyncMessageWithNoArguments";
+ case MessageName::WebPage_TestAsyncMessageWithNoArgumentsReply:
+ return "WebPage_TestAsyncMessageWithNoArgumentsReply";
+ case MessageName::WebPage_TestMultipleAttributes:
+ return "WebPage_TestMultipleAttributes";
+ case MessageName::WebPage_TestParameterAttributes:
+ return "WebPage_TestParameterAttributes";
case MessageName::WebPage_TestSyncMessage:
- return "WebPage::TestSyncMessage";
+ return "WebPage_TestSyncMessage";
case MessageName::WebPage_TestSynchronousMessage:
- return "WebPage::TestSynchronousMessage";
- case MessageName::WebPage_LoadURL:
- return "WebPage::LoadURL";
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomething:
- return "WebPage::LoadSomething";
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
+ return "WebPage_TestSynchronousMessage";
case MessageName::WebPage_TouchEvent:
- return "WebPage::TouchEvent";
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
- case MessageName::WebPage_AddEvent:
- return "WebPage::AddEvent";
-#endif
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomethingElse:
- return "WebPage::LoadSomethingElse";
-#endif
- case MessageName::WebPage_DidReceivePolicyDecision:
- return "WebPage::DidReceivePolicyDecision";
- case MessageName::WebPage_Close:
- return "WebPage::Close";
- case MessageName::WebPage_PreferencesDidChange:
- return "WebPage::PreferencesDidChange";
- case MessageName::WebPage_SendDoubleAndFloat:
- return "WebPage::SendDoubleAndFloat";
- case MessageName::WebPage_SendInts:
- return "WebPage::SendInts";
- case MessageName::WebPage_CreatePlugin:
- return "WebPage::CreatePlugin";
- case MessageName::WebPage_RunJavaScriptAlert:
- return "WebPage::RunJavaScriptAlert";
- case MessageName::WebPage_GetPlugins:
- return "WebPage::GetPlugins";
- case MessageName::WebPage_GetPluginProcessConnection:
- return "WebPage::GetPluginProcessConnection";
- case MessageName::WebPage_TestMultipleAttributes:
- return "WebPage::TestMultipleAttributes";
- case MessageName::WebPage_TestParameterAttributes:
- return "WebPage::TestParameterAttributes";
- case MessageName::WebPage_TemplateTest:
- return "WebPage::TemplateTest";
- case MessageName::WebPage_SetVideoLayerID:
- return "WebPage::SetVideoLayerID";
-#if PLATFORM(MAC)
- case MessageName::WebPage_DidCreateWebProcessConnection:
- return "WebPage::DidCreateWebProcessConnection";
-#endif
-#if PLATFORM(MAC)
- case MessageName::WebPage_InterpretKeyEvent:
- return "WebPage::InterpretKeyEvent";
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- case MessageName::WebPage_DeprecatedOperation:
- return "WebPage::DeprecatedOperation";
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- case MessageName::WebPage_ExperimentalOperation:
- return "WebPage::ExperimentalOperation";
-#endif
- case MessageName::WebPage_LoadURL:
- return "WebPage::LoadURL";
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomething:
- return "WebPage::LoadSomething";
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
- case MessageName::WebPage_TouchEvent:
- return "WebPage::TouchEvent";
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
- case MessageName::WebPage_AddEvent:
- return "WebPage::AddEvent";
-#endif
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomethingElse:
- return "WebPage::LoadSomethingElse";
-#endif
- case MessageName::WebPage_DidReceivePolicyDecision:
- return "WebPage::DidReceivePolicyDecision";
- case MessageName::WebPage_Close:
- return "WebPage::Close";
- case MessageName::WebPage_PreferencesDidChange:
- return "WebPage::PreferencesDidChange";
- case MessageName::WebPage_SendDoubleAndFloat:
- return "WebPage::SendDoubleAndFloat";
- case MessageName::WebPage_SendInts:
- return "WebPage::SendInts";
- case MessageName::WebPage_CreatePlugin:
- return "WebPage::CreatePlugin";
- case MessageName::WebPage_RunJavaScriptAlert:
- return "WebPage::RunJavaScriptAlert";
- case MessageName::WebPage_GetPlugins:
- return "WebPage::GetPlugins";
- case MessageName::WebPage_GetPluginProcessConnection:
- return "WebPage::GetPluginProcessConnection";
- case MessageName::WebPage_TestMultipleAttributes:
- return "WebPage::TestMultipleAttributes";
- case MessageName::WebPage_TestParameterAttributes:
- return "WebPage::TestParameterAttributes";
- case MessageName::WebPage_TemplateTest:
- return "WebPage::TemplateTest";
- case MessageName::WebPage_SetVideoLayerID:
- return "WebPage::SetVideoLayerID";
-#if PLATFORM(MAC)
- case MessageName::WebPage_DidCreateWebProcessConnection:
- return "WebPage::DidCreateWebProcessConnection";
-#endif
-#if PLATFORM(MAC)
- case MessageName::WebPage_InterpretKeyEvent:
- return "WebPage::InterpretKeyEvent";
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- case MessageName::WebPage_DeprecatedOperation:
- return "WebPage::DeprecatedOperation";
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- case MessageName::WebPage_ExperimentalOperation:
- return "WebPage::ExperimentalOperation";
-#endif
+ return "WebPage_TouchEvent";
case MessageName::WrappedAsyncMessageForTesting:
return "IPC::WrappedAsyncMessageForTesting";
case MessageName::SyncMessageReply:
@@ -196,112 +110,33 @@
ReceiverName receiverName(MessageName messageName)
{
switch (messageName) {
- case MessageName::WebPage_LoadURL:
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessage:
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithNoArguments:
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithMultipleArguments:
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithConnection:
-#endif
- case MessageName::WebPage_TestSyncMessage:
- case MessageName::WebPage_TestSynchronousMessage:
- return ReceiverName::WebPage;
- case MessageName::WebPage_LoadURL:
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomething:
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
- case MessageName::WebPage_TouchEvent:
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
case MessageName::WebPage_AddEvent:
-#endif
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomethingElse:
-#endif
- case MessageName::WebPage_DidReceivePolicyDecision:
case MessageName::WebPage_Close:
+ case MessageName::WebPage_CreatePlugin:
+ case MessageName::WebPage_DeprecatedOperation:
+ case MessageName::WebPage_DidCreateWebProcessConnection:
+ case MessageName::WebPage_DidReceivePolicyDecision:
+ case MessageName::WebPage_ExperimentalOperation:
+ case MessageName::WebPage_GetPluginProcessConnection:
+ case MessageName::WebPage_GetPlugins:
+ case MessageName::WebPage_InterpretKeyEvent:
+ case MessageName::WebPage_LoadSomething:
+ case MessageName::WebPage_LoadSomethingElse:
+ case MessageName::WebPage_LoadURL:
case MessageName::WebPage_PreferencesDidChange:
+ case MessageName::WebPage_RunJavaScriptAlert:
case MessageName::WebPage_SendDoubleAndFloat:
case MessageName::WebPage_SendInts:
- case MessageName::WebPage_CreatePlugin:
- case MessageName::WebPage_RunJavaScriptAlert:
- case MessageName::WebPage_GetPlugins:
- case MessageName::WebPage_GetPluginProcessConnection:
+ case MessageName::WebPage_SetVideoLayerID:
+ case MessageName::WebPage_TemplateTest:
case MessageName::WebPage_TestMultipleAttributes:
case MessageName::WebPage_TestParameterAttributes:
- case MessageName::WebPage_TemplateTest:
- case MessageName::WebPage_SetVideoLayerID:
-#if PLATFORM(MAC)
- case MessageName::WebPage_DidCreateWebProcessConnection:
-#endif
-#if PLATFORM(MAC)
- case MessageName::WebPage_InterpretKeyEvent:
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- case MessageName::WebPage_DeprecatedOperation:
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- case MessageName::WebPage_ExperimentalOperation:
-#endif
- return ReceiverName::WebPage;
- case MessageName::WebPage_LoadURL:
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomething:
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
case MessageName::WebPage_TouchEvent:
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
- case MessageName::WebPage_AddEvent:
-#endif
-#if ENABLE(TOUCH_EVENTS)
- case MessageName::WebPage_LoadSomethingElse:
-#endif
- case MessageName::WebPage_DidReceivePolicyDecision:
- case MessageName::WebPage_Close:
- case MessageName::WebPage_PreferencesDidChange:
- case MessageName::WebPage_SendDoubleAndFloat:
- case MessageName::WebPage_SendInts:
- case MessageName::WebPage_CreatePlugin:
- case MessageName::WebPage_RunJavaScriptAlert:
- case MessageName::WebPage_GetPlugins:
- case MessageName::WebPage_GetPluginProcessConnection:
- case MessageName::WebPage_TestMultipleAttributes:
- case MessageName::WebPage_TestParameterAttributes:
- case MessageName::WebPage_TemplateTest:
- case MessageName::WebPage_SetVideoLayerID:
-#if PLATFORM(MAC)
- case MessageName::WebPage_DidCreateWebProcessConnection:
-#endif
-#if PLATFORM(MAC)
- case MessageName::WebPage_InterpretKeyEvent:
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- case MessageName::WebPage_DeprecatedOperation:
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- case MessageName::WebPage_ExperimentalOperation:
-#endif
return ReceiverName::WebPage;
-#if ENABLE(TEST_FEATURE)
case MessageName::WebPage_TestAsyncMessageReply:
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithNoArgumentsReply:
-#endif
-#if ENABLE(TEST_FEATURE)
- case MessageName::WebPage_TestAsyncMessageWithMultipleArgumentsReply:
-#endif
-#if ENABLE(TEST_FEATURE)
case MessageName::WebPage_TestAsyncMessageWithConnectionReply:
-#endif
+ case MessageName::WebPage_TestAsyncMessageWithMultipleArgumentsReply:
+ case MessageName::WebPage_TestAsyncMessageWithNoArgumentsReply:
return ReceiverName::AsyncReply;
case MessageName::WrappedAsyncMessageForTesting:
case MessageName::SyncMessageReply:
diff --git a/Source/WebKit/Scripts/MessageNames.h b/Source/WebKit/Scripts/MessageNames.h
index f5768c0..5e71814 100644
--- a/Source/WebKit/Scripts/MessageNames.h
+++ b/Source/WebKit/Scripts/MessageNames.h
@@ -38,105 +38,43 @@
};
enum class MessageName : uint16_t {
- WebPage_LoadURL = 1
-#if ENABLE(TEST_FEATURE)
- , WebPage_TestAsyncMessage = 2
- , WebPage_TestAsyncMessageReply = 3
-#endif
-#if ENABLE(TEST_FEATURE)
- , WebPage_TestAsyncMessageWithNoArguments = 4
- , WebPage_TestAsyncMessageWithNoArgumentsReply = 5
-#endif
-#if ENABLE(TEST_FEATURE)
- , WebPage_TestAsyncMessageWithMultipleArguments = 6
- , WebPage_TestAsyncMessageWithMultipleArgumentsReply = 7
-#endif
-#if ENABLE(TEST_FEATURE)
- , WebPage_TestAsyncMessageWithConnection = 8
- , WebPage_TestAsyncMessageWithConnectionReply = 9
-#endif
- , WebPage_TestSyncMessage = 10
- , WebPage_TestSynchronousMessage = 11
- , WebPage_LoadURL = 12
-#if ENABLE(TOUCH_EVENTS)
- , WebPage_LoadSomething = 13
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
- , WebPage_TouchEvent = 14
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
- , WebPage_AddEvent = 15
-#endif
-#if ENABLE(TOUCH_EVENTS)
- , WebPage_LoadSomethingElse = 16
-#endif
- , WebPage_DidReceivePolicyDecision = 17
- , WebPage_Close = 18
- , WebPage_PreferencesDidChange = 19
- , WebPage_SendDoubleAndFloat = 20
- , WebPage_SendInts = 21
- , WebPage_CreatePlugin = 22
- , WebPage_RunJavaScriptAlert = 23
- , WebPage_GetPlugins = 24
- , WebPage_GetPluginProcessConnection = 25
- , WebPage_TestMultipleAttributes = 26
- , WebPage_TestParameterAttributes = 27
- , WebPage_TemplateTest = 28
- , WebPage_SetVideoLayerID = 29
-#if PLATFORM(MAC)
- , WebPage_DidCreateWebProcessConnection = 30
-#endif
-#if PLATFORM(MAC)
- , WebPage_InterpretKeyEvent = 31
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- , WebPage_DeprecatedOperation = 32
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- , WebPage_ExperimentalOperation = 33
-#endif
- , WebPage_LoadURL = 34
-#if ENABLE(TOUCH_EVENTS)
- , WebPage_LoadSomething = 35
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION || SOME_OTHER_MESSAGE_CONDITION))
- , WebPage_TouchEvent = 36
-#endif
-#if (ENABLE(TOUCH_EVENTS) && (NESTED_MESSAGE_CONDITION && SOME_OTHER_MESSAGE_CONDITION))
- , WebPage_AddEvent = 37
-#endif
-#if ENABLE(TOUCH_EVENTS)
- , WebPage_LoadSomethingElse = 38
-#endif
- , WebPage_DidReceivePolicyDecision = 39
- , WebPage_Close = 40
- , WebPage_PreferencesDidChange = 41
- , WebPage_SendDoubleAndFloat = 42
- , WebPage_SendInts = 43
- , WebPage_CreatePlugin = 44
- , WebPage_RunJavaScriptAlert = 45
- , WebPage_GetPlugins = 46
- , WebPage_GetPluginProcessConnection = 47
- , WebPage_TestMultipleAttributes = 48
- , WebPage_TestParameterAttributes = 49
- , WebPage_TemplateTest = 50
- , WebPage_SetVideoLayerID = 51
-#if PLATFORM(MAC)
- , WebPage_DidCreateWebProcessConnection = 52
-#endif
-#if PLATFORM(MAC)
- , WebPage_InterpretKeyEvent = 53
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- , WebPage_DeprecatedOperation = 54
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- , WebPage_ExperimentalOperation = 55
-#endif
- , WrappedAsyncMessageForTesting = 56
- , SyncMessageReply = 57
- , InitializeConnection = 58
- , LegacySessionState = 59
+ WebPage_AddEvent
+ , WebPage_Close
+ , WebPage_CreatePlugin
+ , WebPage_DeprecatedOperation
+ , WebPage_DidCreateWebProcessConnection
+ , WebPage_DidReceivePolicyDecision
+ , WebPage_ExperimentalOperation
+ , WebPage_GetPluginProcessConnection
+ , WebPage_GetPlugins
+ , WebPage_InterpretKeyEvent
+ , WebPage_LoadSomething
+ , WebPage_LoadSomethingElse
+ , WebPage_LoadURL
+ , WebPage_PreferencesDidChange
+ , WebPage_RunJavaScriptAlert
+ , WebPage_SendDoubleAndFloat
+ , WebPage_SendInts
+ , WebPage_SetVideoLayerID
+ , WebPage_TemplateTest
+ , WebPage_TestAsyncMessage
+ , WebPage_TestAsyncMessageReply
+ , WebPage_TestAsyncMessageWithConnection
+ , WebPage_TestAsyncMessageWithConnectionReply
+ , WebPage_TestAsyncMessageWithMultipleArguments
+ , WebPage_TestAsyncMessageWithMultipleArgumentsReply
+ , WebPage_TestAsyncMessageWithNoArguments
+ , WebPage_TestAsyncMessageWithNoArgumentsReply
+ , WebPage_TestMultipleAttributes
+ , WebPage_TestParameterAttributes
+ , WebPage_TestSyncMessage
+ , WebPage_TestSynchronousMessage
+ , WebPage_TouchEvent
+ , WrappedAsyncMessageForTesting
+ , SyncMessageReply
+ , InitializeConnection
+ , LegacySessionState
+ , Last = LegacySessionState
};
ReceiverName receiverName(MessageName);
@@ -153,6 +91,9 @@
bool isValidEnum(T messageName)
{
static_assert(sizeof(T) == sizeof(E), "isValidEnum<IPC::MessageName> should only be called with 16-bit types");
+ static_assert(std::is_unsigned<T>::value, "isValidEnum<IPC::MessageName> should only be called with unsigned types");
+ if (messageName > static_cast<std::underlying_type<IPC::MessageName>::type>(IPC::MessageName::Last))
+ return false;
return IPC::isValidMessageName(static_cast<E>(messageName));
};
diff --git a/Source/WebKit/Scripts/webkit/messages.py b/Source/WebKit/Scripts/webkit/messages.py
index d0f8595..6258a7f 100644
--- a/Source/WebKit/Scripts/webkit/messages.py
+++ b/Source/WebKit/Scripts/webkit/messages.py
@@ -904,31 +904,25 @@
result.append('\n')
result.append('enum class MessageName : uint16_t {')
- enum_value = 1
- first_message = True
+ enum_values = set()
for receiver in receivers:
for message in receiver.messages:
- result.append('\n')
- if message.condition:
- result.append('#if %s\n' % message.condition)
- result.append(' ')
- if not first_message:
- result.append(', ')
- first_message = False
- result.append('%s_%s = %d' % (receiver.name, message.name, enum_value))
- enum_value = enum_value + 1
+ enum_values.add('%s_%s' % (receiver.name, message.name))
if message.has_attribute(ASYNC_ATTRIBUTE):
- result.append('\n , %s_%sReply = %d' % (receiver.name, message.name, enum_value))
- enum_value = enum_value + 1
- if message.condition:
- result.append('\n#endif')
- result.append('\n , WrappedAsyncMessageForTesting = %d' % enum_value)
- enum_value = enum_value + 1
- result.append('\n , SyncMessageReply = %d' % enum_value)
- enum_value = enum_value + 1
- result.append('\n , InitializeConnection = %d' % enum_value)
- enum_value = enum_value + 1
- result.append('\n , LegacySessionState = %d' % enum_value)
+ enum_values.add('%s_%sReply' % (receiver.name, message.name))
+
+ 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('\n};\n')
result.append('\n')
result.append('ReceiverName receiverName(MessageName);\n')
@@ -945,6 +939,9 @@
result.append('bool isValidEnum(T messageName)\n')
result.append('{\n')
result.append(' static_assert(sizeof(T) == sizeof(E), "isValidEnum<IPC::MessageName> should only be called with 16-bit types");\n')
+ result.append(' static_assert(std::is_unsigned<T>::value, "isValidEnum<IPC::MessageName> should only be called with unsigned types");\n')
+ result.append(' if (messageName > static_cast<std::underlying_type<IPC::MessageName>::type>(IPC::MessageName::Last))\n')
+ result.append(' return false;\n')
result.append(' return IPC::isValidMessageName(static_cast<E>(messageName));\n')
result.append('};\n')
result.append('\n')
@@ -963,17 +960,16 @@
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:
- if message.condition:
- result.append('#if %s\n' % message.condition)
- result.append(' case MessageName::%s_%s:\n' % (receiver.name, message.name))
- result.append(' return "%s::%s";\n' % (receiver.name, message.name))
+ enum_values.add('%s_%s' % (receiver.name, message.name))
if message.has_attribute(ASYNC_ATTRIBUTE):
- result.append(' case MessageName::%s_%sReply:\n' % (receiver.name, message.name))
- result.append(' return "%s::%sReply";\n' % (receiver.name, message.name))
- if message.condition:
- result.append('#endif\n')
+ 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')
@@ -990,22 +986,24 @@
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:
- if message.condition:
- result.append('#if %s\n' % message.condition)
- result.append(' case MessageName::%s_%s:\n' % (receiver.name, message.name))
- if message.condition:
- result.append('#endif\n')
- result.append(' return ReceiverName::%s;\n' % receiver.name)
- for receiver in receivers:
- for message in receiver.messages:
+ messages.add('%s_%s' % (receiver.name, message.name))
if message.has_attribute(ASYNC_ATTRIBUTE):
- if message.condition:
- result.append('#if %s\n' % message.condition)
- result.append(' case MessageName::%s_%sReply:\n' % (receiver.name, message.name))
- if message.condition:
- result.append('#endif\n')
+ 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')