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> |
11 | 11 |
12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
15 #include "base/memory/singleton.h" | 15 #include "base/memory/singleton.h" |
16 #include "base/string_number_conversions.h" | 16 #include "base/string_number_conversions.h" |
17 #include "base/utf_string_conversions.h" | 17 #include "base/utf_string_conversions.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" | 19 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
20 #include "chrome/browser/extensions/api/debugger/debugger_api_constants.h" | 20 #include "chrome/browser/extensions/api/debugger/debugger_api_constants.h" |
21 #include "chrome/browser/extensions/event_router.h" | 21 #include "chrome/browser/extensions/event_router.h" |
22 #include "chrome/browser/extensions/extension_tab_util.h" | 22 #include "chrome/browser/extensions/extension_tab_util.h" |
23 #include "chrome/browser/infobars/infobar.h" | 23 #include "chrome/browser/infobars/infobar.h" |
24 #include "chrome/browser/infobars/infobar_tab_helper.h" | 24 #include "chrome/browser/infobars/infobar_tab_helper.h" |
25 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
26 #include "chrome/browser/ui/tab_contents/tab_contents.h" | |
27 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | 26 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
28 #include "chrome/common/chrome_notification_types.h" | 27 #include "chrome/common/chrome_notification_types.h" |
29 #include "chrome/common/extensions/api/debugger.h" | 28 #include "chrome/common/extensions/api/debugger.h" |
30 #include "chrome/common/extensions/extension.h" | 29 #include "chrome/common/extensions/extension.h" |
31 #include "chrome/common/extensions/extension_error_utils.h" | 30 #include "chrome/common/extensions/extension_error_utils.h" |
32 #include "content/public/browser/devtools_agent_host_registry.h" | 31 #include "content/public/browser/devtools_agent_host_registry.h" |
33 #include "content/public/browser/devtools_client_host.h" | 32 #include "content/public/browser/devtools_client_host.h" |
34 #include "content/public/browser/devtools_manager.h" | 33 #include "content/public/browser/devtools_manager.h" |
35 #include "content/public/browser/notification_service.h" | 34 #include "content/public/browser/notification_service.h" |
36 #include "content/public/browser/notification_source.h" | 35 #include "content/public/browser/notification_source.h" |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 client_host_->MarkAsDismissed(); | 399 client_host_->MarkAsDismissed(); |
401 return true; | 400 return true; |
402 } | 401 } |
403 | 402 |
404 DebuggerFunction::DebuggerFunction() | 403 DebuggerFunction::DebuggerFunction() |
405 : contents_(0), | 404 : contents_(0), |
406 tab_id_(0), | 405 tab_id_(0), |
407 client_host_(0) { | 406 client_host_(0) { |
408 } | 407 } |
409 | 408 |
410 bool DebuggerFunction::InitTabContents() { | 409 bool DebuggerFunction::InitWebContents() { |
411 // Find the TabContents that contains this tab id. | 410 // Find the WebContents that contains this tab id. |
412 contents_ = NULL; | 411 contents_ = NULL; |
413 TabContents* tab_contents = NULL; | 412 WebContents* web_contents = NULL; |
414 bool result = ExtensionTabUtil::GetTabById( | 413 bool result = ExtensionTabUtil::GetTabById( |
415 tab_id_, profile(), include_incognito(), NULL, NULL, &tab_contents, NULL); | 414 tab_id_, profile(), include_incognito(), NULL, NULL, &web_contents, NULL); |
416 if (!result || !tab_contents) { | 415 if (!result || !web_contents) { |
417 error_ = ExtensionErrorUtils::FormatErrorMessage( | 416 error_ = ExtensionErrorUtils::FormatErrorMessage( |
418 keys::kNoTabError, | 417 keys::kNoTabError, |
419 base::IntToString(tab_id_)); | 418 base::IntToString(tab_id_)); |
420 return false; | 419 return false; |
421 } | 420 } |
422 contents_ = tab_contents->web_contents(); | 421 contents_ = web_contents; |
423 | 422 |
424 if (content::GetContentClient()->HasWebUIScheme( | 423 if (content::GetContentClient()->HasWebUIScheme( |
425 contents_->GetURL())) { | 424 contents_->GetURL())) { |
426 error_ = ExtensionErrorUtils::FormatErrorMessage( | 425 error_ = ExtensionErrorUtils::FormatErrorMessage( |
427 keys::kAttachToWebUIError, | 426 keys::kAttachToWebUIError, |
428 contents_->GetURL().scheme()); | 427 contents_->GetURL().scheme()); |
429 return false; | 428 return false; |
430 } | 429 } |
431 | 430 |
432 return true; | 431 return true; |
433 } | 432 } |
434 | 433 |
435 bool DebuggerFunction::InitClientHost() { | 434 bool DebuggerFunction::InitClientHost() { |
436 if (!InitTabContents()) | 435 if (!InitWebContents()) |
437 return false; | 436 return false; |
438 | 437 |
439 // Don't fetch rvh from the contents since it'll be wrong upon navigation. | 438 // Don't fetch rvh from the contents since it'll be wrong upon navigation. |
440 client_host_ = AttachedClientHosts::GetInstance()->Lookup(contents_); | 439 client_host_ = AttachedClientHosts::GetInstance()->Lookup(contents_); |
441 | 440 |
442 if (!client_host_ || | 441 if (!client_host_ || |
443 !client_host_->MatchesContentsAndExtensionId(contents_, | 442 !client_host_->MatchesContentsAndExtensionId(contents_, |
444 GetExtension()->id())) { | 443 GetExtension()->id())) { |
445 error_ = ExtensionErrorUtils::FormatErrorMessage( | 444 error_ = ExtensionErrorUtils::FormatErrorMessage( |
446 keys::kNotAttachedError, | 445 keys::kNotAttachedError, |
447 base::IntToString(tab_id_)); | 446 base::IntToString(tab_id_)); |
448 return false; | 447 return false; |
449 } | 448 } |
450 return true; | 449 return true; |
451 } | 450 } |
452 | 451 |
453 AttachDebuggerFunction::AttachDebuggerFunction() {} | 452 AttachDebuggerFunction::AttachDebuggerFunction() {} |
454 | 453 |
455 AttachDebuggerFunction::~AttachDebuggerFunction() {} | 454 AttachDebuggerFunction::~AttachDebuggerFunction() {} |
456 | 455 |
457 bool AttachDebuggerFunction::RunImpl() { | 456 bool AttachDebuggerFunction::RunImpl() { |
458 scoped_ptr<Attach::Params> params(Attach::Params::Create(*args_)); | 457 scoped_ptr<Attach::Params> params(Attach::Params::Create(*args_)); |
459 EXTENSION_FUNCTION_VALIDATE(params.get()); | 458 EXTENSION_FUNCTION_VALIDATE(params.get()); |
460 | 459 |
461 tab_id_ = params->target.tab_id; | 460 tab_id_ = params->target.tab_id; |
462 if (!InitTabContents()) | 461 if (!InitWebContents()) |
463 return false; | 462 return false; |
464 | 463 |
465 if (!webkit_glue::IsInspectorProtocolVersionSupported( | 464 if (!webkit_glue::IsInspectorProtocolVersionSupported( |
466 params->required_version)) { | 465 params->required_version)) { |
467 error_ = ExtensionErrorUtils::FormatErrorMessage( | 466 error_ = ExtensionErrorUtils::FormatErrorMessage( |
468 keys::kProtocolVersionNotSupportedError, | 467 keys::kProtocolVersionNotSupportedError, |
469 params->required_version); | 468 params->required_version); |
470 return false; | 469 return false; |
471 } | 470 } |
472 | 471 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 } | 542 } |
544 | 543 |
545 // static | 544 // static |
546 void DebuggerApi::MarkDevToolsClientHostAsReplaced( | 545 void DebuggerApi::MarkDevToolsClientHostAsReplaced( |
547 DevToolsClientHost* client_host) { | 546 DevToolsClientHost* client_host) { |
548 ExtensionDevToolsClientHost* host = AttachedClientHosts::GetInstance()-> | 547 ExtensionDevToolsClientHost* host = AttachedClientHosts::GetInstance()-> |
549 AsExtensionDevToolsClientHost(client_host); | 548 AsExtensionDevToolsClientHost(client_host); |
550 if (host) | 549 if (host) |
551 host->MarkAsReplaced(); | 550 host->MarkAsReplaced(); |
552 } | 551 } |
OLD | NEW |