Chromium Code Reviews| Index: chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| index 307f2bac8cd76690b49cb5aff6e11bc6d090130c..daef280cc579713b9269512f070e6d22f52278f8 100644 |
| --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| @@ -10,8 +10,15 @@ |
| #if !defined(OS_ANDROID) |
| #include "chrome/browser/devtools/devtools_window.h" |
| +#include "chrome/browser/extensions/extension_tab_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" |
| #include "content/public/browser/devtools_agent_host.h" |
| +#include "content/public/browser/render_frame_host.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "extensions/browser/extension_host.h" |
| +#include "extensions/browser/extension_registry.h" |
| +#include "extensions/browser/process_manager.h" |
| #endif // !defined(OS_ANDROID) |
| using devtools_discovery::DevToolsDiscoveryManager; |
| @@ -24,23 +31,21 @@ ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() { |
| } |
| void ChromeDevToolsManagerDelegate::Inspect( |
| - content::BrowserContext* browser_context, |
| content::DevToolsAgentHost* agent_host) { |
| #if !defined(OS_ANDROID) |
| - Profile* profile = Profile::FromBrowserContext(browser_context); |
| + Profile* profile = |
| + Profile::FromBrowserContext(agent_host->GetBrowserContext()); |
| if (!profile) |
| return; |
| - content::DevToolsAgentHost::Type type = agent_host->GetType(); |
| - if (type == content::DevToolsAgentHost::TYPE_SHARED_WORKER || |
| - type == content::DevToolsAgentHost::TYPE_SERVICE_WORKER) { |
| + std::string type = agent_host->GetType(); |
| + if (type == content::DevToolsAgentHost::kTypeSharedWorker || |
| + type == content::DevToolsAgentHost::kTypeServiceWorker) { |
| DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host); |
| return; |
| } |
| - if (type == content::DevToolsAgentHost::TYPE_WEB_CONTENTS) { |
| - content::WebContents* web_contents = agent_host->GetWebContents(); |
| - DCHECK(web_contents); |
| + content::WebContents* web_contents = agent_host->GetWebContents(); |
| + if (web_contents) |
| DevToolsWindow::OpenDevToolsWindow(web_contents); |
| - } |
| #endif // !defined(OS_ANDROID) |
| } |
| @@ -55,6 +60,45 @@ base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand( |
| return network_protocol_handler_->HandleCommand(agent_host, command_dict); |
| } |
| +std::string ChromeDevToolsManagerDelegate::GetTargetType( |
| + content::RenderFrameHost* host) { |
| +#if !defined(OS_ANDROID) |
| + content::WebContents* web_contents = |
| + content::WebContents::FromRenderFrameHost(host); |
| + for (TabContentsIterator it; !it.done(); it.Next()) { |
| + if (*it == web_contents) |
| + return content::DevToolsAgentHost::kTypePage; |
| + } |
| + |
| + if (host->GetParent()) |
| + return content::DevToolsAgentHost::kTypeFrame; |
| + |
| + const extensions::Extension* extension = extensions::ExtensionRegistry::Get( |
| + web_contents->GetBrowserContext())->enabled_extensions().GetByID( |
| + host->GetLastCommittedURL().host()); |
| + if (!extension) |
| + return content::DevToolsAgentHost::kTypeOther; |
| + |
| + Profile* profile = |
| + Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| + if (!profile) |
| + return content::DevToolsAgentHost::kTypeOther; |
| + |
| + extensions::ExtensionHost* extension_host = |
| + extensions::ProcessManager::Get(profile) |
| + ->GetBackgroundHostForExtension(extension->id()); |
| + if (extension_host && |
| + extension_host->host_contents() == web_contents) { |
| + return "background_page"; |
|
dgozman
2016/08/22 23:09:07
Let's expose these in the header.
|
| + } else if (extension->is_hosted_app() |
| + || extension->is_legacy_packaged_app() |
| + || extension->is_platform_app()) { |
| + return "app"; |
| + } |
| +#endif // !defined(OS_ANDROID) |
| + return content::DevToolsAgentHost::kTypeOther; |
|
dgozman
2016/08/22 23:09:07
Always other for android.
|
| +} |
| + |
| void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged( |
| content::DevToolsAgentHost* agent_host, |
| bool attached) { |