@ai-ecoverse/slicc-browsers 1.20.2 → 1.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extension-frame.mjs +69 -21
- package/guard-vectors.json +1 -1
- package/package.json +2 -2
package/extension-frame.mjs
CHANGED
|
@@ -938,7 +938,48 @@ async function driveCast(client, page, frameMs) {
|
|
|
938
938
|
};
|
|
939
939
|
}
|
|
940
940
|
|
|
941
|
-
|
|
941
|
+
function classifyRevealOverlap(
|
|
942
|
+
captureStartedAt,
|
|
943
|
+
revealAt,
|
|
944
|
+
pendingWhenRevealAcknowledged,
|
|
945
|
+
captureSettledAt
|
|
946
|
+
) {
|
|
947
|
+
if (typeof captureStartedAt !== 'number' || typeof revealAt !== 'number') return 'unknown';
|
|
948
|
+
if (revealAt <= captureStartedAt) return 'before';
|
|
949
|
+
if (pendingWhenRevealAcknowledged) return 'during';
|
|
950
|
+
if (typeof captureSettledAt === 'number' && captureSettledAt < revealAt) return 'after';
|
|
951
|
+
return 'unknown';
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
function revealRaceVerdict(overlap, side, ok, shownRefused) {
|
|
955
|
+
if (overlap === 'during' || overlap === 'before') return side === 'control' ? ok : shownRefused;
|
|
956
|
+
if (overlap === 'after') return ok || shownRefused;
|
|
957
|
+
return false;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
async function finishReveal(
|
|
961
|
+
client,
|
|
962
|
+
reader,
|
|
963
|
+
page,
|
|
964
|
+
observer,
|
|
965
|
+
frameMs,
|
|
966
|
+
{ ok, text, overlap, revealRacePass }
|
|
967
|
+
) {
|
|
968
|
+
const revealedPress = await click(client, reader, page, observer);
|
|
969
|
+
await style(reader, observer, 'hidden', frameMs);
|
|
970
|
+
const rehidden = await shot(client, page);
|
|
971
|
+
return {
|
|
972
|
+
revealedShot: ok,
|
|
973
|
+
revealedRefusal: text,
|
|
974
|
+
revealOverlap: overlap,
|
|
975
|
+
revealRacePass,
|
|
976
|
+
revealedClick: revealedPress.ok,
|
|
977
|
+
revealedClickRefusal: refusal(revealedPress.out),
|
|
978
|
+
rehiddenShot: rehidden.ok,
|
|
979
|
+
};
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
async function attemptRevealCapture(client, reader, page, observer, side) {
|
|
942
983
|
const captureStartedAt = await observe(reader, observer, 'performance.now()');
|
|
943
984
|
let captureSettled = false;
|
|
944
985
|
let captureSettledAt;
|
|
@@ -963,31 +1004,38 @@ export async function driveReveal(client, reader, page, observer, frameMs, missi
|
|
|
963
1004
|
const out = await pending;
|
|
964
1005
|
const ok = out.ok && typeof out.result?.data === 'string' && out.result.data.length > 0;
|
|
965
1006
|
const text = refusal(out);
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1007
|
+
const overlap = classifyRevealOverlap(
|
|
1008
|
+
captureStartedAt,
|
|
1009
|
+
revealAt,
|
|
1010
|
+
pendingWhenRevealAcknowledged,
|
|
1011
|
+
captureSettledAt
|
|
1012
|
+
);
|
|
972
1013
|
const shownRefused = Boolean(text && (text === SHOWN || /^slicc: refused/.test(text)));
|
|
973
|
-
let revealRacePass = false;
|
|
974
|
-
if (overlap === 'during' || overlap === 'before')
|
|
975
|
-
revealRacePass = side === 'control' ? ok : shownRefused;
|
|
976
|
-
else if (overlap === 'after') revealRacePass = ok || shownRefused;
|
|
977
|
-
const revealedPress = await click(client, reader, page, observer);
|
|
978
|
-
await style(reader, observer, 'hidden', frameMs);
|
|
979
|
-
const rehidden = await shot(client, page);
|
|
980
1014
|
return {
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
revealRacePass,
|
|
985
|
-
revealedClick: revealedPress.ok,
|
|
986
|
-
revealedClickRefusal: refusal(revealedPress.out),
|
|
987
|
-
rehiddenShot: rehidden.ok,
|
|
1015
|
+
ok,
|
|
1016
|
+
text,
|
|
1017
|
+
overlap,
|
|
1018
|
+
revealRacePass: revealRaceVerdict(overlap, side, ok, shownRefused),
|
|
988
1019
|
};
|
|
989
1020
|
}
|
|
990
1021
|
|
|
1022
|
+
export async function driveReveal(client, reader, page, observer, frameMs, missing, side) {
|
|
1023
|
+
const maxAttempts = 3;
|
|
1024
|
+
let last = null;
|
|
1025
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
1026
|
+
last = await attemptRevealCapture(client, reader, page, observer, side);
|
|
1027
|
+
if (last.overlap !== 'unknown')
|
|
1028
|
+
return finishReveal(client, reader, page, observer, frameMs, last);
|
|
1029
|
+
if (attempt < maxAttempts) await style(reader, observer, 'hidden', frameMs);
|
|
1030
|
+
}
|
|
1031
|
+
missing.push(`reveal/capture overlap unproven (${maxAttempts} attempts)`);
|
|
1032
|
+
return finishReveal(client, reader, page, observer, frameMs, {
|
|
1033
|
+
...last,
|
|
1034
|
+
overlap: 'unknown',
|
|
1035
|
+
revealRacePass: false,
|
|
1036
|
+
});
|
|
1037
|
+
}
|
|
1038
|
+
|
|
991
1039
|
function frameObservations({ pageAttached, origin, read, leaks, picture, input, captures }) {
|
|
992
1040
|
return {
|
|
993
1041
|
exists: true,
|
package/guard-vectors.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-browsers",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.3",
|
|
4
4
|
"description": "SLICC's shared browser catalog, JSON schemas and discovery conformance corpus",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"test:unit:guard": "mkdir -p coverage/unit && node --experimental-vm-modules --no-warnings --experimental-test-coverage --test --test-concurrency=1 --test-coverage-include=guard-runner.mjs --test-coverage-include=guard-driver.mjs --test-coverage-include=extension-frame.mjs --test-coverage-include=fixture-server.mjs --test-coverage-include=fixture-client.mjs --test-coverage-include=observer-target.mjs --test-coverage-include=frame-read.mjs --test-coverage-include=bfcache-restore.mjs --test-coverage-include=protected-error-page.mjs --test-coverage-include=unparseable-url.mjs --test-coverage-include=scripts/browser-runner.mjs --test-coverage-include=scripts/validate.mjs --test-reporter=lcov --test-reporter-destination=coverage/unit/guard.lcov test/unit/guard-*.test.mjs && slicc-diff-cover coverage/unit/guard.lcov"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@ai-ecoverse/slicc-cdp": "1.46.
|
|
87
|
+
"@ai-ecoverse/slicc-cdp": "1.46.2",
|
|
88
88
|
"@ai-ecoverse/slicc-shared-web": "2.13.10",
|
|
89
89
|
"@biomejs/biome": "2.6.4",
|
|
90
90
|
"ajv": "8.20.0",
|