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

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

Issue 500373004: DevTools: Make port forwarding part of DevToolsAndroidBridge. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 c850b5cccd5e48a8ce6c44c99b0f44ad4e675101..db7f1f5f4262b7ae0dc618db73f88cb8bbafb803 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
#include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
#include "chrome/browser/devtools/device/adb/adb_device_provider.h"
+#include "chrome/browser/devtools/device/port_forwarding_controller.h"
#include "chrome/browser/devtools/device/self_device_provider.h"
#include "chrome/browser/devtools/device/usb/usb_device_provider.h"
#include "chrome/browser/devtools/devtools_protocol.h"
@@ -733,7 +734,8 @@ DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
: profile_(profile),
device_manager_(AndroidDeviceManager::Create()),
- task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)) {
+ task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)),
+ port_forwarding_controller_(new PortForwardingController(profile)) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
pref_change_registrar_.Init(profile_->GetPrefs());
pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled,
@@ -745,8 +747,9 @@ DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
void DevToolsAndroidBridge::AddDeviceListListener(
DeviceListListener* listener) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ bool polling_was_off = !NeedsDeviceListPolling();
device_list_listeners_.push_back(listener);
- if (device_list_listeners_.size() == 1)
+ if (polling_was_off)
StartDeviceListPolling();
}
@@ -757,7 +760,7 @@ 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())
+ if (!NeedsDeviceListPolling())
StopDeviceListPolling();
}
@@ -779,6 +782,26 @@ void DevToolsAndroidBridge::RemoveDeviceCountListener(
StopDeviceCountPolling();
}
+void DevToolsAndroidBridge::AddPortForwardingListener(
+ PortForwardingListener* listener) {
+ bool polling_was_off = !NeedsDeviceListPolling();
+ port_forwarding_listeners_.push_back(listener);
+ if (polling_was_off)
+ StartDeviceListPolling();
+}
+
+void DevToolsAndroidBridge::RemovePortForwardingListener(
+ PortForwardingListener* listener) {
+ PortForwardingListeners::iterator it = std::find(
+ port_forwarding_listeners_.begin(),
+ port_forwarding_listeners_.end(),
+ listener);
+ DCHECK(it != port_forwarding_listeners_.end());
+ port_forwarding_listeners_.erase(it);
+ if (!NeedsDeviceListPolling())
+ StopDeviceListPolling();
+}
+
// static
bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -789,6 +812,7 @@ DevToolsAndroidBridge::~DevToolsAndroidBridge() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(device_list_listeners_.empty());
DCHECK(device_count_listeners_.empty());
+ DCHECK(port_forwarding_listeners_.empty());
}
void DevToolsAndroidBridge::StartDeviceListPolling() {
@@ -802,11 +826,15 @@ void DevToolsAndroidBridge::StopDeviceListPolling() {
devices_.clear();
}
+bool DevToolsAndroidBridge::NeedsDeviceListPolling() {
+ return !device_list_listeners_.empty() || !port_forwarding_listeners_.empty();
+}
+
void DevToolsAndroidBridge::RequestDeviceList(
const base::Callback<void(const RemoteDevices&)>& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (device_list_listeners_.empty() ||
+ if (!NeedsDeviceListPolling() ||
!callback.Equals(device_list_callback_.callback()))
return;
@@ -820,7 +848,15 @@ void DevToolsAndroidBridge::ReceivedDeviceList(const RemoteDevices& devices) {
for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
(*it)->DeviceListChanged(devices);
- if (device_list_listeners_.empty())
+ DevicesStatus status =
+ port_forwarding_controller_->DeviceListChanged(devices);
+ PortForwardingListeners forwarding_listeners(port_forwarding_listeners_);
+ for (PortForwardingListeners::iterator it = forwarding_listeners.begin();
+ it != forwarding_listeners.end(); ++it) {
+ (*it)->PortStatusChanged(status);
+ }
+
+ if (!NeedsDeviceListPolling())
return;
devices_ = devices;
@@ -896,7 +932,7 @@ void DevToolsAndroidBridge::CreateDeviceProviders() {
device_providers.push_back(new UsbDeviceProvider(profile_));
}
device_manager_->SetDeviceProviders(device_providers);
- if (!device_list_listeners_.empty()) {
+ if (NeedsDeviceListPolling()) {
StopDeviceListPolling();
StartDeviceListPolling();
}

Powered by Google App Engine
This is Rietveld 408576698