| OLD | NEW |
| 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 blink_protocol_path = sys.argv[1] | 10 blink_protocol_path = sys.argv[1] |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 // content/browser/devtools/browser_protocol.json | 24 // content/browser/devtools/browser_protocol.json |
| 25 """ | 25 """ |
| 26 | 26 |
| 27 template_h = string.Template(header + """\ | 27 template_h = string.Template(header + """\ |
| 28 | 28 |
| 29 #ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ | 29 #ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ |
| 30 #define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ | 30 #define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_DEVTOOLS_PROTOCOL_DISPATCHER_H_ |
| 31 | 31 |
| 32 #include <utility> | 32 #include <utility> |
| 33 | 33 |
| 34 #include "base/memory/ptr_util.h" |
| 34 #include "content/browser/devtools/protocol/devtools_protocol_client.h" | 35 #include "content/browser/devtools/protocol/devtools_protocol_client.h" |
| 35 | 36 |
| 36 namespace content { | 37 namespace content { |
| 37 | 38 |
| 38 class DevToolsProtocolDispatcher; | 39 class DevToolsProtocolDispatcher; |
| 39 | 40 |
| 40 namespace devtools { | 41 namespace devtools { |
| 41 | 42 |
| 42 extern const char kProtocolVersion[]; | 43 extern const char kProtocolVersion[]; |
| 43 | 44 |
| 44 bool IsSupportedProtocolVersion(const std::string& version); | 45 bool IsSupportedProtocolVersion(const std::string& version); |
| 45 | 46 |
| 46 template<typename T> | 47 template<typename T> |
| 47 base::Value* CreateValue(const T& param) { | 48 base::Value* CreateValue(const T& param) { |
| 48 return new base::FundamentalValue(param); | 49 return new base::FundamentalValue(param); |
| 49 } | 50 } |
| 50 | 51 |
| 51 template<class T> | 52 template<class T> |
| 52 base::Value* CreateValue(scoped_ptr<T>& param) { | 53 base::Value* CreateValue(std::unique_ptr<T>& param) { |
| 53 return param.release(); | 54 return param.release(); |
| 54 } | 55 } |
| 55 | 56 |
| 56 template<class T> | 57 template<class T> |
| 57 base::Value* CreateValue(scoped_refptr<T> param) { | 58 base::Value* CreateValue(scoped_refptr<T> param) { |
| 58 return param->ToValue().release(); | 59 return param->ToValue().release(); |
| 59 } | 60 } |
| 60 | 61 |
| 61 template<typename T> | 62 template<typename T> |
| 62 base::Value* CreateValue(const std::vector<T> param) { | 63 base::Value* CreateValue(const std::vector<T> param) { |
| 63 base::ListValue* result = new base::ListValue(); | 64 base::ListValue* result = new base::ListValue(); |
| 64 for (auto& item : param) { | 65 for (auto& item : param) { |
| 65 result->Append(CreateValue(item)); | 66 result->Append(CreateValue(item)); |
| 66 } | 67 } |
| 67 return result; | 68 return result; |
| 68 } | 69 } |
| 69 | 70 |
| 70 template<> | 71 template<> |
| 71 base::Value* CreateValue(const std::string& param); | 72 base::Value* CreateValue(const std::string& param); |
| 72 | 73 |
| 73 ${types}\ | 74 ${types}\ |
| 74 | 75 |
| 75 } // namespace devtools | 76 } // namespace devtools |
| 76 | 77 |
| 77 class DevToolsProtocolDispatcher { | 78 class DevToolsProtocolDispatcher { |
| 78 public: | 79 public: |
| 79 using CommandHandler = | 80 using CommandHandler = |
| 80 base::Callback<bool(DevToolsCommandId, | 81 base::Callback<bool(DevToolsCommandId, |
| 81 scoped_ptr<base::DictionaryValue>)>; | 82 std::unique_ptr<base::DictionaryValue>)>; |
| 82 | 83 |
| 83 explicit DevToolsProtocolDispatcher(DevToolsProtocolDelegate* notifier); | 84 explicit DevToolsProtocolDispatcher(DevToolsProtocolDelegate* notifier); |
| 84 ~DevToolsProtocolDispatcher(); | 85 ~DevToolsProtocolDispatcher(); |
| 85 | 86 |
| 86 CommandHandler FindCommandHandler(const std::string& method); | 87 CommandHandler FindCommandHandler(const std::string& method); |
| 87 | 88 |
| 88 ${setters}\ | 89 ${setters}\ |
| 89 | 90 |
| 90 private: | 91 private: |
| 91 using Response = DevToolsProtocolClient::Response; | 92 using Response = DevToolsProtocolClient::Response; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 120 kAllSet = 0, | 121 kAllSet = 0, |
| 121 ${fields_enum}\ | 122 ${fields_enum}\ |
| 122 }; | 123 }; |
| 123 | 124 |
| 124 ${methods}\ | 125 ${methods}\ |
| 125 | 126 |
| 126 static scoped_refptr<${declared_name}Builder<kNoneSet>> Create() { | 127 static scoped_refptr<${declared_name}Builder<kNoneSet>> Create() { |
| 127 return new ${declared_name}Builder<kNoneSet>(); | 128 return new ${declared_name}Builder<kNoneSet>(); |
| 128 } | 129 } |
| 129 | 130 |
| 130 scoped_ptr<base::DictionaryValue> ToValue() { | 131 std::unique_ptr<base::DictionaryValue> ToValue() { |
| 131 static_assert(MASK == kAllSet, "required properties missing"); | 132 static_assert(MASK == kAllSet, "required properties missing"); |
| 132 return make_scoped_ptr(dict_->DeepCopy()); | 133 return base::WrapUnique(dict_->DeepCopy()); |
| 133 } | 134 } |
| 134 | 135 |
| 135 private: | 136 private: |
| 136 friend struct ${declared_name}Builder<0>; | 137 friend struct ${declared_name}Builder<0>; |
| 137 friend class base::RefCounted<${declared_name}Builder<MASK>>; | 138 friend class base::RefCounted<${declared_name}Builder<MASK>>; |
| 138 ~${declared_name}Builder() {} | 139 ~${declared_name}Builder() {} |
| 139 | 140 |
| 140 ${declared_name}Builder() : dict_(new base::DictionaryValue()) { | 141 ${declared_name}Builder() : dict_(new base::DictionaryValue()) { |
| 141 } | 142 } |
| 142 | 143 |
| 143 template<class T> T* ThisAs() { | 144 template<class T> T* ThisAs() { |
| 144 static_assert(sizeof(*this) == sizeof(T), "cannot cast"); | 145 static_assert(sizeof(*this) == sizeof(T), "cannot cast"); |
| 145 return reinterpret_cast<T*>(this); | 146 return reinterpret_cast<T*>(this); |
| 146 } | 147 } |
| 147 | 148 |
| 148 scoped_ptr<base::DictionaryValue> dict_; | 149 std::unique_ptr<base::DictionaryValue> dict_; |
| 149 }; | 150 }; |
| 150 | 151 |
| 151 typedef ${declared_name}Builder<0> ${declared_name}; | 152 typedef ${declared_name}Builder<0> ${declared_name}; |
| 152 | 153 |
| 153 } // namespace ${domain} | 154 } // namespace ${domain} |
| 154 """) | 155 """) |
| 155 | 156 |
| 156 tmpl_builder_setter_req = string.Template("""\ | 157 tmpl_builder_setter_req = string.Template("""\ |
| 157 scoped_refptr<${declared_name}Builder<MASK & ~k${Param}>> | 158 scoped_refptr<${declared_name}Builder<MASK & ~k${Param}>> |
| 158 set_${param}(${pass_type} ${param}) { | 159 set_${param}(${pass_type} ${param}) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 """) | 231 """) |
| 231 | 232 |
| 232 tmpl_setter = string.Template("""\ | 233 tmpl_setter = string.Template("""\ |
| 233 void Set${Domain}Handler( | 234 void Set${Domain}Handler( |
| 234 devtools::${domain}::${Domain}Handler* ${domain}_handler); | 235 devtools::${domain}::${Domain}Handler* ${domain}_handler); |
| 235 """) | 236 """) |
| 236 | 237 |
| 237 tmpl_callback = string.Template("""\ | 238 tmpl_callback = string.Template("""\ |
| 238 bool On${Domain}${Command}( | 239 bool On${Domain}${Command}( |
| 239 DevToolsCommandId command_id, | 240 DevToolsCommandId command_id, |
| 240 scoped_ptr<base::DictionaryValue> params); | 241 std::unique_ptr<base::DictionaryValue> params); |
| 241 """) | 242 """) |
| 242 | 243 |
| 243 tmpl_field = string.Template("""\ | 244 tmpl_field = string.Template("""\ |
| 244 devtools::${domain}::${Domain}Handler* ${domain}_handler_; | 245 devtools::${domain}::${Domain}Handler* ${domain}_handler_; |
| 245 """) | 246 """) |
| 246 | 247 |
| 247 template_cc = string.Template(header + """\ | 248 template_cc = string.Template(header + """\ |
| 248 | 249 |
| 249 #include "base/bind.h" | 250 #include "base/bind.h" |
| 250 #include "base/strings/string_number_conversions.h" | 251 #include "base/strings/string_number_conversions.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 """) | 313 """) |
| 313 | 314 |
| 314 tmpl_register = string.Template("""\ | 315 tmpl_register = string.Template("""\ |
| 315 command_handlers_["${Domain}.${command}"] = | 316 command_handlers_["${Domain}.${command}"] = |
| 316 base::Bind( | 317 base::Bind( |
| 317 &DevToolsProtocolDispatcher::On${TargetDomain}${Command}, | 318 &DevToolsProtocolDispatcher::On${TargetDomain}${Command}, |
| 318 base::Unretained(this)); | 319 base::Unretained(this)); |
| 319 """) | 320 """) |
| 320 | 321 |
| 321 tmpl_init_client = string.Template("""\ | 322 tmpl_init_client = string.Template("""\ |
| 322 ${domain}_handler_->SetClient(make_scoped_ptr( | 323 ${domain}_handler_->SetClient(base::WrapUnique( |
| 323 new devtools::${domain}::Client(notifier_))); | 324 new devtools::${domain}::Client(notifier_))); |
| 324 """) | 325 """) |
| 325 | 326 |
| 326 tmpl_callback_impl = string.Template("""\ | 327 tmpl_callback_impl = string.Template("""\ |
| 327 bool DevToolsProtocolDispatcher::On${Domain}${Command}( | 328 bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
| 328 DevToolsCommandId command_id, | 329 DevToolsCommandId command_id, |
| 329 scoped_ptr<base::DictionaryValue> params) { | 330 std::unique_ptr<base::DictionaryValue> params) { |
| 330 ${prep}\ | 331 ${prep}\ |
| 331 Response response = ${domain}_handler_->${Command}(${args}); | 332 Response response = ${domain}_handler_->${Command}(${args}); |
| 332 scoped_ptr<base::DictionaryValue> protocol_response; | 333 std::unique_ptr<base::DictionaryValue> protocol_response; |
| 333 if (client_.SendError(command_id, response)) | 334 if (client_.SendError(command_id, response)) |
| 334 return true; | 335 return true; |
| 335 if (response.IsFallThrough()) | 336 if (response.IsFallThrough()) |
| 336 return false; | 337 return false; |
| 337 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); | 338 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
| 338 ${wrap}\ | 339 ${wrap}\ |
| 339 client_.SendSuccess(command_id, std::move(result)); | 340 client_.SendSuccess(command_id, std::move(result)); |
| 340 return true; | 341 return true; |
| 341 } | 342 } |
| 342 """) | 343 """) |
| 343 | 344 |
| 344 tmpl_wrap = string.Template("""\ | 345 tmpl_wrap = string.Template("""\ |
| 345 result->Set("${proto_param}", devtools::CreateValue(out_${param})); | 346 result->Set("${proto_param}", devtools::CreateValue(out_${param})); |
| 346 """) | 347 """) |
| 347 | 348 |
| 348 tmpl_callback_async_impl = string.Template("""\ | 349 tmpl_callback_async_impl = string.Template("""\ |
| 349 bool DevToolsProtocolDispatcher::On${Domain}${Command}( | 350 bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
| 350 DevToolsCommandId command_id, | 351 DevToolsCommandId command_id, |
| 351 scoped_ptr<base::DictionaryValue> params) { | 352 std::unique_ptr<base::DictionaryValue> params) { |
| 352 ${prep}\ | 353 ${prep}\ |
| 353 Response response = ${domain}_handler_->${Command}(${args}); | 354 Response response = ${domain}_handler_->${Command}(${args}); |
| 354 if (client_.SendError(command_id, response)) | 355 if (client_.SendError(command_id, response)) |
| 355 return true; | 356 return true; |
| 356 return !response.IsFallThrough(); | 357 return !response.IsFallThrough(); |
| 357 } | 358 } |
| 358 """) | 359 """) |
| 359 | 360 |
| 360 tmpl_prep_req = string.Template("""\ | 361 tmpl_prep_req = string.Template("""\ |
| 361 ${raw_type} in_${param}${init}; | 362 ${raw_type} in_${param}${init}; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 """) | 396 """) |
| 396 | 397 |
| 397 tmpl_arg_name = string.Template("in_${param}") | 398 tmpl_arg_name = string.Template("in_${param}") |
| 398 | 399 |
| 399 tmpl_arg_req = string.Template("${param_pass}") | 400 tmpl_arg_req = string.Template("${param_pass}") |
| 400 | 401 |
| 401 tmpl_arg_opt = string.Template( | 402 tmpl_arg_opt = string.Template( |
| 402 "${param}_found ? ${param_pass} : nullptr") | 403 "${param}_found ? ${param_pass} : nullptr") |
| 403 | 404 |
| 404 tmpl_object_pass = string.Template( | 405 tmpl_object_pass = string.Template( |
| 405 "make_scoped_ptr<base::DictionaryValue>(${name}->DeepCopy())") | 406 "base::WrapUnique<base::DictionaryValue>(${name}->DeepCopy())") |
| 406 | 407 |
| 407 tmpl_client_impl = string.Template("""\ | 408 tmpl_client_impl = string.Template("""\ |
| 408 namespace ${domain} { | 409 namespace ${domain} { |
| 409 | 410 |
| 410 Client::Client(DevToolsProtocolDelegate* notifier) | 411 Client::Client(DevToolsProtocolDelegate* notifier) |
| 411 : DevToolsProtocolClient(notifier) { | 412 : DevToolsProtocolClient(notifier) { |
| 412 } | 413 } |
| 413 | 414 |
| 414 Client::~Client() { | 415 Client::~Client() { |
| 415 } | 416 } |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 mapping["prep_req"] = tmpl_prep_req_list.substitute(mapping, | 559 mapping["prep_req"] = tmpl_prep_req_list.substitute(mapping, |
| 559 item_type = items_map["storage_type"], | 560 item_type = items_map["storage_type"], |
| 560 item_init = items_map["init"], | 561 item_init = items_map["init"], |
| 561 item_raw_type = items_map["raw_type"], | 562 item_raw_type = items_map["raw_type"], |
| 562 item_pass = items_map["pass_template"].substitute(name="item", opt=""), | 563 item_pass = items_map["pass_template"].substitute(name="item", opt=""), |
| 563 ItemType = items_map["Type"]) | 564 ItemType = items_map["Type"]) |
| 564 mapping["arg_out"] = "&out_%s" % mapping["param"] | 565 mapping["arg_out"] = "&out_%s" % mapping["param"] |
| 565 | 566 |
| 566 def ResolveObject(json, mapping): | 567 def ResolveObject(json, mapping): |
| 567 mapping["Type"] = "Dictionary" | 568 mapping["Type"] = "Dictionary" |
| 568 mapping["storage_type"] = "scoped_ptr<base::DictionaryValue>" | 569 mapping["storage_type"] = "std::unique_ptr<base::DictionaryValue>" |
| 569 mapping["raw_type"] = "base::DictionaryValue*" | 570 mapping["raw_type"] = "base::DictionaryValue*" |
| 570 mapping["pass_template"] = tmpl_object_pass | 571 mapping["pass_template"] = tmpl_object_pass |
| 571 mapping["init"] = " = nullptr" | 572 mapping["init"] = " = nullptr" |
| 572 if "properties" in json: | 573 if "properties" in json: |
| 573 if not "declared_name" in mapping: | 574 if not "declared_name" in mapping: |
| 574 mapping["declared_name"] = ("%s%s" % | 575 mapping["declared_name"] = ("%s%s" % |
| 575 (mapping["Command"], Capitalize(mapping["proto_param"]))) | 576 (mapping["Command"], Capitalize(mapping["proto_param"]))) |
| 576 mapping["param_type"] = ("scoped_refptr<%s>" % | 577 mapping["param_type"] = ("scoped_refptr<%s>" % |
| 577 tmpl_typename.substitute(mapping)) | 578 tmpl_typename.substitute(mapping)) |
| 578 DeclareStruct(json["properties"], mapping) | 579 DeclareStruct(json["properties"], mapping) |
| 579 else: | 580 else: |
| 580 mapping["param_type"] = ("scoped_refptr<%s>" % | 581 mapping["param_type"] = ("scoped_refptr<%s>" % |
| 581 tmpl_typename.substitute(mapping)) | 582 tmpl_typename.substitute(mapping)) |
| 582 mapping["pass_type"] = mapping["param_type"] | 583 mapping["pass_type"] = mapping["param_type"] |
| 583 mapping["arg_out"] = "&out_%s" % mapping["param"] | 584 mapping["arg_out"] = "&out_%s" % mapping["param"] |
| 584 else: | 585 else: |
| 585 mapping["param_type"] = "base::DictionaryValue" | 586 mapping["param_type"] = "base::DictionaryValue" |
| 586 mapping["pass_type"] = "scoped_ptr<base::DictionaryValue>" | 587 mapping["pass_type"] = "std::unique_ptr<base::DictionaryValue>" |
| 587 mapping["arg_out"] = "out_%s.get()" % mapping["param"] | 588 mapping["arg_out"] = "out_%s.get()" % mapping["param"] |
| 588 mapping["prep_req"] = tmpl_prep_req.substitute(mapping) | 589 mapping["prep_req"] = tmpl_prep_req.substitute(mapping) |
| 589 | 590 |
| 590 def ResolvePrimitive(json, mapping): | 591 def ResolvePrimitive(json, mapping): |
| 591 jsonrpc_type = json["type"] | 592 jsonrpc_type = json["type"] |
| 592 if jsonrpc_type == "boolean": | 593 if jsonrpc_type == "boolean": |
| 593 mapping["param_type"] = "bool" | 594 mapping["param_type"] = "bool" |
| 594 mapping["Type"] = "Boolean" | 595 mapping["Type"] = "Boolean" |
| 595 mapping["init"] = " = false" | 596 mapping["init"] = " = false" |
| 596 elif jsonrpc_type == "integer": | 597 elif jsonrpc_type == "integer": |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 output_h_file.close() | 798 output_h_file.close() |
| 798 | 799 |
| 799 output_cc_file.write(template_cc.substitute({}, | 800 output_cc_file.write(template_cc.substitute({}, |
| 800 major = blink_protocol["version"]["major"], | 801 major = blink_protocol["version"]["major"], |
| 801 minor = blink_protocol["version"]["minor"], | 802 minor = blink_protocol["version"]["minor"], |
| 802 includes = "".join(sorted(includes)), | 803 includes = "".join(sorted(includes)), |
| 803 fields_init = ",\n ".join(fields_init), | 804 fields_init = ",\n ".join(fields_init), |
| 804 methods = "\n".join(handler_method_impls), | 805 methods = "\n".join(handler_method_impls), |
| 805 types = "\n".join(type_impls))) | 806 types = "\n".join(type_impls))) |
| 806 output_cc_file.close() | 807 output_cc_file.close() |
| OLD | NEW |