Changeset 161474 in webkit


Ignore:
Timestamp:
Jan 7, 2014 5:03:48 PM (10 years ago)
Author:
Simon Fraser
Message:

Make it possible for MessageReceivers to pass messages to their superclass, and use it for RemoteLayerTreeDrawingAreaProxy
https://bugs.webkit.org/show_bug.cgi?id=126558

Reviewed by Anders Carlsson.

In a message.in file it's now possible to say:

messages -> Subclass : Superclass { ... } and the generated code will
call Superclass::didReceiveMessage().

Use this to have RemoteLayerTreeDrawingAreaProxy pass messages up to
DrawingAreaProxy.

  • Scripts/webkit2/messages.py:

(generate_message_handler):

  • Scripts/webkit2/model.py:

(MessageReceiver.init):

  • Scripts/webkit2/parser.py:

(parse):

  • UIProcess/DrawingAreaProxy.h:
  • UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.messages.in:
Location:
trunk/Source/WebKit2
Files:
2 added
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r161473 r161474  
     12014-01-07  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Make it possible for MessageReceivers to pass messages to their superclass, and use it for RemoteLayerTreeDrawingAreaProxy
     4        https://bugs.webkit.org/show_bug.cgi?id=126558
     5
     6        Reviewed by Anders Carlsson.
     7       
     8        In a message.in file it's now possible to say:
     9       
     10        messages -> Subclass : Superclass { ... } and the generated code will
     11        call Superclass::didReceiveMessage().
     12       
     13        Use this to have RemoteLayerTreeDrawingAreaProxy pass messages up to
     14        DrawingAreaProxy.
     15
     16        * Scripts/webkit2/messages.py:
     17        (generate_message_handler):
     18        * Scripts/webkit2/model.py:
     19        (MessageReceiver.__init__):
     20        * Scripts/webkit2/parser.py:
     21        (parse):
     22        * UIProcess/DrawingAreaProxy.h:
     23        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.messages.in:
     24
    1252014-01-07  Simon Fraser  <simon.fraser@apple.com>
    226
  • trunk/Source/WebKit2/Scripts/webkit2/messages.py

    r161148 r161474  
    596596        result.append('{\n')
    597597        result += [async_message_statement(receiver, message) for message in async_messages]
    598         if not receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
    599             result.append('    UNUSED_PARAM(connection);\n')
    600         result.append('    ASSERT_NOT_REACHED();\n')
     598        if (receiver.superclass):
     599            result.append('    %s::didReceiveMessage(connection, decoder);\n' % (receiver.superclass))
     600        else:
     601            if not receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
     602                result.append('    UNUSED_PARAM(connection);\n')
     603            result.append('    ASSERT_NOT_REACHED();\n')
    601604        result.append('}\n')
    602605
  • trunk/Source/WebKit2/Scripts/webkit2/messages_unittest.py

    r161473 r161474  
    3232script_directory = os.path.dirname(os.path.realpath(__file__))
    3333
     34with open(os.path.join(script_directory, 'test-messages.in')) as file:
     35    _messages_file_contents = file.read()
     36
    3437with open(os.path.join(script_directory, 'test-legacy-messages.in')) as file:
    3538    _legacy_messages_file_contents = file.read()
    3639
    37 with open(os.path.join(script_directory, 'test-messages.in')) as file:
    38     _messages_file_contents = file.read()
     40with open(os.path.join(script_directory, 'test-superclass-messages.in')) as file:
     41    _superclass_messages_file_contents = file.read()
     42
     43
     44with open(os.path.join(script_directory, 'Messages-expected.h')) as file:
     45    _expected_receiver_header = file.read()
    3946
    4047with open(os.path.join(script_directory, 'LegacyMessages-expected.h')) as file:
    4148    _expected_legacy_receiver_header = file.read()
    4249
    43 with open(os.path.join(script_directory, 'Messages-expected.h')) as file:
    44     _expected_receiver_header = file.read()
     50with open(os.path.join(script_directory, 'MessagesSuperclass-expected.h')) as file:
     51    _expected_superclass_receiver_header = file.read()
     52   
    4553
    4654with open(os.path.join(script_directory, 'MessageReceiver-expected.cpp')) as file:
     
    4957with open(os.path.join(script_directory, 'LegacyMessageReceiver-expected.cpp')) as file:
    5058    _expected_legacy_receiver_implementation = file.read()
     59
     60with open(os.path.join(script_directory, 'MessageReceiverSuperclass-expected.cpp')) as file:
     61    _expected_superclass_receiver_implementation = file.read()
    5162
    5263_expected_results = {
     
    224235}
    225236
     237_expected_superclass_results = {
     238    'name': 'WebPage',
     239    'superclass' : 'WebPageBase',
     240    'conditions': None,
     241    'messages': (
     242        {
     243            'name': 'LoadURL',
     244            'parameters': (
     245                ('String', 'url'),
     246            ),
     247            'conditions': (None),
     248        },
     249    ),
     250}
     251
    226252
    227253class MessagesTest(unittest.TestCase):
     
    229255        self.receiver = parser.parse(StringIO(_messages_file_contents))
    230256        self.legacy_receiver = parser.parse(StringIO(_legacy_messages_file_contents))
     257        self.superclass_receiver = parser.parse(StringIO(_superclass_messages_file_contents))
    231258
    232259
     
    267294            self.check_message(message, _expected_results['messages'][index])
    268295
     296        self.assertEquals(self.superclass_receiver.name, _expected_superclass_results['name'])
     297        self.assertEquals(self.superclass_receiver.superclass, _expected_superclass_results['superclass'])
     298        self.assertEquals(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages']))
     299        for index, message in enumerate(self.superclass_receiver.messages):
     300            self.check_message(message, _expected_superclass_results['messages'][index])
     301
    269302
    270303
     
    282315class HeaderTest(GeneratedFileContentsTest):
    283316    def test_header(self):
     317        file_contents = messages.generate_messages_header(StringIO(_messages_file_contents))
     318        self.assertGeneratedFileContentsEqual(file_contents, _expected_receiver_header)
     319
    284320        legacy_file_contents = messages.generate_messages_header(StringIO(_legacy_messages_file_contents))
    285321        self.assertGeneratedFileContentsEqual(legacy_file_contents, _expected_legacy_receiver_header)
    286322
    287         file_contents = messages.generate_messages_header(StringIO(_messages_file_contents))
    288         self.assertGeneratedFileContentsEqual(file_contents, _expected_receiver_header)
     323        superclass_file_contents = messages.generate_messages_header(StringIO(_superclass_messages_file_contents))
     324        self.assertGeneratedFileContentsEqual(superclass_file_contents, _expected_superclass_receiver_header)
    289325
    290326
    291327class ReceiverImplementationTest(GeneratedFileContentsTest):
    292328    def test_receiver_implementation(self):
     329        file_contents = messages.generate_message_handler(StringIO(_messages_file_contents))
     330        self.assertGeneratedFileContentsEqual(file_contents, _expected_receiver_implementation)
     331
    293332        legacy_file_contents = messages.generate_message_handler(StringIO(_legacy_messages_file_contents))
    294333        self.assertGeneratedFileContentsEqual(legacy_file_contents, _expected_legacy_receiver_implementation)
    295334
    296         file_contents = messages.generate_message_handler(StringIO(_messages_file_contents))
    297         self.assertGeneratedFileContentsEqual(file_contents, _expected_receiver_implementation)
     335        superclass_file_contents = messages.generate_message_handler(StringIO(_superclass_messages_file_contents))
     336        self.assertGeneratedFileContentsEqual(superclass_file_contents, _expected_superclass_receiver_implementation)
    298337
    299338
  • trunk/Source/WebKit2/Scripts/webkit2/model.py

    r141183 r161474  
    2525
    2626class MessageReceiver(object):
    27     def __init__(self, name, attributes, messages, condition):
     27    def __init__(self, name, superclass, attributes, messages, condition):
    2828        self.name = name
     29        self.superclass = superclass
    2930        self.attributes = frozenset(attributes or [])
    3031        self.messages = messages
  • trunk/Source/WebKit2/Scripts/webkit2/parser.py

    r160161 r161474  
    4949    conditions = []
    5050    master_condition = None
     51    superclass = []
    5152    for line in file:
    52         match = re.search(r'messages -> (?P<destination>[A-Za-z_0-9]+) \s*(?:(?P<attributes>.*?)\s+)?{', line)
     53        match = re.search(r'messages -> (?P<destination>[A-Za-z_0-9]+) \s*(?::\s*(?P<superclass>.*?) \s*)?(?:(?P<attributes>.*?)\s+)?{', line)
    5354        if match:
    5455            receiver_attributes = parse_attributes_string(match.group('attributes'))
    55 
     56            if match.group('superclass'):
     57                superclass = match.group('superclass')
    5658            if conditions:
    5759                master_condition = conditions
     
    9092
    9193            messages.append(model.Message(name, parameters, reply_parameters, attributes, combine_condition(conditions)))
    92     return model.MessageReceiver(destination, receiver_attributes, messages, combine_condition(master_condition))
     94    return model.MessageReceiver(destination, superclass, receiver_attributes, messages, combine_condition(master_condition))
    9395
    9496
  • trunk/Source/WebKit2/Scripts/webkit2/test-superclass-messages.in

    r161473 r161474  
    1 # Copyright (C) 2014 Apple Inc. All rights reserved.
     1# Copyright (C) 2010 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    2121# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2222
    23 messages -> RemoteLayerTreeDrawingAreaProxy {
    24     void CommitLayerTree(WebKit::RemoteLayerTreeTransaction layerTreeTransaction, WebKit::RemoteScrollingCoordinatorTransaction scrollingTreeTransaction)
     23messages -> WebPage : WebPageBase {
     24    LoadURL(String url)
    2525}
  • trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h

    r161452 r161474  
    8383    WebCore::IntSize m_scrollOffset;
    8484
     85    // IPC::MessageReceiver
     86    virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) OVERRIDE;
     87
    8588private:
    8689    virtual void sizeDidChange() = 0;
    87 
    88     // IPC::MessageReceiver
    89     virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) OVERRIDE;
    9090
    9191    // Message handlers.
  • trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.messages.in

    r161387 r161474  
    2121# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2222
    23 messages -> RemoteLayerTreeDrawingAreaProxy {
     23messages -> RemoteLayerTreeDrawingAreaProxy : DrawingAreaProxy {
    2424    void CommitLayerTree(WebKit::RemoteLayerTreeTransaction layerTreeTransaction, WebKit::RemoteScrollingCoordinatorTransaction scrollingTreeTransaction)
    2525}
Note: See TracChangeset for help on using the changeset viewer.