Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(969)

Side by Side Diff: content/browser/devtools/protocol/devtools_protocol_handler_generator.py

Issue 658163003: [DevTools] Added browser protocol to handler generator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@singleUse
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import sys 6 import sys
7 import string 7 import string
8 import json 8 import json
9 9
10 input_json_path = sys.argv[1] 10 blink_protocol_path = sys.argv[1]
11 output_cc_path = sys.argv[2] 11 browser_protocol_path = sys.argv[2]
12 output_h_path = sys.argv[3] 12 output_cc_path = sys.argv[3]
13 output_h_path = sys.argv[4]
13 14
14 header = """\ 15 header = """\
15 // Copyright 2014 The Chromium Authors. All rights reserved. 16 // Copyright 2014 The Chromium Authors. All rights reserved.
16 // Use of this source code is governed by a BSD-style license that can be 17 // Use of this source code is governed by a BSD-style license that can be
17 // found in the LICENSE file. 18 // found in the LICENSE file.
18 19
19 // THIS FILE IS AUTOGENERATED. DO NOT EDIT. 20 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
20 // Generated by 21 // Generated by
21 // content/public/browser/devtools_protocol_handler_generator.py from 22 // content/public/browser/devtools_protocol_handler_generator.py from
22 // third_party/WebKit/Source/devtools/protocol.json 23 // third_party/WebKit/Source/devtools/protocol.json
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 """) 413 """)
413 414
414 tmpl_wrap_dict = string.Template("""\ 415 tmpl_wrap_dict = string.Template("""\
415 ${dict_var}->Set("${proto_param}", 416 ${dict_var}->Set("${proto_param}",
416 ${param_type}::ToValue(${var_name}.Pass()).release()); 417 ${param_type}::ToValue(${var_name}.Pass()).release());
417 """) 418 """)
418 419
419 tmpl_wrap_list = tmpl_wrap_dict; 420 tmpl_wrap_list = tmpl_wrap_dict;
420 421
421 tmpl_wrap_obj = string.Template("""\ 422 tmpl_wrap_obj = string.Template("""\
422 ${dict_var}->Set("${proto_param}", ${var_name}); 423 ${dict_var}->Set("${proto_param}", ${var_name}.release());
dgozman 2014/10/17 13:11:28 Should this go to previous patch?
vkuzkokov 2014/10/17 15:53:17 Done.
423 """) 424 """)
424 425
425 tmpl_typename = string.Template("devtools::${domain}::${declared_name}") 426 tmpl_typename = string.Template("devtools::${domain}::${declared_name}")
426 427
427 def Capitalize(s): 428 def Capitalize(s):
428 return s[:1].upper() + s[1:] 429 return s[:1].upper() + s[1:]
429 430
430 def Decapitalize(s): 431 def Decapitalize(s):
431 return s.lower() 432 return s.lower()
432 433
433 def Uncamelcase(s): 434 def Uncamelcase(s):
434 result = "" 435 result = ""
435 for i, c in enumerate(s): 436 for i, c in enumerate(s):
436 if c.isupper(): 437 if c.isupper():
437 if (i > 0) and ((i < len(s)-1) and s[i+1].islower() or s[i-1].islower()): 438 if (i > 0) and ((i < len(s)-1) and s[i+1].islower() or s[i-1].islower()):
438 result += "_" 439 result += "_"
439 result += c.lower() 440 result += c.lower()
440 else: 441 else:
441 result += c 442 result += c
442 return result 443 return result
443 444
444 types = {} 445 types = {}
445 json_api = json.loads(open(input_json_path, "r").read()) 446 blink_protocol = json.loads(open(blink_protocol_path, "r").read())
447 browser_protocol = json.loads(open(browser_protocol_path, "r").read())
446 type_decls = [] 448 type_decls = []
447 type_impls = [] 449 type_impls = []
448 handler_methods = [] 450 handler_methods = []
449 handler_method_impls = [] 451 handler_method_impls = []
450 452
451 for json_domain in json_api["domains"]: 453 all_domains = blink_protocol["domains"] + browser_protocol["domains"]
454
455 for json_domain in all_domains:
452 if "types" in json_domain: 456 if "types" in json_domain:
453 for json_type in json_domain["types"]: 457 for json_type in json_domain["types"]:
454 types["%s.%s" % (json_domain["domain"], json_type["id"])] = json_type 458 types["%s.%s" % (json_domain["domain"], json_type["id"])] = json_type
455 459
456 def DeclareStruct(json_properties, mapping): 460 def DeclareStruct(json_properties, mapping):
457 methods = [] 461 methods = []
458 fields = [] 462 fields = []
459 fields_init = [] 463 fields_init = []
460 method_impls = [] 464 method_impls = []
461 dchecks = [] 465 dchecks = []
(...skipping 27 matching lines...) Expand all
489 dot_pos = json["$ref"].find(".") 493 dot_pos = json["$ref"].find(".")
490 if dot_pos == -1: 494 if dot_pos == -1:
491 domain_name = mapping["Domain"] 495 domain_name = mapping["Domain"]
492 type_name = json["$ref"] 496 type_name = json["$ref"]
493 else: 497 else:
494 domain_name = json["$ref"][:dot_pos] 498 domain_name = json["$ref"][:dot_pos]
495 type_name = json["$ref"][dot_pos + 1:] 499 type_name = json["$ref"][dot_pos + 1:]
496 json_type = types["%s.%s" % (domain_name, type_name)] 500 json_type = types["%s.%s" % (domain_name, type_name)]
497 mapping["declared_name"] = Capitalize(type_name) 501 mapping["declared_name"] = Capitalize(type_name)
498 mapping["Domain"] = domain_name 502 mapping["Domain"] = domain_name
499 mapping["domain"] = Decapitalize(domain_name) 503 mapping["domain"] = Uncamelcase(domain_name)
dgozman 2014/10/17 13:11:28 ditto
vkuzkokov 2014/10/17 15:53:17 Done.
500 mapping["param_type"] = tmpl_typename.substitute(mapping) 504 mapping["param_type"] = tmpl_typename.substitute(mapping)
501 if json_type.get("enum"): 505 if json_type.get("enum"):
502 # TODO(vkuzkokov) Implement. Approximate template: 506 # TODO(vkuzkokov) Implement. Approximate template:
503 # namespace ${domain} { const char k${declared_name}${Value}; } 507 # namespace ${domain} { const char k${declared_name}${Value}; }
504 raise Exception("Named enumerations are not implemented") 508 raise Exception("Named enumerations are not implemented")
505 ResolveType(json_type, mapping) 509 ResolveType(json_type, mapping)
506 if not "___struct_declared" in json_type: 510 if not "___struct_declared" in json_type:
507 json_type["___struct_declared"] = True; 511 json_type["___struct_declared"] = True;
508 if (json_type.get("type") == "object") and ("properties" in json_type): 512 if (json_type.get("type") == "object") and ("properties" in json_type):
509 DeclareStruct(json_type["properties"], mapping) 513 DeclareStruct(json_type["properties"], mapping)
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 else: 605 else:
602 raise Exception("Unknown type at %s.%s %s" % 606 raise Exception("Unknown type at %s.%s %s" %
603 (mapping["Domain"], mapping["command"], mapping["proto_param"])) 607 (mapping["Domain"], mapping["command"], mapping["proto_param"]))
604 608
605 setters = [] 609 setters = []
606 fields = [] 610 fields = []
607 611
608 includes = [] 612 includes = []
609 fields_init = [] 613 fields_init = []
610 614
611 for json_domain in json_api["domains"]: 615 for json_domain in all_domains:
612 domain_map = {} 616 domain_map = {}
613 domain_map["Domain"] = json_domain["domain"] 617 domain_map["Domain"] = json_domain["domain"]
614 domain_map["domain"] = Decapitalize(json_domain["domain"]) 618 domain_map["domain"] = Uncamelcase(json_domain["domain"])
dgozman 2014/10/17 13:11:28 ditto
vkuzkokov 2014/10/17 15:53:17 Done.
615 619
616 initializations = [] 620 initializations = []
617 client_methods = [] 621 client_methods = []
618 client_method_impls = [] 622 client_method_impls = []
619 domain_empty = True 623 domain_empty = True
620 domain_needs_client = False 624 domain_needs_client = False
621 625
622 if "commands" in json_domain: 626 if "commands" in json_domain:
623 for json_command in json_domain["commands"]: 627 for json_command in json_domain["commands"]:
624 if (not ("handlers" in json_command) or 628 if (not ("handlers" in json_command) or
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 methods = "".join(handler_methods), 755 methods = "".join(handler_methods),
752 fields = "".join(fields))) 756 fields = "".join(fields)))
753 output_h_file.close() 757 output_h_file.close()
754 758
755 output_cc_file.write(template_cc.substitute({}, 759 output_cc_file.write(template_cc.substitute({},
756 includes = "".join(sorted(includes)), 760 includes = "".join(sorted(includes)),
757 fields_init = ",\n ".join(fields_init), 761 fields_init = ",\n ".join(fields_init),
758 methods = "\n".join(handler_method_impls), 762 methods = "\n".join(handler_method_impls),
759 types = "\n".join(type_impls))) 763 types = "\n".join(type_impls)))
760 output_cc_file.close() 764 output_cc_file.close()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698