blob: 3f05a2dc11e1fdcdcb965a200e1ec3242c34ce3d [file] [log] [blame]
// 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);