gecko/testing/tools/pageloader/chrome/content/pageloader.js

200 lines
4.5 KiB
JavaScript

var NUM_CYCLES = 5;
var pages;
var pageIndex;
var results;
var start_time;
var end_time;
var cycle;
var report;
var running = false;
function plInit() {
if (running) {
return;
}
running = true;
try {
pageIndex = 0;
cycle = 0;
results = new Object();
if (! pages) {
var file;
try {
file = plDefaultFile();
} catch(e) {
dumpLine(e);
}
if (! file.exists()) {
try {
file = plFilePicker();
} catch(e) {
dumpLine(e);
}
}
pages = plLoadURLsFromFile(file);
}
if (! pages ) {
alert('could not load URLs, quitting');
plStop(true);
}
if (pages.length == 0) {
alert('no pages to test, quitting');
plStop(true);
}
report = new Report(pages);
plLoadPage();
} catch(e) {
dumpLine(e);
plStop(true);
}
}
function plLoadPage() {
try {
start_time = new Date();
p = pages[pageIndex];
this.content = document.getElementById('contentPageloader');
this.content.addEventListener('load', plLoadHandler, true);
this.content.loadURI(p);
} catch (e) {
dumpLine(e);
plStop(true);
}
}
function plLoadHandler(evt) {
if (evt.type == 'load') {
window.setTimeout('reallyHandle()', 500);
} else {
dumpLine('Unknown event type: '+evt.type);
plStop(true);
}
}
function reallyHandle() {
if (pageIndex < pages.length) {
try {
end_time = new Date();
var pageName = pages[pageIndex];
results[pageName] = (end_time - start_time);
start_time = new Date();
dumpLine(pageName+" took "+results[pageName]);
plReport();
pageIndex++;
plLoadPage();
} catch(e) {
dumpLine(e);
plStop(true);
}
} else {
plStop(false);
}
}
function plReport() {
try {
var reportNode = document.getElementById('report');
var pageName = pages[pageIndex];
var time = results[pageName];
report.recordTime(pageIndex, time);
} catch(e) {
dumpLine(e);
plStop(false);
}
}
function plStop(force) {
try {
if (force == false) {
pageIndex = 0;
results = new Object;
if (cycle < NUM_CYCLES) {
cycle++;
plLoadPage();
return;
} else {
dumpLine(report.getReport());
}
}
this.content.removeEventListener('load', plLoadHandler, true);
} catch(e) {
dumpLine(e);
}
goQuitApplication();
}
/* Returns nsilocalfile */
function plDefaultFile() {
try {
const nsIIOService = Components.interfaces.nsIIOService;
var dirService =
Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties);
var profileDir = dirService.get("ProfD",
Components.interfaces.nsILocalFile);
var file = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
var path = profileDir.path;
file.initWithPath(path);
file.append("urls.txt");
dumpLine('will attempt to load default file '+file.path);
return file;
} catch (e) {
dumpLine(e);
}
}
/* Returns nsifile */
function plFilePicker() {
try {
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Dialog Title", nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK) {
return fp.file;
}
} catch (e) {
dumpLine(e);
}
}
/* Returns array */
function plLoadURLsFromFile(file) {
try {
var data = "";
var fstream =
Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream);
var sstream = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance(Components.interfaces.nsIScriptableInputStream);
fstream.init(file, -1, 0, 0);
sstream.init(fstream);
var str = sstream.read(4096);
while (str.length > 0) {
data += str;
str = sstream.read(4096);
}
sstream.close();
fstream.close();
var p = data.split("\n");
// discard result of final split (EOF)
p.pop()
return p;
} catch (e) {
dumpLine(e);
}
}
function dumpLine(str) {
dump(str);
dump("\n");
}