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) |