gecko/browser/app/profile/extensions/testpilot@labs.mozilla.com/content/debug.html
Jono S Xia 5067a66e67 Bug 603009: Catch and report all exceptions thrown during test pilot study execution. r=dtownsend
Bug 646122: Holding on to Exception objects causes crash in garbage collector. r=dtownsend
Bug 645092: Stop using [deprecated] Storage methods (testpilot). r=mfinkle
DONTBUILD as it is NPOTB on m-c
2011-05-03 12:41:28 -07:00

269 lines
9.5 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>Test Pilot Debug Page</title>
<script src="experiment-page.js" type="application/javascript;version=1.8"></script>
<script type="application/javascript;version=1.8">
function getEid() {
var selector = document.getElementById("task-selector");
var i = selector.selectedIndex;
return selector.options[i].getAttribute("value");
}
function setTaskStatus() {
Components.utils.import("resource://testpilot/modules/setup.js");
var newStatus = document.getElementById("status-code").value;
newStatus = parseInt(newStatus);
var task = TestPilotSetup.getTaskById(getEid());
task.changeStatus(newStatus, false);
}
function reloadAllExperiments() {
Components.utils.import("resource://testpilot/modules/setup.js");
TestPilotSetup.reloadRemoteExperiments(function(success) {
let errors = TestPilotSetup._remoteExperimentLoader.getLoadErrors();
let str;
if (errors.length > 0) {
str = "<ul>";
for each (let errStr in errors) {
str += "<li>" + errStr + "</li>";
}
str += "</ul>";
} else {
str = "All experiments reloaded, no errors.";
}
document.getElementById("debug").innerHTML = str;
});
}
function runUnitTests() {
Components.utils.import("resource://testpilot/tests/test_data_store.js");
runAllTests();
}
function testJarStore() {
var Cuddlefish = {};
Components.utils.import("resource://testpilot/modules/lib/cuddlefish.js",
Cuddlefish);
var loader = new Cuddlefish.Loader(
{rootPaths: ["resource://testpilot/modules/",
"resource://testpilot/modules/lib/"]});
var jarStoreModule = loader.require("jar-code-store");
var SecurableModule = loader.require("securable-module");
var jarStore = new jarStoreModule.JarStore();
// OK now watch this! It's gonna be awesome!
var clientLoader = Cuddlefish.Loader(
{fs: new SecurableModule.CompositeFileSystem(
[jarStore, loader.fs])});
dump("Debug page Requiring toolbar study.\n");
var toolbarStudy = clientLoader.require("toolbar-study");
}
function remindMe() {
Components.utils.import("resource://testpilot/modules/setup.js");
TestPilotSetup._notifyUserOfTasks();
//TestPilotSetup._doHousekeeping();
}
function getCodeStorage() {
Components.utils.import("resource://testpilot/modules/setup.js");
var loader = TestPilotSetup._remoteExperimentLoader;
return loader._jarStore;
}
function getSelectedFilename() {
var selector = document.getElementById("file-selector");
var i = selector.selectedIndex;
return selector.options[i].text;
}
function loadExperimentCode() {
var filename = getSelectedFilename();
var codeStore = getCodeStorage();
var textArea = document.getElementById("experiment-code-area");
var path = codeStore.resolveModule(null, filename);
code = codeStore.getFile(path).contents;
textArea.value = code;
}
function saveAndRun() {
var filename = getSelectedFilename();
var codeStore = getCodeStorage();
var path = codeStore.resolveModule(null, filename);
var textArea = document.getElementById("experiment-code-area");
codeStore.setLocalOverride(path, textArea.value);
reloadAllExperiments();
}
function showMetaData() {
Components.utils.import("resource://testpilot/modules/setup.js");
let task = TestPilotSetup.getTaskById(getEid());
let json = task._prependMetadataToJSON(function(json) {
document.getElementById("debug").innerHTML = json;
});
}
function makeThereBeAPopup() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
var text = "Sample popup for " + task.title;
TestPilotSetup._showNotification(task, false, text, "This is Title",
"", true, false, "Linktext",
"http://evilbrainjono.net");
}
function wipeDb() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
task.dataStore.wipeAllData();
var debug = document.getElementById("debug");
debug.innerHTML = "Wiped!";
}
function nukeDb() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
task.dataStore.nukeTable();
var debug = document.getElementById("debug");
debug.innerHTML = "Nuked!";
}
function populateFileDropdown() {
var codeStore = getCodeStorage();
var files = codeStore.listAllFiles();
var selector = document.getElementById("file-selector");
var opt, i;
for (var i = 0; i < files.length; i++) {
opt = document.createElement("option");
opt.innerHTML = files[i];
selector.appendChild(opt);
}
selector = document.getElementById("task-selector");
var tasks = TestPilotSetup.getAllTasks();
var title;
for (i = 0; i < tasks.length; i++) {
opt = document.createElement("option");
title = tasks[i].title;
opt.innerHTML = title;
opt.setAttribute("value", tasks[i].id);
selector.appendChild(opt);
}
}
function showSelectedTaskStatus() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
document.getElementById("show-status-span").innerHTML = task.status;
var selector = document.getElementById("status-selector");
selector.selectedIndex = task.status;
}
function resetSelectedTask() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
task.changeStatus(0, true);
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
var prefName= "extensions.testpilot.startDate." + task.id;
if (prefService.prefHasUserValue(prefName)) {
prefService.clearUserPref(prefName);
}
//TestPilotSetup.reloadRemoteExperiments();
}
function setSelectedTaskStatus() {
Components.utils.import("resource://testpilot/modules/setup.js");
var task = TestPilotSetup.getTaskById(getEid());
var selector = document.getElementById("status-selector");
var i = selector.selectedIndex;
var newStatus = parseInt( selector.options[i].value );
task.changeStatus(newStatus, false);
}
function showIndexFileDropdown() {
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
var prefName = "extensions.testpilot.indexFileName";
var selector = document.getElementById("index-file-selector");
if (prefService.getCharPref(prefName) == "index.json") {
selector.selectedIndex = 0;
} else {
selector.selectedIndex = 1;
}
}
function setSelectedIndexFile() {
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
var prefName = "extensions.testpilot.indexFileName";
var selector = document.getElementById("index-file-selector");
var i = selector.selectedIndex;
prefService.setCharPref( prefName, selector.options[i].value );
// DELETE CACHED INDEX FILE
var file = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).
get("ProfD", Components.interfaces.nsIFile);
file.append("TestPilotExperimentFiles");
file.append("index.json");
if (file.exists()) {
file.remove(false);
}
}
</script>
<style type="text/css">
canvas { border: 1px solid black; }
</style>
</head>
<body onload="populateFileDropdown();showSelectedTaskStatus();showIndexFileDropdown();">
<fieldset>
<p><select id="task-selector" onchange="showSelectedTaskStatus();"></select> Current Status = <span id="show-status-span"></span>.
<button onclick="resetSelectedTask();showSelectedTaskStatus();">Reset Task</button>
or set it to
<select id="status-selector" onchange="setSelectedTaskStatus(); showSelectedTaskStatus();">
<option value="0">0 (New)</option>
<option value="1">1 (Pending)</option>
<option value="2">2 (Starting)</option>
<option value="3">3 (In Progress)</option>
<option value="4">4 (Finished)</option>
<option value="5">5 (Cancelled)</option>
<option value="6">6 (Submitted)</option>
<option value="7">7 (Results)</option>
<option value="8">8 (Archived)</option>
</select>
<button onclick="wipeDb();">Wipe My Data</button>
<button onclick="nukeDb();">NUKE</button>
<button onclick="uploadData();">Upload My Data</button>
<button onclick="showMetaData();">Show Metadata</button>
<button onclick="runUnitTests();">Run Tests</button>
</fieldset>
<fieldset>
<p><button onclick="makeThereBeAPopup();">Show Dummy Popup</button>
<button onclick="reloadAllExperiments();">Reload All Experiments</button>
<button onclick="remindMe();">Notify Me</button>
<button onclick="testJarStore();">Test Jar Store</button>
Index file:
<select id="index-file-selector" onchange="setSelectedIndexFile();">
<option value="index.json">index.json</option>
<option value="index-dev.json">index-dev.json</option>
</select>
</p>
</fieldset>
<p><span id="debug"></span></p>
<textarea id="experiment-code-area" rows="40" cols="80">
</textarea>
<select id="file-selector"></select>
<button onclick="loadExperimentCode();">Load Ye Code</button>
<button onclick="saveAndRun();">Save And Run Ye Code</button>
</body> </html>