mirror of
https://github.com/Feodor2/Mypal68.git
synced 2025-06-18 14:55:44 -04:00
165 lines
5.1 KiB
JavaScript
165 lines
5.1 KiB
JavaScript
"use strict";
|
|
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
This test file exists to ensure whenever changes to principal serialization happens,
|
|
we guarantee that the data can be restored and generated into a new principal.
|
|
|
|
The tests are written to be brittle so we encode all versions of the changes into the tests.
|
|
*/
|
|
|
|
add_task(async function test_nullPrincipal() {
|
|
const nullId = "0";
|
|
// fields
|
|
const uri = 0;
|
|
const suffix = 1;
|
|
|
|
const nullReplaceRegex = /moz-nullprincipal:{[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}}/;
|
|
const NULL_REPLACE = "NULL_PRINCIPAL_URL";
|
|
|
|
/*
|
|
This test should NOT be resilient to changes in versioning,
|
|
however it exists purely to verify the code doesn't unintentionally change without updating versioning and migration code.
|
|
*/
|
|
let tests = [
|
|
{
|
|
input: { OA: {} },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}"}}`,
|
|
},
|
|
{
|
|
input: { OA: {} },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}"}}`,
|
|
},
|
|
{
|
|
input: { OA: { userContextId: 0 } },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}"}}`,
|
|
},
|
|
{
|
|
input: { OA: { userContextId: 2 } },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}","${suffix}":"^userContextId=2"}}`,
|
|
},
|
|
{
|
|
input: { OA: { privateBrowsingId: 1 } },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}","${suffix}":"^privateBrowsingId=1"}}`,
|
|
},
|
|
{
|
|
input: { OA: { privateBrowsingId: 0 } },
|
|
expected: `{"${nullId}":{"${uri}":"${NULL_REPLACE}"}}`,
|
|
},
|
|
];
|
|
|
|
for (let test of tests) {
|
|
let p = Services.scriptSecurityManager.createNullPrincipal(test.input.OA);
|
|
let sp = E10SUtils.serializePrincipal(p);
|
|
// Not sure why cppjson is adding a \n here
|
|
let spr = atob(sp).replace(nullReplaceRegex, NULL_REPLACE);
|
|
is(
|
|
test.expected,
|
|
spr,
|
|
"Expected serialized object for " + JSON.stringify(test.input)
|
|
);
|
|
let dp = E10SUtils.deserializePrincipal(sp);
|
|
|
|
// Check all the origin attributes
|
|
for (let key in test.input.OA) {
|
|
is(
|
|
dp.originAttributes[key],
|
|
test.input.OA[key],
|
|
"Ensure value of " + key + " is " + test.input.OA[key]
|
|
);
|
|
}
|
|
}
|
|
});
|
|
|
|
add_task(async function test_contentPrincipal() {
|
|
const contentId = "1";
|
|
// fields
|
|
const codebase = 0;
|
|
// const domain = 1;
|
|
const suffix = 2;
|
|
// const csp = 3;
|
|
|
|
/*
|
|
This test should NOT be resilient to changes in versioning,
|
|
however it exists purely to verify the code doesn't unintentionally change without updating versioning and migration code.
|
|
*/
|
|
let tests = [
|
|
{
|
|
input: { uri: "http://example.com/", OA: {} },
|
|
expected: `{"${contentId}":{"${codebase}":"http://example.com/"}}`,
|
|
},
|
|
{
|
|
input: { uri: "http://mozilla1.com/", OA: {} },
|
|
expected: `{"${contentId}":{"${codebase}":"http://mozilla1.com/"}}`,
|
|
},
|
|
{
|
|
input: { uri: "http://mozilla2.com/", OA: { userContextId: 0 } },
|
|
expected: `{"${contentId}":{"${codebase}":"http://mozilla2.com/"}}`,
|
|
},
|
|
{
|
|
input: { uri: "http://mozilla3.com/", OA: { userContextId: 2 } },
|
|
expected: `{"${contentId}":{"${codebase}":"http://mozilla3.com/","${suffix}":"^userContextId=2"}}`,
|
|
},
|
|
{
|
|
input: { uri: "http://mozilla4.com/", OA: { privateBrowsingId: 1 } },
|
|
expected: `{"${contentId}":{"${codebase}":"http://mozilla4.com/","${suffix}":"^privateBrowsingId=1"}}`,
|
|
},
|
|
{
|
|
input: { uri: "http://mozilla5.com/", OA: { privateBrowsingId: 0 } },
|
|
expected: `{"${contentId}":{"${codebase}":"http://mozilla5.com/"}}`,
|
|
},
|
|
];
|
|
|
|
for (let test of tests) {
|
|
let uri = Services.io.newURI(test.input.uri);
|
|
let p = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
uri,
|
|
test.input.OA
|
|
);
|
|
let sp = E10SUtils.serializePrincipal(p);
|
|
is(
|
|
test.expected,
|
|
atob(sp),
|
|
"Expected serialized object for " + test.input.uri
|
|
);
|
|
is(
|
|
btoa(test.expected),
|
|
sp,
|
|
"Expected serialized string for " + test.input.uri
|
|
);
|
|
let dp = E10SUtils.deserializePrincipal(sp);
|
|
is(dp.URI.spec, test.input.uri, "Ensure spec is the same");
|
|
|
|
// Check all the origin attributes
|
|
for (let key in test.input.OA) {
|
|
is(
|
|
dp.originAttributes[key],
|
|
test.input.OA[key],
|
|
"Ensure value of " + key + " is " + test.input.OA[key]
|
|
);
|
|
}
|
|
}
|
|
});
|
|
|
|
add_task(async function test_systemPrincipal() {
|
|
const systemId = "3";
|
|
/*
|
|
This test should NOT be resilient to changes in versioning,
|
|
however it exists purely to verify the code doesn't unintentionally change without updating versioning and migration code.
|
|
*/
|
|
const expected = `{"${systemId}":{}}`;
|
|
|
|
let p = Services.scriptSecurityManager.getSystemPrincipal();
|
|
let sp = E10SUtils.serializePrincipal(p);
|
|
is(expected, atob(sp), "Expected serialized object for system principal");
|
|
is(btoa(expected), sp, "Expected serialized string for system principal");
|
|
let dp = E10SUtils.deserializePrincipal(sp);
|
|
is(
|
|
dp,
|
|
Services.scriptSecurityManager.getSystemPrincipal(),
|
|
"Deserialized the system principal"
|
|
);
|
|
});
|