Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
RemoteSettingsCrashPull:
"resource://gre/modules/RemoteSettingsCrashPull.sys.mjs",
EventDispatcher: "resource://gre/modules/Messaging.sys.mjs",
});
const kRemoteSettingsCollectionName = "crash-reports-ondemand";
add_setup(async function () {
await lazy.makeFakeAppDir();
});
add_task(
async function test_remoteSettingsGeneratesCorrectEvent_whenAttached() {
let listener;
const crashPullPromise = new Promise(resolve => {
listener = {
onEvent(aEvent, aData) {
resolve([aEvent, aData]);
},
};
});
lazy.EventDispatcher.instance.registerListener(listener, [
"GeckoView:RemoteSettingsCrashPull",
]);
const oldCheckForInterestingUnsubmittedCrash =
lazy.RemoteSettingsCrashPull.checkForInterestingUnsubmittedCrash;
lazy.RemoteSettingsCrashPull.checkForInterestingUnsubmittedCrash =
async _ => {
return ["989df240-a40c-405a-9a22-f2fc4a31db6c"];
};
lazy.EventDispatcher.instance.dispatch(
"GeckoView:CrashPullController.Delegate:Attached",
undefined,
undefined,
undefined
);
const payload = {
current: [],
created: [
{
hashes: [
// value here is not important
"2435191bfd64cf0c8cbf0397f1cb5654f778388a3be72cb01502196896f5a0e9",
],
},
],
updated: [],
deleted: [],
};
await lazy.RemoteSettings(kRemoteSettingsCollectionName).emit("sync", {
data: payload,
});
const [aEvent, aData] = await crashPullPromise;
Assert.equal(
"GeckoView:RemoteSettingsCrashPull",
aEvent,
"expected a remote settings crash pull"
);
Assert.equal(
1,
aData.crashIDs.length,
`expected one crash ID, but got ${aData.crashIDs.length}`
);
Assert.ok(
aData.crashIDs[0].includes(
"pending/989df240-a40c-405a-9a22-f2fc4a31db6c.dmp"
),
"build path for crash dump"
);
lazy.RemoteSettingsCrashPull.checkForInterestingUnsubmittedCrash =
oldCheckForInterestingUnsubmittedCrash;
}
);