new file mode 100644
index 0000000000000000000000000000000000000000..4edf91e34a903af625951e97bffc5db5c0793cbe
GIT binary patch
literal 4420
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
new file mode 100644
index 0000000000000000000000000000000000000000..74e877f26fe36641a92e66d3c5960e7f52e39e4c
GIT binary patch
literal 4421
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
--- a/toolkit/mozapps/extensions/test/xpinstall/browser.ini
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser.ini
@@ -1,10 +1,12 @@
[DEFAULT]
support-files =
+ amosigned.xpi
+ amosigned2.xpi
authRedirect.sjs
bug540558.html
bug638292.html
bug645699.html
concurrent_installs.html
cookieRedirect.sjs
corrupt.xpi
empty.xpi
@@ -14,28 +16,33 @@ support-files =
incompatible.xpi
installchrome.html
installtrigger.html
installtrigger_frame.html
multipackage.xpi
navigate.html
redirect.sjs
restartless.xpi
+ signed-multipackage.xpi
signed-no-cn.xpi
signed-no-o.xpi
signed-tampered.xpi
signed-untrusted.xpi
signed.xpi
signed2.xpi
slowinstall.sjs
startsoftwareupdate.html
theme.xpi
triggerredirect.html
unsigned.xpi
+[browser_amosigned_trigger.js]
+[browser_amosigned_trigger_iframe.js]
+skip-if = buildapp == "mulet"
+[browser_amosigned_url.js]
[browser_auth.js]
[browser_auth2.js]
[browser_auth3.js]
[browser_auth4.js]
[browser_badargs.js]
[browser_badargs2.js]
[browser_badhash.js]
[browser_badhashtype.js]
@@ -72,30 +79,40 @@ skip-if = true # Bug 1084646
[browser_localfile4.js]
[browser_multipackage.js]
[browser_navigateaway.js]
[browser_navigateaway2.js]
[browser_navigateaway3.js]
[browser_navigateaway4.js]
[browser_offline.js]
[browser_relative.js]
+[browser_signed_multipackage.js]
+skip-if = require_signing
[browser_signed_multiple.js]
+skip-if = require_signing
[browser_signed_naming.js]
+skip-if = require_signing
[browser_signed_tampered.js]
+skip-if = require_signing
[browser_signed_trigger.js]
+skip-if = require_signing
[browser_signed_untrusted.js]
+skip-if = require_signing
[browser_signed_url.js]
+skip-if = require_signing
[browser_softwareupdate.js]
[browser_switchtab.js]
[browser_trigger_redirect.js]
[browser_unsigned_trigger.js]
+skip-if = require_signing
[browser_unsigned_trigger_iframe.js]
-skip-if = buildapp == "mulet"
+skip-if = buildapp == "mulet" || require_signing
[browser_unsigned_trigger_xorigin.js]
skip-if = buildapp == "mulet"
[browser_unsigned_url.js]
+skip-if = require_signing
[browser_whitelist.js]
[browser_whitelist2.js]
[browser_whitelist3.js]
[browser_whitelist4.js]
[browser_whitelist5.js]
[browser_whitelist6.js]
[browser_whitelist7.js]
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_amosigned_trigger.js
@@ -0,0 +1,50 @@
+// ----------------------------------------------------------------------------
+// Tests installing an unsigned add-on through an InstallTrigger call in web
+// content.
+function test() {
+ Harness.installConfirmCallback = confirm_install;
+ Harness.installEndedCallback = install_ended;
+ Harness.installsCompletedCallback = finish_test;
+ Harness.finalContentEvent = "InstallComplete";
+ Harness.setup();
+
+ var pm = Services.perms;
+ pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
+
+ var triggers = encodeURIComponent(JSON.stringify({
+ "Unsigned XPI": {
+ URL: TESTROOT + "amosigned.xpi",
+ IconURL: TESTROOT + "icon.png",
+ toString: function() { return this.URL; }
+ }
+ }));
+ gBrowser.selectedTab = gBrowser.addTab();
+ gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
+}
+
+function confirm_install(window) {
+ var items = window.document.getElementById("itemList").childNodes;
+ is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
+ is(items[0].name, "XPI Test", "Should have seen the name");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].icon, TESTROOT + "icon.png", "Should have listed the correct icon for the item");
+ is(items[0].signed, "false", "Should have listed the item as unsigned");
+ return true;
+}
+
+function install_ended(install, addon) {
+ install.cancel();
+}
+
+function finish_test(count) {
+ is(count, 1, "1 Add-on should have been successfully installed");
+
+ Services.perms.remove(makeURI("http://example.com"), "install");
+
+ var doc = gBrowser.contentDocument;
+ is(doc.getElementById("return").textContent, "true", "installTrigger should have claimed success");
+ is(doc.getElementById("status").textContent, "0", "Callback should have seen a success");
+
+ gBrowser.removeCurrentTab();
+ Harness.finish();
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_amosigned_trigger_iframe.js
@@ -0,0 +1,51 @@
+// ----------------------------------------------------------------------------
+// Test for bug 589598 - Ensure that installing through InstallTrigger
+// works in an iframe in web content.
+
+function test() {
+ Harness.installConfirmCallback = confirm_install;
+ Harness.installEndedCallback = install_ended;
+ Harness.installsCompletedCallback = finish_test;
+ Harness.finalContentEvent = "InstallComplete";
+ Harness.setup();
+
+ var pm = Services.perms;
+ pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
+
+ var inner_url = encodeURIComponent(TESTROOT + "installtrigger.html?" + encodeURIComponent(JSON.stringify({
+ "Unsigned XPI": {
+ URL: TESTROOT + "amosigned.xpi",
+ IconURL: TESTROOT + "icon.png",
+ toString: function() { return this.URL; }
+ }
+ })));
+ gBrowser.selectedTab = gBrowser.addTab();
+ gBrowser.loadURI(TESTROOT + "installtrigger_frame.html?" + inner_url);
+}
+
+function confirm_install(window) {
+ var items = window.document.getElementById("itemList").childNodes;
+ is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
+ is(items[0].name, "XPI Test", "Should have seen the name");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].icon, TESTROOT + "icon.png", "Should have listed the correct icon for the item");
+ is(items[0].signed, "false", "Should have listed the item as unsigned");
+ return true;
+}
+
+function install_ended(install, addon) {
+ install.cancel();
+}
+
+function finish_test(count) {
+ is(count, 1, "1 Add-on should have been successfully installed");
+
+ Services.perms.remove(makeURI("http://example.com"), "install");
+
+ var doc = gBrowser.contentWindow.frames[0].document; // Document of iframe
+ is(doc.getElementById("return").textContent, "true", "installTrigger in iframe should have claimed success");
+ is(doc.getElementById("status").textContent, "0", "Callback in iframe should have seen a success");
+
+ gBrowser.removeCurrentTab();
+ Harness.finish();
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_amosigned_url.js
@@ -0,0 +1,35 @@
+// ----------------------------------------------------------------------------
+// Tests installing an unsigned add-on by navigating directly to the url
+function test() {
+ Harness.installConfirmCallback = confirm_install;
+ Harness.installEndedCallback = install_ended;
+ Harness.installsCompletedCallback = finish_test;
+ Harness.setup();
+
+ gBrowser.selectedTab = gBrowser.addTab("about:blank");
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
+ gBrowser.loadURI(TESTROOT + "amosigned.xpi");
+ });
+}
+
+function confirm_install(window) {
+ let items = window.document.getElementById("itemList").childNodes;
+ is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
+ is(items[0].name, "XPI Test", "Should have had the filename for the item name");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].icon, "", "Should have listed no icon for the item");
+ is(items[0].signed, "false", "Should have listed the item as unsigned");
+ return true;
+}
+
+function install_ended(install, addon) {
+ install.cancel();
+}
+
+function finish_test(count) {
+ is(count, 1, "1 Add-on should have been successfully installed");
+
+ gBrowser.removeCurrentTab();
+ Harness.finish();
+}
+// ----------------------------------------------------------------------------
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_auth.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_auth.js
@@ -11,17 +11,17 @@ function test() {
var prefs = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
prefs.setIntPref("network.auth.subresource-http-auth-allow", 2);
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function get_auth_info() {
return [ "testuser", "testpass" ];
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_auth2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_auth2.js
@@ -9,17 +9,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function get_auth_info() {
return [ "baduser", "badpass" ];
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_auth3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_auth3.js
@@ -17,17 +17,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function get_auth_info() {
return null;
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_auth4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_auth4.js
@@ -16,17 +16,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "authRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gNewTab = gBrowser.addTab();
gBrowser.getBrowserForTab(gNewTab).loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function get_auth_info() {
is(gBrowser.selectedTab, gNewTab, "Should have focused the tab loading the XPI");
return [ "testuser", "testpass" ];
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_badargs.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_badargs.js
@@ -1,15 +1,15 @@
// ----------------------------------------------------------------------------
// Test whether passing a simple string to InstallTrigger.install throws an
// exception
function test() {
waitForExplicitFinish();
- var triggers = encodeURIComponent(JSON.stringify(TESTROOT + "unsigned.xpi"));
+ var triggers = encodeURIComponent(JSON.stringify(TESTROOT + "amosigned.xpi"));
gBrowser.selectedTab = gBrowser.addTab();
function loadListener() {
gBrowser.selectedBrowser.removeEventListener("load", loadListener, true);
gBrowser.contentWindow.addEventListener("InstallTriggered", page_loaded, false);
}
gBrowser.selectedBrowser.addEventListener("load", loadListener, true);
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_badhash.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_badhash.js
@@ -6,17 +6,17 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
+ URL: TESTROOT + "amosigned.xpi",
Hash: "sha1:643b08418599ddbd1ea8a511c90696578fb844b9",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_badhashtype.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_badhashtype.js
@@ -6,17 +6,17 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
+ URL: TESTROOT + "amosigned.xpi",
Hash: "foo:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_bug672485.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_bug672485.js
@@ -14,17 +14,17 @@ function test() {
gWindowWatcher = Services.ww;
delete Services.ww;
is(Services.ww, undefined, "Services.ww should now be undefined");
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function confirm_install(window) {
ok(false, "Should not see the install dialog");
return false;
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_cancel.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_cancel.js
@@ -9,18 +9,18 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Signed XPI": TESTROOT + "signed.xpi",
- "Signed XPI 2": TESTROOT + "signed2.xpi",
+ "Unsigned XPI": TESTROOT + "amosigned.xpi",
+ "Unsigned XPI 2": TESTROOT + "amosigned2.xpi",
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function get_item(items, url) {
for (let item of items) {
if (item.url == url)
@@ -28,27 +28,25 @@ function get_item(items, url) {
}
ok(false, "Item for " + url + " was not listed");
return null;
}
function confirm_install(window) {
let items = window.document.getElementById("itemList").childNodes;
is(items.length, 2, "Should be 2 items listed in the confirmation dialog");
- let item = get_item(items, TESTROOT + "signed.xpi");
+ let item = get_item(items, TESTROOT + "amosigned.xpi");
+ if (item) {
+ is(item.name, "XPI Test", "Should have seen the name from the trigger list");
+ is(item.signed, "false", "Should have listed the item as signed");
+ }
+ item = get_item(items, TESTROOT + "amosigned2.xpi");
if (item) {
is(item.name, "Signed XPI Test", "Should have seen the name from the trigger list");
- is(item.cert, "(Object Signer)", "Should have seen the signer");
- is(item.signed, "true", "Should have listed the item as signed");
- }
- item = get_item(items, TESTROOT + "signed2.xpi");
- if (item) {
- is(item.name, "Signed XPI Test", "Should have seen the name from the trigger list");
- is(item.cert, "(Object Signer)", "Should have seen the signer");
- is(item.signed, "true", "Should have listed the item as signed");
+ is(item.signed, "false", "Should have listed the item as signed");
}
return false;
}
function install_ended(install, addon) {
ok(false, "Should not have seen installs complete");
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_cookies.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_cookies.js
@@ -6,17 +6,17 @@ function test() {
Harness.downloadFailedCallback = download_failed;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_failed(install) {
is(install.error, AddonManager.ERROR_NETWORK_FAILURE, "Install should fail");
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_cookies2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_cookies2.js
@@ -11,17 +11,17 @@ function test() {
.getService(Components.interfaces.nsICookieManager2);
cm.add("example.com", "/browser/" + RELATIVE_DIR, "xpinstall", "true", false,
false, true, (Date.now() / 1000) + 60);
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function install_ended(install, addon) {
install.cancel();
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_cookies3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_cookies3.js
@@ -13,17 +13,17 @@ function test() {
false, true, (Date.now() / 1000) + 60);
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setIntPref("network.cookie.cookieBehavior", 1);
var triggers = encodeURIComponent(JSON.stringify({
- "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Cookie check": TESTROOT + "cookieRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function install_ended(install, addon) {
install.cancel();
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_cookies4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_cookies4.js
@@ -14,17 +14,17 @@ function test() {
false, true, (Date.now() / 1000) + 60);
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setIntPref("network.cookie.cookieBehavior", 1);
var triggers = encodeURIComponent(JSON.stringify({
- "Cookie check": TESTROOT2 + "cookieRedirect.sjs?" + TESTROOT + "unsigned.xpi"
+ "Cookie check": TESTROOT2 + "cookieRedirect.sjs?" + TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_failed(install) {
is(install.error, AddonManager.ERROR_NETWORK_FAILURE, "Install should fail");
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_datauri.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_datauri.js
@@ -13,17 +13,17 @@ function setup_redirect(aSettings) {
}
function test() {
Harness.installOriginBlockedCallback = install_blocked;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
setup_redirect({
- "Location": "data:text/html,<script>window.location.href='" + TESTROOT + "unsigned.xpi'</script>"
+ "Location": "data:text/html,<script>window.location.href='" + TESTROOT + "amosigned.xpi'</script>"
});
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "redirect.sjs?mode=redirect");
}
function install_blocked(installInfo) {
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_enabled3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_enabled3.js
@@ -4,17 +4,17 @@ function test() {
Harness.installDisabledCallback = install_disabled;
Harness.installBlockedCallback = allow_blocked;
Harness.installConfirmCallback = confirm_install;
Harness.setup();
Services.prefs.setBoolPref("xpinstall.enabled", false);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
ContentTask.spawn(gBrowser.selectedBrowser, TESTROOT + "installtrigger.html?" + triggers, url => {
return new Promise(resolve => {
function page_loaded() {
content.removeEventListener("PageLoaded", page_loaded, false);
resolve(content.document.getElementById("return").textContent);
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_hash.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_hash.js
@@ -6,18 +6,18 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
- Hash: "sha1:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f",
+ URL: TESTROOT + "amosigned.xpi",
+ Hash: "sha1:36ffb0acfd9c6e9682473aaebaab394d38b473c9",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function install_ended(install, addon) {
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_hash2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_hash2.js
@@ -6,18 +6,18 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
- Hash: "sha1:3D0DC22E1F394E159B08AAF5F0F97DE4D5C65F4F",
+ URL: TESTROOT + "amosigned.xpi",
+ Hash: "sha1:36FFB0ACFD9C6E9682473AAEBAAB394D38B473C9",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function install_ended(install, addon) {
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash.js
@@ -7,17 +7,17 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
var url = "https://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f|" + TESTROOT + "unsigned.xpi";
+ url += "?sha1:36ffb0acfd9c6e9682473aaebaab394d38b473c9|" + TESTROOT + "amosigned.xpi";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash2.js
@@ -7,17 +7,17 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
var url = "https://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:foobar|" + TESTROOT + "unsigned.xpi";
+ url += "?sha1:foobar|" + TESTROOT + "amosigned.xpi";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash3.js
@@ -6,22 +6,22 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
var url = "https://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:foobar|" + TESTROOT + "unsigned.xpi";
+ url += "?sha1:foobar|" + TESTROOT + "amosigned.xpi";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
- Hash: "sha1:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f",
+ Hash: "sha1:36ffb0acfd9c6e9682473aaebaab394d38b473c9",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function install_ended(install, addon) {
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash4.js
@@ -5,17 +5,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var url = "http://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:foobar|" + TESTROOT + "unsigned.xpi";
+ url += "?sha1:foobar|" + TESTROOT + "amosigned.xpi";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash5.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash5.js
@@ -6,19 +6,19 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
var url = "https://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f|";
+ url += "?sha1:36ffb0acfd9c6e9682473aaebaab394d38b473c9|";
url += "https://example.com/browser/" + RELATIVE_DIR + "hashRedirect.sjs";
- url += "?sha1:foobar|" + TESTROOT + "unsigned.xpi";
+ url += "?sha1:foobar|" + TESTROOT + "amosigned.xpi";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_httphash6.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_httphash6.js
@@ -21,17 +21,17 @@ function test() {
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
// Set up the redirect to give a bad hash
setup_redirect({
"X-Target-Digest": "sha1:foo",
- "Location": "http://example.com/browser/" + RELATIVE_DIR + "unsigned.xpi"
+ "Location": "http://example.com/browser/" + RELATIVE_DIR + "amosigned.xpi"
});
var url = "https://example.com/browser/" + RELATIVE_DIR + "redirect.sjs?mode=redirect";
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
URL: url,
toString: function() { return this.URL; }
@@ -50,18 +50,18 @@ function download_failed(install) {
function finish_failed_download() {
// Setup to track the successful re-download
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
// Give it the right hash this time
setup_redirect({
- "X-Target-Digest": "sha1:3d0dc22e1f394e159b08aaf5f0f97de4d5c65f4f",
- "Location": "http://example.com/browser/" + RELATIVE_DIR + "unsigned.xpi"
+ "X-Target-Digest": "sha1:36ffb0acfd9c6e9682473aaebaab394d38b473c9",
+ "Location": "http://example.com/browser/" + RELATIVE_DIR + "amosigned.xpi"
});
// The harness expects onNewInstall events for all installs that are about to start
Harness.onNewInstall(gInstall);
// Restart the install as a regular webpage install so the harness tracks it
AddonManager.installAddonsFromWebpage("application/x-xpinstall",
gBrowser.selectedBrowser,
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_installchrome.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_installchrome.js
@@ -4,17 +4,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
gBrowser.selectedTab = gBrowser.addTab();
- gBrowser.loadURI(TESTROOT + "installchrome.html? " + encodeURIComponent(TESTROOT + "unsigned.xpi"));
+ gBrowser.loadURI(TESTROOT + "installchrome.html? " + encodeURIComponent(TESTROOT + "amosigned.xpi"));
}
function install_ended(install, addon) {
install.cancel();
}
function finish_test(count) {
is(count, 1, "1 Add-on should have been successfully installed");
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_localfile.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_localfile.js
@@ -6,17 +6,17 @@ function test() {
Harness.setup();
var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
.getService(Components.interfaces.nsIChromeRegistry);
var chromeroot = extractChromeRoot(gTestPath);
var xpipath = chromeroot + "unsigned.xpi";
try {
- xpipath = cr.convertChromeURL(makeURI(chromeroot + "unsigned.xpi")).spec;
+ xpipath = cr.convertChromeURL(makeURI(chromeroot + "amosigned.xpi")).spec;
} catch (ex) {
//scenario where we are running from a .jar and already extracted
}
gBrowser.selectedTab = gBrowser.addTab("about:blank");
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
gBrowser.loadURI(xpipath);
});
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
@@ -3,19 +3,19 @@
// web content
function test() {
waitForExplicitFinish();
var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
.getService(Components.interfaces.nsIChromeRegistry);
var chromeroot = getChromeRoot(gTestPath);
- var xpipath = chromeroot + "unsigned.xpi";
+ var xpipath = chromeroot + "amosigned.xpi";
try {
- xpipath = cr.convertChromeURL(makeURI(chromeroot + "unsigned.xpi")).spec;
+ xpipath = cr.convertChromeURL(makeURI(xpipath)).spec;
} catch (ex) {
//scenario where we are running from a .jar and already extracted
}
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": xpipath
}));
gBrowser.selectedTab = gBrowser.addTab();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_localfile3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_localfile3.js
@@ -8,19 +8,19 @@ function test() {
// Disable direct request whitelisting, installing from file should be blocked.
Services.prefs.setBoolPref("xpinstall.whitelist.directRequest", false);
var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
.getService(Components.interfaces.nsIChromeRegistry);
var chromeroot = extractChromeRoot(gTestPath);
- var xpipath = chromeroot + "unsigned.xpi";
+ var xpipath = chromeroot + "amosigned.xpi";
try {
- xpipath = cr.convertChromeURL(makeURI(chromeroot + "unsigned.xpi")).spec;
+ xpipath = cr.convertChromeURL(makeURI(xpipath)).spec;
} catch (ex) {
//scenario where we are running from a .jar and already extracted
}
gBrowser.selectedTab = gBrowser.addTab("about:blank");
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
gBrowser.loadURI(xpipath);
});
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_localfile4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_localfile4.js
@@ -15,17 +15,17 @@ function test() {
var chromeroot = extractChromeRoot(gTestPath);
var xpipath = chromeroot;
try {
xpipath = cr.convertChromeURL(makeURI(chromeroot)).spec;
} catch (ex) {
//scenario where we are running from a .jar and already extracted
}
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(xpipath + "installtrigger.html?" + triggers);
}
function allow_blocked(installInfo) {
ok(true, "Seen blocked");
return false;
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_multipackage.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_multipackage.js
@@ -28,18 +28,17 @@ function confirm_install(window) {
let item = get_item(items, "XPI Test");
if (item) {
is(item.signed, "false", "Should not have listed the item as signed");
is(item.icon, "", "Should have listed no icon for the item");
}
item = get_item(items, "Signed XPI Test");
if (item) {
- is(item.cert, "(Object Signer)", "Should have seen the signer");
- is(item.signed, "true", "Should have listed the item as signed");
+ is(item.signed, "false", "Should have listed the item as signed");
is(item.icon, "", "Should have listed no icon for the item");
}
return true;
}
function install_ended(install, addon) {
install.cancel();
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway.js
@@ -7,17 +7,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_progress(addon, value, maxValue) {
gBrowser.loadURI(TESTROOT + "enabled.html");
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway2.js
@@ -6,17 +6,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_progress(addon, value, maxValue) {
gBrowser.removeCurrentTab();
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway3.js
@@ -9,17 +9,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_progress(addon, value, maxValue) {
gBrowser.loadURI(TESTROOT2 + "enabled.html");
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway4.js
@@ -8,17 +8,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function confirm_install(window) {
sawUnload = BrowserTestUtils.waitForEvent(window, "unload");
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_offline.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_offline.js
@@ -6,17 +6,17 @@ function test() {
Harness.downloadProgressCallback = download_progress;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function download_progress(addon, value, maxValue) {
try {
// Tests always connect to localhost, and per bug 87717, localhost is now
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_relative.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_relative.js
@@ -7,30 +7,30 @@ function test() {
Harness.finalContentEvent = "InstallComplete";
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: "unsigned.xpi",
+ URL: "amosigned.xpi",
IconURL: "icon.png",
toString: function() { return this.URL; }
}
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function confirm_install(window) {
var items = window.document.getElementById("itemList").childNodes;
is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
is(items[0].name, "XPI Test", "Should have seen the name");
- is(items[0].url, TESTROOT + "unsigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
is(items[0].icon, TESTROOT + "icon.png", "Should have listed the correct icon for the item");
is(items[0].signed, "false", "Should have listed the item as unsigned");
return true;
}
function install_ended(install, addon) {
install.cancel();
}
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_signed_multipackage.js
@@ -0,0 +1,53 @@
+// ----------------------------------------------------------------------------
+// Tests installing an signed add-on by navigating directly to the url
+function test() {
+ Harness.installConfirmCallback = confirm_install;
+ Harness.installEndedCallback = install_ended;
+ Harness.installsCompletedCallback = finish_test;
+ Harness.setup();
+
+ gBrowser.selectedTab = gBrowser.addTab("about:blank");
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
+ gBrowser.loadURI(TESTROOT + "signed-multipackage.xpi");
+ });
+}
+
+function get_item(items, name) {
+ for (let item of items) {
+ if (item.name == name)
+ return item;
+ }
+ ok(false, "Item for " + name + " was not listed");
+ return null;
+}
+
+function confirm_install(window) {
+ let items = window.document.getElementById("itemList").childNodes;
+ is(items.length, 2, "Should be 2 items listed in the confirmation dialog");
+
+ let item = get_item(items, "XPI Test");
+ if (item) {
+ is(item.signed, "false", "Should not have listed the item as signed");
+ is(item.icon, "", "Should have listed no icon for the item");
+ }
+
+ item = get_item(items, "Signed XPI Test");
+ if (item) {
+ is(item.cert, "(Object Signer)", "Should have seen the signer");
+ is(item.signed, "true", "Should have listed the item as signed");
+ is(item.icon, "", "Should have listed no icon for the item");
+ }
+
+ return true;
+}
+
+function install_ended(install, addon) {
+ install.cancel();
+}
+
+function finish_test(count) {
+ is(count, 2, "2 Add-ons should have been successfully installed");
+ gBrowser.removeCurrentTab();
+ Harness.finish();
+}
+// ----------------------------------------------------------------------------
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_softwareupdate.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_softwareupdate.js
@@ -4,17 +4,17 @@ function test() {
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
gBrowser.selectedTab = gBrowser.addTab();
- gBrowser.loadURI(TESTROOT + "startsoftwareupdate.html? " + encodeURIComponent(TESTROOT + "unsigned.xpi"));
+ gBrowser.loadURI(TESTROOT + "startsoftwareupdate.html? " + encodeURIComponent(TESTROOT + "amosigned.xpi"));
}
function install_ended(install, addon) {
install.cancel();
}
function finish_test(count) {
is(count, 1, "1 Add-on should have been successfully installed");
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_switchtab.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_switchtab.js
@@ -9,30 +9,30 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
+ URL: TESTROOT + "amosigned.xpi",
IconURL: TESTROOT + "icon.png",
toString: function() { return this.URL; }
}
}));
expectedTab = gBrowser.addTab();
expectedTab.linkedBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function confirm_install(window) {
var items = window.document.getElementById("itemList").childNodes;
is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
is(items[0].name, "XPI Test", "Should have seen the name");
- is(items[0].url, TESTROOT + "unsigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
is(items[0].icon, TESTROOT + "icon.png", "Should have listed the correct icon for the item");
is(items[0].signed, "false", "Should have listed the item as unsigned");
is(gBrowser.selectedTab, expectedTab, "Should have switched to the installing tab.");
return true;
}
function install_ended(install, addon) {
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_trigger_redirect.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_trigger_redirect.js
@@ -13,17 +13,17 @@ function test() {
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "triggerredirect.html");
}
function confirm_install(window) {
var items = window.document.getElementById("itemList").childNodes;
is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
is(items[0].name, "XPI Test", "Should have seen the name");
- is(items[0].url, TESTROOT + "unsigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
is(items[0].icon, TESTROOT + "icon.png", "Should have listed the correct icon for the item");
is(items[0].signed, "false", "Should have listed the item as unsigned");
return true;
}
function install_ended(install, addon) {
install.cancel();
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_unsigned_trigger_xorigin.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_unsigned_trigger_xorigin.js
@@ -9,17 +9,17 @@ function test() {
Harness.finalContentEvent = "InstallComplete";
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
var inner_url = encodeURIComponent(TESTROOT + "installtrigger.html?" + encodeURIComponent(JSON.stringify({
"Unsigned XPI": {
- URL: TESTROOT + "unsigned.xpi",
+ URL: TESTROOT + "amosigned.xpi",
IconURL: TESTROOT + "icon.png",
toString: function() { return this.URL; }
}
})));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT2 + "installtrigger_frame.html?" + inner_url);
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist.js
@@ -5,33 +5,33 @@
function test() {
Harness.installConfirmCallback = confirm_install;
Harness.installBlockedCallback = allow_blocked;
Harness.installEndedCallback = install_ended;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function allow_blocked(installInfo) {
is(installInfo.browser, gBrowser.selectedBrowser, "Install should have been triggered by the right browser");
is(installInfo.originatingURI.spec, gBrowser.currentURI.spec, "Install should have been triggered by the right uri");
return true;
}
function confirm_install(window) {
var items = window.document.getElementById("itemList").childNodes;
is(items.length, 1, "Should only be 1 item listed in the confirmation dialog");
is(items[0].name, "XPI Test", "Should have seen the name from the trigger list");
- is(items[0].url, TESTROOT + "unsigned.xpi", "Should have listed the correct url for the item");
+ is(items[0].url, TESTROOT + "amosigned.xpi", "Should have listed the correct url for the item");
is(items[0].signed, "false", "Should have listed the item as unsigned");
return true;
}
function install_ended(install, addon) {
install.cancel();
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist2.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist2.js
@@ -6,17 +6,17 @@ function test() {
Harness.installBlockedCallback = allow_blocked;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.org/"), "install", pm.ALLOW_ACTION);
var triggers = encodeURIComponent(JSON.stringify({
- "Unsigned XPI": TESTROOT2 + "unsigned.xpi"
+ "Unsigned XPI": TESTROOT2 + "amosigned.xpi"
}));
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.loadURI(TESTROOT + "installtrigger.html?" + triggers);
}
function allow_blocked(installInfo) {
is(installInfo.browser, gBrowser.selectedBrowser, "Install should have been triggered by the right browser");
is(installInfo.originatingURI.spec, gBrowser.currentURI.spec, "Install should have been triggered by the right uri");
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist3.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist3.js
@@ -1,12 +1,12 @@
// ----------------------------------------------------------------------------
// Tests installing an unsigned add-on through a navigation. Should not be
// blocked since the referer is whitelisted.
-var url = TESTROOT2 + "navigate.html?" + encodeURIComponent(TESTROOT + "unsigned.xpi");
+var url = TESTROOT2 + "navigate.html?" + encodeURIComponent(TESTROOT + "amosigned.xpi");
function test() {
Harness.installConfirmCallback = confirm_install;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.org/"), "install", pm.ALLOW_ACTION);
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist4.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist4.js
@@ -1,12 +1,12 @@
// ----------------------------------------------------------------------------
// Tests installing an unsigned add-on through a navigation. Should be
// blocked since the referer is not whitelisted even though the target is.
-var url = TESTROOT2 + "navigate.html?" + encodeURIComponent(TESTROOT + "unsigned.xpi");
+var url = TESTROOT2 + "navigate.html?" + encodeURIComponent(TESTROOT + "amosigned.xpi");
function test() {
Harness.installBlockedCallback = allow_blocked;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
var pm = Services.perms;
pm.add(makeURI("http://example.com/"), "install", pm.ALLOW_ACTION);
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist5.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist5.js
@@ -3,17 +3,17 @@
// content. This should be blocked by the whitelist check.
// This verifies bug 252830
function test() {
Harness.installBlockedCallback = allow_blocked;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
gBrowser.selectedTab = gBrowser.addTab();
- gBrowser.loadURI(TESTROOT + "startsoftwareupdate.html? " + encodeURIComponent(TESTROOT + "unsigned.xpi"));
+ gBrowser.loadURI(TESTROOT + "startsoftwareupdate.html? " + encodeURIComponent(TESTROOT + "amosigned.xpi"));
}
function allow_blocked(installInfo) {
is(installInfo.browser, gBrowser.selectedBrowser, "Install should have been triggered by the right browser");
is(installInfo.originatingURI.spec, gBrowser.currentURI.spec, "Install should have been triggered by the right uri");
return false;
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist6.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist6.js
@@ -3,17 +3,17 @@
// content. This should be blocked by the whitelist check.
// This verifies bug 252830
function test() {
Harness.installBlockedCallback = allow_blocked;
Harness.installsCompletedCallback = finish_test;
Harness.setup();
gBrowser.selectedTab = gBrowser.addTab();
- gBrowser.loadURI(TESTROOT + "installchrome.html? " + encodeURIComponent(TESTROOT + "unsigned.xpi"));
+ gBrowser.loadURI(TESTROOT + "installchrome.html? " + encodeURIComponent(TESTROOT + "amosigned.xpi"));
}
function allow_blocked(installInfo) {
is(installInfo.browser, gBrowser.selectedBrowser, "Install should have been triggered by the right browser");
is(installInfo.originatingURI.spec, gBrowser.currentURI.spec, "Install should have been triggered by the right uri");
return false;
}
--- a/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist7.js
+++ b/toolkit/mozapps/extensions/test/xpinstall/browser_whitelist7.js
@@ -7,17 +7,17 @@ function test() {
Harness.installsCompletedCallback = finish_test;
Harness.setup();
// Disable direct request whitelisting, installing should be blocked.
Services.prefs.setBoolPref("xpinstall.whitelist.directRequest", false);
gBrowser.selectedTab = gBrowser.addTab("about:blank");
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
- gBrowser.loadURI(TESTROOT + "unsigned.xpi");
+ gBrowser.loadURI(TESTROOT + "amosigned.xpi");
});
}
function allow_blocked(installInfo) {
ok(true, "Seen blocked");
return false;
}
--- a/toolkit/mozapps/extensions/test/xpinstall/bug540558.html
+++ b/toolkit/mozapps/extensions/test/xpinstall/bug540558.html
@@ -5,17 +5,17 @@
<!-- This page tests that window.InstallTrigger.install works -->
<head>
<title>InstallTrigger tests</title>
<script type="text/javascript">
function startInstall() {
window.InstallTrigger.install({
- "Unsigned XPI": "unsigned.xpi"
+ "Unsigned XPI": "amosigned.xpi"
});
}
</script>
</head>
<body onload="startInstall()">
<p>InstallTrigger tests</p>
<p id="return"></p>
<p id="status"></p>
--- a/toolkit/mozapps/extensions/test/xpinstall/bug645699.html
+++ b/toolkit/mozapps/extensions/test/xpinstall/bug645699.html
@@ -15,17 +15,17 @@ function startInstall() {
throw new Error("Object.defineProperty(window, 'location', ...) should have thrown");
} catch (exc) {
if (!(exc instanceof TypeError))
throw exc;
}
Object.defineProperty(document, "documentURIObject", { spec : { href : whiteUrl } });
InstallTrigger.install({
- "Unsigned XPI": "http://example.com/browser/toolkit/mozapps/extensions/test/xpinstall/unsigned.xpi"
+ "Unsigned XPI": "http://example.com/browser/toolkit/mozapps/extensions/test/xpinstall/amosigned.xpi"
});
}
</script>
</head>
<body onload="startInstall()">
<p>InstallTrigger tests</p>
</body>
</html>
--- a/toolkit/mozapps/extensions/test/xpinstall/concurrent_installs.html
+++ b/toolkit/mozapps/extensions/test/xpinstall/concurrent_installs.html
@@ -14,17 +14,17 @@ function installCallback(url, status) {
dump("Sending InstallComplete\n");
var event = new CustomEvent("InstallComplete", {detail: {loc: location.href, xpi: url}});
window.dispatchEvent(event);
}
function startInstall() {
var root = location.href.replace("concurrent_installs.html", "");
var triggers = {
- "Unsigned XPI": root + "unsigned.xpi"
+ "Unsigned XPI": root + "amosigned.xpi"
};
try {
document.getElementById("return").textContent = InstallTrigger.install(triggers, installCallback);
}
catch (e) {
document.getElementById("return").textContent = "exception";
throw e;
}
index 11fbe1861a3775fbe2383cbdb8d3a04b6ffed9b1..d52f28c2872c9b3ff612cdcc436e65618a3b5c68
GIT binary patch
literal 9589
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
new file mode 100644
index 0000000000000000000000000000000000000000..11fbe1861a3775fbe2383cbdb8d3a04b6ffed9b1
GIT binary patch
literal 2976
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
--- a/toolkit/mozapps/extensions/test/xpinstall/triggerredirect.html
+++ b/toolkit/mozapps/extensions/test/xpinstall/triggerredirect.html
@@ -15,17 +15,17 @@ function installCallback(url, status) {
dump("Sending InstallComplete\n");
var event = new CustomEvent("InstallComplete");
window.dispatchEvent(event);
}
function startInstall() {
InstallTrigger.install({
"Unsigned XPI": {
- URL: "unsigned.xpi",
+ URL: "amosigned.xpi",
IconURL: "icon.png",
toString: function() { return this.URL; }
}
}, installCallback);
}
</script>
</head>
<body onload="startInstall()">