implement Milestone 11: Camera interface with permission and user gesture requirements

This commit is contained in:
2026-01-18 15:38:58 +01:00
parent 0c19247838
commit 5eb1113c1a
7 changed files with 1492 additions and 11 deletions

View File

@@ -2,8 +2,8 @@
"name": "Lua Sandbox Security Tests",
"summary": {
"failed": 0,
"passed": 42,
"total": 42
"passed": 82,
"total": 82
},
"tests": [
{
@@ -77,7 +77,7 @@
"status": "passed"
},
{
"duration_ms": 111,
"duration_ms": 106,
"name": "UserGestureTracking",
"status": "passed"
},
@@ -107,7 +107,7 @@
"status": "passed"
},
{
"duration_ms": 14,
"duration_ms": 13,
"name": "AuditLogThreadSafe",
"status": "passed"
},
@@ -122,7 +122,7 @@
"status": "passed"
},
{
"duration_ms": 16,
"duration_ms": 17,
"name": "RateLimiterRefill",
"status": "passed"
},
@@ -182,17 +182,17 @@
"status": "passed"
},
{
"duration_ms": 107,
"duration_ms": 108,
"name": "SetTimeoutFires",
"status": "passed"
},
{
"duration_ms": 237,
"duration_ms": 234,
"name": "SetIntervalFires",
"status": "passed"
},
{
"duration_ms": 155,
"duration_ms": 158,
"name": "ClearTimeoutCancels",
"status": "passed"
},
@@ -212,10 +212,210 @@
"status": "passed"
},
{
"duration_ms": 62,
"duration_ms": 63,
"name": "MinIntervalEnforced",
"status": "passed"
},
{
"duration_ms": 0,
"name": "JsonDecodeValid",
"status": "passed"
},
{
"duration_ms": 0,
"name": "JsonDecodeRejectsDeep",
"status": "passed"
},
{
"duration_ms": 0,
"name": "JsonEncodeValid",
"status": "passed"
},
{
"duration_ms": 0,
"name": "JsonEncodeDetectsCycles",
"status": "passed"
},
{
"duration_ms": 0,
"name": "JsonRejectsTooLarge",
"status": "passed"
},
{
"duration_ms": 0,
"name": "CryptoRandomBytes",
"status": "passed"
},
{
"duration_ms": 0,
"name": "CryptoHashSHA256",
"status": "passed"
},
{
"duration_ms": 0,
"name": "CryptoHMAC",
"status": "passed"
},
{
"duration_ms": 0,
"name": "SecureMathRandom",
"status": "passed"
},
{
"duration_ms": 1,
"name": "VirtualFSReadWrite",
"status": "passed"
},
{
"duration_ms": 0,
"name": "VirtualFSBlocksTraversal",
"status": "passed"
},
{
"duration_ms": 0,
"name": "VirtualFSEnforcesQuota",
"status": "passed"
},
{
"duration_ms": 0,
"name": "VirtualFSCleansUpTemp",
"status": "passed"
},
{
"duration_ms": 1,
"name": "VirtualFSList",
"status": "passed"
},
{
"duration_ms": 4,
"name": "VirtualFSStat",
"status": "passed"
},
{
"duration_ms": 1,
"name": "VirtualFSLuaIntegration",
"status": "passed"
},
{
"duration_ms": 1,
"name": "VirtualFSMaxFileSize",
"status": "passed"
},
{
"duration_ms": 16,
"name": "DatabaseCreatesTables",
"status": "passed"
},
{
"duration_ms": 13,
"name": "DatabasePreparedStatements",
"status": "passed"
},
{
"duration_ms": 1,
"name": "DatabaseBlocksAttach",
"status": "passed"
},
{
"duration_ms": 1,
"name": "DatabaseBlocksDangerousPragma",
"status": "passed"
},
{
"duration_ms": 16,
"name": "DatabaseMultiple",
"status": "passed"
},
{
"duration_ms": 0,
"name": "DatabaseLuaIntegration",
"status": "passed"
},
{
"duration_ms": 0,
"name": "DatabaseInvalidNames",
"status": "passed"
},
{
"duration_ms": 25,
"name": "DatabaseLastInsertAndChanges",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkBlocksPrivateIP",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkBlocksPlainHttp",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkRequiresHttps",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkEnforcesDomainWhitelist",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkUrlParsing",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkBlocksMetadata",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkRequestLimits",
"status": "passed"
},
{
"duration_ms": 0,
"name": "NetworkLuaIntegration",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketUrlValidation",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketConnectionLimits",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketBlocksPrivateIP",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketDomainWhitelist",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketMessageLimits",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketCloseAll",
"status": "passed"
},
{
"duration_ms": 0,
"name": "WebSocketLuaIntegration",
"status": "passed"
}
],
"timestamp": "2026-01-18T13:19:38Z"
"timestamp": "2026-01-18T14:29:44Z"
}