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

Unified Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 287643002: DevTools: Partially redesigned DevToolsAndroidBridge and AndroidDeviceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Encapsulated DeviceHandle::android_bridge_ 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
« no previous file with comments | « chrome/browser/devtools/device/devtools_android_bridge.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 71257c644e61d6098d91771b5b1df0bd67ac137d..ec074136d917d801d1924baef26322f9045279ce 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -65,10 +65,12 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
DiscoveryRequest,
BrowserThread::DeleteOnUIThread> {
public:
- typedef base::Callback<void(DevToolsAndroidBridge::RemoteDevices*)> Callback;
+ typedef base::Callback<void(DevToolsAndroidBridge::RemoteDevices*,
Vladislav Kaznacheev 2014/05/20 13:06:12 While we are at it lets change the types of both p
vkuzkokov 2014/05/20 14:25:50 Done.
+ DevToolsAndroidBridge::DeviceHandleMap*)> Callback;
DiscoveryRequest(
scoped_refptr<DevToolsAndroidBridge> android_bridge,
+ const DevToolsAndroidBridge::DeviceHandleMap& device_handles,
AndroidDeviceManager* device_manager,
base::MessageLoop* device_message_loop,
const AndroidDeviceManager::DeviceProviders& device_providers,
@@ -98,6 +100,9 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
void Respond();
+ scoped_refptr<DevToolsAndroidBridge::DeviceHandle>
+ FindDeviceHandle(const std::string& serial);
+
scoped_refptr<DevToolsAndroidBridge> android_bridge_;
AndroidDeviceManager* device_manager_;
base::MessageLoop* device_message_loop_;
@@ -105,10 +110,13 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
std::vector<std::string> serials_;
DevToolsAndroidBridge::RemoteBrowsers browsers_;
scoped_ptr<DevToolsAndroidBridge::RemoteDevices> remote_devices_;
+ DevToolsAndroidBridge::DeviceHandleMap device_handles_;
Vladislav Kaznacheev 2014/05/20 13:06:12 I am a bit confused about the names (device_handle
vkuzkokov 2014/05/20 14:25:50 I renamed device_handles_ to all_device_handles_ (
+ scoped_ptr<DevToolsAndroidBridge::DeviceHandleMap> used_device_handles_;
};
DiscoveryRequest::DiscoveryRequest(
scoped_refptr<DevToolsAndroidBridge> android_bridge,
+ const DevToolsAndroidBridge::DeviceHandleMap& device_handles,
AndroidDeviceManager* device_manager,
base::MessageLoop* device_message_loop,
const AndroidDeviceManager::DeviceProviders& device_providers,
@@ -116,8 +124,10 @@ DiscoveryRequest::DiscoveryRequest(
: android_bridge_(android_bridge),
device_manager_(device_manager),
device_message_loop_(device_message_loop),
- callback_(callback) {
+ callback_(callback),
+ device_handles_(device_handles) {
remote_devices_.reset(new DevToolsAndroidBridge::RemoteDevices());
+ used_device_handles_.reset(new DevToolsAndroidBridge::DeviceHandleMap());
device_message_loop_->PostTask(
FROM_HERE, base::Bind(
@@ -154,7 +164,7 @@ void DiscoveryRequest::ProcessSerials() {
AndroidDeviceManager::DeviceInfo offline_info;
offline_info.model = kModelOffline;
remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
- android_bridge_, current_serial(), offline_info, false));
+ FindDeviceHandle(current_serial()), offline_info, false));
NextDevice();
}
}
@@ -162,7 +172,7 @@ void DiscoveryRequest::ProcessSerials() {
void DiscoveryRequest::ReceivedDeviceInfo(
const AndroidDeviceManager::DeviceInfo& device_info) {
remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
- android_bridge_, current_serial(), device_info, true));
+ FindDeviceHandle(current_serial()), device_info, true));
browsers_ = remote_devices_->back()->browsers();
ProcessSockets();
}
@@ -240,7 +250,23 @@ void DiscoveryRequest::NextDevice() {
}
void DiscoveryRequest::Respond() {
- callback_.Run(remote_devices_.release());
+ callback_.Run(remote_devices_.release(), used_device_handles_.release());
+}
+
+scoped_refptr<DevToolsAndroidBridge::DeviceHandle>
+DiscoveryRequest::FindDeviceHandle(const std::string& serial) {
+ DevToolsAndroidBridge::DeviceHandleMap::iterator it =
+ device_handles_.find(serial);
+ scoped_refptr<DevToolsAndroidBridge::DeviceHandle> device_handle;
+ if (it != device_handles_.end()) {
+ device_handle = it->second;
+ } else {
+ device_handle = new DevToolsAndroidBridge::DeviceHandle(android_bridge_,
+ serial);
+ device_handles_[serial] = device_handle;
+ }
+ (*used_device_handles_)[serial] = device_handle;
+ return device_handle;
}
// ProtocolCommand ------------------------------------------------------------
@@ -582,11 +608,9 @@ void RemotePageTarget::Navigate(const std::string& url,
// DevToolsAndroidBridge::RemoteBrowser ---------------------------------------
DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser(
- scoped_refptr<DevToolsAndroidBridge> android_bridge,
- const std::string& serial,
+ scoped_refptr<DeviceHandle> device_handle,
const AndroidDeviceManager::BrowserInfo& browser_info)
- : android_bridge_(android_bridge),
- serial_(serial),
+ : device_handle_(device_handle),
socket_(browser_info.socket_name),
display_name_(browser_info.display_name),
type_(browser_info.type),
@@ -636,7 +660,7 @@ void DevToolsAndroidBridge::RemoteBrowser::SetPageDescriptors(
}
static void RespondOnUIThread(
- const DevToolsAndroidBridge::RemoteBrowser::JsonRequestCallback& callback,
+ const DevToolsAndroidBridge::JsonRequestCallback& callback,
int result,
const std::string& response) {
if (callback.is_null())
@@ -647,12 +671,7 @@ static void RespondOnUIThread(
void DevToolsAndroidBridge::RemoteBrowser::SendJsonRequest(
const std::string& request, const JsonRequestCallback& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- android_bridge_->device_message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&AndroidDeviceManager::HttpQuery,
- android_bridge_->device_manager(), serial_, socket_, request,
- base::Bind(&RespondOnUIThread, callback)));
+ device_handle_->SendJsonRequest(socket_, request, callback);
}
void DevToolsAndroidBridge::RemoteBrowser::SendProtocolCommand(
@@ -678,7 +697,16 @@ void DevToolsAndroidBridge::RemoteBrowser::Open(
scoped_refptr<content::DevToolsAgentHost>
DevToolsAndroidBridge::RemoteBrowser::GetAgentHost() {
return AgentHostDelegate::GetOrCreateAgentHost(
- "adb:" + serial_ + ":" + socket_, this, kBrowserTargetSocket);
+ "adb:" + device_handle_->serial() + ":" + socket_,
+ this,
+ kBrowserTargetSocket);
+}
+
+scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket>
+DevToolsAndroidBridge::RemoteBrowser::CreateWebSocket(
+ const std::string& url,
+ DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate) {
+ return device_handle_->CreateWebSocket(socket_, url, delegate);
}
void DevToolsAndroidBridge::RemoteBrowser::RespondToOpenOnUIThread(
@@ -758,16 +786,13 @@ void DevToolsAndroidBridge::RemoteBrowser::NavigatePageOnUIThread(
DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() {
}
-
// DevToolsAndroidBridge::RemoteDevice ----------------------------------------
DevToolsAndroidBridge::RemoteDevice::RemoteDevice(
- scoped_refptr<DevToolsAndroidBridge> android_bridge,
- const std::string& serial,
+ scoped_refptr<DevToolsAndroidBridge::DeviceHandle> device_handle,
const AndroidDeviceManager::DeviceInfo& device_info,
bool connected)
- : android_bridge_(android_bridge),
- serial_(serial),
+ : device_handle_(device_handle),
model_(device_info.model),
connected_(connected),
screen_size_(device_info.screen_size) {
@@ -776,19 +801,14 @@ DevToolsAndroidBridge::RemoteDevice::RemoteDevice(
it != device_info.browser_info.end();
++it) {
browsers_.push_back(new DevToolsAndroidBridge::RemoteBrowser(
- android_bridge_, serial_, *it));
+ device_handle, *it));
}
}
void DevToolsAndroidBridge::RemoteDevice::OpenSocket(
const std::string& socket_name,
const AndroidDeviceManager::SocketCallback& callback) {
- android_bridge_->device_message_loop()->PostTask(FROM_HERE,
- base::Bind(&AndroidDeviceManager::OpenSocket,
- android_bridge_->device_manager(),
- serial_,
- socket_name,
- callback));
+ device_handle_->OpenSocket(socket_name, callback);
}
DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
@@ -842,6 +862,48 @@ DevToolsAndroidBridge::HandlerThread::~HandlerThread() {
base::Bind(&HandlerThread::StopThread, thread_));
}
+// DevToolsAndroidBridge::DeviceHandle ----------------------------------------
+
+DevToolsAndroidBridge::DeviceHandle::DeviceHandle(
+ scoped_refptr<DevToolsAndroidBridge> android_bridge,
+ const std::string& serial)
+ : android_bridge_(android_bridge),
+ serial_(serial) {
+}
+
+void DevToolsAndroidBridge::DeviceHandle::SendJsonRequest(
+ const std::string& socket,
+ const std::string& request,
+ const JsonRequestCallback& callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ android_bridge_->device_message_loop()->PostTask(
+ FROM_HERE,
+ base::Bind(&AndroidDeviceManager::HttpQuery,
+ android_bridge_->device_manager(),
+ serial_,
+ socket,
+ request,
+ base::Bind(&RespondOnUIThread, callback)));
+}
+
+void DevToolsAndroidBridge::DeviceHandle::OpenSocket(
+ const std::string& socket_name,
+ const AndroidDeviceManager::SocketCallback& callback) {
+ android_bridge_->device_message_loop()->PostTask(FROM_HERE,
+ base::Bind(&AndroidDeviceManager::OpenSocket,
+ android_bridge_->device_manager(),
+ serial_,
+ socket_name,
+ callback));
+}
+
+DevToolsAndroidBridge::DeviceHandle::~DeviceHandle() {
+ android_bridge_->device_message_loop()->PostTask(FROM_HERE,
+ base::Bind(&AndroidDeviceManager::ReleaseDevice,
+ android_bridge_->device_manager(),
+ serial_));
+}
+
// DevToolsAndroidBridge ------------------------------------------------------
DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
@@ -875,10 +937,8 @@ void DevToolsAndroidBridge::RemoveDeviceListListener(
device_list_listeners_.begin(), device_list_listeners_.end(), listener);
DCHECK(it != device_list_listeners_.end());
device_list_listeners_.erase(it);
- if (device_list_listeners_.empty() && device_manager_) {
- device_message_loop()->PostTask(FROM_HERE,
- base::Bind(&AndroidDeviceManager::Stop, device_manager_));
- }
+ if (device_list_listeners_.empty() && device_manager_)
+ device_handles_.clear();
}
void DevToolsAndroidBridge::AddDeviceCountListener(
@@ -903,6 +963,15 @@ bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) {
return g_host_delegates.Get().find(agent_id) != g_host_delegates.Get().end();
}
+void DevToolsAndroidBridge::IsConnectedForTest(const std::string& serial,
+ const base::Callback<void(bool)>& callback) {
+ base::PostTaskAndReplyWithResult(
+ device_message_loop()->message_loop_proxy(),
+ FROM_HERE,
+ base::Bind(&AndroidDeviceManager::IsConnected, device_manager_, serial),
+ callback);
+}
+
DevToolsAndroidBridge::~DevToolsAndroidBridge() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(device_list_listeners_.empty());
@@ -924,6 +993,7 @@ void DevToolsAndroidBridge::RequestDeviceList() {
new DiscoveryRequest(
this,
+ device_handles_,
device_manager(),
device_message_loop(),
device_providers_,
@@ -940,14 +1010,18 @@ void DevToolsAndroidBridge::CreatedDeviceManager(
RequestDeviceCount();
}
-void DevToolsAndroidBridge::ReceivedDeviceList(RemoteDevices* devices_ptr) {
+void DevToolsAndroidBridge::ReceivedDeviceList(RemoteDevices* devices_ptr,
+ DeviceHandleMap* device_handles_ptr) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
scoped_ptr<RemoteDevices> devices(devices_ptr);
+ scoped_ptr<DeviceHandleMap> device_handles(device_handles_ptr);
if (device_list_listeners_.empty())
return;
+ device_handles_ = *device_handles.get();
+
DeviceListListeners copy(device_list_listeners_);
for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
(*it)->DeviceListChanged(*devices.get());
« no previous file with comments | « chrome/browser/devtools/device/devtools_android_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698