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

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: 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
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..fedf6da20df7ff6303ae482f44c1598d6ac8deee 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,11 +22,16 @@
#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/browser/ui/app_list/search/history.h"
+#include "chrome/common/chrome_switches.h"
+#include "crypto/rsa_private_key.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"
@@ -185,50 +192,25 @@ 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(const base::WeakPtr<DevToolsAdbBridge>& bridge,
vsevik 2013/07/11 15:59:54 Use raw pointer from now on.
pfeldman 2013/07/11 16:26:51 Fooled you here - I can't do this since the comman
+ 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() {
+ DevToolsAdbBridge* bridge = bridge_.get();
+ if (!bridge) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&AdbPagesCommand::Respond, this));
+ return;
+ }
+ bridge->EnumerateDevices(base::Bind(&AdbPagesCommand::ReceivedDevices,
+ this));
}
private:
@@ -410,6 +392,7 @@ class AdbPagesCommand : public base::RefCounted<AdbPagesCommand> {
}
}
+ base::WeakPtr<DevToolsAdbBridge> bridge_;
PagesCallback callback_;
AndroidDevices devices_;
std::vector<std::string> sockets_;
@@ -428,6 +411,31 @@ typedef std::map<std::string, AgentHostDelegate*> AgentHostDelegates;
base::LazyInstance<AgentHostDelegates>::Leaky g_host_delegates =
LAZY_INSTANCE_INITIALIZER;
+// static
+DevToolsAdbBridge::Factory* DevToolsAdbBridge::Factory::GetInstance() {
+ return Singleton<DevToolsAdbBridge::Factory>::get();
+}
+
+// static
vsevik 2013/07/11 15:59:54 not static
pfeldman 2013/07/11 16:26:51 Oops, it was Ok.
+DevToolsAdbBridge* DevToolsAdbBridge::Factory::GetForProfile(
+ Profile* profile) {
+ return static_cast<DevToolsAdbBridge*>(
+ GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+DevToolsAdbBridge::Factory::Factory()
+ : BrowserContextKeyedServiceFactory(
+ "DevToolsAdbBridge",
+ BrowserContextDependencyManager::GetInstance()) {}
+
+DevToolsAdbBridge::Factory::~Factory() {}
+
+BrowserContextKeyedService*
+DevToolsAdbBridge::Factory::BuildServiceInstanceFor(
+ content::BrowserContext* context) const {
+ return new DevToolsAdbBridge(Profile::FromBrowserContext(context));
+}
+
DevToolsAdbBridge::AndroidDevice::AndroidDevice(const std::string& serial)
: serial_(serial) {
}
@@ -648,16 +656,11 @@ class AdbAttachCommand : public base::RefCounted<AdbAttachCommand> {
frontend_url_(frontend_url) {
}
- void Run(Profile* profile) {
-
- // scoped_refptr<DevToolsAdbBridge::AndroidDevice> device =
- // new AdbDeviceImpl(serial_);
-
+ void Run() {
DevToolsAdbBridge* bridge = bridge_.get();
if (!bridge)
return;
-
- EnumerateDevices(profile, base::Bind(&AdbAttachCommand::ReceivedDevices,
+ bridge_->EnumerateDevices(base::Bind(&AdbAttachCommand::ReceivedDevices,
this));
}
@@ -793,12 +796,21 @@ DevToolsAdbBridge::DevToolsAdbBridge(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, base::Unretained(this),
+ callback));
+}
+
void DevToolsAdbBridge::Query(
const std::string query,
const Callback& callback) {
@@ -818,9 +830,9 @@ void DevToolsAdbBridge::Pages(const PagesCallback& callback) {
return;
scoped_refptr<AdbPagesCommand> command(
- new AdbPagesCommand(callback));
+ new AdbPagesCommand(weak_factory_.GetWeakPtr(), 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,
@@ -836,5 +848,38 @@ void DevToolsAdbBridge::Attach(const std::string& serial,
debug_url, frontend_url));
adb_thread_->message_loop()->PostTask(
FROM_HERE,
- base::Bind(&AdbAttachCommand::Run, command, profile_));
+ base::Bind(&AdbAttachCommand::Run, command));
+}
+
+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);
}

Powered by Google App Engine
This is Rietveld 408576698