/* 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/. */
function OpenCacheEntry(key, flags, lci) {
return new Promise(resolve => {
key = Services.io.newURI(key);
function CacheListener() {}
CacheListener.prototype = {
QueryInterface: ChromeUtils.generateQI([
"nsICacheEntryOpenCallback"]),
onCacheEntryCheck() {
return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED;
},
onCacheEntryAvailable(entry) {
resolve(entry);
},
run() {
let storage = Services.cache2.diskCacheStorage(lci);
storage.asyncOpenURI(key,
"", flags,
this);
},
};
new CacheListener().run();
});
}
async
function do_test_cache_persistent(https) {
let scheme = https ?
"https" :
"http";
let url =
scheme +
"://example.com/browser/netwerk/test/browser/file_bug968273.html";
let redirectUrl =
scheme +
"://example.com/browser/netwerk/test/browser/bug968273_redirect.html";
await BrowserTestUtils.openNewForegroundTab(gBrowser, url,
true);
let loadContextInfo = Services.loadContextInfo.custom(
false, {
partitionKey: `(${scheme},example.com)`,
});
let entry = await OpenCacheEntry(
redirectUrl,
Ci.nsICacheStorage.OPEN_NORMALLY,
loadContextInfo
);
Assert.ok(
entry.persistent == https,
https
?
"Permanent redirects over HTTPS can be persistent"
:
"Permanent redirects over HTTP cannot be persistent"
);
gBrowser.removeCurrentTab();
Services.cache2.clear();
}
add_task(async
function setupTestingPref() {
await SpecialPowers.pushPrefEnv({
set: [
[
"network.cache.persist_permanent_redirects_http",
false],
[
"dom.security.https_first",
false],
],
});
});
add_task(async
function test_cache_persistent() {
await do_test_cache_persistent(
true);
await do_test_cache_persistent(
false);
});