OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Implements the Chrome Extensions Debugger API. | 5 // Implements the Chrome Extensions Debugger API. |
6 | 6 |
7 #include "chrome/browser/extensions/api/debugger/debugger_api.h" | 7 #include "chrome/browser/extensions/api/debugger/debugger_api.h" |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 ExtensionDevToolsClientHost(WebContents* web_contents, | 97 ExtensionDevToolsClientHost(WebContents* web_contents, |
98 const std::string& extension_id, | 98 const std::string& extension_id, |
99 const std::string& extension_name, | 99 const std::string& extension_name, |
100 int tab_id); | 100 int tab_id); |
101 | 101 |
102 ~ExtensionDevToolsClientHost(); | 102 ~ExtensionDevToolsClientHost(); |
103 | 103 |
104 bool MatchesContentsAndExtensionId(WebContents* web_contents, | 104 bool MatchesContentsAndExtensionId(WebContents* web_contents, |
105 const std::string& extension_id); | 105 const std::string& extension_id); |
106 void Close(); | 106 void Close(); |
107 void SendMessageToBackend(SendCommandDebuggerFunction* function, | 107 void SendMessageToBackend(DebuggerSendCommandFunction* function, |
108 const std::string& method, | 108 const std::string& method, |
109 SendCommand::Params::CommandParams* command_params); | 109 SendCommand::Params::CommandParams* command_params); |
110 | 110 |
111 // Marks connection as to-be-terminated by the user. | 111 // Marks connection as to-be-terminated by the user. |
112 void MarkAsDismissed(); | 112 void MarkAsDismissed(); |
113 | 113 |
114 // DevToolsClientHost interface | 114 // DevToolsClientHost interface |
115 virtual void InspectedContentsClosing() OVERRIDE; | 115 virtual void InspectedContentsClosing() OVERRIDE; |
116 virtual void DispatchOnInspectorFrontend(const std::string& message) OVERRIDE; | 116 virtual void DispatchOnInspectorFrontend(const std::string& message) OVERRIDE; |
117 virtual void ReplacedWithAnotherClient() OVERRIDE; | 117 virtual void ReplacedWithAnotherClient() OVERRIDE; |
118 | 118 |
119 private: | 119 private: |
120 void SendDetachedEvent(); | 120 void SendDetachedEvent(); |
121 | 121 |
122 // content::NotificationObserver implementation. | 122 // content::NotificationObserver implementation. |
123 virtual void Observe(int type, | 123 virtual void Observe(int type, |
124 const content::NotificationSource& source, | 124 const content::NotificationSource& source, |
125 const content::NotificationDetails& details); | 125 const content::NotificationDetails& details); |
126 | 126 |
127 WebContents* web_contents_; | 127 WebContents* web_contents_; |
128 std::string extension_id_; | 128 std::string extension_id_; |
129 int tab_id_; | 129 int tab_id_; |
130 content::NotificationRegistrar registrar_; | 130 content::NotificationRegistrar registrar_; |
131 int last_request_id_; | 131 int last_request_id_; |
132 typedef std::map<int, scoped_refptr<SendCommandDebuggerFunction> > | 132 typedef std::map<int, scoped_refptr<DebuggerSendCommandFunction> > |
133 PendingRequests; | 133 PendingRequests; |
134 PendingRequests pending_requests_; | 134 PendingRequests pending_requests_; |
135 ExtensionDevToolsInfoBarDelegate* infobar_delegate_; | 135 ExtensionDevToolsInfoBarDelegate* infobar_delegate_; |
136 OnDetach::Reason detach_reason_; | 136 OnDetach::Reason detach_reason_; |
137 | 137 |
138 DISALLOW_COPY_AND_ASSIGN(ExtensionDevToolsClientHost); | 138 DISALLOW_COPY_AND_ASSIGN(ExtensionDevToolsClientHost); |
139 }; | 139 }; |
140 | 140 |
141 namespace { | 141 namespace { |
142 | 142 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 void ExtensionDevToolsClientHost::ReplacedWithAnotherClient() { | 242 void ExtensionDevToolsClientHost::ReplacedWithAnotherClient() { |
243 detach_reason_ = OnDetach::REASON_REPLACED_WITH_DEVTOOLS; | 243 detach_reason_ = OnDetach::REASON_REPLACED_WITH_DEVTOOLS; |
244 } | 244 } |
245 | 245 |
246 void ExtensionDevToolsClientHost::Close() { | 246 void ExtensionDevToolsClientHost::Close() { |
247 DevToolsManager::GetInstance()->ClientHostClosing(this); | 247 DevToolsManager::GetInstance()->ClientHostClosing(this); |
248 delete this; | 248 delete this; |
249 } | 249 } |
250 | 250 |
251 void ExtensionDevToolsClientHost::SendMessageToBackend( | 251 void ExtensionDevToolsClientHost::SendMessageToBackend( |
252 SendCommandDebuggerFunction* function, | 252 DebuggerSendCommandFunction* function, |
253 const std::string& method, | 253 const std::string& method, |
254 SendCommand::Params::CommandParams* command_params) { | 254 SendCommand::Params::CommandParams* command_params) { |
255 DictionaryValue protocol_request; | 255 DictionaryValue protocol_request; |
256 int request_id = ++last_request_id_; | 256 int request_id = ++last_request_id_; |
257 pending_requests_[request_id] = function; | 257 pending_requests_[request_id] = function; |
258 protocol_request.SetInteger("id", request_id); | 258 protocol_request.SetInteger("id", request_id); |
259 protocol_request.SetString("method", method); | 259 protocol_request.SetString("method", method); |
260 if (command_params) { | 260 if (command_params) { |
261 protocol_request.Set("params", | 261 protocol_request.Set("params", |
262 command_params->additional_properties.DeepCopy()); | 262 command_params->additional_properties.DeepCopy()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 if (dictionary->GetDictionary("params", ¶ms_value)) | 336 if (dictionary->GetDictionary("params", ¶ms_value)) |
337 params.additional_properties.Swap(params_value); | 337 params.additional_properties.Swap(params_value); |
338 | 338 |
339 scoped_ptr<ListValue> args(OnEvent::Create(debuggee, method_name, params)); | 339 scoped_ptr<ListValue> args(OnEvent::Create(debuggee, method_name, params)); |
340 scoped_ptr<extensions::Event> event(new extensions::Event( | 340 scoped_ptr<extensions::Event> event(new extensions::Event( |
341 keys::kOnEvent, args.Pass())); | 341 keys::kOnEvent, args.Pass())); |
342 event->restrict_to_profile = profile; | 342 event->restrict_to_profile = profile; |
343 extensions::ExtensionSystem::Get(profile)->event_router()-> | 343 extensions::ExtensionSystem::Get(profile)->event_router()-> |
344 DispatchEventToExtension(extension_id_, event.Pass()); | 344 DispatchEventToExtension(extension_id_, event.Pass()); |
345 } else { | 345 } else { |
346 SendCommandDebuggerFunction* function = pending_requests_[id]; | 346 DebuggerSendCommandFunction* function = pending_requests_[id]; |
347 if (!function) | 347 if (!function) |
348 return; | 348 return; |
349 | 349 |
350 function->SendResponseBody(dictionary); | 350 function->SendResponseBody(dictionary); |
351 pending_requests_.erase(id); | 351 pending_requests_.erase(id); |
352 } | 352 } |
353 } | 353 } |
354 | 354 |
355 // static | 355 // static |
356 ExtensionDevToolsInfoBarDelegate* ExtensionDevToolsInfoBarDelegate::Create( | 356 ExtensionDevToolsInfoBarDelegate* ExtensionDevToolsInfoBarDelegate::Create( |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 !client_host_->MatchesContentsAndExtensionId(contents_, | 450 !client_host_->MatchesContentsAndExtensionId(contents_, |
451 GetExtension()->id())) { | 451 GetExtension()->id())) { |
452 error_ = ErrorUtils::FormatErrorMessage( | 452 error_ = ErrorUtils::FormatErrorMessage( |
453 keys::kNotAttachedError, | 453 keys::kNotAttachedError, |
454 base::IntToString(tab_id_)); | 454 base::IntToString(tab_id_)); |
455 return false; | 455 return false; |
456 } | 456 } |
457 return true; | 457 return true; |
458 } | 458 } |
459 | 459 |
460 AttachDebuggerFunction::AttachDebuggerFunction() {} | 460 DebuggerAttachFunction::DebuggerAttachFunction() {} |
461 | 461 |
462 AttachDebuggerFunction::~AttachDebuggerFunction() {} | 462 DebuggerAttachFunction::~DebuggerAttachFunction() {} |
463 | 463 |
464 bool AttachDebuggerFunction::RunImpl() { | 464 bool DebuggerAttachFunction::RunImpl() { |
465 scoped_ptr<Attach::Params> params(Attach::Params::Create(*args_)); | 465 scoped_ptr<Attach::Params> params(Attach::Params::Create(*args_)); |
466 EXTENSION_FUNCTION_VALIDATE(params.get()); | 466 EXTENSION_FUNCTION_VALIDATE(params.get()); |
467 | 467 |
468 tab_id_ = params->target.tab_id; | 468 tab_id_ = params->target.tab_id; |
469 if (!InitWebContents()) | 469 if (!InitWebContents()) |
470 return false; | 470 return false; |
471 | 471 |
472 if (!webkit_glue::IsInspectorProtocolVersionSupported( | 472 if (!webkit_glue::IsInspectorProtocolVersionSupported( |
473 params->required_version)) { | 473 params->required_version)) { |
474 error_ = ErrorUtils::FormatErrorMessage( | 474 error_ = ErrorUtils::FormatErrorMessage( |
(...skipping 15 matching lines...) Expand all Loading... |
490 } | 490 } |
491 | 491 |
492 new ExtensionDevToolsClientHost(contents_, | 492 new ExtensionDevToolsClientHost(contents_, |
493 GetExtension()->id(), | 493 GetExtension()->id(), |
494 GetExtension()->name(), | 494 GetExtension()->name(), |
495 tab_id_); | 495 tab_id_); |
496 SendResponse(true); | 496 SendResponse(true); |
497 return true; | 497 return true; |
498 } | 498 } |
499 | 499 |
500 DetachDebuggerFunction::DetachDebuggerFunction() {} | 500 DebuggerDetachFunction::DebuggerDetachFunction() {} |
501 | 501 |
502 DetachDebuggerFunction::~DetachDebuggerFunction() {} | 502 DebuggerDetachFunction::~DebuggerDetachFunction() {} |
503 | 503 |
504 bool DetachDebuggerFunction::RunImpl() { | 504 bool DebuggerDetachFunction::RunImpl() { |
505 scoped_ptr<Detach::Params> params(Detach::Params::Create(*args_)); | 505 scoped_ptr<Detach::Params> params(Detach::Params::Create(*args_)); |
506 EXTENSION_FUNCTION_VALIDATE(params.get()); | 506 EXTENSION_FUNCTION_VALIDATE(params.get()); |
507 | 507 |
508 tab_id_ = params->target.tab_id; | 508 tab_id_ = params->target.tab_id; |
509 if (!InitClientHost()) | 509 if (!InitClientHost()) |
510 return false; | 510 return false; |
511 | 511 |
512 client_host_->Close(); | 512 client_host_->Close(); |
513 SendResponse(true); | 513 SendResponse(true); |
514 return true; | 514 return true; |
515 } | 515 } |
516 | 516 |
517 SendCommandDebuggerFunction::SendCommandDebuggerFunction() {} | 517 DebuggerSendCommandFunction::DebuggerSendCommandFunction() {} |
518 | 518 |
519 SendCommandDebuggerFunction::~SendCommandDebuggerFunction() {} | 519 DebuggerSendCommandFunction::~DebuggerSendCommandFunction() {} |
520 | 520 |
521 bool SendCommandDebuggerFunction::RunImpl() { | 521 bool DebuggerSendCommandFunction::RunImpl() { |
522 scoped_ptr<SendCommand::Params> params(SendCommand::Params::Create(*args_)); | 522 scoped_ptr<SendCommand::Params> params(SendCommand::Params::Create(*args_)); |
523 EXTENSION_FUNCTION_VALIDATE(params.get()); | 523 EXTENSION_FUNCTION_VALIDATE(params.get()); |
524 | 524 |
525 tab_id_ = params->target.tab_id; | 525 tab_id_ = params->target.tab_id; |
526 if (!InitClientHost()) | 526 if (!InitClientHost()) |
527 return false; | 527 return false; |
528 | 528 |
529 client_host_->SendMessageToBackend(this, params->method, | 529 client_host_->SendMessageToBackend(this, params->method, |
530 params->command_params.get()); | 530 params->command_params.get()); |
531 return true; | 531 return true; |
532 } | 532 } |
533 | 533 |
534 void SendCommandDebuggerFunction::SendResponseBody( | 534 void DebuggerSendCommandFunction::SendResponseBody( |
535 DictionaryValue* response) { | 535 DictionaryValue* response) { |
536 Value* error_body; | 536 Value* error_body; |
537 if (response->Get("error", &error_body)) { | 537 if (response->Get("error", &error_body)) { |
538 base::JSONWriter::Write(error_body, &error_); | 538 base::JSONWriter::Write(error_body, &error_); |
539 SendResponse(false); | 539 SendResponse(false); |
540 return; | 540 return; |
541 } | 541 } |
542 | 542 |
543 DictionaryValue* result_body; | 543 DictionaryValue* result_body; |
544 SendCommand::Results::Result result; | 544 SendCommand::Results::Result result; |
545 if (response->GetDictionary("result", &result_body)) | 545 if (response->GetDictionary("result", &result_body)) |
546 result.additional_properties.Swap(result_body); | 546 result.additional_properties.Swap(result_body); |
547 | 547 |
548 results_ = SendCommand::Results::Create(result); | 548 results_ = SendCommand::Results::Create(result); |
549 SendResponse(true); | 549 SendResponse(true); |
550 } | 550 } |
OLD | NEW |