| Index: chrome/browser/resources/inspect/inspect.js | 
| diff --git a/chrome/browser/resources/inspect/inspect.js b/chrome/browser/resources/inspect/inspect.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..3f05a2dc11e1fdcdcb965a200e1ec3242c34ce3d | 
| --- /dev/null | 
| +++ b/chrome/browser/resources/inspect/inspect.js | 
| @@ -0,0 +1,133 @@ | 
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +function requestData() { | 
| +  var xhr = new XMLHttpRequest(); | 
| +  xhr.open('GET', 'targets-data.json', false); | 
| +  xhr.send(null); | 
| +  if (xhr.status === 200) | 
| +    return JSON.parse(xhr.responseText); | 
| +  return []; | 
| +} | 
| + | 
| +function inspect(data) { | 
| +  chrome.send('inspect', | 
| +              [String(data.processId), String(data.routeId)]); | 
| +} | 
| + | 
| +function terminate(data) { | 
| +  chrome.send('terminate', | 
| +              [String(data.processId), String(data.routeId)]); | 
| +} | 
| + | 
| +function removeChildren(element_id) { | 
| +  var element = document.getElementById(element_id); | 
| +  element.textContent = ''; | 
| +} | 
| + | 
| +function populateLists() { | 
| +  var data = requestData(); | 
| + | 
| +  removeChildren('pages'); | 
| +  removeChildren('extensions'); | 
| +  removeChildren('workers'); | 
| +  removeChildren('others'); | 
| + | 
| +  for (var i = 0; i < data.length; i++) { | 
| +    if (data[i].type === 'page') | 
| +      addToPagesList(data[i]); | 
| +    else if (data[i].type === 'worker') | 
| +      addToWorkersList(data[i]); | 
| +    else if (data[i].type === 'extension') | 
| +      addToExtensionsList(data[i]); | 
| +    else | 
| +      addToOthersList(data[i]); | 
| +  } | 
| +} | 
| + | 
| +function addToPagesList(data) { | 
| +  addTargetToList(data, 'pages', ['favicon_url', 'name', 'url']); | 
| +} | 
| + | 
| +function addToExtensionsList(data) { | 
| +  addTargetToList(data, 'extensions', ['name', 'url']); | 
| +} | 
| + | 
| +function addToWorkersList(data) { | 
| +  addTargetToList(data, | 
| +                  'workers', | 
| +                  ['name', 'url', 'pid'], | 
| +                  true); | 
| +} | 
| + | 
| +function addToOthersList(data) { | 
| +  addTargetToList(data, 'others', ['url']); | 
| +} | 
| + | 
| +function formatValue(data, property) { | 
| +  var value = data[property]; | 
| + | 
| +  if (property == 'favicon_url') { | 
| +    var faviconElement = document.createElement('img'); | 
| +    if (value) | 
| +      faviconElement.src = value; | 
| +    return faviconElement; | 
| +  } | 
| + | 
| +  var text = value ? String(value) : ''; | 
| +  if (text.length > 100) | 
| +    text = text.substring(0, 100) + '\u2026'; | 
| + | 
| +  if (property == 'pid') | 
| +    text = 'Pid:' + text; | 
| + | 
| +  var span = document.createElement('span'); | 
| +  span.textContent = ' ' + text + ' '; | 
| +  span.className = property; | 
| +  return span; | 
| +} | 
| + | 
| +function addTargetToList(data, listId, properties, canTerminate) { | 
| +  var list = document.getElementById(listId); | 
| +  var row = document.createElement('div'); | 
| +  row.className = 'row'; | 
| +  for (var j = 0; j < properties.length; j++) | 
| +    row.appendChild(formatValue(data, properties[j])); | 
| + | 
| +  row.appendChild(createInspectElement(data)); | 
| +  if (canTerminate) | 
| +    row.appendChild(createTerminateElement(data)); | 
| + | 
| +  row.processId = data.processId; | 
| +  row.routeId = data.routeId; | 
| + | 
| +  list.appendChild(row); | 
| +} | 
| + | 
| +function createInspectElement(data) { | 
| +  var link = document.createElement('a'); | 
| +  link.setAttribute('href', '#'); | 
| +  link.textContent = ' inspect '; | 
| +  link.addEventListener( | 
| +      'click', | 
| +      inspect.bind(this, data), | 
| +      true); | 
| +  return link; | 
| +} | 
| + | 
| +function createTerminateElement(data) { | 
| +  var link = document.createElement('a'); | 
| +  if (data.attached) | 
| +    link.disabled = true; | 
| + | 
| +  link.setAttribute('href', '#'); | 
| +  link.textContent = ' terminate '; | 
| +  link.addEventListener( | 
| +      'click', | 
| +      terminate.bind(this, data), | 
| +      true); | 
| +  return link; | 
| +} | 
| + | 
| +document.addEventListener('DOMContentLoaded', populateLists); | 
|  |