Commit e0e5f83b authored by pliard@chromium.org's avatar pliard@chromium.org

Add RemoteDebuggingController.java and its (native) dependencies.

This is part of Chrome for Android upstreaming.


Review URL: https://chromiumcodereview.appspot.com/10540094

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146313 0039d316-1c4b-4281-b951-d872f2087c98
parent b22f87f4
...@@ -9,11 +9,13 @@ ...@@ -9,11 +9,13 @@
#include "content/app/android/content_main.h" #include "content/app/android/content_main.h"
#include "content/app/android/sandboxed_process_service.h" #include "content/app/android/sandboxed_process_service.h"
#include "content/app/android/user_agent.h" #include "content/app/android/user_agent.h"
#include "content/browser/android/remote_debugging_controller.h"
namespace { namespace {
base::android::RegistrationMethod kContentRegisteredMethods[] = { base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "ContentMain", content::RegisterContentMain }, { "ContentMain", content::RegisterContentMain },
{ "RemoteDebuggingController", content::RegisterRemoteDebuggingController },
{ "SandboxedProcessService", content::RegisterSandboxedProcessService }, { "SandboxedProcessService", content::RegisterSandboxedProcessService },
{ "UserAgent", content::RegisterUserAgent }, { "UserAgent", content::RegisterUserAgent },
}; };
......
// 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
// 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/remote_debugging_controller_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
// 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_
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
'port/browser/render_widget_host_view_port.h', 'port/browser/render_widget_host_view_port.h',
'public/browser/access_token_store.h', 'public/browser/access_token_store.h',
'public/browser/android/content_view_core.h', 'public/browser/android/content_view_core.h',
'public/browser/android/devtools_server.h',
'public/browser/browser_accessibility_state.h', 'public/browser/browser_accessibility_state.h',
'public/browser/browser_child_process_host.h', 'public/browser/browser_child_process_host.h',
'public/browser/browser_child_process_host_delegate.cc', 'public/browser/browser_child_process_host_delegate.cc',
...@@ -199,10 +200,13 @@ ...@@ -199,10 +200,13 @@
'browser/android/content_view_client.h', 'browser/android/content_view_client.h',
'browser/android/content_view_core_impl.cc', 'browser/android/content_view_core_impl.cc',
'browser/android/content_view_core_impl.h', 'browser/android/content_view_core_impl.h',
'browser/android/devtools_server.cc',
'browser/android/download_controller.cc', 'browser/android/download_controller.cc',
'browser/android/download_controller.h', 'browser/android/download_controller.h',
'browser/android/ime_utils.cc', 'browser/android/ime_utils.cc',
'browser/android/ime_utils.h', '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.cc',
'browser/android/sandboxed_process_launcher.h', 'browser/android/sandboxed_process_launcher.h',
'browser/android/touch_point.cc', 'browser/android/touch_point.cc',
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
'public/android/java/src/org/chromium/content/browser/DeviceOrientation.java', 'public/android/java/src/org/chromium/content/browser/DeviceOrientation.java',
'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java',
'public/android/java/src/org/chromium/content/browser/LocationProvider.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/SandboxedProcessLauncher.java',
'public/android/java/src/org/chromium/content/browser/TouchPoint.java', 'public/android/java/src/org/chromium/content/browser/TouchPoint.java',
'public/android/java/src/org/chromium/content/common/CommandLine.java', 'public/android/java/src/org/chromium/content/common/CommandLine.java',
...@@ -40,6 +41,7 @@ ...@@ -40,6 +41,7 @@
'<(SHARED_INTERMEDIATE_DIR)/content/jni/device_orientation_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/device_orientation_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/download_controller_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/download_controller_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/location_provider_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/location_provider_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/remote_debugging_controller_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/sandboxed_process_launcher_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/sandboxed_process_launcher_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/touch_point_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/touch_point_jni.h',
'<(SHARED_INTERMEDIATE_DIR)/content/jni/command_line_jni.h', '<(SHARED_INTERMEDIATE_DIR)/content/jni/command_line_jni.h',
......
// 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();
}
// 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_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment