mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 13:21:28 +00:00
Bug 1194784: Sideloaded add-ons without full signing don't display an appropriate warning in the add-ons manager. r=dao
--HG-- extra : commitid : 10VQvgDJsbv extra : rebase_source : 9a2ea211db29e335a37ddf824bd18776d62cbeca
This commit is contained in:
parent
1763463649
commit
0cf2a7c5c2
@ -199,6 +199,14 @@ function loadView(aViewId) {
|
||||
}
|
||||
}
|
||||
|
||||
function isCorrectlySigned(aAddon) {
|
||||
if (aAddon.signedState <= AddonManager.SIGNEDSTATE_MISSING)
|
||||
return false;
|
||||
if (aAddon.foreignInstall && aAddon.signedState < AddonManager.SIGNEDSTATE_SIGNED)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function isDiscoverEnabled() {
|
||||
if (Services.prefs.getPrefType(PREF_DISCOVERURL) == Services.prefs.PREF_INVALID)
|
||||
return false;
|
||||
@ -2704,13 +2712,13 @@ var gListView = {
|
||||
filterDisabledUnsigned: function gListView_filterDisabledUnsigned(aFilter = true) {
|
||||
let foundDisabledUnsigned = false;
|
||||
|
||||
for (let item of this._listBox.childNodes) {
|
||||
let isDisabledUnsigned = item.mAddon.appDisabled &&
|
||||
item.mAddon.signedState <= AddonManager.SIGNEDSTATE_MISSING;
|
||||
if (isDisabledUnsigned)
|
||||
foundDisabledUnsigned = true;
|
||||
else
|
||||
item.hidden = aFilter;
|
||||
if (SIGNING_REQUIRED) {
|
||||
for (let item of this._listBox.childNodes) {
|
||||
if (!isCorrectlySigned(item.mAddon))
|
||||
foundDisabledUnsigned = true;
|
||||
else
|
||||
item.hidden = aFilter;
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById("show-disabled-unsigned-extensions").hidden =
|
||||
@ -3158,7 +3166,7 @@ var gDetailView = {
|
||||
errorLink.value = gStrings.ext.GetStringFromName("details.notification.blocked.link");
|
||||
errorLink.href = this._addon.blocklistURL;
|
||||
errorLink.hidden = false;
|
||||
} else if (this._addon.signedState <= AddonManager.SIGNEDSTATE_MISSING && SIGNING_REQUIRED) {
|
||||
} else if (!isCorrectlySigned(this._addon) && SIGNING_REQUIRED) {
|
||||
this.node.setAttribute("notification", "error");
|
||||
document.getElementById("detail-error").textContent = gStrings.ext.formatStringFromName(
|
||||
"details.notification.unsignedAndDisabled", [this._addon.name, gStrings.brandShortName], 2
|
||||
@ -3175,7 +3183,7 @@ var gDetailView = {
|
||||
[this._addon.name, gStrings.brandShortName, gStrings.appVersion], 3
|
||||
);
|
||||
document.getElementById("detail-warning-link").hidden = true;
|
||||
} else if (this._addon.signedState <= AddonManager.SIGNEDSTATE_MISSING) {
|
||||
} else if (!isCorrectlySigned(this._addon)) {
|
||||
this.node.setAttribute("notification", "warning");
|
||||
document.getElementById("detail-warning").textContent = gStrings.ext.formatStringFromName(
|
||||
"details.notification.unsigned", [this._addon.name, gStrings.brandShortName], 2
|
||||
|
@ -1238,9 +1238,7 @@
|
||||
this._errorLink.value = gStrings.ext.GetStringFromName("notification.blocked.link");
|
||||
this._errorLink.href = this.mAddon.blocklistURL;
|
||||
this._errorLink.hidden = false;
|
||||
} else if (!isUpgrade &&
|
||||
this.mAddon.signedState <= AddonManager.SIGNEDSTATE_MISSING &&
|
||||
SIGNING_REQUIRED) {
|
||||
} else if (!isUpgrade && !isCorrectlySigned(this.mAddon) && SIGNING_REQUIRED) {
|
||||
this.setAttribute("notification", "error");
|
||||
this._error.textContent = gStrings.ext.formatStringFromName(
|
||||
"notification.unsignedAndDisabled", [this.mAddon.name, gStrings.brandShortName], 2
|
||||
@ -1257,8 +1255,7 @@
|
||||
);
|
||||
this._warningLink.hidden = true;
|
||||
this._warningBtn.hidden = true;
|
||||
} else if (!isUpgrade &&
|
||||
this.mAddon.signedState <= AddonManager.SIGNEDSTATE_MISSING) {
|
||||
} else if (!isUpgrade && !isCorrectlySigned(this.mAddon)) {
|
||||
this.setAttribute("notification", "warning");
|
||||
this._warning.textContent = gStrings.ext.formatStringFromName(
|
||||
"notification.unsigned", [this.mAddon.name, gStrings.brandShortName], 2
|
||||
|
@ -155,6 +155,19 @@ function test() {
|
||||
isActive: false,
|
||||
appDisabled: true,
|
||||
isCompatible: false,
|
||||
}, {
|
||||
id: "addon11@tests.mozilla.org",
|
||||
name: "Test add-on 11",
|
||||
signedState: AddonManager.SIGNEDSTATE_PRELIMINARY,
|
||||
foreignInstall: true,
|
||||
isActive: false,
|
||||
appDisabled: true,
|
||||
isCompatible: false,
|
||||
}, {
|
||||
id: "addon12@tests.mozilla.org",
|
||||
name: "Test add-on 12",
|
||||
signedState: AddonManager.SIGNEDSTATE_SIGNED,
|
||||
foreignInstall: true,
|
||||
}, {
|
||||
id: "hotfix@tests.mozilla.org",
|
||||
name: "Test hotfix 1",
|
||||
@ -818,6 +831,120 @@ add_test(function() {
|
||||
});
|
||||
});
|
||||
|
||||
// Opens and tests the details view for add-on 11
|
||||
add_test(function() {
|
||||
open_details("addon11@tests.mozilla.org", "extension", function() {
|
||||
is(get("detail-name").textContent, "Test add-on 11", "Name should be correct");
|
||||
|
||||
is_element_hidden(get("detail-prefs-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get("detail-enable-btn"), "Enable button should be hidden");
|
||||
is_element_hidden(get("detail-disable-btn"), "Disable button should be hidden");
|
||||
is_element_visible(get("detail-uninstall-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_visible(get("detail-warning"), "Warning message should be visible");
|
||||
is(get("detail-warning").textContent, "Test add-on 11 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct");
|
||||
is_element_hidden(get("detail-warning-link"), "Warning link should be hidden");
|
||||
is_element_hidden(get("detail-error"), "Error message should be hidden");
|
||||
is_element_hidden(get("detail-error-link"), "Error link should be hidden");
|
||||
is_element_hidden(get("detail-pending"), "Pending message should be hidden");
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
|
||||
// Opens and tests the details view for add-on 11 with signing required
|
||||
add_test(function() {
|
||||
close_manager(gManagerWindow, function() {
|
||||
Services.prefs.setBoolPref("xpinstall.signatures.required", true);
|
||||
open_manager(null, function(aWindow) {
|
||||
gManagerWindow = aWindow;
|
||||
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
|
||||
|
||||
open_details("addon11@tests.mozilla.org", "extension", function() {
|
||||
is(get("detail-name").textContent, "Test add-on 11", "Name should be correct");
|
||||
|
||||
is_element_hidden(get("detail-prefs-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get("detail-enable-btn"), "Enable button should be hidden");
|
||||
is_element_hidden(get("detail-disable-btn"), "Disable button should be hidden");
|
||||
is_element_visible(get("detail-uninstall-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_hidden(get("detail-warning"), "Warning message should be hidden");
|
||||
is_element_hidden(get("detail-warning-link"), "Warning link should be hidden");
|
||||
is_element_visible(get("detail-error"), "Error message should be visible");
|
||||
is(get("detail-error").textContent, "Test add-on 11 could not be verified for use in " + gApp + " and has been disabled.", "Error message should be correct");
|
||||
is_element_visible(get("detail-error-link"), "Error link should be visible");
|
||||
is(get("detail-error-link").value, "More Information", "Error link text should be correct");
|
||||
is(get("detail-error-link").href, infoURL, "Error link should be correct");
|
||||
|
||||
close_manager(gManagerWindow, function() {
|
||||
Services.prefs.setBoolPref("xpinstall.signatures.required", false);
|
||||
open_manager(null, function(aWindow) {
|
||||
gManagerWindow = aWindow;
|
||||
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Opens and tests the details view for add-on 12
|
||||
add_test(function() {
|
||||
open_details("addon12@tests.mozilla.org", "extension", function() {
|
||||
is(get("detail-name").textContent, "Test add-on 12", "Name should be correct");
|
||||
|
||||
is_element_hidden(get("detail-prefs-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get("detail-enable-btn"), "Enable button should be hidden");
|
||||
is_element_visible(get("detail-disable-btn"), "Disable button should be visible");
|
||||
is_element_visible(get("detail-uninstall-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_hidden(get("detail-warning"), "Warning message should be hidden");
|
||||
is_element_hidden(get("detail-warning-link"), "Warning link should be hidden");
|
||||
is_element_hidden(get("detail-error"), "Error message should be hidden");
|
||||
is_element_hidden(get("detail-error-link"), "Error link should be hidden");
|
||||
is_element_hidden(get("detail-pending"), "Pending message should be hidden");
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
|
||||
// Opens and tests the details view for add-on 12 with signing required
|
||||
add_test(function() {
|
||||
close_manager(gManagerWindow, function() {
|
||||
Services.prefs.setBoolPref("xpinstall.signatures.required", true);
|
||||
open_manager(null, function(aWindow) {
|
||||
gManagerWindow = aWindow;
|
||||
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
|
||||
|
||||
open_details("addon12@tests.mozilla.org", "extension", function() {
|
||||
is(get("detail-name").textContent, "Test add-on 12", "Name should be correct");
|
||||
|
||||
is_element_hidden(get("detail-prefs-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get("detail-enable-btn"), "Enable button should be hidden");
|
||||
is_element_visible(get("detail-disable-btn"), "Disable button should be visible");
|
||||
is_element_visible(get("detail-uninstall-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_hidden(get("detail-warning"), "Warning message should be hidden");
|
||||
is_element_hidden(get("detail-warning-link"), "Warning link should be hidden");
|
||||
is_element_hidden(get("detail-error"), "Error message should be hidden");
|
||||
is_element_hidden(get("detail-error-link"), "Error link should be hidden");
|
||||
|
||||
close_manager(gManagerWindow, function() {
|
||||
Services.prefs.setBoolPref("xpinstall.signatures.required", false);
|
||||
open_manager(null, function(aWindow) {
|
||||
gManagerWindow = aWindow;
|
||||
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Opens and tests the details view for hotfix 1
|
||||
add_test(function() {
|
||||
open_details("hotfix@tests.mozilla.org", "extension", function() {
|
||||
|
@ -19,6 +19,8 @@ var gPluginURL = Services.urlFormatter.formatURLPref("plugins.update.url");
|
||||
var gDate = new Date(2010, 7, 16);
|
||||
let infoURL = Services.urlFormatter.formatURLPref("app.support.baseURL") + "unsigned-addons";
|
||||
|
||||
const EXPECTED_ADDONS = 13;
|
||||
|
||||
var gLWTheme = {
|
||||
id: "4",
|
||||
version: "1",
|
||||
@ -104,6 +106,18 @@ add_task(function*() {
|
||||
isActive: false,
|
||||
isCompatible: false,
|
||||
appDisabled: true,
|
||||
}, {
|
||||
id: "addon12@tests.mozilla.org",
|
||||
name: "Test add-on 12",
|
||||
signedState: AddonManager.SIGNEDSTATE_PRELIMINARY,
|
||||
isActive: false,
|
||||
appDisabled: true,
|
||||
foreignInstall: true,
|
||||
}, {
|
||||
id: "addon13@tests.mozilla.org",
|
||||
name: "Test add-on 13",
|
||||
signedState: AddonManager.SIGNEDSTATE_SIGNED,
|
||||
foreignInstall: true,
|
||||
}]);
|
||||
|
||||
gManagerWindow = yield open_manager(null);
|
||||
@ -139,7 +153,7 @@ function get_class_node(parent, cls) {
|
||||
add_task(function*() {
|
||||
yield gCategoryUtilities.openType("extension");
|
||||
let items = get_test_items();
|
||||
is(Object.keys(items).length, 11, "Should be the right number of add-ons installed");
|
||||
is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed");
|
||||
|
||||
info("Addon 1");
|
||||
let addon = items["Test add-on"];
|
||||
@ -442,35 +456,13 @@ add_task(function*() {
|
||||
is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
|
||||
is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
|
||||
|
||||
info("Filter for disabled unsigned extensions");
|
||||
info("Filter for disabled unsigned extensions shouldn't appear because signing checks are off");
|
||||
let filterButton = gManagerWindow.document.getElementById("show-disabled-unsigned-extensions");
|
||||
let showAllButton = gManagerWindow.document.getElementById("show-all-extensions");
|
||||
let signingInfoUI = gManagerWindow.document.getElementById("disabled-unsigned-addons-info");
|
||||
is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible");
|
||||
is_element_hidden(filterButton, "Button for showing disabled unsigned extensions should be hidden");
|
||||
is_element_hidden(showAllButton, "Button for showing all extensions should be hidden");
|
||||
is_element_hidden(signingInfoUI, "Signing info UI should be hidden");
|
||||
|
||||
filterButton.click();
|
||||
|
||||
yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve));
|
||||
|
||||
is_element_hidden(filterButton, "Button for showing disabled unsigned extensions should be hidden");
|
||||
is_element_visible(showAllButton, "Button for showing all extensions should be visible");
|
||||
is_element_visible(signingInfoUI, "Signing info UI should be visible");
|
||||
|
||||
items = get_test_items();
|
||||
is(Object.keys(items).length, 1, "Only one add-on should be shown");
|
||||
is(Object.keys(items)[0], "Test add-on 11", "The disabled unsigned extension should be shown");
|
||||
|
||||
showAllButton.click();
|
||||
|
||||
yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve));
|
||||
|
||||
items = get_test_items();
|
||||
is(Object.keys(items).length, 11, "All add-ons should be shown again");
|
||||
is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible again");
|
||||
is_element_hidden(showAllButton, "Button for showing all extensions should be hidden again");
|
||||
is_element_hidden(signingInfoUI, "Signing info UI should be hidden again");
|
||||
});
|
||||
|
||||
// Check the add-ons are now in the right state
|
||||
@ -492,7 +484,7 @@ add_task(function*() {
|
||||
yield gCategoryUtilities.openType("extension");
|
||||
|
||||
let items = get_test_items();
|
||||
is(Object.keys(items).length, 11, "Should be the right number of add-ons installed");
|
||||
is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed");
|
||||
|
||||
info("Addon 1");
|
||||
let addon = items["Test add-on"];
|
||||
@ -697,7 +689,7 @@ add_task(function*() {
|
||||
}]);
|
||||
|
||||
let items = get_test_items();
|
||||
is(Object.keys(items).length, 11, "Should be the right number of add-ons installed");
|
||||
is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed");
|
||||
|
||||
let addon = items["Test add-on replacement"];
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
@ -745,6 +737,7 @@ add_task(function*() {
|
||||
getService(Ci.nsIFocusManager);
|
||||
|
||||
let addon = items["Test add-on 6"];
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow);
|
||||
is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list");
|
||||
|
||||
@ -840,7 +833,7 @@ add_task(function*() {
|
||||
|
||||
yield gCategoryUtilities.openType("extension");
|
||||
let items = get_test_items();
|
||||
is(Object.keys(items).length, 11, "Should be the right number of add-ons installed");
|
||||
is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed");
|
||||
|
||||
info("Addon 10");
|
||||
let addon = items["Test add-on 10"];
|
||||
@ -882,6 +875,74 @@ add_task(function*() {
|
||||
is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
|
||||
is(get_node(addon, "error-link").href, infoURL, "Error link should be correct");
|
||||
|
||||
info("Addon 12");
|
||||
addon = items["Test add-on 12"];
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
({ name, version } = yield get_tooltip_info(addon))
|
||||
is(get_node(addon, "name").value, "Test add-on 12", "Name should be correct");
|
||||
is(name, "Test add-on 12", "Tooltip name should be correct");
|
||||
|
||||
is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
|
||||
is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
|
||||
is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
|
||||
is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
|
||||
is_element_visible(get_node(addon, "error"), "Error message should be visible");
|
||||
is(get_node(addon, "error").textContent, "Test add-on 12 could not be verified for use in " + gApp + " and has been disabled.", "Error message should be correct");
|
||||
is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
|
||||
is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
|
||||
is(get_node(addon, "error-link").href, infoURL, "Error link should be correct");
|
||||
|
||||
info("Addon 13");
|
||||
addon = items["Test add-on 13"];
|
||||
addon.parentNode.ensureElementIsVisible(addon);
|
||||
({ name, version } = yield get_tooltip_info(addon));
|
||||
is(get_node(addon, "name").value, "Test add-on 13", "Name should be correct");
|
||||
is(name, "Test add-on 13", "Tooltip name should be correct");
|
||||
|
||||
is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
|
||||
is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
|
||||
is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
|
||||
is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
|
||||
|
||||
is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
|
||||
is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
|
||||
is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
|
||||
|
||||
info("Filter for disabled unsigned extensions");
|
||||
let filterButton = gManagerWindow.document.getElementById("show-disabled-unsigned-extensions");
|
||||
let showAllButton = gManagerWindow.document.getElementById("show-all-extensions");
|
||||
let signingInfoUI = gManagerWindow.document.getElementById("disabled-unsigned-addons-info");
|
||||
is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible");
|
||||
is_element_hidden(showAllButton, "Button for showing all extensions should be hidden");
|
||||
is_element_hidden(signingInfoUI, "Signing info UI should be hidden");
|
||||
|
||||
filterButton.click();
|
||||
|
||||
yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve));
|
||||
|
||||
is_element_hidden(filterButton, "Button for showing disabled unsigned extensions should be hidden");
|
||||
is_element_visible(showAllButton, "Button for showing all extensions should be visible");
|
||||
is_element_visible(signingInfoUI, "Signing info UI should be visible");
|
||||
|
||||
items = get_test_items();
|
||||
is(Object.keys(items).length, 3, "Two add-ons should be shown");
|
||||
is(Object.keys(items)[0], "Test add-on 10", "The disabled unsigned extension should be shown");
|
||||
is(Object.keys(items)[1], "Test add-on 11", "The disabled unsigned extension should be shown");
|
||||
is(Object.keys(items)[2], "Test add-on 12", "The disabled foreign installed extension should be shown");
|
||||
|
||||
showAllButton.click();
|
||||
|
||||
yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve));
|
||||
|
||||
items = get_test_items();
|
||||
is(Object.keys(items).length, EXPECTED_ADDONS, "All add-ons should be shown again");
|
||||
is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible again");
|
||||
is_element_hidden(showAllButton, "Button for showing all extensions should be hidden again");
|
||||
is_element_hidden(signingInfoUI, "Signing info UI should be hidden again");
|
||||
|
||||
Services.prefs.setBoolPref("xpinstall.signatures.required", false);
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user