Index: content/browser/devtools/protocol/devtools_protocol_handler_generator.py |
diff --git a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py b/content/browser/devtools/protocol/devtools_protocol_handler_generator.py |
deleted file mode 100755 |
index 416080781d8bd3f1a9713ac1998c2a09104f1285..0000000000000000000000000000000000000000 |
--- a/content/browser/devtools/protocol/devtools_protocol_handler_generator.py |
+++ /dev/null |
@@ -1,818 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import sys |
-import string |
-import json |
- |
-blink_protocol_path = sys.argv[1] |
-output_cc_path = sys.argv[2] |
-output_h_path = sys.argv[3] |
- |
-header = """\ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// THIS FILE IS AUTOGENERATED. DO NOT EDIT. |
-// Generated by |
-// content/browser/devtools/protocol/devtools_protocol_handler_generator.py |
-// from gen/blink/core/inspector/protocol.json |
-""" |
- |
-template_h = string.Template(header + """\ |
- |
-#ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ |
-#define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ |
- |
-#include <memory> |
-#include <utility> |
- |
-#include "base/memory/ptr_util.h" |
-#include "content/browser/devtools/protocol/devtools_protocol_client.h" |
- |
-namespace content { |
- |
-class DevToolsProtocolDispatcher; |
- |
-namespace devtools { |
- |
-extern const char kProtocolVersion[]; |
- |
-bool IsSupportedProtocolVersion(const std::string& version); |
- |
-template<typename T> |
-std::unique_ptr<base::Value> CreateValue(const T& param) { |
- return base::MakeUnique<base::FundamentalValue>(param); |
-} |
- |
-template<typename T> |
-std::unique_ptr<base::Value> CreateValue(std::unique_ptr<T>& param) { |
- return std::move(param); |
-} |
- |
-template<class T> |
-std::unique_ptr<base::Value> CreateValue(const scoped_refptr<T>& param) { |
- return param->ToValue(); |
-} |
- |
-template<typename T> |
-std::unique_ptr<base::Value> CreateValue(const std::vector<T>& param) { |
- std::unique_ptr<base::ListValue> result(new base::ListValue()); |
- for (auto& item : param) { |
- result->Append(CreateValue(item)); |
- } |
- return std::move(result); |
-} |
- |
-template<> |
-std::unique_ptr<base::Value> CreateValue(const std::string& param); |
- |
-${types}\ |
- |
-} // namespace devtools |
- |
-class DevToolsProtocolDispatcher { |
- public: |
- using CommandHandler = |
- base::Callback<bool(DevToolsCommandId, |
- std::unique_ptr<base::DictionaryValue>)>; |
- |
- explicit DevToolsProtocolDispatcher(DevToolsProtocolDelegate* notifier); |
- ~DevToolsProtocolDispatcher(); |
- |
- CommandHandler FindCommandHandler(const std::string& method); |
- |
-${setters}\ |
- |
- private: |
- using Response = DevToolsProtocolClient::Response; |
- using CommandHandlers = std::map<std::string, CommandHandler>; |
- |
-${methods}\ |
- |
- DevToolsProtocolDelegate* notifier_; |
- DevToolsProtocolClient client_; |
- CommandHandlers command_handlers_; |
-${fields}\ |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ |
-""") |
- |
-tmpl_typedef = string.Template("""\ |
-namespace ${domain} { |
-typedef ${param_type} ${declared_name}; |
-} // namespace ${domain} |
-""") |
- |
-tmpl_struct = string.Template("""\ |
-namespace ${domain} { |
-template<int MASK> |
-struct ${declared_name}Builder |
- : base::RefCounted<${declared_name}Builder<MASK>> { |
- public: |
- enum { |
- kAllSet = 0, |
-${fields_enum}\ |
- }; |
- |
-${methods}\ |
- |
- static scoped_refptr<${declared_name}Builder<kNoneSet>> Create() { |
- return new ${declared_name}Builder<kNoneSet>(); |
- } |
- |
- std::unique_ptr<base::DictionaryValue> ToValue() { |
- static_assert(MASK == kAllSet, "required properties missing"); |
- return base::WrapUnique(dict_->DeepCopy()); |
- } |
- |
- private: |
- friend struct ${declared_name}Builder<0>; |
- friend class base::RefCounted<${declared_name}Builder<MASK>>; |
- ~${declared_name}Builder() {} |
- |
- ${declared_name}Builder() : dict_(new base::DictionaryValue()) { |
- } |
- |
- template<class T> T* ThisAs() { |
- static_assert(sizeof(*this) == sizeof(T), "cannot cast"); |
- return reinterpret_cast<T*>(this); |
- } |
- |
- std::unique_ptr<base::DictionaryValue> dict_; |
-}; |
- |
-typedef ${declared_name}Builder<0> ${declared_name}; |
- |
-} // namespace ${domain} |
-""") |
- |
-tmpl_builder_setter_req = string.Template("""\ |
- scoped_refptr<${declared_name}Builder<MASK & ~k${Param}>> |
- set_${param}(${pass_type} ${param}) { |
- static_assert(MASK & k${Param}, "already set"); |
- dict_->Set("${proto_param}", CreateValue(${param})); |
- return ThisAs<${declared_name}Builder<MASK & ~k${Param}>>(); |
- } |
-""") |
- |
-tmpl_builder_setter_opt = string.Template("""\ |
- scoped_refptr<${declared_name}Builder<MASK>> |
- set_${param}(${pass_type} ${param}) { |
- dict_->Set("${proto_param}", CreateValue(${param})); |
- return this; |
- } |
-""") |
- |
-tmpl_builder_enum = string.Template("""\ |
- k${Param} = 1 << ${ordinal}, |
-""") |
- |
-tmpl_builder_none_set = string.Template("""\ |
- kNoneSet = ${all_fields} |
-""") |
- |
-tmpl_named_enum = string.Template("""\ |
-namespace ${domain} { |
-${values}\ |
-} // namespace ${domain} |
-""") |
- |
-tmpl_inline_enum = string.Template("""\ |
-namespace ${domain} { |
-namespace ${subdomain} { |
-${values}\ |
-} // namespace ${subdomain} |
-} // namespace ${domain} |
-""") |
- |
-tmpl_enum_value = string.Template("""\ |
-extern const char k${Enum}${Value}[]; |
-""") |
- |
-tmpl_enum_value_def = string.Template("""\ |
-const char k${Enum}${Value}[] = "${value}"; |
-""") |
- |
-tmpl_handler = string.Template("""\ |
-namespace ${domain} { |
-class ${Domain}Handler; |
-} // namespace domain |
-""") |
- |
-tmpl_client = string.Template("""\ |
-namespace ${domain} { |
-class Client : public DevToolsProtocolClient { |
- public: |
- explicit Client(DevToolsProtocolDelegate* notifier); |
- ~Client() override; |
- |
-${methods}\ |
-}; |
-} // namespace ${domain} |
-""") |
- |
-tmpl_event = string.Template("""\ |
- void ${Command}( |
- scoped_refptr<${Command}Params> params); |
-""") |
- |
-tmpl_response = string.Template("""\ |
- void Send${Command}Response( |
- DevToolsCommandId command_id, |
- scoped_refptr<${Command}Response> params); |
-""") |
- |
-tmpl_setter = string.Template("""\ |
- void Set${Domain}Handler( |
- devtools::${domain}::${Domain}Handler* ${domain}_handler); |
-""") |
- |
-tmpl_callback = string.Template("""\ |
- bool On${Domain}${Command}( |
- DevToolsCommandId command_id, |
- std::unique_ptr<base::DictionaryValue> params); |
-""") |
- |
-tmpl_field = string.Template("""\ |
- devtools::${domain}::${Domain}Handler* ${domain}_handler_; |
-""") |
- |
-template_cc = string.Template(header + """\ |
- |
-#include "base/bind.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_split.h" |
-#include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h" |
-${includes}\ |
- |
-namespace content { |
- |
-DevToolsProtocolDispatcher::DevToolsProtocolDispatcher( |
- DevToolsProtocolDelegate* notifier) |
- : notifier_(notifier), |
- client_(notifier) |
- ${fields_init} { |
- DCHECK(notifier_); |
-} |
- |
-DevToolsProtocolDispatcher::~DevToolsProtocolDispatcher() { |
-} |
- |
-DevToolsProtocolDispatcher::CommandHandler |
-DevToolsProtocolDispatcher::FindCommandHandler(const std::string& method) { |
- CommandHandlers::iterator it = command_handlers_.find(method); |
- return it == command_handlers_.end() ? CommandHandler() : it->second; |
-} |
- |
-${methods}\ |
- |
-namespace devtools { |
- |
-const char kProtocolVersion[] = "${major}.${minor}"; |
- |
-bool IsSupportedProtocolVersion(const std::string& version) { |
- std::vector<base::StringPiece> tokens = base::SplitStringPiece( |
- version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
- int major, minor; |
- return tokens.size() == 2 && |
- base::StringToInt(tokens[0], &major) && major == ${major} && |
- base::StringToInt(tokens[1], &minor) && minor <= ${minor}; |
-} |
- |
-template<> |
-std::unique_ptr<base::Value> CreateValue(const std::string& param) { |
- return base::MakeUnique<base::StringValue>(param); |
-} |
- |
-${types}\ |
- |
-} // namespace devtools |
- |
-} // namespace content |
-""") |
- |
-tmpl_include = string.Template("""\ |
-#include "content/browser/devtools/protocol/${domain}_handler.h" |
-""") |
- |
-tmpl_field_init = string.Template("${domain}_handler_(nullptr)") |
- |
-tmpl_setter_impl = string.Template("""\ |
-void DevToolsProtocolDispatcher::Set${Domain}Handler( |
- devtools::${domain}::${Domain}Handler* ${domain}_handler) { |
- DCHECK(!${domain}_handler_); |
- ${domain}_handler_ = ${domain}_handler; |
-${initializations}\ |
-} |
-""") |
- |
-tmpl_register = string.Template("""\ |
- command_handlers_["${Domain}.${command}"] = |
- base::Bind( |
- &DevToolsProtocolDispatcher::On${TargetDomain}${Command}, |
- base::Unretained(this)); |
-""") |
- |
-tmpl_init_client = string.Template("""\ |
- ${domain}_handler_->SetClient(base::WrapUnique( |
- new devtools::${domain}::Client(notifier_))); |
-""") |
- |
-tmpl_callback_impl = string.Template("""\ |
-bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
- DevToolsCommandId command_id, |
- std::unique_ptr<base::DictionaryValue> params) { |
-${prep}\ |
- Response response = ${domain}_handler_->${Command}(${args}); |
- std::unique_ptr<base::DictionaryValue> protocol_response; |
- if (client_.SendError(command_id, response)) |
- return true; |
- if (response.IsFallThrough()) |
- return false; |
- std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
-${wrap}\ |
- client_.SendSuccess(command_id, std::move(result)); |
- return true; |
-} |
-""") |
- |
-tmpl_wrap = string.Template("""\ |
- result->Set("${proto_param}", devtools::CreateValue(out_${param})); |
-""") |
- |
-tmpl_callback_async_impl = string.Template("""\ |
-bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
- DevToolsCommandId command_id, |
- std::unique_ptr<base::DictionaryValue> params) { |
-${prep}\ |
- Response response = ${domain}_handler_->${Command}(${args}); |
- if (client_.SendError(command_id, response)) |
- return true; |
- return !response.IsFallThrough(); |
-} |
-""") |
- |
-tmpl_prep_req = string.Template("""\ |
- ${raw_type} in_${param}${init}; |
- if (!params || !params->Get${Type}("${proto_param}", &in_${param})) { |
- client_.SendError(command_id, Response::InvalidParams("${proto_param}")); |
- return true; |
- } |
-""") |
- |
-tmpl_prep_req_list = string.Template("""\ |
- base::ListValue* list_${param} = nullptr; |
- if (!params || !params->GetList("${proto_param}", &list_${param})) { |
- client_.SendError(command_id, Response::InvalidParams("${proto_param}")); |
- return true; |
- } |
- std::vector<${item_type}> in_${param}; |
- for (base::ListValue::const_iterator it = |
- list_${param}->begin(); it != list_${param}->end(); ++it) { |
- ${item_raw_type} item; |
- if (!(*it)->GetAs${ItemType}(&item)) { |
- client_.SendError(command_id, Response::InvalidParams("${proto_param}")); |
- return true; |
- } |
- in_${param}.push_back(${item_pass}); |
- } |
-""") |
- |
-tmpl_prep_opt = string.Template("""\ |
- ${raw_type} in_${param}${init}; |
- bool ${param}_found = params && params->Get${Type}( |
- "${proto_param}", |
- &in_${param}); |
-""") |
- |
-tmpl_prep_output = string.Template("""\ |
- ${param_type} out_${param}${init}; |
-""") |
- |
-tmpl_arg_name = string.Template("in_${param}") |
- |
-tmpl_arg_req = string.Template("${param_pass}") |
- |
-tmpl_arg_opt = string.Template( |
- "${param}_found ? ${param_pass} : nullptr") |
- |
-tmpl_object_pass = string.Template( |
- "base::WrapUnique<base::DictionaryValue>(${name}->DeepCopy())") |
- |
-tmpl_client_impl = string.Template("""\ |
-namespace ${domain} { |
- |
-Client::Client(DevToolsProtocolDelegate* notifier) |
- : DevToolsProtocolClient(notifier) { |
-} |
- |
-Client::~Client() { |
-} |
- |
-${methods}\ |
- |
-} // namespace ${domain} |
-""") |
- |
-tmpl_event_impl = string.Template("""\ |
-void Client::${Command}( |
- scoped_refptr<${Command}Params> params) { |
- SendNotification("${Domain}.${command}", |
- params->ToValue()); |
-} |
-""") |
- |
-tmpl_response_impl = string.Template("""\ |
-void Client::Send${Command}Response( |
- DevToolsCommandId command_id, |
- scoped_refptr<${Command}Response> params) { |
- SendSuccess(command_id, params->ToValue()); |
-} |
-""") |
- |
-tmpl_typename = string.Template("devtools::${domain}::${declared_name}") |
- |
-def Capitalize(s): |
- return s[:1].upper() + s[1:] |
- |
-def Uncamelcase(s): |
- result = "" |
- for i, c in enumerate(s): |
- if c.isupper(): |
- if (i > 0) and ((i < len(s)-1) and s[i+1].islower() or s[i-1].islower()): |
- result += "_" |
- result += c.lower() |
- else: |
- result += c |
- return result |
- |
-types = {} |
-blink_protocol = json.loads(open(blink_protocol_path, "r").read()) |
-type_decls = [] |
-type_impls = [] |
-handler_methods = [] |
-handler_method_impls = [] |
-domain_maps = [] |
-redirects = {} |
- |
-all_domains = blink_protocol["domains"] |
- |
-for json_domain in all_domains: |
- if "types" in json_domain: |
- for json_type in json_domain["types"]: |
- types["%s.%s" % (json_domain["domain"], json_type["id"])] = json_type |
- |
-def DeclareStruct(json_properties, mapping): |
- methods = [] |
- fields_enum = [] |
- enum_items = [] |
- req_fields_num = 0 |
- for json_prop in json_properties: |
- prop_map = mapping.copy() |
- prop_map["proto_param"] = json_prop["name"] |
- prop_map["param"] = Uncamelcase(json_prop["name"]) |
- prop_map["Param"] = Capitalize(json_prop["name"]) |
- prop_map["subdomain"] = Uncamelcase(prop_map["declared_name"]) |
- del prop_map["declared_name"] |
- ResolveType(json_prop, prop_map) |
- prop_map["declared_name"] = mapping["declared_name"] |
- if prop_map["pass_type"].find(mapping["declared_name"]) != -1: |
- prop_map["pass_type"] = prop_map["pass_type"].replace( |
- mapping["declared_name"], mapping["declared_name"] + "Builder<0>") |
- if json_prop.get("optional"): |
- methods.append(tmpl_builder_setter_opt.substitute(prop_map)) |
- else: |
- methods.append(tmpl_builder_setter_req.substitute(prop_map)) |
- enum_items.append("k%s" % prop_map["Param"]); |
- fields_enum.append(tmpl_builder_enum.substitute(prop_map, |
- ordinal = req_fields_num)) |
- req_fields_num += 1 |
- |
- all_fields = "kAllSet" |
- if len(enum_items) > 0: |
- all_fields = " | ".join(enum_items) |
- fields_enum.append(tmpl_builder_none_set.substitute(mapping, |
- all_fields = all_fields)) |
- type_decls.append(tmpl_struct.substitute(mapping, |
- methods = "\n".join(methods), |
- fields_enum = "".join(fields_enum))) |
- |
-def DeclareEnum(json, mapping): |
- values = [] |
- value_defs = [] |
- tmpl_enum = tmpl_inline_enum |
- if "declared_name" in mapping: |
- mapping["Enum"] = mapping["declared_name"] |
- tmpl_enum = tmpl_named_enum |
- else: |
- mapping["Enum"] = Capitalize(mapping["proto_param"]) |
- |
- for enum_value in json["enum"]: |
- values.append(tmpl_enum_value.substitute(mapping, |
- Value = Capitalize(enum_value))) |
- value_defs.append(tmpl_enum_value_def.substitute(mapping, |
- value = enum_value, |
- Value = Capitalize(enum_value))) |
- type_decls.append(tmpl_enum.substitute(mapping, |
- values = "".join(values))) |
- type_impls.append(tmpl_enum.substitute(mapping, |
- values = "".join(value_defs))) |
- |
-def ResolveRef(json, mapping): |
- dot_pos = json["$ref"].find(".") |
- if dot_pos == -1: |
- domain_name = mapping["Domain"] |
- type_name = json["$ref"] |
- else: |
- domain_name = json["$ref"][:dot_pos] |
- type_name = json["$ref"][dot_pos + 1:] |
- json_type = types["%s.%s" % (domain_name, type_name)] |
- mapping["declared_name"] = Capitalize(type_name) |
- mapping["Domain"] = domain_name |
- mapping["domain"] = Uncamelcase(domain_name) |
- mapping["param_type"] = tmpl_typename.substitute(mapping) |
- ResolveType(json_type, mapping) |
- if not "___type_declared" in json_type: |
- json_type["___type_declared"] = True; |
- if (json_type.get("type") == "object") and ("properties" in json_type): |
- DeclareStruct(json_type["properties"], mapping) |
- else: |
- if ("enum" in json_type): |
- DeclareEnum(json_type, mapping) |
- type_decls.append(tmpl_typedef.substitute(mapping)) |
- |
-def ResolveArray(json, mapping): |
- items_map = mapping.copy() |
- ResolveType(json["items"], items_map) |
- if items_map["Type"] == "List": |
- # TODO(dgozman) Implement this. |
- raise Exception("Nested arrays are not implemented") |
- mapping["param_type"] = "std::vector<%s>" % items_map["param_type"] |
- mapping["Type"] = "List" |
- mapping["pass_type"] = "const %s&" % mapping["param_type"] |
- mapping["storage_type"] = "std::vector<%s>" % items_map["storage_type"] |
- mapping["raw_type"] = mapping["storage_type"] |
- mapping["prep_req"] = tmpl_prep_req_list.substitute(mapping, |
- item_type = items_map["storage_type"], |
- item_init = items_map["init"], |
- item_raw_type = items_map["raw_type"], |
- item_pass = items_map["pass_template"].substitute(name="item", opt=""), |
- ItemType = items_map["Type"]) |
- mapping["arg_out"] = "&out_%s" % mapping["param"] |
- |
-def ResolveObject(json, mapping): |
- mapping["Type"] = "Dictionary" |
- mapping["storage_type"] = "std::unique_ptr<base::DictionaryValue>" |
- mapping["raw_type"] = "base::DictionaryValue*" |
- mapping["pass_template"] = tmpl_object_pass |
- mapping["init"] = " = nullptr" |
- if "properties" in json: |
- if not "declared_name" in mapping: |
- mapping["declared_name"] = ("%s%s" % |
- (mapping["Command"], Capitalize(mapping["proto_param"]))) |
- mapping["param_type"] = ("scoped_refptr<%s>" % |
- tmpl_typename.substitute(mapping)) |
- DeclareStruct(json["properties"], mapping) |
- else: |
- mapping["param_type"] = ("scoped_refptr<%s>" % |
- tmpl_typename.substitute(mapping)) |
- mapping["pass_type"] = mapping["param_type"] |
- mapping["arg_out"] = "&out_%s" % mapping["param"] |
- else: |
- mapping["param_type"] = "base::DictionaryValue" |
- mapping["pass_type"] = "std::unique_ptr<base::DictionaryValue>" |
- mapping["arg_out"] = "out_%s.get()" % mapping["param"] |
- mapping["prep_req"] = tmpl_prep_req.substitute(mapping) |
- |
-def ResolvePrimitive(json, mapping): |
- jsonrpc_type = json["type"] |
- if jsonrpc_type == "boolean": |
- mapping["param_type"] = "bool" |
- mapping["Type"] = "Boolean" |
- mapping["init"] = " = false" |
- elif jsonrpc_type == "integer": |
- mapping["param_type"] = "int" |
- mapping["Type"] = "Integer" |
- mapping["init"] = " = 0" |
- elif jsonrpc_type == "number": |
- mapping["param_type"] = "double" |
- mapping["Type"] = "Double" |
- mapping["init"] = " = 0.0" |
- elif jsonrpc_type == "string": |
- mapping["param_type"] = "std::string" |
- mapping["pass_type"] = "const std::string&" |
- mapping["Type"] = "String" |
- if "enum" in json and not "declared_name" in mapping: |
- if not "subdomain" in mapping: |
- mapping["subdomain"] = Uncamelcase(mapping["command"]) |
- DeclareEnum(json, mapping) |
- else: |
- raise Exception("Unknown type: %s" % jsonrpc_type) |
- mapping["storage_type"] = mapping["param_type"] |
- mapping["raw_type"] = mapping["param_type"] |
- mapping["prep_req"] = tmpl_prep_req.substitute(mapping) |
- if jsonrpc_type != "string": |
- mapping["pass_type"] = mapping["param_type"] |
- mapping["arg_out"] = "&out_%s" % mapping["param"] |
- |
-def ResolveType(json, mapping): |
- mapping["init"] = "" |
- mapping["pass_template"] = string.Template("${opt}${name}") |
- if "$ref" in json: |
- ResolveRef(json, mapping) |
- elif "type" in json: |
- jsonrpc_type = json["type"] |
- if jsonrpc_type == "array": |
- ResolveArray(json, mapping) |
- elif jsonrpc_type == "object": |
- ResolveObject(json, mapping) |
- else: |
- ResolvePrimitive(json, mapping) |
- else: |
- raise Exception("Unknown type at %s.%s %s" % |
- (mapping["Domain"], mapping["command"], mapping["proto_param"])) |
- |
-setters = [] |
-fields = [] |
- |
-includes = [] |
-fields_init = [] |
- |
-browser_domains_list = [] |
-browser_commands_list = [] |
-async_commands_list = [] |
- |
-for json_domain in all_domains: |
- domain_map = {} |
- domain_map["Domain"] = json_domain["domain"] |
- domain_map["domain"] = Uncamelcase(json_domain["domain"]) |
- |
- initializations = [] |
- client_methods = [] |
- client_method_impls = [] |
- domain_empty = True |
- domain_needs_client = False |
- |
- if "commands" in json_domain: |
- for json_command in json_domain["commands"]: |
- full_command_name = json_domain["domain"] + "." + json_command["name"] |
- if (json_domain["domain"] not in browser_domains_list and |
- full_command_name not in browser_commands_list): |
- continue |
- domain_empty = False |
- |
- command_map = domain_map.copy() |
- command_map["command"] = json_command["name"] |
- command_map["Command"] = Capitalize(json_command["name"]) |
- |
- if "redirect" in json_command: |
- redirect_domain = json_command["redirect"] |
- if not (redirect_domain in redirects): |
- redirects[redirect_domain] = [] |
- command_map["TargetDomain"] = redirect_domain |
- redirects[redirect_domain].append(tmpl_register.substitute(command_map)) |
- continue |
- |
- command_map["TargetDomain"] = command_map["Domain"] |
- prep = [] |
- args = [] |
- |
- if "parameters" in json_command: |
- for json_param in json_command["parameters"]: |
- param_map = command_map.copy() |
- param_map["proto_param"] = json_param["name"] |
- param_map["param"] = Uncamelcase(json_param["name"]) |
- ResolveType(json_param, param_map) |
- if json_param.get("optional"): |
- if param_map["Type"] in ["List"]: |
- # TODO(vkuzkokov) Implement transformation of base::ListValue |
- # to std::vector and base::DictonaryValue to struct. |
- raise Exception( |
- "Optional array parameters are not implemented") |
- prep.append(tmpl_prep_opt.substitute(param_map)) |
- param_pass = param_map["pass_template"].substitute( |
- name=tmpl_arg_name.substitute(param_map), |
- opt="&") |
- args.append( |
- tmpl_arg_opt.substitute(param_map, param_pass=param_pass)) |
- else: |
- prep.append(param_map["prep_req"]) |
- param_pass = param_map["pass_template"].substitute( |
- name=tmpl_arg_name.substitute(param_map), |
- opt="") |
- args.append( |
- tmpl_arg_req.substitute(param_map, param_pass=param_pass)) |
- |
- if full_command_name in async_commands_list: |
- domain_needs_client = True |
- json_returns = [] |
- if "returns" in json_command: |
- json_returns = json_command["returns"] |
- command_map["declared_name"] = "%sResponse" % command_map["Command"] |
- DeclareStruct(json_returns, command_map) |
- # TODO(vkuzkokov) Pass async callback instance similar to how |
- # InspectorBackendDispatcher does it. This, however, can work |
- # only if Blink and Chrome are in the same repo. |
- args.insert(0, "command_id") |
- handler_method_impls.append( |
- tmpl_callback_async_impl.substitute(command_map, |
- prep = "".join(prep), |
- args = "\n " + ",\n ".join(args))) |
- client_methods.append(tmpl_response.substitute(command_map)) |
- client_method_impls.append(tmpl_response_impl.substitute(command_map)) |
- else: |
- wrap = [] |
- if "returns" in json_command: |
- for json_param in json_command["returns"]: |
- param_map = command_map.copy() |
- param_map["proto_param"] = json_param["name"] |
- param_map["param"] = Uncamelcase(json_param["name"]) |
- is_string = "type" in json_param and json_param["type"] == "string" |
- if json_param.get("optional") and not is_string: |
- # TODO(vkuzkokov) Implement Optional<T> for value types. |
- raise Exception( |
- "Optional return values are not implemented (%s.%s.%s)" % |
- (param_map["Domain"], param_map["command"], |
- param_map["proto_param"])) |
- ResolveType(json_param, param_map) |
- prep.append(tmpl_prep_output.substitute(param_map)) |
- args.append(param_map["arg_out"]) |
- wrap.append(tmpl_wrap.substitute(param_map)) |
- args_str = "" |
- if len(args) > 0: |
- args_str = "\n " + ",\n ".join(args) |
- handler_method_impls.append(tmpl_callback_impl.substitute(command_map, |
- prep = "".join(prep), |
- args = args_str, |
- wrap = "".join(wrap))) |
- |
- initializations.append(tmpl_register.substitute(command_map)) |
- handler_methods.append(tmpl_callback.substitute(command_map)) |
- |
- if "events" in json_domain: |
- for json_event in json_domain["events"]: |
- if json_domain["domain"] not in browser_domains_list: |
- continue |
- domain_empty = False |
- domain_needs_client = True |
- |
- event_map = domain_map.copy() |
- event_map["command"] = json_event["name"] |
- event_map["Command"] = Capitalize(json_event["name"]) |
- |
- json_parameters = [] |
- if "parameters" in json_event: |
- json_parameters = json_event["parameters"] |
- event_map["declared_name"] = "%sParams" % event_map["Command"] |
- DeclareStruct(json_parameters, event_map); |
- |
- client_methods.append(tmpl_event.substitute(event_map)) |
- client_method_impls.append(tmpl_event_impl.substitute(event_map)) |
- |
- if domain_empty: |
- continue |
- type_decls.append(tmpl_handler.substitute(domain_map)) |
- setters.append(tmpl_setter.substitute(domain_map)) |
- fields.append(tmpl_field.substitute(domain_map)) |
- includes.append(tmpl_include.substitute(domain_map)) |
- fields_init.append(",\n " + tmpl_field_init.substitute(domain_map)) |
- if domain_needs_client: |
- type_decls.append(tmpl_client.substitute(domain_map, |
- methods = "".join(client_methods))) |
- initializations.append(tmpl_init_client.substitute(domain_map)) |
- type_impls.append(tmpl_client_impl.substitute(domain_map, |
- methods = "\n".join(client_method_impls))) |
- domain_map["initializations"] = "".join(initializations) |
- domain_maps.append(domain_map) |
- |
-for domain_map in domain_maps: |
- domain = domain_map["Domain"] |
- if domain in redirects: |
- domain_map["initializations"] += "".join(redirects[domain]) |
- handler_method_impls.append(tmpl_setter_impl.substitute(domain_map)) |
- |
-output_h_file = open(output_h_path, "w") |
-output_cc_file = open(output_cc_path, "w") |
- |
-output_h_file.write(template_h.substitute({}, |
- types = "\n".join(type_decls), |
- setters = "".join(setters), |
- methods = "".join(handler_methods), |
- fields = "".join(fields))) |
-output_h_file.close() |
- |
-output_cc_file.write(template_cc.substitute({}, |
- major = blink_protocol["version"]["major"], |
- minor = blink_protocol["version"]["minor"], |
- includes = "".join(sorted(includes)), |
- fields_init = "".join(fields_init), |
- methods = "\n".join(handler_method_impls), |
- types = "\n".join(type_impls))) |
-output_cc_file.close() |