summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorvkuzkokov <vkuzkokov@chromium.org>2015-01-19 04:46:33 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-19 12:47:20 +0000
commitbabd5a0011a43ad14537e5fa2b4ae0d5941c3e0a (patch)
tree9e319de2fd558a3f1db158f4f1933d3420cf2ca4 /chrome
parent7f1af057a80d7a134d9c14e538290c7650f5f9d5 (diff)
downloadchromium_src-babd5a0011a43ad14537e5fa2b4ae0d5941c3e0a.zip
chromium_src-babd5a0011a43ad14537e5fa2b4ae0d5941c3e0a.tar.gz
chromium_src-babd5a0011a43ad14537e5fa2b4ae0d5941c3e0a.tar.bz2
[DevTools] Implement AdbDeviceInfoQuery through single remote shell instance
BUG= Review URL: https://codereview.chromium.org/852223002 Cr-Commit-Position: refs/heads/master@{#312101}
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/devtools/BUILD.gn3
-rw-r--r--chrome/browser/devtools/device/adb/adb_device_info_query.h54
-rw-r--r--chrome/browser/devtools/device/adb/adb_device_provider.cc4
-rw-r--r--chrome/browser/devtools/device/adb/mock_adb_server.cc46
-rw-r--r--chrome/browser/devtools/device/android_device_info_query.cc (renamed from chrome/browser/devtools/device/adb/adb_device_info_query.cc)184
-rw-r--r--chrome/browser/devtools/device/android_device_manager.h8
-rw-r--r--chrome/browser/devtools/device/devtools_android_bridge.cc3
-rw-r--r--chrome/browser/devtools/device/usb/usb_device_provider.cc4
-rw-r--r--chrome/chrome_debugger.gypi3
9 files changed, 119 insertions, 190 deletions
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn
index b512b44..e1edca7 100644
--- a/chrome/browser/devtools/BUILD.gn
+++ b/chrome/browser/devtools/BUILD.gn
@@ -85,10 +85,9 @@ static_library("devtools") {
"chrome_devtools_manager_delegate.h",
"device/adb/adb_client_socket.cc",
"device/adb/adb_client_socket.h",
- "device/adb/adb_device_info_query.cc",
- "device/adb/adb_device_info_query.h",
"device/adb/adb_device_provider.cc",
"device/adb/adb_device_provider.h",
+ "device/android_device_info_query.cc",
"device/android_device_manager.cc",
"device/android_device_manager.h",
"device/android_web_socket.cc",
diff --git a/chrome/browser/devtools/device/adb/adb_device_info_query.h b/chrome/browser/devtools/device/adb/adb_device_info_query.h
deleted file mode 100644
index 0c87af0..0000000
--- a/chrome/browser/devtools/device/adb/adb_device_info_query.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 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_DEVTOOLS_DEVICE_ADB_ADB_DEVICE_INFO_QUERY_H_
-#define CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_ADB_DEVICE_INFO_QUERY_H_
-
-#include "base/memory/ref_counted.h"
-#include "chrome/browser/devtools/device/android_device_manager.h"
-
-class AdbDeviceInfoQuery : public base::RefCounted<AdbDeviceInfoQuery> {
- public:
- static AndroidDeviceManager::BrowserInfo::Type GetBrowserType(
- const std::string& socket);
-
- static std::string GetDisplayName(const std::string& socket,
- const std::string& package);
-
- typedef AndroidDeviceManager::CommandCallback CommandCallback;
- typedef AndroidDeviceManager::DeviceInfoCallback DeviceInfoCallback;
-
- typedef base::Callback<
- void(const std::string&, const CommandCallback&)> RunCommandCallback;
-
- static void Start(const RunCommandCallback& command_callback,
- const DeviceInfoCallback& callback);
-
- private:
- friend class base::RefCounted<AdbDeviceInfoQuery>;
-
- AdbDeviceInfoQuery(const RunCommandCallback& command_callback,
- const DeviceInfoCallback& callback);
-
- virtual ~AdbDeviceInfoQuery();
-
- void ReceivedModel(int result, const std::string& response);
- void ReceivedWindowPolicy(int result, const std::string& response);
- void ReceivedProcesses(int result, const std::string& response);
- void ReceivedSockets(int result, const std::string& response);
- void ReceivedUsers(int result, const std::string& response);
-
- void ParseBrowserInfo();
-
- DeviceInfoCallback callback_;
- std::string processes_response_;
- std::string sockets_response_;
- std::string users_response_;
- AndroidDeviceManager::DeviceInfo device_info_;
- base::ThreadChecker thread_checker_;
-
- DISALLOW_COPY_AND_ASSIGN(AdbDeviceInfoQuery);
-};
-
-#endif // CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_ADB_DEVICE_INFO_QUERY_H_
diff --git a/chrome/browser/devtools/device/adb/adb_device_provider.cc b/chrome/browser/devtools/device/adb/adb_device_provider.cc
index 93ba0d0..9f5b33a 100644
--- a/chrome/browser/devtools/device/adb/adb_device_provider.cc
+++ b/chrome/browser/devtools/device/adb/adb_device_provider.cc
@@ -7,7 +7,6 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/devtools/device/adb/adb_client_socket.h"
-#include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
namespace {
@@ -53,7 +52,8 @@ void AdbDeviceProvider::QueryDevices(const SerialsCallback& callback) {
void AdbDeviceProvider::QueryDeviceInfo(const std::string& serial,
const DeviceInfoCallback& callback) {
- AdbDeviceInfoQuery::Start(base::Bind(&RunCommand, serial), callback);
+ AndroidDeviceManager::QueryDeviceInfo(base::Bind(&RunCommand, serial),
+ callback);
}
void AdbDeviceProvider::OpenSocket(const std::string& serial,
diff --git a/chrome/browser/devtools/device/adb/mock_adb_server.cc b/chrome/browser/devtools/device/adb/mock_adb_server.cc
index 16661c4..8288674 100644
--- a/chrome/browser/devtools/device/adb/mock_adb_server.cc
+++ b/chrome/browser/devtools/device/adb/mock_adb_server.cc
@@ -25,11 +25,13 @@ namespace {
const char kHostTransportPrefix[] = "host:transport:";
const char kLocalAbstractPrefix[] = "localabstract:";
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kDumpsysCommand[] = "shell:dumpsys window policy";
-const char kListProcessesCommand[] = "shell:ps";
-const char kListUsersCommand[] = "shell:dumpsys user";
+const char kShellPrefix[] = "shell:";
+const char kOpenedUnixSocketsCommand[] = "cat /proc/net/unix";
+const char kDeviceModelCommand[] = "getprop ro.product.model";
+const char kDumpsysCommand[] = "dumpsys window policy";
+const char kListProcessesCommand[] = "ps";
+const char kListUsersCommand[] = "dumpsys user";
+const char kEchoCommandPrefix[] = "echo ";
const char kSerialOnline[] = "01498B321301A00A";
const char kSerialOffline[] = "01498B2B0D01300E";
@@ -544,16 +546,30 @@ void MockAndroidConnection::ProcessCommand(const std::string& command) {
socket_name_ = command.substr(strlen(kLocalAbstractPrefix));
delegate_->SendSuccess(std::string());
} else {
- if (command == kDeviceModelCommand) {
- delegate_->SendSuccess(kDeviceModel);
- } else if (command == kOpenedUnixSocketsCommand) {
- delegate_->SendSuccess(kSampleOpenedUnixSockets);
- } else if (command == kDumpsysCommand) {
- delegate_->SendSuccess(kSampleDumpsys);
- } else if (command == kListProcessesCommand) {
- delegate_->SendSuccess(kSampleListProcesses);
- } else if (command == kListUsersCommand) {
- delegate_->SendSuccess(kSampleListUsers);
+ if (command.find(kShellPrefix) == 0) {
+ std::vector<std::string> lines;
+ Tokenize(command.substr(strlen(kShellPrefix)), "\n", &lines);
+ std::string result;
+ for (const auto& line : lines) {
+ if (line == kDeviceModelCommand) {
+ result += kDeviceModel;
+ result += "\r\n";
+ } else if (line == kOpenedUnixSocketsCommand) {
+ result += kSampleOpenedUnixSockets;
+ } else if (line == kDumpsysCommand) {
+ result += kSampleDumpsys;
+ } else if (line == kListProcessesCommand) {
+ result += kSampleListProcesses;
+ } else if (line == kListUsersCommand) {
+ result += kSampleListUsers;
+ } else if (line.find(kEchoCommandPrefix) == 0) {
+ result += line.substr(strlen(kEchoCommandPrefix));
+ result += "\r\n";
+ } else {
+ NOTREACHED() << "Unknown shell command - " << command;
+ }
+ }
+ delegate_->SendSuccess(result);
} else {
NOTREACHED() << "Unknown command - " << command;
}
diff --git a/chrome/browser/devtools/device/adb/adb_device_info_query.cc b/chrome/browser/devtools/device/android_device_info_query.cc
index e7de946..e1d575c 100644
--- a/chrome/browser/devtools/device/adb/adb_device_info_query.cc
+++ b/chrome/browser/devtools/device/android_device_info_query.cc
@@ -2,20 +2,31 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
-
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
+#include "chrome/browser/devtools/device/android_device_manager.h"
namespace {
+#define SEPARATOR "====!@#$%^&*(output separator)*&^%$#@!===="
+
+const char kAllCommands[] = "shell:"
+ "getprop ro.product.model\n"
+ "echo " SEPARATOR "\n"
+ "dumpsys window policy\n"
+ "echo " SEPARATOR "\n"
+ "ps\n"
+ "echo " SEPARATOR "\n"
+ "cat /proc/net/unix\n"
+ "echo " SEPARATOR "\n"
+ "dumpsys user\n";
+
+const char kSeparator[] = SEPARATOR "\r\n";
+
+#undef SEPARATOR
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kListProcessesCommand[] = "shell:ps";
-const char kWindowPolicyCommand[] = "shell:dumpsys window policy";
-const char kListUsersCommand[] = "shell:dumpsys user";
const char kScreenSizePrefix[] = "mStable=";
const char kUserInfoPrefix[] = "UserInfo{";
@@ -187,7 +198,6 @@ StringMap MapIdsToUsers(const std::string& response) {
// UserInfo{10:User with : (colon):10} serialNo=10
// Created: +3d4h35m1s139ms ago
// Last logged in: +17m26s287ms ago
-
StringMap id_to_username;
std::vector<std::string> lines;
Tokenize(response, "\r", &lines);
@@ -224,11 +234,8 @@ std::string GetUserName(const std::string& unix_user,
return std::string();
}
-} // namespace
-
-// static
AndroidDeviceManager::BrowserInfo::Type
-AdbDeviceInfoQuery::GetBrowserType(const std::string& socket) {
+GetBrowserType(const std::string& socket) {
if (socket.find(kChromeDefaultSocket) == 0)
return AndroidDeviceManager::BrowserInfo::kTypeChrome;
@@ -238,107 +245,28 @@ AdbDeviceInfoQuery::GetBrowserType(const std::string& socket) {
return AndroidDeviceManager::BrowserInfo::kTypeOther;
}
-// static
-std::string AdbDeviceInfoQuery::GetDisplayName(const std::string& socket,
- const std::string& package) {
- if (package.empty()) {
- // Derive a fallback display name from the socket name.
- std::string name = socket.substr(0, socket.find(kDevToolsSocketSuffix));
- name[0] = base::ToUpperASCII(name[0]);
- return name;
+void ReceivedResponse(const AndroidDeviceManager::DeviceInfoCallback& callback,
+ int result,
+ const std::string& response) {
+ AndroidDeviceManager::DeviceInfo device_info;
+ if (result < 0) {
+ callback.Run(device_info);
+ return;
}
-
- const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
- if (descriptor)
- return descriptor->display_name;
-
- if (GetBrowserType(socket) ==
- AndroidDeviceManager::BrowserInfo::kTypeWebView)
- return base::StringPrintf(kWebViewNameTemplate, package.c_str());
-
- return package;
-}
-
-// static
-void AdbDeviceInfoQuery::Start(const RunCommandCallback& command_callback,
- const DeviceInfoCallback& callback) {
- new AdbDeviceInfoQuery(command_callback, callback);
-}
-
-AdbDeviceInfoQuery::AdbDeviceInfoQuery(
- const RunCommandCallback& command_callback,
- const DeviceInfoCallback& callback)
- : callback_(callback) {
- AddRef();
- command_callback.Run(
- kDeviceModelCommand,
- base::Bind(&AdbDeviceInfoQuery::ReceivedModel, this));
- command_callback.Run(
- kWindowPolicyCommand,
- base::Bind(&AdbDeviceInfoQuery::ReceivedWindowPolicy, this));
- command_callback.Run(
- kListProcessesCommand,
- base::Bind(&AdbDeviceInfoQuery::ReceivedProcesses, this));
- command_callback.Run(
- kOpenedUnixSocketsCommand,
- base::Bind(&AdbDeviceInfoQuery::ReceivedSockets, this));
- command_callback.Run(
- kListUsersCommand,
- base::Bind(&AdbDeviceInfoQuery::ReceivedUsers, this));
- Release();
-}
-
-AdbDeviceInfoQuery::~AdbDeviceInfoQuery() {
- DCHECK(thread_checker_.CalledOnValidThread());
- ParseBrowserInfo();
- callback_.Run(device_info_);
-}
-
-void AdbDeviceInfoQuery::ReceivedModel(int result,
- const std::string& response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result >= 0) {
- TrimWhitespaceASCII(response, base::TRIM_ALL, &device_info_.model);
- device_info_.connected = true;
+ std::vector<std::string> outputs;
+ base::SplitStringUsingSubstr(response, kSeparator, &outputs);
+ if (outputs.size() != 5) {
+ callback.Run(device_info);
+ return;
}
-}
-
-void AdbDeviceInfoQuery::ReceivedWindowPolicy(int result,
- const std::string& response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result >= 0)
- device_info_.screen_size = ParseWindowPolicyResponse(response);
-}
-
-void AdbDeviceInfoQuery::ReceivedProcesses(int result,
- const std::string& response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result >= 0)
- processes_response_ = response;
-}
-
-void AdbDeviceInfoQuery::ReceivedSockets(int result,
- const std::string& response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result >= 0)
- sockets_response_ = response;
-}
-
-void AdbDeviceInfoQuery::ReceivedUsers(int result,
- const std::string& response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result >= 0)
- users_response_ = response;
-}
-
-void AdbDeviceInfoQuery::ParseBrowserInfo() {
+ device_info.connected = true;
+ device_info.model = outputs[0];
+ device_info.screen_size = ParseWindowPolicyResponse(outputs[1]);
StringMap pid_to_package;
StringMap pid_to_user;
- MapProcessesToPackages(processes_response_,
- &pid_to_package,
- &pid_to_user);
- StringMap socket_to_pid = MapSocketsToProcesses(sockets_response_);
- StringMap id_to_username = MapIdsToUsers(users_response_);
+ MapProcessesToPackages(outputs[2], &pid_to_package, &pid_to_user);
+ StringMap socket_to_pid = MapSocketsToProcesses(outputs[3]);
+ StringMap id_to_username = MapIdsToUsers(outputs[4]);
std::set<std::string> used_pids;
for (const auto& pair : socket_to_pid)
used_pids.insert(pair.second);
@@ -364,12 +292,46 @@ void AdbDeviceInfoQuery::ParseBrowserInfo() {
AndroidDeviceManager::BrowserInfo browser_info;
browser_info.socket_name = socket;
browser_info.type = GetBrowserType(socket);
- browser_info.display_name = GetDisplayName(socket, package);
+ browser_info.display_name =
+ AndroidDeviceManager::GetBrowserName(socket, package);
StringMap::iterator uit = pid_to_user.find(pid);
if (uit != pid_to_user.end())
browser_info.user = GetUserName(uit->second, id_to_username);
- device_info_.browser_info.push_back(browser_info);
+ device_info.browser_info.push_back(browser_info);
}
+ callback.Run(device_info);
+}
+
+} // namespace
+
+// static
+std::string AndroidDeviceManager::GetBrowserName(const std::string& socket,
+ const std::string& package) {
+ if (package.empty()) {
+ // Derive a fallback display name from the socket name.
+ std::string name = socket.substr(0, socket.find(kDevToolsSocketSuffix));
+ name[0] = base::ToUpperASCII(name[0]);
+ return name;
+ }
+
+ const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
+ if (descriptor)
+ return descriptor->display_name;
+
+ if (GetBrowserType(socket) ==
+ AndroidDeviceManager::BrowserInfo::kTypeWebView)
+ return base::StringPrintf(kWebViewNameTemplate, package.c_str());
+
+ return package;
+}
+
+// static
+void AndroidDeviceManager::QueryDeviceInfo(
+ const RunCommandCallback& command_callback,
+ const DeviceInfoCallback& callback) {
+ command_callback.Run(
+ kAllCommands,
+ base::Bind(&ReceivedResponse, callback));
}
diff --git a/chrome/browser/devtools/device/android_device_manager.h b/chrome/browser/devtools/device/android_device_manager.h
index ae2defb..831b13d 100644
--- a/chrome/browser/devtools/device/android_device_manager.h
+++ b/chrome/browser/devtools/device/android_device_manager.h
@@ -188,6 +188,14 @@ class AndroidDeviceManager : public base::NonThreadSafe {
void QueryDevices(const DevicesCallback& callback);
+ static std::string GetBrowserName(const std::string& socket,
+ const std::string& package);
+ using RunCommandCallback =
+ base::Callback<void(const std::string&, const CommandCallback&)>;
+
+ static void QueryDeviceInfo(const RunCommandCallback& command_callback,
+ const DeviceInfoCallback& callback);
+
struct DeviceDescriptor {
DeviceDescriptor();
~DeviceDescriptor();
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
index f427d0e..a1e29a5 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -22,7 +22,6 @@
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread.h"
#include "base/values.h"
-#include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
#include "chrome/browser/devtools/device/adb/adb_device_provider.h"
#include "chrome/browser/devtools/device/port_forwarding_controller.h"
#include "chrome/browser/devtools/device/self_device_provider.h"
@@ -167,7 +166,7 @@ void DevToolsAndroidBridge::DiscoveryRequest::ReceivedVersion(
std::string package;
if (dict->GetString("Android-Package", &package)) {
browser->display_name_ =
- AdbDeviceInfoQuery::GetDisplayName(browser->socket(), package);
+ AndroidDeviceManager::GetBrowserName(browser->socket(), package);
}
}
}
diff --git a/chrome/browser/devtools/device/usb/usb_device_provider.cc b/chrome/browser/devtools/device/usb/usb_device_provider.cc
index 258365c..d3b16bf 100644
--- a/chrome/browser/devtools/device/usb/usb_device_provider.cc
+++ b/chrome/browser/devtools/device/usb/usb_device_provider.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/devtools/device/usb/usb_device_provider.h"
#include "base/strings/stringprintf.h"
-#include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
#include "chrome/browser/devtools/device/usb/android_rsa.h"
#include "chrome/browser/devtools/device/usb/android_usb_device.h"
#include "crypto/rsa_private_key.h"
@@ -103,7 +102,8 @@ void UsbDeviceProvider::QueryDeviceInfo(const std::string& serial,
callback.Run(offline_info);
return;
}
- AdbDeviceInfoQuery::Start(base::Bind(&RunCommand, it->second), callback);
+ AndroidDeviceManager::QueryDeviceInfo(base::Bind(&RunCommand, it->second),
+ callback);
}
void UsbDeviceProvider::OpenSocket(const std::string& serial,
diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi
index 67b06a4..02b2f00 100644
--- a/chrome/chrome_debugger.gypi
+++ b/chrome/chrome_debugger.gypi
@@ -62,10 +62,9 @@
'browser/devtools/chrome_devtools_manager_delegate.h',
'browser/devtools/device/adb/adb_client_socket.cc',
'browser/devtools/device/adb/adb_client_socket.h',
- 'browser/devtools/device/adb/adb_device_info_query.cc',
- 'browser/devtools/device/adb/adb_device_info_query.h',
'browser/devtools/device/adb/adb_device_provider.cc',
'browser/devtools/device/adb/adb_device_provider.h',
+ 'browser/devtools/device/android_device_info_query.cc',
'browser/devtools/device/android_device_manager.cc',
'browser/devtools/device/android_device_manager.h',
'browser/devtools/device/android_web_socket.cc',