summaryrefslogtreecommitdiffstats
path: root/chrome/browser/devtools/device/devtools_android_bridge.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/devtools/device/devtools_android_bridge.cc')
-rw-r--r--chrome/browser/devtools/device/devtools_android_bridge.cc150
1 files changed, 54 insertions, 96 deletions
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
index 7b51d4f..a7861a9 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -63,43 +63,34 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
DiscoveryRequest,
BrowserThread::DeleteOnUIThread> {
public:
- typedef base::Callback<void(const DevToolsAndroidBridge::RemoteDevices&)>
- DiscoveryCallback;
typedef AndroidDeviceManager::Device Device;
typedef AndroidDeviceManager::Devices Devices;
-
- DiscoveryRequest(
- AndroidDeviceManager* device_manager,
- const DiscoveryCallback& callback);
-
+ typedef AndroidDeviceManager::DeviceInfo DeviceInfo;
+ typedef DevToolsAndroidBridge::RemoteDevice RemoteDevice;
+ typedef DevToolsAndroidBridge::RemoteDevices RemoteDevices;
+ typedef DevToolsAndroidBridge::RemoteBrowser RemoteBrowser;
+ typedef DevToolsAndroidBridge::RemoteBrowsers RemoteBrowsers;
+ typedef base::Callback<void(const RemoteDevices&)> DiscoveryCallback;
+
+ DiscoveryRequest(AndroidDeviceManager* device_manager,
+ const DiscoveryCallback& callback);
private:
friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
friend class base::DeleteHelper<DiscoveryRequest>;
-
virtual ~DiscoveryRequest();
void ReceivedDevices(const Devices& devices);
- void ProcessDevices();
- void ReceivedDeviceInfo(const AndroidDeviceManager::DeviceInfo& device_info);
- void ProcessSockets();
- void ReceivedVersion(int result, const std::string& response);
- void ReceivedPages(int result, const std::string& response);
-
- scoped_refptr<Device> current_device() { return devices_.back(); }
-
- scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> current_browser() const {
- return browsers_.back();
- }
-
- void NextBrowser();
- void NextDevice();
-
- void Respond();
+ void ReceivedDeviceInfo(scoped_refptr<Device> device,
+ const DeviceInfo& device_info);
+ void ReceivedVersion(scoped_refptr<RemoteBrowser>,
+ int result,
+ const std::string& response);
+ void ReceivedPages(scoped_refptr<RemoteBrowser>,
+ int result,
+ const std::string& response);
DiscoveryCallback callback_;
- Devices devices_;
- DevToolsAndroidBridge::RemoteBrowsers browsers_;
- DevToolsAndroidBridge::RemoteDevices remote_devices_;
+ RemoteDevices remote_devices_;
};
DiscoveryRequest::DiscoveryRequest(
@@ -107,111 +98,78 @@ DiscoveryRequest::DiscoveryRequest(
const DiscoveryCallback& callback)
: callback_(callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
device_manager->QueryDevices(
base::Bind(&DiscoveryRequest::ReceivedDevices, this));
}
DiscoveryRequest::~DiscoveryRequest() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ callback_.Run(remote_devices_);
}
void DiscoveryRequest::ReceivedDevices(const Devices& devices) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- devices_ = devices;
- ProcessDevices();
-}
-
-void DiscoveryRequest::ProcessDevices() {
- if (devices_.size() == 0) {
- Respond();
- return;
+ for (Devices::const_iterator it = devices.begin();
+ it != devices.end(); ++it) {
+ (*it)->QueryDeviceInfo(
+ base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this, *it));
}
-
- current_device()->QueryDeviceInfo(
- base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this));
}
-void DiscoveryRequest::ReceivedDeviceInfo(
- const AndroidDeviceManager::DeviceInfo& device_info) {
+void DiscoveryRequest::ReceivedDeviceInfo(scoped_refptr<Device> device,
+ const DeviceInfo& device_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- remote_devices_.push_back(
- new DevToolsAndroidBridge::RemoteDevice(current_device(), device_info));
- browsers_ = remote_devices_.back()->browsers();
- ProcessSockets();
-}
-
-void DiscoveryRequest::ProcessSockets() {
- if (browsers_.size() == 0) {
- NextDevice();
- return;
+ scoped_refptr<RemoteDevice> remote_device =
+ new RemoteDevice(device, device_info);
+ remote_devices_.push_back(remote_device);
+ for (RemoteBrowsers::iterator it = remote_device->browsers().begin();
+ it != remote_device->browsers().end(); ++it) {
+ (*it)->SendJsonRequest(
+ kVersionRequest,
+ base::Bind(&DiscoveryRequest::ReceivedVersion, this, *it));
+ (*it)->SendJsonRequest(
+ kPageListRequest,
+ base::Bind(&DiscoveryRequest::ReceivedPages, this, *it));
}
-
- current_device()->SendJsonRequest(
- current_browser()->socket(),
- kVersionRequest,
- base::Bind(&DiscoveryRequest::ReceivedVersion, this));
}
-void DiscoveryRequest::ReceivedVersion(int result,
+void DiscoveryRequest::ReceivedVersion(scoped_refptr<RemoteBrowser> browser,
+ int result,
const std::string& response) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (result < 0) {
- NextBrowser();
+ if (result < 0)
return;
- }
-
// Parse version, append to package name if available,
scoped_ptr<base::Value> value(base::JSONReader::Read(response));
base::DictionaryValue* dict;
if (value && value->GetAsDictionary(&dict)) {
- std::string browser;
- if (dict->GetString("Browser", &browser)) {
+ std::string browser_name;
+ if (dict->GetString("Browser", &browser_name)) {
std::vector<std::string> parts;
- Tokenize(browser, "/", &parts);
+ Tokenize(browser_name, "/", &parts);
if (parts.size() == 2)
- current_browser()->set_version(parts[1]);
+ browser->set_version(parts[1]);
else
- current_browser()->set_version(browser);
+ browser->set_version(browser_name);
}
std::string package;
if (dict->GetString("Android-Package", &package)) {
- current_browser()->set_display_name(
- AdbDeviceInfoQuery::GetDisplayName(current_browser()->socket(),
- package));
+ browser->set_display_name(
+ AdbDeviceInfoQuery::GetDisplayName(browser->socket(), package));
}
}
-
- current_device()->SendJsonRequest(
- current_browser()->socket(),
- kPageListRequest,
- base::Bind(&DiscoveryRequest::ReceivedPages, this));
}
-void DiscoveryRequest::ReceivedPages(int result,
+void DiscoveryRequest::ReceivedPages(scoped_refptr<RemoteBrowser> browser,
+ int result,
const std::string& response) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (result >= 0) {
- scoped_ptr<base::Value> value(base::JSONReader::Read(response));
- base::ListValue* list_value;
- if (value && value->GetAsList(&list_value))
- current_browser()->SetPageDescriptors(*list_value);
- }
- NextBrowser();
-}
-
-void DiscoveryRequest::NextBrowser() {
- browsers_.pop_back();
- ProcessSockets();
-}
-
-void DiscoveryRequest::NextDevice() {
- devices_.pop_back();
- ProcessDevices();
-}
-
-void DiscoveryRequest::Respond() {
- callback_.Run(remote_devices_);
+ if (result < 0)
+ return;
+ scoped_ptr<base::Value> value(base::JSONReader::Read(response));
+ base::ListValue* list_value;
+ if (value && value->GetAsList(&list_value))
+ browser->SetPageDescriptors(*list_value);
}
// ProtocolCommand ------------------------------------------------------------