mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
579 lines
19 KiB
JavaScript
579 lines
19 KiB
JavaScript
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
|
|
const TEST_ROOT = "http://example.com/browser/toolkit/mozapps/plugins/tests/";
|
|
|
|
var gPrefs, gPFS, gDS, gSeenAvailable;
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
|
|
gPrefs = Cc["@mozilla.org/preferences-service;1"].
|
|
getService(Ci.nsIPrefBranch);
|
|
gDS = Cc["@mozilla.org/file/directory_service;1"].
|
|
getService(Ci.nsIProperties);
|
|
prepare_test_1();
|
|
}
|
|
|
|
function finishTest(e) {
|
|
gPrefs.clearUserPref("pfs.datasource.url");
|
|
finish();
|
|
}
|
|
|
|
// Gets the number of plugin items in the detected list
|
|
function getListCount() {
|
|
var list = gPFS.document.getElementById("pluginList");
|
|
return list.childNodes.length;
|
|
}
|
|
|
|
// Gets wether the list contains a particular plugin name
|
|
function hasListItem(name, version) {
|
|
var label = name + " " + (version ? version : "");
|
|
var list = gPFS.document.getElementById("pluginList");
|
|
for (var i = 0; i < list.childNodes.length; i++) {
|
|
if (list.childNodes[i].label == label)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Gets the number of plugin results
|
|
function getResultCount() {
|
|
var list = gPFS.document.getElementById("pluginResultList");
|
|
return list.childNodes.length;
|
|
}
|
|
|
|
// Gets the plugin result for a particular plugin name
|
|
function getResultItem(name, version) {
|
|
var label = name + " " + (version ? version : "");
|
|
var list = gPFS.document.getElementById("pluginResultList");
|
|
for (var i = 0; i < list.childNodes.length; i++) {
|
|
if (list.childNodes[i].childNodes[1].value == label) {
|
|
var item = {
|
|
name: name,
|
|
version: version,
|
|
status: null
|
|
};
|
|
if (list.childNodes[i].childNodes[2].tagName == "label")
|
|
item.status = list.childNodes[i].childNodes[2].value;
|
|
return item;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Test a working installer
|
|
function prepare_test_1() {
|
|
ok(true, "Test 1");
|
|
gPrefs.setCharPref("pfs.datasource.url", TEST_ROOT + "pfs_bug435788_1.rdf");
|
|
|
|
var missingPluginsArray = {
|
|
"application/x-working-plugin": {
|
|
mimetype: "application/x-working-plugin",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_1_start, false);
|
|
}
|
|
|
|
function test_1_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_2, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_1_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_1_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_1_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test plugin 1", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_1_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test plugin 1", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Installed", "Should have been a successful install");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test a broken installer (returns exit code 1)
|
|
function prepare_test_2() {
|
|
ok(true, "Test 2");
|
|
var missingPluginsArray = {
|
|
"application/x-broken-installer": {
|
|
mimetype: "application/x-broken-installer",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_2_start, false);
|
|
}
|
|
|
|
function test_2_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_3, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_2_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_2_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_2_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test plugin 2", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_2_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test plugin 2", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have been a failed install");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test both working and broken together
|
|
function prepare_test_3() {
|
|
ok(true, "Test 3");
|
|
var missingPluginsArray = {
|
|
"application/x-working-plugin": {
|
|
mimetype: "application/x-working-plugin",
|
|
pluginsPage: ""
|
|
},
|
|
"application/x-broken-installer": {
|
|
mimetype: "application/x-broken-installer",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_3_start, false);
|
|
}
|
|
|
|
function test_3_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_4, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_3_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_3_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_3_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 2, "Should have found 2 plugins to install");
|
|
ok(hasListItem("Test plugin 1", null), "Should have seen the right plugin name");
|
|
ok(hasListItem("Test plugin 2", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_3_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 2, "Should have attempted to install 2 plugins");
|
|
var item = getResultItem("Test plugin 1", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Installed", "Should have been a successful install");
|
|
item = getResultItem("Test plugin 2", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have been a failed install");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test an installer with a bad hash
|
|
function prepare_test_4() {
|
|
ok(true, "Test 4");
|
|
var missingPluginsArray = {
|
|
"application/x-broken-plugin-hash": {
|
|
mimetype: "application/x-broken-plugin-hash",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_4_start, false);
|
|
}
|
|
|
|
function test_4_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_5, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_4_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_4_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_4_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test plugin 3", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_4_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test plugin 3", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have not been a successful install");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test a working xpi
|
|
function prepare_test_5() {
|
|
ok(true, "Test 5");
|
|
|
|
var missingPluginsArray = {
|
|
"application/x-working-extension": {
|
|
mimetype: "application/x-working-extension",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_5_start, false);
|
|
}
|
|
|
|
function test_5_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_6, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_5_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_5_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_5_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test extension 1", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_5_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test extension 1", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Installed", "Should have been a successful install");
|
|
|
|
var em = Cc["@mozilla.org/extensions/manager;1"].
|
|
getService(Ci.nsIExtensionManager);
|
|
ok(em.getItemForID("bug435788_1@tests.mozilla.org"), "Should have installed the extension");
|
|
em.cancelInstallItem("bug435788_1@tests.mozilla.org");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test a broke xpi (no install.rdf)
|
|
function prepare_test_6() {
|
|
ok(true, "Test 6");
|
|
var missingPluginsArray = {
|
|
"application/x-broken-extension": {
|
|
mimetype: "application/x-broken-extension",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_6_start, false);
|
|
}
|
|
|
|
function test_6_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_7, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_6_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_6_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_6_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test extension 2", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_6_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test extension 2", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have been a failed install");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test both working and broken xpi
|
|
function prepare_test_7() {
|
|
ok(true, "Test 7");
|
|
var missingPluginsArray = {
|
|
"application/x-working-extension": {
|
|
mimetype: "application/x-working-extension",
|
|
pluginsPage: ""
|
|
},
|
|
"application/x-broken-extension": {
|
|
mimetype: "application/x-broken-extension",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_7_start, false);
|
|
}
|
|
|
|
function test_7_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_8, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_7_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_7_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_7_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 2, "Should have found 2 plugins to install");
|
|
ok(hasListItem("Test extension 1", null), "Should have seen the right plugin name");
|
|
ok(hasListItem("Test extension 2", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_7_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 2, "Should have attempted to install 2 plugins");
|
|
var item = getResultItem("Test extension 1", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Installed", "Should have been a failed install");
|
|
item = getResultItem("Test extension 2", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have been a failed install");
|
|
|
|
var em = Cc["@mozilla.org/extensions/manager;1"].
|
|
getService(Ci.nsIExtensionManager);
|
|
ok(em.getItemForID("bug435788_1@tests.mozilla.org"), "Should have installed the extension");
|
|
em.cancelInstallItem("bug435788_1@tests.mozilla.org");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test an xpi with a bad hash
|
|
function prepare_test_8() {
|
|
ok(true, "Test 8");
|
|
var missingPluginsArray = {
|
|
"application/x-broken-extension-hash": {
|
|
mimetype: "application/x-broken-extension-hash",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_8_start, false);
|
|
}
|
|
|
|
function test_8_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_9, false);
|
|
gSeenAvailable = false;
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
executeSoon(test_8_available);
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_8_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_8_available() {
|
|
gSeenAvailable = true;
|
|
is(getListCount(), 1, "Should have found 1 plugin to install");
|
|
ok(hasListItem("Test extension 3", null), "Should have seen the right plugin name");
|
|
|
|
gPFS.document.documentElement.getButton("next").click();
|
|
}
|
|
|
|
function test_8_complete() {
|
|
ok(gSeenAvailable, "Should have seen the list of available plugins");
|
|
is(getResultCount(), 1, "Should have attempted to install 1 plugin");
|
|
var item = getResultItem("Test extension 3", null);
|
|
ok(item, "Should have seen the installed item");
|
|
is(item.status, "Failed", "Should have not been a successful install");
|
|
|
|
var em = Cc["@mozilla.org/extensions/manager;1"].
|
|
getService(Ci.nsIExtensionManager);
|
|
ok(!em.getItemForID("bug435788_1@tests.mozilla.org"), "Should not have installed the extension");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test when no plugin exists in the datasource
|
|
function prepare_test_9() {
|
|
ok(true, "Test 9");
|
|
var missingPluginsArray = {
|
|
"application/x-unknown-plugin": {
|
|
mimetype: "application/x-unknown-plugin",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_9_start, false);
|
|
}
|
|
|
|
function test_9_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_10, false);
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
ok(false, "Should not have found plugins to install");
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_9_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_9_complete() {
|
|
is(getResultCount(), 0, "Should have found no plugins");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test when the datasource is invalid xml
|
|
function prepare_test_10() {
|
|
ok(true, "Test 10");
|
|
gPrefs.setCharPref("pfs.datasource.url", TEST_ROOT + "pfs_bug435788_2.rdf");
|
|
|
|
var missingPluginsArray = {
|
|
"application/x-broken-xml": {
|
|
mimetype: "application/x-broken-xml",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_10_start, false);
|
|
}
|
|
|
|
function test_10_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", prepare_test_11, false);
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
ok(false, "Should not have found plugins to install");
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_10_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_10_complete() {
|
|
is(getResultCount(), 0, "Should have found no plugins");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|
|
|
|
// Test when no datasource is returned
|
|
function prepare_test_11() {
|
|
ok(true, "Test 11");
|
|
gPrefs.setCharPref("pfs.datasource.url", TEST_ROOT + "pfs_bug435788_foo.rdf");
|
|
|
|
var missingPluginsArray = {
|
|
"application/x-missing-xml": {
|
|
mimetype: "application/x-missing-xml",
|
|
pluginsPage: ""
|
|
}
|
|
};
|
|
|
|
gPFS = window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
|
|
"PFSWindow", "chrome,centerscreen,resizable=yes",
|
|
{plugins: missingPluginsArray});
|
|
gPFS.addEventListener("load", test_11_start, false);
|
|
}
|
|
|
|
function test_11_start() {
|
|
ok(true, "PFS loaded");
|
|
gPFS.addEventListener("unload", finishTest, false);
|
|
|
|
gPFS.document.documentElement.wizardPages[1].addEventListener("pageshow", function() {
|
|
ok(false, "Should not have found plugins to install");
|
|
}, false);
|
|
gPFS.document.documentElement.wizardPages[4].addEventListener("pageshow", function() {
|
|
executeSoon(test_10_complete);
|
|
}, false);
|
|
}
|
|
|
|
function test_11_complete() {
|
|
is(getResultCount(), 0, "Should have found no plugins");
|
|
|
|
gPFS.document.documentElement.getButton("finish").click();
|
|
}
|