55 lines
2.4 KiB
JavaScript
55 lines
2.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
// This is the script that runs in the child xpcshell process for the test
|
|
// unit_aus_update/updateSyncManager.js.
|
|
// The main thing this script does is override the child's directory service
|
|
// so that it ends up with the same fake binary path that the parent test runner
|
|
// has opened its update lock with.
|
|
// This requires that we have already been passed a constant on our command
|
|
// line which contains the relevant fake binary path, which is called:
|
|
/* global customExePath */
|
|
|
|
print("child process is running");
|
|
|
|
// This function is copied from xpcshellUtilsAUS.js so that we can have our
|
|
// xpcshell subprocess call it without having to load that whole file, because
|
|
// it turns out that needs a bunch of infrastructure that normally the testing
|
|
// framework would provide, and that also requires a bunch of setup, and it's
|
|
// just not worth all that. This is a cut down version that only includes the
|
|
// directory provider functionality that the subprocess really needs.
|
|
function adjustGeneralPaths() {
|
|
let dirProvider = {
|
|
getFile: function AGP_DP_getFile(aProp, aPersistent) {
|
|
// Set the value of persistent to false so when this directory provider is
|
|
// unregistered it will revert back to the original provider.
|
|
aPersistent.value = false;
|
|
// The sync manager only needs XREExeF, so that's all we provide.
|
|
if (aProp == "XREExeF") {
|
|
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
|
file.initWithPath(customExePath);
|
|
return file;
|
|
}
|
|
return null;
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI(["nsIDirectoryServiceProvider"]),
|
|
};
|
|
let ds = Services.dirsvc.QueryInterface(Ci.nsIDirectoryService);
|
|
ds.QueryInterface(Ci.nsIProperties).undefine("XREExeF");
|
|
ds.registerProvider(dirProvider);
|
|
|
|
// Now that we've overridden the directory provider, the name of the update
|
|
// lock needs to be changed to match the overridden path.
|
|
let syncManager = Cc["@mozilla.org/updates/update-sync-manager;1"].getService(
|
|
Ci.nsIUpdateSyncManager
|
|
);
|
|
syncManager.resetLock();
|
|
}
|
|
|
|
adjustGeneralPaths();
|
|
|
|
// Wait a few seconds for the parent to do what it needs to do, then exit.
|
|
print("child process should now have the lock; will exit in 5 seconds");
|
|
simulateNoScriptActivity(5);
|
|
print("child process exiting now");
|