summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsatish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 12:52:20 +0000
committersatish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 12:52:20 +0000
commit689266de8e05d61c7a17ecd48571a0279a69b588 (patch)
treebd978d3c1e5613cf6ca9a45c4ec375384faa6177
parent7c0edc0e965fb9db8153f7bd391a384a64c10c24 (diff)
downloadchromium_src-689266de8e05d61c7a17ecd48571a0279a69b588.zip
chromium_src-689266de8e05d61c7a17ecd48571a0279a69b588.tar.gz
chromium_src-689266de8e05d61c7a17ecd48571a0279a69b588.tar.bz2
Simplify devtools code on android and enable devtools for android content_shell.
This CL removes the unnecessary RemoteDebuggingcontroller java class and associated c++ code. Also devtools_server.* is moved from content/ to chrome/ so that the code to access profiles, version etc. can be handled here to make DevToolsServer a self contained class in chrome/ layer handling devtools for android. The code making use of this class is not yet ready to be upstreamed due to dependencies and will land in future. Also added shell_devtools_delegate_android.cc to enable devtools for content_shell on android. This class and chrome/browser/android/devtools_server.cc need a common place to put the IsUserAllowedToConnect method that ensures only adb is allowed to access devtools on android (via the abstract unix socket, for security purposes) hence that method is placed in DevToolsHttpHandler in content/ BUG=136682,136318 TEST=manual. Run android content shell, execute "adb forward tcp:9222 localabstract:content_shell_devtools_remote" and open "localhost:9222" on the host machine to use devtools. Review URL: https://chromiumcodereview.appspot.com/10832112 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150336 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/android/devtools_server.cc108
-rw-r--r--chrome/browser/android/devtools_server.h35
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--content/app/android/app_jni_registrar.cc2
-rw-r--r--content/browser/android/devtools_auth.cc26
-rw-r--r--content/browser/android/devtools_server.cc112
-rw-r--r--content/browser/android/remote_debugging_controller.cc30
-rw-r--r--content/browser/android/remote_debugging_controller.h16
-rw-r--r--content/content_browser.gypi6
-rw-r--r--content/content_jni.gypi1
-rw-r--r--content/content_shell.gypi18
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/RemoteDebuggingController.java48
-rw-r--r--content/public/browser/android/devtools_auth.h20
-rw-r--r--content/public/browser/android/devtools_server.h53
-rw-r--r--content/shell/shell_browser_main_parts.cc6
-rw-r--r--content/shell/shell_devtools_delegate_android.cc65
16 files changed, 275 insertions, 273 deletions
diff --git a/chrome/browser/android/devtools_server.cc b/chrome/browser/android/devtools_server.cc
new file mode 100644
index 0000000..e1649a3
--- /dev/null
+++ b/chrome/browser/android/devtools_server.cc
@@ -0,0 +1,108 @@
+// 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/android/devtools_server.h"
+
+#include <cstring>
+#include <pwd.h>
+
+#include "base/basictypes.h"
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/compiler_specific.h"
+#include "base/logging.h"
+#include "base/stringprintf.h"
+#include "chrome/browser/history/top_sites.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/common/chrome_version_info.h"
+#include "content/public/browser/android/devtools_auth.h"
+#include "content/public/browser/devtools_http_handler.h"
+#include "content/public/browser/devtools_http_handler_delegate.h"
+#include "grit/devtools_discovery_page_resources.h"
+#include "net/base/unix_domain_socket_posix.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace {
+
+const char kFrontEndURL[] =
+ "http://chrome-devtools-frontend.appspot.com/static/%s/devtools.html";
+const char kSocketName[] = "chrome_devtools_remote";
+
+// 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 {
+ public:
+ DevToolsServerDelegate() {
+ }
+
+ virtual std::string GetDiscoveryPageHTML() {
+ // TopSites updates itself after a delay. Ask TopSites to update itself
+ // when we're about to show the remote debugging landing page.
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&DevToolsServerDelegate::PopulatePageThumbnails));
+ return ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_DEVTOOLS_DISCOVERY_PAGE_HTML,
+ ui::SCALE_FACTOR_NONE).as_string();
+ }
+
+ virtual bool BundlesFrontendResources() {
+ return false;
+ }
+
+ virtual std::string GetFrontendResourcesBaseURL() {
+ return "";
+ }
+
+ private:
+ static void PopulatePageThumbnails() {
+ Profile* profile =
+ ProfileManager::GetLastUsedProfile()->GetOriginalProfile();
+ history::TopSites* top_sites = profile->GetTopSites();
+ if (top_sites)
+ top_sites->SyncWithHistory();
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsServerDelegate);
+};
+
+} // namespace
+
+DevToolsServer::DevToolsServer() : protocol_handler_(NULL) {
+}
+
+DevToolsServer::~DevToolsServer() {
+ Stop();
+}
+
+void DevToolsServer::Start() {
+ if (protocol_handler_)
+ return;
+
+ chrome::VersionInfo version_info;
+ Profile* profile = ProfileManager::GetLastUsedProfile()->GetOriginalProfile();
+
+ protocol_handler_ = content::DevToolsHttpHandler::Start(
+ new net::UnixDomainSocketWithAbstractNamespaceFactory(
+ kSocketName,
+ base::Bind(&content::CanUserConnectToDevTools)),
+ StringPrintf(kFrontEndURL, version_info.Version().c_str()),
+ profile->GetRequestContext(),
+ new DevToolsServerDelegate());
+}
+
+void DevToolsServer::Stop() {
+ if (!protocol_handler_)
+ return;
+ // Note that the call to Stop() below takes care of |protocol_handler_|
+ // deletion.
+ protocol_handler_->Stop();
+ protocol_handler_ = NULL;
+}
+
+bool DevToolsServer::IsStarted() const {
+ return protocol_handler_;
+}
diff --git a/chrome/browser/android/devtools_server.h b/chrome/browser/android/devtools_server.h
new file mode 100644
index 0000000..2e10d7a
--- /dev/null
+++ b/chrome/browser/android/devtools_server.h
@@ -0,0 +1,35 @@
+// 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_ANDROID_DEVTOOLS_SERVER_H_
+#define CHROME_BROWSER_ANDROID_DEVTOOLS_SERVER_H_
+
+#include <string>
+#include "base/basictypes.h"
+
+namespace content {
+class DevToolsHttpHandler;
+}
+
+// This class controls Developer Tools remote debugging server.
+class DevToolsServer {
+ public:
+ DevToolsServer();
+ ~DevToolsServer();
+
+ // Opens linux abstract socket to be ready for remote debugging.
+ void Start();
+
+ // Closes debugging socket, stops debugging.
+ void Stop();
+
+ bool IsStarted() const;
+
+ private:
+ content::DevToolsHttpHandler* protocol_handler_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsServer);
+};
+
+#endif // CHROME_BROWSER_ANDROID_DEVTOOLS_SERVER_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 9991b79..b4b15ca 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -114,6 +114,8 @@
'browser/android/android_stream_reader_url_request_job.h',
'browser/android/chrome_startup_flags.cc',
'browser/android/chrome_startup_flags.h',
+ 'browser/android/devtools_server.cc',
+ 'browser/android/devtools_server.h',
'browser/android/intent_helper.cc',
'browser/android/intent_helper.h',
'browser/android/process_utils.cc',
diff --git a/content/app/android/app_jni_registrar.cc b/content/app/android/app_jni_registrar.cc
index 4470453..699b618 100644
--- a/content/app/android/app_jni_registrar.cc
+++ b/content/app/android/app_jni_registrar.cc
@@ -9,13 +9,11 @@
#include "content/app/android/content_main.h"
#include "content/app/android/sandboxed_process_service.h"
#include "content/app/android/user_agent.h"
-#include "content/browser/android/remote_debugging_controller.h"
namespace {
base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "ContentMain", content::RegisterContentMain },
- { "RemoteDebuggingController", content::RegisterRemoteDebuggingController },
{ "SandboxedProcessService", content::RegisterSandboxedProcessService },
{ "UserAgent", content::RegisterUserAgent },
};
diff --git a/content/browser/android/devtools_auth.cc b/content/browser/android/devtools_auth.cc
new file mode 100644
index 0000000..c89cdc0
--- /dev/null
+++ b/content/browser/android/devtools_auth.cc
@@ -0,0 +1,26 @@
+// 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 "content/public/browser/android/devtools_auth.h"
+
+#include "base/logging.h"
+
+namespace content {
+
+bool CanUserConnectToDevTools(uid_t uid, gid_t gid) {
+ struct passwd* creds = getpwuid(uid);
+ if (!creds || !creds->pw_name) {
+ LOG(WARNING) << "DevTools: can't obtain creds for uid " << uid;
+ return false;
+ }
+ if (gid == uid &&
+ (strcmp("root", creds->pw_name) == 0 || // For rooted devices
+ strcmp("shell", creds->pw_name) == 0)) { // For non-rooted devices
+ return true;
+ }
+ LOG(WARNING) << "DevTools: connection attempt from " << creds->pw_name;
+ return false;
+}
+
+} // namespace content
diff --git a/content/browser/android/devtools_server.cc b/content/browser/android/devtools_server.cc
deleted file mode 100644
index f35d04d..0000000
--- a/content/browser/android/devtools_server.cc
+++ /dev/null
@@ -1,112 +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 "content/public/browser/android/devtools_server.h"
-
-#include <pwd.h>
-
-#include <cstring>
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-#include "base/stringprintf.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "net/base/unix_domain_socket_posix.h"
-#include "net/url_request/url_request_context_getter.h"
-
-namespace content {
-
-namespace {
-
-const char kFrontEndURL[] =
- "http://chrome-devtools-frontend.appspot.com/static/%s/devtools.html";
-const char kSocketName[] = "chrome_devtools_remote";
-
-bool UserCanConnect(uid_t uid, gid_t gid) {
- struct passwd* creds = getpwuid(uid);
- if (!creds || !creds->pw_name) {
- LOG(WARNING) << "DevToolsServer: can't obtain creds for uid " << uid;
- return false;
- }
- if (gid == uid &&
- (strcmp("root", creds->pw_name) == 0 ||
- strcmp("shell", creds->pw_name) == 0)) {
- return true;
- }
- LOG(WARNING) << "DevToolsServer: connection attempt from " << creds->pw_name;
- return false;
-}
-
-class DevToolsServerImpl : public DevToolsServer {
- public:
- static DevToolsServerImpl* GetInstance() {
- return Singleton<DevToolsServerImpl>::get();
- }
-
- // DevToolsServer:
- virtual void Init(const std::string& frontend_version,
- net::URLRequestContextGetter* url_request_context,
- const DelegateCreator& delegate_creator) OVERRIDE {
- frontend_url_ = StringPrintf(kFrontEndURL, frontend_version.c_str());
- url_request_context_ = url_request_context;
- delegate_creator_ = delegate_creator;
- }
-
- virtual void Start() OVERRIDE {
- Stop();
- DCHECK(IsInitialized());
- protocol_handler_ = DevToolsHttpHandler::Start(
- new net::UnixDomainSocketWithAbstractNamespaceFactory(
- kSocketName, base::Bind(&UserCanConnect)),
- frontend_url_,
- url_request_context_,
- delegate_creator_.Run());
- }
-
- virtual void Stop() OVERRIDE {
- if (protocol_handler_) {
- // Note that the call to Stop() below takes care of |protocol_handler_|
- // deletion.
- protocol_handler_->Stop();
- protocol_handler_ = NULL;
- }
- }
-
- virtual bool IsInitialized() const OVERRIDE {
- return !frontend_url_.empty() && url_request_context_;
- }
-
- virtual bool IsStarted() const OVERRIDE {
- return protocol_handler_;
- }
-
- private:
- friend struct DefaultSingletonTraits<DevToolsServerImpl>;
-
- DevToolsServerImpl() : protocol_handler_(NULL), url_request_context_(NULL) {}
-
- virtual ~DevToolsServerImpl() {
- Stop();
- }
-
- DevToolsHttpHandler* protocol_handler_;
- std::string frontend_url_;
- net::URLRequestContextGetter* url_request_context_;
- DelegateCreator delegate_creator_;
-
- DISALLOW_COPY_AND_ASSIGN(DevToolsServerImpl);
-};
-
-} // namespace
-
-// static
-DevToolsServer* DevToolsServer::GetInstance() {
- return DevToolsServerImpl::GetInstance();
-}
-
-} // namespace content
diff --git a/content/browser/android/remote_debugging_controller.cc b/content/browser/android/remote_debugging_controller.cc
deleted file mode 100644
index 67f1bd6..0000000
--- a/content/browser/android/remote_debugging_controller.cc
+++ /dev/null
@@ -1,30 +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 "content/browser/android/remote_debugging_controller.h"
-
-#include <jni.h>
-
-#include "content/public/browser/android/devtools_server.h"
-#include "jni/RemoteDebuggingController_jni.h"
-
-namespace content {
-
-static void StartRemoteDebugging(JNIEnv*, jclass) {
- DevToolsServer::GetInstance()->Start();
-}
-
-static void StopRemoteDebugging(JNIEnv* , jclass) {
- DevToolsServer::GetInstance()->Stop();
-}
-
-static jboolean IsRemoteDebuggingEnabled(JNIEnv*, jclass) {
- return DevToolsServer::GetInstance()->IsStarted();
-}
-
-bool RegisterRemoteDebuggingController(JNIEnv* env) {
- return RegisterNativesImpl(env);
-}
-
-} // namespace content
diff --git a/content/browser/android/remote_debugging_controller.h b/content/browser/android/remote_debugging_controller.h
deleted file mode 100644
index d7dbb1d..0000000
--- a/content/browser/android/remote_debugging_controller.h
+++ /dev/null
@@ -1,16 +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_BROWSER_ANDROID_REMOTE_DEBUGGING_CONTROLLER_H_
-#define CONTENT_BROWSER_ANDROID_REMOTE_DEBUGGING_CONTROLLER_H_
-
-#include <jni.h>
-
-namespace content {
-
-bool RegisterRemoteDebuggingController(JNIEnv* env);
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_ANDROID_REMOTE_DEBUGGING_CONTROLLER_H_
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 4391897..b01e760 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -32,7 +32,7 @@
'port/browser/smooth_scroll_gesture.h',
'public/browser/access_token_store.h',
'public/browser/android/content_view_core.h',
- 'public/browser/android/devtools_server.h',
+ 'public/browser/android/devtools_auth.h',
'public/browser/android/draw_delegate.h',
'public/browser/android/graphics_context.h',
'public/browser/browser_accessibility_state.h',
@@ -209,16 +209,14 @@
'browser/android/content_view_core_impl.h',
'browser/android/content_view_statics.cc',
'browser/android/content_view_statics.h',
- 'browser/android/devtools_server.cc',
'browser/android/download_controller.cc',
'browser/android/download_controller.h',
+ 'browser/android/devtools_auth.cc',
'browser/android/draw_delegate_impl.h',
'browser/android/draw_delegate_impl.cc',
'browser/android/graphics_context.cc',
'browser/android/ime_utils.cc',
'browser/android/ime_utils.h',
- 'browser/android/remote_debugging_controller.cc',
- 'browser/android/remote_debugging_controller.h',
'browser/android/sandboxed_process_launcher.cc',
'browser/android/sandboxed_process_launcher.h',
'browser/android/touch_point.cc',
diff --git a/content/content_jni.gypi b/content/content_jni.gypi
index cd81836..a48a1b8 100644
--- a/content/content_jni.gypi
+++ b/content/content_jni.gypi
@@ -22,7 +22,6 @@
'public/android/java/src/org/chromium/content/browser/DownloadController.java',
'public/android/java/src/org/chromium/content/browser/ImeAdapter.java',
'public/android/java/src/org/chromium/content/browser/LocationProvider.java',
- 'public/android/java/src/org/chromium/content/browser/RemoteDebuggingController.java',
'public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java',
'public/android/java/src/org/chromium/content/browser/TouchPoint.java',
'public/android/java/src/org/chromium/content/common/CommandLine.java',
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 4f2c003..e97e802 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -75,6 +75,7 @@
'shell/shell_content_renderer_client.cc',
'shell/shell_content_renderer_client.h',
'shell/shell_devtools_delegate.cc',
+ 'shell/shell_devtools_delegate_android.cc',
'shell/shell_devtools_delegate.h',
'shell/shell_download_manager_delegate.cc',
'shell/shell_download_manager_delegate.h',
@@ -134,19 +135,22 @@
},
},
}], # OS=="win"
- ['OS!="android"', {
- 'dependencies': [
- # This dependency is for running DRT against the content shell, and
- # this combination is not yet supported on Android.
- '../webkit/support/webkit_support.gyp:webkit_support',
- ],
- }, { # else: OS=="android"
+ ['OS=="android"', {
'dependencies': [
'content_shell_jni_headers',
],
'include_dirs': [
'<(SHARED_INTERMEDIATE_DIR)/content/shell',
],
+ 'sources!': [
+ 'shell/shell_devtools_delegate.cc',
+ ],
+ }, { # else: OS!="android"
+ 'dependencies': [
+ # This dependency is for running DRT against the content shell, and
+ # this combination is not yet supported on Android.
+ '../webkit/support/webkit_support.gyp:webkit_support',
+ ],
}], # OS=="android"
['os_posix==1 and use_aura==1 and linux_use_tcmalloc==1', {
'dependencies': [
diff --git a/content/public/android/java/src/org/chromium/content/browser/RemoteDebuggingController.java b/content/public/android/java/src/org/chromium/content/browser/RemoteDebuggingController.java
deleted file mode 100644
index cce0a58..0000000
--- a/content/public/android/java/src/org/chromium/content/browser/RemoteDebuggingController.java
+++ /dev/null
@@ -1,48 +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.
-
-package org.chromium.content.browser;
-
-import org.chromium.base.JNINamespace;
-
-// Controls DevTools remote debugging server state.
-@JNINamespace("content")
-public class RemoteDebuggingController {
-
- private static RemoteDebuggingController sInstance;
-
- private boolean mUserPreferenceEnabled;
-
- public static RemoteDebuggingController getInstance() {
- if (sInstance == null) {
- sInstance = new RemoteDebuggingController();
- }
- return sInstance;
- }
-
- public void updateUserPreferenceState(boolean enabled) {
- if (mUserPreferenceEnabled != enabled) {
- mUserPreferenceEnabled = enabled;
- updateRemoteDebuggingState();
- }
- }
-
- void updateRemoteDebuggingState() {
- if (mUserPreferenceEnabled != nativeIsRemoteDebuggingEnabled()) {
- if (mUserPreferenceEnabled) {
- nativeStartRemoteDebugging();
- } else {
- nativeStopRemoteDebugging();
- }
- }
- }
-
- private RemoteDebuggingController() {
- mUserPreferenceEnabled = nativeIsRemoteDebuggingEnabled();
- }
-
- private static native void nativeStartRemoteDebugging();
- private static native void nativeStopRemoteDebugging();
- private static native boolean nativeIsRemoteDebuggingEnabled();
-}
diff --git a/content/public/browser/android/devtools_auth.h b/content/public/browser/android/devtools_auth.h
new file mode 100644
index 0000000..700892c
--- /dev/null
+++ b/content/public/browser/android/devtools_auth.h
@@ -0,0 +1,20 @@
+// 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_AUTH_ANDROID_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_AUTH_ANDROID_H_
+
+#include "content/common/content_export.h"
+
+#include <pwd.h>
+
+namespace content {
+
+// Returns true if the given user/group pair is authorized to connect to the
+// devtools server, false if not.
+CONTENT_EXPORT bool CanUserConnectToDevTools(uid_t uid, gid_t gid);
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_AUTH_ANDROID_H_
diff --git a/content/public/browser/android/devtools_server.h b/content/public/browser/android/devtools_server.h
deleted file mode 100644
index 6bcf1dd..0000000
--- a/content/public/browser/android/devtools_server.h
+++ /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.
-
-#ifndef CONTENT_PUBLIC_BROWSER_ANDROID_DEVTOOLS_SERVER_H_
-#define CONTENT_PUBLIC_BROWSER_ANDROID_DEVTOOLS_SERVER_H_
-
-#include <string>
-
-#include "base/callback_forward.h"
-
-namespace net {
-class URLRequestContextGetter;
-}
-
-namespace content {
-
-class DevToolsHttpHandlerDelegate;
-
-// This class controls Developer Tools remote debugging server.
-class DevToolsServer {
- public:
- // A callback being called each time the server restarts.
- // The delegate instance is deleted on server stop, so the creator must
- // provide the new instance on each call.
- typedef base::Callback<content::DevToolsHttpHandlerDelegate*(void)>
- DelegateCreator;
-
- // Returns the singleton instance (and initializes it if necessary).
- static DevToolsServer* GetInstance();
-
- // Initializes the server. Must be called prior to the first call of |Start|.
- virtual void Init(const std::string& frontend_version,
- net::URLRequestContextGetter* url_request_context,
- const DelegateCreator& delegate_creator) = 0;
-
- // Opens linux abstract socket to be ready for remote debugging.
- virtual void Start() = 0;
-
- // Closes debugging socket, stops debugging.
- virtual void Stop() = 0;
-
- virtual bool IsInitialized() const = 0;
-
- virtual bool IsStarted() const = 0;
-
- protected:
- virtual ~DevToolsServer() {}
-};
-
-} // namespace content
-
-#endif // CONTENT_PUBLIC_BROWSER_ANDROID_DEVTOOLS_SERVER_H_
diff --git a/content/shell/shell_browser_main_parts.cc b/content/shell/shell_browser_main_parts.cc
index b8ba066..7ea1728 100644
--- a/content/shell/shell_browser_main_parts.cc
+++ b/content/shell/shell_browser_main_parts.cc
@@ -80,6 +80,11 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() {
Shell::PlatformInitialize();
net::NetModule::SetResourceProvider(Shell::PlatformResourceProvider);
+#if defined(OS_ANDROID)
+ devtools_delegate_ = new ShellDevToolsDelegate(
+ 0, // On android the port number isn't used.
+ browser_context_->GetRequestContext());
+#else
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
if (command_line.HasSwitch(switches::kRemoteDebuggingPort)) {
std::string port_str =
@@ -93,6 +98,7 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() {
DLOG(WARNING) << "Invalid http debugger port number " << port;
}
}
+#endif
if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) {
Shell::CreateNewWindow(browser_context_.get(),
diff --git a/content/shell/shell_devtools_delegate_android.cc b/content/shell/shell_devtools_delegate_android.cc
new file mode 100644
index 0000000..fd87fb3
--- /dev/null
+++ b/content/shell/shell_devtools_delegate_android.cc
@@ -0,0 +1,65 @@
+// 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 "content/shell/shell_devtools_delegate.h"
+
+#include "base/stringprintf.h"
+#include "content/public/browser/android/devtools_auth.h"
+#include "content/public/browser/devtools_http_handler.h"
+#include "grit/shell_resources.h"
+#include "net/base/unix_domain_socket_posix.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "ui/base/layout.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace {
+
+// TODO(mnaganov): This hardcoded version should be replaced with the webkit
+// revision of this build of content shell. This requires a feature addition
+// to the devtools frontend.
+const char* kFrontendVersion = "21.0.1175.0";
+const char kSocketName[] = "content_shell_devtools_remote";
+const char kFrontEndURL[] =
+ "http://chrome-devtools-frontend.appspot.com/static/%s/devtools.html";
+
+}
+
+namespace content {
+
+ShellDevToolsDelegate::ShellDevToolsDelegate(
+ int port,
+ net::URLRequestContextGetter* context_getter)
+ : context_getter_(context_getter) {
+ devtools_http_handler_ = DevToolsHttpHandler::Start(
+ new net::UnixDomainSocketWithAbstractNamespaceFactory(
+ kSocketName,
+ base::Bind(&CanUserConnectToDevTools)),
+ StringPrintf(kFrontEndURL, kFrontendVersion),
+ context_getter,
+ this);
+}
+
+ShellDevToolsDelegate::~ShellDevToolsDelegate() {
+}
+
+void ShellDevToolsDelegate::Stop() {
+ // The call below destroys this.
+ devtools_http_handler_->Stop();
+}
+
+std::string ShellDevToolsDelegate::GetDiscoveryPageHTML() {
+ return ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_CONTENT_SHELL_DEVTOOLS_DISCOVERY_PAGE,
+ ui::SCALE_FACTOR_NONE).as_string();
+}
+
+bool ShellDevToolsDelegate::BundlesFrontendResources() {
+ return false;
+}
+
+std::string ShellDevToolsDelegate::GetFrontendResourcesBaseURL() {
+ return "";
+}
+
+} // namespace content