| 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 da7238485bf455a2dd896890a1eb611fd5986ff0..bdec14d5649ab0bf896ec12ee22ef6335eb33868 100644
|
| --- a/chrome/browser/devtools/devtools_adb_bridge.cc
|
| +++ b/chrome/browser/devtools/devtools_adb_bridge.cc
|
| @@ -47,7 +47,8 @@ static const char kHostDevicesCommand[] = "host:devices";
|
| static const char kHostTransportCommand[] = "host:transport:%s|%s";
|
| static const char kLocalAbstractCommand[] = "localabstract:%s";
|
| static const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
|
| -static const char kUnknownModel[] = "Unknown";
|
| +static const char kLocalChrome[] = "Local Chrome";
|
| +static const char kChrome[] = "Chrome";
|
| static const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
|
|
|
| static const char kPageListRequest[] = "GET /json HTTP/1.1\r\n\r\n";
|
| @@ -212,10 +213,14 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| if (devices_.back()->serial().empty()) {
|
| scoped_refptr<DevToolsAdbBridge::AndroidDevice> device =
|
| devices_.back();
|
| - sockets_.push_back(std::string());
|
| - device->set_model(kUnknownModel);
|
| + device->set_model(kLocalChrome);
|
| remote_devices_->push_back(
|
| new DevToolsAdbBridge::RemoteDevice(bridge_, device));
|
| + scoped_refptr<DevToolsAdbBridge::RemoteBrowser> remote_browser =
|
| + new DevToolsAdbBridge::RemoteBrowser(bridge_, device, std::string());
|
| + remote_browser->set_product(kChrome);
|
| + remote_devices_->back()->AddBrowser(remote_browser);
|
| + browsers_.push_back(remote_browser);
|
| device->HttpQuery(
|
| std::string(), kVersionRequest,
|
| base::Bind(&AdbPagesCommand::ReceivedVersion, this));
|
| @@ -253,7 +258,7 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| }
|
|
|
| ParseSocketsList(response);
|
| - if (sockets_.size() == 0) {
|
| + if (browsers_.size() == 0) {
|
| devices_.pop_back();
|
| ProcessSerials();
|
| } else {
|
| @@ -263,12 +268,12 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
|
|
| void ProcessSockets() {
|
| DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current());
|
| - if (sockets_.size() == 0) {
|
| + if (browsers_.size() == 0) {
|
| devices_.pop_back();
|
| ProcessSerials();
|
| } else {
|
| scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back();
|
| - device->HttpQuery(sockets_.back(), kVersionRequest,
|
| + device->HttpQuery(browsers_.back()->socket(), kVersionRequest,
|
| base::Bind(&AdbPagesCommand::ReceivedVersion, this));
|
| }
|
| }
|
| @@ -277,7 +282,7 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| const std::string& response) {
|
| DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current());
|
| if (result < 0) {
|
| - sockets_.pop_back();
|
| + browsers_.pop_back();
|
| ProcessSockets();
|
| return;
|
| }
|
| @@ -288,22 +293,28 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| if (value && value->GetAsDictionary(&dict)) {
|
| std::string browser;
|
| if (dict->GetString("Browser", &browser)) {
|
| - socket_to_package_[sockets_.back()] = base::StringPrintf(
|
| - "%s (%s)", socket_to_package_[sockets_.back()].c_str(),
|
| - browser.c_str());
|
| + std::vector<std::string> parts;
|
| + Tokenize(browser, "/", &parts);
|
| + if (parts.size() == 2) {
|
| + if (parts[0] != "Version") // WebView has this for legacy reasons.
|
| + browsers_.back()->set_product(parts[0]);
|
| + browsers_.back()->set_version(parts[1]);
|
| + } else {
|
| + browsers_.back()->set_version(browser);
|
| + }
|
| }
|
| }
|
|
|
| scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back();
|
| - device->HttpQuery(sockets_.back(), kPageListRequest,
|
| + device->HttpQuery(browsers_.back()->socket(), kPageListRequest,
|
| base::Bind(&AdbPagesCommand::ReceivedPages, this));
|
| }
|
|
|
| void ReceivedPages(int result,
|
| const std::string& response) {
|
| DCHECK_EQ(bridge_->GetAdbMessageLoop(), base::MessageLoop::current());
|
| - std::string socket = sockets_.back();
|
| - sockets_.pop_back();
|
| + scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser = browsers_.back();
|
| + browsers_.pop_back();
|
| if (result < 0) {
|
| ProcessSockets();
|
| return;
|
| @@ -316,21 +327,15 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| return;
|
| }
|
|
|
| - scoped_refptr<DevToolsAdbBridge::AndroidDevice> device = devices_.back();
|
| base::Value* item;
|
|
|
| - scoped_refptr<DevToolsAdbBridge::RemoteBrowser> remote_browser =
|
| - new DevToolsAdbBridge::RemoteBrowser(
|
| - bridge_, device, socket, socket_to_package_[socket]);
|
| - remote_devices_->back()->AddBrowser(remote_browser);
|
| -
|
| for (size_t i = 0; i < list_value->GetSize(); ++i) {
|
| list_value->Get(i, &item);
|
| base::DictionaryValue* dict;
|
| if (!item || !item->GetAsDictionary(&dict))
|
| continue;
|
| - remote_browser->AddPage(new DevToolsAdbBridge::RemotePage(
|
| - bridge_, device, remote_browser->socket(), *dict));
|
| + browser->AddPage(new DevToolsAdbBridge::RemotePage(
|
| + bridge_, browser->device(), browser->socket(), *dict));
|
| }
|
| ProcessSockets();
|
| }
|
| @@ -351,7 +356,9 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| // and containing "devtools_remote". We have to extract the inode number
|
| // in order to find the owning process name.
|
|
|
| - socket_to_package_.clear();
|
| + scoped_refptr<DevToolsAdbBridge::RemoteDevice> remote_device =
|
| + remote_devices_->back();
|
| +
|
| std::vector<std::string> entries;
|
| Tokenize(response, "\n", &entries);
|
| const std::string channel_pattern =
|
| @@ -370,22 +377,25 @@ class AdbPagesCommand : public base::RefCountedThreadSafe<
|
| if (socket_name_pos == std::string::npos)
|
| continue;
|
| std::string socket = path_field.substr(1, path_field.size() - 2);
|
| - sockets_.push_back(socket);
|
| std::string package = path_field.substr(1, socket_name_pos - 1);
|
| if (socket_name_pos + channel_pattern.size() < path_field.size() - 1) {
|
| package += path_field.substr(
|
| socket_name_pos + channel_pattern.size(), path_field.size() - 1);
|
| }
|
| package[0] = base::ToUpperASCII(package[0]);
|
| - socket_to_package_[socket] = package;
|
| + scoped_refptr<DevToolsAdbBridge::RemoteBrowser> remote_browser =
|
| + new DevToolsAdbBridge::RemoteBrowser(
|
| + bridge_, remote_device->device(), socket);
|
| + remote_browser->set_product(package);
|
| + remote_device->AddBrowser(remote_browser);
|
| }
|
| + browsers_ = remote_device->browsers();
|
| }
|
|
|
| scoped_refptr<DevToolsAdbBridge> bridge_;
|
| Callback callback_;
|
| AndroidDevices devices_;
|
| - std::vector<std::string> sockets_;
|
| - std::map<std::string, std::string> socket_to_package_;
|
| + DevToolsAdbBridge::RemoteBrowsers browsers_;
|
| scoped_ptr<DevToolsAdbBridge::RemoteDevices> remote_devices_;
|
| };
|
|
|
| @@ -683,12 +693,10 @@ DevToolsAdbBridge::RemotePage::~RemotePage() {
|
| DevToolsAdbBridge::RemoteBrowser::RemoteBrowser(
|
| scoped_refptr<DevToolsAdbBridge> bridge,
|
| scoped_refptr<AndroidDevice> device,
|
| - const std::string& socket,
|
| - const std::string& name)
|
| + const std::string& socket)
|
| : bridge_(bridge),
|
| device_(device),
|
| - socket_(socket),
|
| - name_(name) {
|
| + socket_(socket) {
|
| }
|
|
|
| void DevToolsAdbBridge::RemoteBrowser::Open(const std::string& url) {
|
|
|