diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/push/test/xpcshell/test_record.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | dom/push/test/xpcshell/test_record.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/dom/push/test/xpcshell/test_record.js b/dom/push/test/xpcshell/test_record.js new file mode 100644 index 0000000000..144c0ee346 --- /dev/null +++ b/dom/push/test/xpcshell/test_record.js @@ -0,0 +1,132 @@ +"use strict"; + +const { PushRecord } = ChromeUtils.importESModule( + "resource://gre/modules/PushRecord.sys.mjs" +); + +add_task(async function test_updateQuota() { + let record = new PushRecord({ + quota: 8, + lastPush: Date.now() - 1 * MS_IN_ONE_DAY, + }); + + record.updateQuota(Date.now() - 2 * MS_IN_ONE_DAY); + equal( + record.quota, + 8, + "Should not update quota if last visit is older than last push" + ); + + record.updateQuota(Date.now()); + equal( + record.quota, + 16, + "Should reset quota if last visit is newer than last push" + ); + + record.reduceQuota(); + equal(record.quota, 15, "Should reduce quota"); + + // Make sure we calculate the quota correctly for visit dates in the + // future (bug 1206424). + record.updateQuota(Date.now() + 1 * MS_IN_ONE_DAY); + equal( + record.quota, + 16, + "Should reset quota to maximum if last visit is in the future" + ); + + record.updateQuota(-1); + strictEqual(record.quota, 0, "Should set quota to 0 if history was cleared"); + ok(record.isExpired(), "Should expire records once the quota reaches 0"); + record.reduceQuota(); + strictEqual(record.quota, 0, "Quota should never be negative"); +}); + +add_task(async function test_systemRecord_updateQuota() { + let systemRecord = new PushRecord({ + quota: Infinity, + systemRecord: true, + }); + systemRecord.updateQuota(Date.now() - 3 * MS_IN_ONE_DAY); + equal( + systemRecord.quota, + Infinity, + "System subscriptions should ignore quota updates" + ); + systemRecord.updateQuota(-1); + equal( + systemRecord.quota, + Infinity, + "System subscriptions should ignore the last visit time" + ); + systemRecord.reduceQuota(); + equal( + systemRecord.quota, + Infinity, + "System subscriptions should ignore quota reductions" + ); +}); + +function testPermissionCheck(props) { + let record = new PushRecord(props); + let originSuffix; + equal( + record.uri.spec, + props.scope, + `Record URI should match scope URL for ${JSON.stringify(props)}` + ); + if (props.originAttributes) { + originSuffix = ChromeUtils.originAttributesToSuffix( + record.principal.originAttributes + ); + equal( + originSuffix, + props.originAttributes, + `Origin suffixes should match for ${JSON.stringify(props)}` + ); + } + ok( + !record.hasPermission(), + `Record ${JSON.stringify(props)} should not have permission yet` + ); + // Adding permission from origin string + PermissionTestUtils.add( + props.scope + (originSuffix || ""), + "desktop-notification", + Ci.nsIPermissionManager.ALLOW_ACTION + ); + try { + ok( + record.hasPermission(), + `Record ${JSON.stringify(props)} should have permission` + ); + } finally { + PermissionTestUtils.remove( + props.scope + (originSuffix || ""), + "desktop-notification" + ); + } +} + +add_task(async function test_principal_permissions() { + let testProps = [ + { + scope: "https://example.com/", + }, + { + scope: "https://example.com/", + originAttributes: "^userContextId=1", + }, + { + scope: "https://xn--90aexm.xn--80ag3aejvc.xn--p1ai/", + }, + { + scope: "https://xn--90aexm.xn--80ag3aejvc.xn--p1ai/", + originAttributes: "^userContextId=1", + }, + ]; + for (let props of testProps) { + testPermissionCheck(props); + } +}); |