Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
// Changes, then verifies the value of app.update.auto via the about:preferences
// UI. Requires a tab with about:preferences open to be passed in.
async function changeAndVerifyPref(tab, newConfigValue) {
await SpecialPowers.spawn(
tab.linkedBrowser,
[{ newConfigValue }],
async function ({ newConfigValue }) {
let radioId = newConfigValue ? "autoDesktop" : "manualDesktop";
let radioElement = content.document.getElementById(radioId);
let updateRadioGroup = radioElement.radioGroup;
let promise = ContentTaskUtils.waitForEvent(
updateRadioGroup,
"ProcessedUpdatePrefChange"
);
radioElement.click();
await promise;
is(
updateRadioGroup.value,
`${newConfigValue}`,
"Update preference should match expected"
);
is(
updateRadioGroup.disabled,
false,
"Update preferences should no longer be disabled"
);
}
);
let configValueRead = await UpdateUtils.getAppUpdateAutoEnabled();
is(
configValueRead,
newConfigValue,
"Value returned should have matched the expected value"
);
}
async function changeAndVerifyUpdateWrites({
tab,
newConfigValue,
discardUpdate,
expectPrompt,
expectRemainingUpdate,
}) {
// A value of 1 will keep the update and a value of 0 will discard the update
// when the prompt service is called when the value of app.update.auto is
// changed to false.
let confirmExReply = discardUpdate ? 0 : 1;
let didPrompt = false;
let promptService = {
QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]),
confirmEx(...args) {
promptService._confirmExArgs = args;
didPrompt = true;
return confirmExReply;
},
};
Services.prompt = promptService;
await changeAndVerifyPref(tab, newConfigValue);
is(
didPrompt,
expectPrompt,
`We should ${expectPrompt ? "" : "not "}be prompted`
);
is(
!!gUpdateManager.readyUpdate,
expectRemainingUpdate,
`There should ${expectRemainingUpdate ? "" : "not "}be a ready update`
);
}
add_task(async function testUpdateAutoPrefUI() {
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:preferences"
);
// Hack: make the test run faster:
await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
content.gMainPane._minUpdatePrefDisableTime = 10;
});
info("Enable automatic updates and check that works.");
await changeAndVerifyPref(tab, true);
ok(
!gUpdateManager.downloadingUpdate,
"There should not be a downloading update"
);
ok(!gUpdateManager.readyUpdate, "There should not be a ready update");
info("Disable automatic updates and check that works.");
await changeAndVerifyPref(tab, false);
ok(
!gUpdateManager.downloadingUpdate,
"There should not be a downloading update"
);
ok(!gUpdateManager.readyUpdate, "There should not be a ready update");
let patchProps = { state: STATE_PENDING };
let patches = getLocalPatchString(patchProps);
let updateProps = { checkInterval: "1" };
let updates = getLocalUpdateString(updateProps, patches);
writeUpdatesToXMLFile(getLocalUpdatesXMLString(updates), true);
writeStatusFile(STATE_PENDING);
reloadUpdateManagerData();
ok(!!gUpdateManager.readyUpdate, "There should be a ready update");
let { prompt } = Services;
registerCleanupFunction(() => {
Services.prompt = prompt;
});
// Setting the value to false will call the prompt service and when we
// don't discard the update there should still be an active update afterwards.
await changeAndVerifyUpdateWrites({
tab,
newConfigValue: false,
discardUpdate: false,
expectPrompt: true,
expectRemainingUpdate: true,
});
// Setting the value to true should not call the prompt service so there
// should still be an active update, even if we indicate we can discard
// the update in a hypothetical prompt.
await changeAndVerifyUpdateWrites({
tab,
newConfigValue: true,
discardUpdate: true,
expectPrompt: false,
expectRemainingUpdate: true,
});
// Setting the value to false will call the prompt service, and we do
// discard the update, so there should not be an active update.
await changeAndVerifyUpdateWrites({
tab,
newConfigValue: false,
discardUpdate: true,
expectPrompt: true,
expectRemainingUpdate: false,
});
await BrowserTestUtils.removeTab(tab);
});