summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgozman <dgozman@chromium.org>2015-04-20 08:45:46 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-20 15:45:59 +0000
commit102fee9bf48795fced65a8a817a5f62e054e1fc6 (patch)
tree1ad92bd0086fe998507a033187e25503c052da32
parente936869562e01bd1f1d36797641922d9753e580f (diff)
downloadchromium_src-102fee9bf48795fced65a8a817a5f62e054e1fc6.zip
chromium_src-102fee9bf48795fced65a8a817a5f62e054e1fc6.tar.gz
chromium_src-102fee9bf48795fced65a8a817a5f62e054e1fc6.tar.bz2
Componentize devtools_http_handler.
This moves DevToolsHttpHandler into it's own component. It still depends on content::DevToolsTarget, which will be moved to devtools_discovery component next. BUG=476496 Review URL: https://codereview.chromium.org/1089413002 Cr-Commit-Position: refs/heads/master@{#325849}
-rw-r--r--android_webview/common/aw_content_client.cc8
-rw-r--r--android_webview/common/aw_content_client.h1
-rw-r--r--android_webview/native/DEPS1
-rw-r--r--android_webview/native/aw_dev_tools_server.cc47
-rw-r--r--android_webview/native/aw_dev_tools_server.h8
-rw-r--r--android_webview/native/webview_native.gyp1
-rw-r--r--chrome/browser/BUILD.gn1
-rw-r--r--chrome/browser/android/DEPS1
-rw-r--r--chrome/browser/android/dev_tools_server.cc41
-rw-r--r--chrome/browser/android/dev_tools_server.h8
-rw-r--r--chrome/browser/devtools/BUILD.gn3
-rw-r--r--chrome/browser/devtools/DEPS3
-rw-r--r--chrome/browser/devtools/browser_list_tabcontents_provider.cc53
-rw-r--r--chrome/browser/devtools/browser_list_tabcontents_provider.h26
-rw-r--r--chrome/browser/devtools/devtools_sanity_browsertest.cc2
-rw-r--r--chrome/browser/devtools/remote_debugging_server.cc81
-rw-r--r--chrome/browser/devtools/remote_debugging_server.h8
-rw-r--r--chrome/browser/extensions/api/debugger/debugger_api.cc4
-rw-r--r--chrome/browser/ui/webui/devtools_ui.cc15
-rw-r--r--chrome/chrome_browser.gypi1
-rw-r--r--chrome/chrome_debugger.gypi3
-rw-r--r--chromecast/browser/DEPS1
-rw-r--r--chromecast/browser/devtools/cast_dev_tools_delegate.cc9
-rw-r--r--chromecast/browser/devtools/cast_dev_tools_delegate.h10
-rw-r--r--chromecast/browser/devtools/remote_debugging_server.cc28
-rw-r--r--chromecast/browser/devtools/remote_debugging_server.h10
-rw-r--r--chromecast/chromecast.gyp1
-rw-r--r--components/BUILD.gn5
-rw-r--r--components/OWNERS3
-rw-r--r--components/components.gyp1
-rw-r--r--components/components_tests.gyp5
-rw-r--r--components/devtools_http_handler.gypi26
-rw-r--r--components/devtools_http_handler/BUILD.gn30
-rw-r--r--components/devtools_http_handler/DEPS6
-rw-r--r--components/devtools_http_handler/OWNERS2
-rw-r--r--components/devtools_http_handler/devtools_http_handler.cc (renamed from content/browser/devtools/devtools_http_handler_impl.cc)283
-rw-r--r--components/devtools_http_handler/devtools_http_handler.h160
-rw-r--r--components/devtools_http_handler/devtools_http_handler_delegate.h29
-rw-r--r--components/devtools_http_handler/devtools_http_handler_unittest.cc (renamed from content/browser/devtools/devtools_http_handler_unittest.cc)108
-rw-r--r--content/browser/BUILD.gn1
-rw-r--r--content/browser/devtools/devtools_frontend_host_impl.cc14
-rw-r--r--content/browser/devtools/protocol/tethering_handler.cc1
-rw-r--r--content/browser/devtools/protocol/tethering_handler.h5
-rw-r--r--content/content_browser.gypi3
-rw-r--r--content/content_shell.gypi1
-rw-r--r--content/content_tests.gypi1
-rw-r--r--content/public/browser/devtools_frontend_host.h6
-rw-r--r--content/public/browser/devtools_http_handler.h74
-rw-r--r--content/public/browser/devtools_http_handler_delegate.h36
-rw-r--r--content/shell/BUILD.gn1
-rw-r--r--content/shell/DEPS1
-rw-r--r--content/shell/browser/shell_browser_main_parts.cc2
-rw-r--r--content/shell/browser/shell_browser_main_parts.h10
-rw-r--r--content/shell/browser/shell_devtools_frontend.cc9
-rw-r--r--content/shell/browser/shell_devtools_manager_delegate.cc40
-rw-r--r--content/shell/browser/shell_devtools_manager_delegate.h9
-rw-r--r--extensions/shell/BUILD.gn1
-rw-r--r--extensions/shell/app_shell.gyp1
-rw-r--r--extensions/shell/browser/DEPS1
-rw-r--r--extensions/shell/browser/shell_browser_main_parts.cc2
-rw-r--r--extensions/shell/browser/shell_browser_main_parts.h7
61 files changed, 706 insertions, 553 deletions
diff --git a/android_webview/common/aw_content_client.cc b/android_webview/common/aw_content_client.cc
index 240b734..b4400ae 100644
--- a/android_webview/common/aw_content_client.cc
+++ b/android_webview/common/aw_content_client.cc
@@ -13,16 +13,12 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-namespace {
+namespace android_webview {
std::string GetProduct() {
return "Chrome/" PRODUCT_VERSION;
}
-}
-
-namespace android_webview {
-
std::string GetUserAgent() {
// "Version/4.0" had been hardcoded in the legacy WebView.
std::string product = "Version/4.0 " + GetProduct();
@@ -40,7 +36,7 @@ std::string GetExtraOSUserAgentInfo() {
}
std::string AwContentClient::GetProduct() const {
- return ::GetProduct();
+ return android_webview::GetProduct();
}
std::string AwContentClient::GetUserAgent() const {
diff --git a/android_webview/common/aw_content_client.h b/android_webview/common/aw_content_client.h
index 957b7b6c..01f4ff8 100644
--- a/android_webview/common/aw_content_client.h
+++ b/android_webview/common/aw_content_client.h
@@ -11,6 +11,7 @@
namespace android_webview {
+std::string GetProduct();
std::string GetUserAgent();
// extra text to be put into the OS section of the user agent text
std::string GetExtraOSUserAgentInfo();
diff --git a/android_webview/native/DEPS b/android_webview/native/DEPS
index 4b8dbbb..d1c0799 100644
--- a/android_webview/native/DEPS
+++ b/android_webview/native/DEPS
@@ -12,6 +12,7 @@ include_rules = [
"+components/autofill/core/browser",
"+components/autofill/core/common",
"+components/data_reduction_proxy/core/browser",
+ "+components/devtools_http_handler",
"+components/navigation_interception",
"+components/user_prefs",
"+components/web_contents_delegate_android",
diff --git a/android_webview/native/aw_dev_tools_server.cc b/android_webview/native/aw_dev_tools_server.cc
index 52d474e..1e11f28 100644
--- a/android_webview/native/aw_dev_tools_server.cc
+++ b/android_webview/native/aw_dev_tools_server.cc
@@ -4,6 +4,8 @@
#include "android_webview/native/aw_dev_tools_server.h"
+#include "android_webview/browser/aw_dev_tools_manager_delegate.h"
+#include "android_webview/common/aw_content_client.h"
#include "android_webview/native/aw_contents.h"
#include "base/bind.h"
#include "base/files/file_path.h"
@@ -11,10 +13,10 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "content/public/browser/android/devtools_auth.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_target.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/user_agent.h"
@@ -25,6 +27,7 @@
using content::DevToolsAgentHost;
using content::RenderViewHost;
using content::WebContents;
+using devtools_http_handler::DevToolsHttpHandler;
namespace {
@@ -37,23 +40,18 @@ const int kBackLog = 10;
// Delegate implementation for the devtools http handler for WebView. A new
// instance of this gets created each time web debugging is enabled.
-class AwDevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate {
+class AwDevToolsServerDelegate :
+ public devtools_http_handler::DevToolsHttpHandlerDelegate {
public:
AwDevToolsServerDelegate() {
}
~AwDevToolsServerDelegate() override {}
- // DevToolsHttpProtocolHandler::Delegate overrides.
+ // devtools_http_handler::DevToolsHttpHandlerDelegate implementation.
std::string GetDiscoveryPageHTML() override;
+ std::string GetFrontendResource(const std::string& path) override;
- bool BundlesFrontendResources() override {
- return false;
- }
-
- base::FilePath GetDebugFrontendDir() override {
- return base::FilePath();
- }
private:
DISALLOW_COPY_AND_ASSIGN(AwDevToolsServerDelegate);
@@ -70,9 +68,14 @@ std::string AwDevToolsServerDelegate::GetDiscoveryPageHTML() {
return html;
}
+std::string AwDevToolsServerDelegate::GetFrontendResource(
+ const std::string& path) {
+ return std::string();
+}
+
// Factory for UnixDomainServerSocket.
class UnixDomainServerSocketFactory
- : public content::DevToolsHttpHandler::ServerSocketFactory {
+ : public DevToolsHttpHandler::ServerSocketFactory {
public:
explicit UnixDomainServerSocketFactory(const std::string& socket_name)
: socket_name_(socket_name),
@@ -80,7 +83,7 @@ class UnixDomainServerSocketFactory
}
private:
- // content::DevToolsHttpHandler::ServerSocketFactory.
+ // devtools_http_handler::DevToolsHttpHandler::ServerSocketFactory.
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
scoped_ptr<net::ServerSocket> socket(
new net::UnixDomainServerSocket(
@@ -122,25 +125,31 @@ AwDevToolsServer::~AwDevToolsServer() {
}
void AwDevToolsServer::Start() {
- if (protocol_handler_)
+ if (devtools_http_handler_)
return;
- scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory> factory(
+ scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
new UnixDomainServerSocketFactory(
base::StringPrintf(kSocketNameFormat, getpid())));
- protocol_handler_.reset(content::DevToolsHttpHandler::Start(
+ manager_delegate_.reset(new AwDevToolsManagerDelegate());
+ devtools_http_handler_.reset(new DevToolsHttpHandler(
factory.Pass(),
base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()),
new AwDevToolsServerDelegate(),
- base::FilePath()));
+ manager_delegate_.get(),
+ base::FilePath(),
+ base::FilePath(),
+ GetProduct(),
+ GetUserAgent()));
}
void AwDevToolsServer::Stop() {
- protocol_handler_.reset();
+ devtools_http_handler_.reset();
+ manager_delegate_.reset();
}
bool AwDevToolsServer::IsStarted() const {
- return protocol_handler_;
+ return devtools_http_handler_;
}
bool RegisterAwDevToolsServer(JNIEnv* env) {
diff --git a/android_webview/native/aw_dev_tools_server.h b/android_webview/native/aw_dev_tools_server.h
index 33955dc..48669a5 100644
--- a/android_webview/native/aw_dev_tools_server.h
+++ b/android_webview/native/aw_dev_tools_server.h
@@ -11,12 +11,14 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
-namespace content {
+namespace devtools_http_handler {
class DevToolsHttpHandler;
}
namespace android_webview {
+class AwDevToolsManagerDelegate;
+
// This class controls WebView-specific Developer Tools remote debugging server.
class AwDevToolsServer {
public:
@@ -32,7 +34,9 @@ class AwDevToolsServer {
bool IsStarted() const;
private:
- scoped_ptr<content::DevToolsHttpHandler> protocol_handler_;
+ // TODO(dgozman): remove once devtools_discovery component is extracted.
+ scoped_ptr<AwDevToolsManagerDelegate> manager_delegate_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
DISALLOW_COPY_AND_ASSIGN(AwDevToolsServer);
};
diff --git a/android_webview/native/webview_native.gyp b/android_webview/native/webview_native.gyp
index 121a876..960dc0f 100644
--- a/android_webview/native/webview_native.gyp
+++ b/android_webview/native/webview_native.gyp
@@ -14,6 +14,7 @@
'../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
'../../cc/cc.gyp:cc',
'../../components/components.gyp:autofill_content_browser',
+ '../../components/components.gyp:devtools_http_handler',
'../../components/components.gyp:web_contents_delegate_android',
'../../content/content.gyp:content_common',
'../../media/media.gyp:player_android',
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 80b2f9b..adb4c14 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -239,6 +239,7 @@ source_set("browser") {
"//components/autofill/content/browser",
"//components/browsing_data",
"//components/data_reduction_proxy/content/browser",
+ "//components/devtools_http_handler",
"//components/dom_distiller/content",
"//components/favicon/content",
"//components/history/content/browser",
diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS
index a78dfeb..9838090 100644
--- a/chrome/browser/android/DEPS
+++ b/chrome/browser/android/DEPS
@@ -1,5 +1,6 @@
include_rules = [
"-components/devtools_bridge",
+ "+components/devtools_http_handler",
"+components/service_tab_launcher",
"+components/web_contents_delegate_android",
"+cc/layers/layer.h"
diff --git a/chrome/browser/android/dev_tools_server.cc b/chrome/browser/android/dev_tools_server.cc
index e6d15aa..9a91c6b 100644
--- a/chrome/browser/android/dev_tools_server.cc
+++ b/chrome/browser/android/dev_tools_server.cc
@@ -18,18 +18,21 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/android/dev_tools_manager_delegate_android.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/history/top_sites_factory.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/android/tab_model/tab_model.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
+#include "chrome/common/chrome_content_client.h"
+#include "chrome/common/chrome_version_info.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "components/history/core/browser/top_sites.h"
#include "content/public/browser/android/devtools_auth.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_target.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
@@ -50,6 +53,7 @@
using content::DevToolsAgentHost;
using content::RenderViewHost;
using content::WebContents;
+using devtools_http_handler::DevToolsHttpHandler;
namespace {
@@ -81,7 +85,8 @@ bool AuthorizeSocketAccessWithDebugPermission(
// Delegate implementation for the devtools http handler on android. A new
// instance of this gets created each time devtools is enabled.
-class DevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate {
+class DevToolsServerDelegate :
+ public devtools_http_handler::DevToolsHttpHandlerDelegate {
public:
DevToolsServerDelegate() {
}
@@ -97,12 +102,8 @@ class DevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate {
IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
}
- bool BundlesFrontendResources() override {
- return false;
- }
-
- base::FilePath GetDebugFrontendDir() override {
- return base::FilePath();
+ std::string GetFrontendResource(const std::string& path) override {
+ return std::string();
}
private:
@@ -121,7 +122,7 @@ class DevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate {
// Factory for UnixDomainServerSocket. It tries a fallback socket when
// original socket doesn't work.
class UnixDomainServerSocketFactory
- : public content::DevToolsHttpHandler::ServerSocketFactory {
+ : public DevToolsHttpHandler::ServerSocketFactory {
public:
UnixDomainServerSocketFactory(
const std::string& socket_name,
@@ -187,28 +188,36 @@ DevToolsServer::~DevToolsServer() {
}
void DevToolsServer::Start(bool allow_debug_permission) {
- if (protocol_handler_)
+ if (devtools_http_handler_)
return;
net::UnixDomainServerSocket::AuthCallback auth_callback =
allow_debug_permission ?
base::Bind(&AuthorizeSocketAccessWithDebugPermission) :
base::Bind(&content::CanUserConnectToDevTools);
- scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory> factory(
+ manager_delegate_.reset(new DevToolsManagerDelegateAndroid());
+ chrome::VersionInfo version_info;
+
+ scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
new UnixDomainServerSocketFactory(socket_name_, auth_callback));
- protocol_handler_.reset(content::DevToolsHttpHandler::Start(
+ devtools_http_handler_.reset(new DevToolsHttpHandler(
factory.Pass(),
base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()),
new DevToolsServerDelegate(),
- base::FilePath()));
+ manager_delegate_.get(),
+ base::FilePath(),
+ base::FilePath(),
+ version_info.ProductNameAndVersionForUserAgent(),
+ ::GetUserAgent()));
}
void DevToolsServer::Stop() {
- protocol_handler_.reset();
+ devtools_http_handler_.reset();
+ manager_delegate_.reset();
}
bool DevToolsServer::IsStarted() const {
- return protocol_handler_;
+ return devtools_http_handler_;
}
bool RegisterDevToolsServer(JNIEnv* env) {
diff --git a/chrome/browser/android/dev_tools_server.h b/chrome/browser/android/dev_tools_server.h
index 614d4c9..2716ef3 100644
--- a/chrome/browser/android/dev_tools_server.h
+++ b/chrome/browser/android/dev_tools_server.h
@@ -10,10 +10,12 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
-namespace content {
+namespace devtools_http_handler {
class DevToolsHttpHandler;
}
+class DevToolsManagerDelegateAndroid;
+
// This class controls Developer Tools remote debugging server.
class DevToolsServer {
public:
@@ -30,7 +32,9 @@ class DevToolsServer {
private:
std::string socket_name_;
- scoped_ptr<content::DevToolsHttpHandler> protocol_handler_;
+ // TODO(dgozman): remove once devtools_discovery component is extracted.
+ scoped_ptr<DevToolsManagerDelegateAndroid> manager_delegate_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
DISALLOW_COPY_AND_ASSIGN(DevToolsServer);
};
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn
index a7580cb..b4ab715 100644
--- a/chrome/browser/devtools/BUILD.gn
+++ b/chrome/browser/devtools/BUILD.gn
@@ -68,6 +68,7 @@ static_library("devtools") {
"//chrome:extra_resources",
"//chrome:resources",
"//chrome:strings",
+ "//components/devtools_http_handler",
"//net:http_server",
"//skia",
"//third_party/icu",
@@ -76,8 +77,6 @@ static_library("devtools") {
":webrtc_device_provider_resources",
]
sources += [
- "browser_list_tabcontents_provider.cc",
- "browser_list_tabcontents_provider.h",
"chrome_devtools_manager_delegate.cc",
"chrome_devtools_manager_delegate.h",
"device/adb/adb_client_socket.cc",
diff --git a/chrome/browser/devtools/DEPS b/chrome/browser/devtools/DEPS
new file mode 100644
index 0000000..8b64aaa
--- /dev/null
+++ b/chrome/browser/devtools/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+components/devtools_http_handler",
+]
diff --git a/chrome/browser/devtools/browser_list_tabcontents_provider.cc b/chrome/browser/devtools/browser_list_tabcontents_provider.cc
deleted file mode 100644
index 5c4d4f7..0000000
--- a/chrome/browser/devtools/browser_list_tabcontents_provider.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2012 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/browser_list_tabcontents_provider.h"
-
-#include "base/path_service.h"
-#include "chrome/browser/history/top_sites_factory.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_iterator.h"
-#include "chrome/common/chrome_paths.h"
-#include "components/history/core/browser/top_sites.h"
-#include "grit/browser_resources.h"
-#include "ui/base/resource/resource_bundle.h"
-
-BrowserListTabContentsProvider::BrowserListTabContentsProvider() {
-}
-
-BrowserListTabContentsProvider::~BrowserListTabContentsProvider() {
-}
-
-std::string BrowserListTabContentsProvider::GetDiscoveryPageHTML() {
- std::set<Profile*> profiles;
- for (chrome::BrowserIterator it; !it.done(); it.Next())
- profiles.insert((*it)->profile());
-
- for (std::set<Profile*>::iterator it = profiles.begin();
- it != profiles.end(); ++it) {
- scoped_refptr<history::TopSites> ts = TopSitesFactory::GetForProfile(*it);
- if (ts) {
- // TopSites updates itself after a delay. Ask TopSites to update itself
- // when we're about to show the remote debugging landing page.
- ts->SyncWithHistory();
- }
- }
- return ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
-}
-
-bool BrowserListTabContentsProvider::BundlesFrontendResources() {
- return true;
-}
-
-base::FilePath BrowserListTabContentsProvider::GetDebugFrontendDir() {
-#if defined(DEBUG_DEVTOOLS)
- base::FilePath inspector_dir;
- PathService::Get(chrome::DIR_INSPECTOR, &inspector_dir);
- return inspector_dir;
-#else
- return base::FilePath();
-#endif
-}
diff --git a/chrome/browser/devtools/browser_list_tabcontents_provider.h b/chrome/browser/devtools/browser_list_tabcontents_provider.h
deleted file mode 100644
index fa36ae1..0000000
--- a/chrome/browser/devtools/browser_list_tabcontents_provider.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2012 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_BROWSER_LIST_TABCONTENTS_PROVIDER_H_
-#define CHROME_BROWSER_DEVTOOLS_BROWSER_LIST_TABCONTENTS_PROVIDER_H_
-
-#include "chrome/browser/ui/host_desktop.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
-
-class BrowserListTabContentsProvider
- : public content::DevToolsHttpHandlerDelegate {
- public:
- BrowserListTabContentsProvider();
- ~BrowserListTabContentsProvider() override;
-
- // DevToolsHttpHandlerDelegate implementation.
- std::string GetDiscoveryPageHTML() override;
- bool BundlesFrontendResources() override;
- base::FilePath GetDebugFrontendDir() override;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(BrowserListTabContentsProvider);
-};
-
-#endif // CHROME_BROWSER_DEVTOOLS_BROWSER_LIST_TABCONTENTS_PROVIDER_H_
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index db9eb50..382133c 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -14,7 +14,6 @@
#include "base/strings/utf_string_conversions.h"
#include "base/test/test_timeouts.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
#include "chrome/browser/devtools/device/self_device_provider.h"
#include "chrome/browser/devtools/devtools_window_testing.h"
#include "chrome/browser/extensions/extension_apitest.h"
@@ -39,7 +38,6 @@
#include "content/public/browser/child_process_data.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_view_host.h"
diff --git a/chrome/browser/devtools/remote_debugging_server.cc b/chrome/browser/devtools/remote_debugging_server.cc
index 9805cd9..4fe1064 100644
--- a/chrome/browser/devtools/remote_debugging_server.cc
+++ b/chrome/browser/devtools/remote_debugging_server.cc
@@ -7,11 +7,22 @@
#include "base/lazy_instance.h"
#include "base/path_service.h"
#include "base/strings/string_number_conversions.h"
-#include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
+#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
+#include "chrome/browser/history/top_sites_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_iterator.h"
+#include "chrome/common/chrome_content_client.h"
#include "chrome/common/chrome_paths.h"
-#include "content/public/browser/devtools_http_handler.h"
+#include "chrome/common/chrome_version_info.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
+#include "components/history/core/browser/top_sites.h"
+#include "content/public/browser/devtools_frontend_host.h"
+#include "grit/browser_resources.h"
#include "net/base/net_errors.h"
#include "net/socket/tcp_server_socket.h"
+#include "ui/base/resource/resource_bundle.h"
namespace {
@@ -22,7 +33,7 @@ const uint16 kMaxTetheringPort = 9444;
const int kBackLog = 10;
class TCPServerSocketFactory
- : public content::DevToolsHttpHandler::ServerSocketFactory {
+ : public devtools_http_handler::DevToolsHttpHandler::ServerSocketFactory {
public:
TCPServerSocketFactory(const std::string& address, uint16 port)
: address_(address),
@@ -31,7 +42,7 @@ class TCPServerSocketFactory
}
private:
- // content::DevToolsHttpHandler::ServerSocketFactory.
+ // devtools_http_handler::DevToolsHttpHandler::ServerSocketFactory.
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
scoped_ptr<net::ServerSocket> socket(
new net::TCPServerSocket(nullptr, net::NetLog::Source()));
@@ -65,6 +76,49 @@ class TCPServerSocketFactory
DISALLOW_COPY_AND_ASSIGN(TCPServerSocketFactory);
};
+class ChromeDevToolsHttpHandlerDelegate
+ : public devtools_http_handler::DevToolsHttpHandlerDelegate {
+ public:
+ ChromeDevToolsHttpHandlerDelegate();
+ ~ChromeDevToolsHttpHandlerDelegate() override;
+
+ // devtools_http_handler::DevToolsHttpHandlerDelegate implementation.
+ std::string GetDiscoveryPageHTML() override;
+ std::string GetFrontendResource(const std::string& path) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ChromeDevToolsHttpHandlerDelegate);
+};
+
+ChromeDevToolsHttpHandlerDelegate::ChromeDevToolsHttpHandlerDelegate() {
+}
+
+ChromeDevToolsHttpHandlerDelegate::~ChromeDevToolsHttpHandlerDelegate() {
+}
+
+std::string ChromeDevToolsHttpHandlerDelegate::GetDiscoveryPageHTML() {
+ std::set<Profile*> profiles;
+ for (chrome::BrowserIterator it; !it.done(); it.Next())
+ profiles.insert((*it)->profile());
+
+ for (std::set<Profile*>::iterator it = profiles.begin();
+ it != profiles.end(); ++it) {
+ scoped_refptr<history::TopSites> ts = TopSitesFactory::GetForProfile(*it);
+ if (ts) {
+ // TopSites updates itself after a delay. Ask TopSites to update itself
+ // when we're about to show the remote debugging landing page.
+ ts->SyncWithHistory();
+ }
+ }
+ return ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
+}
+
+std::string ChromeDevToolsHttpHandlerDelegate::GetFrontendResource(
+ const std::string& path) {
+ return content::DevToolsFrontendHost::GetFrontendResource(path).as_string();
+}
+
} // namespace
// static
@@ -85,11 +139,24 @@ RemoteDebuggingServer::RemoteDebuggingServer(
DCHECK(result);
}
- devtools_http_handler_.reset(content::DevToolsHttpHandler::Start(
+ manager_delegate_.reset(new ChromeDevToolsManagerDelegate());
+
+ base::FilePath debug_frontend_dir;
+#if defined(DEBUG_DEVTOOLS)
+ PathService::Get(chrome::DIR_INSPECTOR, &debug_frontend_dir);
+#endif
+
+ chrome::VersionInfo version_info;
+
+ devtools_http_handler_.reset(new devtools_http_handler::DevToolsHttpHandler(
make_scoped_ptr(new TCPServerSocketFactory(ip, port)),
std::string(),
- new BrowserListTabContentsProvider(),
- output_dir));
+ new ChromeDevToolsHttpHandlerDelegate(),
+ manager_delegate_.get(),
+ output_dir,
+ debug_frontend_dir,
+ version_info.ProductNameAndVersionForUserAgent(),
+ ::GetUserAgent()));
}
RemoteDebuggingServer::~RemoteDebuggingServer() {
diff --git a/chrome/browser/devtools/remote_debugging_server.h b/chrome/browser/devtools/remote_debugging_server.h
index c8afa6f..c82565f 100644
--- a/chrome/browser/devtools/remote_debugging_server.h
+++ b/chrome/browser/devtools/remote_debugging_server.h
@@ -11,10 +11,12 @@
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/ui/host_desktop.h"
-namespace content {
+namespace devtools_http_handler {
class DevToolsHttpHandler;
}
+class ChromeDevToolsManagerDelegate;
+
class RemoteDebuggingServer {
public:
static void EnableTetheringForDebug();
@@ -26,7 +28,9 @@ class RemoteDebuggingServer {
virtual ~RemoteDebuggingServer();
private:
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler_;
+ // TODO(dgozman): remove once devtools_discovery component is extracted.
+ scoped_ptr<ChromeDevToolsManagerDelegate> manager_delegate_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
DISALLOW_COPY_AND_ASSIGN(RemoteDebuggingServer);
};
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc
index 9acec23..c5900b8 100644
--- a/chrome/browser/extensions/api/debugger/debugger_api.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -32,7 +32,6 @@
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/infobars/core/infobar.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
#include "content/public/browser/render_process_host.h"
@@ -54,7 +53,6 @@
#include "ui/base/l10n/l10n_util.h"
using content::DevToolsAgentHost;
-using content::DevToolsHttpHandler;
using content::RenderProcessHost;
using content::RenderViewHost;
using content::RenderWidgetHost;
@@ -581,7 +579,7 @@ bool DebuggerAttachFunction::RunAsync() {
if (!InitAgentHost())
return false;
- if (!DevToolsHttpHandler::IsSupportedProtocolVersion(
+ if (!DevToolsAgentHost::IsSupportedProtocolVersion(
params->required_version)) {
error_ = ErrorUtils::FormatErrorMessage(
keys::kProtocolVersionNotSupportedError,
diff --git a/chrome/browser/ui/webui/devtools_ui.cc b/chrome/browser/ui/webui/devtools_ui.cc
index 6daac95..541fcc3 100644
--- a/chrome/browser/ui/webui/devtools_ui.cc
+++ b/chrome/browser/ui/webui/devtools_ui.cc
@@ -10,7 +10,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_http_handler.h"
+#include "content/public/browser/devtools_frontend_host.h"
#include "content/public/browser/url_data_source.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
@@ -18,7 +18,6 @@
#include "net/url_request/url_fetcher.h"
#include "net/url_request/url_fetcher_delegate.h"
#include "net/url_request/url_request_context_getter.h"
-#include "ui/base/resource/resource_bundle.h"
using content::BrowserThread;
using content::WebContents;
@@ -184,17 +183,15 @@ void DevToolsDataSource::StartBundledDataRequest(
int render_frame_id,
const content::URLDataSource::GotDataCallback& callback) {
std::string filename = PathWithoutParams(path);
+ base::StringPiece resource =
+ content::DevToolsFrontendHost::GetFrontendResource(filename);
- int resource_id =
- content::DevToolsHttpHandler::GetFrontendResourceId(filename);
-
- DLOG_IF(WARNING, resource_id == -1)
+ DLOG_IF(WARNING, resource.empty())
<< "Unable to find dev tool resource: " << filename
<< ". If you compiled with debug_devtools=1, try running with "
"--debug-devtools.";
- const ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- scoped_refptr<base::RefCountedStaticMemory> bytes(rb.LoadDataResourceBytes(
- resource_id));
+ scoped_refptr<base::RefCountedStaticMemory> bytes(
+ new base::RefCountedStaticMemory(resource.data(), resource.length()));
callback.Run(bytes.get());
}
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 278066e..c2496be 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -3089,6 +3089,7 @@
'../components/components.gyp:autofill_content_browser',
'../components/components.gyp:browsing_data',
'../components/components.gyp:data_reduction_proxy_content_browser',
+ '../components/components.gyp:devtools_http_handler',
'../components/components.gyp:dom_distiller_content',
'../components/components.gyp:favicon_content',
'../components/components.gyp:history_content_browser',
diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi
index 09b182a..f91380b 100644
--- a/chrome/chrome_debugger.gypi
+++ b/chrome/chrome_debugger.gypi
@@ -41,6 +41,7 @@
'conditions': [
['OS!="android"', {
'dependencies': [
+ '../components/components.gyp:devtools_http_handler',
'../net/net.gyp:http_server',
'../skia/skia.gyp:skia',
'../third_party/icu/icu.gyp:icui18n',
@@ -56,8 +57,6 @@
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/chrome/grit/webrtc_device_provider_resources_map.cc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/grit/webrtc_device_provider_resources_map.h',
- 'browser/devtools/browser_list_tabcontents_provider.cc',
- 'browser/devtools/browser_list_tabcontents_provider.h',
'browser/devtools/chrome_devtools_manager_delegate.cc',
'browser/devtools/chrome_devtools_manager_delegate.h',
'browser/devtools/device/adb/adb_client_socket.cc',
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS
index 6998b2b..e91498e 100644
--- a/chromecast/browser/DEPS
+++ b/chromecast/browser/DEPS
@@ -4,6 +4,7 @@ include_rules = [
"+cc/base/switches.h",
"+chromecast",
"+components/crash",
+ "+components/devtools_http_handler",
"+components/network_hints/browser",
"+content/public/browser",
"+gin/v8_initializer.h",
diff --git a/chromecast/browser/devtools/cast_dev_tools_delegate.cc b/chromecast/browser/devtools/cast_dev_tools_delegate.cc
index 727b47a..d5bbf17 100644
--- a/chromecast/browser/devtools/cast_dev_tools_delegate.cc
+++ b/chromecast/browser/devtools/cast_dev_tools_delegate.cc
@@ -98,12 +98,9 @@ std::string CastDevToolsDelegate::GetDiscoveryPageHTML() {
#endif // defined(OS_ANDROID)
}
-bool CastDevToolsDelegate::BundlesFrontendResources() {
- return false;
-}
-
-base::FilePath CastDevToolsDelegate::GetDebugFrontendDir() {
- return base::FilePath();
+std::string CastDevToolsDelegate::GetFrontendResource(
+ const std::string& path) {
+ return std::string();
}
// CastDevToolsManagerDelegate -----------------------------------------------
diff --git a/chromecast/browser/devtools/cast_dev_tools_delegate.h b/chromecast/browser/devtools/cast_dev_tools_delegate.h
index 809667b..38fbfcb 100644
--- a/chromecast/browser/devtools/cast_dev_tools_delegate.h
+++ b/chromecast/browser/devtools/cast_dev_tools_delegate.h
@@ -5,7 +5,7 @@
#ifndef CHROMECAST_BROWSER_DEVTOOLS_CAST_DEV_TOOLS_DELEGATE_H_
#define CHROMECAST_BROWSER_DEVTOOLS_CAST_DEV_TOOLS_DELEGATE_H_
-#include "content/public/browser/devtools_http_handler_delegate.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_manager_delegate.h"
#include "net/socket/stream_listen_socket.h"
@@ -20,15 +20,15 @@ class BrowserContext;
namespace chromecast {
namespace shell {
-class CastDevToolsDelegate : public content::DevToolsHttpHandlerDelegate {
+class CastDevToolsDelegate :
+ public devtools_http_handler::DevToolsHttpHandlerDelegate {
public:
CastDevToolsDelegate();
~CastDevToolsDelegate() override;
- // DevToolsHttpHandlerDelegate implementation.
+ // devtools_http_handler::DevToolsHttpHandlerDelegate implementation.
std::string GetDiscoveryPageHTML() override;
- bool BundlesFrontendResources() override;
- base::FilePath GetDebugFrontendDir() override;
+ std::string GetFrontendResource(const std::string& path) override;
private:
DISALLOW_COPY_AND_ASSIGN(CastDevToolsDelegate);
diff --git a/chromecast/browser/devtools/remote_debugging_server.cc b/chromecast/browser/devtools/remote_debugging_server.cc
index 29aa7d8..3b78e38b 100644
--- a/chromecast/browser/devtools/remote_debugging_server.cc
+++ b/chromecast/browser/devtools/remote_debugging_server.cc
@@ -11,10 +11,11 @@
#include "base/strings/stringprintf.h"
#include "chromecast/browser/cast_browser_process.h"
#include "chromecast/browser/devtools/cast_dev_tools_delegate.h"
+#include "chromecast/common/cast_content_client.h"
#include "chromecast/common/pref_names.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/user_agent.h"
#include "net/base/net_errors.h"
@@ -25,6 +26,8 @@
#include "net/socket/unix_domain_server_socket_posix.h"
#endif // defined(OS_ANDROID)
+using devtools_http_handler::DevToolsHttpHandler;
+
namespace chromecast {
namespace shell {
@@ -38,13 +41,13 @@ const int kBackLog = 10;
#if defined(OS_ANDROID)
class UnixDomainServerSocketFactory
- : public content::DevToolsHttpHandler::ServerSocketFactory {
+ : public DevToolsHttpHandler::ServerSocketFactory {
public:
explicit UnixDomainServerSocketFactory(const std::string& socket_name)
: socket_name_(socket_name) {}
private:
- // content::DevToolsHttpHandler::ServerSocketFactory.
+ // devtools_http_handler::DevToolsHttpHandler::ServerSocketFactory.
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
scoped_ptr<net::ServerSocket> socket(
new net::UnixDomainServerSocket(
@@ -62,14 +65,14 @@ class UnixDomainServerSocketFactory
};
#else
class TCPServerSocketFactory
- : public content::DevToolsHttpHandler::ServerSocketFactory {
+ : public DevToolsHttpHandler::ServerSocketFactory {
public:
TCPServerSocketFactory(const std::string& address, uint16 port)
: address_(address), port_(port) {
}
private:
- // content::DevToolsHttpHandler::ServerSocketFactory.
+ // devtools_http_handler::DevToolsHttpHandler::ServerSocketFactory.
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
scoped_ptr<net::ServerSocket> socket(
new net::TCPServerSocket(nullptr, net::NetLog::Source()));
@@ -86,7 +89,7 @@ class TCPServerSocketFactory
};
#endif
-scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory>
+scoped_ptr<DevToolsHttpHandler::ServerSocketFactory>
CreateSocketFactory(uint16 port) {
#if defined(OS_ANDROID)
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
@@ -95,10 +98,10 @@ CreateSocketFactory(uint16 port) {
socket_name = command_line->GetSwitchValueASCII(
switches::kRemoteDebuggingSocketName);
}
- return scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory>(
+ return scoped_ptr<DevToolsHttpHandler::ServerSocketFactory>(
new UnixDomainServerSocketFactory(socket_name));
#else
- return scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory>(
+ return scoped_ptr<DevToolsHttpHandler::ServerSocketFactory>(
new TCPServerSocketFactory("0.0.0.0", port));
#endif
}
@@ -145,11 +148,16 @@ void RemoteDebuggingServer::OnPortChanged() {
port_ = new_port;
if (port_ > 0) {
- devtools_http_handler_.reset(content::DevToolsHttpHandler::Start(
+ manager_delegate_.reset(new CastDevToolsManagerDelegate());
+ devtools_http_handler_.reset(new DevToolsHttpHandler(
CreateSocketFactory(port_),
GetFrontendUrl(),
new CastDevToolsDelegate(),
- base::FilePath()));
+ manager_delegate_.get(),
+ base::FilePath(),
+ base::FilePath(),
+ std::string(),
+ GetUserAgent()));
LOG(INFO) << "Devtools started: port=" << port_;
}
}
diff --git a/chromecast/browser/devtools/remote_debugging_server.h b/chromecast/browser/devtools/remote_debugging_server.h
index ed662f8..2d9e48e 100644
--- a/chromecast/browser/devtools/remote_debugging_server.h
+++ b/chromecast/browser/devtools/remote_debugging_server.h
@@ -8,13 +8,15 @@
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_member.h"
-namespace content {
+namespace devtools_http_handler {
class DevToolsHttpHandler;
-} // namespace content
+}
namespace chromecast {
namespace shell {
+class CastDevToolsManagerDelegate;
+
class RemoteDebuggingServer {
public:
RemoteDebuggingServer();
@@ -28,7 +30,9 @@ class RemoteDebuggingServer {
// on device startup.
bool ShouldStartImmediately();
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler_;
+ // TODO(dgozman): remove once devtools_discovery component is extracted.
+ scoped_ptr<CastDevToolsManagerDelegate> manager_delegate_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
IntegerPrefMember pref_port_;
uint16 port_;
diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp
index df549c2..15b31b4 100644
--- a/chromecast/chromecast.gyp
+++ b/chromecast/chromecast.gyp
@@ -186,6 +186,7 @@
'../components/components.gyp:cdm_renderer',
'../components/components.gyp:component_metrics_proto',
'../components/components.gyp:crash_component',
+ '../components/components.gyp:devtools_http_handler',
'../components/components.gyp:network_hints_browser',
'../components/components.gyp:network_hints_renderer',
'../components/components.gyp:metrics',
diff --git a/components/BUILD.gn b/components/BUILD.gn
index c6ab797..c0f6ad8 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -36,6 +36,7 @@ group("all_components") {
"//components/data_reduction_proxy/core/browser",
"//components/data_reduction_proxy/core/common",
"//components/device_event_log",
+ "//components/devtools_http_handler",
"//components/dom_distiller/core",
"//components/domain_reliability",
"//components/enhanced_bookmarks",
@@ -259,6 +260,7 @@ test("components_unittests") {
"//components/data_reduction_proxy/core/browser:unit_tests",
"//components/data_reduction_proxy/core/common:unit_tests",
"//components/device_event_log:unit_tests",
+ "//components/devtools_http_handler:unit_tests",
"//components/dom_distiller/core:unit_tests",
"//components/domain_reliability:unit_tests",
"//components/favicon_base:unit_tests",
@@ -301,6 +303,9 @@ test("components_unittests") {
if (is_win) {
deps += [ "//components/browser_watcher:unit_tests" ]
}
+ if (is_ios) {
+ deps -= [ "//components/devtools_http_handler:unit_tests" ]
+ }
}
repack("components_tests_pak") {
diff --git a/components/OWNERS b/components/OWNERS
index 4203294..05b239f 100644
--- a/components/OWNERS
+++ b/components/OWNERS
@@ -58,6 +58,9 @@ per-file data_reduction_proxy*=jeremyim@chromium.org
per-file devtools_bridge.gyp=mnaganov@chromium.org
per-file devtools_bridge.gyp=serya@chromium.org
+per-file devtools_http_handler.gyp*=dgozman@chromium.org
+per-file devtools_http_handler.gyp*=pfeldman@chromium.org
+
per-file network_hints*=jar@chromium.org
per-file network_hints*=ttuttle@chromium.org
diff --git a/components/components.gyp b/components/components.gyp
index c5c752d..9327c97 100644
--- a/components/components.gyp
+++ b/components/components.gyp
@@ -88,6 +88,7 @@
'app_modal.gypi',
'browsing_data.gypi',
'cdm.gypi',
+ 'devtools_http_handler.gypi',
'navigation_interception.gypi',
'power.gypi',
'visitedlink.gypi',
diff --git a/components/components_tests.gyp b/components/components_tests.gyp
index a9e46e3..14710fa 100644
--- a/components/components_tests.gyp
+++ b/components/components_tests.gyp
@@ -128,6 +128,9 @@
'device_event_log_unittest_sources': [
'device_event_log/device_event_log_impl_unittest.cc',
],
+ 'devtools_http_handler_unittest_sources': [
+ 'devtools_http_handler/devtools_http_handler_unittest.cc',
+ ],
'dom_distiller_unittest_sources': [
'dom_distiller/content/dom_distiller_viewer_source_unittest.cc',
'dom_distiller/content/web_contents_main_frame_observer_unittest.cc',
@@ -807,6 +810,7 @@
}],
['OS != "ios"', {
'sources': [
+ '<@(devtools_http_handler_unittest_sources)',
'<@(error_page_unittest_sources)',
'<@(navigation_interception_unittest_sources)',
'<@(network_hints_unittest_sources)',
@@ -824,6 +828,7 @@
'components.gyp:autofill_content_renderer',
'components.gyp:autofill_content_test_support',
'components.gyp:data_reduction_proxy_content_browser',
+ 'components.gyp:devtools_http_handler',
'components.gyp:dom_distiller_content',
'components.gyp:error_page_renderer',
'components.gyp:favicon_content',
diff --git a/components/devtools_http_handler.gypi b/components/devtools_http_handler.gypi
new file mode 100644
index 0000000..32f051d
--- /dev/null
+++ b/components/devtools_http_handler.gypi
@@ -0,0 +1,26 @@
+# 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'devtools_http_handler',
+ 'type': 'static_library',
+ 'dependencies': [
+ '../base/base.gyp:base',
+ '../content/content.gyp:content_browser',
+ '../net/net.gyp:net',
+ '../net/net.gyp:http_server',
+ ],
+ 'include_dirs': [
+ '..',
+ ],
+ 'sources': [
+ 'devtools_http_handler/devtools_http_handler.cc',
+ 'devtools_http_handler/devtools_http_handler.h',
+ 'devtools_http_handler/devtools_http_handler_delegate.h',
+ ],
+ },
+ ],
+}
diff --git a/components/devtools_http_handler/BUILD.gn b/components/devtools_http_handler/BUILD.gn
new file mode 100644
index 0000000..61e618e
--- /dev/null
+++ b/components/devtools_http_handler/BUILD.gn
@@ -0,0 +1,30 @@
+# 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.
+
+source_set("devtools_http_handler") {
+ sources = [
+ "devtools_http_handler.cc",
+ "devtools_http_handler.h",
+ "devtools_http_handler_delegate.h",
+ ]
+
+ deps = [
+ "//base",
+ "//content/public/browser",
+ "//net",
+ "//net:http_server",
+ ]
+}
+
+source_set("unit_tests") {
+ testonly = true
+ sources = [
+ "devtools_http_handler_unittest.cc",
+ ]
+
+ deps = [
+ ":devtools_http_handler",
+ "//testing/gtest",
+ ]
+}
diff --git a/components/devtools_http_handler/DEPS b/components/devtools_http_handler/DEPS
new file mode 100644
index 0000000..3bcaf2e
--- /dev/null
+++ b/components/devtools_http_handler/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+ "+content/public/browser",
+ "+content/public/common",
+ "+content/public/test",
+ "+net",
+]
diff --git a/components/devtools_http_handler/OWNERS b/components/devtools_http_handler/OWNERS
new file mode 100644
index 0000000..fe38b0f
--- /dev/null
+++ b/components/devtools_http_handler/OWNERS
@@ -0,0 +1,2 @@
+dgozman@chromium.org
+pfeldman@chromium.org
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/components/devtools_http_handler/devtools_http_handler.cc
index 4cae448..184c039 100644
--- a/content/browser/devtools/devtools_http_handler_impl.cc
+++ b/components/devtools_http_handler/devtools_http_handler.cc
@@ -17,16 +17,13 @@
#include "base/strings/stringprintf.h"
#include "base/threading/thread.h"
#include "base/values.h"
-#include "content/browser/devtools/devtools_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_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_target.h"
-#include "content/public/common/content_client.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/user_agent.h"
-#include "grit/devtools_resources_map.h"
#include "net/base/escape.h"
#include "net/base/io_buffer.h"
#include "net/base/ip_endpoint.h"
@@ -40,7 +37,13 @@
#include "base/android/build_info.h"
#endif
-namespace content {
+using content::BrowserThread;
+using content::DevToolsAgentHost;
+using content::DevToolsAgentHostClient;
+using content::DevToolsManagerDelegate;
+using content::DevToolsTarget;
+
+namespace devtools_http_handler {
namespace {
@@ -68,92 +71,13 @@ const char kTargetDevtoolsFrontendUrlField[] = "devtoolsFrontendUrl";
// added back pressure on the TraceComplete message protocol - crbug.com/456845.
const int32 kSendBufferSizeForDevTools = 256 * 1024 * 1024; // 256Mb
-class DevToolsAgentHostClientImpl;
-class ServerWrapper;
-
-// DevToolsHttpHandlerImpl ---------------------------------------------------
-
-class DevToolsHttpHandlerImpl : public DevToolsHttpHandler {
- public:
- DevToolsHttpHandlerImpl(scoped_ptr<ServerSocketFactory> server_socket_factory,
- const std::string& frontend_url,
- DevToolsHttpHandlerDelegate* delegate,
- const base::FilePath& output_directory);
- ~DevToolsHttpHandlerImpl() override;
-
- void OnJsonRequest(int connection_id,
- const net::HttpServerRequestInfo& info);
- void OnThumbnailRequest(int connection_id, const std::string& target_id);
- void OnDiscoveryPageRequest(int connection_id);
-
- void OnWebSocketRequest(int connection_id,
- const net::HttpServerRequestInfo& info);
- void OnWebSocketMessage(int connection_id, const std::string& data);
- void OnClose(int connection_id);
-
- void ServerStarted(base::Thread* thread,
- ServerWrapper* server_wrapper,
- ServerSocketFactory* socket_factory,
- scoped_ptr<net::IPEndPoint> ip_address);
-
- private:
- // DevToolsHttpHandler implementation.
- GURL GetFrontendURL(const std::string& path) override;
-
- static void OnTargetListReceivedWeak(
- base::WeakPtr<DevToolsHttpHandlerImpl> handler,
- int connection_id,
- const std::string& host,
- const DevToolsManagerDelegate::TargetList& targets);
- void OnTargetListReceived(
- int connection_id,
- const std::string& host,
- const DevToolsManagerDelegate::TargetList& targets);
-
- DevToolsTarget* GetTarget(const std::string& id);
-
- void SendJson(int connection_id,
- net::HttpStatusCode status_code,
- base::Value* value,
- const std::string& message);
- void Send200(int connection_id,
- const std::string& data,
- const std::string& mime_type);
- void Send404(int connection_id);
- void Send500(int connection_id,
- const std::string& message);
- void AcceptWebSocket(int connection_id,
- const net::HttpServerRequestInfo& request);
-
- // Returns the front end url without the host at the beginning.
- std::string GetFrontendURLInternal(const std::string target_id,
- const std::string& host);
-
- base::DictionaryValue* SerializeTarget(const DevToolsTarget& target,
- const std::string& host);
-
- // The thread used by the devtools handler to run server socket.
- base::Thread* thread_;
-
- std::string frontend_url_;
- ServerWrapper* server_wrapper_;
- scoped_ptr<net::IPEndPoint> server_ip_address_;
- typedef std::map<int, DevToolsAgentHostClientImpl*> ConnectionToClientMap;
- ConnectionToClientMap connection_to_client_;
- const scoped_ptr<DevToolsHttpHandlerDelegate> delegate_;
- ServerSocketFactory* socket_factory_;
- typedef std::map<std::string, DevToolsTarget*> TargetMap;
- TargetMap target_map_;
- base::WeakPtrFactory<DevToolsHttpHandlerImpl> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl);
-};
+} // namespace
// ServerWrapper -------------------------------------------------------------
// All methods in this class are only called on handler thread.
class ServerWrapper : net::HttpServer::Delegate {
public:
- ServerWrapper(base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+ ServerWrapper(base::WeakPtr<DevToolsHttpHandler> handler,
scoped_ptr<net::ServerSocket> socket,
const base::FilePath& frontend_dir,
bool bundles_resources);
@@ -187,13 +111,13 @@ class ServerWrapper : net::HttpServer::Delegate {
const std::string& data) override;
void OnClose(int connection_id) override;
- base::WeakPtr<DevToolsHttpHandlerImpl> handler_;
+ base::WeakPtr<DevToolsHttpHandler> handler_;
scoped_ptr<net::HttpServer> server_;
base::FilePath frontend_dir_;
bool bundles_resources_;
};
-ServerWrapper::ServerWrapper(base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+ServerWrapper::ServerWrapper(base::WeakPtr<DevToolsHttpHandler> handler,
scoped_ptr<net::ServerSocket> socket,
const base::FilePath& frontend_dir,
bool bundles_resources)
@@ -262,7 +186,7 @@ void TerminateOnUI(base::Thread* thread,
}
void ServerStartedOnUI(
- base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+ base::WeakPtr<DevToolsHttpHandler> handler,
base::Thread* thread,
ServerWrapper* server_wrapper,
DevToolsHttpHandler::ServerSocketFactory* socket_factory,
@@ -277,7 +201,7 @@ void ServerStartedOnUI(
}
void StartServerOnHandlerThread(
- base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+ base::WeakPtr<DevToolsHttpHandler> handler,
base::Thread* thread,
DevToolsHttpHandler::ServerSocketFactory* server_socket_factory,
const base::FilePath& output_directory,
@@ -310,7 +234,7 @@ void StartServerOnHandlerThread(
}
void StartServerOnFile(
- base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+ base::WeakPtr<DevToolsHttpHandler> handler,
DevToolsHttpHandler::ServerSocketFactory* server_socket_factory,
const base::FilePath& output_directory,
const base::FilePath& frontend_dir,
@@ -400,39 +324,6 @@ static bool TimeComparator(const DevToolsTarget* target1,
return target1->GetLastActivityTime() > target2->GetLastActivityTime();
}
-} // namespace
-
-// DevToolsHttpHandler -------------------------------------------------------
-
-// static
-bool DevToolsHttpHandler::IsSupportedProtocolVersion(
- const std::string& version) {
- return DevToolsAgentHost::IsSupportedProtocolVersion(version);
-}
-
-// static
-int DevToolsHttpHandler::GetFrontendResourceId(const std::string& name) {
- for (size_t i = 0; i < kDevtoolsResourcesSize; ++i) {
- if (name == kDevtoolsResources[i].name)
- return kDevtoolsResources[i].value;
- }
- return -1;
-}
-
-// static
-DevToolsHttpHandler* DevToolsHttpHandler::Start(
- scoped_ptr<ServerSocketFactory> server_socket_factory,
- const std::string& frontend_url,
- DevToolsHttpHandlerDelegate* delegate,
- const base::FilePath& active_port_output_directory) {
- DevToolsHttpHandlerImpl* http_handler =
- new DevToolsHttpHandlerImpl(server_socket_factory.Pass(),
- frontend_url,
- delegate,
- active_port_output_directory);
- return http_handler;
-}
-
// DevToolsHttpHandler::ServerSocketFactory ----------------------------------
scoped_ptr<net::ServerSocket>
@@ -446,15 +337,15 @@ DevToolsHttpHandler::ServerSocketFactory::CreateForTethering(
return scoped_ptr<net::ServerSocket>();
}
-// DevToolsHttpHandlerImpl ---------------------------------------------------
+// DevToolsHttpHandler -------------------------------------------------------
-DevToolsHttpHandlerImpl::~DevToolsHttpHandlerImpl() {
+DevToolsHttpHandler::~DevToolsHttpHandler() {
TerminateOnUI(thread_, server_wrapper_, socket_factory_);
STLDeleteValues(&target_map_);
STLDeleteValues(&connection_to_client_);
}
-GURL DevToolsHttpHandlerImpl::GetFrontendURL(const std::string& path) {
+GURL DevToolsHttpHandler::GetFrontendURL(const std::string& path) {
if (!server_ip_address_)
return GURL();
return GURL(std::string("http://") + server_ip_address_->ToString() +
@@ -497,7 +388,7 @@ void ServerWrapper::OnHttpRequest(int connection_id,
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
- base::Bind(&DevToolsHttpHandlerImpl::OnJsonRequest,
+ base::Bind(&DevToolsHttpHandler::OnJsonRequest,
handler_,
connection_id,
info));
@@ -510,7 +401,7 @@ void ServerWrapper::OnHttpRequest(int connection_id,
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
- base::Bind(&DevToolsHttpHandlerImpl::OnThumbnailRequest,
+ base::Bind(&DevToolsHttpHandler::OnThumbnailRequest,
handler_,
connection_id,
target_id));
@@ -522,7 +413,7 @@ void ServerWrapper::OnHttpRequest(int connection_id,
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
- base::Bind(&DevToolsHttpHandlerImpl::OnDiscoveryPageRequest,
+ base::Bind(&DevToolsHttpHandler::OnDiscoveryPageRequest,
handler_,
connection_id));
return;
@@ -543,14 +434,16 @@ void ServerWrapper::OnHttpRequest(int connection_id,
server_->Send200(connection_id, data, mime_type);
return;
}
+
if (bundles_resources_) {
- int resource_id = DevToolsHttpHandler::GetFrontendResourceId(filename);
- if (resource_id != -1) {
- base::StringPiece data = GetContentClient()->GetDataResource(
- resource_id, ui::SCALE_FACTOR_NONE);
- server_->Send200(connection_id, data.as_string(), mime_type);
- return;
- }
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&DevToolsHttpHandler::OnFrontendResourceRequest,
+ handler_,
+ connection_id,
+ filename));
+ return;
}
server_->Send404(connection_id);
}
@@ -562,7 +455,7 @@ void ServerWrapper::OnWebSocketRequest(
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpHandlerImpl::OnWebSocketRequest,
+ &DevToolsHttpHandler::OnWebSocketRequest,
handler_,
connection_id,
request));
@@ -574,7 +467,7 @@ void ServerWrapper::OnWebSocketMessage(int connection_id,
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpHandlerImpl::OnWebSocketMessage,
+ &DevToolsHttpHandler::OnWebSocketMessage,
handler_,
connection_id,
data));
@@ -585,12 +478,12 @@ void ServerWrapper::OnClose(int connection_id) {
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpHandlerImpl::OnClose,
+ &DevToolsHttpHandler::OnClose,
handler_,
connection_id));
}
-std::string DevToolsHttpHandlerImpl::GetFrontendURLInternal(
+std::string DevToolsHttpHandler::GetFrontendURLInternal(
const std::string id,
const std::string& host) {
return base::StringPrintf(
@@ -627,7 +520,7 @@ static bool ParseJsonPath(
return true;
}
-void DevToolsHttpHandlerImpl::OnJsonRequest(
+void DevToolsHttpHandler::OnJsonRequest(
int connection_id,
const net::HttpServerRequestInfo& info) {
// Trim /json
@@ -659,9 +552,9 @@ void DevToolsHttpHandlerImpl::OnJsonRequest(
base::DictionaryValue version;
version.SetString("Protocol-Version",
DevToolsAgentHost::GetProtocolVersion().c_str());
- version.SetString("WebKit-Version", GetWebKitVersion());
- version.SetString("Browser", GetContentClient()->GetProduct());
- version.SetString("User-Agent", GetContentClient()->GetUserAgent());
+ version.SetString("WebKit-Version", content::GetWebKitVersion());
+ version.SetString("Browser", product_name_);
+ version.SetString("User-Agent", user_agent_);
#if defined(OS_ANDROID)
version.SetString("Android-Package",
base::android::BuildInfo::GetInstance()->package_name());
@@ -672,11 +565,9 @@ void DevToolsHttpHandlerImpl::OnJsonRequest(
if (command == "list") {
std::string host = info.headers["host"];
- DevToolsManagerDelegate* manager_delegate =
- DevToolsManager::GetInstance()->delegate();
- if (manager_delegate) {
- manager_delegate->EnumerateTargets(
- base::Bind(&DevToolsHttpHandlerImpl::OnTargetListReceivedWeak,
+ if (manager_delegate_) {
+ manager_delegate_->EnumerateTargets(
+ base::Bind(&DevToolsHttpHandler::OnTargetListReceivedWeak,
weak_factory_.GetWeakPtr(), connection_id, host));
} else {
DevToolsManagerDelegate::TargetList empty_list;
@@ -691,10 +582,8 @@ void DevToolsHttpHandlerImpl::OnJsonRequest(
if (!url.is_valid())
url = GURL(url::kAboutBlankURL);
scoped_ptr<DevToolsTarget> target;
- DevToolsManagerDelegate* manager_delegate =
- DevToolsManager::GetInstance()->delegate();
- if (manager_delegate)
- target = manager_delegate->CreateNewTarget(url);
+ if (manager_delegate_)
+ target = manager_delegate_->CreateNewTarget(url);
if (!target) {
SendJson(connection_id,
net::HTTP_INTERNAL_SERVER_ERROR,
@@ -753,8 +642,8 @@ void DevToolsHttpHandlerImpl::OnJsonRequest(
}
// static
-void DevToolsHttpHandlerImpl::OnTargetListReceivedWeak(
- base::WeakPtr<DevToolsHttpHandlerImpl> handler,
+void DevToolsHttpHandler::OnTargetListReceivedWeak(
+ base::WeakPtr<DevToolsHttpHandler> handler,
int connection_id,
const std::string& host,
const DevToolsManagerDelegate::TargetList& targets) {
@@ -765,7 +654,7 @@ void DevToolsHttpHandlerImpl::OnTargetListReceivedWeak(
}
}
-void DevToolsHttpHandlerImpl::OnTargetListReceived(
+void DevToolsHttpHandler::OnTargetListReceived(
int connection_id,
const std::string& host,
const DevToolsManagerDelegate::TargetList& targets) {
@@ -783,35 +672,40 @@ void DevToolsHttpHandlerImpl::OnTargetListReceived(
SendJson(connection_id, net::HTTP_OK, &list_value, std::string());
}
-DevToolsTarget* DevToolsHttpHandlerImpl::GetTarget(const std::string& id) {
+DevToolsTarget* DevToolsHttpHandler::GetTarget(const std::string& id) {
TargetMap::const_iterator it = target_map_.find(id);
if (it == target_map_.end())
return NULL;
return it->second;
}
-void DevToolsHttpHandlerImpl::OnThumbnailRequest(
+void DevToolsHttpHandler::OnThumbnailRequest(
int connection_id, const std::string& target_id) {
DevToolsTarget* target = GetTarget(target_id);
GURL page_url;
if (target)
page_url = target->GetURL();
- DevToolsManagerDelegate* manager_delegate =
- DevToolsManager::GetInstance()->delegate();
- std::string data =
- manager_delegate ? manager_delegate->GetPageThumbnailData(page_url) : "";
+ std::string data = manager_delegate_ ?
+ manager_delegate_->GetPageThumbnailData(page_url) : "";
if (!data.empty())
Send200(connection_id, data, "image/png");
else
Send404(connection_id);
}
-void DevToolsHttpHandlerImpl::OnDiscoveryPageRequest(int connection_id) {
+void DevToolsHttpHandler::OnDiscoveryPageRequest(int connection_id) {
std::string response = delegate_->GetDiscoveryPageHTML();
Send200(connection_id, response, "text/html; charset=UTF-8");
}
-void DevToolsHttpHandlerImpl::OnWebSocketRequest(
+void DevToolsHttpHandler::OnFrontendResourceRequest(
+ int connection_id, const std::string& path) {
+ Send200(connection_id,
+ delegate_->GetFrontendResource(path),
+ GetMimeType(path));
+}
+
+void DevToolsHttpHandler::OnWebSocketRequest(
int connection_id,
const net::HttpServerRequestInfo& request) {
if (!thread_)
@@ -859,7 +753,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest(
AcceptWebSocket(connection_id, request);
}
-void DevToolsHttpHandlerImpl::OnWebSocketMessage(
+void DevToolsHttpHandler::OnWebSocketMessage(
int connection_id,
const std::string& data) {
ConnectionToClientMap::iterator it =
@@ -868,7 +762,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketMessage(
it->second->OnMessage(data);
}
-void DevToolsHttpHandlerImpl::OnClose(int connection_id) {
+void DevToolsHttpHandler::OnClose(int connection_id) {
ConnectionToClientMap::iterator it =
connection_to_client_.find(connection_id);
if (it != connection_to_client_.end()) {
@@ -877,17 +771,25 @@ void DevToolsHttpHandlerImpl::OnClose(int connection_id) {
}
}
-DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
+DevToolsHttpHandler::DevToolsHttpHandler(
scoped_ptr<ServerSocketFactory> server_socket_factory,
const std::string& frontend_url,
DevToolsHttpHandlerDelegate* delegate,
- const base::FilePath& output_directory)
+ DevToolsManagerDelegate* manager_delegate,
+ const base::FilePath& output_directory,
+ const base::FilePath& debug_frontend_dir,
+ const std::string& product_name,
+ const std::string& user_agent)
: thread_(nullptr),
frontend_url_(frontend_url),
+ product_name_(product_name),
+ user_agent_(user_agent),
server_wrapper_(nullptr),
delegate_(delegate),
+ manager_delegate_(manager_delegate),
socket_factory_(nullptr),
weak_factory_(this) {
+ bool bundles_resources = frontend_url_.empty();
if (frontend_url_.empty())
frontend_url_ = "/devtools/inspector.html";
@@ -897,11 +799,11 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
weak_factory_.GetWeakPtr(),
server_socket_factory.release(),
output_directory,
- delegate_->GetDebugFrontendDir(),
- delegate_->BundlesFrontendResources()));
+ debug_frontend_dir,
+ bundles_resources));
}
-void DevToolsHttpHandlerImpl::ServerStarted(
+void DevToolsHttpHandler::ServerStarted(
base::Thread* thread,
ServerWrapper* server_wrapper,
ServerSocketFactory* socket_factory,
@@ -926,15 +828,16 @@ void ServerWrapper::WriteActivePortToUserProfile(
// so Telemetry can pick it up.
base::FilePath path = output_directory.Append(kDevToolsActivePortFileName);
std::string port_string = base::IntToString(endpoint.port());
- if (base::WriteFile(path, port_string.c_str(), port_string.length()) < 0) {
+ if (base::WriteFile(path, port_string.c_str(),
+ static_cast<int>(port_string.length())) < 0) {
LOG(ERROR) << "Error writing DevTools active port to file";
}
}
-void DevToolsHttpHandlerImpl::SendJson(int connection_id,
- net::HttpStatusCode status_code,
- base::Value* value,
- const std::string& message) {
+void DevToolsHttpHandler::SendJson(int connection_id,
+ net::HttpStatusCode status_code,
+ base::Value* value,
+ const std::string& message) {
if (!thread_)
return;
@@ -960,9 +863,9 @@ void DevToolsHttpHandlerImpl::SendJson(int connection_id,
response));
}
-void DevToolsHttpHandlerImpl::Send200(int connection_id,
- const std::string& data,
- const std::string& mime_type) {
+void DevToolsHttpHandler::Send200(int connection_id,
+ const std::string& data,
+ const std::string& mime_type) {
if (!thread_)
return;
thread_->message_loop()->PostTask(
@@ -974,7 +877,7 @@ void DevToolsHttpHandlerImpl::Send200(int connection_id,
mime_type));
}
-void DevToolsHttpHandlerImpl::Send404(int connection_id) {
+void DevToolsHttpHandler::Send404(int connection_id) {
if (!thread_)
return;
thread_->message_loop()->PostTask(
@@ -984,8 +887,8 @@ void DevToolsHttpHandlerImpl::Send404(int connection_id) {
connection_id));
}
-void DevToolsHttpHandlerImpl::Send500(int connection_id,
- const std::string& message) {
+void DevToolsHttpHandler::Send500(int connection_id,
+ const std::string& message) {
if (!thread_)
return;
thread_->message_loop()->PostTask(
@@ -996,7 +899,7 @@ void DevToolsHttpHandlerImpl::Send500(int connection_id,
message));
}
-void DevToolsHttpHandlerImpl::AcceptWebSocket(
+void DevToolsHttpHandler::AcceptWebSocket(
int connection_id,
const net::HttpServerRequestInfo& request) {
if (!thread_)
@@ -1009,7 +912,7 @@ void DevToolsHttpHandlerImpl::AcceptWebSocket(
request));
}
-base::DictionaryValue* DevToolsHttpHandlerImpl::SerializeTarget(
+base::DictionaryValue* DevToolsHttpHandler::SerializeTarget(
const DevToolsTarget& target,
const std::string& host) {
base::DictionaryValue* dictionary = new base::DictionaryValue;
@@ -1031,10 +934,8 @@ base::DictionaryValue* DevToolsHttpHandlerImpl::SerializeTarget(
if (favicon_url.is_valid())
dictionary->SetString(kTargetFaviconUrlField, favicon_url.spec());
- DevToolsManagerDelegate* manager_delegate =
- DevToolsManager::GetInstance()->delegate();
- if (manager_delegate &&
- !manager_delegate->GetPageThumbnailData(url).empty()) {
+ if (manager_delegate_ &&
+ !manager_delegate_->GetPageThumbnailData(url).empty()) {
dictionary->SetString(kTargetThumbnailUrlField,
std::string(kThumbUrlPrefix) + id);
}
@@ -1055,4 +956,4 @@ base::DictionaryValue* DevToolsHttpHandlerImpl::SerializeTarget(
return dictionary;
}
-} // namespace content
+} // namespace devtools_http_handler
diff --git a/components/devtools_http_handler/devtools_http_handler.h b/components/devtools_http_handler/devtools_http_handler.h
new file mode 100644
index 0000000..23a6773
--- /dev/null
+++ b/components/devtools_http_handler/devtools_http_handler.h
@@ -0,0 +1,160 @@
+// Copyright (c) 2012 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_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_H_
+#define COMPONENTS_DEVTOOLS_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_H_
+
+#include <map>
+#include <string>
+
+#include "base/files/file_path.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/public/browser/devtools_manager_delegate.h"
+#include "net/http/http_status_code.h"
+
+class GURL;
+
+namespace base {
+class Thread;
+class Value;
+}
+
+namespace net {
+class IPEndPoint;
+class HttpServerRequestInfo;
+class ServerSocket;
+}
+
+namespace devtools_http_handler {
+
+class DevToolsAgentHostClientImpl;
+class DevToolsHttpHandlerDelegate;
+class ServerWrapper;
+
+// This class is used for managing DevTools remote debugging server.
+// Clients can connect to the specified ip:port and start debugging
+// this browser.
+class DevToolsHttpHandler {
+ public:
+
+ // Factory of net::ServerSocket. This is to separate instantiating dev tools
+ // and instantiating server sockets.
+ // All methods including destructor are called on a separate thread
+ // different from any BrowserThread instance.
+ class ServerSocketFactory {
+ public:
+ virtual ~ServerSocketFactory() {}
+
+ // Returns a new instance of ServerSocket or nullptr if an error occurred.
+ virtual scoped_ptr<net::ServerSocket> CreateForHttpServer();
+
+ // Creates a named socket for reversed tethering implementation (used with
+ // remote debugging, primarily for mobile).
+ virtual scoped_ptr<net::ServerSocket> CreateForTethering(
+ std::string* out_name);
+ };
+
+ // Takes ownership over |socket_factory| and |delegate|.
+ // If |frontend_url| is empty, assumes it's bundled, and uses
+ // |delegate->GetFrontendResource()|.
+ // |delegate| is only accessed on UI thread.
+ // If |active_port_output_directory| is non-empty, it is assumed the
+ // socket_factory was initialized with an ephemeral port (0). The
+ // port selected by the OS will be written to a well-known file in
+ // the output directory.
+ // TODO(dgozman): remove |manager_delegate| by moving targets to another
+ // component (http://crbug.com/476496).
+ DevToolsHttpHandler(
+ scoped_ptr<ServerSocketFactory> server_socket_factory,
+ const std::string& frontend_url,
+ DevToolsHttpHandlerDelegate* delegate,
+ content::DevToolsManagerDelegate* manager_delegate,
+ const base::FilePath& active_port_output_directory,
+ const base::FilePath& debug_frontend_dir,
+ const std::string& product_name,
+ const std::string& user_agent);
+ ~DevToolsHttpHandler();
+
+ // Returns the URL for the file at |path| in frontend.
+ GURL GetFrontendURL(const std::string& path);
+
+ private:
+ friend class ServerWrapper;
+ friend void ServerStartedOnUI(
+ base::WeakPtr<DevToolsHttpHandler> handler,
+ base::Thread* thread,
+ ServerWrapper* server_wrapper,
+ DevToolsHttpHandler::ServerSocketFactory* socket_factory,
+ scoped_ptr<net::IPEndPoint> ip_address);
+
+ void OnJsonRequest(int connection_id,
+ const net::HttpServerRequestInfo& info);
+ void OnThumbnailRequest(int connection_id, const std::string& target_id);
+ void OnDiscoveryPageRequest(int connection_id);
+ void OnFrontendResourceRequest(int connection_id, const std::string& path);
+ void OnWebSocketRequest(int connection_id,
+ const net::HttpServerRequestInfo& info);
+ void OnWebSocketMessage(int connection_id, const std::string& data);
+ void OnClose(int connection_id);
+
+ void ServerStarted(base::Thread* thread,
+ ServerWrapper* server_wrapper,
+ ServerSocketFactory* socket_factory,
+ scoped_ptr<net::IPEndPoint> ip_address);
+
+ static void OnTargetListReceivedWeak(
+ base::WeakPtr<DevToolsHttpHandler> handler,
+ int connection_id,
+ const std::string& host,
+ const content::DevToolsManagerDelegate::TargetList& targets);
+ void OnTargetListReceived(
+ int connection_id,
+ const std::string& host,
+ const content::DevToolsManagerDelegate::TargetList& targets);
+
+ content::DevToolsTarget* GetTarget(const std::string& id);
+
+ void SendJson(int connection_id,
+ net::HttpStatusCode status_code,
+ base::Value* value,
+ const std::string& message);
+ void Send200(int connection_id,
+ const std::string& data,
+ const std::string& mime_type);
+ void Send404(int connection_id);
+ void Send500(int connection_id,
+ const std::string& message);
+ void AcceptWebSocket(int connection_id,
+ const net::HttpServerRequestInfo& request);
+
+ // Returns the front end url without the host at the beginning.
+ std::string GetFrontendURLInternal(const std::string target_id,
+ const std::string& host);
+
+ base::DictionaryValue* SerializeTarget(const content::DevToolsTarget& target,
+ const std::string& host);
+
+ // The thread used by the devtools handler to run server socket.
+ base::Thread* thread_;
+ std::string frontend_url_;
+ std::string product_name_;
+ std::string user_agent_;
+ ServerWrapper* server_wrapper_;
+ scoped_ptr<net::IPEndPoint> server_ip_address_;
+ typedef std::map<int, DevToolsAgentHostClientImpl*> ConnectionToClientMap;
+ ConnectionToClientMap connection_to_client_;
+ const scoped_ptr<DevToolsHttpHandlerDelegate> delegate_;
+ content::DevToolsManagerDelegate* manager_delegate_;
+ ServerSocketFactory* socket_factory_;
+ typedef std::map<std::string, content::DevToolsTarget*> TargetMap;
+ TargetMap target_map_;
+ base::WeakPtrFactory<DevToolsHttpHandler> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandler);
+};
+
+} // namespace devtools_http_handler
+
+#endif // COMPONENTS_DEVTOOLS_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_H_
diff --git a/components/devtools_http_handler/devtools_http_handler_delegate.h b/components/devtools_http_handler/devtools_http_handler_delegate.h
new file mode 100644
index 0000000..83235ae
--- /dev/null
+++ b/components/devtools_http_handler/devtools_http_handler_delegate.h
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 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_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
+#define COMPONENTS_DEVTOOLS_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
+
+#include <string>
+
+#include "base/files/file_path.h"
+
+namespace devtools_http_handler {
+
+class DevToolsHttpHandlerDelegate {
+ public:
+ virtual ~DevToolsHttpHandlerDelegate() {}
+
+ // Should return discovery page HTML that should list available tabs
+ // and provide attach links.
+ virtual std::string GetDiscoveryPageHTML() = 0;
+
+ // Returns frontend resource data by |path|. Only used if
+ // |BundlesFrontendResources| returns |true|.
+ virtual std::string GetFrontendResource(const std::string& path) = 0;
+};
+
+} // namespace devtools_http_handler
+
+#endif // COMPONENTS_DEVTOOLS_HTTP_HANDLER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
diff --git a/content/browser/devtools/devtools_http_handler_unittest.cc b/components/devtools_http_handler/devtools_http_handler_unittest.cc
index e8c131b..6b794c2 100644
--- a/content/browser/devtools/devtools_http_handler_unittest.cc
+++ b/components/devtools_http_handler/devtools_http_handler_unittest.cc
@@ -7,17 +7,19 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
-#include "content/browser/browser_thread_impl.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_target.h"
+#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h"
#include "net/socket/server_socket.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace content {
+using content::BrowserThread;
+
+namespace devtools_http_handler {
namespace {
const uint16 kDummyPort = 4321;
@@ -65,7 +67,7 @@ class DummyServerSocketFactory
protected:
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
- base::MessageLoopProxy::current()->PostTask(FROM_HERE,
+ base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(&QuitFromHandlerThread, quit_closure_1_));
return scoped_ptr<net::ServerSocket>(new DummyServerSocket());
}
@@ -83,7 +85,7 @@ class FailingServerSocketFactory : public DummyServerSocketFactory {
private:
scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
- base::MessageLoopProxy::current()->PostTask(FROM_HERE,
+ base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(&QuitFromHandlerThread, quit_closure_1_));
return scoped_ptr<net::ServerSocket>();
}
@@ -93,31 +95,53 @@ class DummyDelegate : public DevToolsHttpHandlerDelegate {
public:
std::string GetDiscoveryPageHTML() override { return std::string(); }
- bool BundlesFrontendResources() override { return true; }
+ std::string GetFrontendResource(const std::string& path) override {
+ return std::string();
+ }
+};
+
+class DummyManagerDelegate : public content::DevToolsManagerDelegate {
+ public:
+ ~DummyManagerDelegate() override {}
+
+ void Inspect(content::BrowserContext* browser_context,
+ content::DevToolsAgentHost* agent_host) override {}
+
+ void DevToolsAgentStateChanged(content::DevToolsAgentHost* agent_host,
+ bool attached) override {}
+
+ base::DictionaryValue* HandleCommand(
+ content::DevToolsAgentHost* agent_host,
+ base::DictionaryValue* command) override {
+ return NULL;
+ }
- base::FilePath GetDebugFrontendDir() override { return base::FilePath(); }
+ scoped_ptr<content::DevToolsTarget> CreateNewTarget(
+ const GURL& url) override {
+ return scoped_ptr<content::DevToolsTarget>();
+ }
+
+ void EnumerateTargets(TargetCallback callback) override {
+ TargetList result;
+ callback.Run(result);
+ }
+
+ std::string GetPageThumbnailData(const GURL& url) override {
+ return std::string();
+ }
};
}
class DevToolsHttpHandlerTest : public testing::Test {
public:
- DevToolsHttpHandlerTest()
- : ui_thread_(BrowserThread::UI, &message_loop_) {
- }
+ DevToolsHttpHandlerTest() : testing::Test() { }
protected:
- void SetUp() override {
- file_thread_.reset(new BrowserThreadImpl(BrowserThread::FILE));
- file_thread_->Start();
- }
-
- void TearDown() override { file_thread_->Stop(); }
+ DummyManagerDelegate manager_delegate_;
private:
- base::MessageLoopForIO message_loop_;
- BrowserThreadImpl ui_thread_;
- scoped_ptr<BrowserThreadImpl> file_thread_;
+ content::TestBrowserThreadBundle thread_bundle_;
};
TEST_F(DevToolsHttpHandlerTest, TestStartStop) {
@@ -125,11 +149,15 @@ TEST_F(DevToolsHttpHandlerTest, TestStartStop) {
scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
new DummyServerSocketFactory(run_loop.QuitClosure(),
run_loop_2.QuitClosure()));
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler(
- content::DevToolsHttpHandler::Start(factory.Pass(),
- std::string(),
- new DummyDelegate(),
- base::FilePath()));
+ scoped_ptr<DevToolsHttpHandler> devtools_http_handler(
+ new DevToolsHttpHandler(factory.Pass(),
+ std::string(),
+ new DummyDelegate(),
+ &manager_delegate_,
+ base::FilePath(),
+ base::FilePath(),
+ std::string(),
+ std::string()));
// Our dummy socket factory will post a quit message once the server will
// become ready.
run_loop.Run();
@@ -143,11 +171,15 @@ TEST_F(DevToolsHttpHandlerTest, TestServerSocketFailed) {
scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
new FailingServerSocketFactory(run_loop.QuitClosure(),
run_loop_2.QuitClosure()));
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler(
- content::DevToolsHttpHandler::Start(factory.Pass(),
- std::string(),
- new DummyDelegate(),
- base::FilePath()));
+ scoped_ptr<DevToolsHttpHandler> devtools_http_handler(
+ new DevToolsHttpHandler(factory.Pass(),
+ std::string(),
+ new DummyDelegate(),
+ &manager_delegate_,
+ base::FilePath(),
+ base::FilePath(),
+ std::string(),
+ std::string()));
// Our dummy socket factory will post a quit message once the server will
// become ready.
run_loop.Run();
@@ -168,11 +200,15 @@ TEST_F(DevToolsHttpHandlerTest, TestDevToolsActivePort) {
scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
new DummyServerSocketFactory(run_loop.QuitClosure(),
run_loop_2.QuitClosure()));
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler(
- content::DevToolsHttpHandler::Start(factory.Pass(),
- std::string(),
- new DummyDelegate(),
- temp_dir.path()));
+ scoped_ptr<DevToolsHttpHandler> devtools_http_handler(
+ new DevToolsHttpHandler(factory.Pass(),
+ std::string(),
+ new DummyDelegate(),
+ &manager_delegate_,
+ temp_dir.path(),
+ base::FilePath(),
+ std::string(),
+ std::string()));
// Our dummy socket factory will post a quit message once the server will
// become ready.
run_loop.Run();
@@ -192,4 +228,4 @@ TEST_F(DevToolsHttpHandlerTest, TestDevToolsActivePort) {
EXPECT_EQ(static_cast<int>(kDummyPort), port);
}
-} // namespace content
+} // namespace devtools_http_handler
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 0198b51..b8066cb 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -106,7 +106,6 @@ source_set("browser") {
"//content/common:mojo_bindings",
"//content/public/common:mojo_bindings",
"//device/bluetooth",
- "//net:http_server",
"//storage/browser",
"//storage/common",
"//third_party/WebKit/public:image_resources",
diff --git a/content/browser/devtools/devtools_frontend_host_impl.cc b/content/browser/devtools/devtools_frontend_host_impl.cc
index a25daee..712a9c9 100644
--- a/content/browser/devtools/devtools_frontend_host_impl.cc
+++ b/content/browser/devtools/devtools_frontend_host_impl.cc
@@ -9,6 +9,8 @@
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_client.h"
+#include "grit/devtools_resources_map.h"
namespace content {
@@ -19,6 +21,18 @@ DevToolsFrontendHost* DevToolsFrontendHost::Create(
return new DevToolsFrontendHostImpl(frontend_main_frame, delegate);
}
+// static
+base::StringPiece DevToolsFrontendHost::GetFrontendResource(
+ const std::string& path) {
+ for (size_t i = 0; i < kDevtoolsResourcesSize; ++i) {
+ if (path == kDevtoolsResources[i].name) {
+ return GetContentClient()->GetDataResource(
+ kDevtoolsResources[i].value, ui::SCALE_FACTOR_NONE);
+ }
+ }
+ return std::string();
+}
+
DevToolsFrontendHostImpl::DevToolsFrontendHostImpl(
RenderFrameHost* frontend_main_frame,
DevToolsFrontendHost::Delegate* delegate)
diff --git a/content/browser/devtools/protocol/tethering_handler.cc b/content/browser/devtools/protocol/tethering_handler.cc
index 291a132..b8b3e3f 100644
--- a/content/browser/devtools/protocol/tethering_handler.cc
+++ b/content/browser/devtools/protocol/tethering_handler.cc
@@ -5,7 +5,6 @@
#include "content/browser/devtools/protocol/tethering_handler.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/socket/server_socket.h"
diff --git a/content/browser/devtools/protocol/tethering_handler.h b/content/browser/devtools/protocol/tethering_handler.h
index 6be8a0a..04bf690 100644
--- a/content/browser/devtools/protocol/tethering_handler.h
+++ b/content/browser/devtools/protocol/tethering_handler.h
@@ -8,7 +8,10 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop_proxy.h"
#include "content/browser/devtools/protocol/devtools_protocol_handler.h"
-#include "content/public/browser/devtools_http_handler.h"
+
+namespace net {
+class ServerSocket;
+}
namespace content {
namespace devtools {
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 65500f8..3a2c4f6 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -112,8 +112,6 @@
'public/browser/devtools_external_agent_proxy.h',
'public/browser/devtools_external_agent_proxy_delegate.h',
'public/browser/devtools_frontend_host.h',
- 'public/browser/devtools_http_handler.h',
- 'public/browser/devtools_http_handler_delegate.h',
'public/browser/devtools_manager_delegate.h',
'public/browser/devtools_target.h',
'public/browser/dom_operation_notification_details.h',
@@ -530,7 +528,6 @@
'browser/devtools/devtools_frame_trace_recorder.h',
'browser/devtools/devtools_frontend_host_impl.cc',
'browser/devtools/devtools_frontend_host_impl.h',
- 'browser/devtools/devtools_http_handler_impl.cc',
'browser/devtools/devtools_manager.cc',
'browser/devtools/devtools_manager.h',
'browser/devtools/devtools_netlog_observer.cc',
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 5df6def..4931f11 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -47,6 +47,7 @@
'../cc/blink/cc_blink.gyp:cc_blink',
'../cc/cc.gyp:cc',
'../components/components.gyp:crash_component_breakpad_mac_to_be_deleted',
+ '../components/components.gyp:devtools_http_handler',
'../components/components.gyp:web_cache_renderer',
'../device/bluetooth/bluetooth.gyp:device_bluetooth',
'../gin/gin.gyp:gin',
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index f570627..b818d10 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -358,7 +358,6 @@
'browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc',
'browser/device_sensors/sensor_manager_android_unittest.cc',
'browser/device_sensors/sensor_manager_chromeos_unittest.cc',
- 'browser/devtools/devtools_http_handler_unittest.cc',
'browser/devtools/devtools_manager_unittest.cc',
'browser/devtools/shared_worker_devtools_manager_unittest.cc',
'browser/dom_storage/dom_storage_area_unittest.cc',
diff --git a/content/public/browser/devtools_frontend_host.h b/content/public/browser/devtools_frontend_host.h
index c00f111..05d6ab1 100644
--- a/content/public/browser/devtools_frontend_host.h
+++ b/content/public/browser/devtools_frontend_host.h
@@ -7,6 +7,7 @@
#include <string>
+#include "base/strings/string_piece.h"
#include "content/common/content_export.h"
namespace content {
@@ -44,6 +45,11 @@ class DevToolsFrontendHost {
CONTENT_EXPORT virtual ~DevToolsFrontendHost() {}
CONTENT_EXPORT virtual void BadMessageRecieved() {}
+
+ // Returns bundled DevTools frontend resource by |path|. Returns empty string
+ // if |path| does not correspond to any frontend resource.
+ CONTENT_EXPORT static base::StringPiece GetFrontendResource(
+ const std::string& path);
};
} // namespace content
diff --git a/content/public/browser/devtools_http_handler.h b/content/public/browser/devtools_http_handler.h
deleted file mode 100644
index a61901b..0000000
--- a/content/public/browser/devtools_http_handler.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
-#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
-
-#include <string>
-
-#include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "content/common/content_export.h"
-
-class GURL;
-
-namespace net {
-class ServerSocket;
-}
-
-namespace content {
-
-class DevToolsHttpHandlerDelegate;
-
-// This class is used for managing DevTools remote debugging server.
-// Clients can connect to the specified ip:port and start debugging
-// this browser.
-class DevToolsHttpHandler {
- public:
-
- // Factory of net::ServerSocket. This is to separate instantiating dev tools
- // and instantiating server sockets.
- // All methods including destructor are called on a separate thread
- // different from any BrowserThread instance.
- class CONTENT_EXPORT ServerSocketFactory {
- public:
- virtual ~ServerSocketFactory() {}
-
- // Returns a new instance of ServerSocket or nullptr if an error occurred.
- virtual scoped_ptr<net::ServerSocket> CreateForHttpServer();
-
- // Creates a named socket for reversed tethering implementation (used with
- // remote debugging, primarily for mobile).
- virtual scoped_ptr<net::ServerSocket> CreateForTethering(
- std::string* out_name);
- };
-
- // Returns true if the given protocol version is supported.
- CONTENT_EXPORT static bool IsSupportedProtocolVersion(
- const std::string& version);
-
- // Returns frontend resource id for the given resource |name|.
- CONTENT_EXPORT static int GetFrontendResourceId(
- const std::string& name);
-
- // Takes ownership over |socket_factory| and |delegate|.
- // If |active_port_output_directory| is non-empty, it is assumed the
- // socket_factory was initialized with an ephemeral port (0). The
- // port selected by the OS will be written to a well-known file in
- // the output directory.
- CONTENT_EXPORT static DevToolsHttpHandler* Start(
- scoped_ptr<ServerSocketFactory> server_socket_factory,
- const std::string& frontend_url,
- DevToolsHttpHandlerDelegate* delegate,
- const base::FilePath& active_port_output_directory);
-
- // Returns the URL for the file at |path| in frontend.
- virtual GURL GetFrontendURL(const std::string& path) = 0;
-
- virtual ~DevToolsHttpHandler() {}
-};
-
-} // namespace content
-
-#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
diff --git a/content/public/browser/devtools_http_handler_delegate.h b/content/public/browser/devtools_http_handler_delegate.h
deleted file mode 100644
index 4f96413..0000000
--- a/content/public/browser/devtools_http_handler_delegate.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
-#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
-
-#include <string>
-#include <vector>
-
-#include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "net/socket/server_socket.h"
-
-namespace content {
-
-class DevToolsTarget;
-
-class DevToolsHttpHandlerDelegate {
- public:
- virtual ~DevToolsHttpHandlerDelegate() {}
-
- // Should return discovery page HTML that should list available tabs
- // and provide attach links.
- virtual std::string GetDiscoveryPageHTML() = 0;
-
- // Returns true if and only if frontend resources are bundled.
- virtual bool BundlesFrontendResources() = 0;
-
- // Returns path to the front-end files on the local filesystem for debugging.
- virtual base::FilePath GetDebugFrontendDir() = 0;
-};
-
-} // namespace content
-
-#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index 1bdf80b..e1d9b11 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -249,6 +249,7 @@ static_library("content_shell_lib") {
"//base/third_party/dynamic_annotations",
"//cc",
"//components/crash/app",
+ "//components/devtools_http_handler",
"//components/web_cache/renderer",
"//content:resources",
"//content/app/resources",
diff --git a/content/shell/DEPS b/content/shell/DEPS
index 3dfeb6b..44638c3 100644
--- a/content/shell/DEPS
+++ b/content/shell/DEPS
@@ -24,6 +24,7 @@ include_rules = [
"+ui/views",
"+components/crash",
+ "+components/devtools_http_handler",
# For enabling media related features.
"+media/base/media_switches.h",
diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/browser/shell_browser_main_parts.cc
index efc029e..750d70e 100644
--- a/content/shell/browser/shell_browser_main_parts.cc
+++ b/content/shell/browser/shell_browser_main_parts.cc
@@ -11,8 +11,8 @@
#include "base/message_loop/message_loop.h"
#include "base/threading/thread.h"
#include "base/threading/thread_restrictions.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/main_function_params.h"
diff --git a/content/shell/browser/shell_browser_main_parts.h b/content/shell/browser/shell_browser_main_parts.h
index f517b6e..5dc117e 100644
--- a/content/shell/browser/shell_browser_main_parts.h
+++ b/content/shell/browser/shell_browser_main_parts.h
@@ -21,14 +21,16 @@ namespace base {
class Thread;
}
+namespace devtools_http_handler {
+class DevToolsHttpHandler;
+}
+
namespace net {
class NetLog;
}
namespace content {
-class DevToolsHttpHandler;
-
class ShellBrowserMainParts : public BrowserMainParts {
public:
explicit ShellBrowserMainParts(const MainFunctionParams& parameters);
@@ -42,7 +44,7 @@ class ShellBrowserMainParts : public BrowserMainParts {
bool MainMessageLoopRun(int* result_code) override;
void PostMainMessageLoopRun() override;
- DevToolsHttpHandler* devtools_http_handler() {
+ devtools_http_handler::DevToolsHttpHandler* devtools_http_handler() {
return devtools_http_handler_.get();
}
@@ -76,7 +78,7 @@ class ShellBrowserMainParts : public BrowserMainParts {
const MainFunctionParams parameters_;
bool run_message_loop_;
- scoped_ptr<DevToolsHttpHandler> devtools_http_handler_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
DISALLOW_COPY_AND_ASSIGN(ShellBrowserMainParts);
};
diff --git a/content/shell/browser/shell_devtools_frontend.cc b/content/shell/browser/shell_devtools_frontend.cc
index 6d8e163..8244717 100644
--- a/content/shell/browser/shell_devtools_frontend.cc
+++ b/content/shell/browser/shell_devtools_frontend.cc
@@ -11,8 +11,8 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
@@ -107,9 +107,10 @@ ShellDevToolsFrontend* ShellDevToolsFrontend::Show(
shell,
inspected_contents);
- DevToolsHttpHandler* http_handler = ShellContentBrowserClient::Get()
- ->shell_browser_main_parts()
- ->devtools_http_handler();
+ devtools_http_handler::DevToolsHttpHandler* http_handler =
+ ShellContentBrowserClient::Get()
+ ->shell_browser_main_parts()
+ ->devtools_http_handler();
shell->LoadURL(http_handler->GetFrontendURL("/devtools/devtools.html"));
return devtools_frontend;
diff --git a/content/shell/browser/shell_devtools_manager_delegate.cc b/content/shell/browser/shell_devtools_manager_delegate.cc
index 2b52385..8011145 100644
--- a/content/shell/browser/shell_devtools_manager_delegate.cc
+++ b/content/shell/browser/shell_devtools_manager_delegate.cc
@@ -12,8 +12,9 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_http_handler.h"
+#include "content/public/browser/devtools_frontend_host.h"
#include "content/public/browser/devtools_target.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
@@ -23,6 +24,7 @@
#include "content/public/common/url_constants.h"
#include "content/public/common/user_agent.h"
#include "content/shell/browser/shell.h"
+#include "content/shell/common/shell_content_client.h"
#include "grit/shell_resources.h"
#include "net/base/net_errors.h"
#include "net/socket/tcp_server_socket.h"
@@ -33,6 +35,8 @@
#include "net/socket/unix_domain_server_socket_posix.h"
#endif
+using devtools_http_handler::DevToolsHttpHandler;
+
namespace content {
namespace {
@@ -187,15 +191,15 @@ bool Target::Close() const {
// ShellDevToolsDelegate ----------------------------------------------------
-class ShellDevToolsDelegate : public DevToolsHttpHandlerDelegate {
+class ShellDevToolsDelegate :
+ public devtools_http_handler::DevToolsHttpHandlerDelegate {
public:
explicit ShellDevToolsDelegate(BrowserContext* browser_context);
~ShellDevToolsDelegate() override;
- // DevToolsHttpHandlerDelegate implementation.
+ // devtools_http_handler::DevToolsHttpHandlerDelegate implementation.
std::string GetDiscoveryPageHTML() override;
- bool BundlesFrontendResources() override;
- base::FilePath GetDebugFrontendDir() override;
+ std::string GetFrontendResource(const std::string& path) override;
private:
BrowserContext* browser_context_;
@@ -219,16 +223,9 @@ std::string ShellDevToolsDelegate::GetDiscoveryPageHTML() {
#endif
}
-bool ShellDevToolsDelegate::BundlesFrontendResources() {
-#if defined(OS_ANDROID)
- return false;
-#else
- return true;
-#endif
-}
-
-base::FilePath ShellDevToolsDelegate::GetDebugFrontendDir() {
- return base::FilePath();
+std::string ShellDevToolsDelegate::GetFrontendResource(
+ const std::string& path) {
+ return content::DevToolsFrontendHost::GetFrontendResource(path).as_string();
}
} // namespace
@@ -243,10 +240,15 @@ ShellDevToolsManagerDelegate::CreateHttpHandler(
#if defined(OS_ANDROID)
frontend_url = base::StringPrintf(kFrontEndURL, GetWebKitRevision().c_str());
#endif
- return DevToolsHttpHandler::Start(CreateSocketFactory(),
- frontend_url,
- new ShellDevToolsDelegate(browser_context),
- base::FilePath());
+ return new DevToolsHttpHandler(
+ CreateSocketFactory(),
+ frontend_url,
+ new ShellDevToolsDelegate(browser_context),
+ new ShellDevToolsManagerDelegate(browser_context),
+ base::FilePath(),
+ base::FilePath(),
+ std::string(),
+ GetShellUserAgent());
}
ShellDevToolsManagerDelegate::ShellDevToolsManagerDelegate(
diff --git a/content/shell/browser/shell_devtools_manager_delegate.h b/content/shell/browser/shell_devtools_manager_delegate.h
index 061562d..702aa1d 100644
--- a/content/shell/browser/shell_devtools_manager_delegate.h
+++ b/content/shell/browser/shell_devtools_manager_delegate.h
@@ -7,17 +7,20 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
+#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_manager_delegate.h"
+namespace devtools_http_handler {
+class DevToolsHttpHandler;
+}
+
namespace content {
class BrowserContext;
-class DevToolsHttpHandler;
class ShellDevToolsManagerDelegate : public DevToolsManagerDelegate {
public:
- static DevToolsHttpHandler* CreateHttpHandler(
+ static devtools_http_handler::DevToolsHttpHandler* CreateHttpHandler(
BrowserContext* browser_context);
explicit ShellDevToolsManagerDelegate(BrowserContext* browser_context);
diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn
index 2e12978..64accfc 100644
--- a/extensions/shell/BUILD.gn
+++ b/extensions/shell/BUILD.gn
@@ -31,6 +31,7 @@ source_set("app_shell_lib") {
":version_header",
"//base",
"//base:prefs",
+ "//components/devtools_http_handler",
"//components/pref_registry",
"//components/update_client",
"//components/user_prefs",
diff --git a/extensions/shell/app_shell.gyp b/extensions/shell/app_shell.gyp
index 1837fd8..466637d 100644
--- a/extensions/shell/app_shell.gyp
+++ b/extensions/shell/app_shell.gyp
@@ -22,6 +22,7 @@
'app_shell_version_header',
'<(DEPTH)/base/base.gyp:base',
'<(DEPTH)/base/base.gyp:base_prefs',
+ '<(DEPTH)/components/components.gyp:devtools_http_handler',
'<(DEPTH)/components/components.gyp:pref_registry',
'<(DEPTH)/components/components.gyp:update_client',
'<(DEPTH)/components/components.gyp:user_prefs',
diff --git a/extensions/shell/browser/DEPS b/extensions/shell/browser/DEPS
index 8b27b25..43dda94 100644
--- a/extensions/shell/browser/DEPS
+++ b/extensions/shell/browser/DEPS
@@ -1,5 +1,6 @@
include_rules = [
"+chromeos",
+ "+components/devtools_http_handler",
"+components/keyed_service",
"+components/nacl/browser",
"+components/nacl/common",
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc
index 80deb9d..073dacb 100644
--- a/extensions/shell/browser/shell_browser_main_parts.cc
+++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -9,12 +9,12 @@
#include "base/command_line.h"
#include "base/prefs/pref_service.h"
#include "base/run_loop.h"
+#include "components/devtools_http_handler/devtools_http_handler.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/storage_monitor/storage_monitor.h"
#include "components/update_client/update_query_params.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/context_factory.h"
-#include "content/public/browser/devtools_http_handler.h"
#include "content/public/common/result_codes.h"
#include "content/shell/browser/shell_devtools_manager_delegate.h"
#include "extensions/browser/app_window/app_window_client.h"
diff --git a/extensions/shell/browser/shell_browser_main_parts.h b/extensions/shell/browser/shell_browser_main_parts.h
index 0406d82..18665b4 100644
--- a/extensions/shell/browser/shell_browser_main_parts.h
+++ b/extensions/shell/browser/shell_browser_main_parts.h
@@ -17,10 +17,13 @@ class PrefService;
namespace content {
class BrowserContext;
-class DevToolsHttpHandler;
struct MainFunctionParams;
}
+namespace devtools_http_handler {
+class DevToolsHttpHandler;
+}
+
namespace views {
class Widget;
}
@@ -88,7 +91,7 @@ class ShellBrowserMainParts : public content::BrowserMainParts {
scoped_ptr<AppWindowClient> app_window_client_;
scoped_ptr<ExtensionsClient> extensions_client_;
scoped_ptr<ExtensionsBrowserClient> extensions_browser_client_;
- scoped_ptr<content::DevToolsHttpHandler> devtools_http_handler_;
+ scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
scoped_ptr<ShellUpdateQueryParamsDelegate> update_query_params_delegate_;
scoped_ptr<ShellOAuth2TokenService> oauth2_token_service_;