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..72668ef3c4ae0995acbef22c9d8a23c6bba75682 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': '!chromium.DevTools.%s.%s' % (domain['domain'], type['id']), |
'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': '!chromium.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': 'Object', |
'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', |
@@ -377,6 +390,7 @@ def InitializeDomainDependencies(json_api): |
including itself.""" |
direct_deps = collections.defaultdict(set) |
+ types_required = collections.defaultdict(set) |
def GetDomainDepsFromRefs(domain_name, json): |
if isinstance(json, list): |
@@ -393,9 +407,11 @@ def InitializeDomainDependencies(json_api): |
if '.' in json['$ref']: |
dep = json['$ref'].split('.')[0] |
direct_deps[domain_name].add(dep) |
+ types_required[domain_name].add(json['$ref']) |
for domain in json_api['domains']: |
direct_deps[domain['domain']] = set(domain.get('dependencies', [])) |
+ types_required[domain['domain']] = set(domain.get('types_required', [])) |
GetDomainDepsFromRefs(domain['domain'], domain) |
def TraverseDependencies(domain, deps): |
@@ -409,6 +425,15 @@ def InitializeDomainDependencies(json_api): |
for domain in json_api['domains']: |
domain_deps = set() |
TraverseDependencies(domain['domain'], domain_deps) |
+ if 'dependencies' in domain: |
+ domain['js_dependencies'] = domain['dependencies'] |
+ else: |
+ domain['js_dependencies'] = [] |
+ |
+ domain['js_forward_declarations'] = [] |
+ for type in types_required[domain['domain']]: |
+ if not type.split('.')[0] in domain['js_dependencies']: |
+ domain['js_forward_declarations'].append(type) |
domain['dependencies'] = sorted(domain_deps) |
@@ -470,6 +495,10 @@ def GenerateDomains(jinja_env, output_dirname, json_api): |
jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), json_api, |
'domain', ['cc', 'h'], |
lambda domain_name: domain_name) |
+ GeneratePerDomain( |
+ jinja_env, os.path.join(output_dirname, 'devtools_js'), json_api, |
+ 'domain', ['js'], |
+ lambda domain_name: domain_name) |
def GenerateTypes(jinja_env, output_dirname, json_api): |