| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 /** | 4 /** |
| 5 * @unrestricted | 5 * @unrestricted |
| 6 */ | 6 */ |
| 7 Devices.DevicesView = class extends UI.VBox { | 7 Devices.DevicesView = class extends UI.VBox { |
| 8 constructor() { | 8 constructor() { |
| 9 super(true); | 9 super(true); |
| 10 this.registerRequiredCSS('devices/devicesView.css'); | 10 this.registerRequiredCSS('devices/devicesView.css'); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 listItem.addEventListener('click', this._selectSidebarListItem.bind(this, li
stItem, view)); | 144 listItem.addEventListener('click', this._selectSidebarListItem.bind(this, li
stItem, view)); |
| 145 listItem._title = listItem.createChild('div', 'devices-sidebar-item-title'); | 145 listItem._title = listItem.createChild('div', 'devices-sidebar-item-title'); |
| 146 listItem._status = listItem.createChild('div', 'devices-sidebar-item-status'
); | 146 listItem._status = listItem.createChild('div', 'devices-sidebar-item-status'
); |
| 147 return listItem; | 147 return listItem; |
| 148 } | 148 } |
| 149 | 149 |
| 150 /** | 150 /** |
| 151 * @param {!Common.Event} event | 151 * @param {!Common.Event} event |
| 152 */ | 152 */ |
| 153 _devicesDiscoveryConfigChanged(event) { | 153 _devicesDiscoveryConfigChanged(event) { |
| 154 var discoverUsbDevices = /** @type {boolean} */ (event.data['discoverUsbDevi
ces']); | 154 var config = /** @type {!Adb.Config} */ (event.data); |
| 155 var portForwardingEnabled = /** @type {boolean} */ (event.data['portForwardi
ngEnabled']); | 155 this._discoveryView.discoveryConfigChanged(config); |
| 156 var portForwardingConfig = /** @type {!Adb.PortForwardingConfig} */ (event.d
ata['portForwardingConfig']); | |
| 157 this._discoveryView.discoveryConfigChanged(discoverUsbDevices, portForwardin
gEnabled, portForwardingConfig); | |
| 158 } | 156 } |
| 159 | 157 |
| 160 /** | 158 /** |
| 161 * @param {!Common.Event} event | 159 * @param {!Common.Event} event |
| 162 */ | 160 */ |
| 163 _devicesPortForwardingStatusChanged(event) { | 161 _devicesPortForwardingStatusChanged(event) { |
| 164 var status = /** @type {!Adb.PortForwardingStatus} */ (event.data); | 162 var status = /** @type {!Adb.PortForwardingStatus} */ (event.data); |
| 165 for (var deviceId in status) { | 163 for (var deviceId in status) { |
| 166 var view = this._viewById.get(deviceId); | 164 var view = this._viewById.get(deviceId); |
| 167 if (view) | 165 if (view) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 179 Common.UIString('No devices detected.') : | 177 Common.UIString('No devices detected.') : |
| 180 this._devices.length === 1 ? Common.UIString('1 device detected.') : | 178 this._devices.length === 1 ? Common.UIString('1 device detected.') : |
| 181 Common.UIString('%d devices detected.', thi
s._devices.length); | 179 Common.UIString('%d devices detected.', thi
s._devices.length); |
| 182 } | 180 } |
| 183 | 181 |
| 184 /** | 182 /** |
| 185 * @override | 183 * @override |
| 186 */ | 184 */ |
| 187 wasShown() { | 185 wasShown() { |
| 188 super.wasShown(); | 186 super.wasShown(); |
| 187 // Retrigger notification first time. |
| 188 if (Runtime.queryParam('nodeFrontend')) |
| 189 InspectorFrontendHost.setDevicesUpdatesEnabled(false); |
| 189 InspectorFrontendHost.setDevicesUpdatesEnabled(true); | 190 InspectorFrontendHost.setDevicesUpdatesEnabled(true); |
| 190 } | 191 } |
| 191 | 192 |
| 192 /** | 193 /** |
| 193 * @override | 194 * @override |
| 194 */ | 195 */ |
| 195 willHide() { | 196 willHide() { |
| 196 super.wasShown(); | 197 super.wasShown(); |
| 197 InspectorFrontendHost.setDevicesUpdatesEnabled(false); | 198 if (!Runtime.queryParam('nodeFrontend')) |
| 199 InspectorFrontendHost.setDevicesUpdatesEnabled(false); |
| 198 } | 200 } |
| 199 }; | 201 }; |
| 200 | 202 |
| 201 | 203 |
| 202 /** | 204 /** |
| 203 * @implements {UI.ListWidget.Delegate} | |
| 204 * @unrestricted | 205 * @unrestricted |
| 205 */ | 206 */ |
| 206 Devices.DevicesView.DiscoveryView = class extends UI.VBox { | 207 Devices.DevicesView.DiscoveryView = class extends UI.VBox { |
| 207 constructor() { | 208 constructor() { |
| 208 super(); | 209 super(); |
| 209 this.setMinimumSize(100, 100); | 210 this.setMinimumSize(100, 100); |
| 210 this.element.classList.add('discovery-view'); | 211 this.element.classList.add('discovery-view'); |
| 211 | 212 |
| 212 this.contentElement.createChild('div', 'hbox device-text-row').createChild('
div', 'view-title').textContent = | 213 this.contentElement.createChild('div', 'hbox device-text-row').createChild('
div', 'view-title').textContent = |
| 213 Common.UIString('Settings'); | 214 Common.UIString('Settings'); |
| 214 | 215 |
| 215 var discoverUsbDevicesCheckbox = UI.CheckboxLabel.create(Common.UIString('Di
scover USB devices')); | 216 var discoverUsbDevicesCheckbox = UI.CheckboxLabel.create(Common.UIString('Di
scover USB devices')); |
| 216 discoverUsbDevicesCheckbox.classList.add('usb-checkbox'); | 217 discoverUsbDevicesCheckbox.classList.add('usb-checkbox'); |
| 217 this.element.appendChild(discoverUsbDevicesCheckbox); | 218 this.element.appendChild(discoverUsbDevicesCheckbox); |
| 218 this._discoverUsbDevicesCheckbox = discoverUsbDevicesCheckbox.checkboxElemen
t; | 219 this._discoverUsbDevicesCheckbox = discoverUsbDevicesCheckbox.checkboxElemen
t; |
| 219 this._discoverUsbDevicesCheckbox.addEventListener('click', this._updateDisco
veryConfig.bind(this), false); | 220 this._discoverUsbDevicesCheckbox.addEventListener('click', () => { |
| 221 this._config.discoverUsbDevices = this._discoverUsbDevicesCheckbox.checked
; |
| 222 InspectorFrontendHost.setDevicesDiscoveryConfig(this._config); |
| 223 }, false); |
| 220 | 224 |
| 221 var help = this.element.createChild('div', 'discovery-help'); | 225 var help = this.element.createChild('div', 'discovery-help'); |
| 222 help.createChild('span').textContent = Common.UIString('Need help? Read Chro
me '); | 226 help.createChild('span').textContent = Common.UIString('Need help? Read Chro
me '); |
| 223 help.appendChild(UI.createExternalLink( | 227 help.appendChild(UI.createExternalLink( |
| 224 'https://developers.google.com/chrome-developer-tools/docs/remote-debugg
ing', | 228 'https://developers.google.com/chrome-developer-tools/docs/remote-debugg
ing', |
| 225 Common.UIString('remote debugging documentation.'))); | 229 Common.UIString('remote debugging documentation.'))); |
| 226 | 230 |
| 231 /** @type {!Adb.Config} */ |
| 232 this._config; |
| 233 |
| 234 this._portForwardingView = new Devices.DevicesView.PortForwardingView((enabl
ed, config) => { |
| 235 this._config.portForwardingEnabled = enabled; |
| 236 this._config.portForwardingConfig = {}; |
| 237 for (var rule of config) |
| 238 this._config.portForwardingConfig[rule.port] = rule.address; |
| 239 InspectorFrontendHost.setDevicesDiscoveryConfig(this._config); |
| 240 }); |
| 241 this._portForwardingView.show(this.element); |
| 242 |
| 243 this._networkDiscoveryView = new Devices.DevicesView.NetworkDiscoveryView(fa
lse, (enabled, config) => { |
| 244 this._config.networkDiscoveryEnabled = enabled; |
| 245 this._config.networkDiscoveryConfig = config; |
| 246 InspectorFrontendHost.setDevicesDiscoveryConfig(this._config); |
| 247 }); |
| 248 this._networkDiscoveryView.show(this.element); |
| 249 } |
| 250 |
| 251 /** |
| 252 * @param {!Adb.Config} config |
| 253 */ |
| 254 discoveryConfigChanged(config) { |
| 255 this._config = config; |
| 256 this._discoverUsbDevicesCheckbox.checked = config.discoverUsbDevices; |
| 257 this._portForwardingView.discoveryConfigChanged(config.portForwardingEnabled
, config.portForwardingConfig); |
| 258 this._networkDiscoveryView.discoveryConfigChanged(config.networkDiscoveryEna
bled, config.networkDiscoveryConfig); |
| 259 } |
| 260 }; |
| 261 |
| 262 /** |
| 263 * @implements {UI.ListWidget.Delegate} |
| 264 * @unrestricted |
| 265 */ |
| 266 Devices.DevicesView.PortForwardingView = class extends UI.VBox { |
| 267 /** |
| 268 * @param {function(boolean, !Array<!Adb.PortForwardingRule>)} callback |
| 269 */ |
| 270 constructor(callback) { |
| 271 super(); |
| 272 this._callback = callback; |
| 273 this.element.classList.add('port-forwarding-view'); |
| 274 |
| 227 var portForwardingHeader = this.element.createChild('div', 'port-forwarding-
header'); | 275 var portForwardingHeader = this.element.createChild('div', 'port-forwarding-
header'); |
| 228 var portForwardingEnabledCheckbox = UI.CheckboxLabel.create(Common.UIString(
'Port forwarding')); | 276 var portForwardingEnabledCheckbox = UI.CheckboxLabel.create(Common.UIString(
'Port forwarding')); |
| 229 portForwardingEnabledCheckbox.classList.add('port-forwarding-checkbox'); | 277 portForwardingEnabledCheckbox.classList.add('port-forwarding-checkbox'); |
| 230 portForwardingHeader.appendChild(portForwardingEnabledCheckbox); | 278 portForwardingHeader.appendChild(portForwardingEnabledCheckbox); |
| 231 this._portForwardingEnabledCheckbox = portForwardingEnabledCheckbox.checkbox
Element; | 279 this._portForwardingEnabledCheckbox = portForwardingEnabledCheckbox.checkbox
Element; |
| 232 this._portForwardingEnabledCheckbox.addEventListener('click', this._updateDi
scoveryConfig.bind(this), false); | 280 this._portForwardingEnabledCheckbox.addEventListener('click', this._update.b
ind(this), false); |
| 233 | 281 |
| 234 var portForwardingFooter = this.element.createChild('div', 'port-forwarding-
footer'); | 282 var portForwardingFooter = this.element.createChild('div', 'port-forwarding-
footer'); |
| 235 portForwardingFooter.createChild('span').textContent = Common.UIString( | 283 portForwardingFooter.createChild('span').textContent = Common.UIString( |
| 236 'Define the listening port on your device that maps to a port accessible
from your development machine. '); | 284 'Define the listening port on your device that maps to a port accessible
from your development machine. '); |
| 237 portForwardingFooter.appendChild(UI.createExternalLink( | 285 portForwardingFooter.appendChild(UI.createExternalLink( |
| 238 'https://developer.chrome.com/devtools/docs/remote-debugging#port-forwar
ding', Common.UIString('Learn more'))); | 286 'https://developer.chrome.com/devtools/docs/remote-debugging#port-forwar
ding', Common.UIString('Learn more'))); |
| 239 | 287 |
| 240 this._list = new UI.ListWidget(this); | 288 this._list = new UI.ListWidget(this); |
| 241 this._list.registerRequiredCSS('devices/devicesView.css'); | 289 this._list.registerRequiredCSS('devices/devicesView.css'); |
| 242 this._list.element.classList.add('port-forwarding-list'); | 290 this._list.element.classList.add('port-forwarding-list'); |
| 243 var placeholder = createElementWithClass('div', 'port-forwarding-list-empty'
); | 291 var placeholder = createElementWithClass('div', 'port-forwarding-list-empty'
); |
| 244 placeholder.textContent = Common.UIString('No rules'); | 292 placeholder.textContent = Common.UIString('No rules'); |
| 245 this._list.setEmptyPlaceholder(placeholder); | 293 this._list.setEmptyPlaceholder(placeholder); |
| 246 this._list.show(this.element); | 294 this._list.show(this.element); |
| 247 | 295 |
| 248 this.element.appendChild( | 296 this.element.appendChild( |
| 249 UI.createTextButton(Common.UIString('Add rule'), this._addRuleButtonClic
ked.bind(this), 'add-rule-button')); | 297 UI.createTextButton(Common.UIString('Add rule'), this._addRuleButtonClic
ked.bind(this), 'add-rule-button')); |
| 250 | 298 |
| 251 /** @type {!Array<!Adb.PortForwardingRule>} */ | 299 /** @type {!Array<!Adb.PortForwardingRule>} */ |
| 252 this._portForwardingConfig = []; | 300 this._portForwardingConfig = []; |
| 253 } | 301 } |
| 254 | 302 |
| 303 _update() { |
| 304 this._callback.call(null, this._portForwardingEnabledCheckbox.checked, this.
_portForwardingConfig); |
| 305 } |
| 306 |
| 255 _addRuleButtonClicked() { | 307 _addRuleButtonClicked() { |
| 256 this._list.addNewItem(this._portForwardingConfig.length, {port: '', address:
''}); | 308 this._list.addNewItem(this._portForwardingConfig.length, {port: '', address:
''}); |
| 257 } | 309 } |
| 258 | 310 |
| 259 /** | 311 /** |
| 260 * @param {boolean} discoverUsbDevices | |
| 261 * @param {boolean} portForwardingEnabled | 312 * @param {boolean} portForwardingEnabled |
| 262 * @param {!Adb.PortForwardingConfig} portForwardingConfig | 313 * @param {!Adb.PortForwardingConfig} portForwardingConfig |
| 263 */ | 314 */ |
| 264 discoveryConfigChanged(discoverUsbDevices, portForwardingEnabled, portForwardi
ngConfig) { | 315 discoveryConfigChanged(portForwardingEnabled, portForwardingConfig) { |
| 265 this._discoverUsbDevicesCheckbox.checked = discoverUsbDevices; | |
| 266 this._portForwardingEnabledCheckbox.checked = portForwardingEnabled; | 316 this._portForwardingEnabledCheckbox.checked = portForwardingEnabled; |
| 267 | |
| 268 this._portForwardingConfig = []; | 317 this._portForwardingConfig = []; |
| 269 this._list.clear(); | 318 this._list.clear(); |
| 270 for (var key of Object.keys(portForwardingConfig)) { | 319 for (var key of Object.keys(portForwardingConfig)) { |
| 271 var rule = /** @type {!Adb.PortForwardingRule} */ ({port: key, address: po
rtForwardingConfig[key]}); | 320 var rule = /** @type {!Adb.PortForwardingRule} */ ({port: key, address: po
rtForwardingConfig[key]}); |
| 272 this._portForwardingConfig.push(rule); | 321 this._portForwardingConfig.push(rule); |
| 273 this._list.appendItem(rule, true); | 322 this._list.appendItem(rule, true); |
| 274 } | 323 } |
| 275 } | 324 } |
| 276 | 325 |
| 277 /** | 326 /** |
| (...skipping 14 matching lines...) Expand all Loading... |
| 292 } | 341 } |
| 293 | 342 |
| 294 /** | 343 /** |
| 295 * @override | 344 * @override |
| 296 * @param {*} item | 345 * @param {*} item |
| 297 * @param {number} index | 346 * @param {number} index |
| 298 */ | 347 */ |
| 299 removeItemRequested(item, index) { | 348 removeItemRequested(item, index) { |
| 300 this._portForwardingConfig.splice(index, 1); | 349 this._portForwardingConfig.splice(index, 1); |
| 301 this._list.removeItem(index); | 350 this._list.removeItem(index); |
| 302 this._updateDiscoveryConfig(); | 351 this._update(); |
| 303 } | 352 } |
| 304 | 353 |
| 305 /** | 354 /** |
| 306 * @override | 355 * @override |
| 307 * @param {*} item | 356 * @param {*} item |
| 308 * @param {!UI.ListWidget.Editor} editor | 357 * @param {!UI.ListWidget.Editor} editor |
| 309 * @param {boolean} isNew | 358 * @param {boolean} isNew |
| 310 */ | 359 */ |
| 311 commitEdit(item, editor, isNew) { | 360 commitEdit(item, editor, isNew) { |
| 312 var rule = /** @type {!Adb.PortForwardingRule} */ (item); | 361 var rule = /** @type {!Adb.PortForwardingRule} */ (item); |
| 313 rule.port = editor.control('port').value.trim(); | 362 rule.port = editor.control('port').value.trim(); |
| 314 rule.address = editor.control('address').value.trim(); | 363 rule.address = editor.control('address').value.trim(); |
| 315 if (isNew) | 364 if (isNew) |
| 316 this._portForwardingConfig.push(rule); | 365 this._portForwardingConfig.push(rule); |
| 317 this._updateDiscoveryConfig(); | 366 this._update(); |
| 318 } | 367 } |
| 319 | 368 |
| 320 /** | 369 /** |
| 321 * @override | 370 * @override |
| 322 * @param {*} item | 371 * @param {*} item |
| 323 * @return {!UI.ListWidget.Editor} | 372 * @return {!UI.ListWidget.Editor} |
| 324 */ | 373 */ |
| 325 beginEdit(item) { | 374 beginEdit(item) { |
| 326 var rule = /** @type {!Adb.PortForwardingRule} */ (item); | 375 var rule = /** @type {!Adb.PortForwardingRule} */ (item); |
| 327 var editor = this._createEditor(); | 376 var editor = this._createEditor(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 345 .appendChild(editor.createInput('port', 'text', 'Device port (3333)', po
rtValidator.bind(this))); | 394 .appendChild(editor.createInput('port', 'text', 'Device port (3333)', po
rtValidator.bind(this))); |
| 346 fields.createChild('div', 'port-forwarding-separator port-forwarding-separat
or-invisible'); | 395 fields.createChild('div', 'port-forwarding-separator port-forwarding-separat
or-invisible'); |
| 347 fields.createChild('div', 'port-forwarding-value') | 396 fields.createChild('div', 'port-forwarding-value') |
| 348 .appendChild(editor.createInput('address', 'text', 'Local address (dev.e
xample.corp:3333)', addressValidator)); | 397 .appendChild(editor.createInput('address', 'text', 'Local address (dev.e
xample.corp:3333)', addressValidator)); |
| 349 return editor; | 398 return editor; |
| 350 | 399 |
| 351 /** | 400 /** |
| 352 * @param {*} item | 401 * @param {*} item |
| 353 * @param {number} index | 402 * @param {number} index |
| 354 * @param {!HTMLInputElement|!HTMLSelectElement} input | 403 * @param {!HTMLInputElement|!HTMLSelectElement} input |
| 355 * @this {Devices.DevicesView.DiscoveryView} | 404 * @this {Devices.DevicesView.PortForwardingView} |
| 356 * @return {boolean} | 405 * @return {boolean} |
| 357 */ | 406 */ |
| 358 function portValidator(item, index, input) { | 407 function portValidator(item, index, input) { |
| 359 var value = input.value.trim(); | 408 var value = input.value.trim(); |
| 360 var match = value.match(/^(\d+)$/); | 409 var match = value.match(/^(\d+)$/); |
| 361 if (!match) | 410 if (!match) |
| 362 return false; | 411 return false; |
| 363 var port = parseInt(match[1], 10); | 412 var port = parseInt(match[1], 10); |
| 364 if (port < 1024 || port > 65535) | 413 if (port < 1024 || port > 65535) |
| 365 return false; | 414 return false; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 377 * @return {boolean} | 426 * @return {boolean} |
| 378 */ | 427 */ |
| 379 function addressValidator(item, index, input) { | 428 function addressValidator(item, index, input) { |
| 380 var match = input.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/); | 429 var match = input.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/); |
| 381 if (!match) | 430 if (!match) |
| 382 return false; | 431 return false; |
| 383 var port = parseInt(match[2], 10); | 432 var port = parseInt(match[2], 10); |
| 384 return port <= 65535; | 433 return port <= 65535; |
| 385 } | 434 } |
| 386 } | 435 } |
| 436 }; |
| 387 | 437 |
| 388 _updateDiscoveryConfig() { | 438 /** |
| 389 var configMap = /** @type {!Adb.PortForwardingConfig} */ ({}); | 439 * @implements {UI.ListWidget.Delegate} |
| 390 for (var rule of this._portForwardingConfig) | 440 * @unrestricted |
| 391 configMap[rule.port] = rule.address; | 441 */ |
| 392 InspectorFrontendHost.setDevicesDiscoveryConfig( | 442 Devices.DevicesView.NetworkDiscoveryView = class extends UI.VBox { |
| 393 this._discoverUsbDevicesCheckbox.checked, this._portForwardingEnabledChe
ckbox.checked, configMap); | 443 /** |
| 444 * @param {boolean} nodeFrontend |
| 445 * @param {function(boolean, !Adb.NetworkDiscoveryConfig)} callback |
| 446 */ |
| 447 constructor(nodeFrontend, callback) { |
| 448 super(); |
| 449 this._nodeFrontend = nodeFrontend; |
| 450 this._callback = callback; |
| 451 this.element.classList.add('network-discovery-view'); |
| 452 |
| 453 var networkDiscoveryHeader = this.element.createChild('div', 'network-discov
ery-header'); |
| 454 var networkDiscoveryEnabledCheckbox = UI.CheckboxLabel.create(Common.UIStrin
g('Network targets')); |
| 455 networkDiscoveryEnabledCheckbox.classList.add('network-discovery-checkbox'); |
| 456 networkDiscoveryHeader.appendChild(networkDiscoveryEnabledCheckbox); |
| 457 this._networkDiscoveryEnabledCheckbox = networkDiscoveryEnabledCheckbox.chec
kboxElement; |
| 458 this._networkDiscoveryEnabledCheckbox.disabled = !!Runtime.queryParam('nodeF
rontend'); |
| 459 this._networkDiscoveryEnabledCheckbox.checked = !!Runtime.queryParam('nodeFr
ontend'); |
| 460 this._networkDiscoveryEnabledCheckbox.addEventListener('click', this._enable
dCheckboxClicked.bind(this), false); |
| 461 |
| 462 var networkDiscoveryFooter = this.element.createChild('div', 'network-discov
ery-footer'); |
| 463 if (nodeFrontend) { |
| 464 networkDiscoveryFooter.createChild('span').textContent = |
| 465 Common.UIString('Specify network endpoint and DevTools will connect to
it automatically. '); |
| 466 var link = networkDiscoveryFooter.createChild('span', 'link'); |
| 467 link.textContent = Common.UIString('Learn more'); |
| 468 link.addEventListener('click', () => InspectorFrontendHost.openInNewTab('h
ttps://nodejs.org/en/docs/inspector/')); |
| 469 } else { |
| 470 networkDiscoveryFooter.createChild('span').textContent = Common.UIString('
Define the target connection address'); |
| 471 } |
| 472 |
| 473 this._list = new UI.ListWidget(this); |
| 474 this._list.registerRequiredCSS('devices/devicesView.css'); |
| 475 this._list.element.classList.add('network-discovery-list'); |
| 476 var placeholder = createElementWithClass('div', 'network-discovery-list-empt
y'); |
| 477 placeholder.textContent = |
| 478 nodeFrontend ? Common.UIString('No connections specified') : Common.UISt
ring('No addresses defined'); |
| 479 this._list.setEmptyPlaceholder(placeholder); |
| 480 this._list.show(this.element); |
| 481 |
| 482 var addButton = UI.createTextButton( |
| 483 nodeFrontend ? Common.UIString('Add connection') : Common.UIString('Add
address'), |
| 484 this._addNetworkTargetButtonClicked.bind(this), 'add-network-target-butt
on'); |
| 485 this.element.appendChild(addButton); |
| 486 |
| 487 /** @type {!Array<{address: string}>} */ |
| 488 this._networkDiscoveryConfig = []; |
| 489 this._networkDiscoveryEnabled = false; |
| 490 |
| 491 if (nodeFrontend) { |
| 492 this.element.classList.add('node-frontend'); |
| 493 this._list.element.classList.add('node-frontend'); |
| 494 addButton.classList.add('material-button', 'default'); |
| 495 } |
| 496 } |
| 497 |
| 498 _update() { |
| 499 var config = this._networkDiscoveryConfig.map(item => item.address); |
| 500 this._callback.call(null, this._networkDiscoveryEnabled, config); |
| 501 } |
| 502 |
| 503 _addNetworkTargetButtonClicked() { |
| 504 this._list.addNewItem(this._networkDiscoveryConfig.length, {address: ''}); |
| 505 } |
| 506 |
| 507 /** |
| 508 * @param {boolean} networkDiscoveryEnabled |
| 509 * @param {!Adb.NetworkDiscoveryConfig} networkDiscoveryConfig |
| 510 */ |
| 511 discoveryConfigChanged(networkDiscoveryEnabled, networkDiscoveryConfig) { |
| 512 this._networkDiscoveryEnabled = networkDiscoveryEnabled; |
| 513 if (!Runtime.queryParam('nodeFrontend')) |
| 514 this._networkDiscoveryEnabledCheckbox.checked = networkDiscoveryEnabled; |
| 515 this._networkDiscoveryConfig = []; |
| 516 this._list.clear(); |
| 517 for (var address of networkDiscoveryConfig) { |
| 518 var item = {address: address}; |
| 519 this._networkDiscoveryConfig.push(item); |
| 520 this._list.appendItem(item, true); |
| 521 } |
| 522 } |
| 523 |
| 524 _enabledCheckboxClicked() { |
| 525 if (!Runtime.queryParam('nodeFrontend')) { |
| 526 this._networkDiscoveryEnabled = this._networkDiscoveryEnabledCheckbox.chec
ked; |
| 527 this._update(); |
| 528 } |
| 529 } |
| 530 |
| 531 /** |
| 532 * @override |
| 533 * @param {*} item |
| 534 * @param {boolean} editable |
| 535 * @return {!Element} |
| 536 */ |
| 537 renderItem(item, editable) { |
| 538 var element = createElementWithClass('div', 'network-discovery-list-item'); |
| 539 element.createChild('div', 'network-discovery-value network-discovery-addres
s').textContent = |
| 540 /** @type {string} */ (item.address); |
| 541 return element; |
| 542 } |
| 543 |
| 544 /** |
| 545 * @override |
| 546 * @param {*} item |
| 547 * @param {number} index |
| 548 */ |
| 549 removeItemRequested(item, index) { |
| 550 this._networkDiscoveryConfig.splice(index, 1); |
| 551 this._list.removeItem(index); |
| 552 this._update(); |
| 553 } |
| 554 |
| 555 /** |
| 556 * @override |
| 557 * @param {*} item |
| 558 * @param {!UI.ListWidget.Editor} editor |
| 559 * @param {boolean} isNew |
| 560 */ |
| 561 commitEdit(item, editor, isNew) { |
| 562 item.address = editor.control('address').value.trim(); |
| 563 if (isNew) |
| 564 this._networkDiscoveryConfig.push(/** @type {{address: string}} */ (item))
; |
| 565 this._update(); |
| 566 } |
| 567 |
| 568 /** |
| 569 * @override |
| 570 * @param {*} item |
| 571 * @return {!UI.ListWidget.Editor} |
| 572 */ |
| 573 beginEdit(item) { |
| 574 var editor = this._createEditor(); |
| 575 editor.control('address').value = item.address; |
| 576 return editor; |
| 577 } |
| 578 |
| 579 /** |
| 580 * @return {!UI.ListWidget.Editor} |
| 581 */ |
| 582 _createEditor() { |
| 583 if (this._editor) |
| 584 return this._editor; |
| 585 |
| 586 var editor = new UI.ListWidget.Editor(); |
| 587 editor.setMaterial(this._nodeFrontend); |
| 588 this._editor = editor; |
| 589 var content = editor.contentElement(); |
| 590 var fields = content.createChild('div', 'network-discovery-edit-row'); |
| 591 var input = editor.createInput('address', 'text', 'Network address (e.g. loc
alhost:9229)', addressValidator); |
| 592 fields.createChild('div', 'network-discovery-value network-discovery-address
').appendChild(input); |
| 593 return editor; |
| 594 |
| 595 /** |
| 596 * @param {*} item |
| 597 * @param {number} index |
| 598 * @param {!HTMLInputElement|!HTMLSelectElement} input |
| 599 * @return {boolean} |
| 600 */ |
| 601 function addressValidator(item, index, input) { |
| 602 var match = input.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/); |
| 603 if (!match) |
| 604 return false; |
| 605 var port = parseInt(match[2], 10); |
| 606 return port <= 65535; |
| 607 } |
| 394 } | 608 } |
| 395 }; | 609 }; |
| 396 | 610 |
| 397 /** | 611 /** |
| 398 * @unrestricted | 612 * @unrestricted |
| 399 */ | 613 */ |
| 400 Devices.DevicesView.DeviceView = class extends UI.VBox { | 614 Devices.DevicesView.DeviceView = class extends UI.VBox { |
| 401 constructor() { | 615 constructor() { |
| 402 super(); | 616 super(); |
| 403 this.setMinimumSize(100, 100); | 617 this.setMinimumSize(100, 100); |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 this._portStatus.title = title.join('; '); | 890 this._portStatus.title = title.join('; '); |
| 677 this._portStatus.classList.toggle('hidden', empty); | 891 this._portStatus.classList.toggle('hidden', empty); |
| 678 } | 892 } |
| 679 }; | 893 }; |
| 680 | 894 |
| 681 /** @typedef {!{browser: ?Adb.Browser, element: !Element, title: !Element, pages
: !Element, viewMore: !Element, newTab: !Element, pageSections: !Map<string, !De
vices.DevicesView.PageSection>}} */ | 895 /** @typedef {!{browser: ?Adb.Browser, element: !Element, title: !Element, pages
: !Element, viewMore: !Element, newTab: !Element, pageSections: !Map<string, !De
vices.DevicesView.PageSection>}} */ |
| 682 Devices.DevicesView.BrowserSection; | 896 Devices.DevicesView.BrowserSection; |
| 683 | 897 |
| 684 /** @typedef {!{page: ?Adb.Page, element: !Element, title: !Element, url: !Eleme
nt, inspect: !Element}} */ | 898 /** @typedef {!{page: ?Adb.Page, element: !Element, title: !Element, url: !Eleme
nt, inspect: !Element}} */ |
| 685 Devices.DevicesView.PageSection; | 899 Devices.DevicesView.PageSection; |
| 900 |
| 901 |
| 902 Devices.DevicesView.Panel = class extends UI.Panel { |
| 903 constructor() { |
| 904 super('node-connection'); |
| 905 this.registerRequiredCSS('devices/devicesView.css'); |
| 906 this.contentElement.classList.add('devices-view-panel'); |
| 907 |
| 908 var container = this.contentElement.createChild('div', 'devices-view-panel-c
enter'); |
| 909 |
| 910 var image = container.createChild('img', 'devices-view-panel-logo'); |
| 911 image.src = 'https://nodejs.org/static/images/logos/nodejs-new-pantone-black
.png'; |
| 912 |
| 913 InspectorFrontendHost.events.addEventListener( |
| 914 InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged, this._dev
icesDiscoveryConfigChanged, this); |
| 915 |
| 916 /** @type {!Adb.Config} */ |
| 917 this._config; |
| 918 |
| 919 this.contentElement.tabIndex = 0; |
| 920 this.setDefaultFocusedElement(this.contentElement); |
| 921 |
| 922 // Trigger notification once. |
| 923 InspectorFrontendHost.setDevicesUpdatesEnabled(false); |
| 924 InspectorFrontendHost.setDevicesUpdatesEnabled(true); |
| 925 |
| 926 this._networkDiscoveryView = new Devices.DevicesView.NetworkDiscoveryView(tr
ue, (enabled, config) => { |
| 927 this._config.networkDiscoveryEnabled = enabled; |
| 928 this._config.networkDiscoveryConfig = config; |
| 929 InspectorFrontendHost.setDevicesDiscoveryConfig(this._config); |
| 930 }); |
| 931 this._networkDiscoveryView.show(container); |
| 932 } |
| 933 |
| 934 /** |
| 935 * @param {!Common.Event} event |
| 936 */ |
| 937 _devicesDiscoveryConfigChanged(event) { |
| 938 this._config = /** @type {!Adb.Config} */ (event.data); |
| 939 this._networkDiscoveryView.discoveryConfigChanged( |
| 940 this._config.networkDiscoveryEnabled, this._config.networkDiscoveryConfi
g); |
| 941 } |
| 942 }; |
| OLD | NEW |