195 lines
5.8 KiB
JavaScript
195 lines
5.8 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
const { EnterprisePolicyTesting, PoliciesPrefTracker } = ChromeUtils.import(
|
|
"resource://testing-common/EnterprisePolicyTesting.jsm",
|
|
null
|
|
);
|
|
const { TestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/TestUtils.jsm",
|
|
null
|
|
);
|
|
|
|
ChromeUtils.defineModuleGetter(
|
|
this,
|
|
"HomePage",
|
|
"resource:///modules/HomePage.jsm"
|
|
);
|
|
|
|
PoliciesPrefTracker.start();
|
|
|
|
async function setupPolicyEngineWithJson(json, customSchema) {
|
|
PoliciesPrefTracker.restoreDefaultValues();
|
|
if (typeof json != "object") {
|
|
let filePath = getTestFilePath(json ? json : "non-existing-file.json");
|
|
return EnterprisePolicyTesting.setupPolicyEngineWithJson(
|
|
filePath,
|
|
customSchema
|
|
);
|
|
}
|
|
return EnterprisePolicyTesting.setupPolicyEngineWithJson(json, customSchema);
|
|
}
|
|
|
|
function checkLockedPref(prefName, prefValue) {
|
|
EnterprisePolicyTesting.checkPolicyPref(prefName, prefValue, true);
|
|
}
|
|
|
|
function checkUnlockedPref(prefName, prefValue) {
|
|
EnterprisePolicyTesting.checkPolicyPref(prefName, prefValue, false);
|
|
}
|
|
|
|
// Checks that a page was blocked by seeing if it was replaced with about:neterror
|
|
async function checkBlockedPage(url, expectedBlocked) {
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url,
|
|
waitForLoad: false,
|
|
waitForStateStop: true,
|
|
},
|
|
async function() {
|
|
await BrowserTestUtils.waitForCondition(async function() {
|
|
let blocked = await SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[],
|
|
async function() {
|
|
return content.document.documentURI.startsWith("about:neterror");
|
|
}
|
|
);
|
|
return blocked == expectedBlocked;
|
|
}, `Page ${url} block was correct (expected=${expectedBlocked}).`);
|
|
}
|
|
);
|
|
}
|
|
|
|
async function check_homepage({
|
|
expectedURL,
|
|
expectedPageVal = -1,
|
|
locked = false,
|
|
}) {
|
|
if (expectedURL) {
|
|
is(HomePage.get(), expectedURL, "Homepage URL should match expected");
|
|
is(
|
|
Services.prefs.prefIsLocked("browser.startup.homepage"),
|
|
locked,
|
|
"Lock status of browser.startup.homepage should match expected"
|
|
);
|
|
}
|
|
if (expectedPageVal != -1) {
|
|
is(
|
|
Services.prefs.getIntPref("browser.startup.page", -1),
|
|
expectedPageVal,
|
|
"Pref page value should match expected"
|
|
);
|
|
is(
|
|
Services.prefs.prefIsLocked("browser.startup.page"),
|
|
locked,
|
|
"Lock status of browser.startup.page should match expected"
|
|
);
|
|
}
|
|
|
|
// Test that UI is disabled when the Locked property is enabled
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
"about:preferences"
|
|
);
|
|
await ContentTask.spawn(
|
|
tab.linkedBrowser,
|
|
{ expectedURL, expectedPageVal, locked },
|
|
// eslint-disable-next-line no-shadow
|
|
async function({ expectedURL, expectedPageVal, locked }) {
|
|
if (expectedPageVal != -1) {
|
|
// Only check restore checkbox for StartPage
|
|
let browserRestoreSessionCheckbox = content.document.getElementById(
|
|
"browserRestoreSession"
|
|
);
|
|
is(
|
|
browserRestoreSessionCheckbox.disabled,
|
|
locked,
|
|
"Disabled status of session restore status should match expected"
|
|
);
|
|
let shouldBeChecked = expectedPageVal === 3;
|
|
is(
|
|
browserRestoreSessionCheckbox.checked,
|
|
shouldBeChecked,
|
|
"Session restore status checkbox should be: " +
|
|
(shouldBeChecked ? "checked" : "unchecked")
|
|
);
|
|
}
|
|
|
|
if (!expectedURL) {
|
|
// If only StartPage was changed, no need to check these
|
|
return;
|
|
}
|
|
await content.gotoPref("paneHome");
|
|
|
|
let homepageTextbox = content.document.getElementById("homePageUrl");
|
|
// Unfortunately this test does not work because the new UI does not fill
|
|
// default values into the URL box at the moment.
|
|
// is(homepageTextbox.value, expectedURL,
|
|
// "Homepage URL should match expected");
|
|
|
|
// Wait for rendering to be finished
|
|
await ContentTaskUtils.waitForCondition(
|
|
() =>
|
|
content.document.getElementById("useCurrentBtn").disabled === locked
|
|
);
|
|
|
|
is(
|
|
homepageTextbox.disabled,
|
|
locked,
|
|
"Homepage URL text box disabled status should match expected"
|
|
);
|
|
is(
|
|
content.document.getElementById("homeMode").disabled,
|
|
locked,
|
|
"Home mode drop down disabled status should match expected"
|
|
);
|
|
is(
|
|
content.document.getElementById("useCurrentBtn").disabled,
|
|
locked,
|
|
'"Use current page" button disabled status should match expected'
|
|
);
|
|
is(
|
|
content.document.getElementById("useBookmarkBtn").disabled,
|
|
locked,
|
|
'"Use bookmark" button disabled status should match expected'
|
|
);
|
|
is(
|
|
content.document.getElementById("restoreDefaultHomePageBtn").disabled,
|
|
locked,
|
|
'"Restore defaults" button disabled status should match expected'
|
|
);
|
|
}
|
|
);
|
|
await BrowserTestUtils.removeTab(tab);
|
|
}
|
|
|
|
add_task(async function policies_headjs_startWithCleanSlate() {
|
|
if (Services.policies.status != Ci.nsIEnterprisePolicies.INACTIVE) {
|
|
await setupPolicyEngineWithJson("");
|
|
}
|
|
is(
|
|
Services.policies.status,
|
|
Ci.nsIEnterprisePolicies.INACTIVE,
|
|
"Engine is inactive at the start of the test"
|
|
);
|
|
});
|
|
|
|
registerCleanupFunction(async function policies_headjs_finishWithCleanSlate() {
|
|
if (Services.policies.status != Ci.nsIEnterprisePolicies.INACTIVE) {
|
|
await setupPolicyEngineWithJson("");
|
|
}
|
|
is(
|
|
Services.policies.status,
|
|
Ci.nsIEnterprisePolicies.INACTIVE,
|
|
"Engine is inactive at the end of the test"
|
|
);
|
|
|
|
EnterprisePolicyTesting.resetRunOnceState();
|
|
PoliciesPrefTracker.stop();
|
|
});
|