0

DevTools: remove devtools_discovery (merged into content).

BUG=627517
R=dgozman@chromium.org
TBR=for android / headless / webview clients

Review URL: https://codereview.chromium.org/2272213003 .

Cr-Commit-Position: refs/heads/master@{#415041}
This commit is contained in:
Pavel Feldman
2016-08-29 17:04:35 -07:00
parent 71b649adfb
commit 43f56b7c7e
43 changed files with 262 additions and 459 deletions

@ -582,7 +582,6 @@ source_set("common") {
"//components/cdm/renderer",
"//components/crash/content/app",
"//components/crash/content/browser",
"//components/devtools_discovery",
"//components/metrics",
"//components/metrics:gpu",
"//components/metrics:net",

@ -7,7 +7,6 @@ include_rules = [
# lib is the top-level target, and must remain a leaf in the dependency tree.
"-android_webview/lib",
"+components/devtools_discovery",
"+components/metrics",
"+components/prefs",
"+components/version_info",

@ -232,7 +232,6 @@
'../components/components.gyp:cdm_renderer',
'../components/components.gyp:component_metrics_proto',
'../components/components.gyp:crash_component',
'../components/components.gyp:devtools_discovery',
'../components/components.gyp:metrics',
'../components/components.gyp:metrics_gpu',
'../components/components.gyp:metrics_net',

@ -10,7 +10,6 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/web_contents.h"
@ -39,26 +38,7 @@ std::string GetViewDescription(WebContents* web_contents) {
return json;
}
} // namespace
namespace android_webview {
// static
void AwDevToolsDiscoveryProvider::Install() {
devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
devtools_discovery::DevToolsDiscoveryManager::GetInstance();
discovery_manager->AddProvider(
base::WrapUnique(new AwDevToolsDiscoveryProvider()));
}
AwDevToolsDiscoveryProvider::AwDevToolsDiscoveryProvider() {
}
AwDevToolsDiscoveryProvider::~AwDevToolsDiscoveryProvider() {
}
content::DevToolsAgentHost::List
AwDevToolsDiscoveryProvider::GetDescriptors() {
content::DevToolsAgentHost::List GetDescriptors() {
DevToolsAgentHost::List agent_hosts = DevToolsAgentHost::GetOrCreateAll();
for (auto& agent_host : agent_hosts) {
agent_host->SetDescriptionOverride(
@ -67,4 +47,19 @@ AwDevToolsDiscoveryProvider::GetDescriptors() {
return agent_hosts;
}
} // namespace
namespace android_webview {
// static
void AwDevToolsDiscoveryProvider::Install() {
content::DevToolsAgentHost::AddDiscoveryProvider(base::Bind(&GetDescriptors));
}
AwDevToolsDiscoveryProvider::AwDevToolsDiscoveryProvider() {
}
AwDevToolsDiscoveryProvider::~AwDevToolsDiscoveryProvider() {
}
} // namespace android_webview

@ -6,24 +6,17 @@
#define ANDROID_WEBVIEW_BROWSER_AW_DEV_TOOLS_DISCOVERY_PROVIDER_H_
#include "base/macros.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
namespace android_webview {
class AwDevToolsDiscoveryProvider :
public devtools_discovery::DevToolsDiscoveryManager::Provider {
class AwDevToolsDiscoveryProvider {
public:
// Installs provider to devtools_discovery.
static void Install();
~AwDevToolsDiscoveryProvider() override;
// devtools_discovery::DevToolsDiscoveryManager::Provider implementation.
content::DevToolsAgentHost::List GetDescriptors() override;
private:
AwDevToolsDiscoveryProvider();
~AwDevToolsDiscoveryProvider();
DISALLOW_COPY_AND_ASSIGN(AwDevToolsDiscoveryProvider);
};

@ -124,7 +124,6 @@ split_static_library("browser") {
"//components/data_use_measurement/content",
"//components/data_use_measurement/core",
"//components/device_event_log",
"//components/devtools_discovery",
"//components/devtools_http_handler",
"//components/dom_distiller/content/browser",
"//components/domain_reliability",

@ -2,7 +2,6 @@ include_rules = [
"+blimp/client/public",
"-components/devtools_bridge",
"+cc/layers/layer.h",
"+components/devtools_discovery",
"+components/devtools_http_handler",
"+components/ntp_snippets",
"+components/spellcheck/browser",

@ -1,28 +0,0 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_DEV_TOOLS_DISCOVERY_PROVIDER_ANDROID_H_
#define CHROME_BROWSER_ANDROID_DEV_TOOLS_DISCOVERY_PROVIDER_ANDROID_H_
#include "base/macros.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
class DevToolsDiscoveryProviderAndroid :
public devtools_discovery::DevToolsDiscoveryManager::Provider {
public:
// Installs provider to devtools_discovery.
static void Install();
~DevToolsDiscoveryProviderAndroid() override;
// devtools_discovery::DevToolsDiscoveryManager::Provider implementation.
content::DevToolsAgentHost::List GetDescriptors() override;
private:
DevToolsDiscoveryProviderAndroid();
DISALLOW_COPY_AND_ASSIGN(DevToolsDiscoveryProviderAndroid);
};
#endif // CHROME_BROWSER_ANDROID_DEV_TOOLS_DISCOVERY_PROVIDER_ANDROID_H_

@ -2,25 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/android/dev_tools_discovery_provider_android.h"
#include "chrome/browser/android/devtools_manager_delegate_android.h"
#include "base/bind.h"
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/devtools/devtools_network_protocol_handler.h"
#include "chrome/browser/ui/android/tab_model/tab_model.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "chrome/common/features.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/devtools_agent_host_client.h"
#include "content/public/browser/devtools_external_agent_proxy.h"
#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
using content::DevToolsAgentHost;
@ -157,41 +153,13 @@ class TabProxyDelegate : public content::DevToolsExternalAgentProxyDelegate,
const int tab_id_;
const std::string title_;
const GURL url_;
scoped_refptr<content::DevToolsAgentHost> agent_host_;
scoped_refptr<DevToolsAgentHost> agent_host_;
content::DevToolsExternalAgentProxy* proxy_;
DISALLOW_COPY_AND_ASSIGN(TabProxyDelegate);
};
scoped_refptr<content::DevToolsAgentHost> CreateNewAndroidTab(const GURL& url) {
if (TabModelList::empty())
return nullptr;
TabModel* tab_model = TabModelList::get(0);
if (!tab_model)
return nullptr;
WebContents* web_contents = tab_model->CreateNewTabForDevTools(url);
if (!web_contents)
return nullptr;
TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
if (!tab)
return nullptr;
return content::DevToolsAgentHost::Create(new TabProxyDelegate(tab));
}
} // namespace
DevToolsDiscoveryProviderAndroid::DevToolsDiscoveryProviderAndroid() {
}
DevToolsDiscoveryProviderAndroid::~DevToolsDiscoveryProviderAndroid() {
}
content::DevToolsAgentHost::List
DevToolsDiscoveryProviderAndroid::GetDescriptors() {
content::DevToolsAgentHost::List result;
DevToolsAgentHost::List GetDescriptors() {
DevToolsAgentHost::List result;
// Enumerate existing tabs, including the ones with no WebContents.
std::set<WebContents*> tab_web_contents;
@ -203,7 +171,7 @@ DevToolsDiscoveryProviderAndroid::GetDescriptors() {
if (!tab)
continue;
scoped_refptr<content::DevToolsAgentHost> host =
scoped_refptr<DevToolsAgentHost> host =
DevToolsAgentHost::Create(new TabProxyDelegate(tab));
}
}
@ -222,11 +190,67 @@ DevToolsDiscoveryProviderAndroid::GetDescriptors() {
return result;
}
// static
void DevToolsDiscoveryProviderAndroid::Install() {
devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
devtools_discovery::DevToolsDiscoveryManager::GetInstance();
discovery_manager->AddProvider(
base::WrapUnique(new DevToolsDiscoveryProviderAndroid()));
discovery_manager->SetCreateCallback(base::Bind(&CreateNewAndroidTab));
} // namespace
DevToolsManagerDelegateAndroid::DevToolsManagerDelegateAndroid()
: network_protocol_handler_(new DevToolsNetworkProtocolHandler()) {
#if BUILDFLAG(ANDROID_JAVA_UI)
DevToolsAgentHost::AddDiscoveryProvider(base::Bind(&GetDescriptors));
#endif // BUILDFLAG(ANDROID_JAVA_UI)
}
DevToolsManagerDelegateAndroid::~DevToolsManagerDelegateAndroid() {
}
void DevToolsManagerDelegateAndroid::Inspect(
DevToolsAgentHost* agent_host) {
}
base::DictionaryValue* DevToolsManagerDelegateAndroid::HandleCommand(
DevToolsAgentHost* agent_host,
base::DictionaryValue* command_dict) {
return network_protocol_handler_->HandleCommand(agent_host, command_dict);
}
std::string DevToolsManagerDelegateAndroid::GetTargetType(
content::RenderFrameHost* host) {
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(host);
TabAndroid* tab = web_contents ? TabAndroid::FromWebContents(web_contents)
: nullptr;
return tab ? DevToolsAgentHost::kTypePage :
DevToolsAgentHost::kTypeOther;
}
std::string DevToolsManagerDelegateAndroid::GetTargetTitle(
content::RenderFrameHost* host) {
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(host);
TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
return tab ? base::UTF16ToUTF8(tab->GetTitle()) : "";
}
scoped_refptr<DevToolsAgentHost>
DevToolsManagerDelegateAndroid::CreateNewTarget(const GURL& url) {
if (TabModelList::empty())
return nullptr;
TabModel* tab_model = TabModelList::get(0);
if (!tab_model)
return nullptr;
WebContents* web_contents = tab_model->CreateNewTabForDevTools(url);
if (!web_contents)
return nullptr;
TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
if (!tab)
return nullptr;
return DevToolsAgentHost::Create(new TabProxyDelegate(tab));
}
void DevToolsManagerDelegateAndroid::DevToolsAgentStateChanged(
DevToolsAgentHost* agent_host, bool attached) {
network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached);
}

@ -0,0 +1,39 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_DEVTOOLS_MANAGER_DELEGATE_ANDROID_H_
#define CHROME_BROWSER_ANDROID_DEVTOOLS_MANAGER_DELEGATE_ANDROID_H_
#include <memory>
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "content/public/browser/devtools_manager_delegate.h"
class DevToolsNetworkProtocolHandler;
class DevToolsManagerDelegateAndroid : public content::DevToolsManagerDelegate {
public:
DevToolsManagerDelegateAndroid();
~DevToolsManagerDelegateAndroid() override;
// content::DevToolsManagerDelegate implementation.
void Inspect(content::DevToolsAgentHost* agent_host) override;
void DevToolsAgentStateChanged(content::DevToolsAgentHost* agent_host,
bool attached) override;
base::DictionaryValue* HandleCommand(
content::DevToolsAgentHost* agent_host,
base::DictionaryValue* command_dict) override;
std::string GetTargetType(content::RenderFrameHost* host) override;
std::string GetTargetTitle(content::RenderFrameHost* host) override;
scoped_refptr<content::DevToolsAgentHost> CreateNewTarget(
const GURL& url) override;
private:
std::unique_ptr<DevToolsNetworkProtocolHandler> network_protocol_handler_;
DISALLOW_COPY_AND_ASSIGN(DevToolsManagerDelegateAndroid);
};
#endif // CHROME_BROWSER_ANDROID_DEVTOOLS_MANAGER_DELEGATE_ANDROID_H_

@ -175,12 +175,6 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/strings/grit/app_locale_settings.h"
#if BUILDFLAG(ANDROID_JAVA_UI)
#include "chrome/browser/android/dev_tools_discovery_provider_android.h"
#else
#include "chrome/browser/devtools/chrome_devtools_discovery_provider.h"
#endif
#if defined(OS_ANDROID)
#include "chrome/browser/metrics/thread_watcher_android.h"
#include "ui/base/resource/resource_bundle_android.h"
@ -1429,13 +1423,6 @@ void ChromeBrowserMainParts::PreProfileInit() {
void ChromeBrowserMainParts::PostProfileInit() {
TRACE_EVENT0("startup", "ChromeBrowserMainParts::PostProfileInit");
#if BUILDFLAG(ANDROID_JAVA_UI)
DevToolsDiscoveryProviderAndroid::Install();
#else
ChromeDevToolsDiscoveryProvider::Install();
#endif // BUILDFLAG(ANDROID_JAVA_UI)
LaunchDevToolsHandlerIfNeeded(parsed_command_line());
if (parsed_command_line().HasSwitch(::switches::kAutoOpenDevToolsForTabs))
g_browser_process->CreateDevToolsAutoOpener();

@ -46,7 +46,6 @@
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/engagement/site_engagement_eviction_policy.h"
#include "chrome/browser/font_family_cache.h"
@ -238,8 +237,11 @@
#endif
#if defined(OS_ANDROID)
#include "chrome/browser/android/devtools_manager_delegate_android.h"
#include "ui/base/ui_base_paths.h"
#include "ui/gfx/android/device_display_info.h"
#else
#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
#endif
#if defined(TOOLKIT_VIEWS)
@ -3088,7 +3090,11 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
content::DevToolsManagerDelegate*
ChromeContentBrowserClient::GetDevToolsManagerDelegate() {
#if defined(OS_ANDROID)
return new DevToolsManagerDelegateAndroid();
#else
return new ChromeDevToolsManagerDelegate();
#endif
}
content::TracingDelegate* ChromeContentBrowserClient::GetTracingDelegate() {

@ -30,8 +30,6 @@ action("devtools_protocol_constants") {
static_library("devtools") {
# Note: new sources and deps should be generally added in (!is_android) below.
sources = [
"chrome_devtools_manager_delegate.cc",
"chrome_devtools_manager_delegate.h",
"devtools_network_conditions.cc",
"devtools_network_conditions.h",
"devtools_network_controller.cc",
@ -82,8 +80,8 @@ static_library("devtools") {
"//third_party/leveldatabase",
]
sources += [
"chrome_devtools_discovery_provider.cc",
"chrome_devtools_discovery_provider.h",
"chrome_devtools_manager_delegate.cc",
"chrome_devtools_manager_delegate.h",
"device/adb/adb_client_socket.cc",
"device/adb/adb_client_socket.h",
"device/adb/adb_device_provider.cc",

@ -1,4 +1,3 @@
include_rules = [
"+components/devtools_discovery",
"+components/devtools_http_handler",
]

@ -1,49 +0,0 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/devtools/chrome_devtools_discovery_provider.h"
#include "base/memory/ptr_util.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_navigator_params.h"
#include "content/public/browser/devtools_agent_host.h"
namespace {
scoped_refptr<content::DevToolsAgentHost>
CreateNewChromeTab(const GURL& url) {
chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
params.disposition = NEW_FOREGROUND_TAB;
chrome::Navigate(&params);
if (!params.target_contents)
return nullptr;
if (!params.target_contents)
return nullptr;
return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents);
}
} // namespace
ChromeDevToolsDiscoveryProvider::ChromeDevToolsDiscoveryProvider() {
}
ChromeDevToolsDiscoveryProvider::~ChromeDevToolsDiscoveryProvider() {
}
content::DevToolsAgentHost::List
ChromeDevToolsDiscoveryProvider::GetDescriptors() {
return content::DevToolsAgentHost::GetOrCreateAll();
}
// static
void ChromeDevToolsDiscoveryProvider::Install() {
devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
devtools_discovery::DevToolsDiscoveryManager::GetInstance();
discovery_manager->AddProvider(
base::WrapUnique(new ChromeDevToolsDiscoveryProvider()));
discovery_manager->SetCreateCallback(base::Bind(&CreateNewChromeTab));
}

@ -1,28 +0,0 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_
#define CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_
#include "base/macros.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
class ChromeDevToolsDiscoveryProvider :
public devtools_discovery::DevToolsDiscoveryManager::Provider {
public:
// Installs provider to devtools_discovery.
static void Install();
~ChromeDevToolsDiscoveryProvider() override;
// devtools_discovery::DevToolsDiscoveryManager::Provider implementation.
content::DevToolsAgentHost::List GetDescriptors() override;
private:
ChromeDevToolsDiscoveryProvider();
DISALLOW_COPY_AND_ASSIGN(ChromeDevToolsDiscoveryProvider);
};
#endif // CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_

@ -7,32 +7,28 @@
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/devtools/devtools_network_protocol_handler.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/web_contents.h"
#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/profiles/profile_manager.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_navigator_params.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"
#else // !defined(OS_ANDROID)
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/ui/android/tab_model/tab_model.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
#endif // !defined(OS_ANDROID)
using devtools_discovery::DevToolsDiscoveryManager;
char ChromeDevToolsManagerDelegate::kTypeApp[] = "app";
char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page";
ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate()
: network_protocol_handler_(new DevToolsNetworkProtocolHandler()) {
content::DevToolsAgentHost::AddDiscoveryProvider(
base::Bind(&content::DevToolsAgentHost::GetOrCreateAll));
}
ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() {
@ -40,7 +36,6 @@ ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() {
void ChromeDevToolsManagerDelegate::Inspect(
content::DevToolsAgentHost* agent_host) {
#if !defined(OS_ANDROID)
Profile* profile =
Profile::FromBrowserContext(agent_host->GetBrowserContext());
if (!profile)
@ -54,17 +49,11 @@ void ChromeDevToolsManagerDelegate::Inspect(
content::WebContents* web_contents = agent_host->GetWebContents();
if (web_contents)
DevToolsWindow::OpenDevToolsWindow(web_contents);
#endif // !defined(OS_ANDROID)
}
base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand(
content::DevToolsAgentHost* agent_host,
base::DictionaryValue* command_dict) {
std::unique_ptr<base::DictionaryValue> result =
DevToolsDiscoveryManager::GetInstance()->HandleCreateTargetCommand(
command_dict);
if (result)
return result.release(); // Caller takes ownership.
return network_protocol_handler_->HandleCommand(agent_host, command_dict);
}
@ -72,7 +61,6 @@ std::string ChromeDevToolsManagerDelegate::GetTargetType(
content::RenderFrameHost* host) {
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(host);
#if !defined(OS_ANDROID)
for (TabContentsIterator it; !it.done(); it.Next()) {
if (*it == web_contents)
return content::DevToolsAgentHost::kTypePage;
@ -103,23 +91,11 @@ std::string ChromeDevToolsManagerDelegate::GetTargetType(
|| extension->is_platform_app()) {
return kTypeApp;
}
#else // !defined(OS_ANDROID)
for (TabModelList::const_iterator iter = TabModelList::begin();
iter != TabModelList::end(); ++iter) {
TabModel* model = *iter;
for (int i = 0; i < model->GetTabCount(); ++i) {
TabAndroid* tab = model->GetTabAt(i);
if (tab && web_contents == tab->web_contents())
return content::DevToolsAgentHost::kTypePage;
}
}
#endif // !defined(OS_ANDROID)
return content::DevToolsAgentHost::kTypeOther;
}
std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
content::RenderFrameHost* host) {
#if !defined(OS_ANDROID)
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(host);
if (host->GetParent())
@ -133,10 +109,20 @@ std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
host->GetLastCommittedURL().host());
if (extension)
return extension->name();
#endif // !defined(OS_ANDROID)
return "";
}
scoped_refptr<content::DevToolsAgentHost>
ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
params.disposition = NEW_FOREGROUND_TAB;
chrome::Navigate(&params);
if (!params.target_contents)
return nullptr;
return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents);
}
void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged(
content::DevToolsAgentHost* agent_host,
bool attached) {

@ -30,6 +30,8 @@ class ChromeDevToolsManagerDelegate : public content::DevToolsManagerDelegate {
base::DictionaryValue* command_dict) override;
std::string GetTargetType(content::RenderFrameHost* host) override;
std::string GetTargetTitle(content::RenderFrameHost* host) override;
scoped_refptr<content::DevToolsAgentHost> CreateNewTarget(
const GURL& url) override;
private:
std::unique_ptr<DevToolsNetworkProtocolHandler> network_protocol_handler_;

@ -828,8 +828,8 @@
'browser/android/data_usage/external_data_use_reporter.h',
'browser/android/data_usage/tab_data_use_entry.cc',
'browser/android/data_usage/tab_data_use_entry.h',
'browser/android/dev_tools_discovery_provider_android.cc',
'browser/android/dev_tools_discovery_provider_android.h',
'browser/android/devtools_manager_delegate_android.cc',
'browser/android/devtools_manager_delegate_android.h',
'browser/android/dev_tools_server.cc',
'browser/android/dev_tools_server.h',
'browser/android/document/document_web_contents_delegate.cc',
@ -3429,7 +3429,6 @@
'../components/components.gyp:cookie_config',
'../components/components.gyp:data_reduction_proxy_content_browser',
'../components/components.gyp:data_use_measurement_content',
'../components/components.gyp:devtools_discovery',
'../components/components.gyp:devtools_http_handler',
'../components/components.gyp:dom_distiller_content_browser',
'../components/components.gyp:domain_reliability',

@ -61,8 +61,6 @@
'common/extensions/api/api.gyp:chrome_api',
],
'sources': [
'browser/devtools/chrome_devtools_discovery_provider.cc',
'browser/devtools/chrome_devtools_discovery_provider.h',
'browser/devtools/device/adb/adb_client_socket.cc',
'browser/devtools/device/adb/adb_client_socket.h',
'browser/devtools/device/adb/adb_device_provider.cc',

@ -52,8 +52,6 @@ per-file data_use_measurement.gypi=file://components/data_use_measurement/OWNERS
per-file device_event_log.gypi=file://components/device_event_log/OWNERS
per-file devtools_discovery.gypi=file://components/devtools_discovery/OWNERS
per-file devtools_http_handler.gypi=file://components/devtools_http_handler/OWNERS
per-file display_compositor.gypi=file://components/display_compositor/OWNERS

@ -1,17 +0,0 @@
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
static_library("devtools_discovery") {
sources = [
"devtools_discovery_manager.cc",
"devtools_discovery_manager.h",
]
deps = [
"//base",
"//content/public/browser",
"//content/public/common",
"//url",
]
}

@ -1,5 +0,0 @@
include_rules = [
"+content/public/browser",
"+content/public/common",
"+content/public/test",
]

@ -1,2 +0,0 @@
dgozman@chromium.org
pfeldman@chromium.org

@ -1,84 +0,0 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "base/stl_util.h"
using content::DevToolsAgentHost;
namespace devtools_discovery {
// static
DevToolsDiscoveryManager* DevToolsDiscoveryManager::GetInstance() {
return base::Singleton<DevToolsDiscoveryManager>::get();
}
DevToolsDiscoveryManager::DevToolsDiscoveryManager() {
}
DevToolsDiscoveryManager::~DevToolsDiscoveryManager() {
base::STLDeleteElements(&providers_);
}
void DevToolsDiscoveryManager::AddProvider(std::unique_ptr<Provider> provider) {
providers_.push_back(provider.release());
}
content::DevToolsAgentHost::List DevToolsDiscoveryManager::GetDescriptors() {
if (providers_.size())
return GetDescriptorsFromProviders();
return DevToolsAgentHost::GetOrCreateAll();
}
void DevToolsDiscoveryManager::SetCreateCallback(
const CreateCallback& callback) {
create_callback_ = callback;
}
scoped_refptr<content::DevToolsAgentHost> DevToolsDiscoveryManager::CreateNew(
const GURL& url) {
if (create_callback_.is_null())
return nullptr;
return create_callback_.Run(url);
}
content::DevToolsAgentHost::List
DevToolsDiscoveryManager::GetDescriptorsFromProviders() {
content::DevToolsAgentHost::List result;
for (auto* provider : providers_) {
content::DevToolsAgentHost::List partial = provider->GetDescriptors();
result.insert(result.begin(), partial.begin(), partial.end());
}
return result;
}
std::unique_ptr<base::DictionaryValue>
DevToolsDiscoveryManager::HandleCreateTargetCommand(
base::DictionaryValue* command_dict) {
int id;
std::string method;
std::string url;
const base::DictionaryValue* params_dict = nullptr;
if (command_dict->GetInteger("id", &id) &&
command_dict->GetString("method", &method) &&
method == "Browser.createTarget" &&
command_dict->GetDictionary("params", &params_dict) &&
params_dict->GetString("url", &url)) {
scoped_refptr<content::DevToolsAgentHost> host = CreateNew(GURL(url));
if (!host)
return nullptr;
std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
result->SetInteger("id", id);
std::unique_ptr<base::DictionaryValue> cmd_result(
new base::DictionaryValue());
cmd_result->SetString("targetId", host->GetId());
result->Set("result", std::move(cmd_result));
return result;
}
return nullptr;
}
} // namespace devtools_discovery

@ -1,59 +0,0 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DEVTOOLS_DISCOVERY_DEVTOOLS_DISCOVERY_MANAGER_H_
#define COMPONENTS_DEVTOOLS_DISCOVERY_DEVTOOLS_DISCOVERY_MANAGER_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "base/memory/singleton.h"
#include "base/values.h"
#include "content/public/browser/devtools_agent_host.h"
namespace devtools_discovery {
class DevToolsDiscoveryManager {
public:
class Provider {
public:
virtual ~Provider() {}
virtual content::DevToolsAgentHost::List GetDescriptors() = 0;
};
using CreateCallback = base::Callback<
scoped_refptr<content::DevToolsAgentHost>(const GURL& url)>;
// Returns single instance of this class. The instance is destroyed on the
// browser main loop exit so this method MUST NOT be called after that point.
static DevToolsDiscoveryManager* GetInstance();
void AddProvider(std::unique_ptr<Provider> provider);
void SetCreateCallback(const CreateCallback& callback);
// Caller takes ownership of created descriptors.
content::DevToolsAgentHost::List GetDescriptors();
scoped_refptr<content::DevToolsAgentHost> CreateNew(const GURL& url);
// Handles Browser.createTarget only.
std::unique_ptr<base::DictionaryValue> HandleCreateTargetCommand(
base::DictionaryValue* command_dict);
private:
friend struct base::DefaultSingletonTraits<DevToolsDiscoveryManager>;
DevToolsDiscoveryManager();
~DevToolsDiscoveryManager();
content::DevToolsAgentHost::List GetDescriptorsFromProviders();
std::vector<Provider*> providers_;
CreateCallback create_callback_;
DISALLOW_COPY_AND_ASSIGN(DevToolsDiscoveryManager);
};
} // namespace devtools_discovery
#endif // COMPONENTS_DEVTOOLS_DISCOVERY_DEVTOOLS_DISCOVERY_MANAGER_H_

@ -11,7 +11,6 @@ static_library("devtools_http_handler") {
deps = [
"//base",
"//components/devtools_discovery",
"//content/public/browser",
"//content/public/common",
"//net",

@ -1,5 +1,4 @@
include_rules = [
"+components/devtools_discovery",
"+content/public/browser",
"+content/public/common",
"+content/public/test",

@ -22,11 +22,11 @@
#include "base/threading/thread.h"
#include "base/values.h"
#include "build/build_config.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "components/devtools_http_handler/devtools_http_handler.h"
#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
#include "content/public/browser/devtools_manager_delegate.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/user_agent.h"
#include "net/base/escape.h"
@ -575,8 +575,7 @@ void DevToolsHttpHandler::OnJsonRequest(
if (command == "list") {
std::string host = info.headers["host"];
DevToolsAgentHost::List agent_hosts =
devtools_discovery::DevToolsDiscoveryManager::GetInstance()->
GetDescriptors();
content::DevToolsAgentHost::DiscoverAllHosts();
std::sort(agent_hosts.begin(), agent_hosts.end(), TimeComparator);
agent_host_map_.clear();
base::ListValue list_value;
@ -594,9 +593,11 @@ void DevToolsHttpHandler::OnJsonRequest(
net::UnescapeRule::PATH_SEPARATORS));
if (!url.is_valid())
url = GURL(url::kAboutBlankURL);
scoped_refptr<DevToolsAgentHost> agent_host =
devtools_discovery::DevToolsDiscoveryManager::GetInstance()->CreateNew(
url);
scoped_refptr<DevToolsAgentHost> agent_host = nullptr;
content::DevToolsManagerDelegate* delegate =
DevToolsAgentHost::GetDevToolsManagerDelegate();
if (delegate)
agent_host = delegate->CreateNewTarget(url);
if (!agent_host) {
SendJson(connection_id,
net::HTTP_INTERNAL_SERVER_ERROR,

@ -25,10 +25,14 @@ namespace {
typedef std::map<std::string, DevToolsAgentHostImpl*> Instances;
base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER;
typedef std::vector<const DevToolsAgentHost::AgentStateCallback*>
AgentStateCallbacks;
using AgentStateCallbacks =
std::vector<const DevToolsAgentHost::AgentStateCallback*>;
base::LazyInstance<AgentStateCallbacks>::Leaky g_callbacks =
LAZY_INSTANCE_INITIALIZER;
using DiscoveryCallbacks =
std::vector<DevToolsAgentHost::DiscoveryCallback>;
base::LazyInstance<DiscoveryCallbacks>::Leaky g_providers =
LAZY_INSTANCE_INITIALIZER;
} // namespace
char DevToolsAgentHost::kTypePage[] = "page";
@ -39,6 +43,12 @@ char DevToolsAgentHost::kTypeExternal[] = "external";
char DevToolsAgentHost::kTypeBrowser[] = "browser";
char DevToolsAgentHost::kTypeOther[] = "other";
// static
DevToolsManagerDelegate* DevToolsAgentHost::GetDevToolsManagerDelegate() {
DevToolsManager* manager = DevToolsManager::GetInstance();
return manager->delegate();
}
// static
std::string DevToolsAgentHost::GetProtocolVersion() {
return std::string(devtools::kProtocolVersion);
@ -49,6 +59,12 @@ bool DevToolsAgentHost::IsSupportedProtocolVersion(const std::string& version) {
return devtools::IsSupportedProtocolVersion(version);
}
// static
void DevToolsAgentHost::AddDiscoveryProvider(
const DiscoveryCallback& callback) {
g_providers.Get().push_back(callback);
}
// static
DevToolsAgentHost::List DevToolsAgentHost::GetOrCreateAll() {
List result;
@ -66,6 +82,20 @@ DevToolsAgentHost::List DevToolsAgentHost::GetOrCreateAll() {
return result;
}
// static
DevToolsAgentHost::List DevToolsAgentHost::DiscoverAllHosts() {
content::DevToolsAgentHost::List result;
// Force create all the delegates.
DevToolsManager::GetInstance();
if (!g_providers.Get().size())
return DevToolsAgentHost::GetOrCreateAll();
for (auto& provider : g_providers.Get()) {
content::DevToolsAgentHost::List partial = provider.Run();
result.insert(result.begin(), partial.begin(), partial.end());
}
return result;
}
// Called on the UI thread.
// static
scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForWorker(

@ -4,6 +4,9 @@
#include "content/browser/devtools/protocol/browser_handler.h"
#include "content/browser/devtools/devtools_manager.h"
#include "content/public/browser/devtools_manager_delegate.h"
namespace content {
namespace devtools {
namespace browser {
@ -38,9 +41,16 @@ Response BrowserHandler::CreateTarget(const std::string& url,
const int* height,
const std::string* context_id,
std::string* out_target_id) {
// For layering reasons this needs to be handled by
// DevToolsManagerDelegate::HandleCommand.
return Response::ServerError("Not supported");
DevToolsManagerDelegate* delegate =
DevToolsManager::GetInstance()->delegate();
if (!delegate)
return Response::ServerError("Not supported");
scoped_refptr<content::DevToolsAgentHost> agent_host =
delegate->CreateNewTarget(GURL(url));
if (!agent_host)
return Response::ServerError("Not supported");
*out_target_id = agent_host->GetId();
return Response::OK();
}
Response BrowserHandler::CloseTarget(const std::string& target_id,

@ -39,7 +39,6 @@
'../cc/blink/cc_blink.gyp:cc_blink',
'../cc/cc.gyp:cc',
'../components/components.gyp:crash_component_breakpad_to_be_deleted',
'../components/components.gyp:devtools_discovery',
'../components/components.gyp:devtools_http_handler',
'../components/components.gyp:web_cache_renderer',
'../components/components.gyp:plugins_renderer',

@ -28,6 +28,7 @@ namespace content {
class BrowserContext;
class DevToolsExternalAgentProxyDelegate;
class DevToolsManagerDelegate;
class RenderFrameHost;
class WebContents;
@ -43,6 +44,10 @@ class CONTENT_EXPORT DevToolsAgentHost
static char kTypeBrowser[];
static char kTypeOther[];
// This is temporary while we are merging http handler and discovery
// into content/.
static DevToolsManagerDelegate* GetDevToolsManagerDelegate();
// Latest DevTools protocol version supported.
static std::string GetProtocolVersion();
@ -92,11 +97,20 @@ class CONTENT_EXPORT DevToolsAgentHost
static bool IsDebuggerAttached(WebContents* web_contents);
typedef std::vector<scoped_refptr<DevToolsAgentHost> > List;
using List = std::vector<scoped_refptr<DevToolsAgentHost>>;
// Returns all possible DevToolsAgentHosts.
using DiscoveryCallback = base::Callback<List()>;
// Registers embedder's custom host providers that are available via
// DiscoverAllHosts.
static void AddDiscoveryProvider(const DiscoveryCallback& callback);
// Returns all DevToolsAgentHosts content is aware of.
static List GetOrCreateAll();
// Returns all possible DevToolsAgentHosts embedder is aware of.
static List DiscoverAllHosts();
// Attaches |client| to this agent host to start debugging.
// Returns true iff attach succeeded.
virtual bool AttachClient(DevToolsAgentHostClient* client) = 0;

@ -6,6 +6,8 @@
#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_MANAGER_DELEGATE_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "url/gurl.h"
namespace base {
class DictionaryValue;
@ -33,6 +35,9 @@ class DevToolsManagerDelegate {
// Returns DevToolsAgentHost title to use for given |host| target.
virtual std::string GetTargetTitle(RenderFrameHost* host) = 0;
// Creates new inspectable target given the |url|.
virtual scoped_refptr<DevToolsAgentHost> CreateNewTarget(const GURL& url) = 0;
// Result ownership is passed to the caller.
virtual base::DictionaryValue* HandleCommand(
DevToolsAgentHost* agent_host,

@ -221,7 +221,6 @@ static_library("content_shell_lib") {
"//base/third_party/dynamic_annotations",
"//cc",
"//components/crash/content/app:app_breakpad_mac_win_to_be_deleted",
"//components/devtools_discovery",
"//components/devtools_http_handler",
"//components/plugins/renderer",
"//components/test_runner:test_runner",

@ -27,7 +27,6 @@ include_rules = [
# 1) it's an example browser
# 2) it's not linked into the content library
"+components/crash",
"+components/devtools_discovery",
"+components/devtools_http_handler",
"+components/url_formatter",
]

@ -272,7 +272,7 @@ bool ShellContentBrowserClient::ShouldSwapProcessesForRedirect(
DevToolsManagerDelegate*
ShellContentBrowserClient::GetDevToolsManagerDelegate() {
return new ShellDevToolsManagerDelegate();
return new ShellDevToolsManagerDelegate(browser_context());
}
void ShellContentBrowserClient::OpenURL(

@ -17,7 +17,6 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "components/devtools_http_handler/devtools_http_handler.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/devtools_agent_host.h"
@ -134,21 +133,12 @@ CreateSocketFactory() {
#endif
}
scoped_refptr<content::DevToolsAgentHost>
CreateNewShellTarget(BrowserContext* browser_context, const GURL& url) {
Shell* shell = Shell::CreateNewWindow(browser_context,
url,
nullptr,
gfx::Size());
return DevToolsAgentHost::GetOrCreateFor(shell->web_contents());
}
// ShellDevToolsDelegate ----------------------------------------------------
class ShellDevToolsDelegate :
public devtools_http_handler::DevToolsHttpHandlerDelegate {
public:
explicit ShellDevToolsDelegate(BrowserContext* browser_context);
explicit ShellDevToolsDelegate();
~ShellDevToolsDelegate() override;
// devtools_http_handler::DevToolsHttpHandlerDelegate implementation.
@ -162,16 +152,10 @@ class ShellDevToolsDelegate :
DISALLOW_COPY_AND_ASSIGN(ShellDevToolsDelegate);
};
ShellDevToolsDelegate::ShellDevToolsDelegate(BrowserContext* browser_context) {
devtools_discovery::DevToolsDiscoveryManager::GetInstance()->
SetCreateCallback(base::Bind(&CreateNewShellTarget,
base::Unretained(browser_context)));
ShellDevToolsDelegate::ShellDevToolsDelegate() {
}
ShellDevToolsDelegate::~ShellDevToolsDelegate() {
devtools_discovery::DevToolsDiscoveryManager::GetInstance()->
SetCreateCallback(
devtools_discovery::DevToolsDiscoveryManager::CreateCallback());
}
std::string ShellDevToolsDelegate::GetDiscoveryPageHTML() {
@ -212,14 +196,16 @@ ShellDevToolsManagerDelegate::CreateHttpHandler(
return new DevToolsHttpHandler(
CreateSocketFactory(),
frontend_url,
new ShellDevToolsDelegate(browser_context),
new ShellDevToolsDelegate(),
browser_context->GetPath(),
base::FilePath(),
std::string(),
GetShellUserAgent());
}
ShellDevToolsManagerDelegate::ShellDevToolsManagerDelegate() {
ShellDevToolsManagerDelegate::ShellDevToolsManagerDelegate(
BrowserContext* browser_context)
: browser_context_(browser_context) {
}
ShellDevToolsManagerDelegate::~ShellDevToolsManagerDelegate() {
@ -228,10 +214,7 @@ ShellDevToolsManagerDelegate::~ShellDevToolsManagerDelegate() {
base::DictionaryValue* ShellDevToolsManagerDelegate::HandleCommand(
DevToolsAgentHost* agent_host,
base::DictionaryValue* command_dict) {
std::unique_ptr<base::DictionaryValue> result =
devtools_discovery::DevToolsDiscoveryManager::GetInstance()
->HandleCreateTargetCommand(command_dict);
return result.release(); // Caller takes ownership.
return nullptr;
}
std::string ShellDevToolsManagerDelegate::GetTargetType(RenderFrameHost* host) {
@ -243,4 +226,14 @@ std::string ShellDevToolsManagerDelegate::GetTargetTitle(
return "";
}
scoped_refptr<DevToolsAgentHost>
ShellDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
Shell* shell = Shell::CreateNewWindow(browser_context_,
url,
nullptr,
gfx::Size());
return DevToolsAgentHost::GetOrCreateFor(shell->web_contents());
}
} // namespace content

@ -23,7 +23,7 @@ class ShellDevToolsManagerDelegate : public DevToolsManagerDelegate {
static devtools_http_handler::DevToolsHttpHandler* CreateHttpHandler(
BrowserContext* browser_context);
ShellDevToolsManagerDelegate();
explicit ShellDevToolsManagerDelegate(BrowserContext* browser_context);
~ShellDevToolsManagerDelegate() override;
// DevToolsManagerDelegate implementation.
@ -34,8 +34,10 @@ class ShellDevToolsManagerDelegate : public DevToolsManagerDelegate {
base::DictionaryValue* command) override;
std::string GetTargetType(RenderFrameHost* host) override;
std::string GetTargetTitle(RenderFrameHost* host) override;
scoped_refptr<DevToolsAgentHost> CreateNewTarget(const GURL& url) override;
private:
BrowserContext* browser_context_;
DISALLOW_COPY_AND_ASSIGN(ShellDevToolsManagerDelegate);
};

@ -31,7 +31,6 @@ source_set("app_shell_lib") {
":resources",
":version_header",
"//base",
"//components/devtools_discovery",
"//components/devtools_http_handler",
"//components/guest_view/browser",
"//components/guest_view/common",

@ -225,7 +225,7 @@ void ShellContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem(
content::DevToolsManagerDelegate*
ShellContentBrowserClient::GetDevToolsManagerDelegate() {
return new content::ShellDevToolsManagerDelegate();
return new content::ShellDevToolsManagerDelegate(GetBrowserContext());
}
ShellBrowserMainParts* ShellContentBrowserClient::CreateShellBrowserMainParts(

@ -72,6 +72,11 @@ std::string HeadlessDevToolsManagerDelegate::GetTargetTitle(
return "";
}
scoped_refptr<content::DevToolsAgentHost>
HeadlessDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
return nullptr;
}
std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CreateTarget(
const base::DictionaryValue* params) {
std::string url;

@ -34,6 +34,8 @@ class HeadlessDevToolsManagerDelegate
base::DictionaryValue* command) override;
std::string GetTargetType(content::RenderFrameHost* host) override;
std::string GetTargetTitle(content::RenderFrameHost* host) override;
scoped_refptr<content::DevToolsAgentHost> CreateNewTarget(
const GURL& url) override;
private:
std::unique_ptr<base::Value> CreateTarget(