diff options
author | vkuzkokov <vkuzkokov@chromium.org> | 2014-10-01 07:10:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-01 14:11:17 +0000 |
commit | 32c0c074851af344977fd5c751b555800f09215c (patch) | |
tree | ed8c1cd8765ba83c39597fc47dde255ba3741789 | |
parent | 29721be74a8349767def35b6c0365ce4e4d79070 (diff) | |
download | chromium_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}
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(®istry_, 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) { |