Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'win' && (ccov || msix) OR socketprocess_networking OR appname != 'firefox'
- Manifest: toolkit/mozapps/update/tests/unit_aus_update/xpcshell.toml
/* 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
*/
/**
* This tests that MAR update network requests include extras --
* headers and query parameters -- identifying whether the request
* comes from a browsing Firefox or from a background task (the
* background update task).
*
* This test does some unusual things, compared to the other files in this
* directory. We want to start the updates with aus.checkForBackgroundUpdates()
* to ensure that we witness update XML requests (which should not have the
* additional headers). Other tests start update with things like
* aus.downloadUpdate().
*
* Just like `multiUpdate.js`, in order to accomplish all this, we will be using
* app_update.sjs to serve updates XMLs and MARs. Outside of this test, this is
* really only done by browser-chrome mochitests (in ../browser). So we have to
* do some weird things to make it work properly in an xpcshell test. Things
* like defining URL_HTTP_UPDATE_SJS in testConstants.js so that it can be read
* by app_update.sjs in order to provide the correct download URL for MARs, but
* not reading that file here, because URL_HTTP_UPDATE_SJS is already defined
* (as something else) in xpcshellUtilsAUS.js.
*/
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
);
const downloadHeaders = new DownloadHeadersTest();
function setup_enterprise_policy_testing() {
// This initializes the policy engine for xpcshell tests
let policies = Cc["@mozilla.org/enterprisepolicies;1"].getService(
Ci.nsIObserver
);
policies.observe(null, "policies-startup", null);
}
async function setupPolicyEngineWithJson(json, customSchema) {
if (typeof json != "object") {
let filePath = do_get_file(json ? json : "non-existing-file.json").path;
return EnterprisePolicyTesting.setupPolicyEngineWithJson(
filePath,
customSchema
);
}
return EnterprisePolicyTesting.setupPolicyEngineWithJson(json, customSchema);
}
add_setup(async () => {
setupTestCommon(true, /* aAllowBits */ false);
setup_enterprise_policy_testing();
downloadHeaders.startUpdateServer();
});
add_task(async function test_noTask_noBITS() {
await downloadHeaders.test({
useBits: false,
backgroundTaskName: null,
userAgentPattern: /\sGecko\//,
expectedExtras: [
{ mode: null, name: null },
{ mode: "0", name: null },
],
});
});
const canTask = {
skip_if: () => !AppConstants.MOZ_BACKGROUNDTASKS,
};
add_task(canTask, async function test_task_noBITS() {
await downloadHeaders.test({
useBits: false,
backgroundTaskName: "task_downloadHeaders",
userAgentPattern: /\sGecko\//,
expectedExtras: [
{ mode: null, name: null },
{ mode: "1", name: "task_downloadHeaders" },
],
});
});
const canBits = {
skip_if: () => {
// Need to enable the pref to accurately test for BITS.
Services.prefs.setBoolPref(PREF_APP_UPDATE_BITS_ENABLED, true);
return !gAUS.canUsuallyUseBits;
},
};
add_task(canBits, async function test_noTask_BITS() {
await downloadHeaders.test({
useBits: true,
backgroundTaskName: null,
userAgentPattern: /^Microsoft BITS\//,
expectedExtras: [
{ mode: null, name: null },
{ mode: "0", name: null },
],
});
});
const canTaskBits = {
skip_if: () => {
// Need to enable the pref to accurately test for BITS.
Services.prefs.setBoolPref(PREF_APP_UPDATE_BITS_ENABLED, true);
return !AppConstants.MOZ_BACKGROUNDTASKS || !gAUS.canUsuallyUseBits;
},
};
add_task(canTaskBits, async function test_task_BITS() {
await downloadHeaders.test({
useBits: true,
backgroundTaskName: "task_downloadHeaders",
userAgentPattern: /^Microsoft BITS\//,
expectedExtras: [
{ mode: null, name: null },
{ mode: "1", name: "task_downloadHeaders" },
],
});
});
add_task(async function test_task_policies() {
await setupPolicyEngineWithJson({
policies: {
// Same URL, different method of specifying it.
AppUpdateURL: downloadHeaders.updateUrl,
},
});
Assert.equal(
Services.policies.status,
Ci.nsIEnterprisePolicies.ACTIVE,
"Engine is active"
);
// No extras when the update URL is set by policy.
await downloadHeaders.test({
useBits: false,
backgroundTaskName: "task_downloadHeaders",
userAgentPattern: /\sGecko\//,
expectedExtras: [
{ mode: null, name: null },
{ mode: null, name: null },
],
});
});
add_task(async () => {
doTestFinish();
});