Changeset 85519 in webkit


Ignore:
Timestamp:
May 2, 2011 2:04:58 PM (13 years ago)
Author:
andersca@apple.com
Message:

2011-05-02 Anders Carlsson <andersca@apple.com>

Reviewed by Adam Roben.

Handle DispatchOnConnectionQueue for asynchronous messages
https://bugs.webkit.org/show_bug.cgi?id=59959

If any asynchronous messages have the DispatchOnConnectionQueue attribute,
create a new willProcess{Receiver}MessageOnClientRunLoop.

  • Scripts/webkit2/messages.py:
  • Fix a regex bug where we would only parse attributes on synchronous messages.
  • Collect messages with the dispatch_on_connection_queue flag set. We only handle asynchronous messages currently; sync message support will be added when/if the need arises.
  • Scripts/webkit2/messages_unittest.py: Update test.
Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r85515 r85519  
     12011-05-02  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        Handle DispatchOnConnectionQueue for asynchronous messages
     6        https://bugs.webkit.org/show_bug.cgi?id=59959
     7
     8        If any asynchronous messages have the DispatchOnConnectionQueue attribute,
     9        create a new willProcess{Receiver}MessageOnClientRunLoop.
     10
     11        * Scripts/webkit2/messages.py:
     12        - Fix a regex bug where we would only parse attributes on synchronous messages.
     13        - Collect messages with the dispatch_on_connection_queue flag set. We only handle
     14          asynchronous messages currently; sync message support will be added when/if the
     15          need arises.
     16
     17        * Scripts/webkit2/messages_unittest.py:
     18        Update test.
     19
    1202011-05-02  Adam Barth  <abarth@webkit.org>
    221
  • trunk/Source/WebKit2/Scripts/webkit2/messages.py

    r84304 r85519  
    8282                    condition = None
    8383                continue
    84             match = re.search(r'([A-Za-z_0-9]+)\((.*?)\)(?:(?:\s+->\s+)\((.*?)\)(?:\s+(.*))?)?', line)
     84            match = re.search(r'([A-Za-z_0-9]+)\((.*?)\)(?:(?:\s+->\s+)\((.*?)\))?(?:\s+(.*))?', line)
    8585            if match:
    8686                name, parameters_string, reply_parameters_string, attributes_string = match.groups()
     
    376376
    377377
    378 def async_case_statement(receiver, message):
     378def async_case_statement(receiver, message, return_value=None):
    379379    dispatch_function = 'handleMessage'
    380380    if message.is_variadic:
     
    384384    result.append('    case Messages::%s::%s:\n' % (receiver.name, message.id()))
    385385    result.append('        CoreIPC::%s<Messages::%s::%s>(arguments, this, &%s);\n' % (dispatch_function, receiver.name, message.name, handler_function(receiver, message)))
    386     result.append('        return;\n')
     386    if return_value:
     387        result.append('        return %s;\n' % return_value)
     388    else:
     389        result.append('        return;\n')
    387390    return surround_in_condition(''.join(result), message.condition)
    388391
     
    572575    result.append('namespace WebKit {\n\n')
    573576
     577    async_dispatch_on_connection_queue_messages = []
     578    sync_dispatch_on_connection_queue_messages = []
    574579    async_messages = []
    575580    sync_messages = []
    576581    for message in receiver.messages:
    577582        if message.reply_parameters is not None:
    578             sync_messages.append(message)
     583            if message.dispatch_on_connection_queue:
     584                sync_dispatch_on_connection_queue_messages.append(message)
     585            else:
     586                sync_messages.append(message)
    579587        else:
    580             async_messages.append(message)
     588            if message.dispatch_on_connection_queue:
     589                async_dispatch_on_connection_queue_messages.append(message)
     590            else:
     591                async_messages.append(message)
     592
     593    if async_dispatch_on_connection_queue_messages:
     594        result.append('bool %s::willProcess%sMessageOnClientRunLoop(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)\n' % (receiver.name, receiver.name))
     595        result.append('{\n')
     596        result.append('    switch (messageID.get<Messages::%s::Kind>()) {\n' % receiver.name)
     597        result += [async_case_statement(receiver, message, 'false') for message in async_dispatch_on_connection_queue_messages]
     598        result.append('    default:\n')
     599        result.append('        return true;\n')
     600        result.append('    }\n')
     601        result.append('}\n\n')
    581602
    582603    if async_messages:
  • trunk/Source/WebKit2/Scripts/webkit2/messages_unittest.py

    r84173 r85519  
    7070
    7171    TestMultipleAttributes() -> () DispatchOnConnectionQueue Delayed
     72    TestConnectionQueue(uint64_t pluginID) DispatchOnConnectionQueue
    7273
    7374#if PLATFORM(MAC)
     
    184185            ),
    185186            'reply_parameters': (
     187            ),
     188            'condition': None,
     189        },
     190        {
     191            'name': 'TestConnectionQueue',
     192            'parameters': (
     193                ('uint64_t', 'pluginID'),
    186194            ),
    187195            'condition': None,
     
    308316    GetPluginProcessConnectionID,
    309317    TestMultipleAttributesID,
     318    TestConnectionQueueID,
    310319#if PLATFORM(MAC)
    311320    DidCreateWebProcessConnectionID,
     
    443452    typedef CoreIPC::Arguments0 Reply;
    444453    typedef CoreIPC::Arguments0 DecodeType;
     454};
     455
     456struct TestConnectionQueue : CoreIPC::Arguments1<uint64_t> {
     457    static const Kind messageID = TestConnectionQueueID;
     458    typedef CoreIPC::Arguments1<uint64_t> DecodeType;
     459    explicit TestConnectionQueue(uint64_t pluginID)
     460        : CoreIPC::Arguments1<uint64_t>(pluginID)
     461    {
     462    }
    445463};
    446464
     
    583601namespace WebKit {
    584602
     603bool WebPage::willProcessWebPageMessageOnClientRunLoop(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
     604{
     605    switch (messageID.get<Messages::WebPage::Kind>()) {
     606    case Messages::WebPage::TestConnectionQueueID:
     607        CoreIPC::handleMessage<Messages::WebPage::TestConnectionQueue>(arguments, this, &WebPage::testConnectionQueue);
     608        return false;
     609    default:
     610        return true;
     611    }
     612}
     613
    585614void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
    586615{
     
    630659        CoreIPC::handleMessage<Messages::WebPage::RunJavaScriptAlert>(arguments, reply, this, &WebPage::runJavaScriptAlert);
    631660        return CoreIPC::AutomaticReply;
    632     case Messages::WebPage::GetPluginsID:
    633         CoreIPC::handleMessage<Messages::WebPage::GetPlugins>(arguments, reply, this, &WebPage::getPlugins);
    634         return CoreIPC::AutomaticReply;
    635661    case Messages::WebPage::GetPluginProcessConnectionID:
    636662        CoreIPC::handleMessageDelayed<Messages::WebPage::GetPluginProcessConnection>(connection, arguments, reply, this, &WebPage::getPluginProcessConnection);
    637         return CoreIPC::ManualReply;
    638     case Messages::WebPage::TestMultipleAttributesID:
    639         CoreIPC::handleMessageDelayed<Messages::WebPage::TestMultipleAttributes>(connection, arguments, reply, this, &WebPage::testMultipleAttributes);
    640663        return CoreIPC::ManualReply;
    641664#if PLATFORM(MAC)
Note: See TracChangeset for help on using the changeset viewer.