Changeset 206000 in webkit


Ignore:
Timestamp:
Sep 15, 2016 3:38:17 PM (8 years ago)
Author:
andersca@apple.com
Message:

Add support for enum class parameters in the message generator
https://bugs.webkit.org/show_bug.cgi?id=162036

Reviewed by Brady Eidson.

Also, convert the WebPage::SetLayerHostingMode to take an actual enum class.

  • Scripts/webkit/messages.py:

(function_parameter_type):
Change this to take the parameter kind as well, and use the raw type for enums.

(arguments_type):
(message_to_struct_declaration):
Pass the kind to function_parameter_type.

(forward_declaration):
(forward_declarations_for_namespace):
Forward declare enums with "enum class".

(headers_for_type):
Add WebKit::LayerHostingMode as a special case.

(generate_message_handler):
Pass the kind to function_parameter_type.

  • Scripts/webkit/parser.py:

(parse_parameters_string):
Parse 'enum' as well.

  • Shared/LayerTreeContext.h:

Add enum traits.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::viewDidEnterWindow):
(WebKit::WebPageProxy::layerHostingModeDidChange):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::reinitializeWebPage):
(WebKit::WebPage::setLayerHostingMode):

  • WebProcess/WebPage/WebPage.h:

Change unsigned to LayerHostingMode.

  • WebProcess/WebPage/WebPage.messages.in:

