mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
55b948dec0
--HG-- extra : rebase_source : f486f39feac1fb743edc920618bec29884d515f1
361 lines
12 KiB
JavaScript
361 lines
12 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/. */
|
|
|
|
function runTestOnPrivacyPrefPane(testFunc) {
|
|
let observer = {
|
|
observe: function(aSubject, aTopic, aData) {
|
|
if (aTopic == "domwindowopened") {
|
|
Services.ww.unregisterNotification(this);
|
|
|
|
let win = aSubject.QueryInterface(Ci.nsIDOMEventTarget);
|
|
win.addEventListener("load", function() {
|
|
win.removeEventListener("load", arguments.callee, false);
|
|
testFunc(dialog.document.defaultView);
|
|
|
|
Services.ww.registerNotification(observer);
|
|
dialog.close();
|
|
}, false);
|
|
} else if (aTopic == "domwindowclosed") {
|
|
Services.ww.unregisterNotification(this);
|
|
testRunner.runNext();
|
|
}
|
|
}
|
|
};
|
|
Services.ww.registerNotification(observer);
|
|
|
|
let dialog = openDialog("chrome://browser/content/preferences/preferences.xul", "Preferences",
|
|
"chrome,titlebar,toolbar,centerscreen,dialog=no", "panePrivacy");
|
|
}
|
|
|
|
function controlChanged(element) {
|
|
element.doCommand();
|
|
}
|
|
|
|
// We can only test the panes that don't trigger a preference update
|
|
function test_pane_visibility(win) {
|
|
let modes = {
|
|
"remember": "historyRememberPane",
|
|
"custom": "historyCustomPane"
|
|
};
|
|
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
let historypane = win.document.getElementById("historyPane");
|
|
ok(historypane, "history mode pane should exist");
|
|
|
|
for (let mode in modes) {
|
|
historymode.value = mode;
|
|
controlChanged(historymode);
|
|
is(historypane.selectedPanel, win.document.getElementById(modes[mode]),
|
|
"The correct pane should be selected for the " + mode + " mode");
|
|
}
|
|
}
|
|
|
|
function test_dependent_elements(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
|
|
ok(pbautostart, "the private browsing auto-start checkbox should exist");
|
|
let controls = [
|
|
win.document.getElementById("rememberHistory"),
|
|
win.document.getElementById("rememberForms"),
|
|
win.document.getElementById("keepUntil"),
|
|
win.document.getElementById("keepCookiesUntil"),
|
|
win.document.getElementById("alwaysClear"),
|
|
];
|
|
controls.forEach(function(control) {
|
|
ok(control, "the dependent controls should exist");
|
|
});
|
|
let independents = [
|
|
win.document.getElementById("acceptCookies"),
|
|
win.document.getElementById("acceptThirdPartyLabel"),
|
|
win.document.getElementById("acceptThirdPartyMenu")
|
|
];
|
|
independents.forEach(function(control) {
|
|
ok(control, "the independent controls should exist");
|
|
});
|
|
let cookieexceptions = win.document.getElementById("cookieExceptions");
|
|
ok(cookieexceptions, "the cookie exceptions button should exist");
|
|
let keepuntil = win.document.getElementById("keepCookiesUntil");
|
|
ok(keepuntil, "the keep cookies until menulist should exist");
|
|
let alwaysclear = win.document.getElementById("alwaysClear");
|
|
ok(alwaysclear, "the clear data on close checkbox should exist");
|
|
let rememberhistory = win.document.getElementById("rememberHistory");
|
|
ok(rememberhistory, "the remember history checkbox should exist");
|
|
let rememberforms = win.document.getElementById("rememberForms");
|
|
ok(rememberforms, "the remember forms checkbox should exist");
|
|
let alwaysclearsettings = win.document.getElementById("clearDataSettings");
|
|
ok(alwaysclearsettings, "the clear data settings button should exist");
|
|
|
|
function expect_disabled(disabled) {
|
|
controls.forEach(function(control) {
|
|
is(control.disabled, disabled,
|
|
control.getAttribute("id") + " should " + (disabled ? "" : "not ") + "be disabled");
|
|
});
|
|
is(keepuntil.value, disabled ? 2 : 0,
|
|
"the keep cookies until menulist value should be as expected");
|
|
if (disabled) {
|
|
ok(!alwaysclear.checked,
|
|
"the clear data on close checkbox value should be as expected");
|
|
ok(!rememberhistory.checked,
|
|
"the remember history checkbox value should be as expected");
|
|
ok(!rememberforms.checked,
|
|
"the remember forms checkbox value should be as expected");
|
|
}
|
|
}
|
|
function check_independents(expected) {
|
|
independents.forEach(function(control) {
|
|
is(control.disabled, expected,
|
|
control.getAttribute("id") + " should " + (expected ? "" : "not ") + "be disabled");
|
|
});
|
|
ok(!cookieexceptions.disabled,
|
|
"the cookie exceptions button should never be disabled");
|
|
ok(alwaysclearsettings.disabled,
|
|
"the clear data settings button should always be disabled");
|
|
}
|
|
|
|
// controls should only change in custom mode
|
|
historymode.value = "remember";
|
|
controlChanged(historymode);
|
|
expect_disabled(false);
|
|
check_independents(false);
|
|
|
|
// setting the mode to custom shouldn't change anything
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
expect_disabled(false);
|
|
check_independents(false);
|
|
}
|
|
|
|
function test_dependent_cookie_elements(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
|
|
ok(pbautostart, "the private browsing auto-start checkbox should exist");
|
|
let controls = [
|
|
win.document.getElementById("acceptThirdPartyLabel"),
|
|
win.document.getElementById("acceptThirdPartyMenu"),
|
|
win.document.getElementById("keepUntil"),
|
|
win.document.getElementById("keepCookiesUntil"),
|
|
];
|
|
controls.forEach(function(control) {
|
|
ok(control, "the dependent cookie controls should exist");
|
|
});
|
|
let acceptcookies = win.document.getElementById("acceptCookies");
|
|
ok(acceptcookies, "the accept cookies checkbox should exist");
|
|
|
|
function expect_disabled(disabled) {
|
|
controls.forEach(function(control) {
|
|
is(control.disabled, disabled,
|
|
control.getAttribute("id") + " should " + (disabled ? "" : "not ") + "be disabled");
|
|
});
|
|
}
|
|
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
pbautostart.checked = false;
|
|
controlChanged(pbautostart);
|
|
expect_disabled(false);
|
|
|
|
acceptcookies.checked = false;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(true);
|
|
|
|
acceptcookies.checked = true;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(false);
|
|
|
|
let accessthirdparty = controls.shift();
|
|
acceptcookies.checked = false;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(true);
|
|
ok(accessthirdparty.disabled, "access third party button should be disabled");
|
|
|
|
pbautostart.checked = false;
|
|
controlChanged(pbautostart);
|
|
expect_disabled(true);
|
|
ok(accessthirdparty.disabled, "access third party button should be disabled");
|
|
|
|
acceptcookies.checked = true;
|
|
controlChanged(acceptcookies);
|
|
expect_disabled(false);
|
|
ok(!accessthirdparty.disabled, "access third party button should be enabled");
|
|
}
|
|
|
|
function test_dependent_clearonclose_elements(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
|
|
ok(pbautostart, "the private browsing auto-start checkbox should exist");
|
|
let alwaysclear = win.document.getElementById("alwaysClear");
|
|
ok(alwaysclear, "the clear data on close checkbox should exist");
|
|
let alwaysclearsettings = win.document.getElementById("clearDataSettings");
|
|
ok(alwaysclearsettings, "the clear data settings button should exist");
|
|
|
|
function expect_disabled(disabled) {
|
|
is(alwaysclearsettings.disabled, disabled,
|
|
"the clear data settings should " + (disabled ? "" : "not ") + "be disabled");
|
|
}
|
|
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
pbautostart.checked = false;
|
|
controlChanged(pbautostart);
|
|
alwaysclear.checked = false;
|
|
controlChanged(alwaysclear);
|
|
expect_disabled(true);
|
|
|
|
alwaysclear.checked = true;
|
|
controlChanged(alwaysclear);
|
|
expect_disabled(false);
|
|
|
|
alwaysclear.checked = false;
|
|
controlChanged(alwaysclear);
|
|
expect_disabled(true);
|
|
}
|
|
|
|
function test_dependent_prefs(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
let controls = [
|
|
win.document.getElementById("rememberHistory"),
|
|
win.document.getElementById("rememberForms"),
|
|
win.document.getElementById("acceptCookies"),
|
|
];
|
|
controls.forEach(function(control) {
|
|
ok(control, "the micro-management controls should exist");
|
|
});
|
|
|
|
let thirdPartyCookieMenu = win.document.getElementById("acceptThirdPartyMenu");
|
|
ok(thirdPartyCookieMenu, "the third-party cookie control should exist");
|
|
|
|
function expect_checked(checked) {
|
|
controls.forEach(function(control) {
|
|
is(control.checked, checked,
|
|
control.getAttribute("id") + " should " + (checked ? "not " : "") + "be checked");
|
|
});
|
|
|
|
is(thirdPartyCookieMenu.value == "always" || thirdPartyCookieMenu.value == "visited", checked, "third-party cookies should " + (checked ? "not " : "") + "be limited");
|
|
}
|
|
|
|
// controls should be checked in remember mode
|
|
historymode.value = "remember";
|
|
controlChanged(historymode);
|
|
expect_checked(true);
|
|
|
|
// even if they're unchecked in custom mode
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
thirdPartyCookieMenu.value = "never";
|
|
controlChanged(thirdPartyCookieMenu);
|
|
controls.forEach(function(control) {
|
|
control.checked = false;
|
|
controlChanged(control);
|
|
});
|
|
expect_checked(false);
|
|
historymode.value = "remember";
|
|
controlChanged(historymode);
|
|
expect_checked(true);
|
|
}
|
|
|
|
function test_historymode_retention(mode, expect) {
|
|
return function(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
|
|
if ((historymode.value == "remember" && mode == "dontremember") ||
|
|
(historymode.value == "dontremember" && mode == "remember") ||
|
|
(historymode.value == "custom" && mode == "dontremember")) {
|
|
return;
|
|
}
|
|
|
|
if (expect !== undefined) {
|
|
is(historymode.value, expect,
|
|
"history mode is expected to remain " + expect);
|
|
}
|
|
|
|
historymode.value = mode;
|
|
controlChanged(historymode);
|
|
};
|
|
}
|
|
|
|
function test_custom_retention(controlToChange, expect, valueIncrement) {
|
|
return function(win) {
|
|
let historymode = win.document.getElementById("historyMode");
|
|
ok(historymode, "history mode menulist should exist");
|
|
|
|
if (expect !== undefined) {
|
|
is(historymode.value, expect,
|
|
"history mode is expected to remain " + expect);
|
|
}
|
|
|
|
historymode.value = "custom";
|
|
controlChanged(historymode);
|
|
|
|
controlToChange = win.document.getElementById(controlToChange);
|
|
ok(controlToChange, "the control to change should exist");
|
|
switch (controlToChange.localName) {
|
|
case "checkbox":
|
|
controlToChange.checked = !controlToChange.checked;
|
|
break;
|
|
case "textbox":
|
|
controlToChange.value = parseInt(controlToChange.value) + valueIncrement;
|
|
break;
|
|
case "menulist":
|
|
controlToChange.value = valueIncrement;
|
|
break;
|
|
}
|
|
controlChanged(controlToChange);
|
|
};
|
|
}
|
|
|
|
function test_locbar_suggestion_retention(mode, expect) {
|
|
return function(win) {
|
|
let locbarsuggest = win.document.getElementById("locationBarSuggestion");
|
|
ok(locbarsuggest, "location bar suggestion menulist should exist");
|
|
|
|
if (expect !== undefined) {
|
|
is(locbarsuggest.value, expect,
|
|
"location bar suggestion is expected to remain " + expect);
|
|
}
|
|
|
|
locbarsuggest.value = mode;
|
|
controlChanged(locbarsuggest);
|
|
};
|
|
}
|
|
|
|
function reset_preferences(win) {
|
|
let prefs = win.document.getElementsByTagName("preference");
|
|
for (let i = 0; i < prefs.length; ++i)
|
|
if (prefs[i].hasUserValue)
|
|
prefs[i].reset();
|
|
}
|
|
|
|
let testRunner;
|
|
function run_test_subset(subset) {
|
|
let instantApplyOrig = Services.prefs.getBoolPref("browser.preferences.instantApply");
|
|
Services.prefs.setBoolPref("browser.preferences.instantApply", true);
|
|
|
|
waitForExplicitFinish();
|
|
|
|
testRunner = {
|
|
tests: subset,
|
|
counter: 0,
|
|
runNext: function() {
|
|
if (this.counter == this.tests.length) {
|
|
// cleanup
|
|
Services.prefs.setBoolPref("browser.preferences.instantApply", instantApplyOrig);
|
|
finish();
|
|
} else {
|
|
let self = this;
|
|
setTimeout(function() {
|
|
runTestOnPrivacyPrefPane(self.tests[self.counter++]);
|
|
}, 0);
|
|
}
|
|
}
|
|
};
|
|
|
|
testRunner.runNext();
|
|
}
|