Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: dom/push/test/xpcshell/xpcshell.toml
"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
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 = [
{
},
{
originAttributes: "^userContextId=1",
},
{
},
{
originAttributes: "^userContextId=1",
},
];
for (let props of testProps) {
testPermissionCheck(props);
}
});