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

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: Removed unused include 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
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..76e2f59a298ba0fe9f5d95b93cbdd54cb78e084f 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -41,8 +41,6 @@ using content::BrowserThread;
namespace {
-const char kModelOffline[] = "Offline";
-
const char kPageListRequest[] = "/json";
const char kVersionRequest[] = "/json/version";
const char kClosePageRequest[] = "/json/close/%s";
@@ -65,14 +63,17 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
DiscoveryRequest,
BrowserThread::DeleteOnUIThread> {
public:
- typedef base::Callback<void(DevToolsAndroidBridge::RemoteDevices*)> Callback;
+ typedef base::Callback<void(scoped_ptr<DevToolsAndroidBridge::RemoteDevices>)>
+ DiscoveryCallback;
+ typedef AndroidDeviceManager::Device Device;
+ typedef AndroidDeviceManager::Devices Devices;
DiscoveryRequest(
scoped_refptr<DevToolsAndroidBridge> android_bridge,
AndroidDeviceManager* device_manager,
- base::MessageLoop* device_message_loop,
+ scoped_refptr<base::MessageLoopProxy> device_message_loop,
const AndroidDeviceManager::DeviceProviders& device_providers,
- const Callback& callback);
+ const DiscoveryCallback& callback);
private:
friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
@@ -80,14 +81,14 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
virtual ~DiscoveryRequest();
- void ReceivedSerials(const std::vector<std::string>& serials);
- void ProcessSerials();
+ 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);
- std::string current_serial() const { return serials_.back(); }
+ scoped_refptr<Device> current_device() { return devices_.back(); }
scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> current_browser() const {
return browsers_.back();
@@ -98,11 +99,8 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
void Respond();
- scoped_refptr<DevToolsAndroidBridge> android_bridge_;
- AndroidDeviceManager* device_manager_;
- base::MessageLoop* device_message_loop_;
- Callback callback_;
- std::vector<std::string> serials_;
+ DiscoveryCallback callback_;
+ Devices devices_;
DevToolsAndroidBridge::RemoteBrowsers browsers_;
scoped_ptr<DevToolsAndroidBridge::RemoteDevices> remote_devices_;
};
@@ -110,72 +108,55 @@ class DiscoveryRequest : public base::RefCountedThreadSafe<
DiscoveryRequest::DiscoveryRequest(
scoped_refptr<DevToolsAndroidBridge> android_bridge,
AndroidDeviceManager* device_manager,
- base::MessageLoop* device_message_loop,
+ scoped_refptr<base::MessageLoopProxy> device_message_loop,
const AndroidDeviceManager::DeviceProviders& device_providers,
- const Callback& callback)
- : android_bridge_(android_bridge),
- device_manager_(device_manager),
- device_message_loop_(device_message_loop),
- callback_(callback) {
+ const DiscoveryCallback& callback)
+ : callback_(callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
remote_devices_.reset(new DevToolsAndroidBridge::RemoteDevices());
- device_message_loop_->PostTask(
- FROM_HERE, base::Bind(
- &AndroidDeviceManager::QueryDevices,
- device_manager_,
- device_providers,
- base::Bind(&DiscoveryRequest::ReceivedSerials, this)));
+ device_manager->QueryDevices(
+ device_message_loop,
+ device_providers,
+ base::Bind(&DiscoveryRequest::ReceivedDevices, this));
}
DiscoveryRequest::~DiscoveryRequest() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
-void DiscoveryRequest::ReceivedSerials(
- const std::vector<std::string>& serials) {
- DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
- serials_ = serials;
- ProcessSerials();
+void DiscoveryRequest::ReceivedDevices(const Devices& devices) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ devices_ = devices;
+ ProcessDevices();
}
-void DiscoveryRequest::ProcessSerials() {
- DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
- if (serials_.size() == 0) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&DiscoveryRequest::Respond, this));
+void DiscoveryRequest::ProcessDevices() {
+ if (devices_.size() == 0) {
+ Respond();
return;
}
- if (device_manager_->IsConnected(current_serial())) {
- device_manager_->QueryDeviceInfo(current_serial(),
- base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this));
- } else {
- AndroidDeviceManager::DeviceInfo offline_info;
- offline_info.model = kModelOffline;
- remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
- android_bridge_, current_serial(), offline_info, false));
- NextDevice();
- }
+ current_device()->QueryDeviceInfo(
+ base::Bind(&DiscoveryRequest::ReceivedDeviceInfo, this));
}
void DiscoveryRequest::ReceivedDeviceInfo(
const AndroidDeviceManager::DeviceInfo& device_info) {
- remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
- android_bridge_, current_serial(), device_info, true));
+ 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() {
- DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
if (browsers_.size() == 0) {
NextDevice();
return;
}
- device_manager_->HttpQuery(
- current_serial(),
+ current_device()->SendJsonRequest(
current_browser()->socket(),
kVersionRequest,
base::Bind(&DiscoveryRequest::ReceivedVersion, this));
@@ -183,7 +164,7 @@ void DiscoveryRequest::ProcessSockets() {
void DiscoveryRequest::ReceivedVersion(int result,
const std::string& response) {
- DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (result < 0) {
NextBrowser();
return;
@@ -210,8 +191,7 @@ void DiscoveryRequest::ReceivedVersion(int result,
}
}
- device_manager_->HttpQuery(
- current_serial(),
+ current_device()->SendJsonRequest(
current_browser()->socket(),
kPageListRequest,
base::Bind(&DiscoveryRequest::ReceivedPages, this));
@@ -219,7 +199,7 @@ void DiscoveryRequest::ReceivedVersion(int result,
void DiscoveryRequest::ReceivedPages(int result,
const std::string& response) {
- DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (result >= 0) {
scoped_ptr<base::Value> value(base::JSONReader::Read(response));
base::ListValue* list_value;
@@ -235,12 +215,12 @@ void DiscoveryRequest::NextBrowser() {
}
void DiscoveryRequest::NextDevice() {
- serials_.pop_back();
- ProcessSerials();
+ devices_.pop_back();
+ ProcessDevices();
}
void DiscoveryRequest::Respond() {
- callback_.Run(remote_devices_.release());
+ callback_.Run(remote_devices_.Pass());
}
// ProtocolCommand ------------------------------------------------------------
@@ -582,11 +562,9 @@ void RemotePageTarget::Navigate(const std::string& url,
// DevToolsAndroidBridge::RemoteBrowser ---------------------------------------
DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser(
- scoped_refptr<DevToolsAndroidBridge> android_bridge,
- const std::string& serial,
+ scoped_refptr<Device> device,
const AndroidDeviceManager::BrowserInfo& browser_info)
- : android_bridge_(android_bridge),
- serial_(serial),
+ : device_(device),
socket_(browser_info.socket_name),
display_name_(browser_info.display_name),
type_(browser_info.type),
@@ -636,7 +614,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 +625,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_->SendJsonRequest(socket_, request, callback);
}
void DevToolsAndroidBridge::RemoteBrowser::SendProtocolCommand(
@@ -678,7 +651,14 @@ void DevToolsAndroidBridge::RemoteBrowser::Open(
scoped_refptr<content::DevToolsAgentHost>
DevToolsAndroidBridge::RemoteBrowser::GetAgentHost() {
return AgentHostDelegate::GetOrCreateAgentHost(
- "adb:" + serial_ + ":" + socket_, this, kBrowserTargetSocket);
+ "adb:" + device_->serial() + ":" + socket_, this, kBrowserTargetSocket);
+}
+
+scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket>
+DevToolsAndroidBridge::RemoteBrowser::CreateWebSocket(
+ const std::string& url,
+ DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate) {
+ return device_->CreateWebSocket(socket_, url, delegate);
}
void DevToolsAndroidBridge::RemoteBrowser::RespondToOpenOnUIThread(
@@ -758,37 +738,27 @@ void DevToolsAndroidBridge::RemoteBrowser::NavigatePageOnUIThread(
DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() {
}
-
// DevToolsAndroidBridge::RemoteDevice ----------------------------------------
DevToolsAndroidBridge::RemoteDevice::RemoteDevice(
- scoped_refptr<DevToolsAndroidBridge> android_bridge,
- const std::string& serial,
- const AndroidDeviceManager::DeviceInfo& device_info,
- bool connected)
- : android_bridge_(android_bridge),
- serial_(serial),
+ scoped_refptr<AndroidDeviceManager::Device> device,
+ const AndroidDeviceManager::DeviceInfo& device_info)
+ : device_(device),
model_(device_info.model),
- connected_(connected),
+ connected_(device_info.connected),
screen_size_(device_info.screen_size) {
for (std::vector<AndroidDeviceManager::BrowserInfo>::const_iterator it =
device_info.browser_info.begin();
it != device_info.browser_info.end();
++it) {
- browsers_.push_back(new DevToolsAndroidBridge::RemoteBrowser(
- android_bridge_, serial_, *it));
+ browsers_.push_back(new DevToolsAndroidBridge::RemoteBrowser(device, *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_->OpenSocket(socket_name, callback);
}
DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
@@ -821,8 +791,9 @@ DevToolsAndroidBridge::HandlerThread::HandlerThread() {
}
}
-base::MessageLoop* DevToolsAndroidBridge::HandlerThread::message_loop() {
- return thread_ ? thread_->message_loop() : NULL;
+scoped_refptr<base::MessageLoopProxy>
+DevToolsAndroidBridge::HandlerThread::message_loop() {
+ return thread_ ? thread_->message_loop_proxy() : NULL;
}
// static
@@ -854,7 +825,7 @@ DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
base::Unretained(this)));
CreateDeviceProviders();
base::PostTaskAndReplyWithResult(
- device_message_loop()->message_loop_proxy(),
+ device_message_loop(),
FROM_HERE,
base::Bind(&AndroidDeviceManager::Create),
base::Bind(&DevToolsAndroidBridge::CreatedDeviceManager, this));
@@ -875,10 +846,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())
+ devices_.clear();
}
void DevToolsAndroidBridge::AddDeviceCountListener(
@@ -940,14 +909,15 @@ void DevToolsAndroidBridge::CreatedDeviceManager(
RequestDeviceCount();
}
-void DevToolsAndroidBridge::ReceivedDeviceList(RemoteDevices* devices_ptr) {
+void DevToolsAndroidBridge::ReceivedDeviceList(
+ scoped_ptr<RemoteDevices> devices) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- scoped_ptr<RemoteDevices> devices(devices_ptr);
-
if (device_list_listeners_.empty())
return;
+ devices_ = *devices;
+
DeviceListListeners copy(device_list_listeners_);
for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
(*it)->DeviceListChanged(*devices.get());

Powered by Google App Engine
This is Rietveld 408576698