diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 765eb5a3cabf6..e26b366cc3369 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn @@ -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", diff --git a/android_webview/DEPS b/android_webview/DEPS index d65dcad0ac6ce..63f5faad22854 100644 --- a/android_webview/DEPS +++ b/android_webview/DEPS @@ -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", diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp index a829f51985a86..13d9047cbb795 100644 --- a/android_webview/android_webview.gyp +++ b/android_webview/android_webview.gyp @@ -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', diff --git a/android_webview/browser/aw_dev_tools_discovery_provider.cc b/android_webview/browser/aw_dev_tools_discovery_provider.cc index 6e2fb5bb87f7e..d29be3f856cbd 100644 --- a/android_webview/browser/aw_dev_tools_discovery_provider.cc +++ b/android_webview/browser/aw_dev_tools_discovery_provider.cc @@ -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 diff --git a/android_webview/browser/aw_dev_tools_discovery_provider.h b/android_webview/browser/aw_dev_tools_discovery_provider.h index 7ad08df6b30a5..52aff5ae2221a 100644 --- a/android_webview/browser/aw_dev_tools_discovery_provider.h +++ b/android_webview/browser/aw_dev_tools_discovery_provider.h @@ -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); }; diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index bcba015becb19..47813be6fd5a6 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn @@ -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", diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS index c970c726ca777..52f533d815c08 100644 --- a/chrome/browser/android/DEPS +++ b/chrome/browser/android/DEPS @@ -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", diff --git a/chrome/browser/android/dev_tools_discovery_provider_android.h b/chrome/browser/android/dev_tools_discovery_provider_android.h deleted file mode 100644 index 1d3aae665f031..0000000000000 --- a/chrome/browser/android/dev_tools_discovery_provider_android.h +++ /dev/null @@ -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_ diff --git a/chrome/browser/android/dev_tools_discovery_provider_android.cc b/chrome/browser/android/devtools_manager_delegate_android.cc similarity index 72% rename from chrome/browser/android/dev_tools_discovery_provider_android.cc rename to chrome/browser/android/devtools_manager_delegate_android.cc index 906c52d46123e..051817fc56e30 100644 --- a/chrome/browser/android/dev_tools_discovery_provider_android.cc +++ b/chrome/browser/android/devtools_manager_delegate_android.cc @@ -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); } diff --git a/chrome/browser/android/devtools_manager_delegate_android.h b/chrome/browser/android/devtools_manager_delegate_android.h new file mode 100644 index 0000000000000..ee3f226b324e7 --- /dev/null +++ b/chrome/browser/android/devtools_manager_delegate_android.h @@ -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_ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 99aaf36c9200a..22325e778851c 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc @@ -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(); diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index e8bec119b6c61..d5313df0c80f1 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -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() { diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn index 3e7a05a5d0737..9a0c42a11cb87 100644 --- a/chrome/browser/devtools/BUILD.gn +++ b/chrome/browser/devtools/BUILD.gn @@ -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", diff --git a/chrome/browser/devtools/DEPS b/chrome/browser/devtools/DEPS index b1244efb48c70..8b64aaac5db91 100644 --- a/chrome/browser/devtools/DEPS +++ b/chrome/browser/devtools/DEPS @@ -1,4 +1,3 @@ include_rules = [ - "+components/devtools_discovery", "+components/devtools_http_handler", ] diff --git a/chrome/browser/devtools/chrome_devtools_discovery_provider.cc b/chrome/browser/devtools/chrome_devtools_discovery_provider.cc deleted file mode 100644 index e6717ecb5f261..0000000000000 --- a/chrome/browser/devtools/chrome_devtools_discovery_provider.cc +++ /dev/null @@ -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(¶ms); - 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)); -} diff --git a/chrome/browser/devtools/chrome_devtools_discovery_provider.h b/chrome/browser/devtools/chrome_devtools_discovery_provider.h deleted file mode 100644 index f48890586dc14..0000000000000 --- a/chrome/browser/devtools/chrome_devtools_discovery_provider.h +++ /dev/null @@ -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_ diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc index ca25d95a7575e..085e940515be3 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc @@ -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(¶ms); + if (!params.target_contents) + return nullptr; + return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents); +} + void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged( content::DevToolsAgentHost* agent_host, bool attached) { diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/chrome/browser/devtools/chrome_devtools_manager_delegate.h index 61cde163c3c84..3cbfb288d419e 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.h +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.h @@ -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_; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 7b1383e0afb82..a1b2e2a220707 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -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', diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi index 33248db4474e9..04abc4eb8ec09 100644 --- a/chrome/chrome_debugger.gypi +++ b/chrome/chrome_debugger.gypi @@ -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', diff --git a/components/OWNERS b/components/OWNERS index 458c926063cb8..625a3c670a727 100644 --- a/components/OWNERS +++ b/components/OWNERS @@ -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 diff --git a/components/devtools_discovery/BUILD.gn b/components/devtools_discovery/BUILD.gn deleted file mode 100644 index 12f4a657c1a92..0000000000000 --- a/components/devtools_discovery/BUILD.gn +++ /dev/null @@ -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", - ] -} diff --git a/components/devtools_discovery/DEPS b/components/devtools_discovery/DEPS deleted file mode 100644 index f75ba964ae0f9..0000000000000 --- a/components/devtools_discovery/DEPS +++ /dev/null @@ -1,5 +0,0 @@ -include_rules = [ - "+content/public/browser", - "+content/public/common", - "+content/public/test", -] diff --git a/components/devtools_discovery/OWNERS b/components/devtools_discovery/OWNERS deleted file mode 100644 index fe38b0fad4948..0000000000000 --- a/components/devtools_discovery/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -dgozman@chromium.org -pfeldman@chromium.org diff --git a/components/devtools_discovery/devtools_discovery_manager.cc b/components/devtools_discovery/devtools_discovery_manager.cc deleted file mode 100644 index eb2c5960ea133..0000000000000 --- a/components/devtools_discovery/devtools_discovery_manager.cc +++ /dev/null @@ -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", ¶ms_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 diff --git a/components/devtools_discovery/devtools_discovery_manager.h b/components/devtools_discovery/devtools_discovery_manager.h deleted file mode 100644 index 8887f7694479b..0000000000000 --- a/components/devtools_discovery/devtools_discovery_manager.h +++ /dev/null @@ -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_ diff --git a/components/devtools_http_handler/BUILD.gn b/components/devtools_http_handler/BUILD.gn index 78dca7f90d127..a7f85d7c8ed51 100644 --- a/components/devtools_http_handler/BUILD.gn +++ b/components/devtools_http_handler/BUILD.gn @@ -11,7 +11,6 @@ static_library("devtools_http_handler") { deps = [ "//base", - "//components/devtools_discovery", "//content/public/browser", "//content/public/common", "//net", diff --git a/components/devtools_http_handler/DEPS b/components/devtools_http_handler/DEPS index c85bd3d463264..3bcaf2ef0c357 100644 --- a/components/devtools_http_handler/DEPS +++ b/components/devtools_http_handler/DEPS @@ -1,5 +1,4 @@ include_rules = [ - "+components/devtools_discovery", "+content/public/browser", "+content/public/common", "+content/public/test", diff --git a/components/devtools_http_handler/devtools_http_handler.cc b/components/devtools_http_handler/devtools_http_handler.cc index 86765589d896b..17a12e17e18e2 100644 --- a/components/devtools_http_handler/devtools_http_handler.cc +++ b/components/devtools_http_handler/devtools_http_handler.cc @@ -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, diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc index fdd38d13c14ca..f9e06738b267f 100644 --- a/content/browser/devtools/devtools_agent_host_impl.cc +++ b/content/browser/devtools/devtools_agent_host_impl.cc @@ -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( diff --git a/content/browser/devtools/protocol/browser_handler.cc b/content/browser/devtools/protocol/browser_handler.cc index d1494f06ca867..1b53abe690596 100644 --- a/content/browser/devtools/protocol/browser_handler.cc +++ b/content/browser/devtools/protocol/browser_handler.cc @@ -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, diff --git a/content/content_shell.gypi b/content/content_shell.gypi index 09d54a193c0c6..91dc554814e44 100644 --- a/content/content_shell.gypi +++ b/content/content_shell.gypi @@ -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', diff --git a/content/public/browser/devtools_agent_host.h b/content/public/browser/devtools_agent_host.h index e98f5dc9845f7..6ec93f2c4e6c8 100644 --- a/content/public/browser/devtools_agent_host.h +++ b/content/public/browser/devtools_agent_host.h @@ -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; diff --git a/content/public/browser/devtools_manager_delegate.h b/content/public/browser/devtools_manager_delegate.h index 4d929292ac5b4..67c00260569e9 100644 --- a/content/public/browser/devtools_manager_delegate.h +++ b/content/public/browser/devtools_manager_delegate.h @@ -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, diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn index abac639badb19..b1a9ac12ae0d8 100644 --- a/content/shell/BUILD.gn +++ b/content/shell/BUILD.gn @@ -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", diff --git a/content/shell/DEPS b/content/shell/DEPS index fd8839215d4f0..6dfaf4e5a2368 100644 --- a/content/shell/DEPS +++ b/content/shell/DEPS @@ -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", ] diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc index 5fe4483d0466b..643f9c1653d38 100644 --- a/content/shell/browser/shell_content_browser_client.cc +++ b/content/shell/browser/shell_content_browser_client.cc @@ -272,7 +272,7 @@ bool ShellContentBrowserClient::ShouldSwapProcessesForRedirect( DevToolsManagerDelegate* ShellContentBrowserClient::GetDevToolsManagerDelegate() { - return new ShellDevToolsManagerDelegate(); + return new ShellDevToolsManagerDelegate(browser_context()); } void ShellContentBrowserClient::OpenURL( diff --git a/content/shell/browser/shell_devtools_manager_delegate.cc b/content/shell/browser/shell_devtools_manager_delegate.cc index 2d3837a31854f..f6826dc9981e7 100644 --- a/content/shell/browser/shell_devtools_manager_delegate.cc +++ b/content/shell/browser/shell_devtools_manager_delegate.cc @@ -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 diff --git a/content/shell/browser/shell_devtools_manager_delegate.h b/content/shell/browser/shell_devtools_manager_delegate.h index 7275f4d85e0dd..a4a9112981b70 100644 --- a/content/shell/browser/shell_devtools_manager_delegate.h +++ b/content/shell/browser/shell_devtools_manager_delegate.h @@ -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); }; diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn index 4732cbfdc47c9..c4516eaed02fc 100644 --- a/extensions/shell/BUILD.gn +++ b/extensions/shell/BUILD.gn @@ -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", diff --git a/extensions/shell/browser/shell_content_browser_client.cc b/extensions/shell/browser/shell_content_browser_client.cc index 26298c70b915d..6eec8e733496c 100644 --- a/extensions/shell/browser/shell_content_browser_client.cc +++ b/extensions/shell/browser/shell_content_browser_client.cc @@ -225,7 +225,7 @@ void ShellContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( content::DevToolsManagerDelegate* ShellContentBrowserClient::GetDevToolsManagerDelegate() { - return new content::ShellDevToolsManagerDelegate(); + return new content::ShellDevToolsManagerDelegate(GetBrowserContext()); } ShellBrowserMainParts* ShellContentBrowserClient::CreateShellBrowserMainParts( diff --git a/headless/lib/browser/headless_devtools_manager_delegate.cc b/headless/lib/browser/headless_devtools_manager_delegate.cc index adc2c5ef92ee1..ce89824097031 100644 --- a/headless/lib/browser/headless_devtools_manager_delegate.cc +++ b/headless/lib/browser/headless_devtools_manager_delegate.cc @@ -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; diff --git a/headless/lib/browser/headless_devtools_manager_delegate.h b/headless/lib/browser/headless_devtools_manager_delegate.h index 92ddec8d450fb..52dd17393759c 100644 --- a/headless/lib/browser/headless_devtools_manager_delegate.h +++ b/headless/lib/browser/headless_devtools_manager_delegate.h @@ -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(