Change unsigned to LayerHostingMode.

Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r205983 r206000  
     12016-09-15  Anders Carlsson  <andersca@apple.com>
     2
     3        Add support for enum class parameters in the message generator
     4        https://bugs.webkit.org/show_bug.cgi?id=162036
     5
     6        Reviewed by Brady Eidson.
     7
     8        Also, convert the WebPage::SetLayerHostingMode to take an actual enum class.
     9
     10        * Scripts/webkit/messages.py:
     11        (function_parameter_type):
     12        Change this to take the parameter kind as well, and use the raw type for enums.
     13
     14        (arguments_type):
     15        (message_to_struct_declaration):
     16        Pass the kind to function_parameter_type.
     17
     18        (forward_declaration):
     19        (forward_declarations_for_namespace):
     20        Forward declare enums with "enum class".
     21
     22        (headers_for_type):
     23        Add WebKit::LayerHostingMode as a special case.
     24
     25        (generate_message_handler):
     26        Pass the kind to function_parameter_type.
     27
     28        * Scripts/webkit/parser.py:
     29        (parse_parameters_string):
     30        Parse 'enum' as well.
     31
     32        * Shared/LayerTreeContext.h:
     33        Add enum traits.
     34
     35        * UIProcess/WebPageProxy.cpp:
     36        (WebKit::WebPageProxy::viewDidEnterWindow):
     37        (WebKit::WebPageProxy::layerHostingModeDidChange):
     38        * WebProcess/WebPage/WebPage.cpp:
     39        (WebKit::WebPage::reinitializeWebPage):
     40        (WebKit::WebPage::setLayerHostingMode):
     41        * WebProcess/WebPage/WebPage.h:
     42        Change unsigned to LayerHostingMode.
     43
     44        * WebProcess/WebPage/WebPage.messages.in:
     45        Change unsigned to LayerHostingMode.
     46
    1472016-09-14  Beth Dakin  <bdakin@apple.com>
    248
  • trunk/Source/WebKit2/Scripts/webkit/messages.py

    r204742 r206000  
    6767
    6868
    69 def function_parameter_type(type):
     69def function_parameter_type(type, kind):
    7070    # Don't use references for built-in types.
    7171    builtin_types = frozenset([
     
    8686        return type
    8787
     88    if kind == 'enum':
     89        return type
     90
    8891    return 'const %s&' % type
    8992
     
    9497
    9598def arguments_type(message):
    96     return 'std::tuple<%s>' % ', '.join(function_parameter_type(parameter.type) for parameter in message.parameters)
     99    return 'std::tuple<%s>' % ', '.join(function_parameter_type(parameter.type, parameter.kind) for parameter in message.parameters)
    97100
    98101
     
    103106def message_to_struct_declaration(message):
    104107    result = []
    105     function_parameters = [(function_parameter_type(x.type), x.name) for x in message.parameters]
     108    function_parameters = [(function_parameter_type(x.type, x.kind), x.name) for x in message.parameters]
    106109    result.append('class %s {\n' % message.name)
    107110    result.append('public:\n')
     
    114117    if message.reply_parameters != None:
    115118        if message.has_attribute(DELAYED_ATTRIBUTE):
    116             send_parameters = [(function_parameter_type(x.type), x.name) for x in message.reply_parameters]
     119            send_parameters = [(function_parameter_type(x.type, x.kind), x.name) for x in message.reply_parameters]
    117120            result.append('    struct DelayedReply : public ThreadSafeRefCounted<DelayedReply> {\n')
    118121            result.append('        DelayedReply(PassRefPtr<IPC::Connection>, std::unique_ptr<IPC::Encoder>);\n')
     
    144147
    145148
    146 def struct_or_class(namespace, kind_and_type):
     149def forward_declaration(namespace, kind_and_type):
    147150    kind, type = kind_and_type
    148151
     
    150153    if kind == 'struct':
    151154        return 'struct %s' % type
     155    elif kind == 'enum':
     156        return 'enum class %s' % type
    152157    else:
    153158        return 'class %s' % type
    154 
    155159
    156160def forward_declarations_for_namespace(namespace, kind_and_types):
    157161    result = []
    158162    result.append('namespace %s {\n' % namespace)
    159     result += ['    %s;\n' % struct_or_class(namespace, x) for x in kind_and_types]
     163    result += ['    %s;\n' % forward_declaration(namespace, x) for x in kind_and_types]
    160164    result.append('}\n')
    161165    return ''.join(result)
     
    371375        'struct WebKit::WebScriptMessageHandlerData': ['"WebUserContentControllerDataTypes.h"'],
    372376        'std::chrono::system_clock::time_point': ['<chrono>'],
     377        'WebKit::LayerHostingMode': ['"LayerTreeContext.h"'],
    373378    }
    374379
     
    474479
    475480        for message in sync_delayed_messages:
    476             send_parameters = [(function_parameter_type(x.type), x.name) for x in message.reply_parameters]
     481            send_parameters = [(function_parameter_type(x.type, x.kind), x.name) for x in message.reply_parameters]
    477482
    478483            if message.condition:
  • trunk/Source/WebKit2/Scripts/webkit/parser.py

    r177608 r206000  
    134134            parameter_kind = 'struct'
    135135            split[0] = split[0][7:]
     136        elif split[0].startswith('enum '):
     137            parameter_kind = 'enum'
     138            split[0] = split[0][5:]
    136139
    137140        parameter_type = split[0]
  • trunk/Source/WebKit2/Shared/LayerTreeContext.h

    r204668 r206000  
    2424 */
    2525
    26 #ifndef LayerTreeContext_h
    27 #define LayerTreeContext_h
     26#pragma once
    2827
    2928#include <stdint.h>
     29#include <wtf/EnumTraits.h>
    3030
    3131namespace IPC {
     
    6363}
    6464
     65}
     66
     67namespace WTF {
     68template<> struct EnumTraits<WebKit::LayerHostingMode> {
     69    using values = EnumValues<
     70        WebKit::LayerHostingMode,
     71#if HAVE(OUT_OF_PROCESS_LAYER_HOSTING)
     72        WebKit::LayerHostingMode::OutOfProcess,
     73#endif
     74        WebKit::LayerHostingMode::InProcess
     75    >;
    6576};
    66 
    67 #endif // LayerTreeContext_h
     77}
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r205938 r206000  
    15041504    if (m_layerHostingMode != layerHostingMode) {
    15051505        m_layerHostingMode = layerHostingMode;
    1506         m_process->send(Messages::WebPage::SetLayerHostingMode(static_cast<unsigned>(layerHostingMode)), m_pageID);
     1506        m_process->send(Messages::WebPage::SetLayerHostingMode(layerHostingMode), m_pageID);
    15071507    }
    15081508}
     
    16211621
    16221622    m_layerHostingMode = layerHostingMode;
    1623     m_process->send(Messages::WebPage::SetLayerHostingMode(static_cast<unsigned>(layerHostingMode)), m_pageID);
     1623    m_process->send(Messages::WebPage::SetLayerHostingMode(layerHostingMode), m_pageID);
    16241624}
    16251625
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r205983 r206000  
    578578        setViewState(parameters.viewState, false, Vector<uint64_t>());
    579579    if (m_layerHostingMode != parameters.layerHostingMode)
    580         setLayerHostingMode(static_cast<unsigned>(parameters.layerHostingMode));
     580        setLayerHostingMode(parameters.layerHostingMode);
    581581}
    582582
     
    26092609}
    26102610
    2611 void WebPage::setLayerHostingMode(unsigned layerHostingMode)
    2612 {
    2613     m_layerHostingMode = static_cast<LayerHostingMode>(layerHostingMode);
     2611void WebPage::setLayerHostingMode(LayerHostingMode layerHostingMode)
     2612{
     2613    m_layerHostingMode = layerHostingMode;
    26142614
    26152615    m_drawingArea->setLayerHostingMode(m_layerHostingMode);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r205983 r206000  
    440440
    441441    LayerHostingMode layerHostingMode() const { return m_layerHostingMode; }
    442     void setLayerHostingMode(unsigned);
     442    void setLayerHostingMode(LayerHostingMode);
    443443
    444444#if PLATFORM(COCOA)
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r205909 r206000  
    2424    SetInitialFocus(bool forward, bool isKeyboardEventValid, WebKit::WebKeyboardEvent event, uint64_t callbackID)
    2525    SetViewState(unsigned viewState, bool wantsDidUpdateViewState, Vector<uint64_t> callbackIDs)
    26     SetLayerHostingMode(unsigned layerHostingMode)
     26    SetLayerHostingMode(enum WebKit::LayerHostingMode layerHostingMode)
    2727
    2828    SetSessionID(WebCore::SessionID sessionID)
Note: See TracChangeset for help on using the changeset viewer.