[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
andersca at apple.com
andersca at apple.com
Wed Dec 22 13:49:09 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 2be95fe9d5bad9d9e893643ad8c0dbbb7525a0c7
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Sep 27 22:01:06 2010 +0000
Add support for autogenerating synchronous message handlers
https://bugs.webkit.org/show_bug.cgi?id=46654
Reviewed by Adam Roben.
* Scripts/webkit2/messages.py:
(reply_type): Renamed from reply_base_class.
(delayed_reply_type): Renamed from delayed_reply_base_class.
(message_to_struct_declaration): Add a Reply type typedef.
(async_case_statement): Rename from case_statement.
(generate_message_handler): Generate a sync message handler as well.
* Scripts/webkit2/messages_unittest.py:
Update expected results.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 44275f6..ac5e6d2 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,20 @@
+2010-09-27 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add support for autogenerating synchronous message handlers
+ https://bugs.webkit.org/show_bug.cgi?id=46654
+
+ * Scripts/webkit2/messages.py:
+ (reply_type): Renamed from reply_base_class.
+ (delayed_reply_type): Renamed from delayed_reply_base_class.
+ (message_to_struct_declaration): Add a Reply type typedef.
+ (async_case_statement): Rename from case_statement.
+ (generate_message_handler): Generate a sync message handler as well.
+
+ * Scripts/webkit2/messages_unittest.py:
+ Update expected results.
+
2010-09-27 Andras Becsi <abecsi at webkit.org>
Reviewed by Csaba Osztrogonác.
diff --git a/WebKit2/Scripts/webkit2/messages.py b/WebKit2/Scripts/webkit2/messages.py
index b246d75..b77fa48 100644
--- a/WebKit2/Scripts/webkit2/messages.py
+++ b/WebKit2/Scripts/webkit2/messages.py
@@ -162,28 +162,23 @@ def reply_parameter_type(type):
return '%s&' % type
-def arguments_base_class(parameters, parameter_type_function):
- arguments_class = 'CoreIPC::Arguments%d' % len(parameters)
+def arguments_type(parameters, parameter_type_function):
+ arguments_type = 'CoreIPC::Arguments%d' % len(parameters)
if len(parameters):
- arguments_class = '%s<%s>' % (arguments_class, ', '.join(parameter_type_function(parameter.type) for parameter in parameters))
- return arguments_class
+ arguments_type = '%s<%s>' % (arguments_type, ', '.join(parameter_type_function(parameter.type) for parameter in parameters))
+ return arguments_type
def base_class(message):
- return arguments_base_class(message.parameters, function_parameter_type)
+ return arguments_type(message.parameters, function_parameter_type)
- base_class = 'CoreIPC::Arguments%d' % len(message.parameters)
- if len(message.parameters):
- base_class = '%s<%s>' % (base_class, ', '.join(function_parameter_type(parameter.type) for parameter in message.parameters))
- return base_class
+def reply_type(message):
+ return arguments_type(message.reply_parameters, reply_parameter_type)
-def reply_base_class(message):
- return arguments_base_class(message.reply_parameters, reply_parameter_type)
-
-def delayed_reply_base_class(message):
- return arguments_base_class(message.reply_parameters, function_parameter_type)
+def delayed_reply_type(message):
+ return arguments_type(message.reply_parameters, function_parameter_type)
def message_to_struct_declaration(message):
@@ -192,6 +187,8 @@ def message_to_struct_declaration(message):
result.append('struct %s : %s' % (message.name, base_class(message)))
result.append(' {\n')
result.append(' static const Kind messageID = %s;\n' % message.id())
+ if message.reply_parameters != None:
+ result.append(' typedef %s Reply;\n' % reply_type(message))
if len(function_parameters):
result.append(' %s%s(%s)' % (len(function_parameters) == 1 and 'explicit ' or '', message.name, ', '.join([' '.join(x) for x in function_parameters])))
result.append('\n : %s(%s)\n' % (base_class(message), ', '.join([x[1] for x in function_parameters])))
@@ -272,7 +269,7 @@ def handler_function(receiver, message):
return '%s::%s' % (receiver.name, message.name[0].lower() + message.name[1:])
-def case_statement(receiver, message):
+def async_case_statement(receiver, message):
result = []
result.append(' case Messages::%s::%s:\n' % (receiver.name, message.id()))
result.append(' CoreIPC::handleMessage<Messages::%s::%s>(arguments, this, &%s);\n' % (receiver.name, message.name, handler_function(receiver, message)))
@@ -280,6 +277,15 @@ def case_statement(receiver, message):
return surround_in_condition(''.join(result), message.condition)
+def sync_case_statement(receiver, message):
+ result = []
+ result.append(' case Messages::%s::%s:\n' % (receiver.name, message.id()))
+ result.append(' CoreIPC::handleMessage<Messages::%s::%s>(arguments, reply, this, &%s);\n' % (receiver.name, message.name, handler_function(receiver, message)))
+ # FIXME: Handle delayed replies
+ result.append(' return CoreIPC::AutomaticReply;\n')
+ return surround_in_condition(''.join(result), message.condition)
+
+
def argument_coder_headers_for_type(type):
special_cases = {
'WTF::String': '"WebCoreArgumentCoders.h"',
@@ -345,13 +351,37 @@ def generate_message_handler(file):
result.append('namespace WebKit {\n\n')
- result.append('void %s::didReceive%sMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)\n' % (receiver.name, receiver.name))
- result.append('{\n')
- result.append(' switch (messageID.get<Messages::%s::Kind>()) {\n' % receiver.name)
- result += [case_statement(receiver, message) for message in receiver.messages]
- result.append(' }\n\n')
- result.append(' ASSERT_NOT_REACHED();\n')
- result.append('}\n')
+ async_messages = []
+ sync_messages = []
+ for message in receiver.messages:
+ if message.reply_parameters is not None:
+ sync_messages.append(message)
+ else:
+ async_messages.append(message)
+
+ if async_messages:
+ result.append('void %s::didReceive%sMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)\n' % (receiver.name, receiver.name))
+ result.append('{\n')
+ result.append(' switch (messageID.get<Messages::%s::Kind>()) {\n' % receiver.name)
+ result += [async_case_statement(receiver, message) for message in async_messages]
+ result.append(' default:\n')
+ result.append(' break;\n')
+ result.append(' }\n\n')
+ result.append(' ASSERT_NOT_REACHED();\n')
+ result.append('}\n')
+
+ if sync_messages:
+ result.append('\n')
+ result.append('CoreIPC::SyncReplyMode %s::didReceiveSync%sMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)\n' % (receiver.name, receiver.name))
+ result.append('{\n')
+ result.append(' switch (messageID.get<Messages::%s::Kind>()) {\n' % receiver.name)
+ result += [sync_case_statement(receiver, message) for message in sync_messages]
+ result.append(' default:\n')
+ result.append(' break;\n')
+ result.append(' }\n\n')
+ result.append(' ASSERT_NOT_REACHED();\n')
+ result.append(' return CoreIPC::AutomaticReply;\n')
+ result.append('}\n')
result.append('\n} // namespace WebKit\n')
diff --git a/WebKit2/Scripts/webkit2/messages_unittest.py b/WebKit2/Scripts/webkit2/messages_unittest.py
index 76dbc86..f55b8b2 100644
--- a/WebKit2/Scripts/webkit2/messages_unittest.py
+++ b/WebKit2/Scripts/webkit2/messages_unittest.py
@@ -310,6 +310,7 @@ struct SendInts : CoreIPC::Arguments1<const Vector<uint64_t>&> {
struct RunJavaScriptAlert : CoreIPC::Arguments2<uint64_t, const WTF::String&> {
static const Kind messageID = RunJavaScriptAlertID;
+ typedef CoreIPC::Arguments0 Reply;
RunJavaScriptAlert(uint64_t frameID, const WTF::String& message)
: CoreIPC::Arguments2<uint64_t, const WTF::String&>(frameID, message)
{
@@ -318,6 +319,7 @@ struct RunJavaScriptAlert : CoreIPC::Arguments2<uint64_t, const WTF::String&> {
struct GetPlugins : CoreIPC::Arguments1<bool> {
static const Kind messageID = GetPluginsID;
+ typedef CoreIPC::Arguments1<Vector<WebCore::PluginInfo>&> Reply;
explicit GetPlugins(bool refresh)
: CoreIPC::Arguments1<bool>(refresh)
{
@@ -326,6 +328,7 @@ struct GetPlugins : CoreIPC::Arguments1<bool> {
struct GetPluginProcessConnection : CoreIPC::Arguments1<const WTF::String&> {
static const Kind messageID = GetPluginProcessConnectionID;
+ typedef CoreIPC::Arguments1<CoreIPC::Connection::Handle&> Reply;
explicit GetPluginProcessConnection(const WTF::String& pluginPath)
: CoreIPC::Arguments1<const WTF::String&>(pluginPath)
{
@@ -417,21 +420,34 @@ void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID
case Messages::WebPage::SendIntsID:
CoreIPC::handleMessage<Messages::WebPage::SendInts>(arguments, this, &WebPage::sendInts);
return;
- case Messages::WebPage::RunJavaScriptAlertID:
- CoreIPC::handleMessage<Messages::WebPage::RunJavaScriptAlert>(arguments, this, &WebPage::runJavaScriptAlert);
- return;
- case Messages::WebPage::GetPluginsID:
- CoreIPC::handleMessage<Messages::WebPage::GetPlugins>(arguments, this, &WebPage::getPlugins);
- return;
- case Messages::WebPage::GetPluginProcessConnectionID:
- CoreIPC::handleMessage<Messages::WebPage::GetPluginProcessConnection>(arguments, this, &WebPage::getPluginProcessConnection);
- return;
case Messages::WebPage::DidCreateWebProcessConnectionID:
CoreIPC::handleMessage<Messages::WebPage::DidCreateWebProcessConnection>(arguments, this, &WebPage::didCreateWebProcessConnection);
return;
+ default:
+ break;
+ }
+
+ ASSERT_NOT_REACHED();
+}
+
+CoreIPC::SyncReplyMode WebPage::didReceiveSyncWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)
+{
+ switch (messageID.get<Messages::WebPage::Kind>()) {
+ case Messages::WebPage::RunJavaScriptAlertID:
+ CoreIPC::handleMessage<Messages::WebPage::RunJavaScriptAlert>(arguments, reply, this, &WebPage::runJavaScriptAlert);
+ return CoreIPC::AutomaticReply;
+ case Messages::WebPage::GetPluginsID:
+ CoreIPC::handleMessage<Messages::WebPage::GetPlugins>(arguments, reply, this, &WebPage::getPlugins);
+ return CoreIPC::AutomaticReply;
+ case Messages::WebPage::GetPluginProcessConnectionID:
+ CoreIPC::handleMessage<Messages::WebPage::GetPluginProcessConnection>(arguments, reply, this, &WebPage::getPluginProcessConnection);
+ return CoreIPC::AutomaticReply;
+ default:
+ break;
}
ASSERT_NOT_REACHED();
+ return CoreIPC::AutomaticReply;
}
} // namespace WebKit
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list