| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 var MIN_VERSION_TAB_CLOSE = 25; | 5 var MIN_VERSION_TAB_CLOSE = 25; |
| 6 var MIN_VERSION_TARGET_ID = 26; | 6 var MIN_VERSION_TARGET_ID = 26; |
| 7 var MIN_VERSION_NEW_TAB = 29; | 7 var MIN_VERSION_NEW_TAB = 29; |
| 8 var MIN_VERSION_TAB_ACTIVATE = 30; | 8 var MIN_VERSION_TAB_ACTIVATE = 30; |
| 9 | 9 |
| 10 function inspect(data) { | 10 function inspect(data) { |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 if (alreadyDisplayed(browserSection, browser)) | 275 if (alreadyDisplayed(browserSection, browser)) |
| 276 continue; | 276 continue; |
| 277 | 277 |
| 278 pageList.textContent = ''; | 278 pageList.textContent = ''; |
| 279 for (var p = 0; p < browser.pages.length; p++) { | 279 for (var p = 0; p < browser.pages.length; p++) { |
| 280 var page = browser.pages[p]; | 280 var page = browser.pages[p]; |
| 281 // Attached targets have no unique id until Chrome 26. For such targets | 281 // Attached targets have no unique id until Chrome 26. For such targets |
| 282 // it is impossible to activate existing DevTools window. | 282 // it is impossible to activate existing DevTools window. |
| 283 page.hasNoUniqueId = page.attached && | 283 page.hasNoUniqueId = page.attached && |
| 284 majorChromeVersion < MIN_VERSION_TARGET_ID; | 284 majorChromeVersion < MIN_VERSION_TARGET_ID; |
| 285 var row = addTargetToList( | 285 var row = addTargetToList(page, pageList, ['name', 'url']); |
| 286 page, pageList, ['faviconUrl', 'name', 'url', 'description']); | 286 if (page['description']) |
| 287 addWebViewDetails(row, page); |
| 288 else |
| 289 addFavicon(row, page); |
| 287 if (isChrome) { | 290 if (isChrome) { |
| 288 if (majorChromeVersion >= MIN_VERSION_TAB_ACTIVATE) { | 291 if (majorChromeVersion >= MIN_VERSION_TAB_ACTIVATE) { |
| 289 row.appendChild(createActionLink( | 292 addActionLink(row, 'activate', activate.bind(null, page), false); |
| 290 'activate', activate.bind(null, page), false)); | |
| 291 } | 293 } |
| 292 row.appendChild(createActionLink( | 294 addActionLink(row, 'reload', reload.bind(null, page), page.attached); |
| 293 'reload', reload.bind(null, page), page.attached)); | |
| 294 if (majorChromeVersion >= MIN_VERSION_TAB_CLOSE) { | 295 if (majorChromeVersion >= MIN_VERSION_TAB_CLOSE) { |
| 295 row.appendChild(createActionLink( | 296 addActionLink( |
| 296 'close', terminate.bind(null, page), page.attached)); | 297 row, 'close', terminate.bind(null, page), page.attached); |
| 297 } | 298 } |
| 298 } | 299 } |
| 299 } | 300 } |
| 300 } | 301 } |
| 301 } | 302 } |
| 302 } | 303 } |
| 303 | 304 |
| 304 function addToPagesList(data) { | 305 function addToPagesList(data) { |
| 305 addTargetToList(data, $('pages-list'), ['faviconUrl', 'name', 'url']); | 306 var row = addTargetToList(data, $('pages-list'), ['name', 'url']); |
| 307 addFavicon(row, data); |
| 306 } | 308 } |
| 307 | 309 |
| 308 function addToExtensionsList(data) { | 310 function addToExtensionsList(data) { |
| 309 addTargetToList(data, $('extensions-list'), ['name', 'url']); | 311 addTargetToList(data, $('extensions-list'), ['name', 'url']); |
| 310 } | 312 } |
| 311 | 313 |
| 312 function addToAppsList(data) { | 314 function addToAppsList(data) { |
| 313 var row = addTargetToList(data, $('apps-list'), ['name', 'url']); | 315 var row = addTargetToList(data, $('apps-list'), ['name', 'url']); |
| 314 if (data.guests) { | 316 if (data.guests) { |
| 315 Array.prototype.forEach.call(data.guests, function(guest) { | 317 Array.prototype.forEach.call(data.guests, function(guest) { |
| 316 var guestRow = addTargetToList(guest, row, ['faviconUrl', 'name', 'url']); | 318 var guestRow = addTargetToList(guest, row, ['name', 'url']); |
| 317 guestRow.classList.add('guest'); | 319 guestRow.classList.add('guest'); |
| 320 addFavicon(guestRow, data); |
| 318 }); | 321 }); |
| 319 } | 322 } |
| 320 } | 323 } |
| 321 | 324 |
| 322 function addToWorkersList(data) { | 325 function addToWorkersList(data) { |
| 323 var row = addTargetToList(data, $('workers-list'), ['pid', 'url']); | 326 var row = addTargetToList(data, $('workers-list'), ['pid', 'url']); |
| 324 row.appendChild(createActionLink( | 327 addActionLink(row, 'terminate', terminate.bind(null, data), data.attached); |
| 325 'terminate', terminate.bind(null, data), data.attached)); | |
| 326 } | 328 } |
| 327 | 329 |
| 328 function addToOthersList(data) { | 330 function addToOthersList(data) { |
| 329 addTargetToList(data, $('others-list'), ['url']); | 331 addTargetToList(data, $('others-list'), ['url']); |
| 330 } | 332 } |
| 331 | 333 |
| 332 function formatValue(data, property) { | 334 function formatValue(data, property) { |
| 333 var value = data[property]; | 335 var value = data[property]; |
| 334 | 336 |
| 335 if (property == 'name' && value == '') { | 337 if (property == 'name' && value == '') { |
| 336 value = 'untitled'; | 338 value = 'untitled'; |
| 337 } | 339 } |
| 338 | 340 |
| 339 if (property == 'faviconUrl') { | |
| 340 var faviconElement = document.createElement('img'); | |
| 341 if (value) | |
| 342 faviconElement.src = value; | |
| 343 return faviconElement; | |
| 344 } | |
| 345 | |
| 346 var text = value ? String(value) : ''; | 341 var text = value ? String(value) : ''; |
| 347 if (text.length > 100) | 342 if (text.length > 100) |
| 348 text = text.substring(0, 100) + '\u2026'; | 343 text = text.substring(0, 100) + '\u2026'; |
| 349 | 344 |
| 350 if (property == 'pid') | 345 if (property == 'pid') |
| 351 text = 'Pid:' + text; | 346 text = 'Pid:' + text; |
| 352 | 347 |
| 353 var span = document.createElement('div'); | 348 var span = document.createElement('div'); |
| 354 span.textContent = text; | 349 span.textContent = text; |
| 355 span.className = property; | 350 span.className = property; |
| 356 return span; | 351 return span; |
| 357 } | 352 } |
| 358 | 353 |
| 359 function addWebViewDescription(webview, list) { | 354 function addFavicon(row, data) { |
| 355 var favicon = document.createElement('img'); |
| 356 if (data['faviconUrl']) |
| 357 favicon.src = data['faviconUrl']; |
| 358 row.insertBefore(favicon, row.firstChild); |
| 359 } |
| 360 |
| 361 function addWebViewDetails(row, data) { |
| 362 var webview; |
| 363 try { |
| 364 webview = JSON.parse(data['description']); |
| 365 } catch (e) { |
| 366 return; |
| 367 } |
| 368 addWebViewDescription(row, webview); |
| 369 if (data.adbScreenWidth && data.adbScreenHeight) |
| 370 addWebViewThumbnail( |
| 371 row, webview, data.adbScreenWidth, data.adbScreenHeight); |
| 372 } |
| 373 |
| 374 function addWebViewDescription(row, webview) { |
| 360 var viewStatus = { visibility: 'empty', position: '', size: '' }; | 375 var viewStatus = { visibility: 'empty', position: '', size: '' }; |
| 361 if (!webview.empty) { | 376 if (!webview.empty) { |
| 362 if (webview.attached) | 377 if (webview.attached) |
| 363 viewStatus.visibility = webview.visible ? 'visible' : 'hidden'; | 378 viewStatus.visibility = webview.visible ? 'visible' : 'hidden'; |
| 364 else | 379 else |
| 365 viewStatus.visibility = 'detached'; | 380 viewStatus.visibility = 'detached'; |
| 366 viewStatus.size = 'size ' + webview.width + ' \u00d7 ' + webview.height; | 381 viewStatus.size = 'size ' + webview.width + ' \u00d7 ' + webview.height; |
| 367 } | 382 } |
| 368 if (webview.attached) { | 383 if (webview.attached) { |
| 369 viewStatus.position = | 384 viewStatus.position = |
| 370 'at (' + webview.screenX + ', ' + webview.screenY + ')'; | 385 'at (' + webview.screenX + ', ' + webview.screenY + ')'; |
| 371 } | 386 } |
| 372 | 387 |
| 373 var row = document.createElement('div'); | 388 var subRow = document.createElement('div'); |
| 374 row.className = 'subrow webview'; | 389 subRow.className = 'subrow webview'; |
| 375 if (webview.empty || !webview.attached || !webview.visible) | 390 if (webview.empty || !webview.attached || !webview.visible) |
| 376 row.className += ' invisible-view'; | 391 subRow.className += ' invisible-view'; |
| 377 row.appendChild(formatValue(viewStatus, 'visibility')); | 392 subRow.appendChild(formatValue(viewStatus, 'visibility')); |
| 378 row.appendChild(formatValue(viewStatus, 'position')); | 393 subRow.appendChild(formatValue(viewStatus, 'position')); |
| 379 row.appendChild(formatValue(viewStatus, 'size')); | 394 subRow.appendChild(formatValue(viewStatus, 'size')); |
| 380 list.appendChild(row); | 395 var mainSubrow = row.querySelector('.subrow.main'); |
| 381 return row; | 396 if (mainSubrow.nextSibling) |
| 397 mainSubrow.parentNode.insertBefore(subRow, mainSubrow.nextSibling); |
| 398 else |
| 399 mainSubrow.parentNode.appendChild(subRow); |
| 400 } |
| 401 |
| 402 function addWebViewThumbnail(row, webview, screenWidth, screenHeight) { |
| 403 var maxScreenRectSize = 50; |
| 404 var screenRectWidth; |
| 405 var screenRectHeight; |
| 406 |
| 407 var aspectRatio = screenWidth / screenHeight; |
| 408 if (aspectRatio < 1) { |
| 409 screenRectWidth = Math.round(maxScreenRectSize * aspectRatio); |
| 410 screenRectHeight = maxScreenRectSize; |
| 411 } else { |
| 412 screenRectWidth = maxScreenRectSize; |
| 413 screenRectHeight = Math.round(maxScreenRectSize / aspectRatio); |
| 414 } |
| 415 |
| 416 var thumbnail = document.createElement('div'); |
| 417 thumbnail.className = 'webview-thumbnail'; |
| 418 var thumbnailWidth = 3 * screenRectWidth; |
| 419 thumbnail.style.width = thumbnailWidth + 'px'; |
| 420 |
| 421 var screenRect = document.createElement('div'); |
| 422 screenRect.className = 'screen-rect'; |
| 423 screenRect.style.width = screenRectWidth + 'px'; |
| 424 screenRect.style.height = screenRectHeight + 'px'; |
| 425 thumbnail.appendChild(screenRect); |
| 426 |
| 427 if (!webview.empty && webview.attached) { |
| 428 var viewRect = document.createElement('div'); |
| 429 viewRect.className = 'view-rect'; |
| 430 if (!webview.visible) |
| 431 viewRect.classList.add('hidden'); |
| 432 function percent(ratio) { |
| 433 return ratio * 100 + '%'; |
| 434 } |
| 435 viewRect.style.left = percent(webview.screenX / screenWidth); |
| 436 viewRect.style.top = percent(webview.screenY / screenHeight); |
| 437 viewRect.style.width = percent(webview.width / screenWidth); |
| 438 viewRect.style.height = percent(webview.height / screenHeight); |
| 439 screenRect.appendChild(viewRect); |
| 440 } |
| 441 |
| 442 row.insertBefore(thumbnail, row.firstChild); |
| 382 } | 443 } |
| 383 | 444 |
| 384 function addTargetToList(data, list, properties) { | 445 function addTargetToList(data, list, properties) { |
| 385 var row = document.createElement('div'); | 446 var row = document.createElement('div'); |
| 386 row.className = 'row'; | 447 row.className = 'row'; |
| 387 | 448 |
| 449 var subrowBox = document.createElement('div'); |
| 450 row.appendChild(subrowBox); |
| 451 |
| 388 var subrow = document.createElement('div'); | 452 var subrow = document.createElement('div'); |
| 389 subrow.className = 'subrow'; | 453 subrow.className = 'subrow main'; |
| 390 row.appendChild(subrow); | 454 subrowBox.appendChild(subrow); |
| 391 | 455 |
| 392 var description = null; | 456 var description = null; |
| 393 for (var j = 0; j < properties.length; j++) { | 457 for (var j = 0; j < properties.length; j++) |
| 394 if (properties[j] != 'description') | 458 subrow.appendChild(formatValue(data, properties[j])); |
| 395 subrow.appendChild(formatValue(data, properties[j])); | |
| 396 else if (data['description']) { | |
| 397 try { | |
| 398 description = JSON.parse(data['description']); | |
| 399 } catch (e) {} | |
| 400 } | |
| 401 } | |
| 402 | 459 |
| 403 if (description) | 460 if (description) |
| 404 addWebViewDescription(description, row); | 461 addWebViewDescription(description, subrowBox); |
| 405 | 462 |
| 406 row.appendChild(createActionLink( | 463 var actionBox = document.createElement('div'); |
| 407 'inspect', inspect.bind(null, data), data.hasNoUniqueId)); | 464 actionBox.className = 'actions'; |
| 465 subrowBox.appendChild(actionBox); |
| 466 |
| 467 addActionLink(row, 'inspect', inspect.bind(null, data), data.hasNoUniqueId); |
| 408 | 468 |
| 409 list.appendChild(row); | 469 list.appendChild(row); |
| 410 return row; | 470 return row; |
| 411 } | 471 } |
| 412 | 472 |
| 413 function createActionLink(text, handler, opt_disabled) { | 473 function addActionLink(row, text, handler, opt_disabled) { |
| 414 var link = document.createElement('a'); | 474 var link = document.createElement('a'); |
| 415 if (opt_disabled) | 475 if (opt_disabled) |
| 416 link.classList.add('disabled'); | 476 link.classList.add('disabled'); |
| 417 else | 477 else |
| 418 link.classList.remove('disabled'); | 478 link.classList.remove('disabled'); |
| 419 | 479 |
| 420 link.setAttribute('href', '#'); | 480 link.setAttribute('href', '#'); |
| 421 link.textContent = text; | 481 link.textContent = text; |
| 422 link.addEventListener('click', handler, true); | 482 link.addEventListener('click', handler, true); |
| 423 return link; | 483 row.querySelector('.actions').appendChild(link); |
| 424 } | 484 } |
| 425 | 485 |
| 426 | 486 |
| 427 function initPortForwarding() { | 487 function initPortForwarding() { |
| 428 $('port-forwarding-enable').addEventListener('change', enablePortForwarding); | 488 $('port-forwarding-enable').addEventListener('change', enablePortForwarding); |
| 429 | 489 |
| 430 $('port-forwarding-config-open').addEventListener( | 490 $('port-forwarding-config-open').addEventListener( |
| 431 'click', openPortForwardingConfig); | 491 'click', openPortForwardingConfig); |
| 432 $('port-forwarding-config-close').addEventListener( | 492 $('port-forwarding-config-close').addEventListener( |
| 433 'click', closePortForwardingConfig); | 493 'click', closePortForwardingConfig); |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 if (line.querySelector('.invalid')) | 708 if (line.querySelector('.invalid')) |
| 649 return; | 709 return; |
| 650 line.classList.remove('fresh'); | 710 line.classList.remove('fresh'); |
| 651 var freshLine = createEmptyConfigLine(); | 711 var freshLine = createEmptyConfigLine(); |
| 652 line.parentNode.appendChild(freshLine); | 712 line.parentNode.appendChild(freshLine); |
| 653 if (opt_selectNew) | 713 if (opt_selectNew) |
| 654 freshLine.querySelector('.port').focus(); | 714 freshLine.querySelector('.port').focus(); |
| 655 } | 715 } |
| 656 | 716 |
| 657 document.addEventListener('DOMContentLoaded', onload); | 717 document.addEventListener('DOMContentLoaded', onload); |
| OLD | NEW |