summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Scripts/webkit2
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebKit2/Scripts/webkit2
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit. Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit2/Scripts/webkit2')
-rw-r--r--Source/WebKit2/Scripts/webkit2/messages.py171
-rw-r--r--Source/WebKit2/Scripts/webkit2/messages_unittest.py149
-rw-r--r--Source/WebKit2/Scripts/webkit2/model.py8
-rw-r--r--Source/WebKit2/Scripts/webkit2/parser.py33
4 files changed, 169 insertions, 192 deletions
diff --git a/Source/WebKit2/Scripts/webkit2/messages.py b/Source/WebKit2/Scripts/webkit2/messages.py
index 0c9b94116..d062a1741 100644
--- a/Source/WebKit2/Scripts/webkit2/messages.py
+++ b/Source/WebKit2/Scripts/webkit2/messages.py
@@ -24,8 +24,9 @@ import collections
import re
from webkit2 import parser
+WANTS_CONNECTION_ATTRIBUTE = 'WantsConnection'
+LEGACY_RECEIVER_ATTRIBUTE = 'LegacyReceiver'
DELAYED_ATTRIBUTE = 'Delayed'
-DISPATCH_ON_CONNECTION_QUEUE_ATTRIBUTE = 'DispatchOnConnectionQueue'
VARIADIC_ATTRIBUTE = 'Variadic'
_license_header = """/*
@@ -65,13 +66,6 @@ def surround_in_condition(string, condition):
return '#if %s\n%s#endif\n' % (condition, string)
-def messages_to_kind_enum(messages):
- result = []
- result.append('enum Kind {\n')
- result += [surround_in_condition(' %s,\n' % message.id(), message.condition) for message in messages]
- result.append('};\n')
- return ''.join(result)
-
def function_parameter_type(type):
# Don't use references for built-in types.
builtin_types = frozenset([
@@ -128,7 +122,6 @@ def message_to_struct_declaration(message):
function_parameters = [(function_parameter_type(x.type), x.name) for x in message.parameters]
result.append('struct %s : %s' % (message.name, base_class(message)))
result.append(' {\n')
- result.append(' static const Kind messageID = %s;\n' % message.id())
result.append(' static CoreIPC::StringReference receiverName() { return messageReceiverName(); }\n')
result.append(' static CoreIPC::StringReference name() { return CoreIPC::StringReference("%s"); }\n' % message.name)
result.append(' static const bool isSync = %s;\n' % ('false', 'true')[message.reply_parameters != None])
@@ -195,6 +188,7 @@ def struct_or_class(namespace, type):
'WebKit::DrawingAreaInfo',
'WebKit::EditorState',
'WebKit::NetworkProcessCreationParameters',
+ 'WebKit::OfflineStorageProcessCreationParameters',
'WebKit::PlatformPopupMenuData',
'WebKit::PluginCreationParameters',
'WebKit::PluginProcessCreationParameters',
@@ -230,7 +224,6 @@ def forward_declarations_and_headers(receiver):
headers = set([
'"Arguments.h"',
'"MessageEncoder.h"',
- '"MessageID.h"',
'"StringReference.h"',
])
@@ -292,19 +285,10 @@ def generate_messages_header(file):
result.append(' return CoreIPC::StringReference("%s");\n' % receiver.name)
result.append('}\n')
result.append('\n')
-
- result.append(messages_to_kind_enum(receiver.messages))
- result.append('\n')
result.append('\n'.join([message_to_struct_declaration(x) for x in receiver.messages]))
result.append('\n')
result.append('} // namespace %s\n} // namespace Messages\n' % receiver.name)
- result.append('\nnamespace CoreIPC {\n\n')
- result.append('template<> struct MessageKindTraits<Messages::%s::Kind> {\n' % receiver.name)
- result.append(' static const MessageClass messageClass = MessageClass%s;\n' % receiver.name)
- result.append('};\n')
- result.append('\n} // namespace CoreIPC\n')
-
if receiver.condition:
result.append('\n#endif // %s\n' % receiver.condition)
@@ -321,18 +305,17 @@ def handler_function(receiver, message):
def async_message_statement(receiver, message):
dispatch_function_args = ['decoder', 'this', '&%s' % handler_function(receiver, message)]
+
dispatch_function = 'handleMessage'
if message.has_attribute(VARIADIC_ATTRIBUTE):
dispatch_function += 'Variadic'
- if message.has_attribute(DISPATCH_ON_CONNECTION_QUEUE_ATTRIBUTE):
- dispatch_function += 'OnConnectionQueue'
+
+ if message.has_attribute(WANTS_CONNECTION_ATTRIBUTE):
dispatch_function_args.insert(0, 'connection')
-
+
result = []
result.append(' if (decoder.messageName() == Messages::%s::%s::name()) {\n' % (receiver.name, message.name))
result.append(' CoreIPC::%s<Messages::%s::%s>(%s);\n' % (dispatch_function, receiver.name, message.name, ', '.join(dispatch_function_args)))
- if message.has_attribute(DISPATCH_ON_CONNECTION_QUEUE_ATTRIBUTE):
- result.append(' didHandleMessage = true;\n')
result.append(' return;\n')
result.append(' }\n')
return surround_in_condition(''.join(result), message.condition)
@@ -345,20 +328,46 @@ def sync_message_statement(receiver, message):
if message.has_attribute(VARIADIC_ATTRIBUTE):
dispatch_function += 'Variadic'
+ wants_connection = message.has_attribute(DELAYED_ATTRIBUTE) or message.has_attribute(WANTS_CONNECTION_ATTRIBUTE)
+
result = []
result.append(' if (decoder.messageName() == Messages::%s::%s::name()) {\n' % (receiver.name, message.name))
- result.append(' CoreIPC::%s<Messages::%s::%s>(%sdecoder, %sreplyEncoder, this, &%s);\n' % (dispatch_function, receiver.name, message.name, 'connection, ' if message.has_attribute(DELAYED_ATTRIBUTE) else '', '' if message.has_attribute(DELAYED_ATTRIBUTE) else '*', handler_function(receiver, message)))
+ result.append(' CoreIPC::%s<Messages::%s::%s>(%sdecoder, %sreplyEncoder, this, &%s);\n' % (dispatch_function, receiver.name, message.name, 'connection, ' if wants_connection else '', '' if message.has_attribute(DELAYED_ATTRIBUTE) else '*', handler_function(receiver, message)))
result.append(' return;\n')
result.append(' }\n')
return surround_in_condition(''.join(result), message.condition)
+def class_template_headers(template_string):
+ template_string = template_string.strip()
+
+ class_template_types = {
+ # FIXME: Remove the unprefixed versions.
+ 'Vector': {'headers': ['<wtf/Vector.h>'], 'argument_coder_headers': ['"ArgumentCoders.h"']},
+ 'HashMap': {'headers': ['<wtf/HashMap.h>'], 'argument_coder_headers': ['"ArgumentCoders.h"']},
+
+ 'WTF::Vector': {'headers': ['<wtf/Vector.h>'], 'argument_coder_headers': ['"ArgumentCoders.h"']},
+ 'WTF::HashMap': {'headers': ['<wtf/HashMap.h>'], 'argument_coder_headers': ['"ArgumentCoders.h"']},
+ 'std::pair': {'headers': ['<utility>'], 'argument_coder_headers': ['"ArgumentCoders.h"']},
+ }
+
+ match = re.match('(?P<template_name>.+?)<(?P<parameter_string>.+)>', template_string)
+ if not match:
+ return {'header_infos':[], 'types':[template_string]}
+ header_infos = [class_template_types[match.groupdict()['template_name']]]
+ types = []
+
+ for parameter in parser.split_parameters_string(match.groupdict()['parameter_string']):
+ parameter_header_infos_and_types = class_template_headers(parameter)
+
+ header_infos += parameter_header_infos_and_types['header_infos'];
+ types += parameter_header_infos_and_types['types']
+
+ return {'header_infos':header_infos, 'types':types}
+
+
def argument_coder_headers_for_type(type):
- # Check for Vector.
- match = re.search(r'Vector<(.+)>', type)
- if match:
- element_type = match.groups()[0].strip()
- return ['"ArgumentCoders.h"'] + argument_coder_headers_for_type(element_type)
+ header_infos_and_types = class_template_headers(type)
special_cases = {
'WTF::String': '"ArgumentCoders.h"',
@@ -366,24 +375,25 @@ def argument_coder_headers_for_type(type):
'WebKit::WebContextUserMessageEncoder': '"WebContextUserMessageCoders.h"',
}
- if type in special_cases:
- return [special_cases[type]]
+ headers = []
+ for header_info in header_infos_and_types['header_infos']:
+ headers += header_info['argument_coder_headers']
- split = type.split('::')
- if len(split) < 2:
- return []
- if split[0] == 'WebCore':
- return ['"WebCoreArgumentCoders.h"']
+ for type in header_infos_and_types['types']:
+ if type in special_cases:
+ headers.append(special_cases[type])
+ continue
- return []
+ split = type.split('::')
+ if len(split) < 2:
+ continue
+ if split[0] == 'WebCore':
+ headers.append('"WebCoreArgumentCoders.h"')
+ return headers
def headers_for_type(type):
- # Check for Vector.
- match = re.search(r'Vector<(.+)>', type)
- if match:
- element_type = match.groups()[0].strip()
- return ['<wtf/Vector.h>'] + headers_for_type(element_type)
+ header_infos_and_types = class_template_headers(type)
special_cases = {
'WTF::String': ['<wtf/text/WTFString.h>'],
@@ -394,30 +404,39 @@ def headers_for_type(type):
'WebCore::KeypressCommand': ['<WebCore/KeyboardEvent.h>'],
'WebCore::FileChooserSettings': ['<WebCore/FileChooser.h>'],
'WebCore::PluginInfo': ['<WebCore/PluginData.h>'],
+ 'WebCore::TextCheckingRequestData': ['<WebCore/TextChecking.h>'],
'WebCore::TextCheckingResult': ['<WebCore/TextCheckerClient.h>'],
'WebCore::ViewportAttributes': ['<WebCore/ViewportArguments.h>'],
'WebKit::InjectedBundleUserMessageEncoder': [],
'WebKit::WebContextUserMessageEncoder': [],
'WebKit::WebGestureEvent': ['"WebEvent.h"'],
- 'WebKit::WebLayerID': ['"WebLayerTreeInfo.h"'],
- 'WebKit::WebLayerInfo': ['"WebLayerTreeInfo.h"'],
'WebKit::WebKeyboardEvent': ['"WebEvent.h"'],
'WebKit::WebMouseEvent': ['"WebEvent.h"'],
'WebKit::WebTouchEvent': ['"WebEvent.h"'],
'WebKit::WebWheelEvent': ['"WebEvent.h"'],
}
- if type in special_cases:
- return special_cases[type]
- # We assume that we must include a header for a type iff it has a scope
- # resolution operator (::).
- split = type.split('::')
- if len(split) < 2:
- return []
- if split[0] == 'WebKit' or split[0] == 'CoreIPC':
- return ['"%s.h"' % split[1]]
- return ['<%s/%s.h>' % tuple(split)]
+ headers = []
+ for header_info in header_infos_and_types['header_infos']:
+ headers += header_info['headers']
+
+ for type in header_infos_and_types['types']:
+ if type in special_cases:
+ headers += special_cases[type]
+ continue
+
+ # We assume that we must include a header for a type iff it has a scope
+ # resolution operator (::).
+ split = type.split('::')
+ if len(split) < 2:
+ continue
+ if split[0] == 'WebKit' or split[0] == 'CoreIPC':
+ headers.append('"%s.h"' % split[1])
+ else:
+ headers.append('<%s/%s.h>' % tuple(split))
+
+ return headers
def generate_message_handler(file):
receiver = parser.parse(file)
@@ -517,7 +536,7 @@ def generate_message_handler(file):
result.append('bool %s::DelayedReply::send(%s)\n' % (message.name, ', '.join([' '.join(x) for x in send_parameters])))
result.append('{\n')
result.append(' ASSERT(m_encoder);\n')
- result += [' m_encoder->encode(%s);\n' % x.name for x in message.reply_parameters]
+ result += [' *m_encoder << %s;\n' % x.name for x in message.reply_parameters]
result.append(' bool result = m_connection->sendSyncReply(m_encoder.release());\n')
result.append(' m_connection = nullptr;\n')
result.append(' return result;\n')
@@ -531,47 +550,37 @@ def generate_message_handler(file):
result.append('namespace WebKit {\n\n')
- async_dispatch_on_connection_queue_messages = []
- sync_dispatch_on_connection_queue_messages = []
async_messages = []
sync_messages = []
for message in receiver.messages:
if message.reply_parameters is not None:
- if message.has_attribute(DISPATCH_ON_CONNECTION_QUEUE_ATTRIBUTE):
- sync_dispatch_on_connection_queue_messages.append(message)
- else:
- sync_messages.append(message)
+ sync_messages.append(message)
else:
- if message.has_attribute(DISPATCH_ON_CONNECTION_QUEUE_ATTRIBUTE):
- async_dispatch_on_connection_queue_messages.append(message)
- else:
- async_messages.append(message)
-
- if async_dispatch_on_connection_queue_messages:
- result.append('void %s::didReceive%sMessageOnConnectionWorkQueue(CoreIPC::Connection* connection, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder, bool& didHandleMessage)\n' % (receiver.name, receiver.name))
- result.append('{\n')
- result.append('#if COMPILER(MSVC)\n')
- result.append('#pragma warning(push)\n')
- result.append('#pragma warning(disable: 4065)\n')
- result.append('#endif\n')
- result += [async_message_statement(receiver, message) for message in async_dispatch_on_connection_queue_messages]
- result.append('#if COMPILER(MSVC)\n')
- result.append('#pragma warning(pop)\n')
- result.append('#endif\n')
- result.append('}\n\n')
+ async_messages.append(message)
if async_messages:
- result.append('void %s::didReceive%sMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder)\n' % (receiver.name, receiver.name))
+ if receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
+ result.append('void %s::didReceive%sMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder& decoder)\n' % (receiver.name, receiver.name))
+ else:
+ result.append('void %s::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageDecoder& decoder)\n' % (receiver.name))
+
result.append('{\n')
result += [async_message_statement(receiver, message) for message in async_messages]
+ if not receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
+ result.append(' UNUSED_PARAM(connection);\n')
result.append(' ASSERT_NOT_REACHED();\n')
result.append('}\n')
if sync_messages:
result.append('\n')
- result.append('void %s::didReceiveSync%sMessage(CoreIPC::Connection*%s, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)\n' % (receiver.name, receiver.name, ' connection' if sync_delayed_messages else ''))
+ if receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
+ result.append('void %s::didReceiveSync%sMessage(CoreIPC::Connection*%s, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)\n' % (receiver.name, receiver.name, ' connection' if sync_delayed_messages else ''))
+ else:
+ result.append('void %s::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)\n' % (receiver.name))
result.append('{\n')
result += [sync_message_statement(receiver, message) for message in sync_messages]
+ if not receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE):
+ result.append(' UNUSED_PARAM(connection);\n')
result.append(' ASSERT_NOT_REACHED();\n')
result.append('}\n')
diff --git a/Source/WebKit2/Scripts/webkit2/messages_unittest.py b/Source/WebKit2/Scripts/webkit2/messages_unittest.py
index 6b1ebfd2f..a7a403ca6 100644
--- a/Source/WebKit2/Scripts/webkit2/messages_unittest.py
+++ b/Source/WebKit2/Scripts/webkit2/messages_unittest.py
@@ -52,7 +52,7 @@ _messages_file_contents = """# Copyright (C) 2010 Apple Inc. All rights reserved
#if ENABLE(WEBKIT2)
-messages -> WebPage {
+messages -> WebPage LegacyReceiver {
LoadURL(WTF::String url)
#if ENABLE(TOUCH_EVENTS)
TouchEvent(WebKit::WebTouchEvent event)
@@ -62,18 +62,19 @@ messages -> WebPage {
PreferencesDidChange(WebKit::WebPreferencesStore store)
SendDoubleAndFloat(double d, float f)
- SendInts(Vector<uint64_t> ints, Vector<Vector<uint64_t> > intVectors)
+ SendInts(Vector<uint64_t> ints, Vector<Vector<uint64_t>> intVectors)
CreatePlugin(uint64_t pluginInstanceID, WebKit::Plugin::Parameters parameters) -> (bool result)
RunJavaScriptAlert(uint64_t frameID, WTF::String message) -> ()
- GetPlugins(bool refresh) -> (Vector<WebCore::PluginInfo> plugins) DispatchOnConnectionQueue
+ GetPlugins(bool refresh) -> (Vector<WebCore::PluginInfo> plugins)
GetPluginProcessConnection(WTF::String pluginPath) -> (CoreIPC::Connection::Handle connectionHandle) Delayed
- TestMultipleAttributes() -> () DispatchOnConnectionQueue Delayed
- TestConnectionQueue(uint64_t pluginID) DispatchOnConnectionQueue
+ TestMultipleAttributes() -> () WantsConnection Delayed
TestParameterAttributes([AttributeOne AttributeTwo] uint64_t foo, double bar, [AttributeThree] double baz)
+ TemplateTest(WTF::HashMap<String, std::pair<String, uint64_t>> a)
+
#if PLATFORM(MAC)
DidCreateWebProcessConnection(CoreIPC::MachPort connectionIdentifier)
#endif
@@ -146,7 +147,7 @@ _expected_results = {
'name': 'SendInts',
'parameters': (
('Vector<uint64_t>', 'ints'),
- ('Vector<Vector<uint64_t> >', 'intVectors')
+ ('Vector<Vector<uint64_t>>', 'intVectors')
),
'conditions': (None),
},
@@ -199,18 +200,18 @@ _expected_results = {
'conditions': (None),
},
{
- 'name': 'TestConnectionQueue',
+ 'name': 'TestParameterAttributes',
'parameters': (
- ('uint64_t', 'pluginID'),
+ ('uint64_t', 'foo', ('AttributeOne', 'AttributeTwo')),
+ ('double', 'bar'),
+ ('double', 'baz', ('AttributeThree',)),
),
'conditions': (None),
},
{
- 'name': 'TestParameterAttributes',
+ 'name': 'TemplateTest',
'parameters': (
- ('uint64_t', 'foo', ('AttributeOne', 'AttributeTwo')),
- ('double', 'bar'),
- ('double', 'baz', ('AttributeThree',)),
+ ('WTF::HashMap<String, std::pair<String, uint64_t>>', 'a'),
),
'conditions': (None),
},
@@ -316,11 +317,12 @@ _expected_header = """/*
#include "Arguments.h"
#include "Connection.h"
#include "MessageEncoder.h"
-#include "MessageID.h"
#include "Plugin.h"
#include "StringReference.h"
#include <WebCore/KeyboardEvent.h>
#include <WebCore/PluginData.h>
+#include <utility>
+#include <wtf/HashMap.h>
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/Vector.h>
@@ -347,39 +349,7 @@ static inline CoreIPC::StringReference messageReceiverName()
return CoreIPC::StringReference("WebPage");
}
-enum Kind {
- LoadURLID,
-#if ENABLE(TOUCH_EVENTS)
- TouchEventID,
-#endif
- DidReceivePolicyDecisionID,
- CloseID,
- PreferencesDidChangeID,
- SendDoubleAndFloatID,
- SendIntsID,
- CreatePluginID,
- RunJavaScriptAlertID,
- GetPluginsID,
- GetPluginProcessConnectionID,
- TestMultipleAttributesID,
- TestConnectionQueueID,
- TestParameterAttributesID,
-#if PLATFORM(MAC)
- DidCreateWebProcessConnectionID,
-#endif
-#if PLATFORM(MAC)
- InterpretKeyEventID,
-#endif
-#if ENABLE(DEPRECATED_FEATURE)
- DeprecatedOperationID,
-#endif
-#if ENABLE(EXPERIMENTAL_FEATURE)
- ExperimentalOperationID,
-#endif
-};
-
struct LoadURL : CoreIPC::Arguments1<const WTF::String&> {
- static const Kind messageID = LoadURLID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("LoadURL"); }
static const bool isSync = false;
@@ -393,7 +363,6 @@ struct LoadURL : CoreIPC::Arguments1<const WTF::String&> {
#if ENABLE(TOUCH_EVENTS)
struct TouchEvent : CoreIPC::Arguments1<const WebKit::WebTouchEvent&> {
- static const Kind messageID = TouchEventID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("TouchEvent"); }
static const bool isSync = false;
@@ -407,7 +376,6 @@ struct TouchEvent : CoreIPC::Arguments1<const WebKit::WebTouchEvent&> {
#endif
struct DidReceivePolicyDecision : CoreIPC::Arguments3<uint64_t, uint64_t, uint32_t> {
- static const Kind messageID = DidReceivePolicyDecisionID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("DidReceivePolicyDecision"); }
static const bool isSync = false;
@@ -420,7 +388,6 @@ struct DidReceivePolicyDecision : CoreIPC::Arguments3<uint64_t, uint64_t, uint32
};
struct Close : CoreIPC::Arguments0 {
- static const Kind messageID = CloseID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("Close"); }
static const bool isSync = false;
@@ -429,7 +396,6 @@ struct Close : CoreIPC::Arguments0 {
};
struct PreferencesDidChange : CoreIPC::Arguments1<const WebKit::WebPreferencesStore&> {
- static const Kind messageID = PreferencesDidChangeID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("PreferencesDidChange"); }
static const bool isSync = false;
@@ -442,7 +408,6 @@ struct PreferencesDidChange : CoreIPC::Arguments1<const WebKit::WebPreferencesSt
};
struct SendDoubleAndFloat : CoreIPC::Arguments2<double, float> {
- static const Kind messageID = SendDoubleAndFloatID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("SendDoubleAndFloat"); }
static const bool isSync = false;
@@ -454,21 +419,19 @@ struct SendDoubleAndFloat : CoreIPC::Arguments2<double, float> {
}
};
-struct SendInts : CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t> >&> {
- static const Kind messageID = SendIntsID;
+struct SendInts : CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t>>&> {
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("SendInts"); }
static const bool isSync = false;
- typedef CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t> >&> DecodeType;
- SendInts(const Vector<uint64_t>& ints, const Vector<Vector<uint64_t> >& intVectors)
- : CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t> >&>(ints, intVectors)
+ typedef CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t>>&> DecodeType;
+ SendInts(const Vector<uint64_t>& ints, const Vector<Vector<uint64_t>>& intVectors)
+ : CoreIPC::Arguments2<const Vector<uint64_t>&, const Vector<Vector<uint64_t>>&>(ints, intVectors)
{
}
};
struct CreatePlugin : CoreIPC::Arguments2<uint64_t, const WebKit::Plugin::Parameters&> {
- static const Kind messageID = CreatePluginID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("CreatePlugin"); }
static const bool isSync = true;
@@ -482,7 +445,6 @@ struct CreatePlugin : CoreIPC::Arguments2<uint64_t, const WebKit::Plugin::Parame
};
struct RunJavaScriptAlert : CoreIPC::Arguments2<uint64_t, const WTF::String&> {
- static const Kind messageID = RunJavaScriptAlertID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("RunJavaScriptAlert"); }
static const bool isSync = true;
@@ -496,7 +458,6 @@ struct RunJavaScriptAlert : CoreIPC::Arguments2<uint64_t, const WTF::String&> {
};
struct GetPlugins : CoreIPC::Arguments1<bool> {
- static const Kind messageID = GetPluginsID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("GetPlugins"); }
static const bool isSync = true;
@@ -510,7 +471,6 @@ struct GetPlugins : CoreIPC::Arguments1<bool> {
};
struct GetPluginProcessConnection : CoreIPC::Arguments1<const WTF::String&> {
- static const Kind messageID = GetPluginProcessConnectionID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("GetPluginProcessConnection"); }
static const bool isSync = true;
@@ -535,7 +495,6 @@ struct GetPluginProcessConnection : CoreIPC::Arguments1<const WTF::String&> {
};
struct TestMultipleAttributes : CoreIPC::Arguments0 {
- static const Kind messageID = TestMultipleAttributesID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("TestMultipleAttributes"); }
static const bool isSync = true;
@@ -555,35 +514,32 @@ struct TestMultipleAttributes : CoreIPC::Arguments0 {
typedef CoreIPC::Arguments0 DecodeType;
};
-struct TestConnectionQueue : CoreIPC::Arguments1<uint64_t> {
- static const Kind messageID = TestConnectionQueueID;
+struct TestParameterAttributes : CoreIPC::Arguments3<uint64_t, double, double> {
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
- static CoreIPC::StringReference name() { return CoreIPC::StringReference("TestConnectionQueue"); }
+ static CoreIPC::StringReference name() { return CoreIPC::StringReference("TestParameterAttributes"); }
static const bool isSync = false;
- typedef CoreIPC::Arguments1<uint64_t> DecodeType;
- explicit TestConnectionQueue(uint64_t pluginID)
- : CoreIPC::Arguments1<uint64_t>(pluginID)
+ typedef CoreIPC::Arguments3<uint64_t, double, double> DecodeType;
+ TestParameterAttributes(uint64_t foo, double bar, double baz)
+ : CoreIPC::Arguments3<uint64_t, double, double>(foo, bar, baz)
{
}
};
-struct TestParameterAttributes : CoreIPC::Arguments3<uint64_t, double, double> {
- static const Kind messageID = TestParameterAttributesID;
+struct TemplateTest : CoreIPC::Arguments1<const WTF::HashMap<String, std::pair<String, uint64_t>>&> {
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
- static CoreIPC::StringReference name() { return CoreIPC::StringReference("TestParameterAttributes"); }
+ static CoreIPC::StringReference name() { return CoreIPC::StringReference("TemplateTest"); }
static const bool isSync = false;
- typedef CoreIPC::Arguments3<uint64_t, double, double> DecodeType;
- TestParameterAttributes(uint64_t foo, double bar, double baz)
- : CoreIPC::Arguments3<uint64_t, double, double>(foo, bar, baz)
+ typedef CoreIPC::Arguments1<const WTF::HashMap<String, std::pair<String, uint64_t>>&> DecodeType;
+ explicit TemplateTest(const WTF::HashMap<String, std::pair<String, uint64_t>>& a)
+ : CoreIPC::Arguments1<const WTF::HashMap<String, std::pair<String, uint64_t>>&>(a)
{
}
};
#if PLATFORM(MAC)
struct DidCreateWebProcessConnection : CoreIPC::Arguments1<const CoreIPC::MachPort&> {
- static const Kind messageID = DidCreateWebProcessConnectionID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("DidCreateWebProcessConnection"); }
static const bool isSync = false;
@@ -598,7 +554,6 @@ struct DidCreateWebProcessConnection : CoreIPC::Arguments1<const CoreIPC::MachPo
#if PLATFORM(MAC)
struct InterpretKeyEvent : CoreIPC::Arguments1<uint32_t> {
- static const Kind messageID = InterpretKeyEventID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("InterpretKeyEvent"); }
static const bool isSync = true;
@@ -614,7 +569,6 @@ struct InterpretKeyEvent : CoreIPC::Arguments1<uint32_t> {
#if ENABLE(DEPRECATED_FEATURE)
struct DeprecatedOperation : CoreIPC::Arguments1<const CoreIPC::DummyType&> {
- static const Kind messageID = DeprecatedOperationID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("DeprecatedOperation"); }
static const bool isSync = false;
@@ -629,7 +583,6 @@ struct DeprecatedOperation : CoreIPC::Arguments1<const CoreIPC::DummyType&> {
#if ENABLE(EXPERIMENTAL_FEATURE)
struct ExperimentalOperation : CoreIPC::Arguments1<const CoreIPC::DummyType&> {
- static const Kind messageID = ExperimentalOperationID;
static CoreIPC::StringReference receiverName() { return messageReceiverName(); }
static CoreIPC::StringReference name() { return CoreIPC::StringReference("ExperimentalOperation"); }
static const bool isSync = false;
@@ -645,14 +598,6 @@ struct ExperimentalOperation : CoreIPC::Arguments1<const CoreIPC::DummyType&> {
} // namespace WebPage
} // namespace Messages
-namespace CoreIPC {
-
-template<> struct MessageKindTraits<Messages::WebPage::Kind> {
- static const MessageClass messageClass = MessageClassWebPage;
-};
-
-} // namespace CoreIPC
-
#endif // ENABLE(WEBKIT2)
#endif // WebPageMessages_h
@@ -709,6 +654,8 @@ _expected_receiver_implementation = """/*
#include <WebCore/KeyboardEvent.h>
#endif
#include <WebCore/PluginData.h>
+#include <utility>
+#include <wtf/HashMap.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
@@ -730,7 +677,7 @@ GetPluginProcessConnection::DelayedReply::~DelayedReply()
bool GetPluginProcessConnection::DelayedReply::send(const CoreIPC::Connection::Handle& connectionHandle)
{
ASSERT(m_encoder);
- m_encoder->encode(connectionHandle);
+ *m_encoder << connectionHandle;
bool result = m_connection->sendSyncReply(m_encoder.release());
m_connection = nullptr;
return result;
@@ -761,23 +708,7 @@ bool TestMultipleAttributes::DelayedReply::send()
namespace WebKit {
-void WebPage::didReceiveWebPageMessageOnConnectionWorkQueue(CoreIPC::Connection* connection, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder, bool& didHandleMessage)
-{
-#if COMPILER(MSVC)
-#pragma warning(push)
-#pragma warning(disable: 4065)
-#endif
- if (decoder.messageName() == Messages::WebPage::TestConnectionQueue::name()) {
- CoreIPC::handleMessageOnConnectionQueue<Messages::WebPage::TestConnectionQueue>(connection, decoder, this, &WebPage::testConnectionQueue);
- didHandleMessage = true;
- return;
- }
-#if COMPILER(MSVC)
-#pragma warning(pop)
-#endif
-}
-
-void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder)
+void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder& decoder)
{
if (decoder.messageName() == Messages::WebPage::LoadURL::name()) {
CoreIPC::handleMessage<Messages::WebPage::LoadURL>(decoder, this, &WebPage::loadURL);
@@ -813,6 +744,10 @@ void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID,
CoreIPC::handleMessage<Messages::WebPage::TestParameterAttributes>(decoder, this, &WebPage::testParameterAttributes);
return;
}
+ if (decoder.messageName() == Messages::WebPage::TemplateTest::name()) {
+ CoreIPC::handleMessage<Messages::WebPage::TemplateTest>(decoder, this, &WebPage::templateTest);
+ return;
+ }
#if PLATFORM(MAC)
if (decoder.messageName() == Messages::WebPage::DidCreateWebProcessConnection::name()) {
CoreIPC::handleMessage<Messages::WebPage::DidCreateWebProcessConnection>(decoder, this, &WebPage::didCreateWebProcessConnection);
@@ -834,7 +769,7 @@ void WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID,
ASSERT_NOT_REACHED();
}
-void WebPage::didReceiveSyncWebPageMessage(CoreIPC::Connection* connection, CoreIPC::MessageID, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)
+void WebPage::didReceiveSyncWebPageMessage(CoreIPC::Connection* connection, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)
{
if (decoder.messageName() == Messages::WebPage::CreatePlugin::name()) {
CoreIPC::handleMessage<Messages::WebPage::CreatePlugin>(decoder, *replyEncoder, this, &WebPage::createPlugin);
@@ -844,10 +779,18 @@ void WebPage::didReceiveSyncWebPageMessage(CoreIPC::Connection* connection, Core
CoreIPC::handleMessage<Messages::WebPage::RunJavaScriptAlert>(decoder, *replyEncoder, this, &WebPage::runJavaScriptAlert);
return;
}
+ if (decoder.messageName() == Messages::WebPage::GetPlugins::name()) {
+ CoreIPC::handleMessage<Messages::WebPage::GetPlugins>(decoder, *replyEncoder, this, &WebPage::getPlugins);
+ return;
+ }
if (decoder.messageName() == Messages::WebPage::GetPluginProcessConnection::name()) {
CoreIPC::handleMessageDelayed<Messages::WebPage::GetPluginProcessConnection>(connection, decoder, replyEncoder, this, &WebPage::getPluginProcessConnection);
return;
}
+ if (decoder.messageName() == Messages::WebPage::TestMultipleAttributes::name()) {
+ CoreIPC::handleMessageDelayed<Messages::WebPage::TestMultipleAttributes>(connection, decoder, replyEncoder, this, &WebPage::testMultipleAttributes);
+ return;
+ }
#if PLATFORM(MAC)
if (decoder.messageName() == Messages::WebPage::InterpretKeyEvent::name()) {
CoreIPC::handleMessage<Messages::WebPage::InterpretKeyEvent>(decoder, *replyEncoder, this, &WebPage::interpretKeyEvent);
diff --git a/Source/WebKit2/Scripts/webkit2/model.py b/Source/WebKit2/Scripts/webkit2/model.py
index b10416c96..a84ebcb28 100644
--- a/Source/WebKit2/Scripts/webkit2/model.py
+++ b/Source/WebKit2/Scripts/webkit2/model.py
@@ -24,8 +24,9 @@ import itertools
class MessageReceiver(object):
- def __init__(self, name, messages, condition):
+ def __init__(self, name, attributes, messages, condition):
self.name = name
+ self.attributes = frozenset(attributes or [])
self.messages = messages
self.condition = condition
@@ -33,6 +34,8 @@ class MessageReceiver(object):
return itertools.chain((parameter for message in self.messages for parameter in message.parameters),
(reply_parameter for message in self.messages if message.reply_parameters for reply_parameter in message.reply_parameters))
+ def has_attribute(self, attribute):
+ return attribute in self.attributes
class Message(object):
def __init__(self, name, parameters, reply_parameters, attributes, condition):
@@ -42,9 +45,6 @@ class Message(object):
self.attributes = frozenset(attributes or [])
self.condition = condition
- def id(self):
- return '%sID' % self.name
-
def has_attribute(self, attribute):
return attribute in self.attributes
diff --git a/Source/WebKit2/Scripts/webkit2/parser.py b/Source/WebKit2/Scripts/webkit2/parser.py
index c40080f0a..e16593ae6 100644
--- a/Source/WebKit2/Scripts/webkit2/parser.py
+++ b/Source/WebKit2/Scripts/webkit2/parser.py
@@ -26,17 +26,20 @@ from webkit2 import model
def parse(file):
+ receiver_attributes = None
destination = None
messages = []
condition = None
master_condition = None
for line in file:
- match = re.search(r'messages -> ([A-Za-z_0-9]+) {', line)
+ match = re.search(r'messages -> (?P<destination>[A-Za-z_0-9]+) \s*(?:(?P<attributes>.*?)\s+)?{', line)
if match:
+ receiver_attributes = parse_attributes_string(match.group('attributes'))
+
if condition:
master_condition = condition
condition = None
- destination = match.group(1)
+ destination = match.group('destination')
continue
if line.startswith('#'):
if line.startswith('#if '):
@@ -66,7 +69,7 @@ def parse(file):
reply_parameters = None
messages.append(model.Message(name, parameters, reply_parameters, attributes, condition))
- return model.MessageReceiver(destination, messages, master_condition)
+ return model.MessageReceiver(destination, receiver_attributes, messages, master_condition)
def parse_attributes_string(attributes_string):
@@ -75,9 +78,31 @@ def parse_attributes_string(attributes_string):
return attributes_string.split()
+def split_parameters_string(parameters_string):
+ parameters = []
+ current_parameter_string = ''
+
+ nest_level = 0
+ for character in parameters_string:
+ if character == ',' and nest_level == 0:
+ parameters.append(current_parameter_string)
+ current_parameter_string = ''
+ continue
+
+ if character == '<':
+ nest_level += 1
+ elif character == '>':
+ nest_level -= 1
+
+ current_parameter_string += character
+
+ parameters.append(current_parameter_string)
+ return parameters
+
def parse_parameters_string(parameters_string):
parameters = []
- for parameter_string in parameters_string.split(', '):
+
+ for parameter_string in split_parameters_string(parameters_string):
match = re.search(r'\s*(?:\[(?P<attributes>.*?)\]\s+)?(?P<type_and_name>.*)', parameter_string)
attributes_string, type_and_name_string = match.group('attributes', 'type_and_name')
parameter_type, parameter_name = type_and_name_string.rsplit(' ', 1)