[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