Index: chrome/browser/devtools/device/devtools_android_bridge.cc |
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc |
index 7b51d4ff9e013362c60788f08ad73a04781cdf87..a7861a9f2cc690daf5800e0b7822ac05bda3ce8d 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 ------------------------------------------------------------ |