Index: headless/lib/browser/client_api_generator.py |
diff --git a/headless/lib/browser/client_api_generator.py b/headless/lib/browser/client_api_generator.py |
index 3fcef2609f2aabee24e55dfb5295f185c1e70d33..3903b1eab6b87c1d795a45b8ccdc82d2b1b28f16 100644 |
--- a/headless/lib/browser/client_api_generator.py |
+++ b/headless/lib/browser/client_api_generator.py |
@@ -114,7 +114,7 @@ def CreateUserTypeDefinition(domain, type): |
'type': 'std::unique_ptr<headless::%s::%s>' % (namespace, type['id']), |
'raw_type': 'headless::%s::%s' % (namespace, type['id']), |
'raw_pass_type': 'headless::%s::%s*' % (namespace, type['id']), |
- 'raw_return_type': 'headless::%s::%s*' % (namespace, type['id']), |
+ 'raw_return_type': 'const headless::%s::%s*' % (namespace, type['id']), |
} |
@@ -143,7 +143,7 @@ def CreateObjectTypeDefinition(): |
'type': 'std::unique_ptr<base::DictionaryValue>', |
'raw_type': 'base::DictionaryValue', |
'raw_pass_type': 'base::DictionaryValue*', |
- 'raw_return_type': 'base::DictionaryValue*', |
+ 'raw_return_type': 'const base::DictionaryValue*', |
} |
@@ -158,7 +158,7 @@ def WrapObjectTypeDefinition(type): |
'type': 'std::unique_ptr<%s>' % id, |
'raw_type': id, |
'raw_pass_type': '%s*' % id, |
- 'raw_return_type': '%s*' % id, |
+ 'raw_return_type': 'const %s*' % id, |
} |
@@ -172,7 +172,7 @@ def CreateAnyTypeDefinition(): |
'type': 'std::unique_ptr<base::Value>', |
'raw_type': 'base::Value', |
'raw_pass_type': 'base::Value*', |
- 'raw_return_type': 'base::Value*', |
+ 'raw_return_type': 'const base::Value*', |
} |
@@ -229,7 +229,7 @@ def WrapArrayDefinition(type): |
'type': 'std::vector<%s>' % type['type'], |
'raw_type': 'std::vector<%s>' % type['type'], |
'raw_pass_type': 'std::vector<%s>*' % type['type'], |
- 'raw_return_type': 'std::vector<%s>*' % type['type'], |
+ 'raw_return_type': 'const std::vector<%s>*' % type['type'], |
} |
@@ -330,6 +330,29 @@ def SynthesizeCommandTypes(json_api): |
domain['types'].append(result_type) |
+def SynthesizeEventTypes(json_api): |
+ """Generate types for events and their properties. |
+ |
+ Note that parameter objects are also created for events without parameters to |
+ make it easier to introduce parameters later. |
+ """ |
+ for domain in json_api['domains']: |
+ if not 'types' in domain: |
+ domain['types'] = [] |
+ for event in domain.get('events', []): |
+ for parameter in event.get('parameters', []): |
+ if 'enum' in parameter and not '$ref' in parameter: |
+ SynthesizeEnumType(domain, event['name'], parameter) |
+ event_type = { |
+ 'id': ToTitleCase(event['name']) + 'Params', |
+ 'type': 'object', |
+ 'description': 'Parameters for the %s event.' % ToTitleCase( |
+ event['name']), |
+ 'properties': event.get('parameters', []) |
+ } |
+ domain['types'].append(event_type) |
+ |
+ |
def Generate(jinja_env, output_dirname, json_api, class_name, file_types): |
template_context = { |
'api': json_api, |
@@ -365,6 +388,7 @@ if __name__ == '__main__': |
json_api, output_dirname = ParseArguments(sys.argv[1:]) |
jinja_env = InitializeJinjaEnv(output_dirname) |
SynthesizeCommandTypes(json_api) |
+ SynthesizeEventTypes(json_api) |
PatchFullQualifiedRefs(json_api) |
CreateTypeDefinitions(json_api) |
Generate(jinja_env, output_dirname, json_api, 'types', ['cc', 'h']) |