Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// ev, unordered, and runJSCacheTests are defined in head.js
// Adding script element performs no preloads.
add_task(async function testDiskCache() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", false],
],
});
await runJSCacheTests([
{
title: "charset dependent file",
items: [
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// Loading with different charset should hit the disk cache, and then
// fall back to the network.
// The fetch count already hits the threshold, and it should overwrite
// the disk cache.
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("load:fallback", "file_js_cache_charset_js.sjs"),
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// Loading with different charset should hit the disk cache, and then
// fall back to the network.
// The fetch count already hits the threshold, and it should overwrite
// the disk cache.
{
file: "file_js_cache_charset_js.sjs",
charset: "UTF-8",
verifyText: "\ufffd\ufffd",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("load:fallback", "file_js_cache_charset_js.sjs"),
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
file: "file_js_cache_charset_js.sjs",
charset: "UTF-8",
verifyText: "\ufffd\ufffd",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// The disk cache for Shift_JIS is already overwritten.
// Loading with Shift_JIS should hit the disk cache, and then fall back
// to the network.
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("load:fallback", "file_js_cache_charset_js.sjs"),
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});
add_task(async function testMemoryCache() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", true],
["dom.script_loader.disk_cache_delay_ms", 0],
],
});
await runJSCacheTests([
{
title: "charset dependent file",
items: [
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
// At this point, the necko cache has fetchCount == 2.
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// At this point, the necko cache has fetchCount == 3.
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// The UTF-8 memory cache's fetch count becomes 4.
// Disk cache is created for UTF-8.
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
// The Shift_JIS memory cache's fetch count is still 3.
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
// The no-charset memory cache's fetch count becomes 4.
// Disk cache is overwritten with no charset.
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
// The Shift_JIS memory cache's fetch count becomes 4.
// Disk cache is overwritten with Shift_JIS.
ev("load:memorycache", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
clearMemory: true,
file: "file_js_cache_charset_js.sjs",
charset: "Shift_JIS",
verifyText: "\u3042",
events: [
// After clearing the memory cache, the disk cache should be used
// for Shift_JIS load.
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "",
verifyText: "\u201a\xa0",
events: [
// The disk cache was already overwritten, and it should fall back
// to the source.
// The necko cache's fetch count already hits 4, and loading
// source immediately created a disk cache.
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("load:fallback", "file_js_cache_charset_js.sjs"),
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
file: "file_js_cache_charset_js.sjs",
charset: "UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// The disk cache was already overwritten, and it should fall back
// to the source.
// The necko cache's fetch count already hits 4, and loading
// source immediately created a disk cache.
ev("load:diskcache", "file_js_cache_charset_js.sjs"),
ev("load:fallback", "file_js_cache_charset_js.sjs"),
ev("load:source", "file_js_cache_charset_js.sjs"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});
// Loading HTML document with script element performs preloads.
add_task(async function testPageDiskCache() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", false],
],
});
await runJSCacheTests([
{
title: "charset dependent file",
items: [
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// Loading with different charset should hit the disk cache, and then
// fall back to the network.
// The fetch count already hits the threshold, and it should overwrite
// the disk cache.
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:fallback", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// Loading with different charset should hit the disk cache, and then
// fall back to the network.
// The fetch count already hits the threshold, and it should overwrite
// the disk cache.
{
page: "file_js_cache_charset_html.sjs?script=UTF-8",
verifyText: "\ufffd\ufffd",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:fallback", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
// Loading with the same charset after the disk cache creation should
// use the disk cache.
{
page: "file_js_cache_charset_html.sjs?script=UTF-8",
verifyText: "\ufffd\ufffd",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:disabled", "file_js_cache_charset_js.sjs"),
],
},
// The disk cache for Shift_JIS is already overwritten.
// Loading with Shift_JIS should hit the disk cache, and then fall back
// to the network.
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:fallback", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:register", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});
add_task(async function testPageMemoryCache() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", true],
["dom.script_loader.disk_cache_delay_ms", 0],
],
});
await runJSCacheTests([
{
title: "charset dependent file",
items: [
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
// Preload from the memory cache does not have the associated
// script element.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
// At this point, the necko cache has fetchCount == 2.
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// At this point, the necko cache has fetchCount == 3.
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// The UTF-8 memory cache's fetch count becomes 4.
// Disk cache is created for UTF-8.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
// The Shift_JIS memory cache's fetch count is still 3.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
// The no-charset memory cache's fetch count becomes 4.
// Disk cache is overwritten with no charset.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
// The Shift_JIS memory cache's fetch count becomes 4.
// Disk cache is overwritten with Shift_JIS.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
clearMemory: true,
page: "file_js_cache_charset_html.sjs?script=Shift_JIS",
verifyText: "\u3042",
events: [
// After clearing the memory cache, the disk cache should be used
// for Shift_JIS load.
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?script=none",
verifyText: "\u201a\xa0",
events: [
// The disk cache was already overwritten, and it should fall back
// to the source.
// The necko cache's fetch count already hits 4, and loading
// source immediately created a disk cache.
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:fallback", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
{
page: "file_js_cache_charset_html.sjs?script=UTF-8",
verifyText: "\ufffd\ufffd",
events: [
// The disk cache was already overwritten, and it should fall back
// to the source.
// The necko cache's fetch count already hits 4, and loading
// source immediately created a disk cache.
ev("load:diskcache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:fallback", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:saved", "file_js_cache_charset_js.sjs", false),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});
add_task(async function testPageMemoryCacheDifferentDocumentEncoding() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", true],
["dom.script_loader.disk_cache_delay_ms", 0],
],
});
await runJSCacheTests([
{
title: "charset dependent file with different document encoding",
items: [
{
page: "file_js_cache_charset_html.sjs?",
verifyText: "\u201a\xa0",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
// The document uses windows-1252 encoding, and the script is
// decoded with windows-1252, and cached with windows-1252.
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?document=Shift_JIS",
verifyText: "\u3042",
events: [
// At the point of preload, the document's encoding is still the
// *default* UTF-8, and not yet stabilized.
//
// The cache entry uses windows-1252, and the script's fallback
// encoding is UTF-8.
// Given that this is a preload with no hint charset, the mismatch
// is ignored and the check is deferred to the actual load.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
// At this point, the document's encoding becomes windows-1252.
//
// The actual load ignores the preload above, given the encoding
// mismatch, and starts another load.
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
// A cache entry with windows-1252 encoding already exists, where
// the encoding is a part of cache value, not cache key.
// The new entry with Shift_JIS encoding is not inserted into the
// cache.
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?document=Shift_JIS",
verifyText: "\u3042",
events: [
// Given that the cache entry is still windows-1252,
// performing the same request shows the same behavior again.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});
add_task(async function testPageMemoryCacheSameDocumentEncoding() {
await SpecialPowers.pushPrefEnv({
set: [
["dom.expose_test_interfaces", true],
["dom.script_loader.bytecode_cache.enabled", true],
["dom.script_loader.bytecode_cache.strategy", 0],
["dom.script_loader.experimental.navigation_cache", true],
["dom.script_loader.disk_cache_delay_ms", 0],
],
});
await runJSCacheTests([
{
title: "charset dependent file with same document encoding",
items: [
{
page: "file_js_cache_charset_html.sjs?document=Shift_JIS",
verifyText: "\u3042",
events: [
ev("load:source", "file_js_cache_charset_js.sjs", "dontcare"),
// The document uses Shift_JIS encoding, and the script is
// decoded with Shift_JIS, and cached with Shift_JIS.
ev("memorycache:saved", "file_js_cache_charset_js.sjs"),
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
{
page: "file_js_cache_charset_html.sjs?document=Shift_JIS",
verifyText: "\u3042",
events: [
// At the point of preload, the document's encoding is still the
// *default* UTF-8, and not yet set to Shift_JIS.
//
// The cache entry uses Shift_JIS, and the script's fallback
// encoding is UTF-8.
// Given that this is a preload with no hint charset, the mismatch
// is ignored and the check is deferred to OnDelayedReady.
ev("load:memorycache", "file_js_cache_charset_js.sjs", "dontcare"),
// Before OnDelayedReady, the document's encoding becomes Shift_JIS,
// and the script's fallback encoding becomes Shift_JIS.
// The encoding now matches, and the cache entry is used.
ev("evaluate:classic", "file_js_cache_charset_js.sjs"),
ev("diskcache:noschedule"),
],
},
],
},
]);
await SpecialPowers.popPrefEnv();
});