Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1104)

Unified Diff: chrome/browser/devtools/devtools_adb_bridge.cc

Issue 18137007: DevTools: add about:flag for ADB-less remote debugging. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For landing Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/devtools/devtools_adb_bridge.h ('k') | chrome/browser/ui/webui/inspect_ui.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/devtools/devtools_adb_bridge.cc
diff --git a/chrome/browser/devtools/devtools_adb_bridge.cc b/chrome/browser/devtools/devtools_adb_bridge.cc
index 0536da0ded908ffc2946be0caf52be148bc6f696..15bcdb5745cd91566a14f7e20dbf8eac36db080a 100644
--- a/chrome/browser/devtools/devtools_adb_bridge.cc
+++ b/chrome/browser/devtools/devtools_adb_bridge.cc
@@ -9,10 +9,12 @@
#include "base/base64.h"
#include "base/bind.h"
+#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/json/json_reader.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
+#include "base/memory/singleton.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
@@ -20,17 +22,21 @@
#include "base/strings/stringprintf.h"
#include "base/threading/thread.h"
#include "base/values.h"
+#include "chrome/browser/devtools/adb/android_rsa.h"
#include "chrome/browser/devtools/adb/android_usb_device.h"
#include "chrome/browser/devtools/adb_client_socket.h"
#include "chrome/browser/devtools/devtools_window.h"
#include "chrome/browser/devtools/tethering_adb_filter.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_switches.h"
+#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/devtools_client_host.h"
#include "content/public/browser/devtools_external_agent_proxy.h"
#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
#include "content/public/browser/devtools_manager.h"
+#include "crypto/rsa_private_key.h"
#include "net/base/net_errors.h"
#include "net/server/web_socket.h"
@@ -185,50 +191,18 @@ class AdbQueryCommand : public base::RefCounted<AdbQueryCommand> {
Callback callback_;
};
-static void ReceivedDevices(const AndroidDevicesCallback& callback,
- Profile* profile,
- int result,
- const std::string& response) {
- AndroidDevices devices;
-#if defined(DEBUG_DEVTOOLS)
- devices.push_back(new AdbDeviceImpl("")); // For desktop remote debugging.
- std::vector<scoped_refptr<AndroidUsbDevice> > usb_devices;
- AndroidUsbDevice::Enumerate(profile, &usb_devices);
- for (size_t i = 0; i < usb_devices.size(); ++i)
- devices.push_back(new UsbDeviceImpl(usb_devices[i]));
-#endif // defined(DEBUG_DEVTOOLS)
- if (result != net::OK) {
- callback.Run(devices);
- return;
- }
-
- std::vector<std::string> serials;
- Tokenize(response, "\n", &serials);
- for (size_t i = 0; i < serials.size(); ++i) {
- std::vector<std::string> tokens;
- Tokenize(serials[i], "\t ", &tokens);
- devices.push_back(new AdbDeviceImpl(tokens[0]));
- }
- callback.Run(devices);
-}
-
-static void EnumerateDevices(Profile* profile,
- const AndroidDevicesCallback& callback) {
- AdbClientSocket::AdbQuery(
- kAdbPort, kHostDevicesCommand,
- base::Bind(&ReceivedDevices, callback, profile));
-}
-
class AdbPagesCommand : public base::RefCounted<AdbPagesCommand> {
public:
- explicit AdbPagesCommand(const PagesCallback& callback)
- : callback_(callback) {
+ explicit AdbPagesCommand(DevToolsAdbBridge* bridge,
+ const PagesCallback& callback)
+ : bridge_(bridge),
+ callback_(callback) {
pages_.reset(new DevToolsAdbBridge::RemotePages());
}
- void Run(Profile* profile) {
- EnumerateDevices(profile,
- base::Bind(&AdbPagesCommand::ReceivedDevices, this));
+ void Run() {
+ bridge_->EnumerateDevices(base::Bind(&AdbPagesCommand::ReceivedDevices,
+ this));
}
private:
@@ -410,6 +384,7 @@ class AdbPagesCommand : public base::RefCounted<AdbPagesCommand> {
}
}
+ scoped_refptr<DevToolsAdbBridge> bridge_;
PagesCallback callback_;
AndroidDevices devices_;
std::vector<std::string> sockets_;
@@ -428,6 +403,42 @@ typedef std::map<std::string, AgentHostDelegate*> AgentHostDelegates;
base::LazyInstance<AgentHostDelegates>::Leaky g_host_delegates =
LAZY_INSTANCE_INITIALIZER;
+DevToolsAdbBridge::Wrapper::Wrapper(Profile* profile)
+ : bridge_(new DevToolsAdbBridge(profile)) {
+}
+
+DevToolsAdbBridge::Wrapper::~Wrapper() {
+}
+
+DevToolsAdbBridge* DevToolsAdbBridge::Wrapper::Get() {
+ return bridge_.get();
+}
+
+// static
+DevToolsAdbBridge::Factory* DevToolsAdbBridge::Factory::GetInstance() {
+ return Singleton<DevToolsAdbBridge::Factory>::get();
+}
+
+// static
+DevToolsAdbBridge* DevToolsAdbBridge::Factory::GetForProfile(
+ Profile* profile) {
+ return static_cast<DevToolsAdbBridge::Wrapper*>(
+ GetInstance()->GetServiceForBrowserContext(profile, true))->Get();
+}
+
+DevToolsAdbBridge::Factory::Factory()
+ : BrowserContextKeyedServiceFactory(
+ "DevToolsAdbBridge",
+ BrowserContextDependencyManager::GetInstance()) {}
+
+DevToolsAdbBridge::Factory::~Factory() {}
+
+BrowserContextKeyedService*
+DevToolsAdbBridge::Factory::BuildServiceInstanceFor(
+ content::BrowserContext* context) const {
+ return new DevToolsAdbBridge::Wrapper(Profile::FromBrowserContext(context));
+}
+
DevToolsAdbBridge::AndroidDevice::AndroidDevice(const std::string& serial)
: serial_(serial) {
}
@@ -636,7 +647,7 @@ class AgentHostDelegate : public base::RefCountedThreadSafe<AgentHostDelegate>,
class AdbAttachCommand : public base::RefCounted<AdbAttachCommand> {
public:
- AdbAttachCommand(const base::WeakPtr<DevToolsAdbBridge>& bridge,
+ AdbAttachCommand(DevToolsAdbBridge* bridge,
const std::string& serial,
const std::string& socket,
const std::string& debug_url,
@@ -648,16 +659,8 @@ class AdbAttachCommand : public base::RefCounted<AdbAttachCommand> {
frontend_url_(frontend_url) {
}
- void Run(Profile* profile) {
-
- // scoped_refptr<DevToolsAdbBridge::AndroidDevice> device =
- // new AdbDeviceImpl(serial_);
-
- DevToolsAdbBridge* bridge = bridge_.get();
- if (!bridge)
- return;
-
- EnumerateDevices(profile, base::Bind(&AdbAttachCommand::ReceivedDevices,
+ void Run() {
+ bridge_->EnumerateDevices(base::Bind(&AdbAttachCommand::ReceivedDevices,
this));
}
@@ -689,10 +692,6 @@ class AdbAttachCommand : public base::RefCounted<AdbAttachCommand> {
void OpenDevToolsWindow(net::StreamSocket* socket) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DevToolsAdbBridge* bridge = bridge_.get();
- if (!bridge)
- return;
-
std::string id = base::StringPrintf("%s:%s", serial_.c_str(),
debug_url_.c_str());
AgentHostDelegates::iterator it = g_host_delegates.Get().find(id);
@@ -700,13 +699,13 @@ class AdbAttachCommand : public base::RefCounted<AdbAttachCommand> {
if (it != g_host_delegates.Get().end())
delegate = it->second;
else
- delegate = new AgentHostDelegate(id, serial_, bridge->adb_thread_,
+ delegate = new AgentHostDelegate(id, serial_, bridge_->adb_thread_,
socket);
DevToolsWindow::OpenExternalFrontend(
- bridge->profile_, frontend_url_, delegate->GetAgentHost().get());
+ bridge_->profile_, frontend_url_, delegate->GetAgentHost().get());
}
- base::WeakPtr<DevToolsAdbBridge> bridge_;
+ scoped_refptr<DevToolsAdbBridge> bridge_;
std::string serial_;
std::string socket_;
std::string debug_url_;
@@ -791,12 +790,15 @@ DevToolsAdbBridge::RefCountedAdbThread::~RefCountedAdbThread() {
DevToolsAdbBridge::DevToolsAdbBridge(Profile* profile)
: profile_(profile),
adb_thread_(RefCountedAdbThread::GetInstance()),
- weak_factory_(this),
has_message_loop_(adb_thread_->message_loop() != NULL) {
+ rsa_key_.reset(AndroidRSAPrivateKey(profile));
}
-DevToolsAdbBridge::~DevToolsAdbBridge() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+void DevToolsAdbBridge::EnumerateDevices(
+ const AndroidDevicesCallback& callback) {
+ AdbClientSocket::AdbQuery(
+ kAdbPort, kHostDevicesCommand,
+ base::Bind(&DevToolsAdbBridge::ReceivedDevices, this, callback));
}
void DevToolsAdbBridge::Query(
@@ -818,9 +820,9 @@ void DevToolsAdbBridge::Pages(const PagesCallback& callback) {
return;
scoped_refptr<AdbPagesCommand> command(
- new AdbPagesCommand(callback));
+ new AdbPagesCommand(this, callback));
adb_thread_->message_loop()->PostTask(FROM_HERE,
- base::Bind(&AdbPagesCommand::Run, command, profile_));
+ base::Bind(&AdbPagesCommand::Run, command));
}
void DevToolsAdbBridge::Attach(const std::string& serial,
@@ -832,9 +834,46 @@ void DevToolsAdbBridge::Attach(const std::string& serial,
return;
scoped_refptr<AdbAttachCommand> command(
- new AdbAttachCommand(weak_factory_.GetWeakPtr(), serial, socket,
+ new AdbAttachCommand(this, serial, socket,
debug_url, frontend_url));
adb_thread_->message_loop()->PostTask(
FROM_HERE,
- base::Bind(&AdbAttachCommand::Run, command, profile_));
+ base::Bind(&AdbAttachCommand::Run, command));
+}
+
+DevToolsAdbBridge::~DevToolsAdbBridge() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+}
+
+void DevToolsAdbBridge::ReceivedDevices(const AndroidDevicesCallback& callback,
+ int result,
+ const std::string& response) {
+ AndroidDevices devices;
+#if defined(DEBUG_DEVTOOLS)
+ devices.push_back(new AdbDeviceImpl("")); // For desktop remote debugging.
+#endif // defined(DEBUG_DEVTOOLS)
+
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kRemoteDebuggingRawUSB)) {
+ AndroidUsbDevices usb_devices;
+ AndroidUsbDevice::Enumerate(profile_, rsa_key_.get(), &usb_devices);
+ for (AndroidUsbDevices::iterator it = usb_devices.begin();
+ it != usb_devices.end(); ++it) {
+ devices.push_back(new UsbDeviceImpl(*it));
+ }
+ }
+
+ if (result != net::OK) {
+ callback.Run(devices);
+ return;
+ }
+
+ std::vector<std::string> serials;
+ Tokenize(response, "\n", &serials);
+ for (size_t i = 0; i < serials.size(); ++i) {
+ std::vector<std::string> tokens;
+ Tokenize(serials[i], "\t ", &tokens);
+ devices.push_back(new AdbDeviceImpl(tokens[0]));
+ }
+ callback.Run(devices);
}
« no previous file with comments | « chrome/browser/devtools/devtools_adb_bridge.h ('k') | chrome/browser/ui/webui/inspect_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698