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

Unified Diff: chrome/browser/devtools/device/usb/usb_device_provider.cc

Issue 287643002: DevTools: Partially redesigned DevToolsAndroidBridge and AndroidDeviceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unused include Created 6 years, 7 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/device/usb/usb_device_provider.cc
diff --git a/chrome/browser/devtools/device/usb/usb_device_provider.cc b/chrome/browser/devtools/device/usb/usb_device_provider.cc
index 566f121c589ba8161ec438bb1e0dd8f6a3bdaec6..c05d63c402acfd2d0273695a89d52a3280eadc7b 100644
--- a/chrome/browser/devtools/device/usb/usb_device_provider.cc
+++ b/chrome/browser/devtools/device/usb/usb_device_provider.cc
@@ -18,123 +18,59 @@ const char kLocalAbstractCommand[] = "localabstract:%s";
const int kBufferSize = 16 * 1024;
-class UsbDeviceImpl : public AndroidDeviceManager::Device {
- public:
- explicit UsbDeviceImpl(AndroidUsbDevice* device);
-
- virtual void QueryDeviceInfo(const DeviceInfoCallback& callback) OVERRIDE;
-
- virtual void OpenSocket(const std::string& name,
- const SocketCallback& callback) OVERRIDE;
- private:
- void OnOpenSocket(const SocketCallback& callback,
- net::StreamSocket* socket,
- int result);
- void RunCommand(const std::string& command,
- const CommandCallback& callback);
- void OpenedForCommand(const CommandCallback& callback,
- net::StreamSocket* socket,
- int result);
- void OnRead(net::StreamSocket* socket,
- scoped_refptr<net::IOBuffer> buffer,
- const std::string& data,
- const CommandCallback& callback,
- int result);
-
- virtual ~UsbDeviceImpl() {}
- scoped_refptr<AndroidUsbDevice> device_;
-};
-
-
-UsbDeviceImpl::UsbDeviceImpl(AndroidUsbDevice* device)
- : Device(device->serial(), device->is_connected()),
- device_(device) {
- device_->InitOnCallerThread();
-}
-
-void UsbDeviceImpl::QueryDeviceInfo(const DeviceInfoCallback& callback) {
- AdbDeviceInfoQuery::Start(
- base::Bind(&UsbDeviceImpl::RunCommand, this), callback);
-}
-
-void UsbDeviceImpl::OpenSocket(const std::string& name,
- const SocketCallback& callback) {
- DCHECK(CalledOnValidThread());
- std::string socket_name =
- base::StringPrintf(kLocalAbstractCommand, name.c_str());
- net::StreamSocket* socket = device_->CreateSocket(socket_name);
- if (!socket) {
- callback.Run(net::ERR_CONNECTION_FAILED, NULL);
- return;
- }
- int result = socket->Connect(base::Bind(&UsbDeviceImpl::OnOpenSocket, this,
- callback, socket));
- if (result != net::ERR_IO_PENDING)
- callback.Run(result, NULL);
-}
-
-void UsbDeviceImpl::OnOpenSocket(const SocketCallback& callback,
- net::StreamSocket* socket,
- int result) {
+static void OnOpenSocket(const UsbDeviceProvider::SocketCallback& callback,
pfeldman 2014/05/26 09:57:14 no need to declare as static in anonymous namespac
vkuzkokov 2014/05/26 10:54:03 Done.
+ net::StreamSocket* socket,
+ int result) {
callback.Run(result, result == net::OK ? socket : NULL);
}
-void UsbDeviceImpl::RunCommand(const std::string& command,
- const CommandCallback& callback) {
- DCHECK(CalledOnValidThread());
- net::StreamSocket* socket = device_->CreateSocket(command);
- if (!socket) {
- callback.Run(net::ERR_CONNECTION_FAILED, std::string());
+static void OnRead(net::StreamSocket* socket,
pfeldman 2014/05/26 09:57:14 ditto
vkuzkokov 2014/05/26 10:54:03 Done.
+ scoped_refptr<net::IOBuffer> buffer,
+ const std::string& data,
+ const UsbDeviceProvider::CommandCallback& callback,
+ int result) {
+ if (result <= 0) {
+ callback.Run(result, result == 0 ? data : std::string());
+ delete socket;
return;
}
- int result = socket->Connect(base::Bind(&UsbDeviceImpl::OpenedForCommand,
- this, callback, socket));
+
+ std::string new_data = data + std::string(buffer->data(), result);
+ result =
+ socket->Read(buffer,
+ kBufferSize,
+ base::Bind(&OnRead, socket, buffer, new_data, callback));
if (result != net::ERR_IO_PENDING)
- callback.Run(result, std::string());
+ OnRead(socket, buffer, new_data, callback, result);
}
-void UsbDeviceImpl::OpenedForCommand(const CommandCallback& callback,
- net::StreamSocket* socket,
- int result) {
+static void OpenedForCommand(const UsbDeviceProvider::CommandCallback& callback,
pfeldman 2014/05/26 09:57:14 ditto
vkuzkokov 2014/05/26 10:54:03 Done.
+ net::StreamSocket* socket,
+ int result) {
if (result != net::OK) {
callback.Run(result, std::string());
return;
}
scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize);
- result = socket->Read(buffer, kBufferSize,
- base::Bind(&UsbDeviceImpl::OnRead, this,
- socket, buffer, std::string(), callback));
+ result = socket->Read(
+ buffer,
+ kBufferSize,
+ base::Bind(&OnRead, socket, buffer, std::string(), callback));
if (result != net::ERR_IO_PENDING)
OnRead(socket, buffer, std::string(), callback, result);
}
-void UsbDeviceImpl::OnRead(net::StreamSocket* socket,
- scoped_refptr<net::IOBuffer> buffer,
- const std::string& data,
- const CommandCallback& callback,
- int result) {
- if (result <= 0) {
- callback.Run(result, result == 0 ? data : std::string());
- delete socket;
+static void RunCommand(scoped_refptr<AndroidUsbDevice> device,
+ const std::string& command,
+ const UsbDeviceProvider::CommandCallback& callback) {
+ net::StreamSocket* socket = device->CreateSocket(command);
+ if (!socket) {
+ callback.Run(net::ERR_CONNECTION_FAILED, std::string());
return;
}
-
- std::string new_data = data + std::string(buffer->data(), result);
- result = socket->Read(buffer, kBufferSize,
- base::Bind(&UsbDeviceImpl::OnRead, this,
- socket, buffer, new_data, callback));
+ int result = socket->Connect(base::Bind(&OpenedForCommand, callback, socket));
if (result != net::ERR_IO_PENDING)
- OnRead(socket, buffer, new_data, callback, result);
-}
-
-static void EnumeratedDevices(
- const UsbDeviceProvider::QueryDevicesCallback& callback,
- const AndroidUsbDevices& devices) {
- AndroidDeviceManager::Devices result;
- for (AndroidUsbDevices::const_iterator it = devices.begin();
- it != devices.end(); ++it)
- result.push_back(new UsbDeviceImpl(*it));
- callback.Run(result);
+ callback.Run(result, std::string());
}
} // namespace
@@ -149,10 +85,61 @@ UsbDeviceProvider::UsbDeviceProvider(Profile* profile){
rsa_key_.reset(AndroidRSAPrivateKey(profile));
}
+void UsbDeviceProvider::QueryDevices(const SerialsCallback& callback) {
+ AndroidUsbDevice::Enumerate(
+ rsa_key_.get(),
+ base::Bind(&UsbDeviceProvider::EnumeratedDevices, this, callback));
+}
+
+void UsbDeviceProvider::QueryDeviceInfo(const std::string& serial,
+ const DeviceInfoCallback& callback) {
+ UsbDeviceMap::iterator it = device_map_.find(serial);
+ if (it == device_map_.end() || !it->second->is_connected()) {
+ AndroidDeviceManager::DeviceInfo offline_info;
+ callback.Run(offline_info);
+ return;
+ }
+ AdbDeviceInfoQuery::Start(base::Bind(&RunCommand, it->second), callback);
+}
+
+void UsbDeviceProvider::OpenSocket(const std::string& serial,
+ const std::string& name,
+ const SocketCallback& callback) {
+ UsbDeviceMap::iterator it = device_map_.find(serial);
+ if (it == device_map_.end()) {
+ callback.Run(net::ERR_CONNECTION_FAILED, NULL);
+ return;
+ }
+ std::string socket_name =
+ base::StringPrintf(kLocalAbstractCommand, name.c_str());
+ net::StreamSocket* socket = it->second->CreateSocket(socket_name);
+ if (!socket) {
+ callback.Run(net::ERR_CONNECTION_FAILED, NULL);
+ return;
+ }
+ int result = socket->Connect(base::Bind(&OnOpenSocket, callback, socket));
+ if (result != net::ERR_IO_PENDING)
+ callback.Run(result, NULL);
+}
+
+void UsbDeviceProvider::ReleaseDevice(const std::string& serial) {
+ device_map_.erase(serial);
+}
+
UsbDeviceProvider::~UsbDeviceProvider() {
}
-void UsbDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
- AndroidUsbDevice::Enumerate(
- rsa_key_.get(), base::Bind(&EnumeratedDevices, callback));
+void UsbDeviceProvider::EnumeratedDevices(const SerialsCallback& callback,
+ const AndroidUsbDevices& devices) {
+ std::vector<std::string> result;
+ device_map_.clear();
+ for (AndroidUsbDevices::const_iterator it = devices.begin();
+ it != devices.end();
+ ++it) {
pfeldman 2014/05/26 09:57:14 ++it on the line above is fine
vkuzkokov 2014/05/26 10:54:03 Done.
+ result.push_back((*it)->serial());
+ device_map_[(*it)->serial()] = *it;
+ (*it)->InitOnCallerThread();
+ }
+ callback.Run(result);
}
+

Powered by Google App Engine
This is Rietveld 408576698