Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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/. */
"use strict";
const { IPPStartupCacheSingleton } = ChromeUtils.importESModule(
"resource:///modules/ipprotection/IPPStartupCache.sys.mjs"
);
const { IPProtectionStates } = ChromeUtils.importESModule(
"resource:///modules/ipprotection/IPProtectionService.sys.mjs"
);
/**
* Test the disabled cache
*/
add_task(async function test_IPPStartupCache_disabled() {
// By default the cache is not active.
Services.prefs.setBoolPref("browser.ipProtection.cacheDisabled", true);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
cache.isStartupCompleted,
"In XPCShell mode the cache is not active"
);
});
/**
* Test the enabled cache
*/
add_task(async function test_IPPStartupCache_enabled() {
// By default the cache is not active.
Services.prefs.setBoolPref("browser.ipProtection.cacheDisabled", false);
// Default state is UNINITIALIZED
{
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(
cache.state,
IPProtectionStates.UNINITIALIZED,
"The state is unitialized"
);
}
// Fetch the cached state
{
Services.prefs.setCharPref(
"browser.ipProtection.stateCache",
IPProtectionStates.READY
);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(cache.state, IPProtectionStates.READY, "The state is READY");
}
// Invalid cache means UNINITIALIZED
{
Services.prefs.setCharPref(
"browser.ipProtection.stateCache",
"Hello World!"
);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(
cache.state,
IPProtectionStates.UNINITIALIZED,
"The state is unitialized"
);
}
// ACTIVE to READY
{
Services.prefs.setCharPref(
"browser.ipProtection.stateCache",
IPProtectionStates.ACTIVE
);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(cache.state, IPProtectionStates.READY, "The state is READY");
}
});
/**
* Cache the entitlement
*/
add_task(async function test_IPPStartupCache_enabled() {
// By default the cache is not active.
Services.prefs.setBoolPref("browser.ipProtection.cacheDisabled", false);
// Default entitlement is null
{
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(cache.entitlement, null, "Null entitlement");
}
// A JSON object for entitlement
{
Services.prefs.setCharPref(
"browser.ipProtection.entitlementCache",
'{"a": 42}'
);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.deepEqual(
cache.entitlement,
{ a: 42 },
"A valid entitlement object"
);
}
// Invalid JSON
{
Services.prefs.setCharPref(
"browser.ipProtection.entitlementCache",
'{"a": 42}}}}'
);
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(cache.entitlement, null, "Null entitlement");
}
// Setter
{
const cache = new IPPStartupCacheSingleton();
cache.init();
Assert.ok(
!cache.isStartupCompleted,
"In XPCShell mode the cache is active"
);
Assert.equal(cache.entitlement, null, "Null entitlement");
cache.storeEntitlement(42);
Assert.equal(
Services.prefs.getCharPref("browser.ipProtection.entitlementCache", ""),
"42",
"The cache is correctly stored (number)"
);
cache.storeEntitlement(null);
Assert.equal(
Services.prefs.getCharPref("browser.ipProtection.entitlementCache", ""),
"null",
"The cache is correctly stored (null)"
);
cache.storeEntitlement({ a: 42 });
Assert.equal(
Services.prefs.getCharPref("browser.ipProtection.entitlementCache", ""),
'{"a":42}',
"The cache is correctly stored (obj)"
);
}
});