summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvkuzkokov <vkuzkokov@chromium.org>2014-10-01 07:10:38 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-01 14:11:17 +0000
commit32c0c074851af344977fd5c751b555800f09215c (patch)
treeed8c1cd8765ba83c39597fc47dde255ba3741789
parent29721be74a8349767def35b6c0365ce4e4d79070 (diff)
downloadchromium_src-32c0c074851af344977fd5c751b555800f09215c.zip
chromium_src-32c0c074851af344977fd5c751b555800f09215c.tar.gz
chromium_src-32c0c074851af344977fd5c751b555800f09215c.tar.bz2
DevTools: Display info icon after browser providing port forwarding
BUG=410789 Review URL: https://codereview.chromium.org/568433004 Cr-Commit-Position: refs/heads/master@{#297641}
-rw-r--r--chrome/browser/devtools/device/devtools_android_bridge.cc2
-rw-r--r--chrome/browser/devtools/device/devtools_android_bridge.h9
-rw-r--r--chrome/browser/devtools/device/port_forwarding_browsertest.cc2
-rw-r--r--chrome/browser/devtools/device/port_forwarding_controller.cc12
-rw-r--r--chrome/browser/devtools/device/port_forwarding_controller.h5
-rw-r--r--chrome/browser/devtools/devtools_targets_ui.cc41
-rw-r--r--chrome/browser/devtools/devtools_targets_ui.h2
-rw-r--r--chrome/browser/resources/inspect/inspect.css12
-rw-r--r--chrome/browser/resources/inspect/inspect.js56
9 files changed, 96 insertions, 45 deletions
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
index 16d173b..4e3facf 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -845,7 +845,7 @@ void DevToolsAndroidBridge::ReceivedDeviceList(const RemoteDevices& devices) {
for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
(*it)->DeviceListChanged(devices);
- DevicesStatus status =
+ ForwardingStatus status =
port_forwarding_controller_->DeviceListChanged(devices);
PortForwardingListeners forwarding_listeners(port_forwarding_listeners_);
for (PortForwardingListeners::iterator it = forwarding_listeners.begin();
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.h b/chrome/browser/devtools/device/devtools_android_bridge.h
index 2f283a1..d9fd837 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.h
+++ b/chrome/browser/devtools/device/devtools_android_bridge.h
@@ -211,14 +211,17 @@ class DevToolsAndroidBridge
typedef int PortStatus;
typedef std::map<int, PortStatus> PortStatusMap;
- typedef std::map<std::string, PortStatusMap> DevicesStatus;
+ typedef std::pair<scoped_refptr<RemoteBrowser>, PortStatusMap>
+ BrowserStatus;
+ typedef std::vector<BrowserStatus> ForwardingStatus;
class PortForwardingListener {
public:
typedef DevToolsAndroidBridge::PortStatusMap PortStatusMap;
- typedef DevToolsAndroidBridge::DevicesStatus DevicesStatus;
+ typedef DevToolsAndroidBridge::BrowserStatus BrowserStatus;
+ typedef DevToolsAndroidBridge::ForwardingStatus ForwardingStatus;
- virtual void PortStatusChanged(const DevicesStatus&) = 0;
+ virtual void PortStatusChanged(const ForwardingStatus&) = 0;
protected:
virtual ~PortForwardingListener() {}
};
diff --git a/chrome/browser/devtools/device/port_forwarding_browsertest.cc b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
index 959c1cb..cb5a98d 100644
--- a/chrome/browser/devtools/device/port_forwarding_browsertest.cc
+++ b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
@@ -49,7 +49,7 @@ class PortForwardingTest: public InProcessBrowserTest {
RemovePortForwardingListener(this);
}
- virtual void PortStatusChanged(const DevicesStatus& status) OVERRIDE {
+ virtual void PortStatusChanged(const ForwardingStatus& status) OVERRIDE {
if (status.empty() && skip_empty_devices_)
return;
base::MessageLoop::current()->PostTask(
diff --git a/chrome/browser/devtools/device/port_forwarding_controller.cc b/chrome/browser/devtools/device/port_forwarding_controller.cc
index 0bc9c17..f7394c6 100644
--- a/chrome/browser/devtools/device/port_forwarding_controller.cc
+++ b/chrome/browser/devtools/device/port_forwarding_controller.cc
@@ -264,6 +264,10 @@ class PortForwardingController::Connection
void UpdateForwardingMap(const ForwardingMap& new_forwarding_map);
+ scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser() {
+ return browser_;
+ }
+
private:
friend struct content::BrowserThread::DeleteOnThread<
content::BrowserThread::UI>;
@@ -530,10 +534,10 @@ PortForwardingController::PortForwardingController(Profile* profile)
PortForwardingController::~PortForwardingController() {}
-PortForwardingController::DevicesStatus
+PortForwardingController::ForwardingStatus
PortForwardingController::DeviceListChanged(
const DevToolsAndroidBridge::RemoteDevices& devices) {
- DevicesStatus status;
+ ForwardingStatus status;
if (forwarding_map_.empty())
return status;
@@ -550,10 +554,10 @@ PortForwardingController::DeviceListChanged(
new Connection(&registry_, device, browser, forwarding_map_);
}
} else {
- status[device->serial()] = (*rit).second->GetPortStatusMap();
+ status.push_back(std::make_pair(rit->second->browser(),
+ rit->second->GetPortStatusMap()));
}
}
-
return status;
}
diff --git a/chrome/browser/devtools/device/port_forwarding_controller.h b/chrome/browser/devtools/device/port_forwarding_controller.h
index c1074bf..d584f69 100644
--- a/chrome/browser/devtools/device/port_forwarding_controller.h
+++ b/chrome/browser/devtools/device/port_forwarding_controller.h
@@ -19,13 +19,14 @@ class PortForwardingController {
public:
typedef DevToolsAndroidBridge::PortStatus PortStatus;
typedef DevToolsAndroidBridge::PortStatusMap PortStatusMap;
- typedef DevToolsAndroidBridge::DevicesStatus DevicesStatus;
+ typedef DevToolsAndroidBridge::BrowserStatus BrowserStatus;
+ typedef DevToolsAndroidBridge::ForwardingStatus ForwardingStatus;
explicit PortForwardingController(Profile* profile);
virtual ~PortForwardingController();
- DevicesStatus DeviceListChanged(
+ ForwardingStatus DeviceListChanged(
const DevToolsAndroidBridge::RemoteDevices& devices);
private:
diff --git a/chrome/browser/devtools/devtools_targets_ui.cc b/chrome/browser/devtools/devtools_targets_ui.cc
index e5d96c9..786ebcb 100644
--- a/chrome/browser/devtools/devtools_targets_ui.cc
+++ b/chrome/browser/devtools/devtools_targets_ui.cc
@@ -59,6 +59,19 @@ const char kAdbScreenWidthField[] = "adbScreenWidth";
const char kAdbScreenHeightField[] = "adbScreenHeight";
const char kAdbAttachedForeignField[] = "adbAttachedForeign";
+const char kPortForwardingPorts[] = "ports";
+const char kPortForwardingBrowserId[] = "browserId";
+
+std::string SerializeBrowserId(
+ scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser) {
+ return base::StringPrintf(
+ "browser:%s:%s:%s:%s",
+ browser->serial().c_str(), // Ensure uniqueness across devices.
+ browser->display_name().c_str(), // Sort by display name.
+ browser->version().c_str(), // Then by version.
+ browser->socket().c_str()); // Ensure uniqueness on the device.
+}
+
// CancelableTimer ------------------------------------------------------------
class CancelableTimer {
@@ -358,12 +371,7 @@ void AdbTargetsUIHandler::DeviceListChanged(
browser_data->SetInteger(
kAdbBrowserChromeVersionField,
browser->IsChrome() && !parsed.empty() ? parsed[0] : 0);
- std::string browser_id = base::StringPrintf(
- "browser:%s:%s:%s:%s",
- device->serial().c_str(), // Ensure uniqueness across devices.
- browser->display_name().c_str(), // Sort by display name.
- browser->version().c_str(), // Then by version.
- browser->socket().c_str()); // Ensure uniqueness on the device.
+ std::string browser_id = SerializeBrowserId(browser);
browser_data->SetString(kTargetIdField, browser_id);
browser_data->SetString(kTargetSourceField, source_id());
@@ -500,21 +508,26 @@ PortForwardingStatusSerializer::~PortForwardingStatusSerializer() {
}
void PortForwardingStatusSerializer::PortStatusChanged(
- const DevicesStatus& status) {
+ const ForwardingStatus& status) {
base::DictionaryValue result;
- for (DevicesStatus::const_iterator sit = status.begin();
+ for (ForwardingStatus::const_iterator sit = status.begin();
sit != status.end(); ++sit) {
- base::DictionaryValue* device_status_dict = new base::DictionaryValue();
- const PortStatusMap& device_status_map = sit->second;
- for (PortStatusMap::const_iterator it = device_status_map.begin();
- it != device_status_map.end(); ++it) {
- device_status_dict->SetInteger(
+ base::DictionaryValue* port_status_dict = new base::DictionaryValue();
+ const PortStatusMap& port_status_map = sit->second;
+ for (PortStatusMap::const_iterator it = port_status_map.begin();
+ it != port_status_map.end(); ++it) {
+ port_status_dict->SetInteger(
base::StringPrintf("%d", it->first), it->second);
}
+ base::DictionaryValue* device_status_dict = new base::DictionaryValue();
+ device_status_dict->Set(kPortForwardingPorts, port_status_dict);
+ device_status_dict->SetString(kPortForwardingBrowserId,
+ SerializeBrowserId(sit->first));
+
std::string device_id = base::StringPrintf(
kAdbDeviceIdFormat,
- sit->first.c_str());
+ sit->first->serial().c_str());
result.Set(device_id, device_status_dict);
}
callback_.Run(result);
diff --git a/chrome/browser/devtools/devtools_targets_ui.h b/chrome/browser/devtools/devtools_targets_ui.h
index f611731..fd14e7d 100644
--- a/chrome/browser/devtools/devtools_targets_ui.h
+++ b/chrome/browser/devtools/devtools_targets_ui.h
@@ -70,7 +70,7 @@ class PortForwardingStatusSerializer
PortForwardingStatusSerializer(const Callback& callback, Profile* profile);
virtual ~PortForwardingStatusSerializer();
- virtual void PortStatusChanged(const DevicesStatus&) OVERRIDE;
+ virtual void PortStatusChanged(const ForwardingStatus& status) OVERRIDE;
private:
Callback callback_;
diff --git a/chrome/browser/resources/inspect/inspect.css b/chrome/browser/resources/inspect/inspect.css
index 81d280f..49bd500 100644
--- a/chrome/browser/resources/inspect/inspect.css
+++ b/chrome/browser/resources/inspect/inspect.css
@@ -148,6 +148,14 @@ img {
font-weight: bold;
}
+.used-for-port-forwarding {
+ background-image: -webkit-image-set(url('chrome://theme/IDR_INFO') 1x,
+ url('chrome://theme/IDR_INFO@2x') 2x);
+ height: 15px;
+ margin-left: 20px;
+ width: 15px;
+}
+
.row {
padding: 6px 0;
position: relative;
@@ -280,8 +288,8 @@ img {
url('chrome://theme/IDR_WARNING@2x') 2x);
background-position: 0 center;
background-repeat: no-repeat;
- background-size:24px 21px;
- margin-left: 3px;
+ background-size: 24px 21px;
+ margin-top: 5px;
padding-left: 25px;
}
diff --git a/chrome/browser/resources/inspect/inspect.js b/chrome/browser/resources/inspect/inspect.js
index e8ca486..a99d3c4 100644
--- a/chrome/browser/resources/inspect/inspect.js
+++ b/chrome/browser/resources/inspect/inspect.js
@@ -124,6 +124,14 @@ function showIncognitoWarning() {
$('devices-incognito').hidden = false;
}
+function alreadyDisplayed(element, data) {
+ var json = JSON.stringify(data);
+ if (element.cachedJSON == json)
+ return true;
+ element.cachedJSON = json;
+ return false;
+}
+
function populateRemoteTargets(devices) {
if (!devices)
return;
@@ -133,14 +141,6 @@ function populateRemoteTargets(devices) {
return;
}
- function alreadyDisplayed(element, data) {
- var json = JSON.stringify(data);
- if (element.cachedJSON == json)
- return true;
- element.cachedJSON = json;
- return false;
- }
-
function insertChildSortedById(parent, child) {
for (var sibling = parent.firstElementChild;
sibling;
@@ -248,14 +248,7 @@ function populateRemoteTargets(devices) {
browserName.textContent += ' (' + browser.adbBrowserVersion + ')';
browserSection.appendChild(browserHeader);
- if (incompatibleVersion) {
- var warningSection = document.createElement('div');
- warningSection.className = 'warning';
- warningSection.textContent =
- 'You may need a newer version of desktop Chrome. ' +
- 'Please try Chrome ' + browser.adbBrowserVersion + ' or later.';
- browserHeader.appendChild(warningSection);
- } else if (majorChromeVersion >= MIN_VERSION_NEW_TAB) {
+ if (!incompatibleVersion && majorChromeVersion >= MIN_VERSION_NEW_TAB) {
var newPage = document.createElement('div');
newPage.className = 'open';
@@ -282,6 +275,22 @@ function populateRemoteTargets(devices) {
browserHeader.appendChild(newPage);
}
+ var portForwardingInfo = document.createElement('div');
+ portForwardingInfo.className = 'used-for-port-forwarding';
+ portForwardingInfo.hidden = true;
+ portForwardingInfo.title = 'This browser is used for port ' +
+ 'forwarding. Closing it will drop current connections.';
+ browserHeader.appendChild(portForwardingInfo);
+
+ if (incompatibleVersion) {
+ var warningSection = document.createElement('div');
+ warningSection.className = 'warning';
+ warningSection.textContent =
+ 'You may need a newer version of desktop Chrome. ' +
+ 'Please try Chrome ' + browser.adbBrowserVersion + ' or later.';
+ browserSection.appendChild(warningSection);
+ }
+
var browserInspector;
var browserInspectorTitle;
if ('trace' in queryParamsObject || 'tracing' in queryParamsObject) {
@@ -854,13 +863,17 @@ function populatePortStatus(devicesStatusMap) {
for (var deviceId in devicesStatusMap) {
if (!devicesStatusMap.hasOwnProperty(deviceId))
continue;
- var deviceStatusMap = devicesStatusMap[deviceId];
+ var deviceStatus = devicesStatusMap[deviceId];
+ var deviceStatusMap = deviceStatus.ports;
var deviceSection = $(deviceId);
if (!deviceSection)
continue;
var devicePorts = deviceSection.querySelector('.device-ports');
+ if (alreadyDisplayed(devicePorts, deviceStatus))
+ continue;
+
devicePorts.textContent = '';
for (var port in deviceStatusMap) {
if (!deviceStatusMap.hasOwnProperty(port))
@@ -887,6 +900,15 @@ function populatePortStatus(devicesStatusMap) {
portNumber.textContent += '(' + status + ')';
devicePorts.appendChild(portNumber);
}
+
+ function updatePortForwardingInfo(browserSection) {
+ var icon = browserSection.querySelector('.used-for-port-forwarding');
+ if (icon)
+ icon.hidden = (browserSection.id !== deviceStatus.browserId);
+ }
+
+ Array.prototype.forEach.call(
+ deviceSection.querySelectorAll('.browser'), updatePortForwardingInfo);
}
function clearPorts(deviceSection) {