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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/devices/DevicesView.js

Issue 2864263002: [DevTools] Expose TCP targets config in frontend, use it for Node (Closed)
Patch Set: panel Created 3 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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 };
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_ui_bindings.cc ('k') | third_party/WebKit/Source/devtools/front_end/devices/devicesView.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698