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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 base::Value* CreateValue(const std::string& param); | 69 base::Value* CreateValue(const std::string& param); |
70 | 70 |
71 ${types}\ | 71 ${types}\ |
72 | 72 |
73 } // namespace devtools | 73 } // namespace devtools |
74 | 74 |
75 class DevToolsProtocolDispatcher { | 75 class DevToolsProtocolDispatcher { |
76 public: | 76 public: |
77 using Notifier = DevToolsProtocolClient::RawMessageCallback; | 77 using Notifier = DevToolsProtocolClient::RawMessageCallback; |
78 using CommandHandler = | 78 using CommandHandler = |
79 base::Callback<bool(int, scoped_ptr<base::DictionaryValue>)>; | 79 base::Callback<bool(int, int, scoped_ptr<base::DictionaryValue>)>; |
80 | 80 |
81 explicit DevToolsProtocolDispatcher(const Notifier& notifier); | 81 explicit DevToolsProtocolDispatcher(const Notifier& notifier); |
82 ~DevToolsProtocolDispatcher(); | 82 ~DevToolsProtocolDispatcher(); |
83 | 83 |
84 CommandHandler FindCommandHandler(const std::string& method); | 84 CommandHandler FindCommandHandler(const std::string& method); |
85 | 85 |
86 ${setters}\ | 86 ${setters}\ |
87 | 87 |
88 private: | 88 private: |
89 using Response = DevToolsProtocolClient::Response; | 89 using Response = DevToolsProtocolClient::Response; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 } // namespace ${domain} | 216 } // namespace ${domain} |
217 """) | 217 """) |
218 | 218 |
219 tmpl_event = string.Template("""\ | 219 tmpl_event = string.Template("""\ |
220 void ${Command}( | 220 void ${Command}( |
221 scoped_refptr<${Command}Params> params); | 221 scoped_refptr<${Command}Params> params); |
222 """) | 222 """) |
223 | 223 |
224 tmpl_response = string.Template("""\ | 224 tmpl_response = string.Template("""\ |
225 void Send${Command}Response( | 225 void Send${Command}Response( |
| 226 int session_id, |
226 DevToolsCommandId command_id, | 227 DevToolsCommandId command_id, |
227 scoped_refptr<${Command}Response> params); | 228 scoped_refptr<${Command}Response> params); |
228 """) | 229 """) |
229 | 230 |
230 tmpl_setter = string.Template("""\ | 231 tmpl_setter = string.Template("""\ |
231 void Set${Domain}Handler( | 232 void Set${Domain}Handler( |
232 devtools::${domain}::${Domain}Handler* ${domain}_handler); | 233 devtools::${domain}::${Domain}Handler* ${domain}_handler); |
233 """) | 234 """) |
234 | 235 |
235 tmpl_callback = string.Template("""\ | 236 tmpl_callback = string.Template("""\ |
236 bool On${Domain}${Command}( | 237 bool On${Domain}${Command}( |
| 238 int session_id, |
237 DevToolsCommandId command_id, | 239 DevToolsCommandId command_id, |
238 scoped_ptr<base::DictionaryValue> params); | 240 scoped_ptr<base::DictionaryValue> params); |
239 """) | 241 """) |
240 | 242 |
241 tmpl_field = string.Template("""\ | 243 tmpl_field = string.Template("""\ |
242 devtools::${domain}::${Domain}Handler* ${domain}_handler_; | 244 devtools::${domain}::${Domain}Handler* ${domain}_handler_; |
243 """) | 245 """) |
244 | 246 |
245 template_cc = string.Template(header + """\ | 247 template_cc = string.Template(header + """\ |
246 | 248 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 base::Unretained(this)); | 318 base::Unretained(this)); |
317 """) | 319 """) |
318 | 320 |
319 tmpl_init_client = string.Template("""\ | 321 tmpl_init_client = string.Template("""\ |
320 ${domain}_handler_->SetClient(make_scoped_ptr( | 322 ${domain}_handler_->SetClient(make_scoped_ptr( |
321 new devtools::${domain}::Client(notifier_))); | 323 new devtools::${domain}::Client(notifier_))); |
322 """) | 324 """) |
323 | 325 |
324 tmpl_callback_impl = string.Template("""\ | 326 tmpl_callback_impl = string.Template("""\ |
325 bool DevToolsProtocolDispatcher::On${Domain}${Command}( | 327 bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
326 DevToolsCommandId command_id, | 328 int session_id, DevToolsCommandId command_id, |
327 scoped_ptr<base::DictionaryValue> params) { | 329 scoped_ptr<base::DictionaryValue> params) { |
328 ${prep}\ | 330 ${prep}\ |
329 Response response = ${domain}_handler_->${Command}(${args}); | 331 Response response = ${domain}_handler_->${Command}(${args}); |
330 scoped_ptr<base::DictionaryValue> protocol_response; | 332 scoped_ptr<base::DictionaryValue> protocol_response; |
331 if (client_.SendError(command_id, response)) | 333 if (client_.SendError(session_id, command_id, response)) |
332 return true; | 334 return true; |
333 if (response.IsFallThrough()) | 335 if (response.IsFallThrough()) |
334 return false; | 336 return false; |
335 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); | 337 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
336 ${wrap}\ | 338 ${wrap}\ |
337 client_.SendSuccess(command_id, result.Pass()); | 339 client_.SendSuccess(session_id, command_id, result.Pass()); |
338 return true; | 340 return true; |
339 } | 341 } |
340 """) | 342 """) |
341 | 343 |
342 tmpl_wrap = string.Template("""\ | 344 tmpl_wrap = string.Template("""\ |
343 result->Set("${proto_param}", devtools::CreateValue(out_${param})); | 345 result->Set("${proto_param}", devtools::CreateValue(out_${param})); |
344 """) | 346 """) |
345 | 347 |
346 tmpl_callback_async_impl = string.Template("""\ | 348 tmpl_callback_async_impl = string.Template("""\ |
347 bool DevToolsProtocolDispatcher::On${Domain}${Command}( | 349 bool DevToolsProtocolDispatcher::On${Domain}${Command}( |
| 350 int session_id, |
348 DevToolsCommandId command_id, | 351 DevToolsCommandId command_id, |
349 scoped_ptr<base::DictionaryValue> params) { | 352 scoped_ptr<base::DictionaryValue> params) { |
350 ${prep}\ | 353 ${prep}\ |
351 Response response = ${domain}_handler_->${Command}(${args}); | 354 Response response = ${domain}_handler_->${Command}(${args}); |
352 if (client_.SendError(command_id, response)) | 355 if (client_.SendError(session_id, command_id, response)) |
353 return true; | 356 return true; |
354 return !response.IsFallThrough(); | 357 return !response.IsFallThrough(); |
355 } | 358 } |
356 """) | 359 """) |
357 | 360 |
358 tmpl_prep_req = string.Template("""\ | 361 tmpl_prep_req = string.Template("""\ |
359 ${raw_type} in_${param}${init}; | 362 ${raw_type} in_${param}${init}; |
360 if (!params || !params->Get${Type}("${proto_param}", &in_${param})) { | 363 if (!params || !params->Get${Type}("${proto_param}", &in_${param})) { |
361 client_.SendError(command_id, Response::InvalidParams("${proto_param}")); | 364 client_.SendError(session_id, command_id, Response::InvalidParams("${proto_p
aram}")); |
362 return true; | 365 return true; |
363 } | 366 } |
364 """) | 367 """) |
365 | 368 |
366 tmpl_prep_req_list = string.Template("""\ | 369 tmpl_prep_req_list = string.Template("""\ |
367 base::ListValue* list_${param} = nullptr; | 370 base::ListValue* list_${param} = nullptr; |
368 if (!params || !params->GetList("${proto_param}", &list_${param})) { | 371 if (!params || !params->GetList("${proto_param}", &list_${param})) { |
369 client_.SendError(command_id, Response::InvalidParams("${proto_param}")); | 372 client_.SendError(session_id, command_id, Response::InvalidParams("${proto_p
aram}")); |
370 return true; | 373 return true; |
371 } | 374 } |
372 std::vector<${item_type}> in_${param}; | 375 std::vector<${item_type}> in_${param}; |
373 for (base::ListValue::const_iterator it = | 376 for (base::ListValue::const_iterator it = |
374 list_${param}->begin(); it != list_${param}->end(); ++it) { | 377 list_${param}->begin(); it != list_${param}->end(); ++it) { |
375 ${item_raw_type} item; | 378 ${item_raw_type} item; |
376 if (!(*it)->GetAs${ItemType}(&item)) { | 379 if (!(*it)->GetAs${ItemType}(&item)) { |
377 client_.SendError(command_id, Response::InvalidParams("${proto_param}")); | 380 client_.SendError(session_id, command_id, Response::InvalidParams("${proto
_param}")); |
378 return true; | 381 return true; |
379 } | 382 } |
380 in_${param}.push_back(${item_pass}); | 383 in_${param}.push_back(${item_pass}); |
381 } | 384 } |
382 """) | 385 """) |
383 | 386 |
384 tmpl_prep_opt = string.Template("""\ | 387 tmpl_prep_opt = string.Template("""\ |
385 ${raw_type} in_${param}${init}; | 388 ${raw_type} in_${param}${init}; |
386 bool ${param}_found = params && params->Get${Type}( | 389 bool ${param}_found = params && params->Get${Type}( |
387 "${proto_param}", | 390 "${proto_param}", |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 tmpl_event_impl = string.Template("""\ | 423 tmpl_event_impl = string.Template("""\ |
421 void Client::${Command}( | 424 void Client::${Command}( |
422 scoped_refptr<${Command}Params> params) { | 425 scoped_refptr<${Command}Params> params) { |
423 SendNotification("${Domain}.${command}", | 426 SendNotification("${Domain}.${command}", |
424 params->ToValue().Pass()); | 427 params->ToValue().Pass()); |
425 } | 428 } |
426 """) | 429 """) |
427 | 430 |
428 tmpl_response_impl = string.Template("""\ | 431 tmpl_response_impl = string.Template("""\ |
429 void Client::Send${Command}Response( | 432 void Client::Send${Command}Response( |
| 433 int session_id, |
430 DevToolsCommandId command_id, | 434 DevToolsCommandId command_id, |
431 scoped_refptr<${Command}Response> params) { | 435 scoped_refptr<${Command}Response> params) { |
432 SendSuccess(command_id, params->ToValue().Pass()); | 436 SendSuccess(session_id, command_id, params->ToValue().Pass()); |
433 } | 437 } |
434 """) | 438 """) |
435 | 439 |
436 tmpl_typename = string.Template("devtools::${domain}::${declared_name}") | 440 tmpl_typename = string.Template("devtools::${domain}::${declared_name}") |
437 | 441 |
438 def Capitalize(s): | 442 def Capitalize(s): |
439 return s[:1].upper() + s[1:] | 443 return s[:1].upper() + s[1:] |
440 | 444 |
441 def Uncamelcase(s): | 445 def Uncamelcase(s): |
442 result = "" | 446 result = "" |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 if json_command.get("async"): | 705 if json_command.get("async"): |
702 domain_needs_client = True | 706 domain_needs_client = True |
703 json_returns = [] | 707 json_returns = [] |
704 if "returns" in json_command: | 708 if "returns" in json_command: |
705 json_returns = json_command["returns"] | 709 json_returns = json_command["returns"] |
706 command_map["declared_name"] = "%sResponse" % command_map["Command"] | 710 command_map["declared_name"] = "%sResponse" % command_map["Command"] |
707 DeclareStruct(json_returns, command_map) | 711 DeclareStruct(json_returns, command_map) |
708 # TODO(vkuzkokov) Pass async callback instance similar to how | 712 # TODO(vkuzkokov) Pass async callback instance similar to how |
709 # InspectorBackendDispatcher does it. This, however, can work | 713 # InspectorBackendDispatcher does it. This, however, can work |
710 # only if Blink and Chrome are in the same repo. | 714 # only if Blink and Chrome are in the same repo. |
711 args.insert(0, "command_id") | 715 args.insert(0, "session_id") |
| 716 args.insert(1, "command_id") |
712 handler_method_impls.append( | 717 handler_method_impls.append( |
713 tmpl_callback_async_impl.substitute(command_map, | 718 tmpl_callback_async_impl.substitute(command_map, |
714 prep = "".join(prep), | 719 prep = "".join(prep), |
715 args = "\n " + ",\n ".join(args))) | 720 args = "\n " + ",\n ".join(args))) |
716 client_methods.append(tmpl_response.substitute(command_map)) | 721 client_methods.append(tmpl_response.substitute(command_map)) |
717 client_method_impls.append(tmpl_response_impl.substitute(command_map)) | 722 client_method_impls.append(tmpl_response_impl.substitute(command_map)) |
718 else: | 723 else: |
719 wrap = [] | 724 wrap = [] |
720 if "returns" in json_command: | 725 if "returns" in json_command: |
721 for json_param in json_command["returns"]: | 726 for json_param in json_command["returns"]: |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 output_h_file.close() | 799 output_h_file.close() |
795 | 800 |
796 output_cc_file.write(template_cc.substitute({}, | 801 output_cc_file.write(template_cc.substitute({}, |
797 major = blink_protocol["version"]["major"], | 802 major = blink_protocol["version"]["major"], |
798 minor = blink_protocol["version"]["minor"], | 803 minor = blink_protocol["version"]["minor"], |
799 includes = "".join(sorted(includes)), | 804 includes = "".join(sorted(includes)), |
800 fields_init = ",\n ".join(fields_init), | 805 fields_init = ",\n ".join(fields_init), |
801 methods = "\n".join(handler_method_impls), | 806 methods = "\n".join(handler_method_impls), |
802 types = "\n".join(type_impls))) | 807 types = "\n".join(type_impls))) |
803 output_cc_file.close() | 808 output_cc_file.close() |
OLD | NEW |