зеркало из https://github.com/mozilla/gecko-dev.git
99 строки
2.9 KiB
JavaScript
99 строки
2.9 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/. */
|
|
|
|
// Large preferences should not be set in the child process.
|
|
// Non-string preferences are not tested here, because their behavior
|
|
// should not be affected by this filtering.
|
|
|
|
var Ci = Components.interfaces;
|
|
var Cc = Components.classes;
|
|
|
|
function isParentProcess() {
|
|
let appInfo = Cc["@mozilla.org/xre/app-info;1"];
|
|
return (!appInfo || appInfo.getService(Ci.nsIXULRuntime).processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT);
|
|
}
|
|
|
|
function makeBuffer(length) {
|
|
let string = "x";
|
|
while (string.length < length) {
|
|
string = string + string;
|
|
}
|
|
if (string.length > length) {
|
|
string = string.substring(length - string.length);
|
|
}
|
|
return string;
|
|
}
|
|
|
|
// from prefapi.h
|
|
const MAX_ADVISABLE_PREF_LENGTH = 4 * 1024;
|
|
|
|
const largeString = makeBuffer(MAX_ADVISABLE_PREF_LENGTH + 1);
|
|
const smallString = makeBuffer(4);
|
|
|
|
const testValues = [
|
|
{name: "None", value: undefined},
|
|
{name: "Small", value: smallString},
|
|
{name: "Large", value: largeString},
|
|
];
|
|
|
|
function prefName(def, user) {
|
|
return "Test.IPC.default" + def.name + "User" + user.name;
|
|
}
|
|
|
|
function expectedPrefValue(def, user) {
|
|
if (user.value) {
|
|
return user.value;
|
|
}
|
|
return def.value;
|
|
}
|
|
|
|
function run_test() {
|
|
let pb = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
|
|
let ps = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
|
|
let defaultBranch = ps.getDefaultBranch("");
|
|
|
|
let isParent = isParentProcess();
|
|
if (isParent) {
|
|
// Set all combinations of none, small and large, for default and user prefs.
|
|
for (let def of testValues) {
|
|
for (let user of testValues) {
|
|
let currPref = prefName(def, user);
|
|
if (def.value) {
|
|
defaultBranch.setCharPref(currPref, def.value);
|
|
}
|
|
if (user.value) {
|
|
pb.setCharPref(currPref, user.value);
|
|
}
|
|
}
|
|
}
|
|
|
|
run_test_in_child("test_large_pref.js");
|
|
}
|
|
|
|
// Check that each preference is set or not set, as appropriate.
|
|
for (let def of testValues) {
|
|
for (let user of testValues) {
|
|
if (!def.value && !user.value) {
|
|
continue;
|
|
}
|
|
let pref_name = prefName(def, user);
|
|
if (isParent || (def.name != "Large" && user.name != "Large")) {
|
|
do_check_eq(pb.getCharPref(pref_name), expectedPrefValue(def, user));
|
|
} else {
|
|
// This is the child, and either the default or user value is
|
|
// large, so the preference should not be set.
|
|
let prefExists;
|
|
try {
|
|
pb.getCharPref(pref_name);
|
|
prefExists = true;
|
|
} catch(e) {
|
|
prefExists = false;
|
|
}
|
|
ok(!prefExists,
|
|
"Pref " + pref_name + " should not be set in the child");
|
|
}
|
|
}
|
|
}
|
|
}
|