mirror of
https://github.com/daijro/camoufox.git
synced 2026-09-08 08:00:53 +00:00
PR #562 added a `media:spoof_codecs` read on the C++ side -- MaskConfig::GetBool("media:spoof_codecs") in MP4Decoder and MatroskaDecoder -- but never declared the key in settings/. Since validate_config() drops any key it does not recognise, the documented usage was inert: AsyncCamoufox(config={"media:spoof_codecs": True}) -> "Skipping unknown patch media:spoof_codecs : True" The key never reached the browser, so the feature could not be turned on through the supported path at all. Declared in both properties.json and camoucfg.jvv (bool, beside mediaDevices:enabled). The new test is the general form rather than a check for this one key: it scans patches/ and additions/ for MaskConfig::Get*/Has*("key") reads and fails when a key is not declared in settings/properties.json. A patch and its schema entry are two halves of one change, and shipping only one half is a mistake this project has now made in both directions -- canvas:seed (#721) and navigator.maxTouchPoints (#696) were declared but unconsumed; this one was consumed but undeclared. Across the tree the scan finds 63 reads against 109 declared keys, and media:spoof_codecs was the only gap. Note the runtime reads properties.json from the *installed browser bundle*, not the repo, so this fix only takes effect for a build packaged after it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GQgHHGRXNp29jr4xQjK7iv (cherry picked from commit 375b0fca4529a722220022c7993c030b83439db1)
114 lines
6.1 KiB
JSON
114 lines
6.1 KiB
JSON
[
|
|
{ "property": "navigator.userAgent", "type": "str" },
|
|
{ "property": "navigator.doNotTrack", "type": "str" },
|
|
{ "property": "navigator.appCodeName", "type": "str" },
|
|
{ "property": "navigator.appName", "type": "str" },
|
|
{ "property": "navigator.appVersion", "type": "str" },
|
|
{ "property": "navigator.oscpu", "type": "str" },
|
|
{ "property": "navigator.language", "type": "str" },
|
|
{ "property": "navigator.languages", "type": "array" },
|
|
{ "property": "navigator.platform", "type": "str" },
|
|
{ "property": "navigator.hardwareConcurrency", "type": "uint" },
|
|
{ "property": "navigator.product", "type": "str" },
|
|
{ "property": "navigator.productSub", "type": "str" },
|
|
{ "property": "navigator.maxTouchPoints", "type": "uint" },
|
|
{ "property": "navigator.cookieEnabled", "type": "bool" },
|
|
{ "property": "navigator.globalPrivacyControl", "type": "bool" },
|
|
{ "property": "navigator.buildID", "type": "str" },
|
|
{ "property": "navigator.onLine", "type": "bool" },
|
|
{ "property": "screen.availHeight", "type": "uint" },
|
|
{ "property": "screen.availWidth", "type": "uint" },
|
|
{ "property": "screen.availTop", "type": "uint" },
|
|
{ "property": "screen.availLeft", "type": "uint" },
|
|
{ "property": "screen.height", "type": "uint" },
|
|
{ "property": "screen.width", "type": "uint" },
|
|
{ "property": "screen.colorDepth", "type": "uint" },
|
|
{ "property": "screen.pixelDepth", "type": "uint" },
|
|
{ "property": "screen.pageXOffset", "type": "double" },
|
|
{ "property": "screen.pageYOffset", "type": "double" },
|
|
{ "property": "window.scrollMinX", "type": "int" },
|
|
{ "property": "window.scrollMinY", "type": "int" },
|
|
{ "property": "window.scrollMaxX", "type": "int" },
|
|
{ "property": "window.scrollMaxY", "type": "int" },
|
|
{ "property": "window.outerHeight", "type": "uint" },
|
|
{ "property": "window.outerWidth", "type": "uint" },
|
|
{ "property": "window.innerHeight", "type": "uint" },
|
|
{ "property": "window.innerWidth", "type": "uint" },
|
|
{ "property": "window.screenX", "type": "int" },
|
|
{ "property": "window.screenY", "type": "int" },
|
|
{ "property": "window.history.length", "type": "uint" },
|
|
{ "property": "window.devicePixelRatio", "type": "double" },
|
|
{ "property": "document.body.clientWidth", "type": "uint" },
|
|
{ "property": "document.body.clientHeight", "type": "uint" },
|
|
{ "property": "document.body.clientTop", "type": "uint" },
|
|
{ "property": "document.body.clientLeft", "type": "uint" },
|
|
{ "property": "headers.User-Agent", "type": "str" },
|
|
{ "property": "headers.Accept-Language", "type": "str" },
|
|
{ "property": "headers.Accept-Encoding", "type": "str" },
|
|
{ "property": "webrtc:ipv4", "type": "str" },
|
|
{ "property": "webrtc:ipv6", "type": "str" },
|
|
{ "property": "webrtc:localipv4", "type": "str" },
|
|
{ "property": "webrtc:localipv6", "type": "str" },
|
|
{ "property": "pdfViewerEnabled", "type": "bool" },
|
|
{ "property": "battery:charging", "type": "bool" },
|
|
{ "property": "battery:chargingTime", "type": "double" },
|
|
{ "property": "battery:dischargingTime", "type": "double" },
|
|
{ "property": "battery:level", "type": "double" },
|
|
{ "property": "fonts", "type": "array" },
|
|
{ "property": "fonts:spacing_seed", "type": "uint" },
|
|
{ "property": "audio:seed", "type": "uint" },
|
|
{ "property": "canvas:seed", "type": "uint" },
|
|
{ "property": "geolocation:latitude", "type": "double" },
|
|
{ "property": "geolocation:longitude", "type": "double" },
|
|
{ "property": "geolocation:accuracy", "type": "double" },
|
|
{ "property": "timezone", "type": "str" },
|
|
{ "property": "locale:language", "type": "str" },
|
|
{ "property": "locale:region", "type": "str" },
|
|
{ "property": "locale:script", "type": "str" },
|
|
{ "property": "locale:all", "type": "str" },
|
|
{ "property": "humanize", "type": "bool" },
|
|
{ "property": "humanize:maxTime", "type": "double" },
|
|
{ "property": "humanize:minTime", "type": "double" },
|
|
{ "property": "showcursor", "type": "bool" },
|
|
{ "property": "AudioContext:sampleRate", "type": "uint" },
|
|
{ "property": "AudioContext:outputLatency", "type": "double" },
|
|
{ "property": "AudioContext:maxChannelCount", "type": "uint" },
|
|
{ "property": "webGl:renderer", "type": "str" },
|
|
{ "property": "webGl:vendor", "type": "str" },
|
|
{ "property": "webGl:supportedExtensions", "type": "array" },
|
|
{ "property": "webGl2:supportedExtensions", "type": "array" },
|
|
{ "property": "webGl:parameters", "type": "dict" },
|
|
{ "property": "webGl:parameters:blockIfNotDefined", "type": "bool" },
|
|
{ "property": "webGl2:parameters", "type": "dict" },
|
|
{ "property": "webGl2:parameters:blockIfNotDefined", "type": "bool" },
|
|
{ "property": "webGl:shaderPrecisionFormats", "type": "dict" },
|
|
{ "property": "webGl:shaderPrecisionFormats:blockIfNotDefined", "type": "bool" },
|
|
{ "property": "webGl2:shaderPrecisionFormats", "type": "dict" },
|
|
{ "property": "webGl2:shaderPrecisionFormats:blockIfNotDefined", "type": "bool" },
|
|
{ "property": "webGl:contextAttributes", "type": "dict" },
|
|
{ "property": "webGl2:contextAttributes", "type": "dict" },
|
|
{ "property": "canvas:aaOffset", "type": "int" },
|
|
{ "property": "canvas:aaCapOffset", "type": "bool" },
|
|
{ "property": "voices", "type": "array" },
|
|
{ "property": "voices:blockIfNotDefined", "type": "bool" },
|
|
{ "property": "voices:fakeCompletion", "type": "bool" },
|
|
{ "property": "voices:fakeCompletion:charsPerSecond", "type": "double" },
|
|
{ "property": "mediaDevices:micros", "type": "uint" },
|
|
{ "property": "mediaDevices:webcams", "type": "uint" },
|
|
{ "property": "mediaDevices:speakers", "type": "uint" },
|
|
{ "property": "mediaDevices:enabled", "type": "bool" },
|
|
{ "property": "media:spoof_codecs", "type": "bool" },
|
|
{ "property": "allowMainWorld", "type": "bool" },
|
|
{ "property": "disableWorldIsolation", "type": "bool" },
|
|
{ "property": "allowAddonNewtab", "type": "bool" },
|
|
{ "property": "forceScopeAccess", "type": "bool" },
|
|
|
|
{ "property": "disableTheming", "type": "bool" },
|
|
{ "property": "disableInstantAnimations", "type": "bool" },
|
|
{ "property": "memorysaver", "type": "bool" },
|
|
{ "property": "addons", "type": "array" },
|
|
{ "property": "certificatePaths", "type": "array" },
|
|
{ "property": "certificates", "type": "array" },
|
|
{ "property": "debug", "type": "bool" }
|
|
]
|