Changeset 85519 in webkit
- Timestamp:
- May 2, 2011 2:04:58 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r85515 r85519 1 2011-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 1 20 2011-05-02 Adam Barth <abarth@webkit.org> 2 21 -
trunk/Source/WebKit2/Scripts/webkit2/messages.py
r84304 r85519 82 82 condition = None 83 83 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) 85 85 if match: 86 86 name, parameters_string, reply_parameters_string, attributes_string = match.groups() … … 376 376 377 377 378 def async_case_statement(receiver, message ):378 def async_case_statement(receiver, message, return_value=None): 379 379 dispatch_function = 'handleMessage' 380 380 if message.is_variadic: … … 384 384 result.append(' case Messages::%s::%s:\n' % (receiver.name, message.id())) 385 385 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') 387 390 return surround_in_condition(''.join(result), message.condition) 388 391 … … 572 575 result.append('namespace WebKit {\n\n') 573 576 577 async_dispatch_on_connection_queue_messages = [] 578 sync_dispatch_on_connection_queue_messages = [] 574 579 async_messages = [] 575 580 sync_messages = [] 576 581 for message in receiver.messages: 577 582 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) 579 587 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') 581 602 582 603 if async_messages: -
trunk/Source/WebKit2/Scripts/webkit2/messages_unittest.py
r84173 r85519 70 70 71 71 TestMultipleAttributes() -> () DispatchOnConnectionQueue Delayed 72 TestConnectionQueue(uint64_t pluginID) DispatchOnConnectionQueue 72 73 73 74 #if PLATFORM(MAC) … … 184 185 ), 185 186 'reply_parameters': ( 187 ), 188 'condition': None, 189 }, 190 { 191 'name': 'TestConnectionQueue', 192 'parameters': ( 193 ('uint64_t', 'pluginID'), 186 194 ), 187 195 'condition': None, … … 308 316 GetPluginProcessConnectionID, 309 317 TestMultipleAttributesID, 318 TestConnectionQueueID, 310 319 #if PLATFORM(MAC) 311 320 DidCreateWebProcessConnectionID, … … 443 452 typedef CoreIPC::Arguments0 Reply; 444 453 typedef CoreIPC::Arguments0 DecodeType; 454 }; 455 456 struct 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 } 445 463 }; 446 464 … … 583 601 namespace WebKit { 584 602 603 bool 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 585 614 void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments) 586 615 { … … 630 659 CoreIPC::handleMessage<Messages::WebPage::RunJavaScriptAlert>(arguments, reply, this, &WebPage::runJavaScriptAlert); 631 660 return CoreIPC::AutomaticReply; 632 case Messages::WebPage::GetPluginsID:633 CoreIPC::handleMessage<Messages::WebPage::GetPlugins>(arguments, reply, this, &WebPage::getPlugins);634 return CoreIPC::AutomaticReply;635 661 case Messages::WebPage::GetPluginProcessConnectionID: 636 662 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);640 663 return CoreIPC::ManualReply; 641 664 #if PLATFORM(MAC)
Note: See TracChangeset
for help on using the changeset viewer.