Chromium Code Reviews| Index: headless/lib/browser/devtools_api/client_api_generator.py |
| diff --git a/headless/lib/browser/devtools_api/client_api_generator.py b/headless/lib/browser/devtools_api/client_api_generator.py |
| index 6b9936d6aafe2488bcc4f5a84177bb1e8471c014..2f67f0f21486d680e4e175ae40414e24c2825dd0 100644 |
| --- a/headless/lib/browser/devtools_api/client_api_generator.py |
| +++ b/headless/lib/browser/devtools_api/client_api_generator.py |
| @@ -120,6 +120,7 @@ def PatchFullQualifiedRefs(json_api): |
| def CreateUserTypeDefinition(domain, type): |
| namespace = CamelCaseToHackerStyle(domain['domain']) |
| return { |
| + 'js_type': '!goog.DevTools.%s.%s' % (domain['domain'], type['id']), |
|
Sami
2017/05/24 09:16:21
Is the goog namespace the one we should be using?
alex clarke (OOO till 29th)
2017/05/24 11:38:14
Well we are google so goog seems appropriate?
Sami
2017/05/25 17:53:35
Let's use the chrome namespace since this is more
alex clarke (OOO till 29th)
2017/05/26 11:37:02
As discussed offline we had to use chromium instea
|
| 'return_type': 'std::unique_ptr<headless::%s::%s>' % ( |
| namespace, type['id']), |
| 'pass_type': 'std::unique_ptr<headless::%s::%s>' % ( |
| @@ -137,6 +138,7 @@ def CreateUserTypeDefinition(domain, type): |
| def CreateEnumTypeDefinition(domain_name, type): |
| namespace = CamelCaseToHackerStyle(domain_name) |
| return { |
| + 'js_type': '!goog.DevTools.%s.%s' % (domain_name, type['id']), |
| 'return_type': 'headless::%s::%s' % (namespace, type['id']), |
| 'pass_type': 'headless::%s::%s' % (namespace, type['id']), |
| 'to_raw_type': '%s', |
| @@ -151,6 +153,7 @@ def CreateEnumTypeDefinition(domain_name, type): |
| def CreateObjectTypeDefinition(): |
| return { |
| + 'js_type': '%s', |
| 'return_type': 'std::unique_ptr<base::DictionaryValue>', |
| 'pass_type': 'std::unique_ptr<base::DictionaryValue>', |
| 'to_raw_type': '*%s', |
| @@ -166,6 +169,7 @@ def CreateObjectTypeDefinition(): |
| def WrapObjectTypeDefinition(type): |
| id = type.get('id', 'base::Value') |
| return { |
| + 'js_type': '!Object', |
| 'return_type': 'std::unique_ptr<%s>' % id, |
| 'pass_type': 'std::unique_ptr<%s>' % id, |
| 'to_raw_type': '*%s', |
| @@ -180,6 +184,7 @@ def WrapObjectTypeDefinition(type): |
| def CreateAnyTypeDefinition(): |
| return { |
| + 'js_type': '*', |
| 'return_type': 'std::unique_ptr<base::Value>', |
| 'pass_type': 'std::unique_ptr<base::Value>', |
| 'to_raw_type': '*%s', |
| @@ -194,6 +199,7 @@ def CreateAnyTypeDefinition(): |
| def CreateStringTypeDefinition(): |
| return { |
| + 'js_type': 'string', |
| 'return_type': 'std::string', |
| 'pass_type': 'const std::string&', |
| 'to_pass_type': '%s', |
| @@ -212,7 +218,13 @@ def CreatePrimitiveTypeDefinition(type): |
| 'integer': 'int', |
| 'boolean': 'bool', |
| } |
| + js_typedefs = { |
| + 'number': 'number', |
| + 'integer': 'number', |
| + 'boolean': 'boolean', |
| + } |
| return { |
| + 'js_type': js_typedefs[type], |
| 'return_type': typedefs[type], |
| 'pass_type': typedefs[type], |
| 'to_pass_type': '%s', |
| @@ -236,6 +248,7 @@ type_definitions['any'] = CreateAnyTypeDefinition() |
| def WrapArrayDefinition(type): |
| return { |
| + 'js_type': '!Array.<%s>' % type['js_type'], |
| 'return_type': 'std::vector<%s>' % type['type'], |
| 'pass_type': 'std::vector<%s>' % type['type'], |
| 'to_raw_type': '%s', |
| @@ -309,6 +322,19 @@ def SynthesizeEnumType(domain, owner, type): |
| domain['types'].append(type) |
| +def SynthesizeJsConstructorArgs(properties): |
|
Sami
2017/05/24 09:16:21
Please add some coverage in update client_api_gene
alex clarke (OOO till 29th)
2017/05/24 11:38:14
We don't need this anymore, removing.
|
| + args = [] |
| + for prop in properties: |
| + if 'optional' in prop and prop['optional']: |
| + continue |
| + args.append(prop['name']) |
| + for prop in properties: |
| + if not 'optional' in prop or not prop['optional']: |
| + continue |
| + args.append('opt_' + prop['name']) |
| + return ', '.join(args) |
| + |
| + |
| def SynthesizeCommandTypes(json_api): |
| """Generate types for command parameters, return values and enum |
| properties. |
| @@ -332,7 +358,9 @@ def SynthesizeCommandTypes(json_api): |
| 'type': 'object', |
| 'description': 'Parameters for the %s command.' % ToTitleCase( |
| SanitizeLiteral(command['name'])), |
| - 'properties': command['parameters'] |
| + 'properties': command['parameters'], |
| + 'js_constructor_args': SynthesizeJsConstructorArgs( |
| + command['parameters']) |
| } |
| domain['types'].append(parameters_type) |
| if 'returns' in command: |
| @@ -344,7 +372,9 @@ def SynthesizeCommandTypes(json_api): |
| 'type': 'object', |
| 'description': 'Result for the %s command.' % ToTitleCase( |
| SanitizeLiteral(command['name'])), |
| - 'properties': command['returns'] |
| + 'properties': command['returns'], |
| + 'js_constructor_args': SynthesizeJsConstructorArgs( |
| + command['returns']) |
| } |
| domain['types'].append(result_type) |
| @@ -367,7 +397,9 @@ def SynthesizeEventTypes(json_api): |
| 'type': 'object', |
| 'description': 'Parameters for the %s event.' % ToTitleCase( |
| event['name']), |
| - 'properties': event.get('parameters', []) |
| + 'properties': event.get('parameters', []), |
| + 'js_constructor_args': SynthesizeJsConstructorArgs( |
| + event.get('parameters', [])) |
| } |
| domain['types'].append(event_type) |
| @@ -395,7 +427,9 @@ def InitializeDomainDependencies(json_api): |
| direct_deps[domain_name].add(dep) |
| for domain in json_api['domains']: |
| - direct_deps[domain['domain']] = set(domain.get('dependencies', [])) |
| + deps = domain.get('dependencies', []) |
| + js_dependencies = deps |
|
Sami
2017/05/24 09:16:21
|js_dependencies| unused?
alex clarke (OOO till 29th)
2017/05/24 11:38:14
Done.
|
| + direct_deps[domain['domain']] = set(deps) |
| GetDomainDepsFromRefs(domain['domain'], domain) |
| def TraverseDependencies(domain, deps): |
| @@ -468,7 +502,7 @@ def GeneratePerDomain(jinja_env, output_dirname, json_api, class_name, |
| def GenerateDomains(jinja_env, output_dirname, json_api): |
| GeneratePerDomain( |
| jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), json_api, |
| - 'domain', ['cc', 'h'], |
| + 'domain', ['cc', 'h', 'js'], |
| lambda domain_name: domain_name) |