diff options
author | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-28 17:08:48 +0000 |
---|---|---|
committer | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-28 17:08:48 +0000 |
commit | 30e246b265c0fde7b0f5dc8de0f72ac8ae5fb399 (patch) | |
tree | 578f3a327f93f9d3770ff3868904728a35200c94 | |
parent | b819acd490da663bab01a464dc213032e3f5cc96 (diff) | |
download | chromium_src-30e246b265c0fde7b0f5dc8de0f72ac8ae5fb399.zip chromium_src-30e246b265c0fde7b0f5dc8de0f72ac8ae5fb399.tar.gz chromium_src-30e246b265c0fde7b0f5dc8de0f72ac8ae5fb399.tar.bz2 |
Revert 191151 "Add chrome.debugger.getTargets method to discover..."
ExtensionApiTest.Debugger began failing on Linux Tests (dbg)(1)(32), Mac10.7 Tests (1), Win 7 and Win XP.
> Add chrome.debugger.getTargets method to discover available debug targets.
>
>
> BUG=179342
>
>
> Review URL: https://chromiumcodereview.appspot.com/12377047
TBR=kaznacheev@chromium.org
Review URL: https://codereview.chromium.org/13191006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191160 0039d316-1c4b-4281-b951-d872f2087c98
8 files changed, 91 insertions, 300 deletions
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc index 2a61911..0af2f98 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api.cc +++ b/chrome/browser/extensions/api/debugger/debugger_api.cc @@ -34,8 +34,6 @@ #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_client_host.h" #include "content/public/browser/devtools_manager.h" -#include "content/public/browser/favicon_status.h" -#include "content/public/browser/navigation_entry.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h" #include "content/public/browser/render_process_host.h" @@ -72,19 +70,19 @@ class ExtensionDevToolsInfoBarDelegate : public ConfirmInfoBarDelegate { // Creates an extension dev tools delegate and adds it to |infobar_service|. // Returns a pointer to the delegate if it was successfully added. static ExtensionDevToolsInfoBarDelegate* Create( - WebContents* web_contents, - const std::string& client_name); - - // Associates DevToolsClientHost with this infobar delegate. - void AttachClientHost(ExtensionDevToolsClientHost* client_host); + InfoBarService* infobar_service, + const std::string& client_name, + ExtensionDevToolsClientHost* client_host); // Notifies infobar delegate that associated DevToolsClientHost will be // destroyed. void DiscardClientHost(); private: - ExtensionDevToolsInfoBarDelegate(InfoBarService* infobar_service, - const std::string& client_name); + ExtensionDevToolsInfoBarDelegate( + InfoBarService* infobar_service, + const std::string& client_name, + ExtensionDevToolsClientHost* client_host); virtual ~ExtensionDevToolsInfoBarDelegate(); // ConfirmInfoBarDelegate: @@ -104,12 +102,10 @@ class ExtensionDevToolsInfoBarDelegate : public ConfirmInfoBarDelegate { class ExtensionDevToolsClientHost : public DevToolsClientHost, public content::NotificationObserver { public: - ExtensionDevToolsClientHost( - WebContents* web_contents, - const std::string& extension_id, - const std::string& extension_name, - const Debuggee& debuggee, - ExtensionDevToolsInfoBarDelegate* infobar_delegate); + ExtensionDevToolsClientHost(WebContents* web_contents, + const std::string& extension_id, + const std::string& extension_name, + const Debuggee& debuggee); virtual ~ExtensionDevToolsClientHost(); @@ -187,72 +183,6 @@ class AttachedClientHosts { std::set<DevToolsClientHost*> client_hosts_; }; -static extensions::ExtensionHost* GetExtensionBackgroundHost( - WebContents* web_contents) { - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - if (!profile) - return NULL; - - extensions::ExtensionHost* extension_host = - extensions::ExtensionSystem::Get(profile)->process_manager()-> - GetBackgroundHostForExtension(web_contents->GetURL().host()); - - if (extension_host && extension_host->host_contents() == web_contents) - return extension_host; - - return NULL; -} - -static const char kTargetIdField[] = "id"; -static const char kTargetTypeField[] = "type"; -static const char kTargetTitleField[] = "title"; -static const char kTargetAttachedField[] = "attached"; -static const char kTargetUrlField[] = "url"; -static const char kTargetFaviconUrlField[] = "faviconUrl"; - -static const char kTargetTypePage[] = "page"; -static const char kTargetTypeBackgroundPage[] = "background_page"; - -static base::Value* SerializePageInfo(RenderViewHost* rvh) { - WebContents* web_contents = WebContents::FromRenderViewHost(rvh); - if (!web_contents) - return NULL; - - DevToolsAgentHost* agent_host = DevToolsAgentHost::GetOrCreateFor(rvh); - - base::DictionaryValue* dictionary = new base::DictionaryValue(); - - dictionary->SetString(kTargetIdField, agent_host->GetId()); - dictionary->SetBoolean(kTargetAttachedField, - !!DevToolsManager::GetInstance()->GetDevToolsClientHostFor(agent_host)); - dictionary->SetString(kTargetUrlField, web_contents->GetURL().spec()); - - - extensions::ExtensionHost* extension_host = - GetExtensionBackgroundHost(web_contents); - if (extension_host) { - // This RenderViewHost belongs to a background page. - dictionary->SetString(kTargetTypeField, kTargetTypeBackgroundPage); - dictionary->SetString(kTargetTitleField, - extension_host->extension()->name()); - } else { - // This RenderViewHost belongs to a regular page. - dictionary->SetString(kTargetTypeField, kTargetTypePage); - dictionary->SetString(kTargetTitleField, - UTF16ToUTF8(net::EscapeForHTML(web_contents->GetTitle()))); - - content::NavigationController& controller = web_contents->GetController(); - content::NavigationEntry* entry = controller.GetActiveEntry(); - if (entry != NULL && entry->GetURL().is_valid()) { - dictionary->SetString(kTargetFaviconUrlField, - entry->GetFavicon().url.spec()); - } - } - - return dictionary; -} - } // namespace static void CopyDebuggee(Debuggee & dst, const Debuggee& src) { @@ -260,20 +190,17 @@ static void CopyDebuggee(Debuggee & dst, const Debuggee& src) { dst.tab_id.reset(new int(*src.tab_id)); if (src.extension_id) dst.extension_id.reset(new std::string(*src.extension_id)); - if (src.target_id) - dst.target_id.reset(new std::string(*src.target_id)); } ExtensionDevToolsClientHost::ExtensionDevToolsClientHost( WebContents* web_contents, const std::string& extension_id, const std::string& extension_name, - const Debuggee& debuggee, - ExtensionDevToolsInfoBarDelegate* infobar_delegate) + const Debuggee& debuggee) : web_contents_(web_contents), extension_id_(extension_id), last_request_id_(0), - infobar_delegate_(infobar_delegate), + infobar_delegate_(NULL), detach_reason_(OnDetach::REASON_TARGET_CLOSED) { CopyDebuggee(debuggee_, debuggee); @@ -290,11 +217,16 @@ ExtensionDevToolsClientHost::ExtensionDevToolsClientHost( web_contents_->GetRenderViewHost())); DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(agent, this); - if (infobar_delegate_) { - infobar_delegate_->AttachClientHost(this); - registrar_.Add(this, - chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, - content::Source<InfoBarService>(infobar_delegate_->owner())); + if (!CommandLine::ForCurrentProcess()-> + HasSwitch(switches::kSilentDebuggerExtensionAPI)) { + InfoBarService* infobar_service = + InfoBarService::FromWebContents(web_contents_); + infobar_delegate_ = ExtensionDevToolsInfoBarDelegate::Create( + infobar_service, extension_name, this); + if (infobar_delegate_) { + registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, + content::Source<InfoBarService>(infobar_service)); + } } } @@ -305,8 +237,10 @@ ExtensionDevToolsClientHost::~ExtensionDevToolsClientHost() { if (infobar_delegate_) { infobar_delegate_->DiscardClientHost(); - if (infobar_delegate_->owner()) - infobar_delegate_->owner()->RemoveInfoBar(infobar_delegate_); + InfoBarService* infobar_service = + InfoBarService::FromWebContents(web_contents_); + if (infobar_service) + infobar_service->RemoveInfoBar(infobar_delegate_); } AttachedClientHosts::GetInstance()->Remove(this); } @@ -433,20 +367,13 @@ void ExtensionDevToolsClientHost::DispatchOnInspectorFrontend( // static ExtensionDevToolsInfoBarDelegate* ExtensionDevToolsInfoBarDelegate::Create( - WebContents* web_contents, - const std::string& client_name) { - InfoBarService* infobar_service = - InfoBarService::FromWebContents(web_contents); - if (!infobar_service) - return NULL; + InfoBarService* infobar_service, + const std::string& client_name, + ExtensionDevToolsClientHost* client_host) { return static_cast<ExtensionDevToolsInfoBarDelegate*>( infobar_service->AddInfoBar(scoped_ptr<InfoBarDelegate>( - new ExtensionDevToolsInfoBarDelegate(infobar_service, client_name)))); -} - -void ExtensionDevToolsInfoBarDelegate::AttachClientHost( - ExtensionDevToolsClientHost* client_host) { - client_host_ = client_host; + new ExtensionDevToolsInfoBarDelegate(infobar_service, client_name, + client_host)))); } void ExtensionDevToolsInfoBarDelegate::DiscardClientHost() { @@ -455,10 +382,11 @@ void ExtensionDevToolsInfoBarDelegate::DiscardClientHost() { ExtensionDevToolsInfoBarDelegate::ExtensionDevToolsInfoBarDelegate( InfoBarService* infobar_service, - const std::string& client_name) + const std::string& client_name, + ExtensionDevToolsClientHost* client_host) : ConfirmInfoBarDelegate(infobar_service), client_name_(client_name), - client_host_(NULL) { + client_host_(client_host) { } ExtensionDevToolsInfoBarDelegate::~ExtensionDevToolsInfoBarDelegate() { @@ -499,57 +427,64 @@ DebuggerFunction::DebuggerFunction() } void DebuggerFunction::FormatErrorMessage(const std::string& format) { - if (debuggee_.tab_id) - error_ = ErrorUtils::FormatErrorMessage( - format, keys::kTabTargetType, base::IntToString(*debuggee_.tab_id)); - else if (debuggee_.extension_id) - error_ = ErrorUtils::FormatErrorMessage( - format, keys::kBackgroundPageTargetType, *debuggee_.extension_id); - else - error_ = ErrorUtils::FormatErrorMessage( - format, keys::kOpaqueTargetType, *debuggee_.target_id); + error_ = ErrorUtils::FormatErrorMessage( + format, + debuggee_.tab_id ? + keys::kTabTargetType : + keys::kExtensionTargetType, + debuggee_.tab_id ? + base::IntToString(*debuggee_.tab_id) : + *debuggee_.extension_id); } bool DebuggerFunction::InitWebContents() { + // Find the WebContents that contains this tab id. + contents_ = NULL; if (debuggee_.tab_id) { WebContents* web_contents = NULL; bool result = ExtensionTabUtil::GetTabById( *debuggee_.tab_id, profile(), include_incognito(), NULL, NULL, &web_contents, NULL); - if (result && web_contents) { - if (content::HasWebUIScheme(web_contents->GetURL())) { - error_ = ErrorUtils::FormatErrorMessage( - keys::kAttachToWebUIError, - web_contents->GetURL().scheme()); - return false; - } - contents_ = web_contents; + if (!result || !web_contents) { + FormatErrorMessage(keys::kNoTargetError); + return false; + } + contents_ = web_contents; + + if (content::HasWebUIScheme(contents_->GetURL())) { + error_ = ErrorUtils::FormatErrorMessage( + keys::kAttachToWebUIError, + contents_->GetURL().scheme()); + return false; } - } else if (debuggee_.extension_id) { - extensions::ExtensionHost* extension_host = + + return true; + } + + if (debuggee_.extension_id) { + if (!CommandLine::ForCurrentProcess()-> + HasSwitch(switches::kSilentDebuggerExtensionAPI)) { + error_ = ErrorUtils::FormatErrorMessage( + keys::kSilentDebuggingRequired, + switches::kSilentDebuggerExtensionAPI); + return false; + } + + extensions::ExtensionHost* host = extensions::ExtensionSystem::Get(profile())->process_manager()-> GetBackgroundHostForExtension(*debuggee_.extension_id); - if (extension_host) { - contents_ = WebContents::FromRenderViewHost( - extension_host->render_view_host()); - } - } else if (debuggee_.target_id) { - DevToolsAgentHost* agent_host = - DevToolsAgentHost::GetForId(*debuggee_.target_id); - if (agent_host) { - contents_ = WebContents::FromRenderViewHost( - agent_host->GetRenderViewHost()); + if (host) { + contents_ = WebContents::FromRenderViewHost(host->render_view_host()); + if (contents_) + return true; } - } else { - error_ = keys::kInvalidTargetError; - return false; - } - if (!contents_) { FormatErrorMessage(keys::kNoTargetError); return false; } - return true; + + error_ = keys::kInvalidTargetError; + return false; } bool DebuggerFunction::InitClientHost() { @@ -598,27 +533,10 @@ bool DebuggerAttachFunction::RunImpl() { return false; } - ExtensionDevToolsInfoBarDelegate* infobar_delegate = NULL; - - if (!CommandLine::ForCurrentProcess()-> - HasSwitch(switches::kSilentDebuggerExtensionAPI)) { - // Do not attach to the target if for any reason the infobar cannot be shown - // for this WebContents instance. - infobar_delegate = ExtensionDevToolsInfoBarDelegate::Create( - contents_, GetExtension()->name()); - if (!infobar_delegate) { - error_ = ErrorUtils::FormatErrorMessage( - keys::kSilentDebuggingRequired, - switches::kSilentDebuggerExtensionAPI); - return false; - } - } - new ExtensionDevToolsClientHost(contents_, GetExtension()->id(), GetExtension()->name(), - debuggee_, - infobar_delegate); + debuggee_); SendResponse(true); return true; } @@ -674,24 +592,3 @@ void DebuggerSendCommandFunction::SendResponseBody( results_ = SendCommand::Results::Create(result); SendResponse(true); } - -DebuggerGetTargetsFunction::DebuggerGetTargetsFunction() {} - -DebuggerGetTargetsFunction::~DebuggerGetTargetsFunction() {} - -bool DebuggerGetTargetsFunction::RunImpl() { - base::ListValue* results_list = new ListValue(); - - std::vector<RenderViewHost*> rvh_list = - DevToolsAgentHost::GetValidRenderViewHosts(); - for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin(); - it != rvh_list.end(); ++it) { - base::Value* value = SerializePageInfo(*it); - if (value) - results_list->Append(value); - } - - SetResult(results_list); - SendResponse(true); - return true; -} diff --git a/chrome/browser/extensions/api/debugger/debugger_api.h b/chrome/browser/extensions/api/debugger/debugger_api.h index d56bb15..086b4c4 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api.h +++ b/chrome/browser/extensions/api/debugger/debugger_api.h @@ -86,18 +86,4 @@ class DebuggerSendCommandFunction : public DebuggerFunction { virtual bool RunImpl() OVERRIDE; }; -// Implements the debugger.getTargets() extension function. -class DebuggerGetTargetsFunction : public DebuggerFunction { - public: - DECLARE_EXTENSION_FUNCTION("debugger.getTargets", DEBUGGER_ATTACH) - - DebuggerGetTargetsFunction(); - - protected: - virtual ~DebuggerGetTargetsFunction(); - - // ExtensionFunction: - virtual bool RunImpl() OVERRIDE; -}; - #endif // CHROME_BROWSER_EXTENSIONS_API_DEBUGGER_DEBUGGER_API_H_ diff --git a/chrome/browser/extensions/api/debugger/debugger_api_constants.cc b/chrome/browser/extensions/api/debugger/debugger_api_constants.cc index a9f5c6e..40ae779 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api_constants.cc +++ b/chrome/browser/extensions/api/debugger/debugger_api_constants.cc @@ -21,10 +21,9 @@ const char kNotAttachedError[] = const char kProtocolVersionNotSupportedError[] = "Requested protocol version is not supported: *."; const char kSilentDebuggingRequired[] = - "Cannot attach to this target unless '*' flag is enabled."; + "Cannot attach to an extension unless '*' flag is enabled."; const char kTabTargetType[] = "tab"; -const char kBackgroundPageTargetType[] = "background page"; -const char kOpaqueTargetType[] = "target"; +const char kExtensionTargetType[] = "extension"; } // namespace debugger_api_constants diff --git a/chrome/browser/extensions/api/debugger/debugger_api_constants.h b/chrome/browser/extensions/api/debugger/debugger_api_constants.h index 0c7eaa7..f3c400e 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api_constants.h +++ b/chrome/browser/extensions/api/debugger/debugger_api_constants.h @@ -24,8 +24,7 @@ extern const char kSilentDebuggingRequired[]; // Target types. extern const char kTabTargetType[]; -extern const char kBackgroundPageTargetType[]; -extern const char kOpaqueTargetType[]; +extern const char kExtensionTargetType[]; } // namespace debugger_api_constants diff --git a/chrome/common/extensions/api/debugger.json b/chrome/common/extensions/api/debugger.json index ad8c8ad..24c5d15 100644 --- a/chrome/common/extensions/api/debugger.json +++ b/chrome/common/extensions/api/debugger.json @@ -12,25 +12,7 @@ "description": "Debuggee identifier. Either tabId or extensionId must be specified", "properties": { "tabId": { "type": "integer", "optional": true, "description": "The id of the tab which you intend to debug." }, - "extensionId": { "type": "string", "optional": true, "description": "The id of the extension which you intend to debug. Attaching to an extension background page is only possible when 'enable-silent-debugging' flag is enabled on the target browser." }, - "targetId": { "type": "string", "optional": true, "description": "The opaque id of the debug target." } - } - }, - { - "id": "TargetInfo", - "type": "object", - "description": "Debug target information", - "properties": { - "type": { - "type": "string", - "description": "Target type.", - "enum" : ["page", "background_page", "other" ] - }, - "id": { "type": "string", "description": "Target id." }, - "attached": { "type": "boolean", "description": "True if debugger is already attached." }, - "title": { "type": "string", "description": "Target page title." }, - "url": { "type": "string", "description": "Target URL." }, - "faviconUrl": { "type": "string", "optional": true, "description": "Target favicon URL." } + "extensionId": { "type": "string", "optional": true, "description": "The id of the extension which you intend to debug. Attaching to an extension background page is only possible when 'enable-silent-debugging' flag is enabled on the target browser." } } } ], @@ -116,25 +98,6 @@ "description": "Response body. If an error occurs while posting the message, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message." } ] - }, - { - "name": "getTargets", - "type": "function", - "description": "Returns the list of available debug targets.", - "parameters": [ - { - "type": "function", - "name": "callback", - "parameters": [ - { - "type": "array", - "name": "result", - "items": {"$ref": "TargetInfo"}, - "description": "Array of TargetInfo objects corresponding to the available debug targets." - } - ] - } - ] } ], "events": [ diff --git a/chrome/test/data/extensions/api_test/debugger/background.js b/chrome/test/data/extensions/api_test/debugger/background.js index 3545d3d..d68ed6b 100644 --- a/chrome/test/data/extensions/api_test/debugger/background.js +++ b/chrome/test/data/extensions/api_test/debugger/background.js @@ -9,9 +9,6 @@ var tabId; var debuggee; var protocolVersion = "1.0"; -var SILENT_FLAG_REQUIRED = "Cannot attach to this target unless " + - "'silent-debugger-extension-api' flag is enabled."; - chrome.test.runTests([ function attachMalformedVersion() { @@ -109,41 +106,10 @@ chrome.test.runTests([ fail("No tab with given id " + missingDebuggee.tabId + ".")); }, - function attachToOwnBackgroundPageWithNoSilentFlag() { - var ownExtensionId = chrome.extension.getURL('').split('/')[2]; - debuggeeExtension = {extensionId: ownExtensionId}; + function attachToExtensionWithNoSilentFlag() { + debuggeeExtension = {extensionId: "foo"}; chrome.debugger.attach(debuggeeExtension, protocolVersion, - fail(SILENT_FLAG_REQUIRED)); - }, - - function createAndDiscoverTab() { - chrome.test.listenOnce(chrome.tabs.onUpdated, function () { - chrome.debugger.getTargets(function(targets) { - var page = targets.filter( - function(t) { - return t.type == 'page' && t.title == 'Test page'; - })[0]; - if (page) { - chrome.debugger.attach( - {targetId: page.id}, protocolVersion, pass()); - } else { - chrome.test.fail("Cannot discover a newly created tab"); - } - }); - }); - chrome.tabs.create({url: "inspected.html"}); - }, - - function discoverBackgroundPageWithNoSilentFlag() { - chrome.debugger.getTargets(function(targets) { - var target = targets.filter( - function(target) { return target.type == 'background_page'})[0]; - if (target) { - chrome.debugger.attach({targetId: target.id}, protocolVersion, - fail(SILENT_FLAG_REQUIRED)); - } else { - chrome.test.succeed(); - } - }); + fail("Cannot attach to an extension unless " + + "'silent-debugger-extension-api' flag is enabled.")); } ]); diff --git a/chrome/test/data/extensions/api_test/debugger/inspected.html b/chrome/test/data/extensions/api_test/debugger/inspected.html index 2eaf1a8..6c70bcf 100644 --- a/chrome/test/data/extensions/api_test/debugger/inspected.html +++ b/chrome/test/data/extensions/api_test/debugger/inspected.html @@ -1,5 +1 @@ -<html> -<head> - <title>Test page</title> -</head> -</html>
\ No newline at end of file +<html></html>
\ No newline at end of file diff --git a/chrome/test/data/extensions/api_test/debugger_extension/background.js b/chrome/test/data/extensions/api_test/debugger_extension/background.js index 5b2c1e8..63101a8 100644 --- a/chrome/test/data/extensions/api_test/debugger_extension/background.js +++ b/chrome/test/data/extensions/api_test/debugger_extension/background.js @@ -19,14 +19,14 @@ chrome.test.runTests([ function attachToMissing() { var missingDebuggee = {extensionId: "foo"}; chrome.debugger.attach(missingDebuggee, protocolVersion, - fail("No background page with given id " + + fail("No extension with given id " + missingDebuggee.extensionId + ".")); }, function attachAgain() { chrome.debugger.attach(debuggee, protocolVersion, - fail("Another debugger is already attached " + - "to the background page with id: " + debuggee.extensionId + ".")); + fail("Another debugger is already attached to the extension with id: " + + debuggee.extensionId + ".")); }, function detach() { @@ -35,22 +35,7 @@ chrome.test.runTests([ function detachAgain() { chrome.debugger.detach(debuggee, - fail("Debugger is not attached to the background page with id: " + + fail("Debugger is not attached to the extension with id: " + debuggee.extensionId + ".")); - }, - - function discoverOwnBackgroundPage() { - chrome.debugger.getTargets(function(targets) { - var target = targets.filter( - function(t) { - return t.type == 'background_page' && - t.title == 'Extension Debugger'; - })[0]; - if (target) { - chrome.debugger.attach({targetId: target.id}, protocolVersion, pass()); - } else { - chrome.test.fail("No extension found"); - } - }); } ]); |