159 lines
3.9 KiB
JavaScript
159 lines
3.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests origin attributes partitionKey pattern matching.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
function testMatch(oa, pattern, shouldMatch = true) {
|
|
let msg = `Origin attributes should ${
|
|
shouldMatch ? "match" : "not match"
|
|
} pattern.`;
|
|
msg += ` oa: ${JSON.stringify(oa)} - pattern: ${JSON.stringify(pattern)}`;
|
|
Assert.equal(
|
|
ChromeUtils.originAttributesMatchPattern(oa, pattern),
|
|
shouldMatch,
|
|
msg
|
|
);
|
|
}
|
|
|
|
function getPartitionKey(scheme, baseDomain, port) {
|
|
if (!scheme || !baseDomain) {
|
|
return "";
|
|
}
|
|
return `(${scheme},${baseDomain}${port ? `,${port}` : ``})`;
|
|
}
|
|
|
|
function getOAWithPartitionKey(scheme, baseDomain, port, oa = {}) {
|
|
oa.partitionKey = getPartitionKey(scheme, baseDomain, port);
|
|
return oa;
|
|
}
|
|
|
|
/**
|
|
* Tests that an OriginAttributesPattern which is empty or only has an empty
|
|
* partitionKeyPattern matches any partitionKey.
|
|
*/
|
|
add_task(async function test_empty_pattern_matches_any() {
|
|
let list = [
|
|
getOAWithPartitionKey("https", "example.com"),
|
|
getOAWithPartitionKey("http", "example.net", 8080),
|
|
getOAWithPartitionKey(),
|
|
];
|
|
|
|
for (let oa of list) {
|
|
testMatch(oa, {});
|
|
testMatch(oa, { partitionKeyPattern: {} });
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Tests that if a partitionKeyPattern is passed, but the partitionKey is
|
|
* invalid, the pattern match will always fail.
|
|
*/
|
|
add_task(async function test_invalid_pk() {
|
|
let list = [
|
|
"()",
|
|
"(,,)",
|
|
"(https)",
|
|
"(https,,)",
|
|
"(example.com)",
|
|
"(http,example.com,invalid)",
|
|
"(http,example.com,8000,1000)",
|
|
].map(partitionKey => ({ partitionKey }));
|
|
|
|
for (let oa of list) {
|
|
testMatch(oa, {});
|
|
testMatch(oa, { partitionKeyPattern: {} });
|
|
testMatch(
|
|
oa,
|
|
{ partitionKeyPattern: { baseDomain: "example.com" } },
|
|
false
|
|
);
|
|
testMatch(oa, { partitionKeyPattern: { scheme: "https" } }, false);
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Tests that if a pattern sets "partitionKey" it takes precedence over "partitionKeyPattern".
|
|
*/
|
|
add_task(async function test_string_overwrites_pattern() {
|
|
let oa = getOAWithPartitionKey("https", "example.com", 8080, {
|
|
userContextId: 2,
|
|
});
|
|
|
|
testMatch(oa, { partitionKey: oa.partitionKey });
|
|
testMatch(oa, {
|
|
partitionKey: oa.partitionKey,
|
|
partitionKeyPattern: { baseDomain: "example.com" },
|
|
});
|
|
testMatch(oa, {
|
|
partitionKey: oa.partitionKey,
|
|
partitionKeyPattern: { baseDomain: "example.net" },
|
|
});
|
|
testMatch(
|
|
oa,
|
|
{
|
|
partitionKey: getPartitionKey("https", "example.net"),
|
|
partitionKeyPattern: { scheme: "https", baseDomain: "example.com" },
|
|
},
|
|
false
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Tests that we can match parts of a partitionKey by setting
|
|
* partitionKeyPattern.
|
|
*/
|
|
add_task(async function test_pattern() {
|
|
let a = getOAWithPartitionKey("https", "example.com", 8080, {
|
|
userContextId: 2,
|
|
});
|
|
let b = getOAWithPartitionKey("https", "example.com", undefined, {
|
|
privateBrowsingId: 1,
|
|
});
|
|
|
|
for (let oa of [a, b]) {
|
|
// Match
|
|
testMatch(oa, { partitionKeyPattern: { scheme: "https" } });
|
|
testMatch(oa, {
|
|
partitionKeyPattern: { scheme: "https", baseDomain: "example.com" },
|
|
});
|
|
testMatch(
|
|
oa,
|
|
{
|
|
partitionKeyPattern: {
|
|
scheme: "https",
|
|
baseDomain: "example.com",
|
|
port: 8080,
|
|
},
|
|
},
|
|
oa == a
|
|
);
|
|
testMatch(oa, {
|
|
partitionKeyPattern: { baseDomain: "example.com" },
|
|
});
|
|
testMatch(
|
|
oa,
|
|
{
|
|
partitionKeyPattern: { port: 8080 },
|
|
},
|
|
oa == a
|
|
);
|
|
|
|
// Mismatch
|
|
testMatch(oa, { partitionKeyPattern: { scheme: "http" } }, false);
|
|
testMatch(
|
|
oa,
|
|
{ partitionKeyPattern: { baseDomain: "example.net" } },
|
|
false
|
|
);
|
|
testMatch(oa, { partitionKeyPattern: { port: 8443 } }, false);
|
|
testMatch(
|
|
oa,
|
|
{ partitionKeyPattern: { scheme: "https", baseDomain: "example.net" } },
|
|
false
|
|
);
|
|
}
|
|
});
|