Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'win' && os_version == '11.26100' && arch == 'x86_64' && msix OR os == 'win' && os_version == '11.26200' && arch == 'x86_64' && msix
- Manifest: netwerk/test/unit/xpcshell.toml
/* 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
//
// The toml [prefs] block sets network.ssl_tokens_cache_persistence=true so
// Init() sets up persistence (write observers, mBackingFile, etc.). The
// test then sets the pref to false *before* firing profile-after-change,
// simulating a user whose user.js disables the pref. The handler must
// tear down persistence so no cache file is written on idle-daily.
"use strict";
const { AppConstants } = ChromeUtils.importESModule(
"resource://gre/modules/AppConstants.sys.mjs"
);
let gProfileDir = null;
let gCacheFile = null;
add_setup({ skip_if: () => AppConstants.MOZ_SYSTEM_NSS }, async () => {
const { HttpServer } = ChromeUtils.importESModule(
);
gProfileDir = do_get_profile();
gCacheFile = PathUtils.join(gProfileDir.path, "ssl_tokens_cache.bin");
// Disable persistence *before* profile-after-change fires, simulating
// a user.js override that is applied after Init() but before
// profile-after-change.
Services.prefs.setBoolPref("network.ssl_tokens_cache_persistence", false);
Services.obs.notifyObservers(
null,
"profile-after-change",
"xpcshell-persist-disabled-test"
);
await new Promise(resolve => do_timeout(0, resolve));
let httpServer = new HttpServer();
httpServer.registerPathHandler("/", (req, resp) => {
resp.setStatusLine(req.httpVersion, 200, "OK");
resp.setHeader("Content-Type", "text/plain");
resp.bodyOutputStream.write("OK", 2);
});
httpServer.start(-1);
registerCleanupFunction(async () => {
await httpServer.stop();
Services.prefs.clearUserPref("network.ssl_tokens_cache_persistence");
});
await asyncSetupFaultyServer(httpServer);
});
async function makeConnection() {
const kHost = "decrypt-error-on-resume.example.com";
Services.prefs.setCharPref("network.dns.localDomains", kHost);
registerCleanupFunction(() =>
Services.prefs.clearUserPref("network.dns.localDomains")
);
let [, buf] = await channelOpenPromise(chan, CL_ALLOW_UNKNOWN_CL);
ok(buf, "connection succeeded and NewSessionTicket was issued");
}
add_task(
{ skip_if: () => AppConstants.MOZ_SYSTEM_NSS },
async function test_ssl_token_cache_not_written_when_pref_disabled() {
await makeConnection();
await IOUtils.remove(gCacheFile, { ignoreAbsent: true });
Services.obs.notifyObservers(null, "idle-daily");
// Give any async write a chance to complete.
await new Promise(resolve => do_timeout(500, resolve));
ok(
!(await IOUtils.exists(gCacheFile)),
"ssl_tokens_cache.bin must NOT be written when pref is disabled"
);
}
);