// 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);