Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Verifies that clearing the purge log via nsIClearDataService does not lead to
* a crash.
*/
async function bounceTwice() {
for (let i = 0; i < 2; i++) {
await runTestBounce({
bounceType: "client",
setState: "cookie-client",
// We don't want to clear the purge log here because we want to test that
// clearing the purge log through nsIClearDataService does not lead to a
// crash.
skipBounceTrackingProtectionCleanup: true,
// This also calls into BTP clearing.
skipSiteDataCleanup: true,
// Skip state checks on the second bounce. The second test run would
// otherwise fail because it expects to start with clean BTP state.
skipStateChecks: i == 1,
});
}
}
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.bounceTrackingProtection.requireStatefulBounces", true],
["privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec", 0],
],
});
});
add_task(async function test_crash() {
info("Bounce and purge twice so we get two entries in recent purges.");
await bounceTwice();
info("Clear BTP state via nsIClearDataService which must not crash.");
await new Promise(function (resolve) {
Services.clearData.deleteDataInTimeRange(
0,
// In microseconds
Date.now() * 1000,
true,
Ci.nsIClearDataService.CLEAR_BOUNCE_TRACKING_PROTECTION_STATE,
failedFlags => {
Assert.equal(failedFlags, 0, "Clearing should have succeeded");
resolve();
}
);
});
// Cleanup
await SiteDataTestUtils.clear();
});